{"version":3,"file":"abbf9bf1-117e15fb4fe5d49eccc4.js","mappings":";0fAWA,SAASA,EAAQC,EAAQC,GAAkB,IAAIC,EAAOC,OAAOD,KAAKF,GAAS,GAAIG,OAAOC,sBAAuB,CAAE,IAAIC,EAAUF,OAAOC,sBAAsBJ,GAAaC,IAAkBI,EAAUA,EAAQC,QAAO,SAAUC,GAAO,OAAOJ,OAAOK,yBAAyBR,EAAQO,GAAKE,eAAkBP,EAAKQ,KAAKC,MAAMT,EAAMG,GAAY,OAAOH,EAElV,SAASU,EAAcC,GAAU,IAAK,IAAIC,EAAI,EAAGA,EAAIC,UAAUC,OAAQF,IAAK,CAAE,IAAIG,EAAyB,MAAhBF,UAAUD,GAAaC,UAAUD,GAAK,GAAQA,EAAI,EAAKf,EAAQI,OAAOc,IAAS,GAAMC,SAAQ,SAAUC,IAAO,OAAgBN,EAAQM,EAAKF,EAAOE,OAAsBhB,OAAOiB,0BAA6BjB,OAAOkB,iBAAiBR,EAAQV,OAAOiB,0BAA0BH,IAAmBlB,EAAQI,OAAOc,IAASC,SAAQ,SAAUC,GAAOhB,OAAOmB,eAAeT,EAAQM,EAAKhB,OAAOK,yBAAyBS,EAAQE,OAAe,OAAON,EAE7gB,SAASU,EAAaC,GAAW,IAAIC,EAErC,WAAuC,GAAuB,oBAAZC,UAA4BA,QAAQC,UAAW,OAAO,EAAO,GAAID,QAAQC,UAAUC,KAAM,OAAO,EAAO,GAAqB,mBAAVC,MAAsB,OAAO,EAAM,IAAsF,OAAhFC,QAAQC,UAAUC,QAAQC,KAAKP,QAAQC,UAAUG,QAAS,IAAI,iBAAyB,EAAQ,MAAOI,GAAK,OAAO,GAF9PC,GAA6B,OAAO,WAAkC,IAAsCC,EAAlCC,GAAQ,OAAgBb,GAAkB,GAAIC,EAA2B,CAAE,IAAIa,GAAY,OAAgBC,MAAMC,YAAaJ,EAASV,QAAQC,UAAUU,EAAOtB,UAAWuB,QAAqBF,EAASC,EAAM1B,MAAM4B,KAAMxB,WAAc,OAAO,OAA2BwB,KAAMH,IAI5Z,SAASK,EAA2BC,EAAGC,GAAkB,IAAIC,EAAuB,oBAAXC,QAA0BH,EAAEG,OAAOC,WAAaJ,EAAE,cAAe,IAAKE,EAAI,CAAE,GAAIG,MAAMC,QAAQN,KAAOE,EAE9K,SAAqCF,EAAGO,GAAU,IAAKP,EAAG,OAAQ,GAAiB,iBAANA,EAAgB,OAAOQ,EAAkBR,EAAGO,GAAS,IAAIE,EAAIhD,OAAO4B,UAAUqB,SAASnB,KAAKS,GAAGW,MAAM,GAAI,GAAc,WAANF,GAAkBT,EAAEF,cAAaW,EAAIT,EAAEF,YAAYc,MAAM,GAAU,QAANH,GAAqB,QAANA,EAAa,OAAOJ,MAAMQ,KAAKb,GAAI,GAAU,cAANS,GAAqB,2CAA2CK,KAAKL,GAAI,OAAOD,EAAkBR,EAAGO,GAFnOQ,CAA4Bf,KAAOC,GAAkBD,GAAyB,iBAAbA,EAAE1B,OAAqB,CAAM4B,IAAIF,EAAIE,GAAI,IAAI9B,EAAI,EAAO4C,EAAI,aAAiB,MAAO,CAAEC,EAAGD,EAAGP,EAAG,WAAe,OAAIrC,GAAK4B,EAAE1B,OAAe,CAAE4C,MAAM,GAAe,CAAEA,MAAM,EAAOC,MAAOnB,EAAE5B,OAAWoB,EAAG,SAAW4B,GAAM,MAAMA,GAAOC,EAAGL,GAAO,MAAM,IAAIM,UAAU,yIAA4I,IAA6CC,EAAzCC,GAAmB,EAAMC,GAAS,EAAY,MAAO,CAAER,EAAG,WAAef,EAAKA,EAAGX,KAAKS,IAAOS,EAAG,WAAe,IAAIiB,EAAOxB,EAAGyB,OAAsC,OAA9BH,EAAmBE,EAAKR,KAAaQ,GAASlC,EAAG,SAAWoC,GAAOH,GAAS,EAAMF,EAAMK,GAAQP,EAAG,WAAe,IAAWG,GAAiC,MAAbtB,EAAG2B,QAAgB3B,EAAG2B,SAAY,QAAU,GAAIJ,EAAQ,MAAMF,KAIz9B,SAASf,EAAkBsB,EAAKC,IAAkB,MAAPA,GAAeA,EAAMD,EAAIxD,UAAQyD,EAAMD,EAAIxD,QAAQ,IAAK,IAAIF,EAAI,EAAG4D,EAAO,IAAI3B,MAAM0B,GAAM3D,EAAI2D,EAAK3D,IAAO4D,EAAK5D,GAAK0D,EAAI1D,GAAM,OAAO4D,EAWhL,IAAIC,EAAwB,WAC1B,SAASA,KACP,OAAgBpC,KAAMoC,GAEtBpC,KAAKqC,SAAW,KAChBrC,KAAKsC,QAAU,IAAIC,IACnBvC,KAAKwC,UAAW,EAChBxC,KAAKyC,eAAYC,EAmMnB,OAhMA,OAAaN,EAAU,CAAC,CACtBxD,IAAK,UACL0C,MAAO,SAAiBqB,EAAOC,EAAOC,EAAMC,GAC1C,IAAIC,EAAYH,EAAMI,UAAUF,GAC5BG,EAAWL,EAAMM,SACrBH,EAAUpE,SAAQ,SAAUwE,GAC1B,OAAOA,EAAG,CACRR,MAAOA,EACPS,QAASR,EAAMQ,QACfH,SAAUA,EACVI,YAAaC,KAAKC,IAAIV,EAAOD,EAAMY,MAAOP,UAI/C,CACDrE,IAAK,WACL0C,MAAO,WACL,IAAImC,EAAQzD,KAERA,KAAKqC,WAITrC,KAAKwC,UAAW,EAChBxC,KAAKqC,SAAW,EAAAqB,EAAA,KAAsBC,QAAQ,WAC5CF,EAAMG,UAENH,EAAMpB,SAAW,KAEboB,EAAMjB,UACRiB,EAAMI,iBAIX,CACDjF,IAAK,UACL0C,MAAO,WACL,IAAIwC,EAAS9D,KAET6C,EAAOrE,UAAUC,OAAS,QAAsBiE,IAAjBlE,UAAU,GAAmBA,UAAU,GAAKuF,KAAKC,MAChFC,EAAY,EAEhBjE,KAAKsC,QAAQ3D,SAAQ,SAAUiE,EAAOD,GACpC,GAAKC,EAAMsB,SAAYtB,EAAMuB,MAAM1F,OAAnC,CASA,IALA,IAGI2F,EAHAD,EAAQvB,EAAMuB,MACd5F,EAAI4F,EAAM1F,OAAS,EACnB4F,GAAO,EAGJ9F,GAAK,IAAKA,GACf6F,EAAOD,EAAM5F,IAEJ+F,SACHF,EAAKG,OAAS3B,EAAMM,WACtBN,EAAMM,SAAWkB,EAAKG,QAGxBH,EAAKI,KAAK3B,GACVwB,GAAO,IAEPF,EAAM5F,GAAK4F,EAAMA,EAAM1F,OAAS,GAChC0F,EAAMM,OAINJ,IACF1B,EAAM0B,OAENP,EAAOY,QAAQ/B,EAAOC,EAAOC,EAAM,aAGhCsB,EAAM1F,SACTmE,EAAMsB,SAAU,EAEhBJ,EAAOY,QAAQ/B,EAAOC,EAAOC,EAAM,YAEnCD,EAAMQ,SAAU,GAGlBa,GAAaE,EAAM1F,WAGrBuB,KAAKyC,UAAYI,EAEC,IAAdoB,IACFjE,KAAKwC,UAAW,KAGnB,CACD5D,IAAK,YACL0C,MAAO,SAAmBqB,GACxB,IAAIgC,EAAS3E,KAAKsC,QACdM,EAAQ+B,EAAOC,IAAIjC,GAevB,OAbKC,IACHA,EAAQ,CACNsB,SAAS,EACTd,SAAS,EACTe,MAAO,GACPnB,UAAW,CACT6B,SAAU,GACVC,SAAU,KAGdH,EAAOI,IAAIpC,EAAOC,IAGbA,IAER,CACDhE,IAAK,SACL0C,MAAO,SAAgBqB,EAAOqC,EAAOC,GACnCjF,KAAKkF,UAAUvC,GAAOK,UAAUgC,GAAO7G,KAAK8G,KAE7C,CACDrG,IAAK,MACL0C,MAAO,SAAaqB,EAAOwB,GACzB,IAAIgB,EAEChB,GAAUA,EAAM1F,SAIpB0G,EAAwBnF,KAAKkF,UAAUvC,GAAOwB,OAAOhG,KAAKC,MAAM+G,GAAuB,OAAmBhB,MAE5G,CACDvF,IAAK,MACL0C,MAAO,SAAaqB,GAClB,OAAO3C,KAAKkF,UAAUvC,GAAOwB,MAAM1F,OAAS,IAE7C,CACDG,IAAK,QACL0C,MAAO,SAAeqB,GACpB,IAAIC,EAAQ5C,KAAKsC,QAAQsC,IAAIjC,GAExBC,IAILA,EAAMsB,SAAU,EAChBtB,EAAMY,MAAQO,KAAKC,MACnBpB,EAAMM,SAAWN,EAAMuB,MAAMiB,QAAO,SAAUC,EAAKC,GACjD,OAAOhC,KAAKiC,IAAIF,EAAKC,EAAIE,aACxB,GAEHxF,KAAK6D,cAEN,CACDjF,IAAK,UACL0C,MAAO,SAAiBqB,GACtB,IAAK3C,KAAKwC,SACR,OAAO,EAGT,IAAII,EAAQ5C,KAAKsC,QAAQsC,IAAIjC,GAE7B,SAAKC,GAAUA,EAAMsB,SAAYtB,EAAMuB,MAAM1F,UAM9C,CACDG,IAAK,OACL0C,MAAO,SAAcqB,GACnB,IAAIC,EAAQ5C,KAAKsC,QAAQsC,IAAIjC,GAE7B,GAAKC,GAAUA,EAAMuB,MAAM1F,OAA3B,CAOA,IAHA,IAAI0F,EAAQvB,EAAMuB,MACd5F,EAAI4F,EAAM1F,OAAS,EAEhBF,GAAK,IAAKA,EACf4F,EAAM5F,GAAGkH,SAGX7C,EAAMuB,MAAQ,GAEdnE,KAAK0E,QAAQ/B,EAAOC,EAAOmB,KAAKC,MAAO,eAExC,CACDpF,IAAK,SACL0C,MAAO,SAAgBqB,GACrB,OAAO3C,KAAKsC,QAAQoD,OAAO/C,OAIxBP,EA1MmB,GA6MxBuD,EAAW,IAAIvD,EACfwD,EAAc,cACdC,EAAgB,CAClBC,QAAS,SAAiB9E,EAAM+E,EAAIC,GAClC,OAAOA,EAAS,GAAMD,EAAK/E,GAE7BiF,MAAO,SAAejF,EAAM+E,EAAIC,GAC9B,IAAIE,GAAK,OAAOlF,GAAQ4E,GAEpBO,EAAKD,EAAGE,QAAS,OAAOL,GAAMH,GAElC,OAAOO,GAAMA,EAAGC,MAAQD,EAAGE,IAAIH,EAAIF,GAAQM,YAAcP,GAE3DQ,OAAQ,SAAgBvF,EAAM+E,EAAIC,GAChC,OAAOhF,GAAQ+E,EAAK/E,GAAQgF,IAI5BQ,EAAyB,WAC3B,SAASA,EAAUC,EAAKnI,EAAQoI,EAAMX,IACpC,OAAgB/F,KAAMwG,GAEtB,IAAIG,EAAerI,EAAOoI,GAC1BX,GAAK,OAAQ,CAACU,EAAIV,GAAIA,EAAIY,EAAcF,EAAIzF,OAC5C,IAAIA,GAAO,OAAQ,CAACyF,EAAIzF,KAAM2F,EAAcZ,IAC5C/F,KAAKsE,SAAU,EACftE,KAAK4G,IAAMH,EAAItD,IAAM0C,EAAcY,EAAI3D,aAAe9B,GACtDhB,KAAK6G,QAAU,EAAAlH,EAAQ8G,EAAIK,SAAW,EAAAnH,EAAA,OACtCK,KAAK+G,OAASzD,KAAK0D,MAAMjD,KAAKC,OAASyC,EAAIQ,OAAS,IACpDjH,KAAKwF,UAAYxF,KAAKuE,OAASjB,KAAK0D,MAAMP,EAAIvD,UAC9ClD,KAAKkH,QAAUT,EAAIU,KACnBnH,KAAKoH,QAAU9I,EACf0B,KAAKqH,MAAQX,EACb1G,KAAKsH,MAAQtG,EACbhB,KAAKuH,IAAMxB,EACX/F,KAAKwH,eAAY9E,EAwFnB,OArFA,OAAa8D,EAAW,CAAC,CACvB5H,IAAK,SACL0C,MAAO,WACL,OAAOtB,KAAKsE,UAEb,CACD1F,IAAK,SACL0C,MAAO,SAAgBmF,EAAKV,EAAIlD,GAC9B,GAAI7C,KAAKsE,QAAS,CAChBtE,KAAK0E,SAAQ,GAEb,IAAIiC,EAAe3G,KAAKoH,QAAQpH,KAAKqH,OACjCI,EAAU5E,EAAO7C,KAAK+G,OACtBW,EAAS1H,KAAKwF,UAAYiC,EAC9BzH,KAAK+G,OAASlE,EACd7C,KAAKwF,UAAYlC,KAAK0D,MAAM1D,KAAKiC,IAAImC,EAAQjB,EAAIvD,WACjDlD,KAAKuE,QAAUkD,EACfzH,KAAKkH,QAAUT,EAAIU,KACnBnH,KAAKuH,KAAM,OAAQ,CAACd,EAAIV,GAAIA,EAAIY,EAAcF,EAAIzF,OAClDhB,KAAKsH,OAAQ,OAAQ,CAACb,EAAIzF,KAAM2F,EAAcZ,OAGjD,CACDnH,IAAK,SACL0C,MAAO,WACDtB,KAAKsE,UACPtE,KAAKwE,KAAKT,KAAKC,OACfhE,KAAKsE,SAAU,EAEftE,KAAK0E,SAAQ,MAGhB,CACD9F,IAAK,OACL0C,MAAO,SAAcuB,GACnB,IAMImD,EANAyB,EAAU5E,EAAO7C,KAAK+G,OACtB7D,EAAWlD,KAAKwF,UAChBkB,EAAO1G,KAAKqH,MACZrG,EAAOhB,KAAKsH,MACZH,EAAOnH,KAAKkH,MACZnB,EAAK/F,KAAKuH,IAId,GAFAvH,KAAKsE,QAAUtD,IAAS+E,IAAOoB,GAAQM,EAAUvE,IAE5ClD,KAAKsE,QAKR,OAJAtE,KAAKoH,QAAQV,GAAQX,OAErB/F,KAAK0E,SAAQ,GAKX+C,EAAU,EACZzH,KAAKoH,QAAQV,GAAQ1F,GAIvBgF,EAASyB,EAAUvE,EAAW,EAC9B8C,EAASmB,GAAQnB,EAAS,EAAI,EAAIA,EAASA,EAC3CA,EAAShG,KAAK6G,QAAQvD,KAAKC,IAAI,EAAGD,KAAKiC,IAAI,EAAGS,KAC9ChG,KAAKoH,QAAQV,GAAQ1G,KAAK4G,IAAI5F,EAAM+E,EAAIC,MAEzC,CACDpH,IAAK,OACL0C,MAAO,WACL,IAAIqG,EAAW3H,KAAKwH,YAAcxH,KAAKwH,UAAY,IACnD,OAAO,IAAII,SAAQ,SAAUC,EAAKC,GAChCH,EAASxJ,KAAK,CACZ0J,IAAKA,EACLC,IAAKA,SAIV,CACDlJ,IAAK,UACL0C,MAAO,SAAiByG,GAItB,IAHA,IAAIC,EAASD,EAAW,MAAQ,MAC5BJ,EAAW3H,KAAKwH,WAAa,GAExBjJ,EAAI,EAAGA,EAAIoJ,EAASlJ,OAAQF,IACnCoJ,EAASpJ,GAAGyJ,SAKXxB,EAzGoB,GA8G7B,EAAAyB,EAAA,IAAa,YAAa,CACxBhB,WAAOvE,EACPQ,SAAU,IACV4D,OAAQ,eACR3D,QAAIT,EACJ1B,UAAM0B,EACNyE,UAAMzE,EACNqD,QAAIrD,EACJI,UAAMJ,IAER,IAAIwF,EAAmBtK,OAAOD,KAAK,EAAAsK,EAAA,WACnC,EAAAA,EAAA,SAAkB,YAAa,CAC7BE,WAAW,EACXC,YAAY,EACZC,YAAa,SAAqBtH,GAChC,MAAgB,eAATA,GAAkC,eAATA,GAAkC,OAATA,KAG7D,EAAAkH,EAAA,IAAa,aAAc,CACzBK,OAAQ,CACNxF,KAAM,QACNyF,WAtBS,CAAC,QAAS,cAAe,oBAwBpCC,QAAS,CACP1F,KAAM,SACNyF,WA3BU,CAAC,IAAK,IAAK,cAAe,SAAU,cA8BlD,EAAAN,EAAA,SAAkB,aAAc,CAC9BE,UAAW,cAEb,EAAAF,EAAA,IAAa,cAAe,CAC1BQ,OAAQ,CACNC,UAAW,CACTxF,SAAU,MAGdyF,OAAQ,CACND,UAAW,CACTxF,SAAU,IAGd0F,KAAM,CACJC,WAAY,CACVP,OAAQ,CACNtH,KAAM,eAER8H,QAAS,CACPhG,KAAM,UACNI,SAAU,KAIhB6F,KAAM,CACJF,WAAY,CACVP,OAAQ,CACNvC,GAAI,eAEN+C,QAAS,CACPhG,KAAM,UACNgE,OAAQ,SACR3D,GAAI,SAAY6F,GACd,OAAW,EAAJA,QAOjB,IAAIC,EAA0B,WAC5B,SAASA,EAAWtG,EAAOuG,IACzB,OAAgBlJ,KAAMiJ,GAEtBjJ,KAAKmJ,OAASxG,EACd3C,KAAKoJ,YAAc,IAAI7G,IACvBvC,KAAKqJ,UAAUH,GA4HjB,OAzHA,OAAaD,EAAY,CAAC,CACxBrK,IAAK,YACL0C,MAAO,SAAmB4H,GACxB,IAAK,IAAA3K,GAAS2K,GAAd,CAIA,IAAII,EAAgBtJ,KAAKoJ,YACzBxL,OAAO2L,oBAAoBL,GAAQvK,SAAQ,SAAUC,GACnD,IAAI6H,EAAMyC,EAAOtK,GAEjB,IAAK,IAAAL,GAASkI,GAAd,CAIA,IAGI+C,EAHAzB,EAAW,GAEX0B,EAAYvJ,EAA2BgI,GAG3C,IACE,IAAKuB,EAAUrI,MAAOoI,EAAQC,EAAU7I,KAAKS,MAAO,CAClD,IAAIqI,EAASF,EAAMlI,MACnByG,EAAS2B,GAAUjD,EAAIiD,IAEzB,MAAOhI,GACP+H,EAAU9J,EAAE+B,GACZ,QACA+H,EAAUjI,MAGX,OAAQiF,EAAI8B,aAAe9B,EAAI8B,YAAc,CAAC3J,IAAMD,SAAQ,SAAU+H,GACjEA,IAAS9H,GAAQ0K,EAAcK,IAAIjD,IACrC4C,EAAcvE,IAAI2B,EAAMqB,aAK/B,CACDnJ,IAAK,kBACL0C,MAAO,SAAyBhD,EAAQsL,GACtC,IAAIC,EAAaD,EAAOE,QACpBA,EAiGV,SAA8BxL,EAAQuL,GACpC,IAAKA,EACH,OAGF,IAAIC,EAAUxL,EAAOwL,QAErB,IAAKA,EAEH,YADAxL,EAAOwL,QAAUD,GAIfC,EAAQC,UACVzL,EAAOwL,QAAUA,EAAUlM,OAAOoM,OAAO,GAAIF,EAAS,CACpDC,SAAS,EACTE,YAAa,MAIjB,OAAOH,EApHWI,CAAqB5L,EAAQuL,GAE3C,IAAKC,EACH,MAAO,GAGT,IAAIjB,EAAa7I,KAAKmK,kBAAkBL,EAASD,GAQjD,OANIA,EAAWE,SA0ErB,SAAkBlB,EAAYN,GAI5B,IAHA,IAAIrE,EAAU,GACVvG,EAAOC,OAAOD,KAAK4K,GAEdhK,EAAI,EAAGA,EAAIZ,EAAKc,OAAQF,IAAK,CACpC,IAAI6L,EAAOvB,EAAWlL,EAAKY,IAEvB6L,GAAQA,EAAK3B,UACfvE,EAAQ/F,KAAKiM,EAAKC,QAItB,OAAOzC,QAAQ0C,IAAIpG,GArFbqG,CAASjM,EAAOwL,QAAQG,YAAaJ,GAAYW,MAAK,WACpDlM,EAAOwL,QAAUD,KAChB,eAGEhB,IAER,CACDjK,IAAK,oBACL0C,MAAO,SAA2BhD,EAAQsL,GACxC,IAKIrL,EALA+K,EAAgBtJ,KAAKoJ,YACrBP,EAAa,GACb3E,EAAU5F,EAAO2L,cAAgB3L,EAAO2L,YAAc,IACtDQ,EAAQ7M,OAAOD,KAAKiM,GACpB/G,EAAOkB,KAAKC,MAGhB,IAAKzF,EAAIkM,EAAMhM,OAAS,EAAGF,GAAK,IAAKA,EAAG,CACtC,IAAImI,EAAO+D,EAAMlM,GAEjB,GAAuB,MAAnBmI,EAAKgE,OAAO,GAIhB,GAAa,YAAThE,EAAJ,CAKA,IAAIpF,EAAQsI,EAAOlD,GACfgC,EAAYxE,EAAQwC,GACpBD,EAAM6C,EAAc1E,IAAI8B,GAE5B,GAAIgC,EAAW,CACb,GAAIjC,GAAOiC,EAAUD,SAAU,CAC7BC,EAAUiC,OAAOlE,EAAKnF,EAAOuB,GAC7B,SAEA6F,EAAUjD,SAITgB,GAAQA,EAAIvD,UAKjBgB,EAAQwC,GAAQgC,EAAY,IAAIlC,EAAUC,EAAKnI,EAAQoI,EAAMpF,GAC7DuH,EAAW1K,KAAKuK,IALdpK,EAAOoI,GAAQpF,OAlBfuH,EAAW1K,KAAKC,MAAMyK,GAAY,OAAmB7I,KAAK4K,gBAAgBtM,EAAQsL,KA0BtF,OAAOf,IAER,CACDjK,IAAK,SACL0C,MAAO,SAAgBhD,EAAQsL,GAC7B,GAA8B,IAA1B5J,KAAKoJ,YAAYyB,KAArB,CAKA,IAAIhC,EAAa7I,KAAKmK,kBAAkB7L,EAAQsL,GAEhD,OAAIf,EAAWpK,QACbkH,EAASmF,IAAI9K,KAAKmJ,OAAQN,IACnB,QAFT,EANEjL,OAAOoM,OAAO1L,EAAQsL,OAarBX,EAlIqB,GA0K9B,SAAS8B,EAAUC,EAAOC,GACxB,IAAIC,EAAOF,GAASA,EAAMlB,SAAW,GACjCqB,EAAUD,EAAKC,QACf5H,OAAmBb,IAAbwI,EAAK3H,IAAoB0H,EAAkB,EACjD1F,OAAmB7C,IAAbwI,EAAK3F,IAAoB0F,EAAkB,EACrD,MAAO,CACLzH,MAAO2H,EAAU5F,EAAMhC,EACvB6H,IAAKD,EAAU5H,EAAMgC,GAwCzB,SAAS8F,EAAwB1I,EAAO2I,GACtC,IAII/M,EAAGgN,EAJH5N,EAAO,GAEP6N,EAAW7I,EAAM8I,uBAAuBH,GAI5C,IAAK/M,EAAI,EAAGgN,EAAOC,EAAS/M,OAAQF,EAAIgN,IAAQhN,EAC9CZ,EAAKQ,KAAKqN,EAASjN,GAAGmN,OAGxB,OAAO/N,EAGT,SAASgO,EAAYC,EAAOtK,EAAOuK,GACjC,IAGItN,EAAGgN,EAAMO,EAAcC,EAHvBjC,EAAUtL,UAAUC,OAAS,QAAsBiE,IAAjBlE,UAAU,GAAmBA,UAAU,GAAK,GAC9Eb,EAAOiO,EAAMjO,KACbqO,EAA8B,WAAjBlC,EAAQmC,KAGzB,GAAc,OAAV3K,EAAJ,CAIA,IAAK/C,EAAI,EAAGgN,EAAO5N,EAAKc,OAAQF,EAAIgN,IAAQhN,EAAG,CAG7C,IAFAuN,GAAgBnO,EAAKY,MAEAsN,EAAS,CAC5B,GAAI/B,EAAQQ,IACV,SAGF,MAGFyB,EAAaH,EAAMhC,OAAOkC,IAEtB,OAAeC,KAAgBC,GAAwB,IAAV1K,IAAe,IAAAF,GAAKE,MAAW,IAAAF,GAAK2K,MACnFzK,GAASyK,GAIb,OAAOzK,GAmBT,SAAS4K,EAAUlB,EAAOmB,GACxB,IAAIC,EAAUpB,GAASA,EAAMlB,QAAQsC,QACrC,OAAOA,QAAuB1J,IAAZ0J,QAAwC1J,IAAfyJ,EAAKP,MAoBlD,SAASS,EAAiBC,EAAQC,EAAUC,GAC1C,IAAIC,EAAWH,EAAOC,KAAcD,EAAOC,GAAY,IACvD,OAAOE,EAASD,KAAgBC,EAASD,GAAc,IAGzD,SAASE,EAAoBd,EAAOe,EAAQC,EAAU9J,GACpD,IACI+J,EADAC,EAAa5M,EAA2ByM,EAAOI,wBAAwBjK,GAAMqI,WAGjF,IACE,IAAK2B,EAAW1L,MAAOyL,EAASC,EAAWlM,KAAKS,MAAO,CACrD,IAAI8K,EAAOU,EAAOvL,MACdA,EAAQsK,EAAMO,EAAKT,OAEvB,GAAIkB,GAAYtL,EAAQ,IAAMsL,GAAYtL,EAAQ,EAChD,OAAO6K,EAAKT,OAGhB,MAAOhK,GACPoL,EAAWnN,EAAE+B,GACb,QACAoL,EAAWtL,IAGb,OAAO,KAGT,SAASwL,EAAaC,EAAYC,GAahC,IAZA,IAUItB,EAVAjJ,EAAQsK,EAAWtK,MACnBwJ,EAAOc,EAAWE,YAClBb,EAAS3J,EAAMyK,UAAYzK,EAAMyK,QAAU,IAC3CC,EAASlB,EAAKkB,OACdV,EAASR,EAAKQ,OACdb,EAAeK,EAAKT,MACpB4B,EAAQD,EAAOE,KACfC,EAAQb,EAAOY,KACf3O,EArDN,SAAqB6O,EAAYC,EAAYvB,GAC3C,MAAO,GAAGwB,OAAOF,EAAWG,GAAI,KAAKD,OAAOD,EAAWE,GAAI,KAAKD,OAAOxB,EAAKP,OAASO,EAAKrJ,MAoDhF+K,CAAYR,EAAQV,EAAQR,GAClCZ,EAAO2B,EAAOzO,OAGTF,EAAI,EAAGA,EAAIgN,IAAQhN,EAAG,CAC7B,IAAI6F,EAAO8I,EAAO3O,GACduP,EAAS1J,EAAKkJ,GACdhM,EAAQ8C,EAAKoJ,IAEjB5B,GADiBxH,EAAKgJ,UAAYhJ,EAAKgJ,QAAU,KAC9BI,GAASnB,EAAiBC,EAAQ1N,EAAKkP,IACpDhC,GAAgBxK,EACtBsK,EAAMmC,KAAOrB,EAAoBd,EAAOe,GAAQ,EAAMR,EAAKrJ,MAC3D8I,EAAMoC,QAAUtB,EAAoBd,EAAOe,GAAQ,EAAOR,EAAKrJ,OAInE,SAASmL,EAAgBtL,EAAO4K,GAC9B,IAAIW,EAASvL,EAAMuL,OACnB,OAAOtQ,OAAOD,KAAKuQ,GAAQnQ,QAAO,SAAUa,GAC1C,OAAOsP,EAAOtP,GAAK2O,OAASA,KAC3BY,QA2BL,SAASC,EAAYjC,EAAMhI,GACzB,IAAI2H,EAAeK,EAAKc,WAAWvB,MAC/B6B,EAAOpB,EAAKQ,QAAUR,EAAKQ,OAAOY,KAEtC,GAAKA,EAAL,CAMA,IACIc,EADAC,EAAapO,EAFjBiE,EAAQA,GAASgI,EAAKoC,SAKtB,IACE,IAAKD,EAAWlN,MAAOiN,EAASC,EAAW1N,KAAKS,MAAO,CACrD,IACIiL,EADS+B,EAAO/M,MACA8L,QAEpB,IAAKd,QAA2B5J,IAAjB4J,EAAOiB,SAAsD7K,IAA/B4J,EAAOiB,GAAMzB,GACxD,cAGKQ,EAAOiB,GAAMzB,IAEtB,MAAOpK,GACP4M,EAAW3O,EAAE+B,GACb,QACA4M,EAAW9M,MAIf,IAAIgN,EAAqB,SAA4BvC,GACnD,MAAgB,UAATA,GAA6B,SAATA,GAGzBwC,EAAmB,SAA0BC,EAAQC,GACvD,OAAOA,EAASD,EAAS9Q,OAAOoM,OAAO,GAAI0E,IAUzCE,EAAiC,WACnC,SAASA,EAAkBjM,EAAOmJ,IAChC,OAAgB9L,KAAM4O,GAEtB5O,KAAK2C,MAAQA,EACb3C,KAAK6O,KAAOlM,EAAMmM,IAClB9O,KAAK0L,MAAQI,EACb9L,KAAK+O,gBAAkB,GACvB/O,KAAKmN,YAAcnN,KAAKgP,UACxBhP,KAAKiP,MAAQjP,KAAKmN,YAAYrK,KAC9B9C,KAAK8J,aAAUpH,EACf1C,KAAKkP,UAAW,EAChBlP,KAAKmP,WAAQzM,EACb1C,KAAKoP,iBAAc1M,EACnB1C,KAAKqP,oBAAiB3M,EACtB1C,KAAKsP,gBAAa5M,EAClB1C,KAAKuP,gBAAa7M,EAClB1C,KAAKwP,qBAAsB,EAC3BxP,KAAKyP,oBAAqB,EAC1BzP,KAAK0P,cAAWhN,EAChB1C,KAAK2P,UAAY,GACjB3P,KAAK4P,aA4vBP,OAzvBA,OAAahB,EAAmB,CAAC,CAC/BhQ,IAAK,aACL0C,MAAO,WACL,IAAI6K,EAAOnM,KAAKmN,YAChBnN,KAAKqJ,YACLrJ,KAAK6P,aACL1D,EAAK2D,SAAW5D,EAAUC,EAAKQ,OAAQR,GACvCnM,KAAK+P,gBAEN,CACDnR,IAAK,cACL0C,MAAO,SAAqBwK,GACtB9L,KAAK0L,QAAUI,GACjBsC,EAAYpO,KAAKmN,aAGnBnN,KAAK0L,MAAQI,IAEd,CACDlN,IAAK,aACL0C,MAAO,WACL,IAAIqB,EAAQ3C,KAAK2C,MACbwJ,EAAOnM,KAAKmN,YACZ6C,EAAUhQ,KAAKiQ,aAEfC,EAAW,SAAkB3C,EAAM4C,EAAGC,EAAG1M,GAC3C,MAAgB,MAAT6J,EAAe4C,EAAa,MAAT5C,EAAe7J,EAAI0M,GAG3CC,EAAMlE,EAAKmE,SAAU,IAAAtH,GAAegH,EAAQM,QAASrC,EAAgBtL,EAAO,MAC5E4N,EAAMpE,EAAKqE,SAAU,IAAAxH,GAAegH,EAAQQ,QAASvC,EAAgBtL,EAAO,MAC5E8N,EAAMtE,EAAKuE,SAAU,IAAA1H,GAAegH,EAAQU,QAASzC,EAAgBtL,EAAO,MAC5EgO,EAAYxE,EAAKwE,UACjBC,EAAMzE,EAAK0E,QAAUX,EAASS,EAAWN,EAAKE,EAAKE,GACnDK,EAAM3E,EAAK4E,QAAUb,EAASS,EAAWJ,EAAKF,EAAKI,GACvDtE,EAAK6E,OAAShR,KAAKiR,cAAcZ,GACjClE,EAAK+E,OAASlR,KAAKiR,cAAcV,GACjCpE,EAAKgF,OAASnR,KAAKiR,cAAcR,GACjCtE,EAAKkB,OAASrN,KAAKiR,cAAcL,GACjCzE,EAAKQ,OAAS3M,KAAKiR,cAAcH,KAElC,CACDlS,IAAK,aACL0C,MAAO,WACL,OAAOtB,KAAK2C,MAAMyO,KAAKC,SAASrR,KAAK0L,SAEtC,CACD9M,IAAK,UACL0C,MAAO,WACL,OAAOtB,KAAK2C,MAAM2O,eAAetR,KAAK0L,SAEvC,CACD9M,IAAK,gBACL0C,MAAO,SAAuBiQ,GAC5B,OAAOvR,KAAK2C,MAAMuL,OAAOqD,KAE1B,CACD3S,IAAK,iBACL0C,MAAO,SAAwB0J,GAC7B,IAAImB,EAAOnM,KAAKmN,YAChB,OAAOnC,IAAUmB,EAAKkB,OAASlB,EAAKQ,OAASR,EAAKkB,SAEnD,CACDzO,IAAK,QACL0C,MAAO,WACLtB,KAAK4D,QAAQ,WAEd,CACDhF,IAAK,WACL0C,MAAO,WACL,IAAI6K,EAAOnM,KAAKmN,YAEZnN,KAAKmP,QACP,IAAAqC,GAAoBxR,KAAKmP,MAAOnP,MAG9BmM,EAAK2D,UACP1B,EAAYjC,KAGf,CACDvN,IAAK,aACL0C,MAAO,WACL,IAAI0O,EAAUhQ,KAAKiQ,aACfmB,EAAOpB,EAAQoB,OAASpB,EAAQoB,KAAO,IACvCjC,EAAQnP,KAAKmP,MAEjB,IAAI,IAAA5Q,GAAS6S,GACXpR,KAAKmP,MAvRb,SAAkCiC,GAChC,IAEI7S,EAAGgN,EAAM3M,EAFTjB,EAAOC,OAAOD,KAAKyT,GACnBK,EAAQ,IAAIjR,MAAM7C,EAAKc,QAG3B,IAAKF,EAAI,EAAGgN,EAAO5N,EAAKc,OAAQF,EAAIgN,IAAQhN,EAC1CK,EAAMjB,EAAKY,GACXkT,EAAMlT,GAAK,CACT4R,EAAGvR,EACHwR,EAAGgB,EAAKxS,IAIZ,OAAO6S,EA0QYC,CAAyBN,QACjC,GAAIjC,IAAUiC,EAAM,CACzB,GAAIjC,EAAO,EACT,IAAAqC,GAAoBrC,EAAOnP,MAC3B,IAAImM,EAAOnM,KAAKmN,YAChBiB,EAAYjC,GACZA,EAAKoC,QAAU,GAGb6C,GAAQxT,OAAO+T,aAAaP,KAC9B,IAAAQ,GAAkBR,EAAMpR,MAG1BA,KAAK2P,UAAY,GACjB3P,KAAKmP,MAAQiC,KAGhB,CACDxS,IAAK,cACL0C,MAAO,WACL,IAAI6K,EAAOnM,KAAKmN,YAEhBnN,KAAK6R,aAED7R,KAAK8R,qBACP3F,EAAK6D,QAAU,IAAIhQ,KAAK8R,sBAG3B,CACDlT,IAAK,wBACL0C,MAAO,SAA+ByQ,GACpC,IAAI5F,EAAOnM,KAAKmN,YACZ6C,EAAUhQ,KAAKiQ,aACf+B,GAAe,EAEnBhS,KAAK6R,aAEL,IAAII,EAAa9F,EAAK2D,SACtB3D,EAAK2D,SAAW5D,EAAUC,EAAKQ,OAAQR,GAEnCA,EAAKP,QAAUoE,EAAQpE,QACzBoG,GAAe,EACf5D,EAAYjC,GACZA,EAAKP,MAAQoE,EAAQpE,OAGvB5L,KAAKkS,gBAAgBH,IAEjBC,GAAgBC,IAAe9F,EAAK2D,WACtC9C,EAAahN,KAAMmM,EAAKoC,WAG3B,CACD3P,IAAK,YACL0C,MAAO,WACL,IAAI4H,EAASlJ,KAAK2C,MAAMuG,OACpBiJ,EAAYjJ,EAAOkJ,iBAAiBpS,KAAKiP,OACzCoD,EAASnJ,EAAOoJ,gBAAgBtS,KAAKiQ,aAAckC,GAAW,GAClEnS,KAAK8J,QAAUZ,EAAOqJ,eAAeF,EAAQrS,KAAKwS,cAClDxS,KAAKkP,SAAWlP,KAAK8J,QAAQ2I,QAC7BzS,KAAK+O,gBAAkB,KAExB,CACDnQ,IAAK,QACL0C,MAAO,SAAekC,EAAOkP,GAC3B,IAOInU,EAAG+G,EAAK4H,EAPRf,EAAOnM,KAAKmN,YACZiE,EAAOpR,KAAKmP,MACZ9B,EAASlB,EAAKkB,OACdyC,EAAW3D,EAAK2D,SAChBxC,EAAQD,EAAOE,KACfoF,EAAmB,IAAVnP,GAAekP,IAAUtB,EAAK3S,QAAgB0N,EAAKyG,QAC5DC,EAAOrP,EAAQ,GAAK2I,EAAKoC,QAAQ/K,EAAQ,GAG7C,IAAsB,IAAlBxD,KAAKkP,SACP/C,EAAKoC,QAAU6C,EACfjF,EAAKyG,SAAU,EACf1F,EAASkE,MACJ,CAEHlE,GADE,OAAQkE,EAAK5N,IACNxD,KAAK8S,eAAe3G,EAAMiF,EAAM5N,EAAOkP,IACvC,IAAAnU,GAAS6S,EAAK5N,IACdxD,KAAK+S,gBAAgB5G,EAAMiF,EAAM5N,EAAOkP,GAExC1S,KAAKgT,mBAAmB7G,EAAMiF,EAAM5N,EAAOkP,GAOtD,IAAKnU,EAAI,EAAGA,EAAImU,IAASnU,EACvB4N,EAAKoC,QAAQhQ,EAAIiF,GAAS8B,EAAM4H,EAAO3O,GAEnCoU,KANkB,OAAfrN,EAAIgI,IAAmBuF,GAAQvN,EAAIgI,GAASuF,EAAKvF,MAQpDqF,GAAS,GAGXE,EAAOvN,GAIX6G,EAAKyG,QAAUD,EAGb7C,GACF9C,EAAahN,KAAMkN,KAGtB,CACDtO,IAAK,qBACL0C,MAAO,SAA4B6K,EAAMiF,EAAM5N,EAAOkP,GACpD,IAOInU,EAAGgN,EAAMG,EAPT2B,EAASlB,EAAKkB,OACdV,EAASR,EAAKQ,OACdW,EAAQD,EAAOE,KACfC,EAAQb,EAAOY,KACf0F,EAAS5F,EAAO6F,YAChBC,EAAc9F,IAAWV,EACzBO,EAAS,IAAI1M,MAAMkS,GAGvB,IAAKnU,EAAI,EAAGgN,EAAOmH,EAAOnU,EAAIgN,IAAQhN,EAAG,CACvC,IAAI6U,EAEJ1H,EAAQnN,EAAIiF,EACZ0J,EAAO3O,IAAM6U,EAAY,IAAI,OAAgBA,EAAW9F,EAAO6F,GAAe9F,EAAOgG,MAAMJ,EAAOvH,GAAQA,KAAS,OAAgB0H,EAAW5F,EAAOb,EAAO0G,MAAMjC,EAAK1F,GAAQA,IAAS0H,GAG1L,OAAOlG,IAER,CACDtO,IAAK,iBACL0C,MAAO,SAAwB6K,EAAMiF,EAAM5N,EAAOkP,GAChD,IAGInU,EAAGgN,EAAMG,EAAOtH,EAHhB4M,EAAS7E,EAAK6E,OACdE,EAAS/E,EAAK+E,OACdhE,EAAS,IAAI1M,MAAMkS,GAGvB,IAAKnU,EAAI,EAAGgN,EAAOmH,EAAOnU,EAAIgN,IAAQhN,EAEpC6F,EAAOgN,EADP1F,EAAQnN,EAAIiF,GAEZ0J,EAAO3O,GAAK,CACV4R,EAAGa,EAAOqC,MAAMjP,EAAK,GAAIsH,GACzB0E,EAAGc,EAAOmC,MAAMjP,EAAK,GAAIsH,IAI7B,OAAOwB,IAER,CACDtO,IAAK,kBACL0C,MAAO,SAAyB6K,EAAMiF,EAAM5N,EAAOkP,GACjD,IAQInU,EAAGgN,EAAMG,EAAOtH,EARhB4M,EAAS7E,EAAK6E,OACdE,EAAS/E,EAAK+E,OACdoC,EAAiBtT,KAAKkP,SACtBqE,EAAwBD,EAAeE,SACvCA,OAAqC,IAA1BD,EAAmC,IAAMA,EACpDE,EAAwBH,EAAeI,SACvCA,OAAqC,IAA1BD,EAAmC,IAAMA,EACpDvG,EAAS,IAAI1M,MAAMkS,GAGvB,IAAKnU,EAAI,EAAGgN,EAAOmH,EAAOnU,EAAIgN,IAAQhN,EAEpC6F,EAAOgN,EADP1F,EAAQnN,EAAIiF,GAEZ0J,EAAO3O,GAAK,CACV4R,EAAGa,EAAOqC,OAAM,OAAiBjP,EAAMoP,GAAW9H,GAClD0E,EAAGc,EAAOmC,OAAM,OAAiBjP,EAAMsP,GAAWhI,IAItD,OAAOwB,IAER,CACDtO,IAAK,YACL0C,MAAO,SAAmBoK,GACxB,OAAO1L,KAAKmN,YAAYoB,QAAQ7C,KAEjC,CACD9M,IAAK,iBACL0C,MAAO,SAAwBoK,GAC7B,OAAO1L,KAAKmN,YAAYiE,KAAK1F,KAE9B,CACD9M,IAAK,aACL0C,MAAO,SAAoB0J,EAAOkC,EAAQjB,GACxC,IAAItJ,EAAQ3C,KAAK2C,MACbwJ,EAAOnM,KAAKmN,YACZ7L,EAAQ4L,EAAOlC,EAAMuC,MAKzB,OAAO5B,EAJK,CACVhO,KAAM0N,EAAwB1I,GAAO,GACrCiH,OAAQsD,EAAOE,QAAQpC,EAAMuC,OAELjM,EAAO6K,EAAKT,MAAO,CAC3CO,KAAMA,MAGT,CACDrN,IAAK,wBACL0C,MAAO,SAA+BqS,EAAO3I,EAAOkC,EAAQtB,GAC1D,IAAIgI,EAAc1G,EAAOlC,EAAMuC,MAC3BjM,EAAwB,OAAhBsS,EAAuBC,IAAMD,EACrChK,EAASgC,GAASsB,EAAOE,QAAQpC,EAAMuC,MAEvC3B,GAAShC,IACXgC,EAAMhC,OAASA,EACftI,EAAQqK,EAAYC,EAAOgI,EAAa5T,KAAKmN,YAAYzB,QAG3DiI,EAAMpQ,IAAMD,KAAKC,IAAIoQ,EAAMpQ,IAAKjC,GAChCqS,EAAMpO,IAAMjC,KAAKiC,IAAIoO,EAAMpO,IAAKjE,KAEjC,CACD1C,IAAK,YACL0C,MAAO,SAAmB0J,EAAO8I,GAC/B,IAiBIvV,EAAG2O,EAjBHf,EAAOnM,KAAKmN,YACZoB,EAAUpC,EAAKoC,QACfoE,EAASxG,EAAKyG,SAAW5H,IAAUmB,EAAKkB,OACxC9B,EAAOgD,EAAQ9P,OAEfsV,EAAa/T,KAAKgU,eAAehJ,GAEjCY,EAtVQ,SAAqBkI,EAAU3H,EAAMxJ,GACrD,OAAOmR,IAAa3H,EAAK8H,QAAU9H,EAAK2D,UAAY,CAClDnS,KAAM0N,EAAwB1I,GAAO,GACrCiH,OAAQ,MAmVMsK,CAAYJ,EAAU3H,EAAMnM,KAAK2C,OACzCgR,EAAQ,CACVpQ,IAAK4Q,OAAOC,kBACZ7O,IAAK4O,OAAOE,mBAGVC,EAneV,SAAuBtJ,GACrB,IAAIuJ,EAAuBvJ,EAAMwJ,gBAC7BjR,EAAMgR,EAAqBhR,IAC3BgC,EAAMgP,EAAqBhP,IAC3BkP,EAAaF,EAAqBE,WAClCC,EAAaH,EAAqBG,WAEtC,MAAO,CACLnR,IAAKkR,EAAalR,EAAM4Q,OAAOE,kBAC/B9O,IAAKmP,EAAanP,EAAM4O,OAAOC,mBA0dRI,CAAcT,GAC/BY,EAAWL,EAAe/Q,IAC1BqR,EAAWN,EAAe/O,IAI9B,SAASsP,IAEP,IAAI9I,GADJmB,EAASqB,EAAQhQ,IACOwV,EAAWxG,MACnC,QAAQ,OAAeL,EAAOlC,EAAMuC,QAAUoH,EAAW5I,GAAc6I,EAAW7I,EAGpF,IAAKxN,EAAI,EAAGA,EAAIgN,IACVsJ,MAIJ7U,KAAK8U,sBAAsBnB,EAAO3I,EAAOkC,EAAQtB,IAE7C+G,MAPkBpU,GAYxB,GAAIoU,EACF,IAAKpU,EAAIgN,EAAO,EAAGhN,GAAK,IAAKA,EAC3B,IAAIsW,IAAJ,CAIA7U,KAAK8U,sBAAsBnB,EAAO3I,EAAOkC,EAAQtB,GACjD,MAIJ,OAAO+H,IAER,CACD/U,IAAK,qBACL0C,MAAO,SAA4B0J,GACjC,IAEIzM,EAAGgN,EAAMjK,EAFT4L,EAASlN,KAAKmN,YAAYoB,QAC1B3E,EAAS,GAGb,IAAKrL,EAAI,EAAGgN,EAAO2B,EAAOzO,OAAQF,EAAIgN,IAAQhN,EAC5C+C,EAAQ4L,EAAO3O,GAAGyM,EAAMuC,OAEpB,OAAejM,IACjBsI,EAAOzL,KAAKmD,GAIhB,OAAOsI,IAER,CACDhL,IAAK,iBACL0C,MAAO,WACL,OAAO,IAER,CACD1C,IAAK,mBACL0C,MAAO,SAA0BoK,GAC/B,IAAIS,EAAOnM,KAAKmN,YACZE,EAASlB,EAAKkB,OACdV,EAASR,EAAKQ,OACdO,EAASlN,KAAK+U,UAAUrJ,GAC5B,MAAO,CACLsJ,MAAO3H,EAAS,GAAKA,EAAO4H,iBAAiB/H,EAAOG,EAAOE,OAAS,GACpEjM,MAAOqL,EAAS,GAAKA,EAAOsI,iBAAiB/H,EAAOP,EAAOY,OAAS,MAGvE,CACD3O,IAAK,UACL0C,MAAO,SAAiB2K,GACtB,IAxoBU3K,EACV4T,EAAGxR,EAAGyR,EAAGvD,EAuoBLzF,EAAOnM,KAAKmN,YAChBnN,KAAK2K,OAAOsB,GAAQ,WACpBE,EAAKiJ,OA1oBK9T,GA0oBU,IAAA0H,GAAehJ,KAAK8J,QAAQuL,KAzpBtD,SAAqBrE,EAAQE,EAAQjG,GACnC,IAAwB,IAApBA,EACF,OAAO,EAGT,IAAIkF,EAAIpF,EAAUiG,EAAQ/F,GACtBmF,EAAIrF,EAAUmG,EAAQjG,GAC1B,MAAO,CACLqK,IAAKlF,EAAEhF,IACPmK,MAAOpF,EAAE/E,IACToK,OAAQpF,EAAE5M,MACViS,KAAMtF,EAAE3M,OA8oBgDkS,CAAYvJ,EAAK6E,OAAQ7E,EAAK+E,OAAQlR,KAAK2V,oBAvoBjG,IAAApX,GAAS+C,IACX4T,EAAI5T,EAAMgU,IACV5R,EAAIpC,EAAMiU,MACVJ,EAAI7T,EAAMkU,OACV5D,EAAItQ,EAAMmU,MAEVP,EAAIxR,EAAIyR,EAAIvD,EAAItQ,EAGX,CACLgU,IAAKJ,EACLK,MAAO7R,EACP8R,OAAQL,EACRM,KAAM7D,EACNgE,UAAoB,IAAVtU,MA2nBT,CACD1C,IAAK,SACL0C,MAAO,SAAgB2K,MACtB,CACDrN,IAAK,OACL0C,MAAO,WACL,IASI/C,EATAuQ,EAAM9O,KAAK6O,KACXlM,EAAQ3C,KAAK2C,MACbwJ,EAAOnM,KAAKmN,YACZ0I,EAAW1J,EAAKiF,MAAQ,GACxB0E,EAAOnT,EAAMoT,UACbtN,EAAS,GACTjF,EAAQxD,KAAKsP,YAAc,EAC3BoD,EAAQ1S,KAAKuP,YAAcsG,EAASpX,OAAS+E,EAC7CwS,EAA0BhW,KAAK8J,QAAQkM,wBAO3C,IAJI7J,EAAK6D,SACP7D,EAAK6D,QAAQ3L,KAAKyK,EAAKgH,EAAMtS,EAAOkP,GAGjCnU,EAAIiF,EAAOjF,EAAIiF,EAAQkP,IAASnU,EAAG,CACtC,IAAI0X,EAAUJ,EAAStX,GAEnB0X,EAAQhC,SAIRgC,EAAQxN,QAAUuN,EACpBvN,EAAOtK,KAAK8X,GAEZA,EAAQ5R,KAAKyK,EAAKgH,IAItB,IAAKvX,EAAI,EAAGA,EAAIkK,EAAOhK,SAAUF,EAC/BkK,EAAOlK,GAAG8F,KAAKyK,EAAKgH,KAGvB,CACDlX,IAAK,WACL0C,MAAO,SAAkBoK,EAAOjD,GAC9B,IAAIwD,EAAOxD,EAAS,SAAW,UAC/B,YAAiB/F,IAAVgJ,GAAuB1L,KAAKmN,YAAY6C,QAAUhQ,KAAKkW,6BAA6BjK,GAAQjM,KAAKmW,0BAA0BzK,GAAS,EAAGO,KAE/I,CACDrN,IAAK,aACL0C,MAAO,SAAoBoK,EAAOjD,EAAQwD,GACxC,IACImK,EADApG,EAAUhQ,KAAKiQ,aAGnB,GAAIvE,GAAS,GAAKA,EAAQ1L,KAAKmN,YAAYiE,KAAK3S,OAAQ,CACtD,IAAIwX,EAAUjW,KAAKmN,YAAYiE,KAAK1F,GACpC0K,EAAUH,EAAQvG,WAAauG,EAAQvG,SAnhB/C,SAA2B2G,EAAQ3K,EAAOuK,GACxC,OAAO,OAAcI,EAAQ,CAC3B5N,QAAQ,EACR6N,UAAW5K,EACXwB,YAAQxK,EACR6T,SAAK7T,EACLuT,QAASA,EACTvK,MAAOA,EACPO,KAAM,UACNnJ,KAAM,SA0gBgD0T,CAAkBxW,KAAKwS,aAAc9G,EAAOuK,IAC9FG,EAAQlJ,OAASlN,KAAK+U,UAAUrJ,GAChC0K,EAAQG,IAAMvG,EAAQoB,KAAK1F,GAC3B0K,EAAQ1K,MAAQ0K,EAAQE,UAAY5K,OAEpC0K,EAAUpW,KAAK0P,WAAa1P,KAAK0P,SAniBzC,SAA8B2G,EAAQ3K,GACpC,OAAO,OAAc2K,EAAQ,CAC3B5N,QAAQ,EACRuH,aAAStN,EACToJ,aAAcJ,EACdA,MAAOA,EACPO,KAAM,UACNnJ,KAAM,YA4hB0C2T,CAAqBzW,KAAK2C,MAAM6P,aAAcxS,KAAK0L,QAC/F0K,EAAQpG,QAAUA,EAClBoG,EAAQ1K,MAAQ0K,EAAQtK,aAAe9L,KAAK0L,MAK9C,OAFA0K,EAAQ3N,SAAWA,EACnB2N,EAAQnK,KAAOA,EACRmK,IAER,CACDxX,IAAK,+BACL0C,MAAO,SAAsC2K,GAC3C,OAAOjM,KAAK0W,uBAAuB1W,KAAK8R,mBAAmBlE,GAAI3B,KAEhE,CACDrN,IAAK,4BACL0C,MAAO,SAAmCoK,EAAOO,GAC/C,OAAOjM,KAAK0W,uBAAuB1W,KAAK2W,gBAAgB/I,GAAI3B,EAAMP,KAEnE,CACD9M,IAAK,yBACL0C,MAAO,SAAgCsV,GACrC,IAAIC,EAAS7W,KAETiM,EAAOzN,UAAUC,OAAS,QAAsBiE,IAAjBlE,UAAU,GAAmBA,UAAU,GAAK,UAC3EkN,EAAQlN,UAAUC,OAAS,EAAID,UAAU,QAAKkE,EAC9C+F,EAAkB,WAATwD,EACT6K,EAAQ9W,KAAK+O,gBACbgI,EAAWH,EAAc,IAAM3K,EAC/ByC,EAASoI,EAAMC,GACfC,EAAUhX,KAAKwP,sBAAuB,OAAQ9D,GAElD,GAAIgD,EACF,OAAOD,EAAiBC,EAAQsI,GAGlC,IAAI9N,EAASlJ,KAAK2C,MAAMuG,OACpBiJ,EAAYjJ,EAAO+N,wBAAwBjX,KAAKiP,MAAO2H,GACvDM,EAAWzO,EAAS,CAAC,GAAGkF,OAAOiJ,EAAa,SAAU,QAASA,EAAa,IAAM,CAACA,EAAa,IAChGvE,EAASnJ,EAAOoJ,gBAAgBtS,KAAKiQ,aAAckC,GACnDgF,EAAQvZ,OAAOD,KAAK,EAAAsK,EAAA,SAAkB2O,IAEtCR,EAAU,WACZ,OAAOS,EAAOrE,WAAW9G,EAAOjD,IAG9BmB,EAASV,EAAOkO,oBAAoB/E,EAAQ8E,EAAOf,EAASc,GAOhE,OALItN,EAAOG,UACTH,EAAOG,QAAUiN,EACjBF,EAAMC,GAAYnZ,OAAOyZ,OAAO5I,EAAiB7E,EAAQoN,KAGpDpN,IAER,CACDhL,IAAK,qBACL0C,MAAO,SAA4BoK,EAAO4L,EAAY7O,GACpD,IASIqB,EATAnH,EAAQ3C,KAAK2C,MACbmU,EAAQ9W,KAAK+O,gBACbgI,EAAW,aAAapJ,OAAO2J,GAC/B5I,EAASoI,EAAMC,GAEnB,GAAIrI,EACF,OAAOA,EAKT,IAAgC,IAA5B/L,EAAMmH,QAAQpB,UAAqB,CACrC,IAAIQ,EAASlJ,KAAK2C,MAAMuG,OACpBiJ,EAAYjJ,EAAOqO,0BAA0BvX,KAAKiP,MAAOqI,GACzDjF,EAASnJ,EAAOoJ,gBAAgBtS,KAAKiQ,aAAckC,GACvDrI,EAAUZ,EAAOqJ,eAAeF,EAAQrS,KAAKwS,WAAW9G,EAAOjD,EAAQ6O,IAGzE,IAAIzO,EAAa,IAAII,EAAWtG,EAAOmH,GAAWA,EAAQjB,YAM1D,OAJIiB,GAAWA,EAAQ0N,aACrBV,EAAMC,GAAYnZ,OAAOyZ,OAAOxO,IAG3BA,IAER,CACDjK,IAAK,mBACL0C,MAAO,SAA0BwI,GAC/B,GAAKA,EAAQC,QAIb,OAAO/J,KAAKqP,iBAAmBrP,KAAKqP,eAAiBzR,OAAOoM,OAAO,GAAIF,MAExE,CACDlL,IAAK,iBACL0C,MAAO,SAAwB2K,EAAMwL,GACnC,OAAQA,GAAiBjJ,EAAmBvC,IAASjM,KAAK2C,MAAM+U,sBAEjE,CACD9Y,IAAK,oBACL0C,MAAO,SAA2BkC,EAAOyI,GACvC,IAAI0L,EAAY3X,KAAKmW,0BAA0B3S,EAAOyI,GAClD2L,EAA0B5X,KAAKqP,eAC/BoI,EAAgBzX,KAAK6X,iBAAiBF,GACtCG,EAAiB9X,KAAK8X,eAAe7L,EAAMwL,IAAkBA,IAAkBG,EAEnF,OADA5X,KAAK+X,oBAAoBN,EAAexL,EAAM0L,GACvC,CACLF,cAAeA,EACfK,eAAgBA,KAGnB,CACDlZ,IAAK,gBACL0C,MAAO,SAAuB2U,EAASvK,EAAOnD,EAAY0D,GACpDuC,EAAmBvC,GACrBrO,OAAOoM,OAAOiM,EAAS1N,GAEvBvI,KAAKgY,mBAAmBtM,EAAOO,GAAMtB,OAAOsL,EAAS1N,KAGxD,CACD3J,IAAK,sBACL0C,MAAO,SAA6BmW,EAAexL,EAAMpC,GACnD4N,IAAkBjJ,EAAmBvC,IACvCjM,KAAKgY,wBAAmBtV,EAAWuJ,GAAMtB,OAAO8M,EAAe5N,KAGlE,CACDjL,IAAK,YACL0C,MAAO,SAAmB2U,EAASvK,EAAOO,EAAMxD,GAC9CwN,EAAQxN,OAASA,EACjB,IAAIqB,EAAU9J,KAAKiY,SAASvM,EAAOjD,GAEnCzI,KAAKgY,mBAAmBtM,EAAOO,EAAMxD,GAAQkC,OAAOsL,EAAS,CAC3DnM,SAAUrB,GAAUzI,KAAK6X,iBAAiB/N,IAAYA,MAGzD,CACDlL,IAAK,mBACL0C,MAAO,SAA0B2U,EAASnK,EAAcJ,GACtD1L,KAAKkY,UAAUjC,EAASvK,EAAO,UAAU,KAE1C,CACD9M,IAAK,gBACL0C,MAAO,SAAuB2U,EAASnK,EAAcJ,GACnD1L,KAAKkY,UAAUjC,EAASvK,EAAO,UAAU,KAE1C,CACD9M,IAAK,2BACL0C,MAAO,WACL,IAAI2U,EAAUjW,KAAKmN,YAAY6C,QAE3BiG,GACFjW,KAAKkY,UAAUjC,OAASvT,EAAW,UAAU,KAGhD,CACD9D,IAAK,wBACL0C,MAAO,WACL,IAAI2U,EAAUjW,KAAKmN,YAAY6C,QAE3BiG,GACFjW,KAAKkY,UAAUjC,OAASvT,EAAW,UAAU,KAGhD,CACD9D,IAAK,kBACL0C,MAAO,SAAyByQ,GAC9B,IAIIoG,EAJA/G,EAAOpR,KAAKmP,MACZ0G,EAAW7V,KAAKmN,YAAYiE,KAE5BgH,EAAalY,EAA2BF,KAAK2P,WAGjD,IACE,IAAKyI,EAAWhX,MAAO+W,EAASC,EAAWxX,KAAKS,MAAO,CACrD,IAAIgX,GAAe,OAAeF,EAAO7W,MAAO,GAC5C0G,EAASqQ,EAAa,GACtBC,EAAOD,EAAa,GACpBE,EAAOF,EAAa,GAExBrY,KAAKgI,GAAQsQ,EAAMC,IAErB,MAAO7W,GACP0W,EAAWzY,EAAE+B,GACb,QACA0W,EAAW5W,IAGbxB,KAAK2P,UAAY,GACjB,IAAI6I,EAAU3C,EAASpX,OACnBga,EAAUrH,EAAK3S,OACfiU,EAAQpP,KAAKC,IAAIkV,EAASD,GAE1B9F,GACF1S,KAAKqT,MAAM,EAAGX,GAGZ+F,EAAUD,EACZxY,KAAK0Y,gBAAgBF,EAASC,EAAUD,EAASzG,GACxC0G,EAAUD,GACnBxY,KAAK2Y,gBAAgBF,EAASD,EAAUC,KAG3C,CACD7Z,IAAK,kBACL0C,MAAO,SAAyBkC,EAAOkP,GACrC,IAIInU,EAJAwT,IAAmBvT,UAAUC,OAAS,QAAsBiE,IAAjBlE,UAAU,KAAmBA,UAAU,GAClF2N,EAAOnM,KAAKmN,YACZiE,EAAOjF,EAAKiF,KACZhG,EAAM5H,EAAQkP,EAGdkG,EAAO,SAAc3W,GAGvB,IAFAA,EAAIxD,QAAUiU,EAETnU,EAAI0D,EAAIxD,OAAS,EAAGF,GAAK6M,EAAK7M,IACjC0D,EAAI1D,GAAK0D,EAAI1D,EAAImU,IAMrB,IAFAkG,EAAKxH,GAEA7S,EAAIiF,EAAOjF,EAAI6M,IAAO7M,EACzB6S,EAAK7S,GAAK,IAAIyB,KAAK2W,gBAGjB3W,KAAKkP,UACP0J,EAAKzM,EAAKoC,SAGZvO,KAAKqT,MAAM7P,EAAOkP,GAEdX,GACF/R,KAAK6Y,eAAezH,EAAM5N,EAAOkP,EAAO,WAG3C,CACD9T,IAAK,iBACL0C,MAAO,SAAwB2U,EAASzS,EAAOkP,EAAOzG,MACrD,CACDrN,IAAK,kBACL0C,MAAO,SAAyBkC,EAAOkP,GACrC,IAAIvG,EAAOnM,KAAKmN,YAEhB,GAAInN,KAAKkP,SAAU,CACjB,IAAI4J,EAAU3M,EAAKoC,QAAQwK,OAAOvV,EAAOkP,GAErCvG,EAAK2D,UACP1B,EAAYjC,EAAM2M,GAItB3M,EAAKiF,KAAK2H,OAAOvV,EAAOkP,KAEzB,CACD9T,IAAK,QACL0C,MAAO,SAAe0X,GACpB,GAAIhZ,KAAKkP,SACPlP,KAAK2P,UAAUxR,KAAK6a,OACf,CACL,IAAIC,GAAS,OAAeD,EAAM,GAC9BhR,EAASiR,EAAO,GAChBX,EAAOW,EAAO,GACdV,EAAOU,EAAO,GAElBjZ,KAAKgI,GAAQsQ,EAAMC,GAGrBvY,KAAK2C,MAAMuW,aAAa/a,KAAK,CAAC6B,KAAK0L,OAAOiC,QAAO,OAAmBqL,OAErE,CACDpa,IAAK,cACL0C,MAAO,WACL,IAAIoR,EAAQlU,UAAUC,OAEtBuB,KAAKmZ,MAAM,CAAC,kBAAmBnZ,KAAKiQ,aAAamB,KAAK3S,OAASiU,EAAOA,MAEvE,CACD9T,IAAK,aACL0C,MAAO,WACLtB,KAAKmZ,MAAM,CAAC,kBAAmBnZ,KAAKmN,YAAYiE,KAAK3S,OAAS,EAAG,MAElE,CACDG,IAAK,eACL0C,MAAO,WACLtB,KAAKmZ,MAAM,CAAC,kBAAmB,EAAG,MAEnC,CACDva,IAAK,gBACL0C,MAAO,SAAuBkC,EAAOkP,GAC/BA,GACF1S,KAAKmZ,MAAM,CAAC,kBAAmB3V,EAAOkP,IAGxC,IAAI0G,EAAW5a,UAAUC,OAAS,EAE9B2a,GACFpZ,KAAKmZ,MAAM,CAAC,kBAAmB3V,EAAO4V,MAGzC,CACDxa,IAAK,iBACL0C,MAAO,WACLtB,KAAKmZ,MAAM,CAAC,kBAAmB,EAAG3a,UAAUC,aAIzCmQ,EAjxB4B,GAyyBrC,SAASyK,EAAqBlN,GAC5B,IAGI5N,EAAGgN,EAAM+N,EAAMzG,EAHf7H,EAAQmB,EAAKkB,OACbzD,EAnBN,SAA2BoB,EAAOlI,GAChC,IAAKkI,EAAMuO,OAAOC,KAAM,CAItB,IAHA,IAAIC,EAAezO,EAAM+B,wBAAwBjK,GAC7C8G,EAAS,GAEJrL,EAAI,EAAGgN,EAAOkO,EAAahb,OAAQF,EAAIgN,EAAMhN,IACpDqL,EAASA,EAAO+D,OAAO8L,EAAalb,GAAG0O,WAAWyM,mBAAmB1O,IAGvEA,EAAMuO,OAAOC,MAAO,IAAAG,GAAa/P,EAAOgQ,MAAK,SAAUC,EAAG1E,GACxD,OAAO0E,EAAI1E,MAIf,OAAOnK,EAAMuO,OAAOC,KAKPM,CAAkB9O,EAAOmB,EAAKrJ,MACvCS,EAAMyH,EAAM+O,QAGZC,EAAmB,WACR,QAATV,IAA4B,QAAVA,KAIlB,OAAQzG,KACVtP,EAAMD,KAAKC,IAAIA,EAAKD,KAAK2W,IAAIX,EAAOzG,IAAStP,IAG/CsP,EAAOyG,IAGT,IAAK/a,EAAI,EAAGgN,EAAO3B,EAAOnL,OAAQF,EAAIgN,IAAQhN,EAC5C+a,EAAOtO,EAAMkP,iBAAiBtQ,EAAOrL,IACrCyb,IAKF,IAFAnH,OAAOnQ,EAEFnE,EAAI,EAAGgN,EAAOP,EAAMmP,MAAM1b,OAAQF,EAAIgN,IAAQhN,EACjD+a,EAAOtO,EAAMoP,gBAAgB7b,GAC7Byb,IAGF,OAAOzW,EAsET,SAAS8W,EAAWC,EAAOlW,EAAMuI,EAAQpO,GAOvC,OANI,OAAQ+b,GAzBd,SAAuBA,EAAOlW,EAAMuI,EAAQpO,GAC1C,IAAIgc,EAAa5N,EAAO0G,MAAMiH,EAAM,GAAI/b,GACpCic,EAAW7N,EAAO0G,MAAMiH,EAAM,GAAI/b,GAClCgF,EAAMD,KAAKC,IAAIgX,EAAYC,GAC3BjV,EAAMjC,KAAKiC,IAAIgV,EAAYC,GAC3BC,EAAWlX,EACXmX,EAASnV,EAETjC,KAAK2W,IAAI1W,GAAOD,KAAK2W,IAAI1U,KAC3BkV,EAAWlV,EACXmV,EAASnX,GAGXa,EAAKuI,EAAOY,MAAQmN,EACpBtW,EAAKuW,QAAU,CACbF,SAAUA,EACVC,OAAQA,EACRlX,MAAO+W,EACPnP,IAAKoP,EACLjX,IAAKA,EACLgC,IAAKA,GAMLqV,CAAcN,EAAOlW,EAAMuI,EAAQpO,GAEnC6F,EAAKuI,EAAOY,MAAQZ,EAAO0G,MAAMiH,EAAO/b,GAGnC6F,EAGT,SAASyW,EAAsB1O,EAAMiF,EAAM5N,EAAOkP,GAChD,IAKInU,EAAGgN,EAAMnH,EAAMkW,EALfjN,EAASlB,EAAKkB,OACdV,EAASR,EAAKQ,OACdsG,EAAS5F,EAAO6F,YAChBC,EAAc9F,IAAWV,EACzBO,EAAS,GAGb,IAAK3O,EAAIiF,EAAO+H,EAAO/H,EAAQkP,EAAOnU,EAAIgN,IAAQhN,EAChD+b,EAAQlJ,EAAK7S,IACb6F,EAAO,IACFiJ,EAAOE,MAAQ4F,GAAe9F,EAAOgG,MAAMJ,EAAO1U,GAAIA,GAC3D2O,EAAO/O,KAAKkc,EAAWC,EAAOlW,EAAMuI,EAAQpO,IAG9C,OAAO2O,EAGT,SAAS4N,EAAWC,GAClB,OAAOA,QAA8BrY,IAApBqY,EAAON,eAA4C/X,IAAlBqY,EAAOL,OAyC3D,SAASM,EAAiBzS,EAAYuB,EAAS8B,EAAOF,GACpD,IAAIuP,EAAOnR,EAAQoR,cACfrT,EAAM,GAEV,GAAKoT,EAKL,IAAa,IAATA,EAAJ,CAUA,IAAIE,EAjDN,SAAqB5S,GACnB,IAAI4C,EAAS3H,EAAO4H,EAAKkK,EAAKE,EAoB9B,OAlBIjN,EAAW6S,YACbjQ,EAAU5C,EAAW8S,KAAO9S,EAAW4H,EACvC3M,EAAQ,OACR4H,EAAM,UAEND,EAAU5C,EAAW8S,KAAO9S,EAAW6H,EACvC5M,EAAQ,SACR4H,EAAM,OAGJD,GACFmK,EAAM,MACNE,EAAS,UAETF,EAAM,QACNE,EAAS,OAGJ,CACLhS,MAAOA,EACP4H,IAAKA,EACLD,QAASA,EACTmK,IAAKA,EACLE,OAAQA,GAuBS8F,CAAY/S,GAC3B/E,EAAQ2X,EAAa3X,MACrB4H,EAAM+P,EAAa/P,IACnBD,EAAUgQ,EAAahQ,QACvBmK,EAAM6F,EAAa7F,IACnBE,EAAS2F,EAAa3F,OAEb,WAATyF,GAAqBrP,IACvBrD,EAAWgT,oBAAqB,GAE3B3P,EAAMmC,MAAQ,KAAOrC,EACxBuP,EAAO3F,GACG1J,EAAMoC,SAAW,KAAOtC,EAClCuP,EAAOzF,GAEP3N,EAAI2T,EAAUhG,EAAQhS,EAAO4H,EAAKD,KAAY,EAC9C8P,EAAO3F,IAIXzN,EAAI2T,EAAUP,EAAMzX,EAAO4H,EAAKD,KAAY,EAC5C5C,EAAW2S,cAAgBrT,OA9BzBU,EAAW2S,cAAgB,CACzB5F,KAAK,EACLC,OAAO,EACPC,QAAQ,EACRC,MAAM,QATRlN,EAAW2S,cAAgBrT,EAsC/B,SAAS2T,EAAUP,EAAMpB,EAAG1E,EAAGhK,GAW/B,IAAcsQ,EAAMC,EAAIC,EAHtB,OAPIxQ,GAUkBwQ,EATCxG,EACrB8F,EAAOW,EADPX,GASUQ,EATER,MASIS,EATE7B,GAUC8B,EAAKF,IAASE,EAAKD,EAAKD,EATrBtG,EAAG0E,IAEzBoB,EAAOW,EAASX,EAAMpB,EAAG1E,GAGpB8F,EAOT,SAASW,EAAS5S,EAAGxF,EAAO4H,GAC1B,MAAa,UAANpC,EAAgBxF,EAAc,QAANwF,EAAcoC,EAAMpC,EAGrD,SAAS6S,EAAiBtT,EAAYuT,EAAMC,GAC1C,IAAIC,EAAgBF,EAAKE,cACzBzT,EAAWyT,cAAkC,SAAlBA,EAAqC,IAAVD,EAAc,IAAO,EAAIC,EA/PjFpN,EAAkBqN,SAAW,GAC7BrN,EAAkBpP,UAAUsS,mBAAqB,KACjDlD,EAAkBpP,UAAUmX,gBAAkB,KAgQ9C,IAAIuF,EAA6B,SAAUC,IACzC,OAAUD,EAAeC,GAEzB,IAAIC,EAASpd,EAAakd,GAE1B,SAASA,IAGP,OAFA,OAAgBlc,KAAMkc,GAEfE,EAAOhe,MAAM4B,KAAMxB,WAiV5B,OA9UA,OAAa0d,EAAe,CAAC,CAC3Btd,IAAK,qBACL0C,MAAO,SAA4B6K,EAAMiF,EAAM5N,EAAOkP,GACpD,OAAOmI,EAAsB1O,EAAMiF,EAAM5N,EAAOkP,KAEjD,CACD9T,IAAK,iBACL0C,MAAO,SAAwB6K,EAAMiF,EAAM5N,EAAOkP,GAChD,OAAOmI,EAAsB1O,EAAMiF,EAAM5N,EAAOkP,KAEjD,CACD9T,IAAK,kBACL0C,MAAO,SAAyB6K,EAAMiF,EAAM5N,EAAOkP,GACjD,IAUInU,EAAGgN,EAAMnH,EAAMiY,EAVfhP,EAASlB,EAAKkB,OACdV,EAASR,EAAKQ,OACd2P,EAAkBtc,KAAKkP,SACvBqN,EAAwBD,EAAgB9I,SACxCA,OAAqC,IAA1B+I,EAAmC,IAAMA,EACpDC,EAAwBF,EAAgB5I,SACxCA,OAAqC,IAA1B8I,EAAmC,IAAMA,EACpDC,EAA2B,MAAhBpP,EAAOE,KAAeiG,EAAWE,EAC5CgJ,EAA2B,MAAhB/P,EAAOY,KAAeiG,EAAWE,EAC5CxG,EAAS,GAGb,IAAK3O,EAAIiF,EAAO+H,EAAO/H,EAAQkP,EAAOnU,EAAIgN,IAAQhN,EAChD8d,EAAMjL,EAAK7S,IACX6F,EAAO,IACFiJ,EAAOE,MAAQF,EAAOgG,OAAM,OAAiBgJ,EAAKI,GAAWle,GAClE2O,EAAO/O,KAAKkc,GAAW,OAAiBgC,EAAKK,GAAWtY,EAAMuI,EAAQpO,IAGxE,OAAO2O,IAER,CACDtO,IAAK,wBACL0C,MAAO,SAA+BqS,EAAO3I,EAAOkC,EAAQtB,IAC1D,QAAK,OAAgBsQ,EAAc1c,WAAY,wBAAyBQ,MAAMN,KAAKM,KAAM2T,EAAO3I,EAAOkC,EAAQtB,GAE/G,IAAImP,EAAS7N,EAAOyN,QAEhBI,GAAU/P,IAAUhL,KAAKmN,YAAYR,SACvCgH,EAAMpQ,IAAMD,KAAKC,IAAIoQ,EAAMpQ,IAAKwX,EAAOxX,KACvCoQ,EAAMpO,IAAMjC,KAAKiC,IAAIoO,EAAMpO,IAAKwV,EAAOxV,QAG1C,CACD3G,IAAK,iBACL0C,MAAO,WACL,OAAO,IAER,CACD1C,IAAK,mBACL0C,MAAO,SAA0BoK,GAC/B,IAAIS,EAAOnM,KAAKmN,YACZE,EAASlB,EAAKkB,OACdV,EAASR,EAAKQ,OACdO,EAASlN,KAAK+U,UAAUrJ,GACxBqP,EAAS7N,EAAOyN,QAChBrZ,EAAQwZ,EAAWC,GAAU,IAAMA,EAAOvX,MAAQ,KAAOuX,EAAO3P,IAAM,IAAM,GAAKuB,EAAOsI,iBAAiB/H,EAAOP,EAAOY,OAC3H,MAAO,CACLyH,MAAO,GAAK3H,EAAO4H,iBAAiB/H,EAAOG,EAAOE,OAClDjM,MAAOA,KAGV,CACD1C,IAAK,aACL0C,MAAO,WACLtB,KAAKwP,qBAAsB,GAE3B,QAAK,OAAgB0M,EAAc1c,WAAY,aAAcQ,MAAMN,KAAKM,MAE7DA,KAAKmN,YACXvB,MAAQ5L,KAAKiQ,aAAarE,QAEhC,CACDhN,IAAK,SACL0C,MAAO,SAAgB2K,GACrB,IAAIE,EAAOnM,KAAKmN,YAChBnN,KAAK6Y,eAAe1M,EAAKiF,KAAM,EAAGjF,EAAKiF,KAAK3S,OAAQwN,KAErD,CACDrN,IAAK,iBACL0C,MAAO,SAAwBqb,EAAMnZ,EAAOkP,EAAOzG,GAajD,IAZA,IAAI2Q,EAAiB,UAAT3Q,EACRP,EAAQ1L,KAAK0L,MACbiB,EAAS3M,KAAKmN,YAAYR,OAC1B0O,EAAO1O,EAAOkQ,eACdzB,EAAazO,EAAOmQ,eAEpBC,EAAQ/c,KAAKgd,YAEbC,EAAwBjd,KAAKkd,kBAAkB1Z,EAAOyI,GACtDwL,EAAgBwF,EAAsBxF,cACtCK,EAAiBmF,EAAsBnF,eAElCvZ,EAAIiF,EAAOjF,EAAIiF,EAAQkP,EAAOnU,IAAK,CAC1C,IAAI2O,EAASlN,KAAK+U,UAAUxW,GACxB4e,EAAUP,IAAS,OAAc1P,EAAOP,EAAOY,OAAS,CAC1D8N,KAAMA,EACN+B,KAAM/B,GACJrb,KAAKqd,yBAAyB9e,GAE9B+e,EAAUtd,KAAKud,yBAAyBhf,EAAGwe,GAE3CnR,GAASsB,EAAOE,SAAW,IAAIT,EAAOY,MACtChF,EAAa,CACf6S,WAAYA,EACZC,KAAM8B,EAAQ9B,KACdE,oBAAqB3P,GAASkP,EAAW5N,EAAOyN,UAAYjP,IAAUE,EAAMmC,MAAQrC,IAAUE,EAAMoC,QACpGmC,EAAGiL,EAAa+B,EAAQC,KAAOE,EAAQE,OACvCpN,EAAGgL,EAAakC,EAAQE,OAASL,EAAQC,KACzCK,OAAQrC,EAAakC,EAAQzS,KAAOvH,KAAK2W,IAAIkD,EAAQtS,MACrD6S,MAAOtC,EAAa9X,KAAK2W,IAAIkD,EAAQtS,MAAQyS,EAAQzS,MAGnDiN,IACFvP,EAAWuB,QAAU2N,GAAiBzX,KAAKmW,0BAA0B5X,EAAGoe,EAAKpe,GAAGkK,OAAS,SAAWwD,IAGtG,IAAInC,EAAUvB,EAAWuB,SAAW6S,EAAKpe,GAAGuL,QAC5CkR,EAAiBzS,EAAYuB,EAAS8B,EAAOF,GAC7CmQ,EAAiBtT,EAAYuB,EAASiT,EAAMhB,OAC5C/b,KAAK2d,cAAchB,EAAKpe,GAAIA,EAAGgK,EAAY0D,MAG9C,CACDrN,IAAK,aACL0C,MAAO,SAAoBsc,EAAMtH,GAC/B,IAiBIuH,EAjBAxQ,EAASrN,KAAKmN,YAAYE,OAC1B7B,EAAW6B,EAAON,wBAAwB/M,KAAKiP,OAAOlR,QAAO,SAAUoO,GACzE,OAAOA,EAAKc,WAAWnD,QAAQgU,WAE7B1R,EAAUiB,EAAOvD,QAAQsC,QACzBE,EAAS,GAETyR,EAAW,SAAkB5R,GAC/B,IAAIe,EAASf,EAAKc,WAAW8H,UAAUuB,GACnC0H,EAAM9Q,GAAUA,EAAOf,EAAKQ,OAAOY,MAEvC,IAAI,OAAcyQ,IAAQC,MAAMD,GAC9B,OAAO,GAIPE,EAAahe,EAA2BsL,GAG5C,IACE,IAAK0S,EAAW9c,MAAOyc,EAASK,EAAWtd,KAAKS,MAAO,CACrD,IAAI8K,EAAO0R,EAAOvc,MAElB,SAAkBoB,IAAd4T,IAA2ByH,EAAS5R,QAIxB,IAAZC,IAAqD,IAAhCE,EAAO6R,QAAQhS,EAAKP,aAA6BlJ,IAAZ0J,QAAwC1J,IAAfyJ,EAAKP,QAC1FU,EAAOnO,KAAKgO,EAAKP,OAGfO,EAAKT,QAAUkS,GACjB,OAGJ,MAAOlc,GACPwc,EAAWve,EAAE+B,GACb,QACAwc,EAAW1c,IAOb,OAJK8K,EAAO7N,QACV6N,EAAOnO,UAAKuE,GAGP4J,IAER,CACD1N,IAAK,iBACL0C,MAAO,SAAwBoK,GAC7B,OAAO1L,KAAKoe,gBAAW1b,EAAWgJ,GAAOjN,SAE1C,CACDG,IAAK,iBACL0C,MAAO,SAAwBwK,EAAc/K,EAAMuV,GACjD,IAAIhK,EAAStM,KAAKoe,WAAWtS,EAAcwK,GAEvC5K,OAAiBhJ,IAAT3B,EAAqBuL,EAAO6R,QAAQpd,IAAS,EACzD,OAAkB,IAAX2K,EAAeY,EAAO7N,OAAS,EAAIiN,IAE3C,CACD9M,IAAK,YACL0C,MAAO,WACL,IAII/C,EAAGgN,EAJHL,EAAOlL,KAAK8J,QACZqC,EAAOnM,KAAKmN,YACZE,EAASlB,EAAKkB,OACdgR,EAAS,GAGb,IAAK9f,EAAI,EAAGgN,EAAOY,EAAKiF,KAAK3S,OAAQF,EAAIgN,IAAQhN,EAC/C8f,EAAOlgB,KAAKkP,EAAO6M,iBAAiBla,KAAK+U,UAAUxW,GAAG8O,EAAOE,MAAOhP,IAGtE,IAAI+f,EAAepT,EAAKoT,aAExB,MAAO,CACL/a,IAFQ+a,GAAgBjF,EAAqBlN,GAG7CkS,OAAQA,EACR7a,MAAO6J,EAAOkR,YACdnT,IAAKiC,EAAOmR,UACZC,WAAYze,KAAK0e,iBACjB1T,MAAOqC,EACPyQ,QAAS5S,EAAK4S,QACd/B,MAAOuC,EAAe,EAAIpT,EAAKyT,mBAAqBzT,EAAK0T,iBAG5D,CACDhgB,IAAK,2BACL0C,MAAO,SAAkCoK,GACvC,IAaI0R,EAAMvS,EAbNgU,EAAoB7e,KAAKmN,YACzBR,EAASkS,EAAkBlS,OAC3BmD,EAAW+O,EAAkB/O,SAC7BgP,EAAgB9e,KAAK8J,QACrBiV,EAAYD,EAAczD,KAC1B2D,EAAeF,EAAcE,aAC7BC,EAAaF,GAAa,EAC1B7R,EAASlN,KAAK+U,UAAUrJ,GACxBqP,EAAS7N,EAAOyN,QAChBuE,EAAWpE,EAAWC,GACtBzZ,EAAQ4L,EAAOP,EAAOY,MACtB/J,EAAQ,EACR/E,EAASqR,EAAW9P,KAAKmf,WAAWxS,EAAQO,EAAQ4C,GAAYxO,EAGhE7C,IAAW6C,IACbkC,EAAQ/E,EAAS6C,EACjB7C,EAAS6C,GAGP4d,IACF5d,EAAQyZ,EAAON,SACfhc,EAASsc,EAAOL,OAASK,EAAON,SAElB,IAAVnZ,IAAe,IAAAF,GAAKE,MAAW,IAAAF,GAAK2Z,EAAOL,UAC7ClX,EAAQ,GAGVA,GAASlC,GAGX,IAAIiZ,GAAc,OAAcwE,IAAeG,EAAuB1b,EAAZub,EACtD1D,EAAO1O,EAAOuN,iBAAiBK,GAUnC,GAFA1P,GALEuS,EADEpd,KAAK2C,MAAMyc,kBAAkB1T,GACxBiB,EAAOuN,iBAAiB1W,EAAQ/E,GAEhC4c,GAGKA,EAEV/X,KAAK2W,IAAIpP,GAAQmU,EAAc,CACjCnU,EAzXR,SAAiBA,EAAM8B,EAAQsS,GAC7B,OAAa,IAATpU,GACK,IAAAzJ,GAAKyJ,IAGN8B,EAAOmQ,eAAiB,GAAK,IAAMnQ,EAAOpJ,KAAO0b,EAAa,GAAK,GAoX9DI,CAAQxU,EAAM8B,EAAQsS,GAAcD,EAEvC1d,IAAU2d,IACZ5D,GAAQxQ,EAAO,GAGjB,IAAIyU,EAAa3S,EAAO4S,mBAAmB,GACvCC,EAAW7S,EAAO4S,mBAAmB,GACrChc,EAAMD,KAAKC,IAAI+b,EAAYE,GAC3Bja,EAAMjC,KAAKiC,IAAI+Z,EAAYE,GAE/BpC,GADA/B,EAAO/X,KAAKiC,IAAIjC,KAAKC,IAAI8X,EAAM9V,GAAMhC,IACvBsH,EAGhB,GAAIwQ,IAAS1O,EAAOuN,iBAAiB+E,GAAa,CAChD,IAAIQ,GAAW,IAAAre,GAAKyJ,GAAQ8B,EAAO+S,qBAAqBT,GAAc,EACtE5D,GAAQoE,EACR5U,GAAQ4U,EAGV,MAAO,CACL5U,KAAMA,EACNwQ,KAAMA,EACN+B,KAAMA,EACNI,OAAQJ,EAAOvS,EAAO,KAGzB,CACDjM,IAAK,2BACL0C,MAAO,SAAkCoK,EAAOqR,GAC9C,IAIIS,EAAQ3S,EAJRG,EAAQ+R,EAAM/R,MACdlB,EAAU9J,KAAK8J,QACfiU,EAAWjU,EAAQiU,SACnB4B,GAAkB,IAAA3W,GAAec,EAAQ6V,gBAAiBC,EAAAA,GAG9D,GAAI7C,EAAMe,QAAS,CACjB,IAAIW,EAAaV,EAAW/d,KAAK0e,eAAehT,GAASqR,EAAM0B,WAC3D9K,EAAiC,SAAzB7J,EAAQwU,aA/e5B,SAAmC5S,EAAOqR,EAAOjT,EAAS2U,GACxD,IAAIJ,EAAStB,EAAMsB,OACf/E,EAAO+E,EAAO3S,GACdmH,EAAOnH,EAAQ,EAAI2S,EAAO3S,EAAQ,GAAK,KACvC5J,EAAO4J,EAAQ2S,EAAO5f,OAAS,EAAI4f,EAAO3S,EAAQ,GAAK,KACvDmU,EAAU/V,EAAQ6U,mBAET,OAAT9L,IACFA,EAAOyG,GAAiB,OAATxX,EAAgBib,EAAM3R,IAAM2R,EAAMvZ,MAAQ1B,EAAOwX,IAGrD,OAATxX,IACFA,EAAOwX,EAAOA,EAAOzG,GAGvB,IAAIrP,EAAQ8V,GAAQA,EAAOhW,KAAKC,IAAIsP,EAAM/Q,IAAS,EAAI+d,EAEvD,MAAO,CACLC,MAFSxc,KAAK2W,IAAInY,EAAO+Q,GAAQ,EAAIgN,EAEvBpB,EACd1C,MAAOjS,EAAQ8U,cACfpb,MAAOA,GA2d2Cuc,CAA0BrU,EAAOqR,EAAOjT,EAAS2U,GAlgBvG,SAAkC/S,EAAOqR,EAAOjT,EAAS2U,GACvD,IACI5T,EAAMkR,EADNiE,EAAYlW,EAAQwU,aAWxB,OARI,OAAc0B,IAChBnV,EAAOkS,EAAMxZ,IAAMuG,EAAQ6U,mBAC3B5C,EAAQjS,EAAQ8U,gBAEhB/T,EAAOmV,EAAYvB,EACnB1C,EAAQ,GAGH,CACL+D,MAAOjV,EAAO4T,EACd1C,MAAOA,EACPvY,MAAOuZ,EAAMsB,OAAO3S,GAASb,EAAO,GAmf6EoV,CAAyBvU,EAAOqR,EAAOjT,EAAS2U,GAEzJyB,EAAalgB,KAAKmgB,eAAengB,KAAK0L,MAAO1L,KAAKmN,YAAYvB,MAAOmS,EAAWrS,OAAQhJ,GAE5F8a,EAAS7J,EAAMnQ,MAAQmQ,EAAMmM,MAAQI,EAAavM,EAAMmM,MAAQ,EAChEjV,EAAOvH,KAAKC,IAAIoc,EAAiBhM,EAAMmM,MAAQnM,EAAMoI,YAErDyB,EAASxS,EAAMkP,iBAAiBla,KAAK+U,UAAUrJ,GAAOV,EAAMuC,MAAO7B,GACnEb,EAAOvH,KAAKC,IAAIoc,EAAiB5C,EAAMxZ,IAAMwZ,EAAMhB,OAGrD,MAAO,CACLV,KAAMmC,EAAS3S,EAAO,EACtBuS,KAAMI,EAAS3S,EAAO,EACtB2S,OAAQA,EACR3S,KAAMA,KAGT,CACDjM,IAAK,OACL0C,MAAO,WAOL,IANA,IAAI6K,EAAOnM,KAAKmN,YACZR,EAASR,EAAKQ,OACdyT,EAAQjU,EAAKiF,KACb7F,EAAO6U,EAAM3hB,OACbF,EAAI,EAEDA,EAAIgN,IAAQhN,EACsB,OAAnCyB,KAAK+U,UAAUxW,GAAGoO,EAAOY,OAC3B6S,EAAM7hB,GAAG8F,KAAKrE,KAAK6O,UAMpBqN,EAzVwB,CA0V/BtN,GAEFsN,EAActO,GAAK,MACnBsO,EAAcD,SAAW,CACvBnK,oBAAoB,EACpB6E,gBAAiB,MACjBgI,mBAAoB,GACpBC,cAAe,GACfd,SAAS,EACTjV,WAAY,CACVL,QAAS,CACP1F,KAAM,SACNyF,WAAY,CAAC,IAAK,IAAK,OAAQ,QAAS,aAI9C2T,EAAcmE,UAAY,CACxBnS,OAAQ,CACNoS,QAAS,CACPxd,KAAM,WACNyd,QAAQ,EACRC,KAAM,CACJD,QAAQ,IAGZE,QAAS,CACP3d,KAAM,SACN4d,aAAa,KAKnB,IAAIC,EAAgC,SAAUC,IAC5C,OAAUD,EAAkBC,GAE5B,IAAIC,EAAU7hB,EAAa2hB,GAE3B,SAASA,IAGP,OAFA,OAAgB3gB,KAAM2gB,GAEfE,EAAQziB,MAAM4B,KAAMxB,WAwI7B,OArIA,OAAamiB,EAAkB,CAAC,CAC9B/hB,IAAK,aACL0C,MAAO,WACLtB,KAAKwP,qBAAsB,GAE3B,QAAK,OAAgBmR,EAAiBnhB,WAAY,aAAcQ,MAAMN,KAAKM,QAE5E,CACDpB,IAAK,qBACL0C,MAAO,SAA4B6K,EAAMiF,EAAM5N,EAAOkP,GAGpD,IAFA,IAAIxF,GAAS,QAAK,OAAgByT,EAAiBnhB,WAAY,qBAAsBQ,MAAMN,KAAKM,KAAMmM,EAAMiF,EAAM5N,EAAOkP,GAEhHnU,EAAI,EAAGA,EAAI2O,EAAOzO,OAAQF,IACjC2O,EAAO3O,GAAGoc,QAAU3a,KAAKmW,0BAA0B5X,EAAIiF,GAAOsd,OAGhE,OAAO5T,IAER,CACDtO,IAAK,iBACL0C,MAAO,SAAwB6K,EAAMiF,EAAM5N,EAAOkP,GAGhD,IAFA,IAAIxF,GAAS,QAAK,OAAgByT,EAAiBnhB,WAAY,iBAAkBQ,MAAMN,KAAKM,KAAMmM,EAAMiF,EAAM5N,EAAOkP,GAE5GnU,EAAI,EAAGA,EAAI2O,EAAOzO,OAAQF,IAAK,CACtC,IAAI6F,EAAOgN,EAAK5N,EAAQjF,GACxB2O,EAAO3O,GAAGoc,SAAU,IAAA3R,GAAe5E,EAAK,GAAIpE,KAAKmW,0BAA0B5X,EAAIiF,GAAOsd,QAGxF,OAAO5T,IAER,CACDtO,IAAK,kBACL0C,MAAO,SAAyB6K,EAAMiF,EAAM5N,EAAOkP,GAGjD,IAFA,IAAIxF,GAAS,QAAK,OAAgByT,EAAiBnhB,WAAY,kBAAmBQ,MAAMN,KAAKM,KAAMmM,EAAMiF,EAAM5N,EAAOkP,GAE7GnU,EAAI,EAAGA,EAAI2O,EAAOzO,OAAQF,IAAK,CACtC,IAAI6F,EAAOgN,EAAK5N,EAAQjF,GACxB2O,EAAO3O,GAAGoc,SAAU,IAAA3R,GAAe5E,GAAQA,EAAKV,IAAMU,EAAKV,EAAG1D,KAAKmW,0BAA0B5X,EAAIiF,GAAOsd,QAG1G,OAAO5T,IAER,CACDtO,IAAK,iBACL0C,MAAO,WAIL,IAHA,IAAI8P,EAAOpR,KAAKmN,YAAYiE,KACxB7L,EAAM,EAEDhH,EAAI6S,EAAK3S,OAAS,EAAGF,GAAK,IAAKA,EACtCgH,EAAMjC,KAAKiC,IAAIA,EAAK6L,EAAK7S,GAAGsM,KAAK7K,KAAKmW,0BAA0B5X,IAAM,GAGxE,OAAOgH,EAAM,GAAKA,IAEnB,CACD3G,IAAK,mBACL0C,MAAO,SAA0BoK,GAC/B,IAAIS,EAAOnM,KAAKmN,YACZ6D,EAAS7E,EAAK6E,OACdE,EAAS/E,EAAK+E,OACdhE,EAASlN,KAAK+U,UAAUrJ,GACxByE,EAAIa,EAAOiE,iBAAiB/H,EAAOiD,GACnCC,EAAIc,EAAO+D,iBAAiB/H,EAAOkD,GACnC1M,EAAIwJ,EAAOyN,QACf,MAAO,CACL3F,MAAO7I,EAAK6I,MACZ1T,MAAO,IAAM6O,EAAI,KAAOC,GAAK1M,EAAI,KAAOA,EAAI,IAAM,OAGrD,CACD9E,IAAK,SACL0C,MAAO,SAAgB2K,GACrB,IAAI8U,EAAS/gB,KAAKmN,YAAYiE,KAC9BpR,KAAK6Y,eAAekI,EAAQ,EAAGA,EAAOtiB,OAAQwN,KAE/C,CACDrN,IAAK,iBACL0C,MAAO,SAAwByf,EAAQvd,EAAOkP,EAAOzG,GAanD,IAZA,IAAI2Q,EAAiB,UAAT3Q,EACR+U,EAAqBhhB,KAAKmN,YAC1BE,EAAS2T,EAAmB3T,OAC5BV,EAASqU,EAAmBrU,OAE5BsU,EAAyBjhB,KAAKkd,kBAAkB1Z,EAAOyI,GACvDwL,EAAgBwJ,EAAuBxJ,cACvCK,EAAiBmJ,EAAuBnJ,eAExCxK,EAAQD,EAAOE,KACfC,EAAQb,EAAOY,KAEVhP,EAAIiF,EAAOjF,EAAIiF,EAAQkP,EAAOnU,IAAK,CAC1C,IAAI2iB,EAAQH,EAAOxiB,GACf2O,GAAU0P,GAAS5c,KAAK+U,UAAUxW,GAClCgK,EAAa,GACb4Y,EAAS5Y,EAAW+E,GAASsP,EAAQvP,EAAOkS,mBAAmB,IAAOlS,EAAO6M,iBAAiBhN,EAAOI,IACrG8T,EAAS7Y,EAAWiF,GAASoP,EAAQjQ,EAAOkQ,eAAiBlQ,EAAOuN,iBAAiBhN,EAAOM,IAChGjF,EAAW8Y,KAAOpD,MAAMkD,IAAWlD,MAAMmD,GAErCtJ,IACFvP,EAAWuB,QAAU2N,GAAiBzX,KAAKmW,0BAA0B5X,EAAG2iB,EAAMzY,OAAS,SAAWwD,GAE9F2Q,IACFrU,EAAWuB,QAAQgX,OAAS,IAIhC9gB,KAAK2d,cAAcuD,EAAO3iB,EAAGgK,EAAY0D,MAG5C,CACDrN,IAAK,4BACL0C,MAAO,SAAmCoK,EAAOO,GAC/C,IAAIiB,EAASlN,KAAK+U,UAAUrJ,GAExB9B,GAAS,QAAK,OAAgB+W,EAAiBnhB,WAAY,4BAA6BQ,MAAMN,KAAKM,KAAM0L,EAAOO,GAEhHrC,EAAOG,UACTH,EAAShM,OAAOoM,OAAO,GAAIJ,EAAQ,CACjCG,SAAS,KAIb,IAAI+W,EAASlX,EAAOkX,OAOpB,MALa,WAAT7U,IACFrC,EAAOkX,OAAS,GAGlBlX,EAAOkX,SAAU,IAAA9X,GAAekE,GAAUA,EAAOyN,QAASmG,GACnDlX,MAIJ+W,EAhJ2B,CAiJlC/R,GAEF+R,EAAiB/S,GAAK,SACtB+S,EAAiB1E,SAAW,CAC1BnK,oBAAoB,EACpB6E,gBAAiB,QACjB9N,WAAY,CACVL,QAAS,CACP1F,KAAM,SACNyF,WAAY,CAAC,IAAK,IAAK,cAAe,aAI5CoY,EAAiBN,UAAY,CAC3BnS,OAAQ,CACNiC,EAAG,CACDrN,KAAM,UAERsN,EAAG,CACDtN,KAAM,WAGVwe,QAAS,CACPC,QAAS,CACPxe,UAAW,CACTye,MAAO,WACL,MAAO,QA+CjB,IAAIC,EAAkC,SAAUC,IAC9C,OAAUD,EAAoBC,GAE9B,IAAIC,EAAU3iB,EAAayiB,GAE3B,SAASA,EAAmB9e,EAAOmJ,GACjC,IAAI8V,EAUJ,OARA,OAAgB5hB,KAAMyhB,IAEtBG,EAASD,EAAQjiB,KAAKM,KAAM2C,EAAOmJ,IAC5B0D,qBAAsB,EAC7BoS,EAAOC,iBAAcnf,EACrBkf,EAAOE,iBAAcpf,EACrBkf,EAAOG,aAAUrf,EACjBkf,EAAOI,aAAUtf,EACVkf,EAuRT,OApRA,OAAaH,EAAoB,CAAC,CAChC7iB,IAAK,aACL0C,MAAO,cACN,CACD1C,IAAK,QACL0C,MAAO,SAAekC,EAAOkP,GAC3B,IAAItB,EAAOpR,KAAKiQ,aAAamB,KACzBjF,EAAOnM,KAAKmN,YAEhB,IAAsB,IAAlBnN,KAAKkP,SACP/C,EAAKoC,QAAU6C,MACV,CACL,IAaI7S,EAAGgN,EAbH0W,EAAS,SAAgB1jB,GAC3B,OAAQ6S,EAAK7S,IAGf,IAAI,IAAAA,GAAS6S,EAAK5N,IAAS,CACzB,IAAI0e,EAAqBliB,KAAKkP,SAAStQ,IACnCA,OAA6B,IAAvBsjB,EAAgC,QAAUA,EAEpDD,EAAS,SAAgB1jB,GACvB,QAAQ,OAAiB6S,EAAK7S,GAAIK,IAMtC,IAAKL,EAAIiF,EAAO+H,EAAO/H,EAAQkP,EAAOnU,EAAIgN,IAAQhN,EAChD4N,EAAKoC,QAAQhQ,GAAK0jB,EAAO1jB,MAI9B,CACDK,IAAK,eACL0C,MAAO,WACL,OAAO,IAAA4T,GAAUlV,KAAK8J,QAAQqY,SAAW,MAE1C,CACDvjB,IAAK,oBACL0C,MAAO,WACL,OAAO,IAAA4T,GAAUlV,KAAK8J,QAAQsY,iBAE/B,CACDxjB,IAAK,sBACL0C,MAAO,WAIL,IAHA,IAAIiC,EAAM,EAAA8e,EACN9c,GAAO,EAAA8c,EAEF9jB,EAAI,EAAGA,EAAIyB,KAAK2C,MAAMyO,KAAKC,SAAS5S,SAAUF,EACrD,GAAIyB,KAAK2C,MAAM2f,iBAAiB/jB,GAAI,CAClC,IAAI0O,EAAajN,KAAK2C,MAAM2O,eAAe/S,GAAG0O,WAE1CkV,EAAWlV,EAAWsV,eAEtBH,EAAgBnV,EAAWuV,oBAE/Bjf,EAAMD,KAAKC,IAAIA,EAAK4e,GACpB5c,EAAMjC,KAAKiC,IAAIA,EAAK4c,EAAWC,GAInC,MAAO,CACLD,SAAU5e,EACV6e,cAAe7c,EAAMhC,KAGxB,CACD3E,IAAK,SACL0C,MAAO,SAAgB2K,GACrB,IACI8J,EADQ/V,KAAK2C,MACKoT,UAClB5J,EAAOnM,KAAKmN,YACZsV,EAAOtW,EAAKiF,KACZsR,EAAU1iB,KAAK2iB,oBAAsB3iB,KAAK4iB,aAAaH,GAAQziB,KAAK8J,QAAQ4Y,QAC5EG,EAAUvf,KAAKiC,KAAKjC,KAAKC,IAAIwS,EAAU2H,MAAO3H,EAAU0H,QAAUiF,GAAW,EAAG,GAChFI,EAASxf,KAAKC,KAAI,OAAavD,KAAK8J,QAAQgZ,OAAQD,GAAU,GAE9DE,EAAc/iB,KAAKgjB,eAAehjB,KAAK0L,OAEvCuX,EAAwBjjB,KAAKkjB,sBAC7Bd,EAAgBa,EAAsBb,cAGtCe,EA9IV,SAA2BhB,EAAUC,EAAeU,GAClD,IAAIM,EAAS,EACTC,EAAS,EACTtB,EAAU,EACVC,EAAU,EAEd,GAAII,EAAgB,EAAAC,EAAK,CACvB,IAAIiB,EAAanB,EACboB,EAAWD,EAAalB,EACxBoB,EAASlgB,KAAKmgB,IAAIH,GAClBI,EAASpgB,KAAKqgB,IAAIL,GAClBM,EAAOtgB,KAAKmgB,IAAIF,GAChBM,EAAOvgB,KAAKqgB,IAAIJ,GAEhBO,EAAU,SAAiBC,EAAOlK,EAAG1E,GACvC,OAAO,OAAc4O,EAAOT,EAAYC,GAAU,GAAQ,EAAIjgB,KAAKiC,IAAIsU,EAAGA,EAAIiJ,EAAQ3N,EAAGA,EAAI2N,IAG3FkB,EAAU,SAAiBD,EAAOlK,EAAG1E,GACvC,OAAO,OAAc4O,EAAOT,EAAYC,GAAU,IAAS,EAAIjgB,KAAKC,IAAIsW,EAAGA,EAAIiJ,EAAQ3N,EAAGA,EAAI2N,IAG5FmB,EAAOH,EAAQ,EAAGN,EAAQI,GAC1BM,EAAOJ,EAAQ,EAAAK,EAAST,EAAQG,GAChCO,EAAOJ,EAAQ,EAAAK,EAAIb,EAAQI,GAC3BU,EAAON,EAAQ,EAAAK,EAAK,EAAAF,EAAST,EAAQG,GACzCT,GAAUa,EAAOG,GAAQ,EACzBf,GAAUa,EAAOI,GAAQ,EACzBvC,IAAYkC,EAAOG,GAAQ,EAC3BpC,IAAYkC,EAAOI,GAAQ,EAG7B,MAAO,CACLlB,OAAQA,EACRC,OAAQA,EACRtB,QAASA,EACTC,QAASA,GA0GkBuC,CAFVtB,EAAsBd,SAEgBC,EAAeU,GAChEM,EAASD,EAAmBC,OAC5BC,EAASF,EAAmBE,OAC5BtB,EAAUoB,EAAmBpB,QAC7BC,EAAUmB,EAAmBnB,QAE7BwC,GAAYzO,EAAU2H,MAAQgF,GAAWU,EACzCqB,GAAa1O,EAAU0H,OAASiF,GAAWW,EAC3CqB,EAAYphB,KAAKiC,IAAIjC,KAAKC,IAAIihB,EAAUC,GAAa,EAAG,GACxD3C,GAAc,OAAY9hB,KAAK8J,QAAQgX,OAAQ4D,GAG/CC,GAAgB7C,EAFFxe,KAAKiC,IAAIuc,EAAcgB,EAAQ,IAEA9iB,KAAK4kB,gCAEtD5kB,KAAK+hB,QAAUA,EAAUD,EACzB9hB,KAAKgiB,QAAUA,EAAUF,EACzB3V,EAAK0Y,MAAQ7kB,KAAK8kB,iBAClB9kB,KAAK8hB,YAAcA,EAAc6C,EAAe3kB,KAAK+kB,qBAAqB/kB,KAAK0L,OAC/E1L,KAAK6hB,YAAcve,KAAKiC,IAAIvF,KAAK8hB,YAAc6C,EAAe5B,EAAa,GAC3E/iB,KAAK6Y,eAAe4J,EAAM,EAAGA,EAAKhkB,OAAQwN,KAE3C,CACDrN,IAAK,iBACL0C,MAAO,SAAwB/C,EAAGqe,GAChC,IAAI1R,EAAOlL,KAAK8J,QACZqC,EAAOnM,KAAKmN,YAEZiV,EAAgBpiB,KAAKwiB,oBAEzB,OAAI5F,GAAS1R,EAAKxC,UAAUsc,gBAAkBhlB,KAAK2C,MAAMyc,kBAAkB7gB,IAA0B,OAApB4N,EAAKoC,QAAQhQ,IAAe4N,EAAKiF,KAAK7S,GAAG0V,OACjH,EAGFjU,KAAKilB,uBAAuB9Y,EAAKoC,QAAQhQ,GAAK6jB,EAAgB,EAAAC,KAEtE,CACDzjB,IAAK,iBACL0C,MAAO,SAAwBmhB,EAAMjf,EAAOkP,EAAOzG,GACjD,IAiBI1N,EAjBAqe,EAAiB,UAAT3Q,EACRtJ,EAAQ3C,KAAK2C,MACboT,EAAYpT,EAAMoT,UAElBmP,EADOviB,EAAMmH,QACQpB,UACrByc,GAAWpP,EAAUN,KAAOM,EAAUR,OAAS,EAC/C6P,GAAWrP,EAAUT,IAAMS,EAAUP,QAAU,EAC/C6P,EAAezI,GAASsI,EAAcG,aACtCxD,EAAcwD,EAAe,EAAIrlB,KAAK6hB,YACtCC,EAAcuD,EAAe,EAAIrlB,KAAK8hB,YAEtCwD,EAAyBtlB,KAAKkd,kBAAkB1Z,EAAOyI,GACvDwL,EAAgB6N,EAAuB7N,cACvCK,EAAiBwN,EAAuBxN,eAExCwL,EAAatjB,KAAKuiB,eAItB,IAAKhkB,EAAI,EAAGA,EAAIiF,IAASjF,EACvB+kB,GAActjB,KAAKulB,eAAehnB,EAAGqe,GAGvC,IAAKre,EAAIiF,EAAOjF,EAAIiF,EAAQkP,IAASnU,EAAG,CACtC,IAAI6jB,EAAgBpiB,KAAKulB,eAAehnB,EAAGqe,GAEvC4I,EAAM/C,EAAKlkB,GACXgK,EAAa,CACf4H,EAAGgV,EAAUnlB,KAAK+hB,QAClB3R,EAAGgV,EAAUplB,KAAKgiB,QAClBsB,WAAYA,EACZC,SAAUD,EAAalB,EACvBA,cAAeA,EACfN,YAAaA,EACbD,YAAaA,GAGX/J,IACFvP,EAAWuB,QAAU2N,GAAiBzX,KAAKmW,0BAA0B5X,EAAGinB,EAAI/c,OAAS,SAAWwD,IAGlGqX,GAAclB,EACdpiB,KAAK2d,cAAc6H,EAAKjnB,EAAGgK,EAAY0D,MAG1C,CACDrN,IAAK,iBACL0C,MAAO,WACL,IAGI/C,EAHA4N,EAAOnM,KAAKmN,YACZsY,EAAWtZ,EAAKiF,KAChByT,EAAQ,EAGZ,IAAKtmB,EAAI,EAAGA,EAAIknB,EAAShnB,OAAQF,IAAK,CACpC,IAAI+C,EAAQ6K,EAAKoC,QAAQhQ,GAEX,OAAV+C,GAAmB2c,MAAM3c,KAAUtB,KAAK2C,MAAMyc,kBAAkB7gB,IAAOknB,EAASlnB,GAAG0V,SACrF4Q,GAASvhB,KAAK2W,IAAI3Y,IAItB,OAAOujB,IAER,CACDjmB,IAAK,yBACL0C,MAAO,SAAgCA,GACrC,IAAIujB,EAAQ7kB,KAAKmN,YAAY0X,MAE7B,OAAIA,EAAQ,IAAM5G,MAAM3c,GACf,EAAA+gB,GAAO/e,KAAK2W,IAAI3Y,GAASujB,GAG3B,IAER,CACDjmB,IAAK,mBACL0C,MAAO,SAA0BoK,GAC/B,IAAIS,EAAOnM,KAAKmN,YACZxK,EAAQ3C,KAAK2C,MACbsQ,EAAStQ,EAAMyO,KAAK6B,QAAU,GAC9B3R,GAAQ,OAAa6K,EAAKoC,QAAQ7C,GAAQ/I,EAAMmH,QAAQ4b,QAC5D,MAAO,CACL1Q,MAAO/B,EAAOvH,IAAU,GACxBpK,MAAOA,KAGV,CACD1C,IAAK,oBACL0C,MAAO,SAA2BmhB,GAChC,IAEIlkB,EAAGgN,EAAMY,EAAMc,EAAYnD,EAF3BvE,EAAM,EACN5C,EAAQ3C,KAAK2C,MAGjB,IAAK8f,EACH,IAAKlkB,EAAI,EAAGgN,EAAO5I,EAAMyO,KAAKC,SAAS5S,OAAQF,EAAIgN,IAAQhN,EACzD,GAAIoE,EAAM2f,iBAAiB/jB,GAAI,CAE7BkkB,GADAtW,EAAOxJ,EAAM2O,eAAe/S,IAChB6S,KACZnE,EAAad,EAAKc,WAClB,MAKN,IAAKwV,EACH,OAAO,EAGT,IAAKlkB,EAAI,EAAGgN,EAAOkX,EAAKhkB,OAAQF,EAAIgN,IAAQhN,EAGd,WAF5BuL,EAAUmD,EAAWkJ,0BAA0B5X,IAEnConB,cACVpgB,EAAMjC,KAAKiC,IAAIA,EAAKuE,EAAQ8b,aAAe,EAAG9b,EAAQ+b,kBAAoB,IAI9E,OAAOtgB,IAER,CACD3G,IAAK,eACL0C,MAAO,SAAsBmhB,GAG3B,IAFA,IAAIld,EAAM,EAEDhH,EAAI,EAAGgN,EAAOkX,EAAKhkB,OAAQF,EAAIgN,IAAQhN,EAAG,CACjD,IAAIuL,EAAU9J,KAAKmW,0BAA0B5X,GAC7CgH,EAAMjC,KAAKiC,IAAIA,EAAKuE,EAAQyW,QAAU,EAAGzW,EAAQgc,aAAe,GAGlE,OAAOvgB,IAER,CACD3G,IAAK,uBACL0C,MAAO,SAA8BwK,GAGnC,IAFA,IAAIia,EAAmB,EAEdxnB,EAAI,EAAGA,EAAIuN,IAAgBvN,EAC9ByB,KAAK2C,MAAM2f,iBAAiB/jB,KAC9BwnB,GAAoB/lB,KAAKgjB,eAAezkB,IAI5C,OAAOwnB,IAER,CACDnnB,IAAK,iBACL0C,MAAO,SAAwBwK,GAC7B,OAAOxI,KAAKiC,KAAI,IAAAyD,GAAehJ,KAAK2C,MAAMyO,KAAKC,SAASvF,GAAcka,OAAQ,GAAI,KAEnF,CACDpnB,IAAK,gCACL0C,MAAO,WACL,OAAOtB,KAAK+kB,qBAAqB/kB,KAAK2C,MAAMyO,KAAKC,SAAS5S,SAAW,MAIlEgjB,EAvS6B,CAwSpC7S,GAEF6S,EAAmB7T,GAAK,WACxB6T,EAAmBxF,SAAW,CAC5BnK,oBAAoB,EACpB6E,gBAAiB,MACjBjO,UAAW,CACTsc,eAAe,EACfK,cAAc,GAEhBxc,WAAY,CACVL,QAAS,CACP1F,KAAM,SACNyF,WAAY,CAAC,gBAAiB,WAAY,cAAe,cAAe,aAAc,IAAK,IAAK,SAAU,cAAe,aAG7Hua,OAAQ,MACRX,SAAU,EACVC,cAAe,IACftB,OAAQ,OACR4B,QAAS,EACT/R,UAAW,KAEb8Q,EAAmBwE,YAAc,CAC/B5d,YAAa,SAAqBtH,GAChC,MAAgB,YAATA,GAETqH,WAAY,SAAoBrH,GAC9B,MAAgB,YAATA,IAGX0gB,EAAmBpB,UAAY,CAC7B6F,YAAa,EACb5E,QAAS,CACP6E,OAAQ,CACNlT,OAAQ,CACNmT,eAAgB,SAAwBzjB,GACtC,IAAIyO,EAAOzO,EAAMyO,KAEjB,GAAIA,EAAK6B,OAAOxU,QAAU2S,EAAKC,SAAS5S,OAAQ,CAC9C,IAAI4nB,EAAa1jB,EAAMwjB,OAAOrc,QAAQmJ,OAAOoT,WAC7C,OAAOjV,EAAK6B,OAAOqT,KAAI,SAAUtR,EAAOzW,GACtC,IACIgoB,EADO5jB,EAAM2O,eAAe,GACfrE,WAAWgL,SAAS1Z,GACrC,MAAO,CACLioB,KAAMxR,EACNyR,UAAWF,EAAMG,gBACjBC,YAAaJ,EAAMK,YACnBC,UAAWN,EAAMX,YACjBS,WAAYA,EACZpS,QAAStR,EAAMyc,kBAAkB7gB,GACjCmN,MAAOnN,MAKb,MAAO,KAGXuoB,QAAS,SAAiBnnB,EAAGonB,EAAYZ,GACvCA,EAAOxjB,MAAMqkB,qBAAqBD,EAAWrb,OAC7Cya,EAAOxjB,MAAMgI,WAGjB4W,QAAS,CACPxe,UAAW,CACTye,MAAO,WACL,MAAO,IAETxM,MAAO,SAAeiS,GACpB,IAAIC,EAAYD,EAAYjS,MACxB1T,EAAQ,KAAO2lB,EAAYE,eAS/B,OAPI,OAAQD,IACVA,EAAYA,EAAUpmB,SACZ,IAAMQ,EAEhB4lB,GAAa5lB,EAGR4lB,OAOjB,IAAIE,EAA8B,SAAUC,IAC1C,OAAUD,EAAgBC,GAE1B,IAAIC,EAAUtoB,EAAaooB,GAE3B,SAASA,IAGP,OAFA,OAAgBpnB,KAAMonB,GAEfE,EAAQlpB,MAAM4B,KAAMxB,WA6H7B,OA1HA,OAAa4oB,EAAgB,CAAC,CAC5BxoB,IAAK,aACL0C,MAAO,WACLtB,KAAKwP,qBAAsB,EAC3BxP,KAAKyP,oBAAqB,GAE1B,QAAK,OAAgB2X,EAAe5nB,WAAY,aAAcQ,MAAMN,KAAKM,QAE1E,CACDpB,IAAK,SACL0C,MAAO,SAAgB2K,GACrB,IAAIE,EAAOnM,KAAKmN,YACZoa,EAAOpb,EAAK6D,QACZwX,EAAarb,EAAKiF,KAClB2P,OAAwB,IAAfyG,EAAwB,GAAKA,EACtCC,EAAWtb,EAAKsb,SAChBC,EAAqB1nB,KAAK2C,MAAM+U,oBAEhCiQ,GAAwB,OAAiCxb,EAAM4U,EAAQ2G,GACvElkB,EAAQmkB,EAAsBnkB,MAC9BkP,EAAQiV,EAAsBjV,MAElC1S,KAAKsP,WAAa9L,EAClBxD,KAAKuP,WAAamD,GAEd,OAAoBvG,KACtB3I,EAAQ,EACRkP,EAAQqO,EAAOtiB,QAGjB8oB,EAAKpe,OAASnJ,KAAK2C,MACnB4kB,EAAKK,cAAgB5nB,KAAK0L,MAC1B6b,EAAKM,aAAeJ,EAASI,WAC7BN,EAAKxG,OAASA,EACd,IAAIjX,EAAU9J,KAAKkW,6BAA6BjK,GAE3CjM,KAAK8J,QAAQge,WAChBhe,EAAQ8b,YAAc,GAGxB9b,EAAQie,QAAU/nB,KAAK8J,QAAQie,QAC/B/nB,KAAK2d,cAAc4J,OAAM7kB,EAAW,CAClCslB,UAAWN,EACX5d,QAASA,GACRmC,GACHjM,KAAK6Y,eAAekI,EAAQvd,EAAOkP,EAAOzG,KAE3C,CACDrN,IAAK,iBACL0C,MAAO,SAAwByf,EAAQvd,EAAOkP,EAAOzG,GAqBnD,IApBA,IAAI2Q,EAAiB,UAAT3Q,EACRgc,EAAqBjoB,KAAKmN,YAC1BE,EAAS4a,EAAmB5a,OAC5BV,EAASsb,EAAmBtb,OAC5BmD,EAAWmY,EAAmBnY,SAC9B2X,EAAWQ,EAAmBR,SAE9BS,EAAyBloB,KAAKkd,kBAAkB1Z,EAAOyI,GACvDwL,EAAgByQ,EAAuBzQ,cACvCK,EAAiBoQ,EAAuBpQ,eAExCxK,EAAQD,EAAOE,KACfC,EAAQb,EAAOY,KACf4a,EAAiBnoB,KAAK8J,QACtBse,EAAWD,EAAeC,SAC1BL,EAAUI,EAAeJ,QACzBM,GAAe,OAASD,GAAYA,EAAWjU,OAAOC,kBACtDkU,EAAetoB,KAAK2C,MAAM+U,qBAAuBkF,GAAkB,SAAT3Q,EAC1Dsc,EAAa/kB,EAAQ,GAAKxD,KAAK+U,UAAUvR,EAAQ,GAE5CjF,EAAIiF,EAAOjF,EAAIiF,EAAQkP,IAASnU,EAAG,CAC1C,IAAI2iB,EAAQH,EAAOxiB,GACf2O,EAASlN,KAAK+U,UAAUxW,GACxBgK,EAAa+f,EAAepH,EAAQ,GACpCsH,GAAW,OAActb,EAAOM,IAChC2T,EAAS5Y,EAAW+E,GAASD,EAAO6M,iBAAiBhN,EAAOI,GAAQ/O,GACpE6iB,EAAS7Y,EAAWiF,GAASoP,GAAS4L,EAAW7b,EAAOkQ,eAAiBlQ,EAAOuN,iBAAiBpK,EAAW9P,KAAKmf,WAAWxS,EAAQO,EAAQ4C,GAAY5C,EAAOM,GAAQjP,GAC3KgK,EAAW8Y,KAAOpD,MAAMkD,IAAWlD,MAAMmD,IAAWoH,EACpDjgB,EAAWkgB,KAAOlqB,EAAI,GAAK+E,KAAK2W,IAAI/M,EAAOI,GAASib,EAAWjb,IAAU+a,EAErEN,IACFxf,EAAW2E,OAASA,EACpB3E,EAAWgO,IAAMkR,EAASrW,KAAK7S,IAG7BuZ,IACFvP,EAAWuB,QAAU2N,GAAiBzX,KAAKmW,0BAA0B5X,EAAG2iB,EAAMzY,OAAS,SAAWwD,IAG/Fqc,GACHtoB,KAAK2d,cAAcuD,EAAO3iB,EAAGgK,EAAY0D,GAG3Csc,EAAarb,KAGhB,CACDtO,IAAK,iBACL0C,MAAO,WACL,IAAI6K,EAAOnM,KAAKmN,YACZ6C,EAAU7D,EAAK6D,QACf0Y,EAAS1Y,EAAQlG,SAAWkG,EAAQlG,QAAQ8b,aAAe,EAC3DxU,EAAOjF,EAAKiF,MAAQ,GAExB,IAAKA,EAAK3S,OACR,OAAOiqB,EAGT,IAAIC,EAAavX,EAAK,GAAGvG,KAAK7K,KAAKmW,0BAA0B,IACzDyS,EAAYxX,EAAKA,EAAK3S,OAAS,GAAGoM,KAAK7K,KAAKmW,0BAA0B/E,EAAK3S,OAAS,IACxF,OAAO6E,KAAKiC,IAAImjB,EAAQC,EAAYC,GAAa,IAElD,CACDhqB,IAAK,OACL0C,MAAO,WACL,IAAI6K,EAAOnM,KAAKmN,YAChBhB,EAAK6D,QAAQ6Y,oBAAoB7oB,KAAK2C,MAAMoT,UAAW5J,EAAKkB,OAAOE,OAEnE,QAAK,OAAgB6Z,EAAe5nB,WAAY,OAAQQ,MAAMN,KAAKM,UAIhEonB,EArIyB,CAsIhCxY,GAEFwY,EAAexZ,GAAK,OACpBwZ,EAAenL,SAAW,CACxBnK,mBAAoB,OACpB6E,gBAAiB,QACjBmR,UAAU,EACVM,UAAU,GAEZhB,EAAe/G,UAAY,CACzBnS,OAAQ,CACNoS,QAAS,CACPxd,KAAM,YAER2d,QAAS,CACP3d,KAAM,YAKZ,IAAIgmB,EAAmC,SAAUC,IAC/C,OAAUD,EAAqBC,GAE/B,IAAIC,EAAUhqB,EAAa8pB,GAE3B,SAASA,EAAoBnmB,EAAOmJ,GAClC,IAAImd,EAOJ,OALA,OAAgBjpB,KAAM8oB,IAEtBG,EAASD,EAAQtpB,KAAKM,KAAM2C,EAAOmJ,IAC5B+V,iBAAcnf,EACrBumB,EAAOnH,iBAAcpf,EACdumB,EA0IT,OAvIA,OAAaH,EAAqB,CAAC,CACjClqB,IAAK,mBACL0C,MAAO,SAA0BoK,GAC/B,IAAIS,EAAOnM,KAAKmN,YACZxK,EAAQ3C,KAAK2C,MACbsQ,EAAStQ,EAAMyO,KAAK6B,QAAU,GAC9B3R,GAAQ,OAAa6K,EAAKoC,QAAQ7C,GAAOhI,EAAGf,EAAMmH,QAAQ4b,QAC9D,MAAO,CACL1Q,MAAO/B,EAAOvH,IAAU,GACxBpK,MAAOA,KAGV,CACD1C,IAAK,kBACL0C,MAAO,SAAyB6K,EAAMiF,EAAM5N,EAAOkP,GACjD,OAAO,SAAiC1S,KAAjC,CAAuCmM,EAAMiF,EAAM5N,EAAOkP,KAElE,CACD9T,IAAK,SACL0C,MAAO,SAAgB2K,GACrB,IAAIwW,EAAOziB,KAAKmN,YAAYiE,KAE5BpR,KAAKkpB,gBAELlpB,KAAK6Y,eAAe4J,EAAM,EAAGA,EAAKhkB,OAAQwN,KAE3C,CACDrN,IAAK,YACL0C,MAAO,WACL,IAAI6nB,EAASnpB,KAETmM,EAAOnM,KAAKmN,YACZwG,EAAQ,CACVpQ,IAAK4Q,OAAOC,kBACZ7O,IAAK4O,OAAOE,mBAed,OAbAlI,EAAKiF,KAAKzS,SAAQ,SAAUsX,EAASvK,GACnC,IAAIwB,EAASic,EAAOpU,UAAUrJ,GAAOhI,GAEhCua,MAAM/Q,IAAWic,EAAOxmB,MAAMyc,kBAAkB1T,KAC/CwB,EAASyG,EAAMpQ,MACjBoQ,EAAMpQ,IAAM2J,GAGVA,EAASyG,EAAMpO,MACjBoO,EAAMpO,IAAM2H,OAIXyG,IAER,CACD/U,IAAK,gBACL0C,MAAO,WACL,IAAIqB,EAAQ3C,KAAK2C,MACboT,EAAYpT,EAAMoT,UAClB7K,EAAOvI,EAAMmH,QACbsf,EAAU9lB,KAAKC,IAAIwS,EAAUR,MAAQQ,EAAUN,KAAMM,EAAUP,OAASO,EAAUT,KAClFwM,EAAcxe,KAAKiC,IAAI6jB,EAAU,EAAG,GAEpCzE,GAAgB7C,EADFxe,KAAKiC,IAAI2F,EAAKme,iBAAmBvH,EAAc,IAAM5W,EAAKme,iBAAmB,EAAG,IACjD1mB,EAAM2mB,yBACvDtpB,KAAK8hB,YAAcA,EAAc6C,EAAe3kB,KAAK0L,MACrD1L,KAAK6hB,YAAc7hB,KAAK8hB,YAAc6C,IAEvC,CACD/lB,IAAK,iBACL0C,MAAO,SAAwBmhB,EAAMjf,EAAOkP,EAAOzG,GACjD,IASI1N,EATAqe,EAAiB,UAAT3Q,EACRtJ,EAAQ3C,KAAK2C,MAEbuiB,EADOviB,EAAMmH,QACQpB,UACrBsC,EAAQhL,KAAKmN,YAAYgE,OACzBgU,EAAUna,EAAMue,QAChBnE,EAAUpa,EAAMwe,QAChBC,EAAoBze,EAAM0e,cAAc,GAAK,GAAM,EAAArF,EACnDN,EAAQ0F,EAERE,EAAe,IAAM3pB,KAAK4pB,uBAE9B,IAAKrrB,EAAI,EAAGA,EAAIiF,IAASjF,EACvBwlB,GAAS/jB,KAAK6pB,cAActrB,EAAG0N,EAAM0d,GAGvC,IAAKprB,EAAIiF,EAAOjF,EAAIiF,EAAQkP,EAAOnU,IAAK,CACtC,IAAIinB,EAAM/C,EAAKlkB,GACX+kB,EAAaS,EAEbR,EAAWQ,EAAQ/jB,KAAK6pB,cAActrB,EAAG0N,EAAM0d,GAE/C7H,EAAcnf,EAAMyc,kBAAkB7gB,GAAKyM,EAAM8e,8BAA8B9pB,KAAK+U,UAAUxW,GAAGmF,GAAK,EAC1GqgB,EAAQR,EAEJ3G,IACEsI,EAAcG,eAChBvD,EAAc,GAGZoD,EAAcF,gBAChB1B,EAAaC,EAAWkG,IAI5B,IAAIlhB,EAAa,CACf4H,EAAGgV,EACH/U,EAAGgV,EACHvD,YAAa,EACbC,YAAaA,EACbwB,WAAYA,EACZC,SAAUA,EACVzZ,QAAS9J,KAAKmW,0BAA0B5X,EAAGinB,EAAI/c,OAAS,SAAWwD,IAErEjM,KAAK2d,cAAc6H,EAAKjnB,EAAGgK,EAAY0D,MAG1C,CACDrN,IAAK,uBACL0C,MAAO,WACL,IAAIyoB,EAAS/pB,KAETmM,EAAOnM,KAAKmN,YACZuF,EAAQ,EAMZ,OALAvG,EAAKiF,KAAKzS,SAAQ,SAAUsX,EAASvK,IAC9BuS,MAAM8L,EAAOhV,UAAUrJ,GAAOhI,IAAMqmB,EAAOpnB,MAAMyc,kBAAkB1T,IACtEgH,OAGGA,IAER,CACD9T,IAAK,gBACL0C,MAAO,SAAuBoK,EAAOO,EAAM0d,GACzC,OAAO3pB,KAAK2C,MAAMyc,kBAAkB1T,IAAS,IAAAwJ,GAAUlV,KAAKmW,0BAA0BzK,EAAOO,GAAM8X,OAAS4F,GAAgB,MAIzHb,EAvJ8B,CAwJrCla,GAEFka,EAAoBlb,GAAK,YACzBkb,EAAoB7M,SAAW,CAC7BtF,gBAAiB,MACjBjO,UAAW,CACTsc,eAAe,EACfK,cAAc,GAEhBxc,WAAY,CACVL,QAAS,CACP1F,KAAM,SACNyF,WAAY,CAAC,IAAK,IAAK,aAAc,WAAY,cAAe,iBAGpEoI,UAAW,IACX2S,WAAY,GAEdwF,EAAoBzI,UAAY,CAC9B6F,YAAa,EACb5E,QAAS,CACP6E,OAAQ,CACNlT,OAAQ,CACNmT,eAAgB,SAAwBzjB,GACtC,IAAIyO,EAAOzO,EAAMyO,KAEjB,GAAIA,EAAK6B,OAAOxU,QAAU2S,EAAKC,SAAS5S,OAAQ,CAC9C,IAAI4nB,EAAa1jB,EAAMwjB,OAAOrc,QAAQmJ,OAAOoT,WAC7C,OAAOjV,EAAK6B,OAAOqT,KAAI,SAAUtR,EAAOzW,GACtC,IACIgoB,EADO5jB,EAAM2O,eAAe,GACfrE,WAAWgL,SAAS1Z,GACrC,MAAO,CACLioB,KAAMxR,EACNyR,UAAWF,EAAMG,gBACjBC,YAAaJ,EAAMK,YACnBC,UAAWN,EAAMX,YACjBS,WAAYA,EACZpS,QAAStR,EAAMyc,kBAAkB7gB,GACjCmN,MAAOnN,MAKb,MAAO,KAGXuoB,QAAS,SAAiBnnB,EAAGonB,EAAYZ,GACvCA,EAAOxjB,MAAMqkB,qBAAqBD,EAAWrb,OAC7Cya,EAAOxjB,MAAMgI,WAGjB4W,QAAS,CACPxe,UAAW,CACTye,MAAO,WACL,MAAO,IAETxM,MAAO,SAAeoB,GACpB,OAAOA,EAAQzT,MAAMyO,KAAK6B,OAAOmD,EAAQE,WAAa,KAAOF,EAAQ+Q,mBAK7EjZ,OAAQ,CACNxK,EAAG,CACDZ,KAAM,eACNknB,WAAY,CACVC,SAAS,GAEXvJ,aAAa,EACbF,KAAM,CACJ0J,UAAU,GAEZC,YAAa,CACXF,SAAS,GAEX3G,WAAY,KAKlB,IAAI8G,EAA6B,SAAUC,IACzC,OAAUD,EAAeC,GAEzB,IAAIC,EAAUtrB,EAAaorB,GAE3B,SAASA,IAGP,OAFA,OAAgBpqB,KAAMoqB,GAEfE,EAAQlsB,MAAM4B,KAAMxB,WAG7B,OAAO4rB,EAXwB,CAY/B3I,GAEF2I,EAAcxc,GAAK,MACnBwc,EAAcnO,SAAW,CACvB6G,OAAQ,EACRX,SAAU,EACVC,cAAe,IACftB,OAAQ,QAGV,IAAIyJ,EAA+B,SAAUC,IAC3C,OAAUD,EAAiBC,GAE3B,IAAIC,EAAUzrB,EAAaurB,GAE3B,SAASA,IAGP,OAFA,OAAgBvqB,KAAMuqB,GAEfE,EAAQrsB,MAAM4B,KAAMxB,WAoE7B,OAjEA,OAAa+rB,EAAiB,CAAC,CAC7B3rB,IAAK,mBACL0C,MAAO,SAA0BoK,GAC/B,IAAIiB,EAAS3M,KAAKmN,YAAYR,OAC1BO,EAASlN,KAAK+U,UAAUrJ,GAC5B,MAAO,CACLsJ,MAAOrI,EAAOuG,YAAYxH,GAC1BpK,MAAO,GAAKqL,EAAOsI,iBAAiB/H,EAAOP,EAAOY,UAGrD,CACD3O,IAAK,kBACL0C,MAAO,SAAyB6K,EAAMiF,EAAM5N,EAAOkP,GACjD,OAAO,SAAiC1S,KAAjC,CAAuCmM,EAAMiF,EAAM5N,EAAOkP,KAElE,CACD9T,IAAK,SACL0C,MAAO,SAAgB2K,GACrB,IAAIE,EAAOnM,KAAKmN,YACZoa,EAAOpb,EAAK6D,QACZ+Q,EAAS5U,EAAKiF,MAAQ,GACtB6B,EAAS9G,EAAKkB,OAAO6F,YAGzB,GAFAqU,EAAKxG,OAASA,EAED,WAAT9U,EAAmB,CACrB,IAAInC,EAAU9J,KAAKkW,6BAA6BjK,GAE3CjM,KAAK8J,QAAQge,WAChBhe,EAAQ8b,YAAc,GAGxB,IAAIrd,EAAa,CACfrB,OAAO,EACPwjB,UAAWzX,EAAOxU,SAAWsiB,EAAOtiB,OACpCqL,QAASA,GAEX9J,KAAK2d,cAAc4J,OAAM7kB,EAAW6F,EAAY0D,GAGlDjM,KAAK6Y,eAAekI,EAAQ,EAAGA,EAAOtiB,OAAQwN,KAE/C,CACDrN,IAAK,iBACL0C,MAAO,SAAwByf,EAAQvd,EAAOkP,EAAOzG,GAInD,IAHA,IAAIjB,EAAQhL,KAAKmN,YAAYgE,OACzByL,EAAiB,UAAT3Q,EAEH1N,EAAIiF,EAAOjF,EAAIiF,EAAQkP,EAAOnU,IAAK,CAC1C,IAAI2iB,EAAQH,EAAOxiB,GACfuL,EAAU9J,KAAKmW,0BAA0B5X,EAAG2iB,EAAMzY,OAAS,SAAWwD,GACtE0e,EAAgB3f,EAAM4f,yBAAyBrsB,EAAGyB,KAAK+U,UAAUxW,GAAGmF,GACpEyM,EAAIyM,EAAQ5R,EAAMue,QAAUoB,EAAcxa,EAC1CC,EAAIwM,EAAQ5R,EAAMwe,QAAUmB,EAAcva,EAC1C7H,EAAa,CACf4H,EAAGA,EACHC,EAAGA,EACH2T,MAAO4G,EAAc5G,MACrB1C,KAAMpD,MAAM9N,IAAM8N,MAAM7N,GACxBtG,QAASA,GAEX9J,KAAK2d,cAAcuD,EAAO3iB,EAAGgK,EAAY0D,QAKxCse,EA5E0B,CA6EjC3b,GAEF2b,EAAgB3c,GAAK,QACrB2c,EAAgBtO,SAAW,CACzBnK,mBAAoB,OACpB6E,gBAAiB,QACjBhG,UAAW,IACXmX,UAAU,EACVjS,SAAU,CACR0R,KAAM,CACJsD,KAAM,WAIZN,EAAgBlK,UAAY,CAC1B6F,YAAa,EACbhY,OAAQ,CACNxK,EAAG,CACDZ,KAAM,kBAKZ,IAAIgoB,EAAuB,WACzB,SAASA,KACP,OAAgB9qB,KAAM8qB,GAEtB9qB,KAAKmQ,OAAIzN,EACT1C,KAAKoQ,OAAI1N,EACT1C,KAAKyI,QAAS,EACdzI,KAAK8J,aAAUpH,EACf1C,KAAKiK,iBAAcvH,EAuCrB,OApCA,OAAaooB,EAAS,CAAC,CACrBlsB,IAAK,kBACL0C,MAAO,SAAyBypB,GAC9B,IAAIC,EAAiBhrB,KAAKirB,SAAS,CAAC,IAAK,KAAMF,GAI/C,MAAO,CACL5a,EAJM6a,EAAe7a,EAKrBC,EAJM4a,EAAe5a,KAOxB,CACDxR,IAAK,WACL0C,MAAO,WACL,OAAO,OAAStB,KAAKmQ,KAAM,OAASnQ,KAAKoQ,KAE1C,CACDxR,IAAK,WACL0C,MAAO,SAAkBmJ,EAAOygB,GAC9B,IAAIC,EAASnrB,KAET4C,EAAQ5C,KAAKiK,YAEjB,IAAKihB,IAAUtoB,EACb,OAAO5C,KAGT,IAAIorB,EAAM,GAIV,OAHA3gB,EAAM9L,SAAQ,SAAU+H,GACtB0kB,EAAI1kB,GAAQ9D,EAAM8D,IAAS9D,EAAM8D,GAAM+B,SAAW7F,EAAM8D,GAAMa,IAAM4jB,EAAOzkB,MAEtE0kB,MAIJN,EA/CkB,GAkD3BA,EAAQ7O,SAAW,GACnB6O,EAAQO,mBAAgB3oB,EACxB,IAAI4oB,GAAa,CACf1hB,OAAQ,SAAgBtI,GACtB,OAAO,OAAQA,GAASA,EAAQ,GAAKA,GAEvCiqB,QAAS,SAAiBC,EAAW9f,EAAOyO,GAC1C,GAAkB,IAAdqR,EACF,MAAO,IAGT,IACIC,EADA/F,EAAS1lB,KAAK2C,MAAMmH,QAAQ4b,OAE5BgG,EAAQF,EAEZ,GAAIrR,EAAM1b,OAAS,EAAG,CACpB,IAAIktB,EAAUroB,KAAKiC,IAAIjC,KAAK2W,IAAIE,EAAM,GAAG7Y,OAAQgC,KAAK2W,IAAIE,EAAMA,EAAM1b,OAAS,GAAG6C,SAE9EqqB,EAAU,MAAQA,EAAU,QAC9BF,EAAW,cAGbC,EA4BN,SAAwBF,EAAWrR,GACjC,IAAIuR,EAAQvR,EAAM1b,OAAS,EAAI0b,EAAM,GAAG7Y,MAAQ6Y,EAAM,GAAG7Y,MAAQ6Y,EAAM,GAAG7Y,MAAQ6Y,EAAM,GAAG7Y,MAEvFgC,KAAK2W,IAAIyR,IAAU,GAAKF,IAAcloB,KAAK0D,MAAMwkB,KACnDE,EAAQF,EAAYloB,KAAK0D,MAAMwkB,IAGjC,OAAOE,EAnCKE,CAAeJ,EAAWrR,GAGpC,IAAI0R,GAAW,OAAMvoB,KAAK2W,IAAIyR,IAC1BI,EAAaxoB,KAAKiC,IAAIjC,KAAKC,KAAK,EAAID,KAAK0D,MAAM6kB,GAAW,IAAK,GAC/D/hB,EAAU,CACZ2hB,SAAUA,EACVM,sBAAuBD,EACvBE,sBAAuBF,GAGzB,OADAluB,OAAOoM,OAAOF,EAAS9J,KAAK8J,QAAQqQ,MAAM8R,SACnC,OAAaT,EAAW9F,EAAQ5b,IAEzCoiB,YAAa,SAAqBV,EAAW9f,EAAOyO,GAClD,GAAkB,IAAdqR,EACF,MAAO,IAGT,IAAI9jB,EAAS8jB,EAAYloB,KAAK6oB,IAAI,GAAI7oB,KAAK0D,OAAM,OAAMwkB,KAEvD,OAAe,IAAX9jB,GAA2B,IAAXA,GAA2B,IAAXA,EAC3B4jB,GAAWC,QAAQ7rB,KAAKM,KAAMwrB,EAAW9f,EAAOyO,GAGlD,KAcX,IAAIiS,GAAQ,CACVd,WAAYA,IAiFd,SAASe,GAASrhB,EAAOmP,GACvB,IAAImS,EAAWthB,EAAMlB,QAAQqQ,MACzBoS,EAAaD,EAASE,eA+B5B,SAA2BxhB,GACzB,IAAIuV,EAASvV,EAAMlB,QAAQyW,OAEvBkM,EAAazhB,EAAM0hB,YAEnBC,EAAW3hB,EAAM+O,QAAU0S,GAAclM,EAAS,EAAI,GACtDqM,EAAW5hB,EAAM6hB,WAAaJ,EAClC,OAAOnpB,KAAK0D,MAAM1D,KAAKC,IAAIopB,EAAUC,IAtCME,CAAkB9hB,GACzD+hB,EAAeT,EAASU,MAAMC,QA6DpC,SAAyB9S,GACvB,IACI5b,EAAGgN,EADH1L,EAAS,GAGb,IAAKtB,EAAI,EAAGgN,EAAO4O,EAAM1b,OAAQF,EAAIgN,EAAMhN,IACrC4b,EAAM5b,GAAGyuB,OACXntB,EAAO1B,KAAKI,GAIhB,OAAOsB,EAvEqCqtB,CAAgB/S,GAAS,GACjEgT,EAAkBJ,EAAatuB,OAC/B2uB,EAAQL,EAAa,GACrBnP,EAAOmP,EAAaI,EAAkB,GACtCE,EAAW,GAEf,GAAIF,EAAkBZ,EAEpB,OAkEJ,SAAoBpS,EAAOkT,EAAUN,EAAcrK,GACjD,IAEInkB,EAFAmU,EAAQ,EACR5Q,EAAOirB,EAAa,GAIxB,IAFArK,EAAUpf,KAAKgqB,KAAK5K,GAEfnkB,EAAI,EAAGA,EAAI4b,EAAM1b,OAAQF,IACxBA,IAAMuD,IACRurB,EAASlvB,KAAKgc,EAAM5b,IAEpBuD,EAAOirB,IADPra,EAC4BgQ,IA7E9B6K,CAAWpT,EAAOkT,EAAUN,EAAcI,EAAkBZ,GACrDc,EAGT,IAAI3K,EA6BN,SAA0BqK,EAAc5S,EAAOoS,GAC7C,IAAIiB,EA4EN,SAAwBvrB,GACtB,IACI1D,EAAGkvB,EADHvrB,EAAMD,EAAIxD,OAGd,GAAIyD,EAAM,EACR,OAAO,EAGT,IAAKurB,EAAOxrB,EAAI,GAAI1D,EAAI,EAAGA,EAAI2D,IAAO3D,EACpC,GAAI0D,EAAI1D,GAAK0D,EAAI1D,EAAI,KAAOkvB,EAC1B,OAAO,EAIX,OAAOA,EA1FgBC,CAAeX,GAClCrK,EAAUvI,EAAM1b,OAAS8tB,EAE7B,IAAKiB,EACH,OAAOlqB,KAAKiC,IAAImd,EAAS,GAK3B,IAFA,IAAIiL,GAAU,OAAWH,GAEhBjvB,EAAI,EAAGgN,EAAOoiB,EAAQlvB,OAAS,EAAGF,EAAIgN,EAAMhN,IAAK,CACxD,IAAIyH,EAAS2nB,EAAQpvB,GAErB,GAAIyH,EAAS0c,EACX,OAAO1c,EAIX,OAAO1C,KAAKiC,IAAImd,EAAS,GA/CXkL,CAAiBb,EAAc5S,EAAOoS,GAEpD,GAAIY,EAAkB,EAAG,CACvB,IAAI5uB,EAAGgN,EACHsiB,EAAkBV,EAAkB,EAAI7pB,KAAKwqB,OAAOlQ,EAAOwP,IAAUD,EAAkB,IAAM,KAGjG,IAFA9L,GAAKlH,EAAOkT,EAAU3K,GAAS,OAAcmL,GAAmB,EAAIT,EAAQS,EAAiBT,GAExF7uB,EAAI,EAAGgN,EAAO4hB,EAAkB,EAAG5uB,EAAIgN,EAAMhN,IAChD8iB,GAAKlH,EAAOkT,EAAU3K,EAASqK,EAAaxuB,GAAIwuB,EAAaxuB,EAAI,IAInE,OADA8iB,GAAKlH,EAAOkT,EAAU3K,EAAS9E,GAAM,OAAciQ,GAAmB1T,EAAM1b,OAASmf,EAAOiQ,GACrFR,EAIT,OADAhM,GAAKlH,EAAOkT,EAAU3K,GACf2K,EA8DT,SAAShM,GAAKlH,EAAOkT,EAAU3K,EAASqL,EAAYC,GAClD,IAGIvvB,EAAQF,EAAGuD,EAHX0B,GAAQ,IAAAwF,GAAe+kB,EAAY,GACnC3iB,EAAM9H,KAAKC,KAAI,IAAAyF,GAAeglB,EAAU7T,EAAM1b,QAAS0b,EAAM1b,QAC7DiU,EAAQ,EAWZ,IATAgQ,EAAUpf,KAAKgqB,KAAK5K,GAEhBsL,IAEFtL,GADAjkB,EAASuvB,EAAWD,GACDzqB,KAAK0D,MAAMvI,EAASikB,IAGzC5gB,EAAO0B,EAEA1B,EAAO,GACZ4Q,IACA5Q,EAAOwB,KAAKwqB,MAAMtqB,EAAQkP,EAAQgQ,GAGpC,IAAKnkB,EAAI+E,KAAKiC,IAAI/B,EAAO,GAAIjF,EAAI6M,EAAK7M,IAChCA,IAAMuD,IACRurB,EAASlvB,KAAKgc,EAAM5b,IACpBmU,IACA5Q,EAAOwB,KAAKwqB,MAAMtqB,EAAQkP,EAAQgQ,IAlMxC,EAAAza,EAAA,IAAa,QAAS,CACpBgiB,SAAS,EACT1J,QAAQ,EACRpV,SAAS,EACTuV,aAAa,EACbuN,OAAQ,QACRC,MAAO,EACP1N,KAAM,CACJyJ,SAAS,EACTpD,UAAW,EACXsH,YAAY,EACZC,iBAAiB,EACjBC,WAAW,EACX5B,WAAY,EACZ6B,UAAW,SAAmBzf,EAAM/E,GAClC,OAAOA,EAAQ+c,WAEjB0H,UAAW,SAAmB1f,EAAM/E,GAClC,OAAOA,EAAQ7D,OAEjBsa,QAAQ,EACRiO,WAAY,GACZC,iBAAkB,EAClB7I,YAAa,GAEfpE,MAAO,CACLyI,SAAS,EACTzD,KAAM,GACNkI,QAAS,CACPpZ,IAAK,EACLE,OAAQ,IAGZ2E,MAAO,CACLwU,YAAa,EACbC,YAAa,GACbC,QAAQ,EACRC,gBAAiB,EACjBC,gBAAiB,GACjBL,QAAS,EACTzE,SAAS,EACToC,UAAU,EACV2C,gBAAiB,EACjBC,YAAa,EACbC,SAAU9C,GAAMd,WAAW1hB,OAC3BulB,MAAO,GACPnC,MAAO,GACPoC,MAAO,SACPC,WAAY,OACZC,mBAAmB,EACnBC,cAAe,4BACfC,gBAAiB,KAGrB,EAAAvnB,EAAA,MAAe,cAAe,QAAS,GAAI,SAC3C,EAAAA,EAAA,MAAe,aAAc,QAAS,GAAI,eAC1C,EAAAA,EAAA,MAAe,aAAc,cAAe,GAAI,eAChD,EAAAA,EAAA,MAAe,cAAe,QAAS,GAAI,SAC3C,EAAAA,EAAA,SAAkB,QAAS,CACzBE,WAAW,EACXE,YAAa,SAAqBtH,GAChC,OAAQA,EAAK0uB,WAAW,YAAc1uB,EAAK0uB,WAAW,UAAqB,aAAT1uB,GAAgC,WAATA,GAE3FqH,WAAY,SAAoBrH,GAC9B,MAAgB,eAATA,GAAkC,mBAATA,KAGpC,EAAAkH,EAAA,SAAkB,SAAU,CAC1BE,UAAW,UAEb,EAAAF,EAAA,SAAkB,cAAe,CAC/BI,YAAa,SAAqBtH,GAChC,MAAgB,oBAATA,GAAuC,aAATA,GAEvCqH,WAAY,SAAoBrH,GAC9B,MAAgB,oBAATA,KA6IX,IAII2uB,GAAiB,SAAwB1kB,EAAOiQ,EAAMsF,GACxD,MAAgB,QAATtF,GAA2B,SAATA,EAAkBjQ,EAAMiQ,GAAQsF,EAASvV,EAAMiQ,GAAQsF,GAGlF,SAASoP,GAAO1tB,EAAK2tB,GAMnB,IALA,IAAI/vB,EAAS,GACTgwB,EAAY5tB,EAAIxD,OAASmxB,EACzB1tB,EAAMD,EAAIxD,OACVF,EAAI,EAEDA,EAAI2D,EAAK3D,GAAKsxB,EACnBhwB,EAAO1B,KAAK8D,EAAIqB,KAAK0D,MAAMzI,KAG7B,OAAOsB,EAGT,SAASiwB,GAAoB9kB,EAAOU,EAAOqkB,GACzC,IAMIxP,EANA9hB,EAASuM,EAAMmP,MAAM1b,OACrBuxB,EAAa1sB,KAAKC,IAAImI,EAAOjN,EAAS,GACtC+E,EAAQwH,EAAMuT,YACdnT,EAAMJ,EAAMwT,UACZyR,EAAU,KACVC,EAAYllB,EAAMoP,gBAAgB4V,GAGtC,KAAID,IAEAxP,EADa,IAAX9hB,EACO6E,KAAKiC,IAAI2qB,EAAY1sB,EAAO4H,EAAM8kB,GACxB,IAAVxkB,GACCV,EAAMoP,gBAAgB,GAAK8V,GAAa,GAExCA,EAAYllB,EAAMoP,gBAAgB4V,EAAa,IAAM,GAGjEE,GAAaF,EAAatkB,EAAQ6U,GAAUA,GAE5B/c,EAAQysB,GAAWC,EAAY9kB,EAAM6kB,IAKvD,OAAOC,EAmBT,SAASC,GAAkBrmB,GACzB,OAAOA,EAAQukB,UAAYvkB,EAAQ2iB,WAAa,EAGlD,SAAS2D,GAAetmB,EAASumB,GAC/B,IAAKvmB,EAAQmgB,QACX,OAAO,EAGT,IAAIqG,GAAO,OAAOxmB,EAAQwmB,KAAMD,GAC5B3B,GAAU,OAAU5kB,EAAQ4kB,SAEhC,QADY,OAAQ5kB,EAAQ0c,MAAQ1c,EAAQ0c,KAAK/nB,OAAS,GAC3C6xB,EAAKC,WAAa7B,EAAQjR,OAkB3C,SAAS+S,GAAWpB,EAAOqB,EAAUtlB,GACnC,IAAIigB,GAAM,OAAmBgE,GAM7B,OAJIjkB,GAAwB,UAAbslB,IAAyBtlB,GAAwB,UAAbslB,KACjDrF,EAnGe,SAAsBgE,GACvC,MAAiB,SAAVA,EAAmB,QAAoB,UAAVA,EAAoB,OAASA,EAkGzDsB,CAAatF,IAGdA,EAqDT,IAAIuF,GAAqB,SAAUC,IACjC,OAAUD,EAAOC,GAEjB,IAAIC,EAAU7xB,EAAa2xB,GAE3B,SAASA,EAAMlqB,GACb,IAAIqqB,EAoDJ,OAlDA,OAAgB9wB,KAAM2wB,IAEtBG,EAASD,EAAQnxB,KAAKM,OACf4N,GAAKnH,EAAImH,GAChBkjB,EAAOhuB,KAAO2D,EAAI3D,KAClBguB,EAAOhnB,aAAUpH,EACjBouB,EAAOhiB,IAAMrI,EAAIqI,IACjBgiB,EAAOnuB,MAAQ8D,EAAI9D,MACnBmuB,EAAOxb,SAAM5S,EACbouB,EAAOtb,YAAS9S,EAChBouB,EAAOrb,UAAO/S,EACdouB,EAAOvb,WAAQ7S,EACfouB,EAAOpT,WAAQhb,EACfouB,EAAOrT,YAAS/a,EAChBouB,EAAOC,SAAW,CAChBtb,KAAM,EACNF,MAAO,EACPD,IAAK,EACLE,OAAQ,GAEVsb,EAAOtM,cAAW9hB,EAClBouB,EAAOrM,eAAY/hB,EACnBouB,EAAOE,gBAAatuB,EACpBouB,EAAOG,mBAAgBvuB,EACvBouB,EAAOI,iBAAcxuB,EACrBouB,EAAOK,kBAAezuB,EACtBouB,EAAOvjB,UAAO7K,EACdouB,EAAOM,mBAAgB1uB,EACvBouB,EAAOvtB,SAAMb,EACbouB,EAAOvrB,SAAM7C,EACbouB,EAAOO,YAAS3uB,EAChBouB,EAAO3W,MAAQ,GACf2W,EAAOQ,eAAiB,KACxBR,EAAOS,YAAc,KACrBT,EAAOU,YAAc,KACrBV,EAAO/W,QAAU,EACjB+W,EAAOjE,WAAa,EACpBiE,EAAOW,kBAAoB,GAC3BX,EAAOvS,iBAAc7b,EACrBouB,EAAOtS,eAAY9b,EACnBouB,EAAOY,gBAAiB,EACxBZ,EAAOa,cAAWjvB,EAClBouB,EAAOc,cAAWlvB,EAClBouB,EAAOe,mBAAgBnvB,EACvBouB,EAAOgB,mBAAgBpvB,EACvBouB,EAAOiB,aAAe,EACtBjB,EAAOkB,aAAe,EACtBlB,EAAOvX,OAAS,GAChBuX,EAAOmB,mBAAoB,EAC3BnB,EAAOphB,cAAWhN,EACXouB,EAi3CT,OA92CA,OAAaH,EAAO,CAAC,CACnB/xB,IAAK,OACL0C,MAAO,SAAcwI,GACnB9J,KAAK8J,QAAUA,EAAQooB,WAAWlyB,KAAKwS,cACvCxS,KAAKuN,KAAOzD,EAAQyD,KACpBvN,KAAK4xB,SAAW5xB,KAAKqT,MAAMvJ,EAAQvG,KACnCvD,KAAK2xB,SAAW3xB,KAAKqT,MAAMvJ,EAAQvE,KACnCvF,KAAK8xB,cAAgB9xB,KAAKqT,MAAMvJ,EAAQqoB,cACxCnyB,KAAK6xB,cAAgB7xB,KAAKqT,MAAMvJ,EAAQsoB,gBAEzC,CACDxzB,IAAK,QACL0C,MAAO,SAAeiV,EAAK7K,GACzB,OAAO6K,IAER,CACD3X,IAAK,gBACL0C,MAAO,WACL,IAAIswB,EAAW5xB,KAAK4xB,SAChBD,EAAW3xB,KAAK2xB,SAChBG,EAAgB9xB,KAAK8xB,cACrBD,EAAgB7xB,KAAK6xB,cAKzB,OAJAD,GAAW,OAAgBA,EAAUzd,OAAOC,mBAC5Cud,GAAW,OAAgBA,EAAUxd,OAAOE,mBAC5Cyd,GAAgB,OAAgBA,EAAe3d,OAAOC,mBACtDyd,GAAgB,OAAgBA,EAAe1d,OAAOE,mBAC/C,CACL9Q,KAAK,OAAgBquB,EAAUE,GAC/BvsB,KAAK,OAAgBosB,EAAUE,GAC/Bpd,YAAY,OAAemd,GAC3Bld,YAAY,OAAeid,MAG9B,CACD/yB,IAAK,YACL0C,MAAO,SAAmBwS,GACxB,IAMIH,EANA0e,EAAsBryB,KAAKwU,gBAC3BjR,EAAM8uB,EAAoB9uB,IAC1BgC,EAAM8sB,EAAoB9sB,IAC1BkP,EAAa4d,EAAoB5d,WACjCC,EAAa2d,EAAoB3d,WAIrC,GAAID,GAAcC,EAChB,MAAO,CACLnR,IAAKA,EACLgC,IAAKA,GAMT,IAFA,IAAI+sB,EAAQtyB,KAAK+M,0BAERxO,EAAI,EAAGgN,EAAO+mB,EAAM7zB,OAAQF,EAAIgN,IAAQhN,EAC/CoV,EAAQ2e,EAAM/zB,GAAG0O,WAAWslB,UAAUvyB,KAAM8T,GAEvCW,IACHlR,EAAMD,KAAKC,IAAIA,EAAKoQ,EAAMpQ,MAGvBmR,IACHnP,EAAMjC,KAAKiC,IAAIA,EAAKoO,EAAMpO,MAM9B,OAFAhC,EAAMmR,GAAcnR,EAAMgC,EAAMA,EAAMhC,EACtCgC,EAAMkP,GAAclR,EAAMgC,EAAMhC,EAAMgC,EAC/B,CACLhC,KAAK,OAAgBA,GAAK,OAAgBgC,EAAKhC,IAC/CgC,KAAK,OAAgBA,GAAK,OAAgBhC,EAAKgC,OAGlD,CACD3G,IAAK,aACL0C,MAAO,WACL,MAAO,CACLmU,KAAMzV,KAAKkxB,aAAe,EAC1B5b,IAAKtV,KAAKgxB,YAAc,EACxBzb,MAAOvV,KAAKmxB,cAAgB,EAC5B3b,OAAQxV,KAAKixB,eAAiB,KAGjC,CACDryB,IAAK,WACL0C,MAAO,WACL,OAAOtB,KAAKma,QAEb,CACDvb,IAAK,YACL0C,MAAO,WACL,IAAI8P,EAAOpR,KAAK2C,MAAMyO,KACtB,OAAOpR,KAAK8J,QAAQmJ,SAAWjT,KAAK8c,eAAiB1L,EAAKohB,QAAUphB,EAAKqhB,UAAYrhB,EAAK6B,QAAU,KAErG,CACDrU,IAAK,eACL0C,MAAO,WACLtB,KAAKuZ,OAAS,GACdvZ,KAAKiyB,mBAAoB,IAE1B,CACDrzB,IAAK,eACL0C,MAAO,YACL,OAAStB,KAAK8J,QAAQ4oB,aAAc,CAAC1yB,SAEtC,CACDpB,IAAK,SACL0C,MAAO,SAAgBkjB,EAAUC,EAAWkO,GAC1C,IAAIC,EAAiB5yB,KAAK8J,QACtB4W,EAAckS,EAAelS,YAC7BwN,EAAQ0E,EAAe1E,MACvB5B,EAAWsG,EAAezY,MAC1B0Y,EAAavG,EAASuG,WAC1B7yB,KAAK0yB,eACL1yB,KAAKwkB,SAAWA,EAChBxkB,KAAKykB,UAAYA,EACjBzkB,KAAK+wB,SAAW4B,EAAU/0B,OAAOoM,OAAO,CACtCyL,KAAM,EACNF,MAAO,EACPD,IAAK,EACLE,OAAQ,GACPmd,GACH3yB,KAAKma,MAAQ,KACbna,KAAKwxB,YAAc,KACnBxxB,KAAKsxB,eAAiB,KACtBtxB,KAAKuxB,YAAc,KACnBvxB,KAAK8yB,sBACL9yB,KAAK+yB,gBACL/yB,KAAKgzB,qBACLhzB,KAAK6sB,WAAa7sB,KAAK8c,eAAiB9c,KAAK0d,MAAQiV,EAAQld,KAAOkd,EAAQpd,MAAQvV,KAAKyd,OAASkV,EAAQrd,IAAMqd,EAAQnd,OAEnHxV,KAAKiyB,oBACRjyB,KAAKizB,mBACLjzB,KAAKkzB,sBACLlzB,KAAKmzB,kBACLnzB,KAAKqxB,QAAS,OAAUrxB,KAAMkuB,EAAOxN,GACrC1gB,KAAKiyB,mBAAoB,GAG3BjyB,KAAKozB,mBACLpzB,KAAKma,MAAQna,KAAKqzB,cAAgB,GAClCrzB,KAAKszB,kBACL,IAAIC,EAAkBV,EAAa7yB,KAAKma,MAAM1b,OAE9CuB,KAAKwzB,sBAAsBD,EAAkB5D,GAAO3vB,KAAKma,MAAO0Y,GAAc7yB,KAAKma,OAEnFna,KAAKqJ,YACLrJ,KAAKyzB,+BACLzzB,KAAK0zB,yBACL1zB,KAAK2zB,8BAEDrH,EAASrC,UAAYqC,EAASD,UAAgC,SAApBC,EAAS5tB,UACrDsB,KAAKma,MAAQkS,GAASrsB,KAAMA,KAAKma,OACjCna,KAAKwxB,YAAc,KACnBxxB,KAAK4zB,iBAGHL,GACFvzB,KAAKwzB,sBAAsBxzB,KAAKma,OAGlCna,KAAK6zB,YACL7zB,KAAK8zB,MACL9zB,KAAK+zB,WACL/zB,KAAKg0B,gBAEN,CACDp1B,IAAK,YACL0C,MAAO,WACL,IACIge,EAAYE,EADZyU,EAAgBj0B,KAAK8J,QAAQqB,QAG7BnL,KAAK8c,gBACPwC,EAAatf,KAAKyV,KAClB+J,EAAWxf,KAAKuV,QAEhB+J,EAAatf,KAAKsV,IAClBkK,EAAWxf,KAAKwV,OAChBye,GAAiBA,GAGnBj0B,KAAKue,YAAce,EACnBtf,KAAKwe,UAAYgB,EACjBxf,KAAK0xB,eAAiBuC,EACtBj0B,KAAK+Z,QAAUyF,EAAWF,EAC1Btf,KAAKk0B,eAAiBl0B,KAAK8J,QAAQqqB,gBAEpC,CACDv1B,IAAK,cACL0C,MAAO,YACL,OAAStB,KAAK8J,QAAQkqB,YAAa,CAACh0B,SAErC,CACDpB,IAAK,sBACL0C,MAAO,YACL,OAAStB,KAAK8J,QAAQgpB,oBAAqB,CAAC9yB,SAE7C,CACDpB,IAAK,gBACL0C,MAAO,WACDtB,KAAK8c,gBACP9c,KAAK0d,MAAQ1d,KAAKwkB,SAClBxkB,KAAKyV,KAAO,EACZzV,KAAKuV,MAAQvV,KAAK0d,QAElB1d,KAAKyd,OAASzd,KAAKykB,UACnBzkB,KAAKsV,IAAM,EACXtV,KAAKwV,OAASxV,KAAKyd,QAGrBzd,KAAKkxB,YAAc,EACnBlxB,KAAKgxB,WAAa,EAClBhxB,KAAKmxB,aAAe,EACpBnxB,KAAKixB,cAAgB,IAEtB,CACDryB,IAAK,qBACL0C,MAAO,YACL,OAAStB,KAAK8J,QAAQkpB,mBAAoB,CAAChzB,SAE5C,CACDpB,IAAK,aACL0C,MAAO,SAAoBP,GACzBf,KAAK2C,MAAMyxB,cAAcrzB,EAAMf,KAAKwS,eACpC,OAASxS,KAAK8J,QAAQ/I,GAAO,CAACf,SAE/B,CACDpB,IAAK,mBACL0C,MAAO,WACLtB,KAAKq0B,WAAW,sBAEjB,CACDz1B,IAAK,sBACL0C,MAAO,cACN,CACD1C,IAAK,kBACL0C,MAAO,WACLtB,KAAKq0B,WAAW,qBAEjB,CACDz1B,IAAK,mBACL0C,MAAO,WACLtB,KAAKq0B,WAAW,sBAEjB,CACDz1B,IAAK,aACL0C,MAAO,WACL,MAAO,KAER,CACD1C,IAAK,kBACL0C,MAAO,WACLtB,KAAKq0B,WAAW,qBAEjB,CACDz1B,IAAK,8BACL0C,MAAO,YACL,OAAStB,KAAK8J,QAAQwqB,4BAA6B,CAACt0B,SAErD,CACDpB,IAAK,qBACL0C,MAAO,SAA4B6Y,GACjC,IACI5b,EAAGgN,EAAM/G,EADT8nB,EAAWtsB,KAAK8J,QAAQqQ,MAG5B,IAAK5b,EAAI,EAAGgN,EAAO4O,EAAM1b,OAAQF,EAAIgN,EAAMhN,KACzCiG,EAAO2V,EAAM5b,IACRyW,OAAQ,OAASsX,EAAS4C,SAAU,CAAC1qB,EAAKlD,MAAO/C,EAAG4b,GAAQna,QAGpE,CACDpB,IAAK,6BACL0C,MAAO,YACL,OAAStB,KAAK8J,QAAQyqB,2BAA4B,CAACv0B,SAEpD,CACDpB,IAAK,+BACL0C,MAAO,YACL,OAAStB,KAAK8J,QAAQ2pB,6BAA8B,CAACzzB,SAEtD,CACDpB,IAAK,yBACL0C,MAAO,WACL,IAMIgtB,EAAW7J,EAAW+P,EANtB1qB,EAAU9J,KAAK8J,QACfwiB,EAAWxiB,EAAQqQ,MACnBsa,EAAWz0B,KAAKma,MAAM1b,OACtBkwB,EAAcrC,EAASqC,aAAe,EACtCC,EAActC,EAASsC,YACvBwC,EAAgBzC,EAGpB,IAAK3uB,KAAK00B,eAAiBpI,EAASrC,SAAW0E,GAAeC,GAAe6F,GAAY,IAAMz0B,KAAK8c,eAClG9c,KAAKoxB,cAAgBzC,MADvB,CAKA,IAAIgG,EAAa30B,KAAK40B,iBAElBC,EAAgBF,EAAWG,OAAOpX,MAClCqX,EAAiBJ,EAAWK,QAAQvX,OAEpC+G,GAAW,OAAYxkB,KAAK2C,MAAM+a,MAAQmX,EAAe,EAAG70B,KAAKwkB,UAIjEqQ,EAAgB,GAFpBvG,EAAYxkB,EAAQyW,OAASvgB,KAAKwkB,SAAWiQ,EAAWjQ,GAAYiQ,EAAW,MAG7EnG,EAAY9J,GAAYiQ,GAAY3qB,EAAQyW,OAAS,GAAM,IAC3DkE,EAAYzkB,KAAKykB,UAAY0L,GAAkBrmB,EAAQ0W,MAAQ8L,EAASoC,QAAU0B,GAAetmB,EAAQ0X,MAAOxhB,KAAK2C,MAAMmH,QAAQwmB,MACnIkE,EAAmBlxB,KAAK2xB,KAAKJ,EAAgBA,EAAgBE,EAAiBA,GAC9E3D,GAAgB,OAAU9tB,KAAKC,IAAID,KAAK4xB,MAAK,QAAaP,EAAWK,QAAQvX,OAAS,GAAK6Q,GAAY,EAAG,IAAKhrB,KAAK4xB,MAAK,OAAYzQ,EAAY+P,GAAmB,EAAG,IAAMlxB,KAAK4xB,MAAK,OAAYH,EAAiBP,GAAmB,EAAG,MAC1OpD,EAAgB9tB,KAAKiC,IAAIopB,EAAarrB,KAAKC,IAAIqrB,EAAawC,KAG9DpxB,KAAKoxB,cAAgBA,KAEtB,CACDxyB,IAAK,8BACL0C,MAAO,YACL,OAAStB,KAAK8J,QAAQ6pB,4BAA6B,CAAC3zB,SAErD,CACDpB,IAAK,gBACL0C,MAAO,cACN,CACD1C,IAAK,YACL0C,MAAO,YACL,OAAStB,KAAK8J,QAAQ+pB,UAAW,CAAC7zB,SAEnC,CACDpB,IAAK,MACL0C,MAAO,WACL,IAAI8nB,EAAU,CACZ1L,MAAO,EACPD,OAAQ,GAEN9a,EAAQ3C,KAAK2C,MACbwyB,EAAiBn1B,KAAK8J,QACtBwiB,EAAW6I,EAAehb,MAC1Bib,EAAYD,EAAe3T,MAC3B6T,EAAWF,EAAe3U,KAE1ByJ,EAAUjqB,KAAK00B,aAEf5X,EAAe9c,KAAK8c,eAExB,GAAImN,EAAS,CACX,IAAIqL,EAAclF,GAAegF,EAAWzyB,EAAMmH,QAAQwmB,MAU1D,GARIxT,GACFsM,EAAQ1L,MAAQ1d,KAAKwkB,SACrB4E,EAAQ3L,OAAS0S,GAAkBkF,GAAYC,IAE/ClM,EAAQ3L,OAASzd,KAAKykB,UACtB2E,EAAQ1L,MAAQyS,GAAkBkF,GAAYC,GAG5ChJ,EAASrC,SAAWjqB,KAAKma,MAAM1b,OAAQ,CACzC,IAAI82B,EAAuBv1B,KAAK40B,iBAC5BxH,EAAQmI,EAAqBnI,MAC7BxP,EAAO2X,EAAqB3X,KAC5BkX,EAASS,EAAqBT,OAC9BE,EAAUO,EAAqBP,QAE/BQ,EAAiC,EAAnBlJ,EAASoC,QACvB+G,GAAe,IAAAvgB,GAAUlV,KAAKoxB,eAC9B3N,EAAMngB,KAAKmgB,IAAIgS,GACf9R,EAAMrgB,KAAKqgB,IAAI8R,GAEnB,GAAI3Y,EAAc,CAChB,IAAI4Y,EAAcpJ,EAASuC,OAAS,EAAIlL,EAAMmR,EAAOpX,MAAQ+F,EAAMuR,EAAQvX,OAC3E2L,EAAQ3L,OAASna,KAAKC,IAAIvD,KAAKykB,UAAW2E,EAAQ3L,OAASiY,EAAcF,OACpE,CACL,IAAIG,EAAarJ,EAASuC,OAAS,EAAIpL,EAAMqR,EAAOpX,MAAQiG,EAAMqR,EAAQvX,OAC1E2L,EAAQ1L,MAAQpa,KAAKC,IAAIvD,KAAKwkB,SAAU4E,EAAQ1L,MAAQiY,EAAaH,GAGvEx1B,KAAK41B,kBAAkBxI,EAAOxP,EAAM+F,EAAKF,IAI7CzjB,KAAK61B,iBAED/Y,GACF9c,KAAK0d,MAAQ1d,KAAK+Z,QAAUpX,EAAM+a,MAAQ1d,KAAK+wB,SAAStb,KAAOzV,KAAK+wB,SAASxb,MAC7EvV,KAAKyd,OAAS2L,EAAQ3L,SAEtBzd,KAAK0d,MAAQ0L,EAAQ1L,MACrB1d,KAAKyd,OAASzd,KAAK+Z,QAAUpX,EAAM8a,OAASzd,KAAK+wB,SAASzb,IAAMtV,KAAK+wB,SAASvb,UAGjF,CACD5W,IAAK,oBACL0C,MAAO,SAA2B8rB,EAAOxP,EAAM+F,EAAKF,GAClD,IAAIqS,EAAiB91B,KAAK8J,QACtBisB,EAAuBD,EAAe3b,MACtCiV,EAAQ2G,EAAqB3G,MAC7BV,EAAUqH,EAAqBrH,QAC/B+B,EAAWqF,EAAerF,SAC1BuF,EAAmC,IAAvBh2B,KAAKoxB,cACjB6E,EAAgC,QAAbxF,GAAoC,MAAdzwB,KAAKuN,KAElD,GAAIvN,KAAK8c,eAAgB,CACvB,IAAIoZ,EAAal2B,KAAKoa,gBAAgB,GAAKpa,KAAKyV,KAC5C0gB,EAAcn2B,KAAKuV,MAAQvV,KAAKoa,gBAAgBpa,KAAKma,MAAM1b,OAAS,GACpEyyB,EAAc,EACdC,EAAe,EAEf6E,EACEC,GACF/E,EAAczN,EAAM2J,EAAM1P,MAC1ByT,EAAexN,EAAM/F,EAAKH,SAE1ByT,EAAcvN,EAAMyJ,EAAM3P,OAC1B0T,EAAe1N,EAAM7F,EAAKF,OAET,UAAV0R,EACT+B,EAAevT,EAAKF,MACD,QAAV0R,EACT8B,EAAc9D,EAAM1P,MACD,UAAV0R,IACT8B,EAAc9D,EAAM1P,MAAQ,EAC5ByT,EAAevT,EAAKF,MAAQ,GAG9B1d,KAAKkxB,YAAc5tB,KAAKiC,KAAK2rB,EAAcgF,EAAaxH,GAAW1uB,KAAK0d,OAAS1d,KAAK0d,MAAQwY,GAAa,GAC3Gl2B,KAAKmxB,aAAe7tB,KAAKiC,KAAK4rB,EAAegF,EAAczH,GAAW1uB,KAAK0d,OAAS1d,KAAK0d,MAAQyY,GAAc,OAC1G,CACL,IAAInF,EAAapT,EAAKH,OAAS,EAC3BwT,EAAgB7D,EAAM3P,OAAS,EAErB,UAAV2R,GACF4B,EAAa,EACbC,EAAgB7D,EAAM3P,QACH,QAAV2R,IACT4B,EAAapT,EAAKH,OAClBwT,EAAgB,GAGlBjxB,KAAKgxB,WAAaA,EAAatC,EAC/B1uB,KAAKixB,cAAgBA,EAAgBvC,KAGxC,CACD9vB,IAAK,iBACL0C,MAAO,WACDtB,KAAK+wB,WACP/wB,KAAK+wB,SAAStb,KAAOnS,KAAKiC,IAAIvF,KAAKkxB,YAAalxB,KAAK+wB,SAAStb,MAC9DzV,KAAK+wB,SAASzb,IAAMhS,KAAKiC,IAAIvF,KAAKgxB,WAAYhxB,KAAK+wB,SAASzb,KAC5DtV,KAAK+wB,SAASxb,MAAQjS,KAAKiC,IAAIvF,KAAKmxB,aAAcnxB,KAAK+wB,SAASxb,OAChEvV,KAAK+wB,SAASvb,OAASlS,KAAKiC,IAAIvF,KAAKixB,cAAejxB,KAAK+wB,SAASvb,WAGrE,CACD5W,IAAK,WACL0C,MAAO,YACL,OAAStB,KAAK8J,QAAQiqB,SAAU,CAAC/zB,SAElC,CACDpB,IAAK,eACL0C,MAAO,WACL,IAAI80B,EAAiBp2B,KAAK8J,QACtByD,EAAO6oB,EAAe7oB,KACtBkjB,EAAW2F,EAAe3F,SAC9B,MAAoB,QAAbA,GAAmC,WAAbA,GAAkC,MAATljB,IAEvD,CACD3O,IAAK,aACL0C,MAAO,WACL,OAAOtB,KAAK8J,QAAQusB,WAErB,CACDz3B,IAAK,wBACL0C,MAAO,SAA+B6Y,GAGpC,IAAI5b,EAAGgN,EAEP,IAJAvL,KAAKs0B,8BACLt0B,KAAKs2B,mBAAmBnc,GAGnB5b,EAAI,EAAGgN,EAAO4O,EAAM1b,OAAQF,EAAIgN,EAAMhN,KACrC,OAAc4b,EAAM5b,GAAGyW,SACzBmF,EAAMpB,OAAOxa,EAAG,GAChBgN,IACAhN,KAIJyB,KAAKu0B,+BAEN,CACD31B,IAAK,iBACL0C,MAAO,WACL,IAAIqzB,EAAa30B,KAAKwxB,YAEtB,IAAKmD,EAAY,CACf,IAAI9B,EAAa7yB,KAAK8J,QAAQqQ,MAAM0Y,WAChC1Y,EAAQna,KAAKma,MAEb0Y,EAAa1Y,EAAM1b,SACrB0b,EAAQwV,GAAOxV,EAAO0Y,IAGxB7yB,KAAKwxB,YAAcmD,EAAa30B,KAAKu2B,mBAAmBpc,EAAOA,EAAM1b,QAGvE,OAAOk2B,IAER,CACD/1B,IAAK,qBACL0C,MAAO,SAA4B6Y,EAAO1b,GACxC,IAMIF,EAAGi4B,EAAGC,EAAMzhB,EAAO0hB,EAAUC,EAAY7f,EAAOyZ,EAAY7S,EAAOD,EAAQmZ,EAN3E9nB,EAAM9O,KAAK8O,IACX+nB,EAAS72B,KAAKyxB,kBACdqF,EAAS,GACTC,EAAU,GACVC,EAAkB,EAClBC,EAAmB,EAGvB,IAAK14B,EAAI,EAAGA,EAAIE,IAAUF,EAAG,CAW3B,GAVAyW,EAAQmF,EAAM5b,GAAGyW,MACjB0hB,EAAW12B,KAAKk3B,wBAAwB34B,GACxCuQ,EAAIwhB,KAAOqG,EAAaD,EAASS,OACjCrgB,EAAQ+f,EAAOF,GAAcE,EAAOF,IAAe,CACjDvlB,KAAM,GACNgmB,GAAI,IAEN7G,EAAamG,EAASnG,WACtB7S,EAAQD,EAAS,GAEZ,OAAczI,KAAW,OAAQA,IAG/B,IAAI,OAAQA,GACjB,IAAKwhB,EAAI,EAAGC,EAAOzhB,EAAMvW,OAAQ+3B,EAAIC,IAAQD,EAC3CI,EAAc5hB,EAAMwhB,IAEf,OAAcI,KAAiB,OAAQA,KAC1ClZ,GAAQ,OAAa5O,EAAKgI,EAAM1F,KAAM0F,EAAMsgB,GAAI1Z,EAAOkZ,GACvDnZ,GAAU8S,QARd7S,GAAQ,OAAa5O,EAAKgI,EAAM1F,KAAM0F,EAAMsgB,GAAI1Z,EAAO1I,GACvDyI,EAAS8S,EAYXuG,EAAO34B,KAAKuf,GACZqZ,EAAQ54B,KAAKsf,GACbuZ,EAAkB1zB,KAAKiC,IAAImY,EAAOsZ,GAClCC,EAAmB3zB,KAAKiC,IAAIkY,EAAQwZ,IAtsB5C,SAAwBJ,EAAQp4B,IAC9B,OAAKo4B,GAAQ,SAAU/f,GACrB,IAEIvY,EAFA64B,EAAKtgB,EAAMsgB,GACXC,EAAQD,EAAG34B,OAAS,EAGxB,GAAI44B,EAAQ54B,EAAQ,CAClB,IAAKF,EAAI,EAAGA,EAAI84B,IAAS94B,SAChBuY,EAAM1F,KAAKgmB,EAAG74B,IAGvB64B,EAAGre,OAAO,EAAGse,OA8rBbC,CAAeT,EAAQp4B,GACvB,IAAIq2B,EAASgC,EAAO3Y,QAAQ6Y,GACxBhC,EAAU+B,EAAQ5Y,QAAQ8Y,GAE1BM,EAAU,SAAiBC,GAC7B,MAAO,CACL9Z,MAAOoZ,EAAOU,IAAQ,EACtB/Z,OAAQsZ,EAAQS,IAAQ,IAI5B,MAAO,CACLpK,MAAOmK,EAAQ,GACf3Z,KAAM2Z,EAAQ94B,EAAS,GACvBq2B,OAAQyC,EAAQzC,GAChBE,QAASuC,EAAQvC,GACjB8B,OAAQA,EACRC,QAASA,KAGZ,CACDn4B,IAAK,mBACL0C,MAAO,SAA0BA,GAC/B,OAAOA,IAER,CACD1C,IAAK,mBACL0C,MAAO,SAA0BA,EAAOoK,GACtC,OAAOmI,MAER,CACDjV,IAAK,mBACL0C,MAAO,SAA0Bm2B,MAChC,CACD74B,IAAK,kBACL0C,MAAO,SAAyBoK,GAC9B,IAAIyO,EAAQna,KAAKma,MAEjB,OAAIzO,EAAQ,GAAKA,EAAQyO,EAAM1b,OAAS,EAC/B,KAGFuB,KAAKka,iBAAiBC,EAAMzO,GAAOpK,SAE3C,CACD1C,IAAK,qBACL0C,MAAO,SAA4Bo2B,GAC7B13B,KAAK0xB,iBACPgG,EAAU,EAAIA,GAGhB,IAAID,EAAQz3B,KAAKue,YAAcmZ,EAAU13B,KAAK+Z,QAC9C,OAAO,OAAY/Z,KAAKk0B,gBAAiB,OAAYl0B,KAAK2C,MAAO80B,EAAO,GAAKA,KAE9E,CACD74B,IAAK,qBACL0C,MAAO,SAA4Bm2B,GACjC,IAAIC,GAAWD,EAAQz3B,KAAKue,aAAeve,KAAK+Z,QAChD,OAAO/Z,KAAK0xB,eAAiB,EAAIgG,EAAUA,IAE5C,CACD94B,IAAK,eACL0C,MAAO,WACL,OAAOtB,KAAKka,iBAAiBla,KAAK23B,kBAEnC,CACD/4B,IAAK,eACL0C,MAAO,WACL,IAAIiC,EAAMvD,KAAKuD,IACXgC,EAAMvF,KAAKuF,IACf,OAAOhC,EAAM,GAAKgC,EAAM,EAAIA,EAAMhC,EAAM,GAAKgC,EAAM,EAAIhC,EAAM,IAE9D,CACD3E,IAAK,aACL0C,MAAO,SAAoBoK,GACzB,IArvBsB2K,EAAQrL,EAqvB1BmP,EAAQna,KAAKma,OAAS,GAE1B,GAAIzO,GAAS,GAAKA,EAAQyO,EAAM1b,OAAQ,CACtC,IAAI+F,EAAO2V,EAAMzO,GACjB,OAAOlH,EAAKkL,WAAalL,EAAKkL,SAlvBtC,SAA2B2G,EAAQ3K,EAAOlH,GACxC,OAAO,OAAc6R,EAAQ,CAC3B7R,KAAMA,EACNkH,MAAOA,EACP5I,KAAM,SA8uBuC80B,CAAkB53B,KAAKwS,aAAc9G,EAAOlH,IAGvF,OAAOxE,KAAK0P,WAAa1P,KAAK0P,UA5vBR2G,EA4vBsCrW,KAAK2C,MAAM6P,aA5vBzCxH,EA4vBuDhL,MA3vBlF,OAAcqW,EAAQ,CAC3BrL,MAAOA,EACPlI,KAAM,cA2vBL,CACDlE,IAAK,YACL0C,MAAO,WACL,IAAIu2B,EAAc73B,KAAK8J,QAAQqQ,MAC3B2d,GAAM,IAAA5iB,GAAUlV,KAAKoxB,eACrB3N,EAAMngB,KAAK2W,IAAI3W,KAAKmgB,IAAIqU,IACxBnU,EAAMrgB,KAAK2W,IAAI3W,KAAKqgB,IAAImU,IAExBnD,EAAa30B,KAAK40B,iBAElBlG,EAAUmJ,EAAY7I,iBAAmB,EACzC+I,EAAIpD,EAAaA,EAAWG,OAAOpX,MAAQgR,EAAU,EACrDsJ,EAAIrD,EAAaA,EAAWK,QAAQvX,OAASiR,EAAU,EAC3D,OAAO1uB,KAAK8c,eAAiBkb,EAAIvU,EAAMsU,EAAIpU,EAAMoU,EAAItU,EAAMuU,EAAIrU,EAAMqU,EAAIrU,EAAMoU,EAAItU,EAAMuU,EAAIvU,EAAMsU,EAAIpU,IAExG,CACD/kB,IAAK,aACL0C,MAAO,WACL,IAAI2oB,EAAUjqB,KAAK8J,QAAQmgB,QAE3B,MAAgB,SAAZA,IACOA,EAGJjqB,KAAK+M,0BAA0BtO,OAAS,IAEhD,CACDG,IAAK,wBACL0C,MAAO,SAA+ByU,GACpC,IAmBIkiB,EAAa15B,EAAG2xB,EAAWgI,EAC3BC,EAAKC,EAAKC,EAAKC,EAAKC,EAAIC,EAAIC,EAAIC,EApBhCnrB,EAAOvN,KAAKuN,KACZ5K,EAAQ3C,KAAK2C,MACbmH,EAAU9J,KAAK8J,QACf0W,EAAO1W,EAAQ0W,KACfiQ,EAAW3mB,EAAQ2mB,SACnBlQ,EAASC,EAAKD,OACdzD,EAAe9c,KAAK8c,eAEpB6b,EADQ34B,KAAKma,MACO1b,QAAU8hB,EAAS,EAAI,GAC3CqY,EAAKzI,GAAkB3P,GACvBrc,EAAQ,GACR00B,EAAarY,EAAK0R,WAAWlyB,KAAKwS,cAClCsmB,EAAYD,EAAW1K,WAAa0K,EAAWjT,YAAc,EAC7DmT,EAAgBD,EAAY,EAE5BE,EAAmB,SAA0BvB,GAC/C,OAAO,OAAY90B,EAAO80B,EAAOqB,IAMnC,GAAiB,QAAbrI,EACFwH,EAAce,EAAiBh5B,KAAKwV,QACpC4iB,EAAMp4B,KAAKwV,OAASojB,EACpBN,EAAML,EAAcc,EACpBP,EAAKQ,EAAiBjjB,EAAUT,KAAOyjB,EACvCL,EAAK3iB,EAAUP,YACV,GAAiB,WAAbib,EACTwH,EAAce,EAAiBh5B,KAAKsV,KACpCkjB,EAAKziB,EAAUT,IACfojB,EAAKM,EAAiBjjB,EAAUP,QAAUujB,EAC1CX,EAAMH,EAAcc,EACpBT,EAAMt4B,KAAKsV,IAAMsjB,OACZ,GAAiB,SAAbnI,EACTwH,EAAce,EAAiBh5B,KAAKuV,OACpC4iB,EAAMn4B,KAAKuV,MAAQqjB,EACnBP,EAAMJ,EAAcc,EACpBR,EAAKS,EAAiBjjB,EAAUN,MAAQsjB,EACxCN,EAAK1iB,EAAUR,WACV,GAAiB,UAAbkb,EACTwH,EAAce,EAAiBh5B,KAAKyV,MACpC8iB,EAAKxiB,EAAUN,KACfgjB,EAAKO,EAAiBjjB,EAAUR,OAASwjB,EACzCZ,EAAMF,EAAcc,EACpBV,EAAMr4B,KAAKyV,KAAOmjB,OACb,GAAa,MAATrrB,EAAc,CACvB,GAAiB,WAAbkjB,EACFwH,EAAce,GAAkBjjB,EAAUT,IAAMS,EAAUP,QAAU,EAAI,SACnE,IAAI,IAAAjX,GAASkyB,GAAW,CAC7B,IAAIwI,EAAiBr7B,OAAOD,KAAK8yB,GAAU,GACvCnvB,EAAQmvB,EAASwI,GACrBhB,EAAce,EAAiBh5B,KAAK2C,MAAMuL,OAAO+qB,GAAgB/e,iBAAiB5Y,IAGpFk3B,EAAKziB,EAAUT,IACfojB,EAAK3iB,EAAUP,OAEf8iB,GADAF,EAAMH,EAAcc,GACRH,OACP,GAAa,MAATrrB,EAAc,CACvB,GAAiB,WAAbkjB,EACFwH,EAAce,GAAkBjjB,EAAUN,KAAOM,EAAUR,OAAS,QAC/D,IAAI,IAAAhX,GAASkyB,GAAW,CAC7B,IAAIyI,EAAmBt7B,OAAOD,KAAK8yB,GAAU,GACzC0I,EAAU1I,EAASyI,GACvBjB,EAAce,EAAiBh5B,KAAK2C,MAAMuL,OAAOgrB,GAAkBhf,iBAAiBif,IAItFd,GADAF,EAAMF,EAAcc,GACRH,EACZL,EAAKxiB,EAAUN,KACfgjB,EAAK1iB,EAAUR,MAGjB,IAAI6jB,GAAQ,IAAApwB,GAAec,EAAQqQ,MAAMqS,cAAemM,GACpD92B,EAAOyB,KAAKiC,IAAI,EAAGjC,KAAKgqB,KAAKqL,EAAcS,IAE/C,IAAK76B,EAAI,EAAGA,EAAIo6B,EAAap6B,GAAKsD,EAAM,CACtC,IAAIw3B,EAAc7Y,EAAK0R,WAAWlyB,KAAKwS,WAAWjU,IAC9CsoB,EAAYwS,EAAYxS,UACxByS,EAAYD,EAAYpzB,MACxBuoB,EAAa6K,EAAY7K,YAAc,GACvCC,EAAmB4K,EAAY5K,iBAC/BH,EAAY+K,EAAY/K,UACxBC,EAAY8K,EAAY9K,UACxBgL,EAAiBF,EAAYE,gBAAkB,GAC/CC,EAAuBH,EAAYG,0BAGrB92B,KAFlBwtB,EAAYJ,GAAoB9vB,KAAMzB,EAAGgiB,MAMzC2X,GAAmB,OAAYv1B,EAAOutB,EAAWrJ,GAE7C/J,EACFqb,EAAME,EAAME,EAAKE,EAAKP,EAEtBE,EAAME,EAAME,EAAKE,EAAKR,EAGxB/zB,EAAMhG,KAAK,CACTg6B,IAAKA,EACLC,IAAKA,EACLC,IAAKA,EACLC,IAAKA,EACLC,GAAIA,EACJC,GAAIA,EACJC,GAAIA,EACJC,GAAIA,EACJhb,MAAOmJ,EACP5gB,MAAOqzB,EACP9K,WAAYA,EACZC,iBAAkBA,EAClBH,UAAWA,EACXC,UAAWA,EACXgL,eAAgBA,EAChBC,qBAAsBA,KAM1B,OAFAx5B,KAAK+xB,aAAe4G,EACpB34B,KAAKgyB,aAAeiG,EACb9zB,IAER,CACDvF,IAAK,qBACL0C,MAAO,SAA4ByU,GACjC,IAeIxX,EAAGgN,EAAYyJ,EAAO7E,EAAGC,EAAGqpB,EAAWhC,EAAOnH,EAAMC,EAAYmJ,EAAWC,EAf3EpsB,EAAOvN,KAAKuN,KACZzD,EAAU9J,KAAK8J,QACf2mB,EAAW3mB,EAAQ2mB,SACnBoH,EAAc/tB,EAAQqQ,MACtB2C,EAAe9c,KAAK8c,eACpB3C,EAAQna,KAAKma,MACbiV,EAAQyI,EAAYzI,MACpBC,EAAawI,EAAYxI,WACzBX,EAAUmJ,EAAYnJ,QACtBG,EAASgJ,EAAYhJ,OACrB+J,EAAKzI,GAAkBrmB,EAAQ0W,MAC/BoZ,EAAiBhB,EAAKlK,EACtBmL,EAAkBhL,GAAUH,EAAUkL,EACtCzX,IAAY,IAAAjN,GAAUlV,KAAKoxB,eAC3BjtB,EAAQ,GAER21B,EAAe,SAEnB,GAAiB,QAAbrJ,EACFrgB,EAAIpQ,KAAKwV,OAASqkB,EAClBJ,EAAYz5B,KAAK+5B,+BACZ,GAAiB,WAAbtJ,EACTrgB,EAAIpQ,KAAKsV,IAAMukB,EACfJ,EAAYz5B,KAAK+5B,+BACZ,GAAiB,SAAbtJ,EAAqB,CAC9B,IAAIrF,EAAMprB,KAAKg6B,wBAAwBpB,GAEvCa,EAAYrO,EAAIqO,UAChBtpB,EAAIib,EAAIjb,OACH,GAAiB,UAAbsgB,EAAsB,CAC/B,IAAIwJ,EAAOj6B,KAAKg6B,wBAAwBpB,GAExCa,EAAYQ,EAAKR,UACjBtpB,EAAI8pB,EAAK9pB,OACJ,GAAa,MAAT5C,EAAc,CACvB,GAAiB,WAAbkjB,EACFrgB,GAAK2F,EAAUT,IAAMS,EAAUP,QAAU,EAAIokB,OACxC,IAAI,IAAAr7B,GAASkyB,GAAW,CAC7B,IAAIwI,EAAiBr7B,OAAOD,KAAK8yB,GAAU,GACvCnvB,EAAQmvB,EAASwI,GACrB7oB,EAAIpQ,KAAK2C,MAAMuL,OAAO+qB,GAAgB/e,iBAAiB5Y,GAASs4B,EAGlEH,EAAYz5B,KAAK+5B,+BACZ,GAAa,MAATxsB,EAAc,CACvB,GAAiB,WAAbkjB,EACFtgB,GAAK4F,EAAUN,KAAOM,EAAUR,OAAS,EAAIqkB,OACxC,IAAI,IAAAr7B,GAASkyB,GAAW,CAC7B,IAAIyJ,EAAmBt8B,OAAOD,KAAK8yB,GAAU,GACzC0J,EAAU1J,EAASyJ,GACvB/pB,EAAInQ,KAAK2C,MAAMuL,OAAOgsB,GAAkBhgB,iBAAiBigB,GAG3DV,EAAYz5B,KAAKg6B,wBAAwBpB,GAAIa,UAGlC,MAATlsB,IACY,UAAV6hB,EACF0K,EAAe,MACI,QAAV1K,IACT0K,EAAe,WAInB,IAAInF,EAAa30B,KAAK40B,iBAEtB,IAAKr2B,EAAI,EAAGgN,EAAO4O,EAAM1b,OAAQF,EAAIgN,IAAQhN,EAAG,CAE9CyW,EADOmF,EAAM5b,GACAyW,MACb,IAAIqkB,EAAcxB,EAAY3F,WAAWlyB,KAAKwS,WAAWjU,IACzDk5B,EAAQz3B,KAAKoa,gBAAgB7b,GAAKs5B,EAAY5I,YAE9CsB,GADAD,EAAOtwB,KAAKk3B,wBAAwB34B,IAClBgyB,WAElB,IAAI6J,GADJV,GAAY,OAAQ1kB,GAASA,EAAMvW,OAAS,GAChB,EACxBwH,EAAQozB,EAAYpzB,MACpBo0B,EAAchB,EAAYtK,gBAC1BuL,EAAcjB,EAAYvK,gBAC1ByL,EAAgBd,EAEhB3c,GACF3M,EAAIsnB,EAEc,UAAdgC,IAEAc,EADEh8B,IAAMgN,EAAO,EACEvL,KAAK8J,QAAQqB,QAAoB,OAAV,QACzB,IAAN5M,EACQyB,KAAK8J,QAAQqB,QAAmB,QAAT,OAExB,UAMhBwuB,EAFa,QAAblJ,EACiB,SAAfpB,GAAsC,IAAblN,GACbuX,EAAYnJ,EAAaA,EAAa,EAC5B,WAAflB,GACKsF,EAAWK,QAAQvX,OAAS,EAAI2c,EAAY7J,EAAaA,GAEzDoE,EAAWK,QAAQvX,OAAS8S,EAAa,EAGtC,SAAflB,GAAsC,IAAblN,EACdoO,EAAa,EACF,WAAflB,EACIsF,EAAWK,QAAQvX,OAAS,EAAI2c,EAAY7J,EAE5CoE,EAAWK,QAAQvX,OAASic,EAAYnJ,EAIrD1B,IACF8K,IAAe,KAGjBvpB,EAAIqnB,EACJkC,GAAc,EAAID,GAAanJ,EAAa,GAG9C,IAAIiK,OAAW,EAEf,GAAInB,EAAY/J,kBAAmB,CACjC,IAAImL,GAAe,OAAUpB,EAAY7J,iBACrC/R,EAASkX,EAAWoC,QAAQx4B,GAC5Bmf,EAAQiX,EAAWmC,OAAOv4B,GAC1B+W,EAAMlF,EAAIupB,EAAac,EAAanlB,IACpCG,EAAOtF,EAAIsqB,EAAahlB,KAE5B,OAAQqkB,GACN,IAAK,SACHxkB,GAAOmI,EAAS,EAChB,MAEF,IAAK,SACHnI,GAAOmI,EAIX,OAAQgc,GACN,IAAK,SACHhkB,GAAQiI,EAAQ,EAChB,MAEF,IAAK,QACHjI,GAAQiI,EAIZ8c,EAAW,CACT/kB,KAAMA,EACNH,IAAKA,EACLoI,MAAOA,EAAQ+c,EAAa/c,MAC5BD,OAAQA,EAASgd,EAAahd,OAC9BxX,MAAOozB,EAAY9J,eAIvBprB,EAAMhG,KAAK,CACTgkB,SAAUA,EACVnN,MAAOA,EACPsb,KAAMA,EACNrqB,MAAOA,EACPo0B,YAAaA,EACbC,YAAaA,EACbX,WAAYA,EACZF,UAAWc,EACXT,aAAcA,EACdY,YAAa,CAACvqB,EAAGC,GACjBoqB,SAAUA,IAId,OAAOr2B,IAER,CACDvF,IAAK,0BACL0C,MAAO,WACL,IAAIq5B,EAAiB36B,KAAK8J,QACtB2mB,EAAWkK,EAAelK,SAC1BtW,EAAQwgB,EAAexgB,MAG3B,KAFgB,IAAAjF,GAAUlV,KAAKoxB,eAG7B,MAAoB,QAAbX,EAAqB,OAAS,QAGvC,IAAIrB,EAAQ,SAUZ,MARoB,UAAhBjV,EAAMiV,MACRA,EAAQ,OACiB,QAAhBjV,EAAMiV,MACfA,EAAQ,QACiB,UAAhBjV,EAAMiV,QACfA,EAAQ,SAGHA,IAER,CACDxwB,IAAK,0BACL0C,MAAO,SAAiCs3B,GACtC,IAWIa,EACAtpB,EAZAyqB,EAAiB56B,KAAK8J,QACtB2mB,EAAWmK,EAAenK,SAC1BoK,EAAuBD,EAAezgB,MACtCkV,EAAawL,EAAqBxL,WAClCR,EAASgM,EAAqBhM,OAC9BH,EAAUmM,EAAqBnM,QAI/BkL,EAAiBhB,EAAKlK,EACtBoG,EAHa90B,KAAK40B,iBAGEE,OAAOpX,MA4D/B,MAxDiB,SAAb+S,EACE5B,GACF1e,EAAInQ,KAAKuV,MAAQmZ,EAEE,SAAfW,EACFoK,EAAY,OACY,WAAfpK,GACToK,EAAY,SACZtpB,GAAK2kB,EAAS,IAEd2E,EAAY,QACZtpB,GAAK2kB,KAGP3kB,EAAInQ,KAAKuV,MAAQqkB,EAEE,SAAfvK,EACFoK,EAAY,QACY,WAAfpK,GACToK,EAAY,SACZtpB,GAAK2kB,EAAS,IAEd2E,EAAY,OACZtpB,EAAInQ,KAAKyV,OAGS,UAAbgb,EACL5B,GACF1e,EAAInQ,KAAKyV,KAAOiZ,EAEG,SAAfW,EACFoK,EAAY,QACY,WAAfpK,GACToK,EAAY,SACZtpB,GAAK2kB,EAAS,IAEd2E,EAAY,OACZtpB,GAAK2kB,KAGP3kB,EAAInQ,KAAKyV,KAAOmkB,EAEG,SAAfvK,EACFoK,EAAY,OACY,WAAfpK,GACToK,EAAY,SACZtpB,GAAK2kB,EAAS,IAEd2E,EAAY,QACZtpB,EAAInQ,KAAKuV,QAIbkkB,EAAY,QAGP,CACLA,UAAWA,EACXtpB,EAAGA,KAGN,CACDvR,IAAK,oBACL0C,MAAO,WACL,IAAItB,KAAK8J,QAAQqQ,MAAM0U,OAAvB,CAIA,IAAIlsB,EAAQ3C,KAAK2C,MACb8tB,EAAWzwB,KAAK8J,QAAQ2mB,SAE5B,MAAiB,SAAbA,GAAoC,UAAbA,EAClB,CACLnb,IAAK,EACLG,KAAMzV,KAAKyV,KACXD,OAAQ7S,EAAM8a,OACdlI,MAAOvV,KAAKuV,OAIC,QAAbkb,GAAmC,WAAbA,EACjB,CACLnb,IAAKtV,KAAKsV,IACVG,KAAM,EACND,OAAQxV,KAAKwV,OACbD,MAAO5S,EAAM+a,YALjB,KASD,CACD9e,IAAK,iBACL0C,MAAO,WACL,IAAIwN,EAAM9O,KAAK8O,IACX4X,EAAkB1mB,KAAK8J,QAAQ4c,gBAC/BjR,EAAOzV,KAAKyV,KACZH,EAAMtV,KAAKsV,IACXoI,EAAQ1d,KAAK0d,MACbD,EAASzd,KAAKyd,OAEdiJ,IACF5X,EAAIgsB,OACJhsB,EAAI2X,UAAYC,EAChB5X,EAAIisB,SAAStlB,EAAMH,EAAKoI,EAAOD,GAC/B3O,EAAIksB,aAGP,CACDp8B,IAAK,uBACL0C,MAAO,SAA8BA,GACnC,IAAIkf,EAAOxgB,KAAK8J,QAAQ0W,KAExB,IAAKxgB,KAAK00B,eAAiBlU,EAAKyJ,QAC9B,OAAO,EAGT,IACIve,EADQ1L,KAAKma,MACC8gB,WAAU,SAAU/lB,GACpC,OAAOA,EAAE5T,QAAUA,KAGrB,OAAIoK,GAAS,EACA8U,EAAK0R,WAAWlyB,KAAKwS,WAAW9G,IAC/Bmb,UAGP,IAER,CACDjoB,IAAK,WACL0C,MAAO,SAAkByU,GACvB,IAKIxX,EAAGgN,EALHiV,EAAOxgB,KAAK8J,QAAQ0W,KACpB1R,EAAM9O,KAAK8O,IAEX3K,EAAQnE,KAAKsxB,iBAAmBtxB,KAAKsxB,eAAiBtxB,KAAKk7B,sBAAsBnlB,IAIjFolB,EAAW,SAAkBC,EAAIC,EAAI9U,GAClCA,EAAM7I,OAAU6I,EAAMtgB,QAI3B6I,EAAIgsB,OACJhsB,EAAI+X,UAAYN,EAAM7I,MACtB5O,EAAI6X,YAAcJ,EAAMtgB,MACxB6I,EAAIwsB,YAAY/U,EAAMiI,YAAc,IACpC1f,EAAIysB,eAAiBhV,EAAMkI,iBAC3B3f,EAAI0sB,YACJ1sB,EAAI2sB,OAAOL,EAAGjrB,EAAGirB,EAAGhrB,GACpBtB,EAAI4sB,OAAOL,EAAGlrB,EAAGkrB,EAAGjrB,GACpBtB,EAAI6sB,SACJ7sB,EAAIksB,YAGN,GAAIxa,EAAKyJ,QACP,IAAK1rB,EAAI,EAAGgN,EAAOpH,EAAM1F,OAAQF,EAAIgN,IAAQhN,EAAG,CAC9C,IAAI6F,EAAOD,EAAM5F,GAEbiiB,EAAK4N,iBACP+M,EAAS,CACPhrB,EAAG/L,EAAKm0B,GACRnoB,EAAGhM,EAAKo0B,IACP,CACDroB,EAAG/L,EAAKq0B,GACRroB,EAAGhM,EAAKs0B,IACPt0B,GAGDoc,EAAK6N,WACP8M,EAAS,CACPhrB,EAAG/L,EAAK+zB,IACR/nB,EAAGhM,EAAKg0B,KACP,CACDjoB,EAAG/L,EAAKi0B,IACRjoB,EAAGhM,EAAKk0B,KACP,CACDryB,MAAO7B,EAAKmqB,UACZ7Q,MAAOtZ,EAAKkqB,UACZE,WAAYpqB,EAAKm1B,eACjB9K,iBAAkBrqB,EAAKo1B,0BAMhC,CACD56B,IAAK,aACL0C,MAAO,WACL,IAAIqB,EAAQ3C,KAAK2C,MACbmM,EAAM9O,KAAK8O,IACX0R,EAAOxgB,KAAK8J,QAAQ0W,KACpBqY,EAAarY,EAAK0R,WAAWlyB,KAAKwS,cAClCsmB,EAAYtY,EAAK2N,WAAa0K,EAAWjT,YAAc,EAE3D,GAAKkT,EAAL,CAIA,IAEIP,EAAIE,EAAID,EAAIE,EAFZkD,EAAgBpb,EAAK0R,WAAWlyB,KAAKwS,WAAW,IAAIqU,UACpDoR,EAAcj4B,KAAKgyB,aAGnBhyB,KAAK8c,gBACPyb,GAAK,OAAY51B,EAAO3C,KAAKyV,KAAMqjB,GAAaA,EAAY,EAC5DL,GAAK,OAAY91B,EAAO3C,KAAKuV,MAAOqmB,GAAiBA,EAAgB,EACrEpD,EAAKE,EAAKT,IAEVO,GAAK,OAAY71B,EAAO3C,KAAKsV,IAAKwjB,GAAaA,EAAY,EAC3DJ,GAAK,OAAY/1B,EAAO3C,KAAKwV,OAAQomB,GAAiBA,EAAgB,EACtErD,EAAKE,EAAKR,GAGZnpB,EAAIgsB,OACJhsB,EAAI+X,UAAYgS,EAAWjT,YAC3B9W,EAAI6X,YAAckS,EAAWjS,YAC7B9X,EAAI0sB,YACJ1sB,EAAI2sB,OAAOlD,EAAIC,GACf1pB,EAAI4sB,OAAOjD,EAAIC,GACf5pB,EAAI6sB,SACJ7sB,EAAIksB,aAEL,CACDp8B,IAAK,aACL0C,MAAO,SAAoByU,GAGzB,GAFkB/V,KAAK8J,QAAQqQ,MAEd8P,QAAjB,CAIA,IAAInb,EAAM9O,KAAK8O,IAEXgH,EAAO9V,KAAK67B,oBAEZ/lB,IACF,OAAShH,EAAKgH,GAGhB,IAEIvX,EAAGgN,EAFHpH,EAAQnE,KAAKuxB,cAAgBvxB,KAAKuxB,YAAcvxB,KAAK87B,mBAAmB/lB,IAI5E,IAAKxX,EAAI,EAAGgN,EAAOpH,EAAM1F,OAAQF,EAAIgN,IAAQhN,EAAG,CAC9C,IAAI6F,EAAOD,EAAM5F,GACbm4B,EAAWtyB,EAAKksB,KAChBtb,EAAQ5Q,EAAK4Q,MAEb5Q,EAAKo2B,WACP1rB,EAAI2X,UAAYriB,EAAKo2B,SAASv0B,MAC9B6I,EAAIisB,SAAS32B,EAAKo2B,SAAS/kB,KAAMrR,EAAKo2B,SAASllB,IAAKlR,EAAKo2B,SAAS9c,MAAOtZ,EAAKo2B,SAAS/c,SAGzF,IAAIrN,EAAIhM,EAAKu1B,YACb,OAAW7qB,EAAKkG,EAAO,EAAG5E,EAAGsmB,EAAUtyB,GAGrC0R,IACF,OAAWhH,MAGd,CACDlQ,IAAK,YACL0C,MAAO,WACL,IAAIwN,EAAM9O,KAAK8O,IACXitB,EAAiB/7B,KAAK8J,QACtB2mB,EAAWsL,EAAetL,SAC1BjP,EAAQua,EAAeva,MACvBrW,EAAU4wB,EAAe5wB,QAE7B,GAAKqW,EAAMyI,QAAX,CAIA,IAAIqG,GAAO,OAAO9O,EAAM8O,MACpB5B,GAAU,OAAUlN,EAAMkN,SAC1BU,EAAQ5N,EAAM4N,MACd7O,EAAS+P,EAAKC,WAAa,EAEd,WAAbE,GAAsC,WAAbA,IAAyB,IAAAlyB,GAASkyB,IAC7DlQ,GAAUmO,EAAQlZ,QAEd,OAAQgM,EAAMgF,QAChBjG,GAAU+P,EAAKC,YAAc/O,EAAMgF,KAAK/nB,OAAS,KAGnD8hB,GAAUmO,EAAQpZ,IAGpB,IAAI0mB,EAz3CV,SAAmBhxB,EAAOuV,EAAQkQ,EAAUrB,GAC1C,IAQI5K,EAAUyX,EAAQC,EARlB5mB,EAAMtK,EAAMsK,IACZG,EAAOzK,EAAMyK,KACbD,EAASxK,EAAMwK,OACfD,EAAQvK,EAAMuK,MACd5S,EAAQqI,EAAMrI,MACdoT,EAAYpT,EAAMoT,UAClB7H,EAASvL,EAAMuL,OACfiU,EAAW,EAEX1E,EAASjI,EAASF,EAClBoI,EAAQnI,EAAQE,EAEpB,GAAIzK,EAAM8R,eAAgB,CAGxB,GAFAmf,GAAS,OAAe7M,EAAO3Z,EAAMF,IAEjC,IAAAhX,GAASkyB,GAAW,CACtB,IAAIwI,EAAiBr7B,OAAOD,KAAK8yB,GAAU,GACvCnvB,EAAQmvB,EAASwI,GACrBiD,EAAShuB,EAAO+qB,GAAgB/e,iBAAiB5Y,GAASmc,EAAS8C,OAEnE2b,EADsB,WAAbzL,GACC1a,EAAUP,OAASO,EAAUT,KAAO,EAAImI,EAAS8C,EAElDmP,GAAe1kB,EAAOylB,EAAUlQ,GAG3CiE,EAAWjP,EAAQE,MACd,CACL,IAAI,IAAAlX,GAASkyB,GAAW,CACtB,IAAI0L,EAAkBv+B,OAAOD,KAAK8yB,GAAU,GACxC2L,EAAS3L,EAAS0L,GACtBF,EAAS/tB,EAAOiuB,GAAiBjiB,iBAAiBkiB,GAAU1e,EAAQ6C,OAEpE0b,EADsB,WAAbxL,GACC1a,EAAUN,KAAOM,EAAUR,OAAS,EAAImI,EAAQ6C,EAEjDmP,GAAe1kB,EAAOylB,EAAUlQ,GAG3C2b,GAAS,OAAe9M,EAAO5Z,EAAQF,GACvC6M,EAAwB,SAAbsO,GAAuB,EAAAtM,EAAU,EAAAA,EAG9C,MAAO,CACL8X,OAAQA,EACRC,OAAQA,EACR1X,SAAUA,EACVrC,SAAUA,GA20CSka,CAAUr8B,KAAMugB,EAAQkQ,EAAUrB,GAC/C6M,EAASD,EAAWC,OACpBC,EAASF,EAAWE,OACpB1X,EAAWwX,EAAWxX,SACtBrC,EAAW6Z,EAAW7Z,UAE1B,OAAWrT,EAAK0S,EAAMgF,KAAM,EAAG,EAAG8J,EAAM,CACtCrqB,MAAOub,EAAMvb,MACbue,SAAUA,EACVrC,SAAUA,EACVsX,UAAWjJ,GAAWpB,EAAOqB,EAAUtlB,GACvC2uB,aAAc,SACdY,YAAa,CAACuB,EAAQC,QAGzB,CACDt9B,IAAK,OACL0C,MAAO,SAAcyU,GACd/V,KAAK00B,eAIV10B,KAAKs8B,iBACLt8B,KAAKu8B,SAASxmB,GACd/V,KAAKmuB,aACLnuB,KAAKw8B,YACLx8B,KAAKy8B,WAAW1mB,MAEjB,CACDnX,IAAK,UACL0C,MAAO,WACL,IAAIo7B,EAAU18B,KAEVkL,EAAOlL,KAAK8J,QACZ6yB,EAAKzxB,EAAKiP,OAASjP,EAAKiP,MAAMyiB,GAAK,EACnCC,GAAK,IAAA7zB,GAAekC,EAAKsV,MAAQtV,EAAKsV,KAAKoc,GAAI,GAEnD,OAAK58B,KAAK00B,cAAgB10B,KAAKqE,OAASssB,EAAMnxB,UAAU6E,KASjD,CAAC,CACNu4B,EAAGC,EACHx4B,KAAM,SAAc0R,GAClB2mB,EAAQJ,iBAERI,EAAQH,SAASxmB,GAEjB2mB,EAAQF,cAET,CACDI,EAAGC,EAAK,EACRx4B,KAAM,WACJq4B,EAAQvO,eAET,CACDyO,EAAGD,EACHt4B,KAAM,SAAc0R,GAClB2mB,EAAQD,WAAW1mB,MAzBd,CAAC,CACN6mB,EAAGD,EACHt4B,KAAM,SAAc0R,GAClB2mB,EAAQr4B,KAAK0R,QA0BpB,CACDnX,IAAK,0BACL0C,MAAO,SAAiCwB,GACtC,IAGIvE,EAAGgN,EAHH+mB,EAAQtyB,KAAK2C,MAAMm6B,+BACnBC,EAAS/8B,KAAKuN,KAAO,SACrB1N,EAAS,GAGb,IAAKtB,EAAI,EAAGgN,EAAO+mB,EAAM7zB,OAAQF,EAAIgN,IAAQhN,EAAG,CAC9C,IAAI4N,EAAOmmB,EAAM/zB,GAEb4N,EAAK4wB,KAAY/8B,KAAK4N,IAAQ9K,GAAQqJ,EAAKrJ,OAASA,GACtDjD,EAAO1B,KAAKgO,GAIhB,OAAOtM,IAER,CACDjB,IAAK,0BACL0C,MAAO,SAAiCoK,GACtC,IAAIR,EAAOlL,KAAK8J,QAAQqQ,MAAM+X,WAAWlyB,KAAKwS,WAAW9G,IACzD,OAAO,OAAOR,EAAKolB,QAEpB,CACD1xB,IAAK,aACL0C,MAAO,WACL,IAAI07B,EAAWh9B,KAAKk3B,wBAAwB,GAAG3G,WAE/C,OAAQvwB,KAAK8c,eAAiB9c,KAAK0d,MAAQ1d,KAAKyd,QAAUuf,MAIvDrM,EA36CgB,CA46CvB7F,GAEEmS,GAA6B,WAC/B,SAASA,EAAcn6B,EAAMo6B,EAAOC,IAClC,OAAgBn9B,KAAMi9B,GAEtBj9B,KAAK8C,KAAOA,EACZ9C,KAAKk9B,MAAQA,EACbl9B,KAAKm9B,SAAWA,EAChBn9B,KAAKmE,MAAQvG,OAAOw/B,OAAO,MAiE7B,OA9DA,OAAaH,EAAe,CAAC,CAC3Br+B,IAAK,YACL0C,MAAO,SAAmBwB,GACxB,OAAOlF,OAAO4B,UAAU69B,cAAc39B,KAAKM,KAAK8C,KAAKtD,UAAWsD,EAAKtD,aAEtE,CACDZ,IAAK,WACL0C,MAAO,SAAkB8C,GACvB,IACIk5B,EADAC,EAAQ3/B,OAAO4/B,eAAep5B,IAkFxC,SAA2Bm5B,GACzB,MAAO,OAAQA,GAAS,aAAcA,GAhF9BE,CAAkBF,KACpBD,EAAct9B,KAAK09B,SAASH,IAG9B,IAAIp5B,EAAQnE,KAAKmE,MACbyJ,EAAKxJ,EAAKwJ,GACVsvB,EAAQl9B,KAAKk9B,MAAQ,IAAMtvB,EAE/B,IAAKA,EACH,MAAM,IAAI+vB,MAAM,2BAA6Bv5B,GAG/C,OAAIwJ,KAAMzJ,IAIVA,EAAMyJ,GAAMxJ,EAsClB,SAA0BA,EAAM84B,EAAOI,GACrC,IAAIM,GAAe,OAAMhgC,OAAOw/B,OAAO,MAAO,CAACE,EAAc,EAAAr1B,EAAA,IAAaq1B,GAAe,GAAI,EAAAr1B,EAAA,IAAai1B,GAAQ94B,EAAK6X,WACvH,EAAAhU,EAAA,IAAai1B,EAAOU,GAEhBx5B,EAAKinB,eASX,SAAuB6R,EAAOW,GAC5BjgC,OAAOD,KAAKkgC,GAAQl/B,SAAQ,SAAUm/B,GACpC,IAAIC,EAAgBD,EAASE,MAAM,KAC/BC,EAAaF,EAAct5B,MAC3By5B,EAAc,CAAChB,GAAOvvB,OAAOowB,GAAeI,KAAK,KACjDC,EAAQP,EAAOC,GAAUE,MAAM,KAC/BK,EAAaD,EAAM35B,MACnB65B,EAAcF,EAAMD,KAAK,KAC7B,EAAAl2B,EAAA,MAAei2B,EAAaD,EAAYK,EAAaD,MAhBrDE,CAAcrB,EAAO94B,EAAKinB,eAGxBjnB,EAAK6hB,aACP,EAAAhe,EAAA,SAAkBi1B,EAAO94B,EAAK6hB,aA9C5BuY,CAAiBp6B,EAAM84B,EAAOI,GAE1Bt9B,KAAKm9B,UACP,EAAAl1B,EAAA,SAAkB7D,EAAKwJ,GAAIxJ,EAAKic,YAPzB6c,IAYV,CACDt+B,IAAK,MACL0C,MAAO,SAAasM,GAClB,OAAO5N,KAAKmE,MAAMyJ,KAEnB,CACDhP,IAAK,aACL0C,MAAO,SAAoB8C,GACzB,IAAID,EAAQnE,KAAKmE,MACbyJ,EAAKxJ,EAAKwJ,GACVsvB,EAAQl9B,KAAKk9B,MAEbtvB,KAAMzJ,UACDA,EAAMyJ,GAGXsvB,GAAStvB,KAAM,EAAA3F,EAASi1B,YACnB,EAAAj1B,EAASi1B,GAAOtvB,GAEnB5N,KAAKm9B,iBACA,IAAUvvB,QAMlBqvB,EAxEwB,GAwGjC,IAAIwB,GAAwB,WAC1B,SAASA,KACP,OAAgBz+B,KAAMy+B,GAEtBz+B,KAAK0+B,YAAc,IAAIzB,GAAcruB,EAAmB,YAAY,GACpE5O,KAAK6V,SAAW,IAAIonB,GAAcnS,EAAS,YAC3C9qB,KAAKshB,QAAU,IAAI2b,GAAcr/B,OAAQ,WACzCoC,KAAKkO,OAAS,IAAI+uB,GAActM,GAAO,UACvC3wB,KAAK2+B,iBAAmB,CAAC3+B,KAAK0+B,YAAa1+B,KAAKkO,OAAQlO,KAAK6V,UAuK/D,OApKA,OAAa4oB,EAAU,CAAC,CACtB7/B,IAAK,MACL0C,MAAO,WACL,IAAK,IAAIs9B,EAAOpgC,UAAUC,OAAQua,EAAO,IAAIxY,MAAMo+B,GAAOC,EAAO,EAAGA,EAAOD,EAAMC,IAC/E7lB,EAAK6lB,GAAQrgC,UAAUqgC,GAGzB7+B,KAAK8+B,MAAM,WAAY9lB,KAExB,CACDpa,IAAK,SACL0C,MAAO,WACL,IAAK,IAAIy9B,EAAQvgC,UAAUC,OAAQua,EAAO,IAAIxY,MAAMu+B,GAAQC,EAAQ,EAAGA,EAAQD,EAAOC,IACpFhmB,EAAKgmB,GAASxgC,UAAUwgC,GAG1Bh/B,KAAK8+B,MAAM,aAAc9lB,KAE1B,CACDpa,IAAK,iBACL0C,MAAO,WACL,IAAK,IAAI29B,EAAQzgC,UAAUC,OAAQua,EAAO,IAAIxY,MAAMy+B,GAAQC,EAAQ,EAAGA,EAAQD,EAAOC,IACpFlmB,EAAKkmB,GAAS1gC,UAAU0gC,GAG1Bl/B,KAAK8+B,MAAM,WAAY9lB,EAAMhZ,KAAK0+B,eAEnC,CACD9/B,IAAK,cACL0C,MAAO,WACL,IAAK,IAAI69B,EAAQ3gC,UAAUC,OAAQua,EAAO,IAAIxY,MAAM2+B,GAAQC,EAAQ,EAAGA,EAAQD,EAAOC,IACpFpmB,EAAKomB,GAAS5gC,UAAU4gC,GAG1Bp/B,KAAK8+B,MAAM,WAAY9lB,EAAMhZ,KAAK6V,YAEnC,CACDjX,IAAK,aACL0C,MAAO,WACL,IAAK,IAAI+9B,EAAQ7gC,UAAUC,OAAQua,EAAO,IAAIxY,MAAM6+B,GAAQC,EAAQ,EAAGA,EAAQD,EAAOC,IACpFtmB,EAAKsmB,GAAS9gC,UAAU8gC,GAG1Bt/B,KAAK8+B,MAAM,WAAY9lB,EAAMhZ,KAAKshB,WAEnC,CACD1iB,IAAK,YACL0C,MAAO,WACL,IAAK,IAAIi+B,EAAQ/gC,UAAUC,OAAQua,EAAO,IAAIxY,MAAM++B,GAAQC,EAAQ,EAAGA,EAAQD,EAAOC,IACpFxmB,EAAKwmB,GAAShhC,UAAUghC,GAG1Bx/B,KAAK8+B,MAAM,WAAY9lB,EAAMhZ,KAAKkO,UAEnC,CACDtP,IAAK,gBACL0C,MAAO,SAAuBsM,GAC5B,OAAO5N,KAAKy/B,KAAK7xB,EAAI5N,KAAK0+B,YAAa,gBAExC,CACD9/B,IAAK,aACL0C,MAAO,SAAoBsM,GACzB,OAAO5N,KAAKy/B,KAAK7xB,EAAI5N,KAAK6V,SAAU,aAErC,CACDjX,IAAK,YACL0C,MAAO,SAAmBsM,GACxB,OAAO5N,KAAKy/B,KAAK7xB,EAAI5N,KAAKshB,QAAS,YAEpC,CACD1iB,IAAK,WACL0C,MAAO,SAAkBsM,GACvB,OAAO5N,KAAKy/B,KAAK7xB,EAAI5N,KAAKkO,OAAQ,WAEnC,CACDtP,IAAK,oBACL0C,MAAO,WACL,IAAK,IAAIo+B,EAAQlhC,UAAUC,OAAQua,EAAO,IAAIxY,MAAMk/B,GAAQC,EAAQ,EAAGA,EAAQD,EAAOC,IACpF3mB,EAAK2mB,GAASnhC,UAAUmhC,GAG1B3/B,KAAK8+B,MAAM,aAAc9lB,EAAMhZ,KAAK0+B,eAErC,CACD9/B,IAAK,iBACL0C,MAAO,WACL,IAAK,IAAIs+B,EAAQphC,UAAUC,OAAQua,EAAO,IAAIxY,MAAMo/B,GAAQC,EAAQ,EAAGA,EAAQD,EAAOC,IACpF7mB,EAAK6mB,GAASrhC,UAAUqhC,GAG1B7/B,KAAK8+B,MAAM,aAAc9lB,EAAMhZ,KAAK6V,YAErC,CACDjX,IAAK,gBACL0C,MAAO,WACL,IAAK,IAAIw+B,EAAQthC,UAAUC,OAAQua,EAAO,IAAIxY,MAAMs/B,GAAQC,EAAQ,EAAGA,EAAQD,EAAOC,IACpF/mB,EAAK+mB,GAASvhC,UAAUuhC,GAG1B//B,KAAK8+B,MAAM,aAAc9lB,EAAMhZ,KAAKshB,WAErC,CACD1iB,IAAK,eACL0C,MAAO,WACL,IAAK,IAAI0+B,EAASxhC,UAAUC,OAAQua,EAAO,IAAIxY,MAAMw/B,GAASC,EAAS,EAAGA,EAASD,EAAQC,IACzFjnB,EAAKinB,GAAUzhC,UAAUyhC,GAG3BjgC,KAAK8+B,MAAM,aAAc9lB,EAAMhZ,KAAKkO,UAErC,CACDtP,IAAK,QACL0C,MAAO,SAAe0G,EAAQgR,EAAMknB,GAClC,IAAIC,EAAUngC,MAEd,OAAmBgZ,GAAMra,SAAQ,SAAUyhC,GACzC,IAAIC,EAAMH,GAAiBC,EAAQG,oBAAoBF,GAEnDF,GAAiBG,EAAIE,UAAUH,IAAQC,IAAQF,EAAQ7e,SAAW8e,EAAIxyB,GACxEuyB,EAAQK,MAAMx4B,EAAQq4B,EAAKD,IAE3B,OAAKA,GAAK,SAAUh8B,GAClB,IAAIq8B,EAAUP,GAAiBC,EAAQG,oBAAoBl8B,GAE3D+7B,EAAQK,MAAMx4B,EAAQy4B,EAASr8B,WAKtC,CACDxF,IAAK,QACL0C,MAAO,SAAe0G,EAAQ04B,EAAUC,GACtC,IAAIC,GAAc,OAAY54B,IAE9B,OAAS24B,EAAU,SAAWC,GAAc,GAAID,GAChDD,EAAS14B,GAAQ24B,IACjB,OAASA,EAAU,QAAUC,GAAc,GAAID,KAEhD,CACD/hC,IAAK,sBACL0C,MAAO,SAA6BwB,GAClC,IAAK,IAAIvE,EAAI,EAAGA,EAAIyB,KAAK2+B,iBAAiBlgC,OAAQF,IAAK,CACrD,IAAI8hC,EAAMrgC,KAAK2+B,iBAAiBpgC,GAEhC,GAAI8hC,EAAIE,UAAUz9B,GAChB,OAAOu9B,EAIX,OAAOrgC,KAAKshB,UAEb,CACD1iB,IAAK,OACL0C,MAAO,SAAcsM,EAAIsyB,EAAep9B,GACtC,IAAIsB,EAAO87B,EAAct7B,IAAIgJ,GAE7B,QAAalL,IAAT0B,EACF,MAAM,IAAIu5B,MAAM,IAAM/vB,EAAK,yBAA2B9K,EAAO,KAG/D,OAAOsB,MAIJq6B,EA/KmB,GAkLxBiC,GAAW,IAAIjC,GAEfoC,GAAiC,SAAUC,IAC7C,OAAUD,EAAmBC,GAE7B,IAAIC,EAAU/hC,EAAa6hC,GAE3B,SAASA,IAGP,OAFA,OAAgB7gC,KAAM6gC,GAEfE,EAAQ3iC,MAAM4B,KAAMxB,WAiI7B,OA9HA,OAAaqiC,EAAmB,CAAC,CAC/BjiC,IAAK,SACL0C,MAAO,SAAgB2K,GACrB,IAAIE,EAAOnM,KAAKmN,YACZ6zB,EAAc70B,EAAKiF,KACnB2P,OAAyB,IAAhBigB,EAAyB,GAAKA,EACvCtZ,EAAqB1nB,KAAK2C,MAAM+U,oBAEhCupB,GAAyB,OAAiC90B,EAAM4U,EAAQ2G,GACxElkB,EAAQy9B,EAAuBz9B,MAC/BkP,EAAQuuB,EAAuBvuB,MAUnC,GARA1S,KAAKsP,WAAa9L,EAClBxD,KAAKuP,WAAamD,GAEd,OAAoBvG,KACtB3I,EAAQ,EACRkP,EAAQqO,EAAOtiB,QAGbuB,KAAK8J,QAAQge,SAAU,CACzB,IAAIP,EAAOpb,EAAK6D,QACZyX,EAAWtb,EAAKsb,SACpBF,EAAKpe,OAASnJ,KAAK2C,MACnB4kB,EAAKK,cAAgB5nB,KAAK0L,MAC1B6b,EAAKM,aAAeJ,EAASI,WAC7BN,EAAKxG,OAASA,EACd,IAAIjX,EAAU9J,KAAKkW,6BAA6BjK,GAChDnC,EAAQie,QAAU/nB,KAAK8J,QAAQie,QAC/B/nB,KAAK2d,cAAc4J,OAAM7kB,EAAW,CAClCslB,UAAWN,EACX5d,QAASA,GACRmC,GAGLjM,KAAK6Y,eAAekI,EAAQvd,EAAOkP,EAAOzG,KAE3C,CACDrN,IAAK,cACL0C,MAAO,WACL,IAAIwmB,EAAW9nB,KAAK8J,QAAQge,UAEvB9nB,KAAK8R,oBAAsBgW,IAC9B9nB,KAAK8R,mBAAqB4uB,GAASQ,WAAW,UAGhD,QAAK,OAAgBL,EAAkBrhC,WAAY,cAAeQ,MAAMN,KAAKM,QAE9E,CACDpB,IAAK,iBACL0C,MAAO,SAAwByf,EAAQvd,EAAOkP,EAAOzG,GAmBnD,IAlBA,IAAI2Q,EAAiB,UAAT3Q,EACRk1B,EAAqBnhC,KAAKmN,YAC1BE,EAAS8zB,EAAmB9zB,OAC5BV,EAASw0B,EAAmBx0B,OAC5BmD,EAAWqxB,EAAmBrxB,SAC9B2X,EAAW0Z,EAAmB1Z,SAC9B9P,EAAY3X,KAAKmW,0BAA0B3S,EAAOyI,GAClDwL,EAAgBzX,KAAK6X,iBAAiBF,GACtCG,EAAiB9X,KAAK8X,eAAe7L,EAAMwL,GAC3CnK,EAAQD,EAAOE,KACfC,EAAQb,EAAOY,KACf6zB,EAAkBphC,KAAK8J,QACvBse,EAAWgZ,EAAgBhZ,SAC3BL,EAAUqZ,EAAgBrZ,QAC1BM,GAAe,OAASD,GAAYA,EAAWjU,OAAOC,kBACtDkU,EAAetoB,KAAK2C,MAAM+U,qBAAuBkF,GAAkB,SAAT3Q,EAC1Dsc,EAAa/kB,EAAQ,GAAKxD,KAAK+U,UAAUvR,EAAQ,GAE5CjF,EAAIiF,EAAOjF,EAAIiF,EAAQkP,IAASnU,EAAG,CAC1C,IAAI2iB,EAAQH,EAAOxiB,GACf2O,EAASlN,KAAK+U,UAAUxW,GACxBgK,EAAa+f,EAAepH,EAAQ,GACpCsH,GAAW,OAActb,EAAOM,IAChC2T,EAAS5Y,EAAW+E,GAASD,EAAO6M,iBAAiBhN,EAAOI,GAAQ/O,GACpE6iB,EAAS7Y,EAAWiF,GAASoP,GAAS4L,EAAW7b,EAAOkQ,eAAiBlQ,EAAOuN,iBAAiBpK,EAAW9P,KAAKmf,WAAWxS,EAAQO,EAAQ4C,GAAY5C,EAAOM,GAAQjP,GAC3KgK,EAAW8Y,KAAOpD,MAAMkD,IAAWlD,MAAMmD,IAAWoH,EACpDjgB,EAAWkgB,KAAOlqB,EAAI,GAAK+E,KAAK2W,IAAI/M,EAAOI,GAASib,EAAWjb,IAAU+a,EAErEN,IACFxf,EAAW2E,OAASA,EACpB3E,EAAWgO,IAAMkR,EAASrW,KAAK7S,IAG7BuZ,IACFvP,EAAWuB,QAAU2N,GAAiBzX,KAAKmW,0BAA0B5X,EAAG2iB,EAAMzY,OAAS,SAAWwD,IAG/Fqc,GACHtoB,KAAK2d,cAAcuD,EAAO3iB,EAAGgK,EAAY0D,GAG3Csc,EAAarb,EAGflN,KAAK+X,oBAAoBN,EAAexL,EAAM0L,KAE/C,CACD/Y,IAAK,iBACL0C,MAAO,WACL,IAAI6K,EAAOnM,KAAKmN,YACZiE,EAAOjF,EAAKiF,MAAQ,GAExB,IAAKpR,KAAK8J,QAAQge,SAAU,CAG1B,IAFA,IAAIviB,EAAM,EAEDhH,EAAI6S,EAAK3S,OAAS,EAAGF,GAAK,IAAKA,EACtCgH,EAAMjC,KAAKiC,IAAIA,EAAK6L,EAAK7S,GAAGsM,KAAK7K,KAAKmW,0BAA0B5X,IAAM,GAGxE,OAAOgH,EAAM,GAAKA,EAGpB,IAAIyK,EAAU7D,EAAK6D,QACf0Y,EAAS1Y,EAAQlG,SAAWkG,EAAQlG,QAAQ8b,aAAe,EAE/D,IAAKxU,EAAK3S,OACR,OAAOiqB,EAGT,IAAIC,EAAavX,EAAK,GAAGvG,KAAK7K,KAAKmW,0BAA0B,IACzDyS,EAAYxX,EAAKA,EAAK3S,OAAS,GAAGoM,KAAK7K,KAAKmW,0BAA0B/E,EAAK3S,OAAS,IACxF,OAAO6E,KAAKiC,IAAImjB,EAAQC,EAAYC,GAAa,MAI9CiY,EAzI4B,CA0InCjyB,GAEFiyB,GAAkBjzB,GAAK,UACvBizB,GAAkB5kB,SAAW,CAC3BnK,oBAAoB,EACpB6E,gBAAiB,QACjBmR,UAAU,EACV+C,MAAM,GAERgW,GAAkBxgB,UAAY,CAC5BghB,YAAa,CACXp1B,KAAM,SAERqV,QAAS,CACPC,QAAS,CACPxe,UAAW,CACTye,MAAO,WACL,MAAO,IAETxM,MAAO,SAAe5Q,GACpB,MAAO,IAAMA,EAAK4Q,MAAQ,KAAO5Q,EAAK+iB,eAAiB,QAK/DjZ,OAAQ,CACNiC,EAAG,CACDrN,KAAM,UAERsN,EAAG,CACDtN,KAAM,YAIZ,IAAI47B,GAA2B9gC,OAAOyZ,OAAO,CAC3CiqB,UAAW,KACXplB,cAAeA,EACfyE,iBAAkBA,EAClBc,mBAAoBA,EACpB2F,eAAgBA,EAChB0B,oBAAqBA,EACrBsB,cAAeA,EACfG,gBAAiBA,EACjBsW,kBAAmBA,KAGrB,SAASU,KACP,MAAM,IAAI5D,MAAM,mFAGlB,IAAI6D,GAA2B,WAC7B,SAASA,EAAY13B,IACnB,OAAgB9J,KAAMwhC,GAEtBxhC,KAAK8J,QAAUA,GAAW,GA2C5B,OAxCA,OAAa03B,EAAa,CAAC,CACzB5iC,IAAK,OACL0C,MAAO,SAAcmgC,MACpB,CACD7iC,IAAK,UACL0C,MAAO,WACL,OAAOigC,OAER,CACD3iC,IAAK,QACL0C,MAAO,SAAeA,EAAO2qB,GAC3B,OAAOsV,OAER,CACD3iC,IAAK,SACL0C,MAAO,SAAgBogC,EAAWC,GAChC,OAAOJ,OAER,CACD3iC,IAAK,MACL0C,MAAO,SAAaogC,EAAWE,EAAQC,GACrC,OAAON,OAER,CACD3iC,IAAK,OACL0C,MAAO,SAAcuY,EAAG1E,EAAG0sB,GACzB,OAAON,OAER,CACD3iC,IAAK,UACL0C,MAAO,SAAiBogC,EAAWG,EAAMC,GACvC,OAAOP,OAER,CACD3iC,IAAK,QACL0C,MAAO,SAAeogC,EAAWG,GAC/B,OAAON,SAIJC,EA/CsB,GAkD/BA,GAAYrE,SAAW,SAAU4E,GAC/BnkC,OAAOoM,OAAOw3B,GAAYhiC,UAAWuiC,IAGvC,IAAIC,GAAW,CACbC,MAAOT,IAGT,SAASU,GAAaC,EAAS50B,EAAMjM,EAAO8gC,GAC1C,IAAIn1B,EAAak1B,EAAQl1B,WACrBmE,EAAO+wB,EAAQ/wB,KACfwB,EAAUuvB,EAAQvvB,QAClBvF,EAASJ,EAAWE,YAAYE,OAEpC,GAAIA,GAAUE,IAASF,EAAOE,MAAiB,MAATA,GAAgBqF,GAAWxB,EAAK3S,OAAQ,CAC5E,IAAI4jC,EAAeh1B,EAAOqkB,eAAiB,IAAgB,IAE3D,IAAK0Q,EACH,OAAOC,EAAajxB,EAAM7D,EAAMjM,GAC3B,GAAI2L,EAAWoC,eAAgB,CACpC,IAAIizB,EAAKlxB,EAAK,GACVuC,EAA+B,mBAAhB2uB,EAAGC,UAA2BD,EAAGC,SAASh1B,GAE7D,GAAIoG,EAAO,CACT,IAAInQ,EAAQ6+B,EAAajxB,EAAM7D,EAAMjM,EAAQqS,GACzCvI,EAAMi3B,EAAajxB,EAAM7D,EAAMjM,EAAQqS,GAC3C,MAAO,CACL6uB,GAAIh/B,EAAMg/B,GACVC,GAAIr3B,EAAIq3B,MAMhB,MAAO,CACLD,GAAI,EACJC,GAAIrxB,EAAK3S,OAAS,GAItB,SAASikC,GAAyB//B,EAAO4K,EAAMkjB,EAAUkS,EAASP,GAIhE,IAHA,IAAI52B,EAAW7I,EAAMm6B,+BACjBx7B,EAAQmvB,EAASljB,GAEZhP,EAAI,EAAGgN,EAAOC,EAAS/M,OAAQF,EAAIgN,IAAQhN,EASlD,IARA,IAAIqkC,EAAcp3B,EAASjN,GACvBskC,EAAUD,EAAYl3B,MACtB0F,EAAOwxB,EAAYxxB,KAEnB0xB,EAAgBZ,GAAa12B,EAASjN,GAAIgP,EAAMjM,EAAO8gC,GACvDI,EAAKM,EAAcN,GACnBC,EAAKK,EAAcL,GAEdjM,EAAIgM,EAAIhM,GAAKiM,IAAMjM,EAAG,CAC7B,IAAIvgB,EAAU7E,EAAKolB,GAEdvgB,EAAQoL,MACXshB,EAAQ1sB,EAAS4sB,EAASrM,IAgBlC,SAASuM,GAAkBpgC,EAAO8tB,EAAUljB,EAAMwd,EAAkBiY,GAClE,IAAI7+B,EAAQ,GAEZ,IAAK6+B,IAAqBrgC,EAAMsgC,cAAcxS,GAC5C,OAAOtsB,EAkBT,OADAu+B,GAAyB//B,EAAO4K,EAAMkjB,GAdjB,SAAwBxa,EAASnK,EAAcJ,IAC7Ds3B,IAAqB,OAAe/sB,EAAStT,EAAMoT,UAAW,KAI/DE,EAAQitB,QAAQzS,EAAStgB,EAAGsgB,EAASrgB,EAAG2a,IAC1C5mB,EAAMhG,KAAK,CACT8X,QAASA,EACTnK,aAAcA,EACdJ,MAAOA,OAKmD,GACzDvH,EA8BT,SAASg/B,GAAyBxgC,EAAO8tB,EAAUljB,EAAM60B,EAAWrX,EAAkBiY,GACpF,IAAI7+B,EAAQ,GACRi/B,EAhEN,SAAkC71B,GAChC,IAAI81B,GAA8B,IAAvB91B,EAAK4Q,QAAQ,KACpBmlB,GAA8B,IAAvB/1B,EAAK4Q,QAAQ,KACxB,OAAO,SAAUolB,EAAKC,GACpB,IAAIC,EAASJ,EAAO//B,KAAK2W,IAAIspB,EAAIpzB,EAAIqzB,EAAIrzB,GAAK,EAC1CuzB,EAASJ,EAAOhgC,KAAK2W,IAAIspB,EAAInzB,EAAIozB,EAAIpzB,GAAK,EAC9C,OAAO9M,KAAK2xB,KAAK3xB,KAAK6oB,IAAIsX,EAAQ,GAAKngC,KAAK6oB,IAAIuX,EAAQ,KA0DrCC,CAAyBp2B,GAC1Cq2B,EAAczvB,OAAOC,kBAmCzB,OADAsuB,GAAyB//B,EAAO4K,EAAMkjB,GAhCtC,SAAwBxa,EAASnK,EAAcJ,GAC7C,IAAIw3B,EAAUjtB,EAAQitB,QAAQzS,EAAStgB,EAAGsgB,EAASrgB,EAAG2a,GAEtD,IAAIqX,GAAcc,EAAlB,CAIA,IAAI1lB,EAASvH,EAAQ4tB,eAAe9Y,GAGpC,KAFoBiY,GAAoBrgC,EAAMsgC,cAAczlB,IAEvC0lB,EAArB,CAIA,IAAIY,EAAWV,EAAe3S,EAAUjT,GAEpCsmB,EAAWF,GACbz/B,EAAQ,CAAC,CACP8R,QAASA,EACTnK,aAAcA,EACdJ,MAAOA,IAETk4B,EAAcE,GACLA,IAAaF,GACtBz/B,EAAMhG,KAAK,CACT8X,QAASA,EACTnK,aAAcA,EACdJ,MAAOA,SAMNvH,EAGT,SAAS4/B,GAAgBphC,EAAO8tB,EAAUljB,EAAM60B,EAAWrX,EAAkBiY,GAC3E,OAAKA,GAAqBrgC,EAAMsgC,cAAcxS,GAI9B,MAATljB,GAAiB60B,EAA6Ee,GAAyBxgC,EAAO8tB,EAAUljB,EAAM60B,EAAWrX,EAAkBiY,GAzEpL,SAA+BrgC,EAAO8tB,EAAUljB,EAAMwd,GACpD,IAAI5mB,EAAQ,GAuBZ,OADAu+B,GAAyB//B,EAAO4K,EAAMkjB,GApBtC,SAAwBxa,EAASnK,EAAcJ,GAC7C,IAAIs4B,EAAoB/tB,EAAQgV,SAAS,CAAC,aAAc,YAAaF,GACjEzH,EAAa0gB,EAAkB1gB,WAC/BC,EAAWygB,EAAkBzgB,SAM7BQ,GAJqB,QAAkB9N,EAAS,CAClD9F,EAAGsgB,EAAStgB,EACZC,EAAGqgB,EAASrgB,IAEiB2T,OAE3B,OAAcA,EAAOT,EAAYC,IACnCpf,EAAMhG,KAAK,CACT8X,QAASA,EACTnK,aAAcA,EACdJ,MAAOA,OAMNvH,EAiD6B8/B,CAAsBthC,EAAO8tB,EAAUljB,EAAMwd,GAHxE,GAMX,SAASmZ,GAAavhC,EAAO8tB,EAAUljB,EAAM60B,EAAWrX,GACtD,IAAI5mB,EAAQ,GACRggC,EAAuB,MAAT52B,EAAe,WAAa,WAC1C62B,GAAiB,EAYrB,OAXA1B,GAAyB//B,EAAO4K,EAAMkjB,GAAU,SAAUxa,EAASnK,EAAcJ,GAC3EuK,EAAQkuB,GAAa1T,EAASljB,GAAOwd,KACvC5mB,EAAMhG,KAAK,CACT8X,QAASA,EACTnK,aAAcA,EACdJ,MAAOA,IAET04B,EAAiBA,GAAkBnuB,EAAQitB,QAAQzS,EAAStgB,EAAGsgB,EAASrgB,EAAG2a,OAI3EqX,IAAcgC,EACT,GAGFjgC,EAGT,IAAIkgC,GAAc,CAChB3B,yBAA0BA,GAC1B4B,MAAO,CACL54B,MAAO,SAAe/I,EAAOhD,EAAGmK,EAASihB,GACvC,IAAI0F,GAAW,OAAoB9wB,EAAGgD,GAClC4K,EAAOzD,EAAQyD,MAAQ,IACvBy1B,EAAmBl5B,EAAQk5B,mBAAoB,EAC/C7+B,EAAQ2F,EAAQs4B,UAAYW,GAAkBpgC,EAAO8tB,EAAUljB,EAAMwd,EAAkBiY,GAAoBe,GAAgBphC,EAAO8tB,EAAUljB,GAAM,EAAOwd,EAAkBiY,GAC3KntB,EAAW,GAEf,OAAK1R,EAAM1F,QAIXkE,EAAMm6B,+BAA+Bn+B,SAAQ,SAAUwN,GACrD,IAAIT,EAAQvH,EAAM,GAAGuH,MACjBuK,EAAU9J,EAAKiF,KAAK1F,GAEpBuK,IAAYA,EAAQoL,MACtBxL,EAAS1X,KAAK,CACZ8X,QAASA,EACTnK,aAAcK,EAAKT,MACnBA,MAAOA,OAINmK,GAfE,IAiBX7F,QAAS,SAAiBrN,EAAOhD,EAAGmK,EAASihB,GAC3C,IAAI0F,GAAW,OAAoB9wB,EAAGgD,GAClC4K,EAAOzD,EAAQyD,MAAQ,KACvBy1B,EAAmBl5B,EAAQk5B,mBAAoB,EAC/C7+B,EAAQ2F,EAAQs4B,UAAYW,GAAkBpgC,EAAO8tB,EAAUljB,EAAMwd,EAAkBiY,GAAoBe,GAAgBphC,EAAO8tB,EAAUljB,GAAM,EAAOwd,EAAkBiY,GAE/K,GAAI7+B,EAAM1F,OAAS,EAAG,CACpB,IAAIqN,EAAe3H,EAAM,GAAG2H,aACxBsF,EAAOzO,EAAM2O,eAAexF,GAAcsF,KAC9CjN,EAAQ,GAER,IAAK,IAAI5F,EAAI,EAAGA,EAAI6S,EAAK3S,SAAUF,EACjC4F,EAAMhG,KAAK,CACT8X,QAAS7E,EAAK7S,GACduN,aAAcA,EACdJ,MAAOnN,IAKb,OAAO4F,GAET+c,MAAO,SAAeve,EAAOhD,EAAGmK,EAASihB,GAIvC,OAAOgY,GAAkBpgC,GAHV,OAAoBhD,EAAGgD,GAC3BmH,EAAQyD,MAAQ,KAEqBwd,EADzBjhB,EAAQk5B,mBAAoB,IAGrDuB,QAAS,SAAiB5hC,EAAOhD,EAAGmK,EAASihB,GAC3C,IAAI0F,GAAW,OAAoB9wB,EAAGgD,GAClC4K,EAAOzD,EAAQyD,MAAQ,KACvBy1B,EAAmBl5B,EAAQk5B,mBAAoB,EACnD,OAAOe,GAAgBphC,EAAO8tB,EAAUljB,EAAMzD,EAAQs4B,UAAWrX,EAAkBiY,IAErF7yB,EAAG,SAAWxN,EAAOhD,EAAGmK,EAASihB,GAE/B,OAAOmZ,GAAavhC,GADL,OAAoBhD,EAAGgD,GACD,IAAKmH,EAAQs4B,UAAWrX,IAE/D3a,EAAG,SAAWzN,EAAOhD,EAAGmK,EAASihB,GAE/B,OAAOmZ,GAAavhC,GADL,OAAoBhD,EAAGgD,GACD,IAAKmH,EAAQs4B,UAAWrX,MAI/DyZ,GAAmB,CAAC,OAAQ,MAAO,QAAS,UAEhD,SAASC,GAAiBC,EAAOjU,GAC/B,OAAOiU,EAAM3mC,QAAO,SAAUiL,GAC5B,OAAOA,EAAE27B,MAAQlU,KAIrB,SAASmU,GAA4BF,EAAOn3B,GAC1C,OAAOm3B,EAAM3mC,QAAO,SAAUiL,GAC5B,OAA4C,IAArCw7B,GAAiBrmB,QAAQnV,EAAE27B,MAAe37B,EAAE67B,IAAIt3B,OAASA,KAIpE,SAASu3B,GAAaJ,EAAOv5B,GAC3B,OAAOu5B,EAAM9qB,MAAK,SAAUC,EAAG1E,GAC7B,IAAI4vB,EAAK55B,EAAUgK,EAAI0E,EACnB6B,EAAKvQ,EAAU0O,EAAI1E,EACvB,OAAO4vB,EAAG/e,SAAWtK,EAAGsK,OAAS+e,EAAGr5B,MAAQgQ,EAAGhQ,MAAQq5B,EAAG/e,OAAStK,EAAGsK,UAkE1E,SAASgf,GAAcC,EAASC,GAC9B,IAGI3mC,EAAGgN,EAAM45B,EAHT74B,EArCN,SAAqB24B,GACnB,IAGIG,EAHA94B,EAAS,GAET+4B,EAAanlC,EAA2B+kC,GAG5C,IACE,IAAKI,EAAWjkC,MAAOgkC,EAASC,EAAWzkC,KAAKS,MAAO,CACrD,IAAIikC,EAAOF,EAAO9jC,MACdsK,EAAQ05B,EAAK15B,MACb+4B,EAAMW,EAAKX,IACXY,EAAcD,EAAKC,YAEvB,GAAK35B,GAAU44B,GAAiBgB,SAASb,GAAzC,CAIA,IAAIc,EAASn5B,EAAOV,KAAWU,EAAOV,GAAS,CAC7C8G,MAAO,EACPgzB,OAAQ,EACR1f,OAAQ,EACRnb,KAAM,IAGR46B,EAAO/yB,QACP+yB,EAAOzf,QAAUuf,IAEnB,MAAO7jC,GACP2jC,EAAW1lC,EAAE+B,GACb,QACA2jC,EAAW7jC,IAGb,OAAO8K,EAIMq5B,CAAYV,GACrBW,EAAeV,EAAOU,aACtBC,EAAgBX,EAAOW,cAG3B,IAAKtnC,EAAI,EAAGgN,EAAO05B,EAAQxmC,OAAQF,EAAIgN,IAAQhN,EAAG,CAEhD,IAAI83B,GADJ8O,EAASF,EAAQ1mC,IACKsmC,IAAIxO,SACtBzqB,EAAQU,EAAO64B,EAAOv5B,OACtB5F,EAAS4F,GAASu5B,EAAOI,YAAc35B,EAAMoa,OAE7Cmf,EAAO/pB,YACT+pB,EAAOznB,MAAQ1X,EAASA,EAAS4/B,EAAevP,GAAY6O,EAAOY,eACnEX,EAAO1nB,OAASooB,IAEhBV,EAAOznB,MAAQkoB,EACfT,EAAO1nB,OAASzX,EAASA,EAAS6/B,EAAgBxP,GAAY6O,EAAOa,iBAIzE,OAAOz5B,EAwBT,SAAS05B,GAAeC,EAAYlwB,EAAW8D,EAAG1E,GAChD,OAAO7R,KAAKiC,IAAI0gC,EAAWpsB,GAAI9D,EAAU8D,IAAMvW,KAAKiC,IAAI0gC,EAAW9wB,GAAIY,EAAUZ,IAGnF,SAAS+wB,GAAiBD,EAAYE,GACpCF,EAAW3wB,IAAMhS,KAAKiC,IAAI0gC,EAAW3wB,IAAK6wB,EAAW7wB,KACrD2wB,EAAWxwB,KAAOnS,KAAKiC,IAAI0gC,EAAWxwB,KAAM0wB,EAAW1wB,MACvDwwB,EAAWzwB,OAASlS,KAAKiC,IAAI0gC,EAAWzwB,OAAQ2wB,EAAW3wB,QAC3DywB,EAAW1wB,MAAQjS,KAAKiC,IAAI0gC,EAAW1wB,MAAO4wB,EAAW5wB,OAG3D,SAAS6wB,GAAWrwB,EAAWmvB,EAAQC,EAAQ74B,GAC7C,IAAIq4B,EAAMQ,EAAOR,IACbE,EAAMM,EAAON,IACboB,EAAalwB,EAAUkwB,WAE3B,KAAK,IAAA1nC,GAASomC,GAAM,CACdQ,EAAOt6B,OACTkL,EAAU4uB,IAAQQ,EAAOt6B,MAG3B,IAAIe,EAAQU,EAAO64B,EAAOv5B,QAAU,CAClCf,KAAM,EACN6H,MAAO,GAET9G,EAAMf,KAAOvH,KAAKiC,IAAIqG,EAAMf,KAAMs6B,EAAO/pB,WAAaypB,EAAIpnB,OAASonB,EAAInnB,OACvEynB,EAAOt6B,KAAOe,EAAMf,KAAOe,EAAM8G,MACjCqD,EAAU4uB,IAAQQ,EAAOt6B,KAGvBg6B,EAAIwB,YACNH,GAAiBD,EAAYpB,EAAIwB,cAGnC,IAAIC,EAAWhjC,KAAKiC,IAAI,EAAG2/B,EAAOqB,WAAaP,GAAeC,EAAYlwB,EAAW,OAAQ,UACzFywB,EAAYljC,KAAKiC,IAAI,EAAG2/B,EAAOuB,YAAcT,GAAeC,EAAYlwB,EAAW,MAAO,WAC1F2wB,EAAeJ,IAAavwB,EAAUgiB,EACtC4O,EAAgBH,IAAczwB,EAAUiiB,EAG5C,OAFAjiB,EAAUgiB,EAAIuO,EACdvwB,EAAUiiB,EAAIwO,EACPrB,EAAO/pB,WAAa,CACzBwrB,KAAMF,EACNG,MAAOF,GACL,CACFC,KAAMD,EACNE,MAAOH,GAmBX,SAASI,GAAW1rB,EAAYrF,GAC9B,IAAIkwB,EAAalwB,EAAUkwB,WAE3B,SAASc,EAAmBC,GAC1B,IAAIC,EAAS,CACXxxB,KAAM,EACNH,IAAK,EACLC,MAAO,EACPC,OAAQ,GAKV,OAHAwxB,EAAUroC,SAAQ,SAAUgmC,GAC1BsC,EAAOtC,GAAOrhC,KAAKiC,IAAIwQ,EAAU4uB,GAAMsB,EAAWtB,OAE7CsC,EAGT,OAAoBF,EAAb3rB,EAAgC,CAAC,OAAQ,SAA+B,CAAC,MAAO,WAGzF,SAAS8rB,GAASC,EAAOpxB,EAAWmvB,EAAQ54B,GAC1C,IACI/N,EAAGgN,EAAM45B,EAAQN,EAAKuC,EAAOC,EAD7BC,EAAa,GAGjB,IAAK/oC,EAAI,EAAGgN,EAAO47B,EAAM1oC,OAAQ2oC,EAAQ,EAAG7oC,EAAIgN,IAAQhN,EAAG,EAEzDsmC,GADAM,EAASgC,EAAM5oC,IACFsmC,KACTl6B,OAAOw6B,EAAOznB,OAAS3H,EAAUgiB,EAAGoN,EAAO1nB,QAAU1H,EAAUiiB,EAAG8O,GAAW3B,EAAO/pB,WAAYrF,IAEpG,IAAIwxB,EAAcnB,GAAWrwB,EAAWmvB,EAAQC,EAAQ74B,GACpDs6B,EAAOW,EAAYX,KACnBC,EAAQU,EAAYV,MAExBO,GAASR,GAAQU,EAAW7oC,OAC5B4oC,EAAUA,GAAWR,EAEhBhC,EAAIxO,UACPiR,EAAWnpC,KAAKgnC,GAIpB,OAAOiC,GAASF,GAASI,EAAYvxB,EAAWmvB,EAAQ54B,IAAW+6B,EAGrE,SAASG,GAAW3C,EAAKpvB,EAAMH,EAAKoI,EAAOD,GACzConB,EAAIvvB,IAAMA,EACVuvB,EAAIpvB,KAAOA,EACXovB,EAAItvB,MAAQE,EAAOiI,EACnBmnB,EAAIrvB,OAASF,EAAMmI,EACnBonB,EAAInnB,MAAQA,EACZmnB,EAAIpnB,OAASA,EAGf,SAASgqB,GAAWN,EAAOpxB,EAAWmvB,EAAQ54B,GAC5C,IAKIo7B,EALAC,EAAczC,EAAOxW,QACrBve,EAAI4F,EAAU5F,EACdC,EAAI2F,EAAU3F,EAEdw3B,EAAa1nC,EAA2BinC,GAG5C,IACE,IAAKS,EAAWxmC,MAAOsmC,EAASE,EAAWhnC,KAAKS,MAAO,CACrD,IAAI8jC,EAASuC,EAAOpmC,MAChBujC,EAAMM,EAAON,IACbj5B,EAAQU,EAAO64B,EAAOv5B,QAAU,CAClC8G,MAAO,EACPgzB,OAAQ,EACR1f,OAAQ,GAENA,EAASmf,EAAOI,YAAc35B,EAAMoa,QAAU,EAElD,GAAImf,EAAO/pB,WAAY,CACrB,IAAIsC,EAAQ3H,EAAUgiB,EAAI/R,EACtBvI,EAAS7R,EAAMf,MAAQg6B,EAAIpnB,QAE3B,OAAQ7R,EAAMpI,SAChB4M,EAAIxE,EAAMpI,OAGRqhC,EAAIxO,SACNmR,GAAW3C,EAAK8C,EAAYlyB,KAAMrF,EAAG80B,EAAOqB,WAAaoB,EAAYpyB,MAAQoyB,EAAYlyB,KAAMgI,GAE/F+pB,GAAW3C,EAAK9uB,EAAUN,KAAO7J,EAAM85B,OAAQt1B,EAAGsN,EAAOD,GAG3D7R,EAAMpI,MAAQ4M,EACdxE,EAAM85B,QAAUhoB,EAChBtN,EAAIy0B,EAAIrvB,WACH,CACL,IAAIqyB,EAAU9xB,EAAUiiB,EAAIhS,EAExB8hB,EAASl8B,EAAMf,MAAQg6B,EAAInnB,OAE3B,OAAQ9R,EAAMpI,SAChB2M,EAAIvE,EAAMpI,OAGRqhC,EAAIxO,SACNmR,GAAW3C,EAAK10B,EAAGw3B,EAAYryB,IAAKwyB,EAAQ5C,EAAOuB,YAAckB,EAAYnyB,OAASmyB,EAAYryB,KAElGkyB,GAAW3C,EAAK10B,EAAG4F,EAAUT,IAAM1J,EAAM85B,OAAQoC,EAAQD,GAG3Dj8B,EAAMpI,MAAQ2M,EACdvE,EAAM85B,QAAUmC,EAChB13B,EAAI00B,EAAItvB,QAGZ,MAAO7T,GACPkmC,EAAWjoC,EAAE+B,GACb,QACAkmC,EAAWpmC,IAGbuU,EAAU5F,EAAIA,EACd4F,EAAU3F,EAAIA,EAGhB,EAAAnI,EAAA,IAAa,SAAU,CACrB8/B,aAAa,EACbrZ,QAAS,CACPpZ,IAAK,EACLC,MAAO,EACPC,OAAQ,EACRC,KAAM,KAGV,IAAIwvB,GACM,SAAgBtiC,EAAOyB,GACxBzB,EAAMwkC,QACTxkC,EAAMwkC,MAAQ,IAGhB/iC,EAAKiyB,SAAWjyB,EAAKiyB,WAAY,EACjCjyB,EAAKqsB,SAAWrsB,EAAKqsB,UAAY,MACjCrsB,EAAK4hB,OAAS5hB,EAAK4hB,QAAU,EAE7B5hB,EAAK4jC,QAAU5jC,EAAK4jC,SAAW,WAC7B,MAAO,CAAC,CACNpL,EAAG,EACHv4B,KAAM,SAAc0R,GAClB3R,EAAKC,KAAK0R,OAKhBpT,EAAMwkC,MAAMhpC,KAAKiG,IAnBjB6gC,GAqBS,SAAmBtiC,EAAOslC,GACnC,IAAIv8B,EAAQ/I,EAAMwkC,MAAQxkC,EAAMwkC,MAAMhpB,QAAQ8pB,IAAe,GAE9C,IAAXv8B,GACF/I,EAAMwkC,MAAMpuB,OAAOrN,EAAO,IAzB5Bu5B,GA4BS,SAAmBtiC,EAAOyB,EAAM0F,GACzC1F,EAAKiyB,SAAWvsB,EAAQusB,SACxBjyB,EAAKqsB,SAAW3mB,EAAQ2mB,SACxBrsB,EAAK4hB,OAASlc,EAAQkc,QA/BtBif,GAiCM,SAAgBtiC,EAAO+a,EAAOD,EAAQyqB,GAC5C,GAAKvlC,EAAL,CAIA,IAAI+rB,GAAU,OAAU/rB,EAAMmH,QAAQq7B,OAAOzW,SACzCoX,EAAiBxiC,KAAKiC,IAAImY,EAAQgR,EAAQhR,MAAO,GACjDqoB,EAAkBziC,KAAKiC,IAAIkY,EAASiR,EAAQjR,OAAQ,GACpD0pB,EA7PR,SAA0BA,GACxB,IAAIgB,EAvFN,SAAmBhB,GACjB,IACI5oC,EAAGgN,EAAMs5B,EAAKF,EAAK/4B,EAAO25B,EAD1B4C,EAAc,GAGlB,IAAK5pC,EAAI,EAAGgN,GAAQ47B,GAAS,IAAI1oC,OAAQF,EAAIgN,IAAQhN,EAAG,CAEtD,IAAI6pC,EADJvD,EAAMsC,EAAM5oC,GAEZomC,EAAMyD,EAAK3X,SACX,IAAI4X,EAAeD,EAAKt+B,QACxB8B,EAAQy8B,EAAaz8B,MACrB,IAAI08B,EAAwBD,EAAa9C,YACzCA,OAAwC,IAA1B+C,EAAmC,EAAIA,EACrDH,EAAYhqC,KAAK,CACfuN,MAAOnN,EACPsmC,IAAKA,EACLF,IAAKA,EACLvpB,WAAYypB,EAAI/nB,eAChBkJ,OAAQ6e,EAAI7e,OACZpa,MAAOA,GAAS+4B,EAAM/4B,EACtB25B,YAAaA,IAIjB,OAAO4C,EAgEWI,CAAUpB,GACxB9Q,EAAWyO,GAAaqD,EAAYpqC,QAAO,SAAUunC,GACvD,OAAOA,EAAKT,IAAIxO,aACd,GACA5gB,EAAOqvB,GAAaL,GAAiB0D,EAAa,SAAS,GAC3D5yB,EAAQuvB,GAAaL,GAAiB0D,EAAa,UACnD7yB,EAAMwvB,GAAaL,GAAiB0D,EAAa,QAAQ,GACzD3yB,EAASsvB,GAAaL,GAAiB0D,EAAa,WACpDK,EAAmB5D,GAA4BuD,EAAa,KAC5DM,EAAiB7D,GAA4BuD,EAAa,KAC9D,MAAO,CACL9R,SAAUA,EACVqS,WAAYjzB,EAAK9H,OAAO2H,GACxBqzB,eAAgBpzB,EAAM5H,OAAO86B,GAAgB96B,OAAO6H,GAAQ7H,OAAO66B,GACnEzyB,UAAW0uB,GAAiB0D,EAAa,aACzCS,SAAUnzB,EAAK9H,OAAO4H,GAAO5H,OAAO86B,GACpCrtB,WAAY9F,EAAI3H,OAAO6H,GAAQ7H,OAAO66B,IA4O1BK,CAAiBlmC,EAAMwkC,OAC/B2B,EAAgB3B,EAAMyB,SACtBG,EAAkB5B,EAAM/rB,YAC5B,OAAKzY,EAAMwkC,OAAO,SAAUtC,GACM,mBAArBA,EAAImE,cACbnE,EAAImE,kBAGR,IAAIC,EAA0BH,EAAc1jC,QAAO,SAAUyf,EAAOygB,GAClE,OAAOA,EAAKT,IAAI/6B,UAAwC,IAA7Bw7B,EAAKT,IAAI/6B,QAAQmgB,QAAoBpF,EAAQA,EAAQ,IAC/E,IAAM,EACLqgB,EAAStnC,OAAOyZ,OAAO,CACzBkvB,WAAY7oB,EACZ+oB,YAAahpB,EACbiR,QAASA,EACToX,eAAgBA,EAChBC,gBAAiBA,EACjBH,aAAcE,EAAiB,EAAImD,EACnCpD,cAAeE,EAAkB,IAE/BE,EAAaroC,OAAOoM,OAAO,GAAI0kB,GACnCwX,GAAiBD,GAAY,OAAUiC,IACvC,IAAInyB,EAAYnY,OAAOoM,OAAO,CAC5Bi8B,WAAYA,EACZlO,EAAG+N,EACH9N,EAAG+N,EACH51B,EAAGue,EAAQjZ,KACXrF,EAAGse,EAAQpZ,KACVoZ,GACCpiB,EAAS04B,GAAc8D,EAAcn7B,OAAOo7B,GAAkB7D,GAClEgC,GAASC,EAAM9Q,SAAUtgB,EAAWmvB,EAAQ54B,GAC5C46B,GAAS4B,EAAe/yB,EAAWmvB,EAAQ54B,GAEvC46B,GAAS6B,EAAiBhzB,EAAWmvB,EAAQ54B,IAC/C46B,GAAS4B,EAAe/yB,EAAWmvB,EAAQ54B,GAzNjD,SAA0ByJ,GACxB,IAAIkwB,EAAalwB,EAAUkwB,WAE3B,SAASiD,EAAUvE,GACjB,IAAIwE,EAAS7lC,KAAKiC,IAAI0gC,EAAWtB,GAAO5uB,EAAU4uB,GAAM,GAExD,OADA5uB,EAAU4uB,IAAQwE,EACXA,EAGTpzB,EAAU3F,GAAK84B,EAAU,OACzBnzB,EAAU5F,GAAK+4B,EAAU,QACzBA,EAAU,SACVA,EAAU,UAgNRE,CAAiBrzB,GACjB0xB,GAAWN,EAAMuB,WAAY3yB,EAAWmvB,EAAQ54B,GAChDyJ,EAAU5F,GAAK4F,EAAUgiB,EACzBhiB,EAAU3F,GAAK2F,EAAUiiB,EACzByP,GAAWN,EAAMwB,eAAgB5yB,EAAWmvB,EAAQ54B,GACpD3J,EAAMoT,UAAY,CAChBN,KAAMM,EAAUN,KAChBH,IAAKS,EAAUT,IACfC,MAAOQ,EAAUN,KAAOM,EAAUgiB,EAClCviB,OAAQO,EAAUT,IAAMS,EAAUiiB,EAClCva,OAAQ1H,EAAUiiB,EAClBta,MAAO3H,EAAUgiB,IAEnB,OAAKoP,EAAMpxB,WAAW,SAAUovB,GAC9B,IAAIN,EAAMM,EAAON,IACjBjnC,OAAOoM,OAAO66B,EAAKliC,EAAMoT,WACzB8uB,EAAIl6B,OAAOoL,EAAUgiB,EAAGhiB,EAAUiiB,EAAG,CACnCviB,KAAM,EACNH,IAAK,EACLC,MAAO,EACPC,OAAQ,SAMZ6zB,GAA4B,WAC9B,SAASA,KACP,OAAgBrpC,KAAMqpC,GA0CxB,OAvCA,OAAaA,EAAc,CAAC,CAC1BzqC,IAAK,iBACL0C,MAAO,SAAwBgoC,EAAQpjB,MACtC,CACDtnB,IAAK,iBACL0C,MAAO,SAAwB8U,GAC7B,OAAO,IAER,CACDxX,IAAK,mBACL0C,MAAO,SAA0BqB,EAAOG,EAAMymC,MAC7C,CACD3qC,IAAK,sBACL0C,MAAO,SAA6BqB,EAAOG,EAAMymC,MAChD,CACD3qC,IAAK,sBACL0C,MAAO,WACL,OAAO,IAER,CACD1C,IAAK,iBACL0C,MAAO,SAAwB2U,EAASyH,EAAOD,EAAQyI,GAGrD,OAFAxI,EAAQpa,KAAKiC,IAAI,EAAGmY,GAASzH,EAAQyH,OACrCD,EAASA,GAAUxH,EAAQwH,OACpB,CACLC,MAAOA,EACPD,OAAQna,KAAKiC,IAAI,EAAG2gB,EAAc5iB,KAAK0D,MAAM0W,EAAQwI,GAAezI,MAGvE,CACD7e,IAAK,aACL0C,MAAO,SAAoBgoC,GACzB,OAAO,IAER,CACD1qC,IAAK,eACL0C,MAAO,SAAsB4H,QAGxBmgC,EA5CuB,GA+C5BG,GAA6B,SAAUC,IACzC,OAAUD,EAAeC,GAEzB,IAAIC,EAAW1qC,EAAawqC,GAE5B,SAASA,IAGP,OAFA,OAAgBxpC,KAAMwpC,GAEfE,EAAStrC,MAAM4B,KAAMxB,WAe9B,OAZA,OAAagrC,EAAe,CAAC,CAC3B5qC,IAAK,iBACL0C,MAAO,SAAwB8C,GAC7B,OAAOA,GAAQA,EAAKoO,YAAcpO,EAAKoO,WAAW,OAAS,OAE5D,CACD5T,IAAK,eACL0C,MAAO,SAAsB4H,GAC3BA,EAAOY,QAAQpB,WAAY,MAIxB8gC,EAvBwB,CAwB/BH,IAGEM,GAAc,CAChBC,WAAY,YACZC,UAAW,YACXC,SAAU,UACVC,aAAc,aACdC,YAAa,YACbC,YAAa,YACbC,UAAW,UACXC,aAAc,WACdC,WAAY,YAGVC,GAAgB,SAAuB/oC,GACzC,OAAiB,OAAVA,GAA4B,KAAVA,GA4C3B,IAAIgpC,KAAuB,MAA+B,CACxDC,SAAS,GAOX,SAASC,GAAe7nC,EAAOG,EAAMymC,GACnC5mC,EAAM2mC,OAAOmB,oBAAoB3nC,EAAMymC,EAAUe,IAmBnD,SAASI,GAAiBC,EAAUrB,GAClC,IACIsB,EADAC,EAAa3qC,EAA2ByqC,GAG5C,IACE,IAAKE,EAAWzpC,MAAOwpC,EAASC,EAAWjqC,KAAKS,MAAO,CACrD,IAAIypC,EAAOF,EAAOtpC,MAElB,GAAIwpC,IAASxB,GAAUwB,EAAKC,SAASzB,GACnC,OAAO,GAGX,MAAO5nC,GACPmpC,EAAWlrC,EAAE+B,GACb,QACAmpC,EAAWrpC,KAIf,SAASwpC,GAAqBroC,EAAOG,EAAMymC,GACzC,IAAID,EAAS3mC,EAAM2mC,OACf2B,EAAW,IAAIC,kBAAiB,SAAUC,GAC5C,IAGIC,EAHAC,GAAU,EAEVC,EAAaprC,EAA2BirC,GAG5C,IACE,IAAKG,EAAWlqC,MAAOgqC,EAASE,EAAW1qC,KAAKS,MAAO,CACrD,IAAIiZ,EAAQ8wB,EAAO9pC,MAEnB+pC,GADAA,EAAUA,GAAWX,GAAiBpwB,EAAMixB,WAAYjC,MAClCoB,GAAiBpwB,EAAMkxB,aAAclC,IAE7D,MAAO5nC,GACP4pC,EAAW3rC,EAAE+B,GACb,QACA4pC,EAAW9pC,IAGT6pC,GACF9B,OAOJ,OAJA0B,EAASQ,QAAQC,SAAU,CACzBC,WAAW,EACXC,SAAS,IAEJX,EAGT,SAASY,GAAqBlpC,EAAOG,EAAMymC,GACzC,IAAID,EAAS3mC,EAAM2mC,OACf2B,EAAW,IAAIC,kBAAiB,SAAUC,GAC5C,IAGIW,EAHAT,GAAU,EAEVU,EAAc7rC,EAA2BirC,GAG7C,IACE,IAAKY,EAAY3qC,MAAO0qC,EAAUC,EAAYnrC,KAAKS,MAAO,CACxD,IAAIiZ,EAAQwxB,EAAQxqC,MAEpB+pC,GADAA,EAAUA,GAAWX,GAAiBpwB,EAAMkxB,aAAclC,MACpCoB,GAAiBpwB,EAAMixB,WAAYjC,IAE3D,MAAO5nC,GACPqqC,EAAYpsC,EAAE+B,GACd,QACAqqC,EAAYvqC,IAGV6pC,GACF9B,OAOJ,OAJA0B,EAASQ,QAAQC,SAAU,CACzBC,WAAW,EACXC,SAAS,IAEJX,EAGT,IAAIe,GAAqB,IAAIzpC,IACzB0pC,GAAsB,EAE1B,SAASC,KACP,IAAIC,EAAMxoC,OAAOyoC,iBAEbD,IAAQF,KAIZA,GAAsBE,EACtBH,GAAmBrtC,SAAQ,SAAUgK,EAAQhG,GACvCA,EAAM0pC,0BAA4BF,GACpCxjC,QAqBN,SAAS2jC,GAAqB3pC,EAAOG,EAAMymC,GACzC,IAAID,EAAS3mC,EAAM2mC,OAEfiD,EAAYjD,IAAU,QAAeA,GAEzC,GAAKiD,EAAL,CAIA,IAAI5jC,GAAS,SAAU,SAAU+U,EAAOD,GACtC,IAAIsa,EAAIwU,EAAUC,YAClBjD,EAAS7rB,EAAOD,GAEZsa,EAAIwU,EAAUC,aAChBjD,MAED5lC,QACCsnC,EAAW,IAAIwB,gBAAe,SAAUtB,GAC1C,IAAI7wB,EAAQ6wB,EAAQ,GAChBztB,EAAQpD,EAAMoyB,YAAYhvB,MAC1BD,EAASnD,EAAMoyB,YAAYjvB,OAEjB,IAAVC,GAA0B,IAAXD,GAInB9U,EAAO+U,EAAOD,MAIhB,OAFAwtB,EAASQ,QAAQc,GA5CnB,SAAuC5pC,EAAOgG,GACvCqjC,GAAmBnhC,MACtBlH,OAAOgpC,iBAAiB,SAAUT,IAGpCF,GAAmBjnC,IAAIpC,EAAOgG,GAwC9BikC,CAA8BjqC,EAAOgG,GAC9BsiC,GAGT,SAAS4B,GAAgBlqC,EAAOG,EAAMmoC,GAChCA,GACFA,EAAS6B,aAGE,WAAThqC,GA9CN,SAAyCH,GACvCqpC,GAAmBtmC,OAAO/C,GAErBqpC,GAAmBnhC,MACtBlH,OAAO8mC,oBAAoB,SAAUyB,IA2CrCa,CAAgCpqC,GAIpC,SAASqqC,GAAqBrqC,EAAOG,EAAMymC,GACzC,IAAID,EAAS3mC,EAAM2mC,OACf2D,GAAQ,SAAU,SAAUjoC,GACZ,OAAdrC,EAAMmM,KACRy6B,EAlLN,SAAyBvkC,EAAOrC,GAC9B,IAAIG,EAAO6mC,GAAY3kC,EAAMlC,OAASkC,EAAMlC,KAExCoqC,GAAuB,OAAoBloC,EAAOrC,GAClDwN,EAAI+8B,EAAqB/8B,EACzBC,EAAI88B,EAAqB98B,EAE7B,MAAO,CACLtN,KAAMA,EACNH,MAAOA,EACPwqC,OAAQnoC,EACRmL,OAASzN,IAANyN,EAAkBA,EAAI,KACzBC,OAAS1N,IAAN0N,EAAkBA,EAAI,MAsKdg9B,CAAgBpoC,EAAOrC,MAEjCA,GAAO,SAAUqW,GAClB,IAAIhU,EAAQgU,EAAK,GACjB,MAAO,CAAChU,EAAOA,EAAM+c,QAAS/c,EAAMgd,YAGtC,OAjMF,SAAqB8oB,EAAMhoC,EAAMymC,GAC/BuB,EAAK6B,iBAAiB7pC,EAAMymC,EAAUe,IA+LtC+C,CAAY/D,EAAQxmC,EAAMmqC,GACnBA,EAGT,IAAIK,GAA2B,SAAUC,IACvC,OAAUD,EAAaC,GAEvB,IAAIC,EAAWxuC,EAAasuC,GAE5B,SAASA,IAGP,OAFA,OAAgBttC,KAAMstC,GAEfE,EAASpvC,MAAM4B,KAAMxB,WA6F9B,OA1FA,OAAa8uC,EAAa,CAAC,CACzB1uC,IAAK,iBACL0C,MAAO,SAAwBgoC,EAAQpjB,GACrC,IAAI9P,EAAUkzB,GAAUA,EAAO92B,YAAc82B,EAAO92B,WAAW,MAE/D,OAAI4D,GAAWA,EAAQkzB,SAAWA,GAjQxC,SAAoBA,EAAQpjB,GAC1B,IAAIK,EAAQ+iB,EAAO/iB,MACfknB,EAAenE,EAAOoE,aAAa,UACnCC,EAAcrE,EAAOoE,aAAa,SAetC,GAdApE,EAAkB,SAAI,CACpBlmC,QAAS,CACPqa,OAAQgwB,EACR/vB,MAAOiwB,EACPpnB,MAAO,CACL0D,QAAS1D,EAAM0D,QACfxM,OAAQ8I,EAAM9I,OACdC,MAAO6I,EAAM7I,SAInB6I,EAAM0D,QAAU1D,EAAM0D,SAAW,QACjC1D,EAAMqnB,UAAYrnB,EAAMqnB,WAAa,aAEjCvD,GAAcsD,GAAc,CAC9B,IAAIE,GAAe,QAAavE,EAAQ,cAEnB5mC,IAAjBmrC,IACFvE,EAAO5rB,MAAQmwB,GAInB,GAAIxD,GAAcoD,GAChB,GAA4B,KAAxBnE,EAAO/iB,MAAM9I,OACf6rB,EAAO7rB,OAAS6rB,EAAO5rB,OAASwI,GAAe,OAC1C,CACL,IAAI4nB,GAAgB,QAAaxE,EAAQ,eAEnB5mC,IAAlBorC,IACFxE,EAAO7rB,OAASqwB,IAiOhBC,CAAWzE,EAAQpjB,GACZ9P,GAGF,OAER,CACDxX,IAAK,iBACL0C,MAAO,SAAwB8U,GAC7B,IAAIkzB,EAASlzB,EAAQkzB,OAErB,IAAKA,EAAkB,SACrB,OAAO,EAGT,IAAIlmC,EAAUkmC,EAAkB,SAAElmC,QAClC,CAAC,SAAU,SAASzE,SAAQ,SAAU+H,GACpC,IAAIpF,EAAQ8B,EAAQsD,IAEhB,OAAcpF,GAChBgoC,EAAO0E,gBAAgBtnC,GAEvB4iC,EAAO2E,aAAavnC,EAAMpF,MAG9B,IAAIilB,EAAQnjB,EAAQmjB,OAAS,GAM7B,OALA3oB,OAAOD,KAAK4oB,GAAO5nB,SAAQ,SAAUC,GACnC0qC,EAAO/iB,MAAM3nB,GAAO2nB,EAAM3nB,MAE5B0qC,EAAO5rB,MAAQ4rB,EAAO5rB,aACf4rB,EAAkB,UAClB,IAER,CACD1qC,IAAK,mBACL0C,MAAO,SAA0BqB,EAAOG,EAAMymC,GAC5CvpC,KAAKyqC,oBAAoB9nC,EAAOG,GAChC,IAAIorC,EAAUvrC,EAAMwrC,WAAaxrC,EAAMwrC,SAAW,IAM9CxL,EALW,CACbyL,OAAQpD,GACRqD,OAAQxC,GACRljC,OAAQ2jC,IAEaxpC,IAASkqC,GAChCkB,EAAQprC,GAAQ6/B,EAAQhgC,EAAOG,EAAMymC,KAEtC,CACD3qC,IAAK,sBACL0C,MAAO,SAA6BqB,EAAOG,GACzC,IAAIorC,EAAUvrC,EAAMwrC,WAAaxrC,EAAMwrC,SAAW,IAC9ClB,EAAQiB,EAAQprC,GAEfmqC,KAIU,CACbmB,OAAQvB,GACRwB,OAAQxB,GACRlkC,OAAQkkC,IAEa/pC,IAAS0nC,IACxB7nC,EAAOG,EAAMmqC,GACrBiB,EAAQprC,QAAQJ,KAEjB,CACD9D,IAAK,sBACL0C,MAAO,WACL,OAAOqC,OAAOyoC,mBAEf,CACDxtC,IAAK,iBACL0C,MAAO,SAAwBgoC,EAAQ5rB,EAAOD,EAAQyI,GACpD,OAAO,QAAgBojB,EAAQ5rB,EAAOD,EAAQyI,KAE/C,CACDtnB,IAAK,aACL0C,MAAO,SAAoBgoC,GACzB,IAAIiD,GAAY,QAAejD,GAE/B,SAAUiD,IAAaA,EAAU+B,iBAI9BhB,EArGsB,CAsG7BjE,IAUF,IAAIkF,GAA6B,WAC/B,SAASA,KACP,OAAgBvuC,KAAMuuC,GAEtBvuC,KAAKwuC,MAAQ,GAoGf,OAjGA,OAAaD,EAAe,CAAC,CAC3B3vC,IAAK,SACL0C,MAAO,SAAgBqB,EAAO8rC,EAAMz1B,EAAMjb,GAC3B,eAAT0wC,IACFzuC,KAAKwuC,MAAQxuC,KAAK0uC,mBAAmB/rC,GAAO,GAE5C3C,KAAK0E,QAAQ1E,KAAKwuC,MAAO7rC,EAAO,YAGlC,IAAIsjB,EAAcloB,EAASiC,KAAK2uC,aAAahsC,GAAO5E,OAAOA,GAAUiC,KAAK2uC,aAAahsC,GAEnF9C,EAASG,KAAK0E,QAAQuhB,EAAatjB,EAAO8rC,EAAMz1B,GAQpD,MANa,iBAATy1B,IACFzuC,KAAK0E,QAAQuhB,EAAatjB,EAAO,QAEjC3C,KAAK0E,QAAQ1E,KAAKwuC,MAAO7rC,EAAO,cAG3B9C,IAER,CACDjB,IAAK,UACL0C,MAAO,SAAiB2kB,EAAatjB,EAAO8rC,EAAMz1B,GAChDA,EAAOA,GAAQ,GAEf,IACI41B,EADAC,EAAc3uC,EAA2B+lB,GAG7C,IACE,IAAK4oB,EAAYztC,MAAOwtC,EAAUC,EAAYjuC,KAAKS,MAAO,CACxD,IAAIytC,EAAaF,EAAQttC,MACrBytC,EAASD,EAAWC,OACpB/mC,EAAS+mC,EAAON,GAChBvJ,EAAS,CAACviC,EAAOqW,EAAM81B,EAAWhlC,SAEtC,IAAyC,KAArC,OAAS9B,EAAQk9B,EAAQ6J,IAAqB/1B,EAAKg2B,WACrD,OAAO,GAGX,MAAOttC,GACPmtC,EAAYlvC,EAAE+B,GACd,QACAmtC,EAAYrtC,IAGd,OAAO,IAER,CACD5C,IAAK,aACL0C,MAAO,YACA,OAActB,KAAKuZ,UACtBvZ,KAAKivC,UAAYjvC,KAAKuZ,OACtBvZ,KAAKuZ,YAAS7W,KAGjB,CACD9D,IAAK,eACL0C,MAAO,SAAsBqB,GAC3B,GAAI3C,KAAKuZ,OACP,OAAOvZ,KAAKuZ,OAGd,IAAI0M,EAAcjmB,KAAKuZ,OAASvZ,KAAK0uC,mBAAmB/rC,GAIxD,OAFA3C,KAAKkvC,oBAAoBvsC,GAElBsjB,IAER,CACDrnB,IAAK,qBACL0C,MAAO,SAA4BqB,EAAO2H,GACxC,IAAIpB,EAASvG,GAASA,EAAMuG,OACxBY,GAAU,IAAAd,GAAeE,EAAOY,SAAWZ,EAAOY,QAAQwX,QAAS,IACnEA,EA0BV,SAAoBpY,GAKlB,IAJA,IAAIimC,EAAW,GACX7tB,EAAU,GACV3jB,EAAOC,OAAOD,KAAK+iC,GAASpf,QAAQnd,OAE/B5F,EAAI,EAAGA,EAAIZ,EAAKc,OAAQF,IAC/B+iB,EAAQnjB,KAAKuiC,GAAS0O,UAAUzxC,EAAKY,KAKvC,IAFA,IAAI8wC,EAAQnmC,EAAOoY,SAAW,GAErBguB,EAAK,EAAGA,EAAKD,EAAM5wC,OAAQ6wC,IAAM,CACxC,IAAIP,EAASM,EAAMC,IAEc,IAA7BhuB,EAAQnD,QAAQ4wB,KAClBztB,EAAQnjB,KAAK4wC,GACbI,EAASJ,EAAOnhC,KAAM,GAI1B,MAAO,CACL0T,QAASA,EACT6tB,SAAUA,GAhDMI,CAAWrmC,GACzB,OAAmB,IAAZY,GAAsBQ,EA+DnC,SAA2B3H,EAAO6sC,EAAO1lC,EAASQ,GAChD,IAMImlC,EANAnuB,EAAUkuB,EAAMluB,QAChB6tB,EAAWK,EAAML,SACjBtvC,EAAS,GACTuW,EAAUzT,EAAM6P,aAEhBk9B,EAAcxvC,EAA2BohB,GAG7C,IACE,IAAKouB,EAAYtuC,MAAOquC,EAAUC,EAAY9uC,KAAKS,MAAO,CACxD,IAAI0tC,EAASU,EAAQnuC,MACjBsM,EAAKmhC,EAAOnhC,GACZ1C,EAAOykC,GAAQ7lC,EAAQ8D,GAAKtD,GAEnB,OAATY,GAIJrL,EAAO1B,KAAK,CACV4wC,OAAQA,EACRjlC,QAAS8lC,GAAWjtC,EAAMuG,OAAQ,CAChC6lC,OAAQA,EACRM,MAAOF,EAASvhC,IACf1C,EAAMkL,MAGb,MAAO1U,GACPguC,EAAY/vC,EAAE+B,GACd,QACAguC,EAAYluC,IAGd,OAAO3B,EAhGqCgwC,CAAkBltC,EAAO2e,EAASxX,EAASQ,GAAhD,KAEpC,CACD1L,IAAK,sBACL0C,MAAO,SAA6BqB,GAClC,IAAImtC,EAAsB9vC,KAAKivC,WAAa,GACxChpB,EAAcjmB,KAAKuZ,OAEnBkU,EAAO,SAAc5T,EAAG1E,GAC1B,OAAO0E,EAAE9b,QAAO,SAAUoS,GACxB,OAAQgF,EAAE46B,MAAK,SAAU3/B,GACvB,OAAOD,EAAE4+B,OAAOnhC,KAAOwC,EAAE2+B,OAAOnhC,UAKtC5N,KAAK0E,QAAQ+oB,EAAKqiB,EAAqB7pB,GAActjB,EAAO,QAE5D3C,KAAK0E,QAAQ+oB,EAAKxH,EAAa6pB,GAAsBntC,EAAO,aAIzD4rC,EAxGwB,GAqIjC,SAASoB,GAAQ7lC,EAASQ,GACxB,OAAKA,IAAmB,IAAZR,GAII,IAAZA,EACK,GAGFA,EAPE,KA8CX,SAAS8lC,GAAW1mC,EAAQ8mC,EAAO9kC,EAAMkL,GACvC,IAAI24B,EAASiB,EAAMjB,OACfM,EAAQW,EAAMX,MACd1xC,EAAOuL,EAAO+mC,gBAAgBlB,GAC9B18B,EAASnJ,EAAOoJ,gBAAgBpH,EAAMvN,GAM1C,OAJI0xC,GAASN,EAAO9yB,UAClB5J,EAAOlU,KAAK4wC,EAAO9yB,UAGd/S,EAAOqJ,eAAeF,EAAQ+D,EAAS,CAAC,IAAK,CAClD85B,YAAY,EACZC,WAAW,EACXC,SAAS,IAIb,SAASC,GAAavtC,EAAMgH,GAC1B,IAAIwmC,EAAkB,EAAAroC,EAAA,SAAkBnF,IAAS,GAEjD,QADsBgH,EAAQuH,UAAY,IAAIvO,IAAS,IACjC6N,WAAa7G,EAAQ6G,WAAa2/B,EAAgB3/B,WAAa,IA6BvF,SAAS4/B,GAAc3iC,EAAI4iC,GACzB,MAAW,MAAP5iC,GAAqB,MAAPA,EACTA,EAGF4iC,EAAajjC,OAdH,SADOkjB,EAeqB+f,EAAa/f,WAdnB,WAAbA,EACjB,IAGQ,SAAbA,GAAoC,UAAbA,EAClB,SADT,IAUuE7iB,EAAGlD,OAAO,GAAG+lC,cAftF,IAA0BhgB,EAkE1B,SAASigB,GAAYxnC,GACnB,IAAIY,EAAUZ,EAAOY,UAAYZ,EAAOY,QAAU,IAClDA,EAAQwX,SAAU,IAAAtY,GAAec,EAAQwX,QAAS,IAClDxX,EAAQoE,OAnDV,SAA0BhF,EAAQY,GAChC,IAAI6mC,EAAgB,IAAUznC,EAAOpG,OAAS,CAC5CoL,OAAQ,IAEN0iC,EAAe9mC,EAAQoE,QAAU,GACjC2iC,EAAiBR,GAAannC,EAAOpG,KAAMgH,GAC3CgnC,EAAWlzC,OAAOw/B,OAAO,MACzBlvB,EAAStQ,OAAOw/B,OAAO,MAsC3B,OArCAx/B,OAAOD,KAAKizC,GAAcjyC,SAAQ,SAAUiP,GAC1C,IAAImjC,EAAYH,EAAahjC,GAE7B,KAAK,IAAArP,GAASwyC,GACZ,OAAOC,QAAQC,MAAM,0CAA0CtjC,OAAOC,IAGxE,GAAImjC,EAAUG,OACZ,OAAOF,QAAQG,KAAK,kDAAkDxjC,OAAOC,IAG/E,IAAIL,EAAOgjC,GAAc3iC,EAAImjC,GACzBK,EA1CR,SAAmC7jC,EAAMoD,GACvC,OAAOpD,IAASoD,EAAY,UAAY,UAyCtB0gC,CAA0B9jC,EAAMsjC,GAC5CS,EAAsBX,EAAcziC,QAAU,GAClD4iC,EAASvjC,GAAQujC,EAASvjC,IAASK,EACnCM,EAAON,IAAM,QAAQhQ,OAAOw/B,OAAO,MAAO,CAAC,CACzC7vB,KAAMA,GACLwjC,EAAWO,EAAoB/jC,GAAO+jC,EAAoBF,QAE/DloC,EAAOkI,KAAKC,SAAS1S,SAAQ,SAAUqR,GACrC,IAAIlN,EAAOkN,EAAQlN,MAAQoG,EAAOpG,KAC9B6N,EAAYX,EAAQW,WAAa0/B,GAAavtC,EAAMgH,GAEpDwnC,GADkB,IAAUxuC,IAAS,IACCoL,QAAU,GACpDtQ,OAAOD,KAAK2zC,GAAqB3yC,SAAQ,SAAU4yC,GACjD,IAAIhkC,EAnEV,SAAmCK,EAAI+C,GACrC,IAAIpD,EAAOK,EAQX,MANW,YAAPA,EACFL,EAAOoD,EACS,YAAP/C,IACTL,EAAqB,MAAdoD,EAAoB,IAAM,KAG5BpD,EA0DQikC,CAA0BD,EAAW5gC,GAC5C/C,EAAKoC,EAAQzC,EAAO,WAAaujC,EAASvjC,IAASA,EACvDW,EAAON,GAAMM,EAAON,IAAOhQ,OAAOw/B,OAAO,OACzC,QAAQlvB,EAAON,GAAK,CAAC,CACnBL,KAAMA,GACLqjC,EAAahjC,GAAK0jC,EAAoBC,WAG7C3zC,OAAOD,KAAKuQ,GAAQvP,SAAQ,SAAUC,GACpC,IAAIoM,EAAQkD,EAAOtP,IACnB,QAAQoM,EAAO,CAAC,EAAA/C,EAAA,OAAgB+C,EAAMlI,MAAO,EAAAmF,EAAA,WAExCiG,EAMUujC,CAAiBvoC,EAAQY,GAG5C,SAAS4nC,GAAStgC,GAIhB,OAHAA,EAAOA,GAAQ,IACVC,SAAWD,EAAKC,UAAY,GACjCD,EAAK6B,OAAS7B,EAAK6B,QAAU,GACtB7B,EAUT,IAAIugC,GAAW,IAAIpvC,IACfqvC,GAAa,IAAIC,IAErB,SAASC,GAAW/6B,EAAUg7B,GAC5B,IAAIp0C,EAAOg0C,GAAS/sC,IAAImS,GAQxB,OANKpZ,IACHA,EAAOo0C,IACPJ,GAAS5sC,IAAIgS,EAAUpZ,GACvBi0C,GAAW9mC,IAAInN,IAGVA,EAGT,IAAIq0C,GAAa,SAAoBjtC,EAAKsX,EAAKzd,GAC7C,IAAIsM,GAAO,OAAiBmR,EAAKzd,QAEpB8D,IAATwI,GACFnG,EAAI+F,IAAII,IAIR+mC,GAAsB,WACxB,SAASA,EAAO/oC,IACd,OAAgBlJ,KAAMiyC,GAEtBjyC,KAAKkyC,QAlCT,SAAoBhpC,GAIlB,OAHAA,EAASA,GAAU,IACZkI,KAAOsgC,GAASxoC,EAAOkI,MAC9Bs/B,GAAYxnC,GACLA,EA8BUipC,CAAWjpC,GAC1BlJ,KAAKoyC,YAAc,IAAI7vC,IACvBvC,KAAKqyC,eAAiB,IAAI9vC,IA2M5B,OAxMA,OAAa0vC,EAAQ,CAAC,CACpBrzC,IAAK,WACLgG,IAAK,WACH,OAAO5E,KAAKkyC,QAAQI,WAErB,CACD1zC,IAAK,OACLgG,IAAK,WACH,OAAO5E,KAAKkyC,QAAQpvC,MAEtBiC,IAAK,SAAajC,GAChB9C,KAAKkyC,QAAQpvC,KAAOA,IAErB,CACDlE,IAAK,OACLgG,IAAK,WACH,OAAO5E,KAAKkyC,QAAQ9gC,MAEtBrM,IAAK,SAAaqM,GAChBpR,KAAKkyC,QAAQ9gC,KAAOsgC,GAAStgC,KAE9B,CACDxS,IAAK,UACLgG,IAAK,WACH,OAAO5E,KAAKkyC,QAAQpoC,SAEtB/E,IAAK,SAAa+E,GAChB9J,KAAKkyC,QAAQpoC,QAAUA,IAExB,CACDlL,IAAK,UACLgG,IAAK,WACH,OAAO5E,KAAKkyC,QAAQ5wB,UAErB,CACD1iB,IAAK,SACL0C,MAAO,WACL,IAAI4H,EAASlJ,KAAKkyC,QAClBlyC,KAAKuyC,aACL7B,GAAYxnC,KAEb,CACDtK,IAAK,aACL0C,MAAO,WACLtB,KAAKoyC,YAAYI,QAEjBxyC,KAAKqyC,eAAeG,UAErB,CACD5zC,IAAK,mBACL0C,MAAO,SAA0BmxC,GAC/B,OAAOX,GAAWW,GAAa,WAC7B,MAAO,CAAC,CAAC,YAAY9kC,OAAO8kC,GAAc,UAG7C,CACD7zC,IAAK,4BACL0C,MAAO,SAAmCmxC,EAAan7B,GACrD,OAAOw6B,GAAW,GAAGnkC,OAAO8kC,EAAa,gBAAgB9kC,OAAO2J,IAAa,WAC3E,MAAO,CAAC,CAAC,YAAY3J,OAAO8kC,EAAa,iBAAiB9kC,OAAO2J,GAAa,eAAe3J,OAAO2J,IAAc,CAAC,YAAY3J,OAAO8kC,GAAc,UAGvJ,CACD7zC,IAAK,0BACL0C,MAAO,SAAiCmxC,EAAa77B,GACnD,OAAOk7B,GAAW,GAAGnkC,OAAO8kC,EAAa,KAAK9kC,OAAOiJ,IAAc,WACjE,MAAO,CAAC,CAAC,YAAYjJ,OAAO8kC,EAAa,cAAc9kC,OAAOiJ,GAAc,YAAYjJ,OAAO8kC,GAAc,YAAY9kC,OAAOiJ,GAAc,UAGjJ,CACDhY,IAAK,kBACL0C,MAAO,SAAyBytC,GAC9B,IAAInhC,EAAKmhC,EAAOnhC,GACZ9K,EAAO9C,KAAK8C,KAChB,OAAOgvC,GAAW,GAAGnkC,OAAO7K,EAAM,YAAY6K,OAAOC,IAAK,WACxD,MAAO,CAAC,CAAC,WAAWD,OAAOC,IAAKD,QAAO,OAAmBohC,EAAO2D,wBAA0B,WAG9F,CACD9zC,IAAK,gBACL0C,MAAO,SAAuBqxC,EAAWC,GACvC,IAAIR,EAAcpyC,KAAKoyC,YAEnBt7B,EAAQs7B,EAAYxtC,IAAI+tC,GAQ5B,OANK77B,IAAS87B,IACZ97B,EAAQ,IAAIvU,IAEZ6vC,EAAYrtC,IAAI4tC,EAAW77B,IAGtBA,IAER,CACDlY,IAAK,kBACL0C,MAAO,SAAyBqxC,EAAWE,EAAUD,GACnD,IAAI9oC,EAAU9J,KAAK8J,QACfhH,EAAO9C,KAAK8C,KAEZgU,EAAQ9W,KAAK8yC,cAAcH,EAAWC,GAEtClkC,EAASoI,EAAMlS,IAAIiuC,GAEvB,GAAInkC,EACF,OAAOA,EAGT,IAAI2D,EAAS,IAAIw/B,IACjBgB,EAASl0C,SAAQ,SAAUhB,GACrBg1C,IACFtgC,EAAOvH,IAAI6nC,GACXh1C,EAAKgB,SAAQ,SAAUC,GACrB,OAAOozC,GAAW3/B,EAAQsgC,EAAW/zC,OAIzCjB,EAAKgB,SAAQ,SAAUC,GACrB,OAAOozC,GAAW3/B,EAAQvI,EAASlL,MAErCjB,EAAKgB,SAAQ,SAAUC,GACrB,OAAOozC,GAAW3/B,EAAQ,IAAUvP,IAAS,GAAIlE,MAEnDjB,EAAKgB,SAAQ,SAAUC,GACrB,OAAOozC,GAAW3/B,EAAQ,EAAApK,EAAUrJ,MAEtCjB,EAAKgB,SAAQ,SAAUC,GACrB,OAAOozC,GAAW3/B,EAAQ,KAAazT,SAG3C,IAAI8lC,EAAQlkC,MAAMQ,KAAKqR,GAUvB,OARqB,IAAjBqyB,EAAMjmC,QACRimC,EAAMvmC,KAAKP,OAAOw/B,OAAO,OAGvBwU,GAAWjoC,IAAIkpC,IACjB/7B,EAAM/R,IAAI8tC,EAAUnO,GAGfA,IAER,CACD9lC,IAAK,oBACL0C,MAAO,WACL,IAAIwI,EAAU9J,KAAK8J,QACfhH,EAAO9C,KAAK8C,KAChB,MAAO,CAACgH,EAAS,IAAUhH,IAAS,GAAI,EAAAmF,EAAA,SAAkBnF,IAAS,GAAI,CACrEA,KAAMA,GACL,EAAAmF,EAAU,QAEd,CACDrJ,IAAK,sBACL0C,MAAO,SAA6B+Q,EAAQ8E,EAAOf,GACjD,IAAIc,EAAW1Y,UAAUC,OAAS,QAAsBiE,IAAjBlE,UAAU,GAAmBA,UAAU,GAAK,CAAC,IAChFqB,EAAS,CACXkK,SAAS,GAGPgpC,EAAeC,GAAYhzC,KAAKqyC,eAAgBhgC,EAAQ6E,GACxD+7B,EAAWF,EAAaE,SACxBC,EAAcH,EAAaG,YAE3BppC,EAAUmpC,EAEd,GAAIE,GAAYF,EAAU97B,GAAQ,CAChCtX,EAAOkK,SAAU,EACjBqM,GAAU,QAAWA,GAAWA,IAAYA,EAC5C,IAAIg9B,EAAcpzC,KAAKuS,eAAeF,EAAQ+D,EAAS88B,GACvDppC,GAAU,QAAempC,EAAU78B,EAASg9B,GAG9C,IACIC,EADAC,EAAcpzC,EAA2BiX,GAG7C,IACE,IAAKm8B,EAAYlyC,MAAOiyC,EAAUC,EAAY1yC,KAAKS,MAAO,CACxD,IAAIqF,EAAO2sC,EAAQ/xC,MACnBzB,EAAO6G,GAAQoD,EAAQpD,IAEzB,MAAOhF,GACP4xC,EAAY3zC,EAAE+B,GACd,QACA4xC,EAAY9xC,IAGd,OAAO3B,IAER,CACDjB,IAAK,iBACL0C,MAAO,SAAwB+Q,EAAQ+D,GACrC,IAAIc,EAAW1Y,UAAUC,OAAS,QAAsBiE,IAAjBlE,UAAU,GAAmBA,UAAU,GAAK,CAAC,IAChF+0C,EAAqB/0C,UAAUC,OAAS,EAAID,UAAU,QAAKkE,EAE3D8wC,EAAgBR,GAAYhzC,KAAKqyC,eAAgBhgC,EAAQ6E,GACzD+7B,EAAWO,EAAcP,SAE7B,OAAO,IAAA10C,GAAS6X,IAAW,QAAe68B,EAAU78B,OAAS1T,EAAW6wC,GAAsBN,MAI3FhB,EAjNiB,GAoN1B,SAASe,GAAYS,EAAephC,EAAQ6E,GAC1C,IAAIJ,EAAQ28B,EAAc7uC,IAAIyN,GAEzByE,IACHA,EAAQ,IAAIvU,IACZkxC,EAAc1uC,IAAIsN,EAAQyE,IAG5B,IAAIC,EAAWG,EAASinB,OACpBzvB,EAASoI,EAAMlS,IAAImS,GAElBrI,IAGHA,EAAS,CACPukC,UAHa,QAAgB5gC,EAAQ6E,GAIrCg8B,YAAah8B,EAASnZ,QAAO,SAAU21C,GACrC,OAAQA,EAAEjD,cAAcjL,SAAS,aAGrC1uB,EAAM/R,IAAIgS,EAAUrI,IAGtB,OAAOA,EAGT,IAAIilC,GAAc,SAAqBryC,GACrC,OAAO,IAAA/C,GAAS+C,IAAU1D,OAAO2L,oBAAoBjI,GAAO8D,QAAO,SAAUC,EAAKzG,GAChF,OAAOyG,IAAO,QAAW/D,EAAM1C,OAC9B,IAGL,SAASu0C,GAAYlG,EAAO91B,GAC1B,IAKIy8B,EALAC,GAAgB,QAAa5G,GAC7B6G,EAAeD,EAAcC,aAC7BC,EAAcF,EAAcE,YAE5BC,EAAc9zC,EAA2BiX,GAG7C,IACE,IAAK68B,EAAY5yC,MAAOwyC,EAAUI,EAAYpzC,KAAKS,MAAO,CACxD,IAAIqF,EAAOktC,EAAQtyC,MACf4uC,EAAa4D,EAAaptC,GAC1BypC,EAAY4D,EAAYrtC,GACxBpF,GAAS6uC,GAAaD,IAAejD,EAAMvmC,GAE/C,GAAIwpC,KAAe,QAAW5uC,IAAUqyC,GAAYryC,KAAW6uC,IAAa,OAAQ7uC,GAClF,OAAO,GAGX,MAAOI,GACPsyC,EAAYr0C,EAAE+B,GACd,QACAsyC,EAAYxyC,IAGd,OAAO,EAGT,IACIyyC,GAAkB,CAAC,MAAO,SAAU,OAAQ,QAAS,aAEzD,SAASC,GAAqBzjB,EAAUljB,GACtC,MAAoB,QAAbkjB,GAAmC,WAAbA,IAAgE,IAAvCwjB,GAAgB91B,QAAQsS,IAA6B,MAATljB,EAGpG,SAAS4mC,GAAcC,EAAIC,GACzB,OAAO,SAAUx6B,EAAG1E,GAClB,OAAO0E,EAAEu6B,KAAQj/B,EAAEi/B,GAAMv6B,EAAEw6B,GAAMl/B,EAAEk/B,GAAMx6B,EAAEu6B,GAAMj/B,EAAEi/B,IAIvD,SAASE,GAAqBl+B,GAC5B,IAAIzT,EAAQyT,EAAQzT,MAChBuF,EAAmBvF,EAAMmH,QAAQpB,UACrC/F,EAAMyxB,cAAc,gBACpB,OAASlsB,GAAoBA,EAAiBqsC,WAAY,CAACn+B,GAAUzT,GAGvE,SAAS6xC,GAAoBp+B,GAC3B,IAAIzT,EAAQyT,EAAQzT,MAChBuF,EAAmBvF,EAAMmH,QAAQpB,WACrC,OAASR,GAAoBA,EAAiBusC,WAAY,CAACr+B,GAAUzT,GAGvE,SAAS+xC,GAAUtwC,GAWjB,OAVI,WAAqC,iBAATA,EAC9BA,EAAOsnC,SAASiJ,eAAevwC,GACtBA,GAAQA,EAAK3F,SACtB2F,EAAOA,EAAK,IAGVA,GAAQA,EAAKklC,SACfllC,EAAOA,EAAKklC,QAGPllC,EAGT,IAAIwwC,GAAY,GAEZC,GAAW,SAAkBj2C,GAC/B,IAAI0qC,EAASoL,GAAU91C,GACvB,OAAOhB,OAAOgM,OAAOgrC,IAAW72C,QAAO,SAAU+2C,GAC/C,OAAOA,EAAExL,SAAWA,KACnB7kC,OAGL,SAASswC,GAAgB14B,EAAK7Y,EAAOoV,GAGnC,IAFA,IAESo8B,EAAM,EAAGC,EAFPr3C,OAAOD,KAAK0e,GAES24B,EAAMC,EAAMx2C,OAAQu2C,IAAO,CACzD,IAAIp2C,EAAMq2C,EAAMD,GACZE,GAAUt2C,EAEd,GAAIs2C,GAAU1xC,EAAO,CACnB,IAAIlC,EAAQ+a,EAAIzd,UACTyd,EAAIzd,IAEPga,EAAO,GAAKs8B,EAAS1xC,KACvB6Y,EAAI64B,EAASt8B,GAAQtX,KAkB7B,IAAI6zC,GAAqB,WACvB,SAASA,EAAM/wC,EAAMgxC,GACnB,IAAIC,EAAUr1C,MAEd,OAAgBA,KAAMm1C,GAEtB,IAAIjsC,EAASlJ,KAAKkJ,OAAS,IAAI+oC,GAAOmD,GAClCE,EAAgBZ,GAAUtwC,GAC1BmxC,EAAgBV,GAASS,GAE7B,GAAIC,EACF,MAAM,IAAI5X,MAAM,4CAA+C4X,EAAc3nC,GAA7D,kDAA6H2nC,EAAcjM,OAAO17B,GAAK,oBAGzK,IAAI9D,EAAUZ,EAAOqJ,eAAerJ,EAAOssC,oBAAqBx1C,KAAKwS,cACrExS,KAAKsyC,SAAW,IAAKppC,EAAOopC,UA/rBhC,SAAyBhJ,GACvB,QAAK,WAAgD,oBAApBmM,iBAAmCnM,aAAkBmM,gBAC7EjM,GAGF8D,GA0rBmCoI,CAAgBJ,IACxDt1C,KAAKsyC,SAASqD,aAAazsC,GAC3B,IAAIkN,EAAUpW,KAAKsyC,SAASsD,eAAeN,EAAexrC,EAAQoc,aAC9DojB,EAASlzB,GAAWA,EAAQkzB,OAC5B7rB,EAAS6rB,GAAUA,EAAO7rB,OAC1BC,EAAQ4rB,GAAUA,EAAO5rB,MAC7B1d,KAAK4N,IAAK,UACV5N,KAAK8O,IAAMsH,EACXpW,KAAKspC,OAASA,EACdtpC,KAAK0d,MAAQA,EACb1d,KAAKyd,OAASA,EACdzd,KAAK61C,SAAW/rC,EAChB9J,KAAK81C,aAAe91C,KAAKkmB,YACzBlmB,KAAKgoC,QAAU,GACfhoC,KAAK+1C,UAAY,GACjB/1C,KAAKoN,aAAU1K,EACf1C,KAAKmnC,MAAQ,GACbnnC,KAAKqsC,6BAA0B3pC,EAC/B1C,KAAK+V,eAAYrT,EACjB1C,KAAKsE,QAAU,GACftE,KAAKg2C,gBAAatzC,EAClB1C,KAAKi2C,WAAa,GAClBj2C,KAAKk2C,0BAAuBxzC,EAC5B1C,KAAKm2C,gBAAkB,GACvBn2C,KAAKkO,OAAS,GACdlO,KAAKo2C,SAAW,IAAI7H,GACpBvuC,KAAKmuC,SAAW,GAChBnuC,KAAKq2C,eAAiB,GACtBr2C,KAAKs2C,UAAW,EAChBt2C,KAAK0X,yBAAsBhV,EAC3B1C,KAAK0P,cAAWhN,EAChB1C,KAAKu2C,WAAY,SAAS,SAAUtqC,GAClC,OAAOopC,EAAQ1qC,OAAOsB,KACrBnC,EAAQ0sC,aAAe,GAC1Bx2C,KAAKkZ,aAAe,GACpB07B,GAAU50C,KAAK4N,IAAM5N,KAEhBoW,GAAYkzB,GAKjB3jC,EAAS8wC,OAAOz2C,KAAM,WAAYs0C,IAClC3uC,EAAS8wC,OAAOz2C,KAAM,WAAYw0C,IAElCx0C,KAAK02C,cAED12C,KAAKs2C,UACPt2C,KAAK2K,UAVLqmC,QAAQC,MAAM,qEAklClB,OApkCA,OAAakE,EAAO,CAAC,CACnBv2C,IAAK,cACLgG,IAAK,WACH,IAAI+xC,EAAkB32C,KAAK8J,QACvBoc,EAAcywB,EAAgBzwB,YAC9B0wB,EAAsBD,EAAgBC,oBACtCl5B,EAAQ1d,KAAK0d,MACbD,EAASzd,KAAKyd,OACdq4B,EAAe91C,KAAK81C,aAExB,OAAK,OAAc5vB,GAIf0wB,GAAuBd,EAClBA,EAGFr4B,EAASC,EAAQD,EAAS,KAPxByI,IASV,CACDtnB,IAAK,OACLgG,IAAK,WACH,OAAO5E,KAAKkJ,OAAOkI,MAErBrM,IAAK,SAAaqM,GAChBpR,KAAKkJ,OAAOkI,KAAOA,IAEpB,CACDxS,IAAK,UACLgG,IAAK,WACH,OAAO5E,KAAK61C,UAEd9wC,IAAK,SAAa+E,GAChB9J,KAAKkJ,OAAOY,QAAUA,IAEvB,CACDlL,IAAK,cACL0C,MAAO,WAWL,OAVAtB,KAAKo0B,cAAc,cAEfp0B,KAAK8J,QAAQ+sC,WACf72C,KAAK2I,UAEL,QAAY3I,KAAMA,KAAK8J,QAAQsiC,kBAGjCpsC,KAAK82C,aACL92C,KAAKo0B,cAAc,aACZp0B,OAER,CACDpB,IAAK,QACL0C,MAAO,WAEL,OADA,QAAYtB,KAAKspC,OAAQtpC,KAAK8O,KACvB9O,OAER,CACDpB,IAAK,OACL0C,MAAO,WAEL,OADAqE,EAAS8iB,KAAKzoB,MACPA,OAER,CACDpB,IAAK,SACL0C,MAAO,SAAgBoc,EAAOD,GACvB9X,EAASzB,QAAQlE,MAGpBA,KAAK+2C,kBAAoB,CACvBr5B,MAAOA,EACPD,OAAQA,GAJVzd,KAAKg3C,QAAQt5B,EAAOD,KAQvB,CACD7e,IAAK,UACL0C,MAAO,SAAiBoc,EAAOD,GAC7B,IAAI3T,EAAU9J,KAAK8J,QACfw/B,EAAStpC,KAAKspC,OACdpjB,EAAcpc,EAAQ8sC,qBAAuB52C,KAAKkmB,YAClD+wB,EAAUj3C,KAAKsyC,SAAS4E,eAAe5N,EAAQ5rB,EAAOD,EAAQyI,GAC9DixB,EAAWrtC,EAAQsiC,kBAAoBpsC,KAAKsyC,SAAS8E,sBACrDnrC,EAAOjM,KAAK0d,MAAQ,SAAW,SACnC1d,KAAK0d,MAAQu5B,EAAQv5B,MACrB1d,KAAKyd,OAASw5B,EAAQx5B,OACtBzd,KAAK81C,aAAe91C,KAAKkmB,aAEpB,QAAYlmB,KAAMm3C,GAAU,KAIjCn3C,KAAKo0B,cAAc,SAAU,CAC3BvpB,KAAMosC,KAER,OAASntC,EAAQutC,SAAU,CAACr3C,KAAMi3C,GAAUj3C,MAExCA,KAAKs2C,UACHt2C,KAAKu2C,UAAUtqC,IACjBjM,KAAKs3C,YAIV,CACD14C,IAAK,sBACL0C,MAAO,WACL,IACIi2C,EADUv3C,KAAK8J,QACSoE,QAAU,IACtC,OAAKqpC,GAAe,SAAUC,EAAaza,GACzCya,EAAY5pC,GAAKmvB,OAGpB,CACDn+B,IAAK,sBACL0C,MAAO,WACL,IAAIm2C,EAAUz3C,KAEV8J,EAAU9J,KAAK8J,QACf4tC,EAAY5tC,EAAQoE,OACpBA,EAASlO,KAAKkO,OACdypC,EAAU/5C,OAAOD,KAAKuQ,GAAQ9I,QAAO,SAAUiX,EAAKzO,GAEtD,OADAyO,EAAIzO,IAAM,EACHyO,IACN,IACClY,EAAQ,GAERuzC,IACFvzC,EAAQA,EAAMwJ,OAAO/P,OAAOD,KAAK+5C,GAAWpxB,KAAI,SAAU1Y,GACxD,IAAI4iC,EAAekH,EAAU9pC,GACzBL,EAAOgjC,GAAc3iC,EAAI4iC,GACzBoH,EAAoB,MAATrqC,EACXuP,EAAwB,MAATvP,EACnB,MAAO,CACLzD,QAAS0mC,EACTqH,UAAWD,EAAW,YAAc96B,EAAe,SAAW,OAC9Dg7B,MAAOF,EAAW,eAAiB96B,EAAe,WAAa,gBAKrE,OAAK3Y,GAAO,SAAUC,GACpB,IAAIosC,EAAepsC,EAAK0F,QACpB8D,EAAK4iC,EAAa5iC,GAClBL,EAAOgjC,GAAc3iC,EAAI4iC,GACzBuH,GAAY,IAAA/uC,GAAewnC,EAAa1tC,KAAMsB,EAAK0zC,YAEzBp1C,IAA1B8tC,EAAa/f,UAA0ByjB,GAAqB1D,EAAa/f,SAAUljB,KAAU2mC,GAAqB9vC,EAAKyzC,aACzHrH,EAAa/f,SAAWrsB,EAAKyzC,WAG/BF,EAAQ/pC,IAAM,EACd,IAAI5C,EAAQ,KAER4C,KAAMM,GAAUA,EAAON,GAAI9K,OAASi1C,EACtC/sC,EAAQkD,EAAON,IAGf5C,EAAQ,IADS01B,GAASsX,SAASD,GAC3B,CAAe,CACrBnqC,GAAIA,EACJ9K,KAAMi1C,EACNjpC,IAAK2oC,EAAQ3oC,IACbnM,MAAO80C,IAETvpC,EAAOlD,EAAM4C,IAAM5C,GAGrBA,EAAMitC,KAAKzH,EAAc1mC,OAE3B,OAAK6tC,GAAS,SAAUO,EAAYtqC,GAC7BsqC,UACIhqC,EAAON,OAGlB,OAAKM,GAAQ,SAAUlD,GACrBi6B,GAAkBwS,EAASzsC,EAAOA,EAAMlB,SACxCm7B,GAAewS,EAASzsC,QAG3B,CACDpM,IAAK,kBACL0C,MAAO,WACL,IAAIkK,EAAWxL,KAAK+1C,UAChBt9B,EAAUzY,KAAKoR,KAAKC,SAAS5S,OAC7B+Z,EAAUhN,EAAS/M,OAKvB,GAJA+M,EAASoO,MAAK,SAAUC,EAAG1E,GACzB,OAAO0E,EAAEnO,MAAQyJ,EAAEzJ,SAGjB8M,EAAUC,EAAS,CACrB,IAAK,IAAIla,EAAIka,EAASla,EAAIia,IAAWja,EACnCyB,KAAKm4C,oBAAoB55C,GAG3BiN,EAASuN,OAAON,EAASD,EAAUC,GAGrCzY,KAAKm2C,gBAAkB3qC,EAAS1K,MAAM,GAAG8Y,KAAKu6B,GAAc,QAAS,YAEtE,CACDv1C,IAAK,8BACL0C,MAAO,WACL,IAAI82C,EAAUp4C,KAEVwL,EAAWxL,KAAK+1C,UAChB1kC,EAAWrR,KAAKoR,KAAKC,SAErB7F,EAAS/M,OAAS4S,EAAS5S,eACtBuB,KAAKoN,QAGd5B,EAAS7M,SAAQ,SAAUwN,EAAMT,GAGjB,IAFV2F,EAAStT,QAAO,SAAUoS,GAC5B,OAAOA,IAAMhE,EAAKsb,YACjBhpB,QACD25C,EAAQD,oBAAoBzsC,QAIjC,CACD9M,IAAK,2BACL0C,MAAO,WACL,IAEI/C,EAAGgN,EAFH8sC,EAAiB,GACjBhnC,EAAWrR,KAAKoR,KAAKC,SAKzB,IAFArR,KAAKs4C,8BAEA/5C,EAAI,EAAGgN,EAAO8F,EAAS5S,OAAQF,EAAIgN,EAAMhN,IAAK,CACjD,IAAIyR,EAAUqB,EAAS9S,GACnB4N,EAAOnM,KAAKsR,eAAe/S,GAC3BuE,EAAOkN,EAAQlN,MAAQ9C,KAAKkJ,OAAOpG,KAevC,GAbIqJ,EAAKrJ,MAAQqJ,EAAKrJ,OAASA,IAC7B9C,KAAKm4C,oBAAoB55C,GAEzB4N,EAAOnM,KAAKsR,eAAe/S,IAG7B4N,EAAKrJ,KAAOA,EACZqJ,EAAKwE,UAAYX,EAAQW,WAAa0/B,GAAavtC,EAAM9C,KAAK8J,SAC9DqC,EAAKosC,MAAQvoC,EAAQuoC,OAAS,EAC9BpsC,EAAKT,MAAQnN,EACb4N,EAAK6I,MAAQ,GAAKhF,EAAQgF,MAC1B7I,EAAKrD,QAAU9I,KAAKsiB,iBAAiB/jB,GAEjC4N,EAAKc,WACPd,EAAKc,WAAWurC,YAAYj6C,GAC5B4N,EAAKc,WAAW4C,iBACX,CACL,IAAI4oC,EAAkB/X,GAASgY,cAAc51C,GACzC61C,EAAwB,EAAA1wC,EAAA,SAAkBnF,GAC1CgP,EAAqB6mC,EAAsB7mC,mBAC3C6E,EAAkBgiC,EAAsBhiC,gBAC5C/Y,OAAOoM,OAAOyuC,EAAgBj5C,UAAW,CACvCmX,gBAAiB+pB,GAASQ,WAAWvqB,GACrC7E,mBAAoBA,GAAsB4uB,GAASQ,WAAWpvB,KAEhE3F,EAAKc,WAAa,IAAIwrC,EAAgBz4C,KAAMzB,GAC5C85C,EAAel6C,KAAKgO,EAAKc,aAM7B,OAFAjN,KAAK44C,kBAEEP,IAER,CACDz5C,IAAK,iBACL0C,MAAO,WACL,IAAIu3C,EAAU74C,MAEd,OAAKA,KAAKoR,KAAKC,UAAU,SAAUrB,EAASlE,GAC1C+sC,EAAQvnC,eAAexF,GAAcmB,WAAW2P,UAC/C5c,QAEJ,CACDpB,IAAK,QACL0C,MAAO,WACLtB,KAAK84C,iBAEL94C,KAAKo0B,cAAc,WAEpB,CACDx1B,IAAK,SACL0C,MAAO,SAAgB2K,GACrB,IAAI/C,EAASlJ,KAAKkJ,OAClBA,EAAOyB,SACP,IAAIb,EAAU9J,KAAK61C,SAAW3sC,EAAOqJ,eAAerJ,EAAOssC,oBAAqBx1C,KAAKwS,cACjFumC,EAAgB/4C,KAAK0X,qBAAuB5N,EAAQpB,UAUxD,GARA1I,KAAKg5C,gBAELh5C,KAAKi5C,sBAELj5C,KAAKk5C,uBAELl5C,KAAKo2C,SAAS+C,cAKP,IAHHn5C,KAAKo0B,cAAc,eAAgB,CACrCnoB,KAAMA,EACN+iC,YAAY,IAFd,CAOA,IAAIqJ,EAAiBr4C,KAAKo5C,2BAC1Bp5C,KAAKo0B,cAAc,wBAGnB,IAFA,IAAI8T,EAAa,EAER3pC,EAAI,EAAGgN,EAAOvL,KAAKoR,KAAKC,SAAS5S,OAAQF,EAAIgN,EAAMhN,IAAK,CAC/D,IACI0O,EADuBjN,KAAKsR,eAAe/S,GACT0O,WAElC2P,GAASm8B,IAAyD,IAAxCV,EAAel6B,QAAQlR,GACrDA,EAAWosC,sBAAsBz8B,GACjCsrB,EAAa5kC,KAAKiC,KAAK0H,EAAW0I,iBAAkBuyB,GAGtDA,EAAaloC,KAAKs5C,YAAcxvC,EAAQq7B,OAAO4C,YAAcG,EAAa,EAE1EloC,KAAKu5C,cAAcrR,GAEd6Q,IACH,OAAKV,GAAgB,SAAUprC,GAC7BA,EAAW2P,WAIf5c,KAAKw5C,gBAAgBvtC,GAErBjM,KAAKo0B,cAAc,cAAe,CAChCnoB,KAAMA,IAGRjM,KAAKgoC,QAAQpuB,KAAKu6B,GAAc,IAAK,SAErC,IAAI7vC,EAAUtE,KAAKsE,QACf0xC,EAAah2C,KAAKg2C,WAElBA,EACFh2C,KAAKy5C,cAAczD,GAAY,GACtB1xC,EAAQ7F,QACjBuB,KAAK05C,mBAAmBp1C,EAASA,GAAS,GAG5CtE,KAAKs3C,YAEN,CACD14C,IAAK,gBACL0C,MAAO,WACL,IAAIq4C,EAAU35C,MAEd,OAAKA,KAAKkO,QAAQ,SAAUlD,GAC1Bi6B,GAAkB0U,EAAS3uC,MAE7BhL,KAAK45C,sBACL55C,KAAK65C,wBAEN,CACDj7C,IAAK,sBACL0C,MAAO,WACL,IAAIwI,EAAU9J,KAAK8J,QACfgwC,EAAiB,IAAIjI,IAAIj0C,OAAOD,KAAKqC,KAAKi2C,aAC1C8D,EAAY,IAAIlI,IAAI/nC,EAAQkwC,SAE3B,QAAUF,EAAgBC,MAAgB/5C,KAAKk2C,uBAAyBpsC,EAAQ+sC,aACnF72C,KAAKi6C,eACLj6C,KAAK82C,gBAGR,CACDl4C,IAAK,uBACL0C,MAAO,WACL,IAII44C,EAJA7D,EAAiBr2C,KAAKq2C,eAGtB8D,EAAcj6C,EAFJF,KAAKo6C,0BAA4B,IAK/C,IACE,IAAKD,EAAY/4C,MAAO84C,EAAUC,EAAYv5C,KAAKS,MAAO,CACxD,IAAIg5C,EAAgBH,EAAQ54C,MACxB0G,EAASqyC,EAAcryC,OACvBxE,EAAQ62C,EAAc72C,MACtBkP,EAAQ2nC,EAAc3nC,MAE1BqiC,GAAgBsB,EAAgB7yC,EADV,oBAAXwE,GAAgC0K,EAAQA,IAGrD,MAAOhR,GACPy4C,EAAYx6C,EAAE+B,GACd,QACAy4C,EAAY34C,OAGf,CACD5C,IAAK,yBACL0C,MAAO,WACL,IAAI4X,EAAelZ,KAAKkZ,aAExB,GAAKA,GAAiBA,EAAaza,OAAnC,CAIAuB,KAAKkZ,aAAe,GAapB,IAZA,IAAIohC,EAAet6C,KAAKoR,KAAKC,SAAS5S,OAElC87C,EAAU,SAAiB/iB,GAC7B,OAAO,IAAIqa,IAAI34B,EAAanb,QAAO,SAAU+2C,GAC3C,OAAOA,EAAE,KAAOtd,KACflR,KAAI,SAAUwuB,EAAGv2C,GAClB,OAAOA,EAAI,IAAMu2C,EAAE/7B,OAAO,GAAGolB,KAAK,UAIlCqc,EAAYD,EAAQ,GAEfh8C,EAAI,EAAGA,EAAI+7C,EAAc/7C,IAChC,KAAK,QAAUi8C,EAAWD,EAAQh8C,IAChC,OAIJ,OAAOiC,MAAMQ,KAAKw5C,GAAWl0B,KAAI,SAAUwuB,GACzC,OAAOA,EAAE9W,MAAM,QACd1X,KAAI,SAAUzM,GACf,MAAO,CACL7R,OAAQ6R,EAAE,GACVrW,OAAQqW,EAAE,GACVnH,OAAQmH,EAAE,UAIf,CACDjb,IAAK,gBACL0C,MAAO,SAAuB4mC,GAC5B,IAAIuS,EAAUz6C,KAEd,IAEO,IAFHA,KAAKo0B,cAAc,eAAgB,CACrC4a,YAAY,IADd,CAMA/J,GAAejlC,KAAMA,KAAK0d,MAAO1d,KAAKyd,OAAQyqB,GAC9C,IAAIpyB,EAAO9V,KAAK+V,UACZ2kC,EAAS5kC,EAAK4H,OAAS,GAAK5H,EAAK2H,QAAU,EAC/Czd,KAAKgoC,QAAU,IACf,OAAKhoC,KAAKmnC,OAAO,SAAUtC,GACzB,IAAI8V,EAEAD,GAA2B,cAAjB7V,EAAIpU,WAIdoU,EAAIx7B,WACNw7B,EAAIx7B,aAGLsxC,EAAkBF,EAAQzS,SAAS7pC,KAAKC,MAAMu8C,GAAiB,OAAmB9V,EAAImD,eACtFhoC,MAEHA,KAAKgoC,QAAQrpC,SAAQ,SAAUyF,EAAMsH,GACnCtH,EAAKw2C,KAAOlvC,KAGd1L,KAAKo0B,cAAc,kBAEpB,CACDx1B,IAAK,kBACL0C,MAAO,SAAyB2K,GAC9B,IAGO,IAHHjM,KAAKo0B,cAAc,uBAAwB,CAC7CnoB,KAAMA,EACN+iC,YAAY,IAFd,CAOA,IAAK,IAAIzwC,EAAI,EAAGgN,EAAOvL,KAAKoR,KAAKC,SAAS5S,OAAQF,EAAIgN,IAAQhN,EAC5DyB,KAAKsR,eAAe/S,GAAG0O,WAAW5D,YAGpC,IAAK,IAAIwxC,EAAM,EAAGC,EAAQ96C,KAAKoR,KAAKC,SAAS5S,OAAQo8C,EAAMC,IAASD,EAClE76C,KAAK+6C,eAAeF,GAAK,QAAW5uC,GAAQA,EAAK,CAC/CH,aAAc+uC,IACX5uC,GAGPjM,KAAKo0B,cAAc,sBAAuB,CACxCnoB,KAAMA,OAGT,CACDrN,IAAK,iBACL0C,MAAO,SAAwBoK,EAAOO,GACpC,IAAIE,EAAOnM,KAAKsR,eAAe5F,GAC3BsN,EAAO,CACT7M,KAAMA,EACNT,MAAOA,EACPO,KAAMA,EACN+iC,YAAY,IAG0C,IAApDhvC,KAAKo0B,cAAc,sBAAuBpb,KAI9C7M,EAAKc,WAAWrJ,QAAQqI,GAExB+M,EAAKg2B,YAAa,EAClBhvC,KAAKo0B,cAAc,qBAAsBpb,MAE1C,CACDpa,IAAK,SACL0C,MAAO,YAGE,IAFHtB,KAAKo0B,cAAc,eAAgB,CACrC4a,YAAY,MAKVrpC,EAASgE,IAAI3J,MACXA,KAAKs2C,WAAa3wC,EAASzB,QAAQlE,OACrC2F,EAASnC,MAAMxD,OAGjBA,KAAKqE,OACLiwC,GAAqB,CACnB3xC,MAAO3C,WAIZ,CACDpB,IAAK,OACL0C,MAAO,WACL,IAAI/C,EAEJ,GAAIyB,KAAK+2C,kBAAmB,CAC1B,IAAIiE,EAAwBh7C,KAAK+2C,kBAC7Br5B,EAAQs9B,EAAsBt9B,MAC9BD,EAASu9B,EAAsBv9B,OAEnCzd,KAAKg3C,QAAQt5B,EAAOD,GAEpBzd,KAAK+2C,kBAAoB,KAK3B,GAFA/2C,KAAKwyC,UAEDxyC,KAAK0d,OAAS,GAAK1d,KAAKyd,QAAU,KAM/B,IAFHzd,KAAKo0B,cAAc,aAAc,CACnC4a,YAAY,IADd,CAMA,IAAIiM,EAASj7C,KAAKgoC,QAElB,IAAKzpC,EAAI,EAAGA,EAAI08C,EAAOx8C,QAAUw8C,EAAO18C,GAAGq+B,GAAK,IAAKr+B,EACnD08C,EAAO18C,GAAG8F,KAAKrE,KAAK+V,WAKtB,IAFA/V,KAAKk7C,gBAEE38C,EAAI08C,EAAOx8C,SAAUF,EAC1B08C,EAAO18C,GAAG8F,KAAKrE,KAAK+V,WAGtB/V,KAAKo0B,cAAc,gBAEpB,CACDx1B,IAAK,yBACL0C,MAAO,SAAgCgK,GACrC,IAEI/M,EAAGgN,EAFHC,EAAWxL,KAAKm2C,gBAChBt2C,EAAS,GAGb,IAAKtB,EAAI,EAAGgN,EAAOC,EAAS/M,OAAQF,EAAIgN,IAAQhN,EAAG,CACjD,IAAI4N,EAAOX,EAASjN,GAEf+M,IAAiBa,EAAKrD,SACzBjJ,EAAO1B,KAAKgO,GAIhB,OAAOtM,IAER,CACDjB,IAAK,+BACL0C,MAAO,WACL,OAAOtB,KAAKyL,wBAAuB,KAEpC,CACD7M,IAAK,gBACL0C,MAAO,WACL,IAEO,IAFHtB,KAAKo0B,cAAc,qBAAsB,CAC3C4a,YAAY,IADd,CAQA,IAFA,IAAIxjC,EAAWxL,KAAK88B,+BAEXv+B,EAAIiN,EAAS/M,OAAS,EAAGF,GAAK,IAAKA,EAC1CyB,KAAKm7C,aAAa3vC,EAASjN,IAG7ByB,KAAKo0B,cAAc,wBAEpB,CACDx1B,IAAK,eACL0C,MAAO,SAAsB6K,GAC3B,IAAI2C,EAAM9O,KAAK8O,IACXuG,EAAOlJ,EAAKiJ,MACZgmC,GAAW/lC,EAAKO,SAChBE,EAAO9V,KAAK+V,UACZiD,EAAO,CACT7M,KAAMA,EACNT,MAAOS,EAAKT,MACZsjC,YAAY,IAGwC,IAAlDhvC,KAAKo0B,cAAc,oBAAqBpb,KAIxCoiC,IACF,OAAStsC,EAAK,CACZ2G,MAAoB,IAAdJ,EAAKI,KAAiB,EAAIK,EAAKL,KAAOJ,EAAKI,KACjDF,OAAsB,IAAfF,EAAKE,MAAkBvV,KAAK0d,MAAQ5H,EAAKP,MAAQF,EAAKE,MAC7DD,KAAkB,IAAbD,EAAKC,IAAgB,EAAIQ,EAAKR,IAAMD,EAAKC,IAC9CE,QAAwB,IAAhBH,EAAKG,OAAmBxV,KAAKyd,OAAS3H,EAAKN,OAASH,EAAKG,SAIrErJ,EAAKc,WAAW5I,OAEZ+2C,IACF,OAAWtsC,GAGbkK,EAAKg2B,YAAa,EAClBhvC,KAAKo0B,cAAc,mBAAoBpb,MAExC,CACDpa,IAAK,gBACL0C,MAAO,SAAuB4f,GAC5B,OAAO,OAAeA,EAAOlhB,KAAK+V,UAAW/V,KAAKs5C,eAEnD,CACD16C,IAAK,4BACL0C,MAAO,SAAmC3B,EAAGsM,EAAMnC,EAASihB,GAC1D,IAAI/iB,EAASq8B,GAAYC,MAAMr4B,GAE/B,MAAsB,mBAAXjE,EACFA,EAAOhI,KAAML,EAAGmK,EAASihB,GAG3B,KAER,CACDnsB,IAAK,iBACL0C,MAAO,SAAwBwK,GAC7B,IAAIkE,EAAUhQ,KAAKoR,KAAKC,SAASvF,GAC7BN,EAAWxL,KAAK+1C,UAChB5pC,EAAOX,EAASzN,QAAO,SAAUoS,GACnC,OAAOA,GAAKA,EAAEsX,WAAazX,KAC1BvL,MAoBH,OAlBK0H,IACHA,EAAO,CACLrJ,KAAM,KACNsO,KAAM,GACNpB,QAAS,KACT/C,WAAY,KACZgH,OAAQ,KACR3D,QAAS,KACTE,QAAS,KACT+nC,MAAOvoC,GAAWA,EAAQuoC,OAAS,EACnC7sC,MAAOI,EACP2b,SAAUzX,EACVzB,QAAS,GACTqE,SAAS,GAEXpH,EAASrN,KAAKgO,IAGTA,IAER,CACDvN,IAAK,aACL0C,MAAO,WACL,OAAOtB,KAAK0P,WAAa1P,KAAK0P,UAAW,OAAc,KAAM,CAC3D/M,MAAO3C,KACP8C,KAAM,aAGT,CACDlE,IAAK,yBACL0C,MAAO,WACL,OAAOtB,KAAK88B,+BAA+Br+B,SAE5C,CACDG,IAAK,mBACL0C,MAAO,SAA0BwK,GAC/B,IAAIkE,EAAUhQ,KAAKoR,KAAKC,SAASvF,GAEjC,IAAKkE,EACH,OAAO,EAGT,IAAI7D,EAAOnM,KAAKsR,eAAexF,GAC/B,MAA8B,kBAAhBK,EAAK8H,QAAwB9H,EAAK8H,QAAUjE,EAAQiE,SAEnE,CACDrV,IAAK,uBACL0C,MAAO,SAA8BwK,EAAchD,GACtC9I,KAAKsR,eAAexF,GAC1BmI,QAAUnL,IAEhB,CACDlK,IAAK,uBACL0C,MAAO,SAA8BoK,GACnC1L,KAAKq2C,eAAe3qC,IAAU1L,KAAKq2C,eAAe3qC,KAEnD,CACD9M,IAAK,oBACL0C,MAAO,SAA2BoK,GAChC,OAAQ1L,KAAKq2C,eAAe3qC,KAE7B,CACD9M,IAAK,oBACL0C,MAAO,SAA2BwK,EAAcwK,EAAWxN,GACzD,IAAImD,EAAOnD,EAAU,OAAS,OAC1BqD,EAAOnM,KAAKsR,eAAexF,GAE3BlJ,EAAQuJ,EAAKc,WAAW+K,wBAAmBtV,EAAWuJ,IAEtD,OAAQqK,IACVnK,EAAKiF,KAAKkF,GAAWrC,QAAUnL,EAC/B9I,KAAK2K,WAEL3K,KAAKq7C,qBAAqBvvC,EAAchD,GACxClG,EAAM+H,OAAOwB,EAAM,CACjBrD,QAASA,IAEX9I,KAAK2K,QAAO,SAAUmE,GACpB,OAAOA,EAAIhD,eAAiBA,EAAeG,OAAOvJ,QAIvD,CACD9D,IAAK,OACL0C,MAAO,SAAcwK,EAAcwK,GACjCtW,KAAKs7C,kBAAkBxvC,EAAcwK,GAAW,KAEjD,CACD1X,IAAK,OACL0C,MAAO,SAAcwK,EAAcwK,GACjCtW,KAAKs7C,kBAAkBxvC,EAAcwK,GAAW,KAEjD,CACD1X,IAAK,sBACL0C,MAAO,SAA6BwK,GAClC,IAAIK,EAAOnM,KAAK+1C,UAAUjqC,GAEtBK,GAAQA,EAAKc,YACfd,EAAKc,WAAWsuC,kBAGXv7C,KAAK+1C,UAAUjqC,KAEvB,CACDlN,IAAK,QACL0C,MAAO,WACL,IAAI/C,EAAGgN,EAIP,IAHAvL,KAAKyoB,OACL9iB,EAAS61C,OAAOx7C,MAEXzB,EAAI,EAAGgN,EAAOvL,KAAKoR,KAAKC,SAAS5S,OAAQF,EAAIgN,IAAQhN,EACxDyB,KAAKm4C,oBAAoB55C,KAG5B,CACDK,IAAK,UACL0C,MAAO,WACLtB,KAAKo0B,cAAc,iBACnB,IAAIkV,EAAStpC,KAAKspC,OACdx6B,EAAM9O,KAAK8O,IAEf9O,KAAKy7C,QAELz7C,KAAKkJ,OAAOqpC,aAERjJ,IACFtpC,KAAKi6C,gBACL,QAAY3Q,EAAQx6B,GACpB9O,KAAKsyC,SAASoJ,eAAe5sC,GAC7B9O,KAAKspC,OAAS,KACdtpC,KAAK8O,IAAM,MAGb9O,KAAKo0B,cAAc,kBACZwgB,GAAU50C,KAAK4N,IACtB5N,KAAKo0B,cAAc,kBAEpB,CACDx1B,IAAK,gBACL0C,MAAO,WACL,IAAIq6C,EAEJ,OAAQA,EAAe37C,KAAKspC,QAAQsS,UAAUx9C,MAAMu9C,EAAcn9C,aAEnE,CACDI,IAAK,aACL0C,MAAO,WACLtB,KAAK67C,iBAED77C,KAAK8J,QAAQ+sC,WACf72C,KAAK87C,uBAEL97C,KAAKs2C,UAAW,IAGnB,CACD13C,IAAK,iBACL0C,MAAO,WACL,IAAIy6C,EAAU/7C,KAEVgD,EAAYhD,KAAKi2C,WACjB3D,EAAWtyC,KAAKsyC,SAOhB/I,EAAW,SAAkB5pC,EAAGwQ,EAAGC,GACrCzQ,EAAEoiB,QAAU5R,EACZxQ,EAAEqiB,QAAU5R,EAEZ2rC,EAAQtC,cAAc95C,KAGxB,OAAKK,KAAK8J,QAAQkwC,QAAQ,SAAUl3C,GAClC,OAbS,SAAcA,EAAMymC,GAC7B+I,EAAS3F,iBAAiBoP,EAASj5C,EAAMymC,GACzCvmC,EAAUF,GAAQymC,EAWXyS,CAAKl5C,EAAMymC,QAGrB,CACD3qC,IAAK,uBACL0C,MAAO,WACL,IAAI26C,EAAUj8C,KAETA,KAAKk2C,uBACRl2C,KAAKk2C,qBAAuB,IAG9B,IAqBIgG,EArBAl5C,EAAYhD,KAAKk2C,qBACjB5D,EAAWtyC,KAAKsyC,SAEhB0J,EAAO,SAAcl5C,EAAMymC,GAC7B+I,EAAS3F,iBAAiBsP,EAASn5C,EAAMymC,GACzCvmC,EAAUF,GAAQymC,GAGhB4S,EAAU,SAAiBr5C,EAAMymC,GAC/BvmC,EAAUF,KACZwvC,EAAS7H,oBAAoBwR,EAASn5C,EAAMymC,UACrCvmC,EAAUF,KAIjBymC,EAAW,SAAkB7rB,EAAOD,GAClCw+B,EAAQ3S,QACV2S,EAAQtzC,OAAO+U,EAAOD,IAMtB64B,EAAW,SAASA,IACtB6F,EAAQ,SAAU7F,GAElB2F,EAAQ3F,UAAW,EAEnB2F,EAAQtzC,SAERqzC,EAAK,SAAUzS,GAEfyS,EAAK,SAAUE,IAGjBA,EAAW,WACTD,EAAQ3F,UAAW,EAEnB6F,EAAQ,SAAU5S,GAElB0S,EAAQR,QAERQ,EAAQjF,QAAQ,EAAG,GAEnBgF,EAAK,SAAU1F,IAGbhE,EAAS8J,WAAWp8C,KAAKspC,QAC3BgN,IAEA4F,MAGH,CACDt9C,IAAK,eACL0C,MAAO,WACL,IAAI+6C,EAAUr8C,MAEd,OAAKA,KAAKi2C,YAAY,SAAU1M,EAAUzmC,GACxCu5C,EAAQ/J,SAAS7H,oBAAoB4R,EAASv5C,EAAMymC,MAEtDvpC,KAAKi2C,WAAa,IAClB,OAAKj2C,KAAKk2C,sBAAsB,SAAU3M,EAAUzmC,GAClDu5C,EAAQ/J,SAAS7H,oBAAoB4R,EAASv5C,EAAMymC,MAEtDvpC,KAAKk2C,0BAAuBxzC,IAE7B,CACD9D,IAAK,mBACL0C,MAAO,SAA0B6C,EAAO8H,EAAMghB,GAC5C,IACU7oB,EAAM7F,EAAGgN,EADf+wC,EAASrvB,EAAU,MAAQ,SAQ/B,IALa,YAAThhB,GACKjM,KAAKsR,eAAenN,EAAM,GAAG2H,cAC/BmB,WAAW,IAAMqvC,EAAS,uBAG5B/9C,EAAI,EAAGgN,EAAOpH,EAAM1F,OAAQF,EAAIgN,IAAQhN,EAAG,CAE9C,IAAI0O,GADJ7I,EAAOD,EAAM5F,KACYyB,KAAKsR,eAAelN,EAAK0H,cAAcmB,WAE5DA,GACFA,EAAWqvC,EAAS,cAAcl4C,EAAK6R,QAAS7R,EAAK0H,aAAc1H,EAAKsH,UAI7E,CACD9M,IAAK,oBACL0C,MAAO,WACL,OAAOtB,KAAKsE,SAAW,KAExB,CACD1F,IAAK,oBACL0C,MAAO,SAA2Bi7C,GAChC,IAAIC,EAAUx8C,KAEVy8C,EAAaz8C,KAAKsE,SAAW,GAC7BmE,EAAS8zC,EAAej2B,KAAI,SAAUo2B,GACxC,IAAI5wC,EAAe4wC,EAAM5wC,aACrBJ,EAAQgxC,EAAMhxC,MAEdS,EAAOqwC,EAAQlrC,eAAexF,GAElC,IAAKK,EACH,MAAM,IAAIwxB,MAAM,6BAA+B7xB,GAGjD,MAAO,CACLA,aAAcA,EACdmK,QAAS9J,EAAKiF,KAAK1F,GACnBA,MAAOA,QAGI,QAAejD,EAAQg0C,KAGpCz8C,KAAKsE,QAAUmE,EACfzI,KAAKg2C,WAAa,KAElBh2C,KAAK05C,mBAAmBjxC,EAAQg0C,MAGnC,CACD79C,IAAK,gBACL0C,MAAO,SAAuBmtC,EAAMz1B,EAAMjb,GACxC,OAAOiC,KAAKo2C,SAASuG,OAAO38C,KAAMyuC,EAAMz1B,EAAMjb,KAE/C,CACDa,IAAK,qBACL0C,MAAO,SAA4BmH,EAAQg0C,EAAYG,GACrD,IAAIC,EAAe78C,KAAK8J,QAAQgzC,MAE5BrvB,EAAO,SAAc5T,EAAG1E,GAC1B,OAAO0E,EAAE9b,QAAO,SAAUoS,GACxB,OAAQgF,EAAE46B,MAAK,SAAU3/B,GACvB,OAAOD,EAAErE,eAAiBsE,EAAEtE,cAAgBqE,EAAEzE,QAAU0E,EAAE1E,aAK5DqxC,EAActvB,EAAKgvB,EAAYh0C,GAC/Bu0C,EAAYJ,EAASn0C,EAASglB,EAAKhlB,EAAQg0C,GAE3CM,EAAYt+C,QACduB,KAAKi9C,iBAAiBF,EAAaF,EAAa5wC,MAAM,GAGpD+wC,EAAUv+C,QAAUo+C,EAAa5wC,MACnCjM,KAAKi9C,iBAAiBD,EAAWH,EAAa5wC,MAAM,KAGvD,CACDrN,IAAK,gBACL0C,MAAO,SAAuB3B,EAAGi9C,GAC/B,IAAIM,EAAUl9C,KAEVgZ,EAAO,CACThU,MAAOrF,EACPi9C,OAAQA,EACR5N,YAAY,EACZmO,YAAan9C,KAAKijC,cAActjC,IAG9By9C,EAAc,SAAqBrO,GACrC,OAAQA,EAAOjlC,QAAQkwC,QAAUkD,EAAQpzC,QAAQkwC,QAAQxU,SAAS7lC,EAAEwtC,OAAOrqC,OAG7E,IAA6D,IAAzD9C,KAAKo0B,cAAc,cAAepb,EAAMokC,GAA5C,CAIA,IAAI/V,EAAUrnC,KAAKq9C,aAAa19C,EAAGi9C,EAAQ5jC,EAAKmkC,aAShD,OAPAnkC,EAAKg2B,YAAa,EAClBhvC,KAAKo0B,cAAc,aAAcpb,EAAMokC,IAEnC/V,GAAWruB,EAAKquB,UAClBrnC,KAAKs3C,SAGAt3C,QAER,CACDpB,IAAK,eACL0C,MAAO,SAAsB3B,EAAGi9C,EAAQO,GACtC,IAAIG,EAAgBt9C,KAAKsE,QACrBm4C,OAA+B,IAAlBa,EAA2B,GAAKA,EAC7CxzC,EAAU9J,KAAK8J,QACfihB,EAAmB6xB,EAEnBn0C,EAASzI,KAAKu9C,mBAAmB59C,EAAG88C,EAAYU,EAAapyB,GAE7DyyB,GAAU,QAAc79C,GAExB89C,EA7mCV,SAA4B99C,EAAG89C,EAAWN,EAAaK,GACrD,OAAKL,GAA0B,aAAXx9C,EAAEmD,KAIlB06C,EACKC,EAGF99C,EAPE,KA2mCW+9C,CAAmB/9C,EAAGK,KAAKg2C,WAAYmH,EAAaK,GAEhEL,IACFn9C,KAAKg2C,WAAa,MAClB,OAASlsC,EAAQ6zC,QAAS,CAACh+C,EAAG8I,EAAQzI,MAAOA,MAEzCw9C,IACF,OAAS1zC,EAAQgd,QAAS,CAACnnB,EAAG8I,EAAQzI,MAAOA,OAIjD,IAAIqnC,IAAW,QAAe5+B,EAAQg0C,GAStC,OAPIpV,GAAWuV,KACb58C,KAAKsE,QAAUmE,EAEfzI,KAAK05C,mBAAmBjxC,EAAQg0C,EAAYG,IAG9C58C,KAAKg2C,WAAayH,EACXpW,IAER,CACDzoC,IAAK,qBACL0C,MAAO,SAA4B3B,EAAG88C,EAAYU,EAAapyB,GAC7D,GAAe,aAAXprB,EAAEmD,KACJ,MAAO,GAGT,IAAKq6C,EACH,OAAOV,EAGT,IAAII,EAAe78C,KAAK8J,QAAQgzC,MAChC,OAAO98C,KAAK49C,0BAA0Bj+C,EAAGk9C,EAAa5wC,KAAM4wC,EAAc9xB,OAIvEoqB,EAvoCgB,GA0oCrB0I,GAAoB,WACtB,OAAO,OAAK1I,GAAMP,WAAW,SAAUjyC,GACrC,OAAOA,EAAMyzC,SAAS+C,iBAItBj7C,IAAa,EA0CjB,SAAS4/C,GAAQhvC,EAAKmH,EAASsN,GAC7B,IAAID,EAAarN,EAAQqN,WACrBy6B,EAAc9nC,EAAQ8nC,YACtB5tC,EAAI8F,EAAQ9F,EACZC,EAAI6F,EAAQ7F,EACZ0R,EAAc7L,EAAQ6L,YACtBD,EAAc5L,EAAQ4L,YACtBm8B,EAAcD,EAAcj8B,EAChChT,EAAI0sB,YACJ1sB,EAAI0W,IAAIrV,EAAGC,EAAG0R,EAAawB,EAAa06B,EAAaz6B,EAAWy6B,GAE5Dn8B,EAAck8B,GAChBC,EAAcD,EAAcl8B,EAC5B/S,EAAI0W,IAAIrV,EAAGC,EAAGyR,EAAa0B,EAAWy6B,EAAa16B,EAAa06B,GAAa,IAE7ElvC,EAAI0W,IAAIrV,EAAGC,EAAG2tC,EAAax6B,EAAW,EAAAY,EAASb,EAAa,EAAAa,GAG9DrV,EAAImvC,YACJnvC,EAAIuG,OAON,SAAS6oC,GAAoB14B,EAAK3D,EAAaC,EAAaq8B,GAC1D,IALuB78C,EAKnBnB,GALmBmB,EAKCkkB,EAAI1b,QAAQs0C,cAJ7B,QAAkB98C,EAAO,CAAC,aAAc,WAAY,aAAc,cAKrE+8C,GAAiBv8B,EAAcD,GAAe,EAC9Cy8B,EAAah7C,KAAKC,IAAI86C,EAAeF,EAAat8B,EAAc,GAEhE08B,EAAoB,SAA2BvgC,GACjD,IAAIwgC,GAAiB18B,EAAcxe,KAAKC,IAAI86C,EAAergC,IAAQmgC,EAAa,EAChF,OAAO,OAAYngC,EAAK,EAAG1a,KAAKC,IAAI86C,EAAeG,KAGrD,MAAO,CACLC,WAAYF,EAAkBp+C,EAAEs+C,YAChCC,SAAUH,EAAkBp+C,EAAEu+C,UAC9BC,YAAY,OAAYx+C,EAAEw+C,WAAY,EAAGL,GACzCM,UAAU,OAAYz+C,EAAEy+C,SAAU,EAAGN,IAIzC,SAASO,GAAWn7C,EAAGo7C,EAAO3uC,EAAGC,GAC/B,MAAO,CACLD,EAAGA,EAAIzM,EAAIJ,KAAKmgB,IAAIq7B,GACpB1uC,EAAGA,EAAI1M,EAAIJ,KAAKqgB,IAAIm7B,IAIxB,SAASC,GAAQjwC,EAAKmH,EAASsK,EAAQmC,EAAStX,EAAK8e,GACnD,IAAI/Z,EAAI8F,EAAQ9F,EACZC,EAAI6F,EAAQ7F,EACZ5M,EAAQyS,EAAQqN,WAChBy6B,EAAc9nC,EAAQ8nC,YACtBiB,EAAS/oC,EAAQ4L,YACjBC,EAAcxe,KAAKiC,IAAI0Q,EAAQ6L,YAAcY,EAAUnC,EAASw9B,EAAa,GAC7El8B,EAAcm9B,EAAS,EAAIA,EAASt8B,EAAUnC,EAASw9B,EAAc,EACrEkB,EAAgB,EAChBC,EAAQ9zC,EAAM5H,EAElB,GAAIkf,EAAS,CACX,IAEIy8B,IAFuBH,EAAS,EAAIA,EAASt8B,EAAU,IAChCZ,EAAc,EAAIA,EAAcY,EAAU,IACI,EAEzEu8B,GAAiBC,GAD0B,IAAvBC,EAA2BD,EAAQC,GAAsBA,EAAqBz8B,GAAWw8B,IACnE,EAG5C,IACIE,GAAeF,EADR57C,KAAKiC,IAAI,KAAO25C,EAAQp9B,EAAcvB,EAAS,EAAA8D,GAAMvC,GAC7B,EAC/BwB,EAAa9f,EAAQ47C,EAAcH,EACnC17B,EAAWnY,EAAMg0C,EAAcH,EAE/BI,EAAsBnB,GAAoBjoC,EAAS4L,EAAaC,EAAayB,EAAWD,GACxFm7B,EAAaY,EAAoBZ,WACjCC,EAAWW,EAAoBX,SAC/BC,EAAaU,EAAoBV,WACjCC,EAAWS,EAAoBT,SAE/BU,EAA2Bx9B,EAAc28B,EACzCc,EAAyBz9B,EAAc48B,EACvCc,EAA0Bl8B,EAAam7B,EAAaa,EACpDG,EAAwBl8B,EAAWm7B,EAAWa,EAC9CG,EAA2B79B,EAAc88B,EACzCgB,EAAyB99B,EAAc+8B,EACvCgB,EAA0Bt8B,EAAaq7B,EAAae,EACpDG,EAAwBt8B,EAAWq7B,EAAWe,EAGlD,GAFA7wC,EAAI0sB,YAEAtR,EAAU,CAGZ,GAFApb,EAAI0W,IAAIrV,EAAGC,EAAG0R,EAAa09B,EAAyBC,GAEhDf,EAAW,EAAG,CAChB,IAAIoB,EAAUjB,GAAWU,EAAwBE,EAAuBtvC,EAAGC,GAC3EtB,EAAI0W,IAAIs6B,EAAQ3vC,EAAG2vC,EAAQ1vC,EAAGsuC,EAAUe,EAAuBl8B,EAAW,EAAAY,GAG5E,IAAI47B,EAAKlB,GAAWc,EAAwBp8B,EAAUpT,EAAGC,GAGzD,GAFAtB,EAAI4sB,OAAOqkB,EAAG5vC,EAAG4vC,EAAG3vC,GAEhBwuC,EAAW,EAAG,CAChB,IAAIoB,EAAWnB,GAAWc,EAAwBE,EAAuB1vC,EAAGC,GAE5EtB,EAAI0W,IAAIw6B,EAAS7vC,EAAG6vC,EAAS5vC,EAAGwuC,EAAUr7B,EAAW,EAAAY,EAAS07B,EAAwBv8C,KAAK28C,IAK7F,GAFAnxC,EAAI0W,IAAIrV,EAAGC,EAAGyR,EAAa0B,EAAWq7B,EAAW/8B,EAAayB,EAAaq7B,EAAa98B,GAAa,GAEjG88B,EAAa,EAAG,CAClB,IAAIuB,EAAYrB,GAAWa,EAA0BE,EAAyBzvC,EAAGC,GAEjFtB,EAAI0W,IAAI06B,EAAU/vC,EAAG+vC,EAAU9vC,EAAGuuC,EAAYiB,EAA0Bt8C,KAAK28C,GAAI38B,EAAa,EAAAa,GAGhG,IAAIg8B,EAAKtB,GAAWS,EAA0Bh8B,EAAYnT,EAAGC,GAG7D,GAFAtB,EAAI4sB,OAAOykB,EAAGhwC,EAAGgwC,EAAG/vC,GAEhBquC,EAAa,EAAG,CAClB,IAAI2B,EAAYvB,GAAWS,EAA0BE,EAAyBrvC,EAAGC,GAEjFtB,EAAI0W,IAAI46B,EAAUjwC,EAAGiwC,EAAUhwC,EAAGquC,EAAYn7B,EAAa,EAAAa,EAASq7B,QAEjE,CACL1wC,EAAI2sB,OAAOtrB,EAAGC,GACd,IAAIiwC,EAAc/8C,KAAKmgB,IAAI+7B,GAA2B19B,EAAc3R,EAChEmwC,EAAch9C,KAAKqgB,IAAI67B,GAA2B19B,EAAc1R,EACpEtB,EAAI4sB,OAAO2kB,EAAaC,GACxB,IAAIC,EAAYj9C,KAAKmgB,IAAIg8B,GAAyB39B,EAAc3R,EAC5DqwC,EAAYl9C,KAAKqgB,IAAI87B,GAAyB39B,EAAc1R,EAChEtB,EAAI4sB,OAAO6kB,EAAWC,GAGxB1xC,EAAImvC,YA2DN,SAAS9vB,GAAWrf,EAAKmH,EAASsK,EAAQmC,EAASa,EAAU2G,GAC3D,IAAIpgB,EAAUmM,EAAQnM,QAClB8b,EAAc9b,EAAQ8b,YACtB66B,EAAkB32C,EAAQ22C,gBAC1BC,EAAgC,UAAxB52C,EAAQ6b,YAEfC,IAID86B,GACF5xC,EAAI+X,UAA0B,EAAdjB,EAChB9W,EAAI6xC,SAAWF,GAAmB,UAElC3xC,EAAI+X,UAAYjB,EAChB9W,EAAI6xC,SAAWF,GAAmB,SAGhCxqC,EAAQ2qC,aA/Cd,SAA+B9xC,EAAKmH,EAASyqC,GAC3C,IAOIniD,EAPA4R,EAAI8F,EAAQ9F,EACZC,EAAI6F,EAAQ7F,EACZkT,EAAarN,EAAQqN,WACrBy6B,EAAc9nC,EAAQ8nC,YACtB6C,EAAc3qC,EAAQ2qC,YACtB9+B,EAAcxe,KAAKiC,IAAI0Q,EAAQ6L,YAAci8B,EAAa,GAC1Dl8B,EAAc5L,EAAQ4L,YAAck8B,EAUxC,IAPI2C,GACF5C,GAAQhvC,EAAKmH,EAASqN,EAAa,EAAAjB,GAGrCvT,EAAI0sB,YACJ1sB,EAAI0W,IAAIrV,EAAGC,EAAGyR,EAAayB,EAAa,EAAAjB,EAAKiB,GAAY,GAEpD/kB,EAAI,EAAGA,EAAIqiD,IAAeriD,EAC7BuQ,EAAI6sB,SAMN,IAHA7sB,EAAI0sB,YACJ1sB,EAAI0W,IAAIrV,EAAGC,EAAG0R,EAAawB,EAAYA,EAAa,EAAAjB,GAE/C9jB,EAAI,EAAGA,EAAIqiD,IAAeriD,EAC7BuQ,EAAI6sB,SAuBJklB,CAAsB/xC,EAAKmH,EAASyqC,GAGlCA,GACF5C,GAAQhvC,EAAKmH,EAASsN,GAGxBw7B,GAAQjwC,EAAKmH,EAASsK,EAAQmC,EAASa,EAAU2G,GACjDpb,EAAI6sB,UArQN/9B,OAAOkB,iBAAiBq2C,GAAO,CAC7Bl5B,SAAU,CACR/d,WAAYA,GACZoD,MAAO,EAAA2G,GAET2sC,UAAW,CACT12C,WAAYA,GACZoD,MAAOszC,IAETv0B,UAAW,CACTniB,WAAYA,GACZoD,MAAO,KAETo/B,SAAU,CACRxiC,WAAYA,GACZoD,MAAOo/B,IAETogB,QAAS,CACP5iD,WAAYA,GACZoD,MAnvCU,SAqvCZuzC,SAAU,CACR32C,WAAYA,GACZoD,MAAOuzC,IAETnX,SAAU,CACRx/B,WAAYA,GACZoD,MAAO,WACLo/B,GAAS51B,IAAI1M,MAAMsiC,GAAUliC,WAC7Bq/C,OAGJkD,WAAY,CACV7iD,WAAYA,GACZoD,MAAO,WACLo/B,GAAS8a,OAAOp9C,MAAMsiC,GAAUliC,WAChCq/C,SAoON,IAAImD,GAA0B,SAAUC,IACtC,OAAUD,EAAYC,GAEtB,IAAIC,EAAWliD,EAAagiD,GAE5B,SAASA,EAAWv6C,GAClB,IAAI06C,EAkBJ,OAhBA,OAAgBnhD,KAAMghD,IAEtBG,EAAUD,EAASxhD,KAAKM,OAChB8J,aAAUpH,EAClBy+C,EAAQ/+B,mBAAgB1f,EACxBy+C,EAAQ79B,gBAAa5gB,EACrBy+C,EAAQ59B,cAAW7gB,EACnBy+C,EAAQt/B,iBAAcnf,EACtBy+C,EAAQr/B,iBAAcpf,EACtBy+C,EAAQpD,YAAc,EACtBoD,EAAQP,YAAc,EAElBn6C,GACF7I,OAAOoM,QAAO,OAAuBm3C,GAAU16C,GAG1C06C,EA8FT,OA3FA,OAAaH,EAAY,CAAC,CACxBpiD,IAAK,UACL0C,MAAO,SAAiB8/C,EAAQC,EAAQt2B,GACtC,IAAI7J,EAAQlhB,KAAKirB,SAAS,CAAC,IAAK,KAAMF,GAElCu2B,GAAsB,QAAkBpgC,EAAO,CACjD/Q,EAAGixC,EACHhxC,EAAGixC,IAEDt9B,EAAQu9B,EAAoBv9B,MAC5B+f,EAAWwd,EAAoBxd,SAE/Byd,EAAkBvhD,KAAKirB,SAAS,CAAC,aAAc,WAAY,cAAe,cAAe,iBAAkBF,GAC3GzH,EAAai+B,EAAgBj+B,WAC7BC,EAAWg+B,EAAgBh+B,SAC3B1B,EAAc0/B,EAAgB1/B,YAC9BC,EAAcy/B,EAAgBz/B,YAC9BM,EAAgBm/B,EAAgBn/B,cAEhCo/B,EAAUxhD,KAAK8J,QAAQ4Y,QAAU,EAIjC++B,GAFiB,IAAAz4C,GAAeoZ,EAAemB,EAAWD,IAExB,EAAAjB,IAAO,OAAc0B,EAAOT,EAAYC,GAE1Em+B,GAAe,QAAW5d,EAAUjiB,EAAc2/B,EAAS1/B,EAAc0/B,GAE7E,OAAOC,GAAiBC,IAEzB,CACD9iD,IAAK,iBACL0C,MAAO,SAAwBypB,GAC7B,IAAI42B,EAAkB3hD,KAAKirB,SAAS,CAAC,IAAK,IAAK,aAAc,WAAY,cAAe,cAAe,iBAAkBF,GACrH5a,EAAIwxC,EAAgBxxC,EACpBC,EAAIuxC,EAAgBvxC,EACpBkT,EAAaq+B,EAAgBr+B,WAC7BC,EAAWo+B,EAAgBp+B,SAC3B1B,EAAc8/B,EAAgB9/B,YAC9BC,EAAc6/B,EAAgB7/B,YAE9B8/B,EAAkB5hD,KAAK8J,QACvByW,EAASqhC,EAAgBrhC,OAEzBshC,GAAav+B,EAAaC,GAAY,EACtCu+B,GAAcjgC,EAAcC,EAFlB8/B,EAAgBl/B,QAE0BnC,GAAU,EAClE,MAAO,CACLpQ,EAAGA,EAAI7M,KAAKmgB,IAAIo+B,GAAaC,EAC7B1xC,EAAGA,EAAI9M,KAAKqgB,IAAIk+B,GAAaC,KAGhC,CACDljD,IAAK,kBACL0C,MAAO,SAAyBypB,GAC9B,OAAO/qB,KAAK6jC,eAAe9Y,KAE5B,CACDnsB,IAAK,OACL0C,MAAO,SAAcwN,GACnB,IAAIhF,EAAU9J,KAAK8J,QACfsY,EAAgBpiB,KAAKoiB,cACrB7B,GAAUzW,EAAQyW,QAAU,GAAK,EACjCmC,GAAW5Y,EAAQ4Y,SAAW,GAAK,EACnCwH,EAAWpgB,EAAQogB,SAIvB,GAHAlqB,KAAK+9C,YAAsC,UAAxBj0C,EAAQ6b,YAA0B,IAAO,EAC5D3lB,KAAK4gD,YAAcx+B,EAAgB,EAAAC,EAAM/e,KAAK0D,MAAMob,EAAgB,EAAAC,GAAO,IAErD,IAAlBD,GAAuBpiB,KAAK6hB,YAAc,GAAK7hB,KAAK8hB,YAAc,GAAtE,CAIAhT,EAAIgsB,OACJ,IAAIinB,EAAe,EAEnB,GAAIxhC,EAAQ,CACVwhC,EAAexhC,EAAS,EACxB,IAAIshC,GAAa7hD,KAAKsjB,WAAatjB,KAAKujB,UAAY,EACpDzU,EAAIkzC,UAAU1+C,KAAKmgB,IAAIo+B,GAAaE,EAAcz+C,KAAKqgB,IAAIk+B,GAAaE,GAEpE/hD,KAAKoiB,eAAiB,EAAAiC,IACxB09B,EAAexhC,GAInBzR,EAAI2X,UAAY3c,EAAQ4c,gBACxB5X,EAAI6X,YAAc7c,EAAQ8c,YAC1B,IAAIrD,EAtMV,SAAiBzU,EAAKmH,EAASsK,EAAQmC,EAASwH,GAC9C,IAAI02B,EAAc3qC,EAAQ2qC,YACtBt9B,EAAarN,EAAQqN,WACrBlB,EAAgBnM,EAAQmM,cACxBmB,EAAWtN,EAAQsN,SAEvB,GAAIq9B,EAAa,CACf7B,GAAQjwC,EAAKmH,EAASsK,EAAQmC,EAASY,EAAa,EAAAjB,EAAK6H,GAEzD,IAAK,IAAI3rB,EAAI,EAAGA,EAAIqiD,IAAeriD,EACjCuQ,EAAI+b,OAGD5M,MAAMmE,KACTmB,EAAWD,EAAalB,EAAgB,EAAAC,EAEpCD,EAAgB,EAAAC,GAAQ,IAC1BkB,GAAY,EAAAlB,IAOlB,OAFA08B,GAAQjwC,EAAKmH,EAASsK,EAAQmC,EAASa,EAAU2G,GACjDpb,EAAI+b,OACGtH,EA8KY0+B,CAAQnzC,EAAK9O,KAAM+hD,EAAcr/B,EAASwH,GACzDiE,GAAWrf,EAAK9O,KAAM+hD,EAAcr/B,EAASa,EAAU2G,GACvDpb,EAAIksB,eAIDgmB,EAtHqB,CAuH5Bl2B,GAkBF,SAASo3B,GAASpzC,EAAKhF,GACrB,IAAIyc,EAAQ/nB,UAAUC,OAAS,QAAsBiE,IAAjBlE,UAAU,GAAmBA,UAAU,GAAKsL,EAChFgF,EAAIqzC,SAAU,IAAAn5C,GAAeud,EAAM67B,eAAgBt4C,EAAQs4C,gBAC3DtzC,EAAIwsB,aAAY,IAAAtyB,GAAeud,EAAMiI,WAAY1kB,EAAQ0kB,aACzD1f,EAAIysB,gBAAiB,IAAAvyB,GAAeud,EAAMkI,iBAAkB3kB,EAAQ2kB,kBACpE3f,EAAI6xC,UAAW,IAAA33C,GAAeud,EAAMk6B,gBAAiB32C,EAAQ22C,iBAC7D3xC,EAAI+X,WAAY,IAAA7d,GAAeud,EAAMX,YAAa9b,EAAQ8b,aAC1D9W,EAAI6X,aAAc,IAAA3d,GAAeud,EAAMK,YAAa9c,EAAQ8c,aAG9D,SAAS8U,GAAO5sB,EAAKuzC,EAAU/jD,GAC7BwQ,EAAI4sB,OAAOp9B,EAAO6R,EAAG7R,EAAO8R,GAe9B,SAASkyC,GAASvhC,EAAQgH,GACxB,IAAImd,EAAS1mC,UAAUC,OAAS,QAAsBiE,IAAjBlE,UAAU,GAAmBA,UAAU,GAAK,GAC7EkU,EAAQqO,EAAOtiB,OACf8jD,EAAgBrd,EAAO1hC,MACvBg/C,OAAgC,IAAlBD,EAA2B,EAAIA,EAC7CE,EAAcvd,EAAO95B,IACrBs3C,OAA4B,IAAhBD,EAAyB/vC,EAAQ,EAAI+vC,EACjDE,EAAe56B,EAAQvkB,MACvBo/C,EAAa76B,EAAQ3c,IACrB5H,EAAQF,KAAKiC,IAAIi9C,EAAaG,GAC9Bv3C,EAAM9H,KAAKC,IAAIm/C,EAAWE,GAC1BC,EAAUL,EAAcG,GAAgBD,EAAYC,GAAgBH,EAAcI,GAAcF,EAAYE,EAChH,MAAO,CACLlwC,MAAOA,EACPlP,MAAOA,EACP2D,KAAM4gB,EAAQ5gB,KACdoE,KAAMH,EAAM5H,IAAUq/C,EAAUnwC,EAAQtH,EAAM5H,EAAQ4H,EAAM5H,GAIhE,SAASs/C,GAAYh0C,EAAKyY,EAAMQ,EAASmd,GACvC,IAgBI3mC,EAAG2iB,EAAOrO,EAhBVkO,EAASwG,EAAKxG,OACdjX,EAAUyd,EAAKzd,QAEfi5C,EAAYT,GAASvhC,EAAQgH,EAASmd,GACtCxyB,EAAQqwC,EAAUrwC,MAClBlP,EAAQu/C,EAAUv/C,MAClB2D,EAAO47C,EAAU57C,KACjBoE,EAAOw3C,EAAUx3C,KAEjBy3C,EA1CN,SAAuBl5C,GACrB,OAAIA,EAAQm5C,QACH,KAGLn5C,EAAQo5C,SAA8C,aAAnCp5C,EAAQq5C,uBACtB,KAGFznB,GAiCU0nB,CAAct5C,GAE3Bu5C,EAAQne,GAAU,GAClBoe,EAAaD,EAAMzqC,KACnBA,OAAsB,IAAf0qC,GAA+BA,EACtCn4C,EAAUk4C,EAAMl4C,QAIpB,IAAK5M,EAAI,EAAGA,GAAKgN,IAAQhN,GACvB2iB,EAAQH,GAAQvd,GAAS2H,EAAUI,EAAOhN,EAAIA,IAAMmU,IAE1C2O,OAECzI,GACT9J,EAAI2sB,OAAOva,EAAM/Q,EAAG+Q,EAAM9Q,GAC1BwI,GAAO,GAEPoqC,EAAWl0C,EAAK+D,EAAMqO,EAAO/V,EAASrB,EAAQm5C,SAGhDpwC,EAAOqO,GAQT,OALI/Z,GAEF67C,EAAWl0C,EAAK+D,EADhBqO,EAAQH,GAAQvd,GAAS2H,EAAUI,EAAO,IAAMmH,GACnBvH,EAASrB,EAAQm5C,WAGvC97C,EAGX,SAASo8C,GAAgBz0C,EAAKyY,EAAMQ,EAASmd,GAC3C,IAcI3mC,EAAG2iB,EAAOsiC,EAAOl/B,EAAMJ,EAAMu/B,EAd7B1iC,EAASwG,EAAKxG,OAEd2iC,EAAapB,GAASvhC,EAAQgH,EAASmd,GACvCxyB,EAAQgxC,EAAWhxC,MACnBlP,EAAQkgD,EAAWlgD,MACnB+H,EAAOm4C,EAAWn4C,KAElBo4C,EAAQze,GAAU,GAClB0e,EAAaD,EAAM/qC,KACnBA,OAAsB,IAAfgrC,GAA+BA,EACtCz4C,EAAUw4C,EAAMx4C,QAEhB04C,EAAO,EACPC,EAAS,EAGTC,EAAa,SAAoBr4C,GACnC,OAAQlI,GAAS2H,EAAUI,EAAOG,EAAQA,IAAUgH,GAGlDsxC,EAAQ,WACN1/B,IAASJ,IACXpV,EAAI4sB,OAAOmoB,EAAM3/B,GACjBpV,EAAI4sB,OAAOmoB,EAAMv/B,GACjBxV,EAAI4sB,OAAOmoB,EAAMJ,KASrB,IALI7qC,IACFsI,EAAQH,EAAOgjC,EAAW,IAC1Bj1C,EAAI2sB,OAAOva,EAAM/Q,EAAG+Q,EAAM9Q,IAGvB7R,EAAI,EAAGA,GAAKgN,IAAQhN,EAGvB,KAFA2iB,EAAQH,EAAOgjC,EAAWxlD,KAEhB8iB,KAAV,CAIA,IAAIlR,EAAI+Q,EAAM/Q,EACVC,EAAI8Q,EAAM9Q,EACV6zC,EAAa,EAAJ9zC,EAET8zC,IAAWT,GACTpzC,EAAIkU,EACNA,EAAOlU,EACEA,EAAI8T,IACbA,EAAO9T,GAGTyzC,GAAQC,EAASD,EAAO1zC,KAAO2zC,IAE/BE,IACAl1C,EAAI4sB,OAAOvrB,EAAGC,GACdozC,EAAQS,EACRH,EAAS,EACTx/B,EAAOJ,EAAO9T,GAGhBqzC,EAAQrzC,EAGV4zC,IAGF,SAASE,GAAkB38B,GACzB,IAAIrc,EAAOqc,EAAKzd,QACZ0kB,EAAatjB,EAAKsjB,YAActjB,EAAKsjB,WAAW/vB,OAEpD,QADmB8oB,EAAKM,YAAeN,EAAKrgB,OAAUgE,EAAKg4C,SAA2C,aAAhCh4C,EAAKi4C,wBAA0Cj4C,EAAK+3C,SAAYz0B,GACjH+0B,GAAkBT,GA/KzC9B,GAAWpzC,GAAK,MAChBozC,GAAW/kC,SAAW,CACpB0J,YAAa,SACbiB,YAAa,OACb65B,qBAAiB/9C,EACjB07C,aAAc,EACdx4B,YAAa,EACbrF,OAAQ,EACRmC,QAAS,EACTqB,WAAOrhB,EACPwnB,UAAU,GAEZ82B,GAAW31B,cAAgB,CACzB3E,gBAAiB,mBA+NnB,IAAIy9B,GAA8B,mBAAXC,OAEvB,SAASC,GAAMv1C,EAAKyY,EAAM/jB,EAAOkP,GAC3ByxC,KAAc58B,EAAKzd,QAAQie,QAjDjC,SAA6BjZ,EAAKyY,EAAM/jB,EAAOkP,GAC7C,IAAI4xC,EAAO/8B,EAAKg9B,MAEXD,IACHA,EAAO/8B,EAAKg9B,MAAQ,IAAIH,OAEpB78B,EAAK+8B,KAAKA,EAAM9gD,EAAOkP,IACzB4xC,EAAKrG,aAITiE,GAASpzC,EAAKyY,EAAKzd,SACnBgF,EAAI6sB,OAAO2oB,GAsCTE,CAAoB11C,EAAKyY,EAAM/jB,EAAOkP,GAnC1C,SAA0B5D,EAAKyY,EAAM/jB,EAAOkP,GAC1C,IAMI+xC,EANAC,EAAWn9B,EAAKm9B,SAChB56C,EAAUyd,EAAKzd,QAEf66C,EAAgBT,GAAkB38B,GAElCq9B,EAAc1kD,EAA2BwkD,GAG7C,IACE,IAAKE,EAAYxjD,MAAOqjD,EAAUG,EAAYhkD,KAAKS,MAAO,CACxD,IAAI0mB,EAAU08B,EAAQnjD,MACtB4gD,GAASpzC,EAAKhF,EAASie,EAAQxB,OAC/BzX,EAAI0sB,YAEAmpB,EAAc71C,EAAKyY,EAAMQ,EAAS,CACpCvkB,MAAOA,EACP4H,IAAK5H,EAAQkP,EAAQ,KAErB5D,EAAImvC,YAGNnvC,EAAI6sB,UAEN,MAAOj6B,GACPkjD,EAAYjlD,EAAE+B,GACd,QACAkjD,EAAYpjD,KAUZqjD,CAAiB/1C,EAAKyY,EAAM/jB,EAAOkP,GAIvC,IAAIoyC,GAA2B,SAAUC,IACvC,OAAUD,EAAaC,GAEvB,IAAIC,EAAWhmD,EAAa8lD,GAE5B,SAASA,EAAYr+C,GACnB,IAAIw+C,EAqBJ,OAnBA,OAAgBjlD,KAAM8kD,IAEtBG,EAAUD,EAAStlD,KAAKM,OAChBgoB,UAAW,EACnBi9B,EAAQn7C,aAAUpH,EAClBuiD,EAAQ97C,YAASzG,EACjBuiD,EAAQ/9C,WAAQxE,EAChBuiD,EAAQv6B,eAAYhoB,EACpBuiD,EAAQV,WAAQ7hD,EAChBuiD,EAAQC,aAAUxiD,EAClBuiD,EAAQE,eAAYziD,EACpBuiD,EAAQp9B,YAAa,EACrBo9B,EAAQG,gBAAiB,EACzBH,EAAQr9B,mBAAgBllB,EAEpB+D,GACF7I,OAAOoM,QAAO,OAAuBi7C,GAAUx+C,GAG1Cw+C,EAsJT,OAnJA,OAAaH,EAAa,CAAC,CACzBlmD,IAAK,sBACL0C,MAAO,SAA6ByU,EAAWpF,GAC7C,IAAI7G,EAAU9J,KAAK8J,QAEnB,IAAKA,EAAQo5C,SAA8C,aAAnCp5C,EAAQq5C,0BAA2Cr5C,EAAQm5C,UAAYjjD,KAAKolD,eAAgB,CAClH,IAAIj+C,EAAO2C,EAAQse,SAAWpoB,KAAKkH,MAAQlH,KAAK0qB,WAEhD,QAA2B1qB,KAAKklD,QAASp7C,EAASiM,EAAW5O,EAAMwJ,GAEnE3Q,KAAKolD,gBAAiB,KAGzB,CACDxmD,IAAK,SACLgG,IAAK,WACH,OAAO5E,KAAKklD,SAEdngD,IAAK,SAAagc,GAChB/gB,KAAKklD,QAAUnkC,SACR/gB,KAAKmlD,iBACLnlD,KAAKukD,MACZvkD,KAAKolD,gBAAiB,IAEvB,CACDxmD,IAAK,WACLgG,IAAK,WACH,OAAO5E,KAAKmlD,YAAcnlD,KAAKmlD,WAAY,QAAiBnlD,KAAMA,KAAK8J,QAAQie,YAEhF,CACDnpB,IAAK,QACL0C,MAAO,WACL,IAAIojD,EAAW1kD,KAAK0kD,SAChB3jC,EAAS/gB,KAAK+gB,OAClB,OAAO2jC,EAASjmD,QAAUsiB,EAAO2jC,EAAS,GAAGlhD,SAE9C,CACD5E,IAAK,OACL0C,MAAO,WACL,IAAIojD,EAAW1kD,KAAK0kD,SAChB3jC,EAAS/gB,KAAK+gB,OACdrO,EAAQgyC,EAASjmD,OACrB,OAAOiU,GAASqO,EAAO2jC,EAAShyC,EAAQ,GAAGtH,OAE5C,CACDxM,IAAK,cACL0C,MAAO,SAAqB4f,EAAO4c,GACjC,IAAIh0B,EAAU9J,KAAK8J,QACfxI,EAAQ4f,EAAM4c,GACd/c,EAAS/gB,KAAK+gB,OAEd2jC,GAAW,QAAe1kD,KAAM,CAClC89B,SAAUA,EACVt6B,MAAOlC,EACP8J,IAAK9J,IAGP,GAAKojD,EAASjmD,OAAd,CAIA,IAIIF,EAAGgN,EAJH1L,EAAS,GAETwlD,EAjKV,SAAiCv7C,GAC/B,OAAIA,EAAQm5C,QACH,KAGLn5C,EAAQo5C,SAA8C,aAAnCp5C,EAAQq5C,uBACtB,KAGF,KAwJgBmC,CAAwBx7C,GAI3C,IAAKvL,EAAI,EAAGgN,EAAOm5C,EAASjmD,OAAQF,EAAIgN,IAAQhN,EAAG,CACjD,IAAIgnD,EAAcb,EAASnmD,GACvBiF,EAAQ+hD,EAAY/hD,MACpB4H,EAAMm6C,EAAYn6C,IAClBgwB,EAAKra,EAAOvd,GACZ63B,EAAKta,EAAO3V,GAEhB,GAAIgwB,IAAOC,EAAX,CAKA,IAEImqB,EAAeH,EAAajqB,EAAIC,EAF5B/3B,KAAK2W,KAAK3Y,EAAQ85B,EAAG0C,KAAczC,EAAGyC,GAAY1C,EAAG0C,KAElBh0B,EAAQm5C,SAEnDuC,EAAa1nB,GAAY5c,EAAM4c,GAC/Bj+B,EAAO1B,KAAKqnD,QATV3lD,EAAO1B,KAAKi9B,GAYhB,OAAyB,IAAlBv7B,EAAOpB,OAAeoB,EAAO,GAAKA,KAE1C,CACDjB,IAAK,cACL0C,MAAO,SAAqBwN,EAAKiZ,EAASmd,GAGxC,OAFoBgf,GAAkBlkD,KAE/B2kD,CAAc71C,EAAK9O,KAAM+nB,EAASmd,KAE1C,CACDtmC,IAAK,OACL0C,MAAO,SAAcwN,EAAKtL,EAAOkP,GAC/B,IAAIgyC,EAAW1kD,KAAK0kD,SAEhBC,EAAgBT,GAAkBlkD,MAElCmH,EAAOnH,KAAKkH,MAChB1D,EAAQA,GAAS,EACjBkP,EAAQA,GAAS1S,KAAK+gB,OAAOtiB,OAAS+E,EAEtC,IACIiiD,EADAC,EAAcxlD,EAA2BwkD,GAG7C,IACE,IAAKgB,EAAYtkD,MAAOqkD,EAAUC,EAAY9kD,KAAKS,MAAO,CAExD8F,GAAQw9C,EAAc71C,EAAK9O,KADbylD,EAAQnkD,MACoB,CACxCkC,MAAOA,EACP4H,IAAK5H,EAAQkP,EAAQ,KAGzB,MAAOhR,GACPgkD,EAAY/lD,EAAE+B,GACd,QACAgkD,EAAYlkD,IAGd,QAAS2F,IAEV,CACDvI,IAAK,OACL0C,MAAO,SAAcwN,EAAKiH,EAAWvS,EAAOkP,GAC1C,IAAI5I,EAAU9J,KAAK8J,SAAW,IACjB9J,KAAK+gB,QAAU,IAEjBtiB,QAAUqL,EAAQ8b,cAC3B9W,EAAIgsB,OAEJupB,GAAMv1C,EAAK9O,KAAMwD,EAAOkP,GAExB5D,EAAIksB,WAGFh7B,KAAKgoB,WACPhoB,KAAKolD,gBAAiB,EACtBplD,KAAKukD,WAAQ7hD,OAKZoiD,EAjLsB,CAkL7Bh6B,GA2BF,SAAS66B,GAAUrjB,EAAIqC,EAAKp3B,EAAMwd,GAChC,IAAIjhB,EAAUw4B,EAAGx4B,QAGbxI,EADeghC,EAAGrX,SAAS,CAAC1d,GAAOwd,GACdxd,GAEzB,OAAOjK,KAAK2W,IAAI0qB,EAAMrjC,GAASwI,EAAQgX,OAAShX,EAAQ87C,UA/B1Dd,GAAYl3C,GAAK,OACjBk3C,GAAY7oC,SAAW,CACrBmmC,eAAgB,OAChB5zB,WAAY,GACZC,iBAAkB,EAClBgyB,gBAAiB,QACjB76B,YAAa,EACbigC,iBAAiB,EACjB1C,uBAAwB,UACxBt4B,MAAM,EACNzC,UAAU,EACV66B,SAAS,EACTC,QAAS,GAEX4B,GAAYz5B,cAAgB,CAC1B3E,gBAAiB,kBACjBE,YAAa,eAEfk+B,GAAY7+B,YAAc,CACxB5d,aAAa,EACbD,WAAY,SAAoBrH,GAC9B,MAAgB,eAATA,GAAkC,SAATA,IAapC,IAAI+kD,GAA4B,SAAUC,IACxC,OAAUD,EAAcC,GAExB,IAAIC,EAAWhnD,EAAa8mD,GAE5B,SAASA,EAAar/C,GACpB,IAAIw/C,EAcJ,OAZA,OAAgBjmD,KAAM8lD,IAEtBG,EAAUD,EAAStmD,KAAKM,OAChB8J,aAAUpH,EAClBujD,EAAQ/4C,YAASxK,EACjBujD,EAAQ5kC,UAAO3e,EACfujD,EAAQx9B,UAAO/lB,EAEX+D,GACF7I,OAAOoM,QAAO,OAAuBi8C,GAAUx/C,GAG1Cw/C,EAmET,OAhEA,OAAaH,EAAc,CAAC,CAC1BlnD,IAAK,UACL0C,MAAO,SAAiB4kD,EAAQC,EAAQp7B,GACtC,IAAIjhB,EAAU9J,KAAK8J,QAEfs8C,EAAkBpmD,KAAKirB,SAAS,CAAC,IAAK,KAAMF,GAC5C5a,EAAIi2C,EAAgBj2C,EACpBC,EAAIg2C,EAAgBh2C,EAExB,OAAO9M,KAAK6oB,IAAI+5B,EAAS/1C,EAAG,GAAK7M,KAAK6oB,IAAIg6B,EAAS/1C,EAAG,GAAK9M,KAAK6oB,IAAIriB,EAAQ87C,UAAY97C,EAAQgX,OAAQ,KAEzG,CACDliB,IAAK,WACL0C,MAAO,SAAkB4kD,EAAQn7B,GAC/B,OAAO46B,GAAU3lD,KAAMkmD,EAAQ,IAAKn7B,KAErC,CACDnsB,IAAK,WACL0C,MAAO,SAAkB6kD,EAAQp7B,GAC/B,OAAO46B,GAAU3lD,KAAMmmD,EAAQ,IAAKp7B,KAErC,CACDnsB,IAAK,iBACL0C,MAAO,SAAwBypB,GAC7B,IAAIs7B,EAAkBrmD,KAAKirB,SAAS,CAAC,IAAK,KAAMF,GAIhD,MAAO,CACL5a,EAJMk2C,EAAgBl2C,EAKtBC,EAJMi2C,EAAgBj2C,KAOzB,CACDxR,IAAK,OACL0C,MAAO,SAAcwI,GAEnB,IAAIgX,GADJhX,EAAUA,GAAW9J,KAAK8J,SAAW,IAChBgX,QAAU,EAG/B,OAAgC,IAFhCA,EAASxd,KAAKiC,IAAIub,EAAQA,GAAUhX,EAAQw8C,aAAe,KACzCxlC,GAAUhX,EAAQ8b,aAAe,MAGpD,CACDhnB,IAAK,OACL0C,MAAO,SAAcwN,EAAKgH,GACxB,IAAIhM,EAAU9J,KAAK8J,QAEf9J,KAAKqhB,MAAQvX,EAAQgX,OAAS,MAAQ,OAAe9gB,KAAM8V,EAAM9V,KAAK6K,KAAKf,GAAW,KAI1FgF,EAAI6X,YAAc7c,EAAQ8c,YAC1B9X,EAAI+X,UAAY/c,EAAQ8b,YACxB9W,EAAI2X,UAAY3c,EAAQ4c,iBACxB,QAAU5X,EAAKhF,EAAS9J,KAAKmQ,EAAGnQ,KAAKoQ,MAEtC,CACDxR,IAAK,WACL0C,MAAO,WACL,IAAIwI,EAAU9J,KAAK8J,SAAW,GAC9B,OAAOA,EAAQgX,OAAShX,EAAQ87C,cAI7BE,EAvFuB,CAwF9Bh7B,GAiBF,SAASy7B,GAAaC,EAAKz7B,GACzB,IAOItV,EAAMF,EAAOD,EAAKE,EAAQixC,EAP1BC,EAAgBF,EAAIv7B,SAAS,CAAC,IAAK,IAAK,OAAQ,QAAS,UAAWF,GACpE5a,EAAIu2C,EAAcv2C,EAClBC,EAAIs2C,EAAct2C,EAClBiL,EAAOqrC,EAAcrrC,KACrBqC,EAAQgpC,EAAchpC,MACtBD,EAASipC,EAAcjpC,OAkB3B,OAdI+oC,EAAIprC,YACNqrC,EAAOhpC,EAAS,EAChBhI,EAAOnS,KAAKC,IAAI4M,EAAGkL,GACnB9F,EAAQjS,KAAKiC,IAAI4K,EAAGkL,GACpB/F,EAAMlF,EAAIq2C,EACVjxC,EAASpF,EAAIq2C,IAGbhxC,EAAOtF,GADPs2C,EAAO/oC,EAAQ,GAEfnI,EAAQpF,EAAIs2C,EACZnxC,EAAMhS,KAAKC,IAAI6M,EAAGiL,GAClB7F,EAASlS,KAAKiC,IAAI6K,EAAGiL,IAGhB,CACL5F,KAAMA,EACNH,IAAKA,EACLC,MAAOA,EACPC,OAAQA,GAIZ,SAASmxC,GAAYtlC,EAAM/f,EAAOiC,EAAKgC,GACrC,OAAO8b,EAAO,GAAI,OAAY/f,EAAOiC,EAAKgC,GAgC5C,SAASqhD,GAAcJ,GACrB,IAAIv4B,EAASs4B,GAAaC,GACtB9oC,EAAQuQ,EAAO1Y,MAAQ0Y,EAAOxY,KAC9BgI,EAASwQ,EAAOzY,OAASyY,EAAO3Y,IAChCoT,EAjCN,SAA0B89B,EAAKK,EAAMC,GACnC,IAAIxlD,EAAQklD,EAAI18C,QAAQ8b,YACpBvE,EAAOmlC,EAAItrC,cACX/a,GAAI,QAAOmB,GACf,MAAO,CACL4T,EAAGyxC,GAAYtlC,EAAK/L,IAAKnV,EAAEmV,IAAK,EAAGwxC,GACnCpjD,EAAGijD,GAAYtlC,EAAK9L,MAAOpV,EAAEoV,MAAO,EAAGsxC,GACvC1xC,EAAGwxC,GAAYtlC,EAAK7L,OAAQrV,EAAEqV,OAAQ,EAAGsxC,GACzCl1C,EAAG+0C,GAAYtlC,EAAK5L,KAAMtV,EAAEsV,KAAM,EAAGoxC,IAyB1BE,CAAiBP,EAAK9oC,EAAQ,EAAGD,EAAS,GACnDqD,EAtBN,SAA2B0lC,EAAKK,EAAMC,GACpC,IACIvrC,EADiBirC,EAAIv7B,SAAS,CAAC,uBACK1P,mBAEpCja,EAAQklD,EAAI18C,QAAQs0C,aACpBj+C,GAAI,QAAcmB,GAClB0lD,EAAO1jD,KAAKC,IAAIsjD,EAAMC,GACtBzlC,EAAOmlC,EAAItrC,cACX+rC,EAAe1rC,IAAsB,IAAAhd,GAAS+C,GAClD,MAAO,CACL4lD,QAASP,IAAaM,GAAgB5lC,EAAK/L,KAAO+L,EAAK5L,KAAMtV,EAAE+mD,QAAS,EAAGF,GAC3EG,SAAUR,IAAaM,GAAgB5lC,EAAK/L,KAAO+L,EAAK9L,MAAOpV,EAAEgnD,SAAU,EAAGH,GAC9EI,WAAYT,IAAaM,GAAgB5lC,EAAK7L,QAAU6L,EAAK5L,KAAMtV,EAAEinD,WAAY,EAAGJ,GACpFK,YAAaV,IAAaM,GAAgB5lC,EAAK7L,QAAU6L,EAAK9L,MAAOpV,EAAEknD,YAAa,EAAGL,IAS5EM,CAAkBd,EAAK9oC,EAAQ,EAAGD,EAAS,GACxD,MAAO,CACL8pC,MAAO,CACLp3C,EAAG8d,EAAOxY,KACVrF,EAAG6d,EAAO3Y,IACVyiB,EAAGra,EACHsa,EAAGva,EACHqD,OAAQA,GAEV4/B,MAAO,CACLvwC,EAAG8d,EAAOxY,KAAOiT,EAAO9W,EACxBxB,EAAG6d,EAAO3Y,IAAMoT,EAAOxT,EACvB6iB,EAAGra,EAAQgL,EAAO9W,EAAI8W,EAAOhlB,EAC7Bs0B,EAAGva,EAASiL,EAAOxT,EAAIwT,EAAOvT,EAC9B2L,OAAQ,CACNomC,QAAS5jD,KAAKiC,IAAI,EAAGub,EAAOomC,QAAU5jD,KAAKiC,IAAImjB,EAAOxT,EAAGwT,EAAO9W,IAChEu1C,SAAU7jD,KAAKiC,IAAI,EAAGub,EAAOqmC,SAAW7jD,KAAKiC,IAAImjB,EAAOxT,EAAGwT,EAAOhlB,IAClE0jD,WAAY9jD,KAAKiC,IAAI,EAAGub,EAAOsmC,WAAa9jD,KAAKiC,IAAImjB,EAAOvT,EAAGuT,EAAO9W,IACtEy1C,YAAa/jD,KAAKiC,IAAI,EAAGub,EAAOumC,YAAc/jD,KAAKiC,IAAImjB,EAAOvT,EAAGuT,EAAOhlB,OAMhF,SAAS8jD,GAAShB,EAAKr2C,EAAGC,EAAG2a,GAC3B,IAAI08B,EAAc,OAANt3C,EACRu3C,EAAc,OAANt3C,EAER6d,EAASu4B,KADEiB,GAASC,IACSnB,GAAaC,EAAKz7B,GACnD,OAAOkD,IAAWw5B,IAAS,QAAWt3C,EAAG8d,EAAOxY,KAAMwY,EAAO1Y,UAAYmyC,IAAS,QAAWt3C,EAAG6d,EAAO3Y,IAAK2Y,EAAOzY,SAOrH,SAASmyC,GAAkB74C,EAAK84C,GAC9B94C,EAAI84C,KAAKA,EAAKz3C,EAAGy3C,EAAKx3C,EAAGw3C,EAAK7vB,EAAG6vB,EAAK5vB,GAGxC,SAAS6vB,GAAYD,EAAMhmB,GACzB,IAAIkmB,EAAUtpD,UAAUC,OAAS,QAAsBiE,IAAjBlE,UAAU,GAAmBA,UAAU,GAAK,GAC9E2R,EAAIy3C,EAAKz3C,IAAM23C,EAAQ33C,GAAKyxB,EAAS,EACrCxxB,EAAIw3C,EAAKx3C,IAAM03C,EAAQ13C,GAAKwxB,EAAS,EACrC7J,GAAK6vB,EAAKz3C,EAAIy3C,EAAK7vB,IAAM+vB,EAAQ33C,EAAI23C,EAAQ/vB,EAAI6J,EAAS,GAAKzxB,EAC/D6nB,GAAK4vB,EAAKx3C,EAAIw3C,EAAK5vB,IAAM8vB,EAAQ13C,EAAI03C,EAAQ9vB,EAAI4J,EAAS,GAAKxxB,EACnE,MAAO,CACLD,EAAGy3C,EAAKz3C,EAAIA,EACZC,EAAGw3C,EAAKx3C,EAAIA,EACZ2nB,EAAG6vB,EAAK7vB,EAAIA,EACZC,EAAG4vB,EAAK5vB,EAAIA,EACZlX,OAAQ8mC,EAAK9mC,QAxIjBglC,GAAal4C,GAAK,QAClBk4C,GAAa7pC,SAAW,CACtB2J,YAAa,EACbggC,UAAW,EACX//B,iBAAkB,EAClBygC,YAAa,EACbjgC,WAAY,SACZvF,OAAQ,EACRqB,SAAU,GAEZ2jC,GAAaz6B,cAAgB,CAC3B3E,gBAAiB,kBACjBE,YAAa,eAgIf,IAAImhC,GAA0B,SAAUC,IACtC,OAAUD,EAAYC,GAEtB,IAAIC,EAAWjpD,EAAa+oD,GAE5B,SAASA,EAAWthD,GAClB,IAAIyhD,EAgBJ,OAdA,OAAgBloD,KAAM+nD,IAEtBG,EAAUD,EAASvoD,KAAKM,OAChB8J,aAAUpH,EAClBwlD,EAAQ9sC,gBAAa1Y,EACrBwlD,EAAQ7sC,UAAO3Y,EACfwlD,EAAQxqC,WAAQhb,EAChBwlD,EAAQzqC,YAAS/a,EACjBwlD,EAAQlsC,mBAAgBtZ,EAEpB+D,GACF7I,OAAOoM,QAAO,OAAuBk+C,GAAUzhD,GAG1CyhD,EAqET,OAlEA,OAAaH,EAAY,CAAC,CACxBnpD,IAAK,OACL0C,MAAO,SAAcwN,GACnB,IAnDagS,EAmDT9E,EAAgBhc,KAAKgc,cACrBmsC,EAAkBnoD,KAAK8J,QACvB8c,EAAcuhC,EAAgBvhC,YAC9BF,EAAkByhC,EAAgBzhC,gBAElC0hC,EAAiBxB,GAAc5mD,MAC/B0gD,EAAQ0H,EAAe1H,MACvB6G,EAAQa,EAAeb,MAEvBc,GA5DSvnC,EA4DeymC,EAAMzmC,QA3DxBomC,SAAWpmC,EAAOqmC,UAAYrmC,EAAOsmC,YAActmC,EAAOumC,YA2DxB,KAAqBM,GACjE74C,EAAIgsB,OAEAysB,EAAMxvB,IAAM2oB,EAAM3oB,GAAKwvB,EAAMvvB,IAAM0oB,EAAM1oB,IAC3ClpB,EAAI0sB,YACJ6sB,EAAYv5C,EAAK+4C,GAAYN,EAAOvrC,EAAe0kC,IACnD5xC,EAAIuG,OACJgzC,EAAYv5C,EAAK+4C,GAAYnH,GAAQ1kC,EAAeurC,IACpDz4C,EAAI2X,UAAYG,EAChB9X,EAAI+b,KAAK,YAGX/b,EAAI0sB,YACJ6sB,EAAYv5C,EAAK+4C,GAAYnH,EAAO1kC,IACpClN,EAAI2X,UAAYC,EAChB5X,EAAI+b,OACJ/b,EAAIksB,YAEL,CACDp8B,IAAK,UACL0C,MAAO,SAAiB4kD,EAAQC,EAAQp7B,GACtC,OAAOy8B,GAASxnD,KAAMkmD,EAAQC,EAAQp7B,KAEvC,CACDnsB,IAAK,WACL0C,MAAO,SAAkB4kD,EAAQn7B,GAC/B,OAAOy8B,GAASxnD,KAAMkmD,EAAQ,KAAMn7B,KAErC,CACDnsB,IAAK,WACL0C,MAAO,SAAkB6kD,EAAQp7B,GAC/B,OAAOy8B,GAASxnD,KAAM,KAAMmmD,EAAQp7B,KAErC,CACDnsB,IAAK,iBACL0C,MAAO,SAAwBypB,GAC7B,IAAIu9B,EAAkBtoD,KAAKirB,SAAS,CAAC,IAAK,IAAK,OAAQ,cAAeF,GAClE5a,EAAIm4C,EAAgBn4C,EACpBC,EAAIk4C,EAAgBl4C,EACpBiL,EAAOitC,EAAgBjtC,KACvBD,EAAaktC,EAAgBltC,WAEjC,MAAO,CACLjL,EAAGiL,GAAcjL,EAAIkL,GAAQ,EAAIlL,EACjCC,EAAGgL,EAAahL,GAAKA,EAAIiL,GAAQ,KAGpC,CACDzc,IAAK,WACL0C,MAAO,SAAkBiM,GACvB,MAAgB,MAATA,EAAevN,KAAK0d,MAAQ,EAAI1d,KAAKyd,OAAS,MAIlDsqC,EA3FqB,CA4F5Bj9B,GAEFi9B,GAAWn6C,GAAK,MAChBm6C,GAAW9rC,SAAW,CACpBf,cAAe,QACf0K,YAAa,EACbw4B,aAAc,EACdpiC,cAAe,OACfqK,gBAAY3jB,GAEdqlD,GAAW18B,cAAgB,CACzB3E,gBAAiB,kBACjBE,YAAa,eAEf,IAAI/Q,GAAwBjY,OAAOyZ,OAAO,CACxCiqB,UAAW,KACX0f,WAAYA,GACZ8D,YAAaA,GACbgB,aAAcA,GACdiC,WAAYA,KAuHd,SAASQ,GAAsBv4C,GAC7B,GAAIA,EAAQ6X,WAAY,CACtB,IAAIzW,EAAOpB,EAAQb,aACZa,EAAQ6X,kBACR7X,EAAQb,MACfvR,OAAOmB,eAAeiR,EAAS,OAAQ,CACrC1O,MAAO8P,KAKb,SAASo3C,GAAmB7lD,GAC1BA,EAAMyO,KAAKC,SAAS1S,SAAQ,SAAUqR,GACpCu4C,GAAsBv4C,MAgC1B,IAAIy4C,GAAoB,CACtB76C,GAAI,aACJqO,SAAU,CACRysC,UAAW,UACXz7B,SAAS,GAEX07B,qBAAsB,SAA8BhmD,EAAOqW,EAAMlP,GAC/D,GAAKA,EAAQmjB,QAAb,CAKA,IAAI6Y,EAAiBnjC,EAAM+a,MAC3B/a,EAAMyO,KAAKC,SAAS1S,SAAQ,SAAUqR,EAASlE,GAC7C,IAAIqD,EAAQa,EAAQb,MAChBwB,EAAYX,EAAQW,UACpBxE,EAAOxJ,EAAM2O,eAAexF,GAC5BsF,EAAOjC,GAASa,EAAQoB,KAE5B,GAAsD,OAAlD,OAAQ,CAACT,EAAWhO,EAAMmH,QAAQ6G,aAIjCxE,EAAKc,WAAWwC,mBAArB,CAIA,IAAIm5C,EAAQjmD,EAAMuL,OAAO/B,EAAKmE,SAE9B,IAAmB,WAAfs4C,EAAM9lD,MAAoC,SAAf8lD,EAAM9lD,QAIjCH,EAAMmH,QAAQ2I,QAAlB,CAIA,IAAIo2C,EAjEV,SAAmD18C,EAAM4U,GACvD,IAAI+nC,EAAa/nC,EAAOtiB,OACpB+E,EAAQ,EAER6J,EAASlB,EAAKkB,OAEd07C,EAAwB17C,EAAOmH,gBAC/BjR,EAAMwlD,EAAsBxlD,IAC5BgC,EAAMwjD,EAAsBxjD,IAC5BkP,EAAas0C,EAAsBt0C,WACnCC,EAAaq0C,EAAsBr0C,WAYvC,OAVID,IACFjR,GAAQ,QAAY,OAAaud,EAAQ1T,EAAOE,KAAMhK,GAAKi/B,GAAI,EAAGsmB,EAAa,IAS1E,CACLtlD,MAAOA,EACPkP,MAREgC,GACM,QAAY,OAAaqM,EAAQ1T,EAAOE,KAAMhI,GAAKk9B,GAAK,EAAGj/B,EAAOslD,GAActlD,EAEhFslD,EAAatlD,GA8CUwlD,CAA0C78C,EAAMiF,GACzE5N,EAAQqlD,EAAuBrlD,MAC/BkP,EAAQm2C,EAAuBn2C,MAInC,GAAIA,IAFY5I,EAAQm/C,WAAa,EAAInjB,GAGvCyiB,GAAsBv4C,OADxB,CAoBA,IAAIk5C,EAEJ,QAjBI,OAAc/5C,KAChBa,EAAQb,MAAQiC,SACTpB,EAAQoB,KACfxT,OAAOmB,eAAeiR,EAAS,OAAQ,CACrCm5C,cAAc,EACdjrD,YAAY,EACZ0G,IAAK,WACH,OAAO5E,KAAK6nB,YAEd9iB,IAAK,SAAakD,GAChBjI,KAAKmP,MAAQlH,MAOX6B,EAAQ4+C,WACd,IAAK,OACHQ,EApOV,SAAwB93C,EAAM5N,EAAOkP,EAAOozB,EAAgBh8B,GAC1D,IAAIs/C,EAAUt/C,EAAQs/C,SAAWtjB,EAEjC,GAAIsjB,GAAW12C,EACb,OAAOtB,EAAKtQ,MAAM0C,EAAOA,EAAQkP,GAGnC,IAKInU,EAAG8qD,EAAcC,EAASxzC,EAAMyzC,EALhCL,EAAY,GACZM,GAAe92C,EAAQ,IAAM02C,EAAU,GACvCK,EAAe,EACfC,EAAWlmD,EAAQkP,EAAQ,EAC3BmH,EAAIrW,EAIR,IAFA0lD,EAAUO,KAAkBr4C,EAAKyI,GAE5Btb,EAAI,EAAGA,EAAI6qD,EAAU,EAAG7qD,IAAK,CAChC,IAAIslD,EAAO,EACP8F,EAAO,EACPnzB,OAAI,EACJozB,EAAgBtmD,KAAK0D,OAAOzI,EAAI,GAAKirD,GAAe,EAAIhmD,EACxDqmD,EAAcvmD,KAAKC,IAAID,KAAK0D,OAAOzI,EAAI,GAAKirD,GAAe,EAAG92C,GAASlP,EACvEsmD,EAAiBD,EAAcD,EAEnC,IAAKpzB,EAAIozB,EAAepzB,EAAIqzB,EAAarzB,IACvCqtB,GAAQzyC,EAAKolB,GAAGrmB,EAChBw5C,GAAQv4C,EAAKolB,GAAGpmB,EAGlByzC,GAAQiG,EACRH,GAAQG,EACR,IAAIC,EAAYzmD,KAAK0D,MAAMzI,EAAIirD,GAAe,EAAIhmD,EAC9CwmD,EAAU1mD,KAAKC,IAAID,KAAK0D,OAAOzI,EAAI,GAAKirD,GAAe,EAAG92C,GAASlP,EACnEymD,EAAU74C,EAAKyI,GACfqwC,EAAUD,EAAQ95C,EAClBg6C,EAAUF,EAAQ75C,EAGtB,IAFAk5C,EAAUxzC,GAAQ,EAEb0gB,EAAIuzB,EAAWvzB,EAAIwzB,EAASxzB,KAC/B1gB,EAAO,GAAMxS,KAAK2W,KAAKiwC,EAAUrG,IAASzyC,EAAKolB,GAAGpmB,EAAI+5C,IAAYD,EAAU94C,EAAKolB,GAAGrmB,IAAMw5C,EAAOQ,KAEtFb,IACTA,EAAUxzC,EACVuzC,EAAej4C,EAAKolB,GACpB+yB,EAAQ/yB,GAIZ0yB,EAAUO,KAAkBJ,EAC5BxvC,EAAI0vC,EAIN,OADAL,EAAUO,KAAkBr4C,EAAKs4C,GAC1BR,EAgLakB,CAAeh5C,EAAM5N,EAAOkP,EAAOozB,EAAgBh8B,GAC/D,MAEF,IAAK,UACHo/C,EAjLV,SAA0B93C,EAAM5N,EAAOkP,EAAOozB,GAC5C,IAEIvnC,EAAG2iB,EAAO/Q,EAAGC,EAAGozC,EAAO6G,EAAUC,EAAUC,EAAYjmC,EAAMJ,EAF7D2/B,EAAO,EACPC,EAAS,EAEToF,EAAY,GACZQ,EAAWlmD,EAAQkP,EAAQ,EAC3B83C,EAAOp5C,EAAK5N,GAAO2M,EAEnBs6C,EADOr5C,EAAKs4C,GAAUv5C,EACVq6C,EAEhB,IAAKjsD,EAAIiF,EAAOjF,EAAIiF,EAAQkP,IAASnU,EAAG,CAEtC4R,IADA+Q,EAAQ9P,EAAK7S,IACF4R,EAAIq6C,GAAQC,EAAK3kB,EAC5B11B,EAAI8Q,EAAM9Q,EACV,IAAI6zC,EAAa,EAAJ9zC,EAEb,GAAI8zC,IAAWT,EACTpzC,EAAIkU,GACNA,EAAOlU,EACPi6C,EAAW9rD,GACF6R,EAAI8T,IACbA,EAAO9T,EACPk6C,EAAW/rD,GAGbslD,GAAQC,EAASD,EAAO3iC,EAAM/Q,KAAO2zC,MAChC,CACL,IAAI4G,EAAYnsD,EAAI,EAEpB,KAAK,OAAc8rD,MAAc,OAAcC,GAAW,CACxD,IAAIK,EAAqBrnD,KAAKC,IAAI8mD,EAAUC,GACxCM,EAAqBtnD,KAAKiC,IAAI8kD,EAAUC,GAExCK,IAAuBJ,GAAcI,IAAuBD,GAC9DxB,EAAU/qD,KAAKE,EAAcA,EAAc,GAAI+S,EAAKu5C,IAAsB,GAAI,CAC5Ex6C,EAAG0zC,KAIH+G,IAAuBL,GAAcK,IAAuBF,GAC9DxB,EAAU/qD,KAAKE,EAAcA,EAAc,GAAI+S,EAAKw5C,IAAsB,GAAI,CAC5Ez6C,EAAG0zC,KAKLtlD,EAAI,GAAKmsD,IAAcH,GACzBrB,EAAU/qD,KAAKiT,EAAKs5C,IAGtBxB,EAAU/qD,KAAK+iB,GACfsiC,EAAQS,EACRH,EAAS,EACTx/B,EAAOJ,EAAO9T,EACdi6C,EAAWC,EAAWC,EAAahsD,GAIvC,OAAO2qD,EAuHa2B,CAAiBz5C,EAAM5N,EAAOkP,EAAOozB,GACjD,MAEF,QACE,MAAM,IAAInI,MAAM,qCAAqChwB,OAAO7D,EAAQ4+C,UAAW,MAGnF14C,EAAQ6X,WAAaqhC,aAtErBV,GAAmB7lD,IAyEvBmoD,QAAS,SAAiBnoD,GACxB6lD,GAAmB7lD,KA+EvB,SAASooD,GAAWjtB,EAAU1Q,EAAOxP,EAAMzW,GACzC,IAAIA,EAAJ,CAIA,IAAI3D,EAAQ4pB,EAAM0Q,GACd1yB,EAAMwS,EAAKkgB,GAOf,MALiB,UAAbA,IACFt6B,GAAQ,QAAgBA,GACxB4H,GAAM,QAAgBA,IAGjB,CACL0yB,SAAUA,EACVt6B,MAAOA,EACP4H,IAAKA,IA2CT,SAAS4/C,GAAgBxnD,EAAO4H,EAAK2V,GACnC,KAAO3V,EAAM5H,EAAO4H,IAAO,CACzB,IAAI8V,EAAQH,EAAO3V,GAEnB,IAAK6S,MAAMiD,EAAM/Q,KAAO8N,MAAMiD,EAAM9Q,GAClC,MAIJ,OAAOhF,EAGT,SAAS6/C,GAASpxC,EAAG1E,EAAGzO,EAAMvD,GAC5B,OAAI0W,GAAK1E,EACAhS,EAAG0W,EAAEnT,GAAOyO,EAAEzO,IAGhBmT,EAAIA,EAAEnT,GAAQyO,EAAIA,EAAEzO,GAAQ,EAGrC,SAASwkD,GAAoBC,EAAU5jC,GACrC,IAAIxG,EAAS,GACT7Z,GAAQ,EASZ,OAPI,OAAQikD,IACVjkD,GAAQ,EACR6Z,EAASoqC,GAETpqC,EAnEJ,SAA6BoqC,EAAU5jC,GACrC,IAAI6jC,EAAQD,GAAY,GACpBE,EAAUD,EAAMj7C,EAChBA,OAAgB,IAAZk7C,EAAqB,KAAOA,EAChCC,EAAUF,EAAMh7C,EAChBA,OAAgB,IAAZk7C,EAAqB,KAAOA,EAEhCC,EAAahkC,EAAKxG,OAClBA,EAAS,GA4Bb,OA3BAwG,EAAKm9B,SAAS/lD,SAAQ,SAAU6sD,GAC9B,IAAIhoD,EAAQgoD,EAAMhoD,MACd4H,EAAMogD,EAAMpgD,IAChBA,EAAM4/C,GAAgBxnD,EAAO4H,EAAKmgD,GAClC,IAAIn+B,EAAQm+B,EAAW/nD,GACnBoa,EAAO2tC,EAAWngD,GAEZ,OAANgF,GACF2Q,EAAO5iB,KAAK,CACVgS,EAAGid,EAAMjd,EACTC,EAAGA,IAEL2Q,EAAO5iB,KAAK,CACVgS,EAAGyN,EAAKzN,EACRC,EAAGA,KAEU,OAAND,IACT4Q,EAAO5iB,KAAK,CACVgS,EAAGA,EACHC,EAAGgd,EAAMhd,IAEX2Q,EAAO5iB,KAAK,CACVgS,EAAGA,EACHC,EAAGwN,EAAKxN,QAIP2Q,EA+BI0qC,CAAoBN,EAAU5jC,GAGlCxG,EAAOtiB,OAAS,IAAIqmD,GAAY,CACrC/jC,OAAQA,EACRjX,QAAS,CACPo5C,QAAS,GAEXh8C,MAAOA,EACPwjB,UAAWxjB,IACR,KAGP,SAASwkD,GAAiBhtD,GACxB,OAAOA,IAA0B,IAAhBA,EAAOmsB,KAG1B,SAAS8gC,GAAeC,EAASlgD,EAAOmgD,GACtC,IAGIvtD,EAFAusB,EADS+gC,EAAQlgD,GACHmf,KACdihC,EAAU,CAACpgD,GAGf,IAAKmgD,EACH,OAAOhhC,EAGT,MAAgB,IAATA,IAA6C,IAA3BihC,EAAQ3tC,QAAQ0M,IAAc,CACrD,KAAK,OAAeA,GAClB,OAAOA,EAKT,KAFAvsB,EAASstD,EAAQ/gC,IAGf,OAAO,EAGT,GAAIvsB,EAAOwK,QACT,OAAO+hB,EAGTihC,EAAQ3tD,KAAK0sB,GACbA,EAAOvsB,EAAOusB,KAGhB,OAAO,EAGT,SAASkhC,GAAYxkC,EAAM7b,EAAOgH,GAChC,IAAImY,EA2DN,SAAyBtD,GACvB,IAAIzd,EAAUyd,EAAKzd,QACfkiD,EAAaliD,EAAQ+gB,KACrBA,GAAO,IAAA7hB,GAAegjD,GAAcA,EAAW1tD,OAAQ0tD,QAE9CtpD,IAATmoB,IACFA,IAAS/gB,EAAQ4c,iBAGnB,IAAa,IAATmE,GAA2B,OAATA,EACpB,OAAO,EAGT,IAAa,IAATA,EACF,MAAO,SAGT,OAAOA,EA5EIohC,CAAgB1kC,GAE3B,IAAI,IAAAhpB,GAASssB,GACX,OAAO5M,MAAM4M,EAAKvpB,QAAiBupB,EAGrC,IAAIvsB,EAAS4tD,WAAWrhC,GAExB,OAAI,OAAevsB,IAAWgF,KAAK0D,MAAM1I,KAAYA,EAOvD,SAA2B6tD,EAASzgD,EAAOpN,EAAQoU,GACjC,MAAZy5C,GAA+B,MAAZA,IACrB7tD,EAASoN,EAAQpN,GAGnB,GAAIA,IAAWoN,GAASpN,EAAS,GAAKA,GAAUoU,EAC9C,OAAO,EAGT,OAAOpU,EAfE8tD,CAAkBvhC,EAAK,GAAInf,EAAOpN,EAAQoU,GAG5C,CAAC,SAAU,QAAS,MAAO,QAAS,SAASyL,QAAQ0M,IAAS,GAAKA,EAiH5E,SAASwhC,GAAetrC,EAAQurC,EAAaC,GAG3C,IAFA,IAAIC,EAAY,GAEPh2B,EAAI,EAAGA,EAAI+1B,EAAW9tD,OAAQ+3B,IAAK,CAC1C,IAEIi2B,EAAaC,GAFNH,EAAW/1B,GAEW81B,EAAa,KAC1Cl/B,EAAQq/B,EAAWr/B,MACnBxP,EAAO6uC,EAAW7uC,KAClBsD,EAAQurC,EAAWvrC,MAEvB,MAAKA,GAASkM,GAASxP,GAIvB,GAAIwP,EACFo/B,EAAUG,QAAQzrC,QAIlB,GAFAH,EAAO5iB,KAAK+iB,IAEPtD,EACH,MAKNmD,EAAO5iB,KAAKC,MAAM2iB,EAAQyrC,GAG5B,SAASE,GAAUnlC,EAAM+kC,EAAaxuB,GACpC,IAAI5c,EAAQqG,EAAKqlC,YAAYN,EAAaxuB,GAE1C,IAAK5c,EACH,MAAO,GAST,IANA,IAAI2rC,EAAa3rC,EAAM4c,GACnB4mB,EAAWn9B,EAAKm9B,SAChB6G,EAAahkC,EAAKxG,OAClBqM,GAAQ,EACRxP,GAAO,EAEFrf,EAAI,EAAGA,EAAImmD,EAASjmD,OAAQF,IAAK,CACxC,IAAIwpB,EAAU28B,EAASnmD,GACnBuuD,EAAavB,EAAWxjC,EAAQvkB,OAAOs6B,GACvCivB,EAAYxB,EAAWxjC,EAAQ3c,KAAK0yB,GAExC,IAAI,QAAW+uB,EAAYC,EAAYC,GAAY,CACjD3/B,EAAQy/B,IAAeC,EACvBlvC,EAAOivC,IAAeE,EACtB,OAIJ,MAAO,CACL3/B,MAAOA,EACPxP,KAAMA,EACNsD,MAAOA,GAIX,IAAI8rC,GAAyB,WAC3B,SAASA,EAAU9hD,IACjB,OAAgBlL,KAAMgtD,GAEtBhtD,KAAKmQ,EAAIjF,EAAKiF,EACdnQ,KAAKoQ,EAAIlF,EAAKkF,EACdpQ,KAAK8gB,OAAS5V,EAAK4V,OA+BrB,OA5BA,OAAaksC,EAAW,CAAC,CACvBpuD,IAAK,cACL0C,MAAO,SAAqBwN,EAAKmf,EAAQ/iB,GACvC,IAAIiF,EAAInQ,KAAKmQ,EACTC,EAAIpQ,KAAKoQ,EACT0Q,EAAS9gB,KAAK8gB,OAMlB,OALAmN,EAASA,GAAU,CACjBzqB,MAAO,EACP4H,IAAK,EAAAiX,GAEPvT,EAAI0W,IAAIrV,EAAGC,EAAG0Q,EAAQmN,EAAO7iB,IAAK6iB,EAAOzqB,OAAO,IACxC0H,EAAK+iB,SAEd,CACDrvB,IAAK,cACL0C,MAAO,SAAqB4f,GAC1B,IAAI/Q,EAAInQ,KAAKmQ,EACTC,EAAIpQ,KAAKoQ,EACT0Q,EAAS9gB,KAAK8gB,OACdiD,EAAQ7C,EAAM6C,MAClB,MAAO,CACL5T,EAAGA,EAAI7M,KAAKmgB,IAAIM,GAASjD,EACzB1Q,EAAGA,EAAI9M,KAAKqgB,IAAII,GAASjD,EACzBiD,MAAOA,OAKNipC,EArCoB,GAwC7B,SAASC,GAAWvuD,GAClB,IAAIiE,EAAQjE,EAAOiE,MACfkoB,EAAOnsB,EAAOmsB,KACdtD,EAAO7oB,EAAO6oB,KAElB,IAAI,OAAesD,GACjB,OAoBJ,SAAwBloB,EAAO+I,GAC7B,IAAIS,EAAOxJ,EAAM2O,eAAe5F,GAEhC,OADcS,GAAQxJ,EAAM2f,iBAAiB5W,GAC5BS,EAAK6D,QAAU,KAvBvBk9C,CAAevqD,EAAOkoB,GAG/B,GAAa,UAATA,EACF,OA7JJ,SAAyBnsB,GACvB,IAAIsM,EAAQtM,EAAOsM,MACfU,EAAQhN,EAAOgN,MACf6b,EAAO7oB,EAAO6oB,KACdxG,EAAS,GACT2jC,EAAWn9B,EAAKm9B,SAChByI,EAAe5lC,EAAKxG,OACpBwrC,EAoBN,SAAuBvhD,EAAOU,GAI5B,IAHA,IAAI0hD,EAAQ,GACR96B,EAAQtnB,EAAM+B,wBAAwB,QAEjCxO,EAAI,EAAGA,EAAI+zB,EAAM7zB,OAAQF,IAAK,CACrC,IAAI4N,EAAOmmB,EAAM/zB,GAEjB,GAAI4N,EAAKT,QAAUA,EACjB,MAGGS,EAAK8H,QACRm5C,EAAMT,QAAQxgD,EAAK6D,SAIvB,OAAOo9C,EApCUC,CAAcriD,EAAOU,GACtC6gD,EAAWpuD,KAAK+sD,GAAoB,CAClC/6C,EAAG,KACHC,EAAGpF,EAAMwK,QACR+R,IAEH,IAAK,IAAIhpB,EAAI,EAAGA,EAAImmD,EAASjmD,OAAQF,IAGnC,IAFA,IAAIwpB,EAAU28B,EAASnmD,GAEdi4B,EAAIzO,EAAQvkB,MAAOgzB,GAAKzO,EAAQ3c,IAAKorB,IAC5C61B,GAAetrC,EAAQosC,EAAa32B,GAAI+1B,GAI5C,OAAO,IAAIzH,GAAY,CACrB/jC,OAAQA,EACRjX,QAAS,KAsIFwjD,CAAgB5uD,GAGzB,GAAa,UAATmsB,EACF,OAAO,EAGT,IAAIsgC,EAeN,SAAyBzsD,GAGvB,IAFYA,EAAOsM,OAAS,IAElB4f,yBACR,OAwBJ,SAAiClsB,GAC/B,IAAIsM,EAAQtM,EAAOsM,MACf6f,EAAOnsB,EAAOmsB,KACd/gB,EAAUkB,EAAMlB,QAChBrL,EAASuM,EAAMkI,YAAYzU,OAC3B+E,EAAQsG,EAAQqB,QAAUH,EAAMzF,IAAMyF,EAAMzH,IAE5CjC,EA1PN,SAAyBupB,EAAM7f,EAAOuP,GAapC,MAVa,UAATsQ,EACMtQ,EACU,QAATsQ,EACD7f,EAAMlB,QAAQqB,QAAUH,EAAMzH,IAAMyH,EAAMzF,KACzC,IAAAhH,GAASssB,GACVA,EAAKvpB,MAEL0J,EAAM2sB,eAgPJ41B,CAAgB1iC,EAAM7f,EAAOxH,GAErClF,EAAS,GAEb,GAAIwL,EAAQ0W,KAAK0J,SAAU,CACzB,IAAI1M,EAASxS,EAAM4f,yBAAyB,EAAGpnB,GAC/C,OAAO,IAAIwpD,GAAU,CACnB78C,EAAGqN,EAAOrN,EACVC,EAAGoN,EAAOpN,EACV0Q,OAAQ9V,EAAM8e,8BAA8BxoB,KAIhD,IAAK,IAAI/C,EAAI,EAAGA,EAAIE,IAAUF,EAC5BD,EAAOH,KAAK6M,EAAM4f,yBAAyBrsB,EAAG+C,IAGhD,OAAOhD,EAhDEkvD,CAAwB9uD,GAGjC,OAGF,SAA+BA,GAC7B,IAAI+uD,EAAgB/uD,EAAOsM,MACvBA,OAA0B,IAAlByiD,EAA2B,GAAKA,EAGxCh2B,EAtPN,SAAyB5M,EAAM7f,GAC7B,IAAIysB,EAAQ,KAYZ,MAVa,UAAT5M,EACF4M,EAAQzsB,EAAMwK,OACI,QAATqV,EACT4M,EAAQzsB,EAAMsK,KACL,IAAA/W,GAASssB,GAClB4M,EAAQzsB,EAAMkP,iBAAiB2Q,EAAKvpB,OAC3B0J,EAAM6R,eACf4a,EAAQzsB,EAAM6R,gBAGT4a,EAyOKi2B,CAFDhvD,EAAOmsB,KAEgB7f,GAElC,IAAI,OAAeysB,GAAQ,CACzB,IAAIrc,EAAapQ,EAAM8R,eACvB,MAAO,CACL3M,EAAGiL,EAAaqc,EAAQ,KACxBrnB,EAAGgL,EAAa,KAAOqc,GAI3B,OAAO,KAlBAk2B,CAAsBjvD,GAtBdkvD,CAAgBlvD,GAE/B,OAAIysD,aAAoB6B,GACf7B,EAGFD,GAAoBC,EAAU5jC,GAgEvC,SAASsmC,GAAU/+C,EAAKpQ,EAAQoX,GAC9B,IAAIxX,EAAS2uD,GAAWvuD,GAEpB6oB,EAAO7oB,EAAO6oB,KACdvc,EAAQtM,EAAOsM,MACfuC,EAAO7O,EAAO6O,KACdugD,EAAWvmC,EAAKzd,QAChBkiD,EAAa8B,EAASjjC,KACtB5kB,EAAQ6nD,EAASpnC,gBAEjBqnC,EAAQ/B,GAAc,GACtBgC,EAAcD,EAAME,MACpBA,OAAwB,IAAhBD,EAAyB/nD,EAAQ+nD,EACzCE,EAAcH,EAAMX,MACpBA,OAAwB,IAAhBc,EAAyBjoD,EAAQioD,EAEzC5vD,GAAUipB,EAAKxG,OAAOtiB,UACxB,OAASqQ,EAAKgH,GAclB,SAAgBhH,EAAKrI,GACnB,IAAI8gB,EAAO9gB,EAAI8gB,KACXjpB,EAASmI,EAAInI,OACb2vD,EAAQxnD,EAAIwnD,MACZb,EAAQ3mD,EAAI2mD,MACZt3C,EAAOrP,EAAIqP,KACX9K,EAAQvE,EAAIuE,MACZ8yB,EAAWvW,EAAKrgB,MAAQ,QAAUT,EAAI8G,KAC1CuB,EAAIgsB,OAEa,MAAbgD,GAAoBsvB,IAAUa,IAChCE,GAAar/C,EAAKxQ,EAAQwX,EAAKR,KAC/BuV,GAAK/b,EAAK,CACRyY,KAAMA,EACNjpB,OAAQA,EACR2H,MAAOgoD,EACPjjD,MAAOA,EACP8yB,SAAUA,IAEZhvB,EAAIksB,UACJlsB,EAAIgsB,OACJqzB,GAAar/C,EAAKxQ,EAAQwX,EAAKN,SAGjCqV,GAAK/b,EAAK,CACRyY,KAAMA,EACNjpB,OAAQA,EACR2H,MAAOmnD,EACPpiD,MAAOA,EACP8yB,SAAUA,IAEZhvB,EAAIksB,UA5CFozB,CAAOt/C,EAAK,CACVyY,KAAMA,EACNjpB,OAAQA,EACR2vD,MAAOA,EACPb,MAAOA,EACPt3C,KAAMA,EACN9K,MAAOA,EACPuC,KAAMA,KAER,OAAWuB,IAsCf,SAASq/C,GAAar/C,EAAKxQ,EAAQ+vD,GACjC,IAAI3J,EAAWpmD,EAAOomD,SAClB3jC,EAASziB,EAAOyiB,OAChBqM,GAAQ,EACRkhC,GAAW,EACfx/C,EAAI0sB,YAEJ,IACI+yB,EADAC,EAActuD,EAA2BwkD,GAG7C,IACE,IAAK8J,EAAYptD,MAAOmtD,EAAUC,EAAY5tD,KAAKS,MAAO,CACxD,IAAI0mB,EAAUwmC,EAAQjtD,MAClBkC,EAAQukB,EAAQvkB,MAChB4H,EAAM2c,EAAQ3c,IACdud,EAAa5H,EAAOvd,GAEpBolB,EAAY7H,EAAOiqC,GAAgBxnD,EAAO4H,EAAK2V,IAE/CqM,GACFte,EAAI2sB,OAAO9S,EAAWxY,EAAGwY,EAAWvY,GACpCgd,GAAQ,IAERte,EAAI4sB,OAAO/S,EAAWxY,EAAGk+C,GACzBv/C,EAAI4sB,OAAO/S,EAAWxY,EAAGwY,EAAWvY,KAGtCk+C,IAAahwD,EAAOwkD,YAAYh0C,EAAKiZ,EAAS,CAC5CnP,KAAM01C,KAINx/C,EAAImvC,YAEJnvC,EAAI4sB,OAAO9S,EAAUzY,EAAGk+C,IAG5B,MAAO3sD,GACP8sD,EAAY7uD,EAAE+B,GACd,QACA8sD,EAAYhtD,IAGdsN,EAAI4sB,OAAOp9B,EAAO8uB,QAAQjd,EAAGk+C,GAC7Bv/C,EAAImvC,YACJnvC,EAAIuG,OAGN,SAASwV,GAAK/b,EAAKrI,GACjB,IASIgoD,EATAlnC,EAAO9gB,EAAI8gB,KACXjpB,EAASmI,EAAInI,OACbw/B,EAAWr3B,EAAIq3B,SACf73B,EAAQQ,EAAIR,MACZ+E,EAAQvE,EAAIuE,MAEZ05C,EAroBN,SAAmBn9B,EAAMjpB,EAAQw/B,GAC/B,IAMI4wB,EANAhK,EAAWn9B,EAAKm9B,SAChB3jC,EAASwG,EAAKxG,OACd4tC,EAAUrwD,EAAOyiB,OACjBqd,EAAQ,GAERwwB,EAAc1uD,EAA2BwkD,GAG7C,IACE,IAAKkK,EAAYxtD,MAAOstD,EAAUE,EAAYhuD,KAAKS,MAAO,CACxD,IAAI0mB,EAAU2mC,EAAQptD,MAClBkC,EAAQukB,EAAQvkB,MAChB4H,EAAM2c,EAAQ3c,IAClBA,EAAM4/C,GAAgBxnD,EAAO4H,EAAK2V,GAElC,IAAIkN,EAAS88B,GAAWjtB,EAAU/c,EAAOvd,GAAQud,EAAO3V,GAAM2c,EAAQ5gB,MAEtE,GAAK7I,EAAOomD,SAAZ,CAUA,IAGImK,EADAC,EAAc5uD,GAFG,QAAe5B,EAAQ2vB,IAK5C,IACE,IAAK6gC,EAAY1tD,MAAOytD,EAAUC,EAAYluD,KAAKS,MAAO,CACxD,IAOI0tD,EAPAC,EAAMH,EAAQvtD,MAEd2tD,EAAYlE,GAAWjtB,EAAU6wB,EAAQK,EAAIxrD,OAAQmrD,EAAQK,EAAI5jD,KAAM4jD,EAAI7nD,MAI3E+nD,EAAchvD,GAFA,QAAc6nB,EAAShH,EAAQkuC,IAKjD,IACE,IAAKC,EAAY9tD,MAAO2tD,EAAUG,EAAYtuD,KAAKS,MAAO,CACxD,IAAI8tD,EAAaJ,EAAQztD,MACzB88B,EAAMjgC,KAAK,CACTO,OAAQywD,EACR7wD,OAAQ0wD,EACRxrD,OAAO,OAAgB,GAAIs6B,EAAUmtB,GAASh9B,EAAQghC,EAAW,QAAS3rD,KAAKiC,MAC/E6F,KAAK,OAAgB,GAAI0yB,EAAUmtB,GAASh9B,EAAQghC,EAAW,MAAO3rD,KAAKC,SAG/E,MAAO7B,GACPwtD,EAAYvvD,EAAE+B,GACd,QACAwtD,EAAY1tD,MAGhB,MAAOE,GACPotD,EAAYnvD,EAAE+B,GACd,QACAotD,EAAYttD,UA5CZ48B,EAAMjgC,KAAK,CACTO,OAAQqpB,EACRzpB,OAAQ2vB,EACRzqB,MAAOud,EAAOvd,GACd4H,IAAK2V,EAAO3V,MA2ClB,MAAO1J,GACPktD,EAAYjvD,EAAE+B,GACd,QACAktD,EAAYptD,IAGd,OAAO48B,EA6jBQ+mB,CAAU59B,EAAMjpB,EAAQw/B,GAEnCsxB,EAAclvD,EAA2BwkD,GAG7C,IACE,IAAK0K,EAAYhuD,MAAOqtD,EAAUW,EAAYxuD,KAAKS,MAAO,CACxD,IAAIguD,EAAgBZ,EAAQntD,MACxBguD,EAAMD,EAAc3wD,OACpBswD,EAAMK,EAAc/wD,OACpBkF,EAAQ6rD,EAAc7rD,MACtB4H,EAAMikD,EAAcjkD,IACpBmkD,EAAaD,EAAI/oC,MAEjBipC,GADJD,OAA4B,IAAfA,EAAwB,GAAKA,GACH7oC,gBACnCA,OAA4C,IAA1B8oC,EAAmCvpD,EAAQupD,EAC7DC,GAAsB,IAAXnxD,EACfwQ,EAAIgsB,OACJhsB,EAAI2X,UAAYC,EAChBgpC,GAAW5gD,EAAK9D,EAAOykD,GAAY1E,GAAWjtB,EAAUt6B,EAAO4H,IAC/D0D,EAAI0sB,YACJ,IAAI8yB,IAAa/mC,EAAKu7B,YAAYh0C,EAAKwgD,GACnCnoD,OAAO,EAEX,GAAIsoD,EAAU,CACRnB,EACFx/C,EAAImvC,YAEJ0R,GAAmB7gD,EAAKxQ,EAAQ8M,EAAK0yB,GAGvC,IAAI8xB,IAAetxD,EAAOwkD,YAAYh0C,EAAKkgD,EAAK,CAC9Cp2C,KAAM01C,EACNnjD,SAAS,KAEXhE,EAAOmnD,GAAYsB,IAGjBD,GAAmB7gD,EAAKxQ,EAAQkF,EAAOs6B,GAI3ChvB,EAAImvC,YACJnvC,EAAI+b,KAAK1jB,EAAO,UAAY,WAC5B2H,EAAIksB,WAEN,MAAOt5B,GACP0tD,EAAYzvD,EAAE+B,GACd,QACA0tD,EAAY5tD,KAIhB,SAASkuD,GAAW5gD,EAAK9D,EAAOijB,GAC9B,IAAI4hC,EAAwB7kD,EAAMrI,MAAMoT,UACpCT,EAAMu6C,EAAsBv6C,IAC5BE,EAASq6C,EAAsBr6C,OAE/Bs6C,EAAS7hC,GAAU,GACnB6P,EAAWgyB,EAAOhyB,SAClBt6B,EAAQssD,EAAOtsD,MACf4H,EAAM0kD,EAAO1kD,IAEA,MAAb0yB,IACFhvB,EAAI0sB,YACJ1sB,EAAI84C,KAAKpkD,EAAO8R,EAAKlK,EAAM5H,EAAOgS,EAASF,GAC3CxG,EAAIuG,QAIR,SAASs6C,GAAmB7gD,EAAKxQ,EAAQ4iB,EAAO4c,GAC9C,IAAIiyB,EAAoBzxD,EAAOsuD,YAAY1rC,EAAO4c,GAE9CiyB,GACFjhD,EAAI4sB,OAAOq0B,EAAkB5/C,EAAG4/C,EAAkB3/C,GAItD,IAAI1E,GAAQ,CACVkC,GAAI,SACJoiD,oBAAqB,SAA6BrtD,EAAOstD,EAAOnmD,GAC9D,IAEIqC,EAAM5N,EAAGgpB,EAAM7oB,EAFfgU,GAAS/P,EAAMyO,KAAKC,UAAY,IAAI5S,OACpCmtD,EAAU,GAGd,IAAKrtD,EAAI,EAAGA,EAAImU,IAASnU,EAGvBG,EAAS,MADT6oB,GADApb,EAAOxJ,EAAM2O,eAAe/S,IAChByR,UAGAuX,EAAKzd,SAAWyd,aAAgBu9B,KAC1CpmD,EAAS,CACPoK,QAASnG,EAAM2f,iBAAiB/jB,GAChCmN,MAAOnN,EACPssB,KAAMkhC,GAAYxkC,EAAMhpB,EAAGmU,GAC3B/P,MAAOA,EACP4K,KAAMpB,EAAKc,WAAWnD,QAAQ6G,UAC9B3F,MAAOmB,EAAKQ,OACZ4a,KAAMA,IAIVpb,EAAK+jD,QAAUxxD,EACfktD,EAAQztD,KAAKO,GAGf,IAAKH,EAAI,EAAGA,EAAImU,IAASnU,GACvBG,EAASktD,EAAQrtD,MAEc,IAAhBG,EAAOmsB,OAItBnsB,EAAOmsB,KAAO8gC,GAAeC,EAASrtD,EAAGuL,EAAQ+hD,aAGrDsE,WAAY,SAAoBxtD,EAAOstD,EAAOnmD,GAK5C,IAJA,IAAIzF,EAA4B,eAArByF,EAAQsmD,SACf5kD,EAAW7I,EAAMm6B,+BACjBhnB,EAAOnT,EAAMoT,UAERxX,EAAIiN,EAAS/M,OAAS,EAAGF,GAAK,IAAKA,EAAG,CAC7C,IAAIG,EAAS8M,EAASjN,GAAG2xD,QAEpBxxD,IAILA,EAAO6oB,KAAKsB,oBAAoB/S,EAAMpX,EAAO6O,MAEzClJ,GAAQ3F,EAAOmsB,MACjBgjC,GAAUlrD,EAAMmM,IAAKpQ,EAAQoX,MAInCu6C,mBAAoB,SAA4B1tD,EAAOstD,EAAOnmD,GAC5D,GAAyB,uBAArBA,EAAQsmD,SAMZ,IAFA,IAAI5kD,EAAW7I,EAAMm6B,+BAEZv+B,EAAIiN,EAAS/M,OAAS,EAAGF,GAAK,IAAKA,EAAG,CAC7C,IAAIG,EAAS8M,EAASjN,GAAG2xD,QAErBxE,GAAiBhtD,IACnBmvD,GAAUlrD,EAAMmM,IAAKpQ,EAAQiE,EAAMoT,aAIzCu6C,kBAAmB,SAA2B3tD,EAAOqW,EAAMlP,GACzD,IAAIpL,EAASsa,EAAK7M,KAAK+jD,QAElBxE,GAAiBhtD,IAAgC,sBAArBoL,EAAQsmD,UAIzCvC,GAAUlrD,EAAMmM,IAAKpQ,EAAQiE,EAAMoT,YAErCkG,SAAU,CACR4vC,WAAW,EACXuE,SAAU,sBAIVG,GAAa,SAAoBC,EAAWxzB,GAC9C,IAAIyzB,EAAuBD,EAAUE,UACjCA,OAAqC,IAAzBD,EAAkCzzB,EAAWyzB,EACzDE,EAAsBH,EAAUI,SAChCA,OAAmC,IAAxBD,EAAiC3zB,EAAW2zB,EAO3D,OALIH,EAAUK,gBACZH,EAAYptD,KAAKC,IAAImtD,EAAW1zB,GAChC4zB,EAAWJ,EAAUM,iBAAmBxtD,KAAKC,IAAIqtD,EAAU5zB,IAGtD,CACL4zB,SAAUA,EACVF,UAAWA,EACXK,WAAYztD,KAAKiC,IAAIy3B,EAAU0zB,KAQ/BM,GAAsB,SAAUC,IAClC,OAAUD,EAAQC,GAElB,IAAIC,EAAWlyD,EAAagyD,GAE5B,SAASA,EAAO9nD,GACd,IAAIioD,EA2BJ,OAzBA,OAAgBnxD,KAAMgxD,IAEtBG,EAAUD,EAASxxD,KAAKM,OAChBoxD,QAAS,EACjBD,EAAQE,eAAiB,GACzBF,EAAQG,aAAe,KACvBH,EAAQI,cAAe,EACvBJ,EAAQxuD,MAAQuG,EAAOvG,MACvBwuD,EAAQrnD,QAAUZ,EAAOY,QACzBqnD,EAAQriD,IAAM5F,EAAO4F,IACrBqiD,EAAQK,iBAAc9uD,EACtByuD,EAAQM,iBAAc/uD,EACtByuD,EAAQO,gBAAahvD,EACrByuD,EAAQ1sC,eAAY/hB,EACpByuD,EAAQ3sC,cAAW9hB,EACnByuD,EAAQ77C,SAAM5S,EACdyuD,EAAQ37C,YAAS9S,EACjByuD,EAAQ17C,UAAO/S,EACfyuD,EAAQ57C,WAAQ7S,EAChByuD,EAAQ1zC,YAAS/a,EACjByuD,EAAQzzC,WAAQhb,EAChByuD,EAAQpgC,cAAWruB,EACnByuD,EAAQ1gC,cAAW/tB,EACnByuD,EAAQnrC,YAAStjB,EACjByuD,EAAQ96B,cAAW3zB,EACZyuD,EAofT,OAjfA,OAAaH,EAAQ,CAAC,CACpBpyD,IAAK,SACL0C,MAAO,SAAgBkjB,EAAUC,EAAWkO,GAC1C3yB,KAAKwkB,SAAWA,EAChBxkB,KAAKykB,UAAYA,EACjBzkB,KAAK+wB,SAAW4B,EAChB3yB,KAAK+yB,gBACL/yB,KAAK2xD,cACL3xD,KAAK8zB,QAEN,CACDl1B,IAAK,gBACL0C,MAAO,WACDtB,KAAK8c,gBACP9c,KAAK0d,MAAQ1d,KAAKwkB,SAClBxkB,KAAKyV,KAAOzV,KAAK+wB,SAAStb,KAC1BzV,KAAKuV,MAAQvV,KAAK0d,QAElB1d,KAAKyd,OAASzd,KAAKykB,UACnBzkB,KAAKsV,IAAMtV,KAAK+wB,SAASzb,IACzBtV,KAAKwV,OAASxV,KAAKyd,UAGtB,CACD7e,IAAK,cACL0C,MAAO,WACL,IAAIswD,EAAU5xD,KAEVwwD,EAAYxwD,KAAK8J,QAAQmJ,QAAU,GACnCu+C,GAAc,OAAShB,EAAUpqC,eAAgB,CAACpmB,KAAK2C,OAAQ3C,OAAS,GAExEwwD,EAAUzyD,SACZyzD,EAAcA,EAAYzzD,QAAO,SAAUqG,GACzC,OAAOosD,EAAUzyD,OAAOqG,EAAMwtD,EAAQjvD,MAAMyO,UAI5Co/C,EAAU52C,OACZ43C,EAAcA,EAAY53C,MAAK,SAAUC,EAAG1E,GAC1C,OAAOq7C,EAAU52C,KAAKC,EAAG1E,EAAGy8C,EAAQjvD,MAAMyO,UAI1CpR,KAAK8J,QAAQqB,SACfqmD,EAAYrmD,UAGdnL,KAAKwxD,YAAcA,IAEpB,CACD5yD,IAAK,MACL0C,MAAO,WACL,IAAIwI,EAAU9J,KAAK8J,QACfgF,EAAM9O,KAAK8O,IAEf,GAAKhF,EAAQmgB,QAAb,CAKA,IAUIvM,EAAOD,EAVP+yC,EAAY1mD,EAAQmJ,OACpB4+C,GAAY,OAAOrB,EAAUlgC,MAC7B0M,EAAW60B,EAAUhnD,KAErByqB,EAAct1B,KAAK8xD,sBAEnBC,EAAcxB,GAAWC,EAAWxzB,GACpC4zB,EAAWmB,EAAYnB,SACvBG,EAAagB,EAAYhB,WAG7BjiD,EAAIwhB,KAAOuhC,EAAU16B,OAEjBn3B,KAAK8c,gBACPY,EAAQ1d,KAAKwkB,SACb/G,EAASzd,KAAKgyD,SAAS18B,EAAa0H,EAAU4zB,EAAUG,GAAc,KAEtEtzC,EAASzd,KAAKykB,UACd/G,EAAQ1d,KAAKiyD,SAAS38B,EAAa0H,EAAU4zB,EAAUG,GAAc,IAGvE/wD,KAAK0d,MAAQpa,KAAKC,IAAIma,EAAO5T,EAAQ0a,UAAYxkB,KAAKwkB,UACtDxkB,KAAKyd,OAASna,KAAKC,IAAIka,EAAQ3T,EAAQ2a,WAAazkB,KAAKykB,gBA1BvDzkB,KAAK0d,MAAQ1d,KAAKyd,OAAS,IA4B9B,CACD7e,IAAK,WACL0C,MAAO,SAAkBg0B,EAAa0H,EAAU4zB,EAAUG,GACxD,IAAIjiD,EAAM9O,KAAK8O,IACX0V,EAAWxkB,KAAKwkB,SAChBkK,EAAU1uB,KAAK8J,QAAQmJ,OAAOyb,QAC9BwjC,EAAWlyD,KAAKqxD,eAAiB,GACjCK,EAAa1xD,KAAK0xD,WAAa,CAAC,GAChCnhC,EAAawgC,EAAariC,EAC1ByjC,EAAc78B,EAClBxmB,EAAI2qB,UAAY,OAChB3qB,EAAIgrB,aAAe,SACnB,IAAIs4B,GAAO,EACP98C,GAAOib,EAoBX,OAnBAvwB,KAAKwxD,YAAY7yD,SAAQ,SAAUooB,EAAYxoB,GAC7C,IAAI8zD,EAAYzB,EAAW5zB,EAAW,EAAIluB,EAAIwjD,YAAYvrC,EAAWP,MAAM9I,OAEjE,IAANnf,GAAWmzD,EAAWA,EAAWjzD,OAAS,GAAK4zD,EAAY,EAAI3jC,EAAUlK,KAC3E2tC,GAAe5hC,EACfmhC,EAAWA,EAAWjzD,QAAUF,EAAI,EAAI,EAAI,IAAM,EAClD+W,GAAOib,EACP6hC,KAGFF,EAAS3zD,GAAK,CACZkX,KAAM,EACNH,IAAKA,EACL88C,IAAKA,EACL10C,MAAO20C,EACP50C,OAAQszC,GAEVW,EAAWA,EAAWjzD,OAAS,IAAM4zD,EAAY3jC,KAE5CyjC,IAER,CACDvzD,IAAK,WACL0C,MAAO,SAAkBg0B,EAAa0H,EAAU4zB,EAAUG,GACxD,IAAIjiD,EAAM9O,KAAK8O,IACX2V,EAAYzkB,KAAKykB,UACjBiK,EAAU1uB,KAAK8J,QAAQmJ,OAAOyb,QAC9BwjC,EAAWlyD,KAAKqxD,eAAiB,GACjCI,EAAczxD,KAAKyxD,YAAc,GACjCc,EAAc9tC,EAAY6Q,EAC1Bk9B,EAAa9jC,EACb+jC,EAAkB,EAClBC,EAAmB,EACnBj9C,EAAO,EACPk9C,EAAM,EA8BV,OA7BA3yD,KAAKwxD,YAAY7yD,SAAQ,SAAUooB,EAAYxoB,GAC7C,IAAI8zD,EAAYzB,EAAW5zB,EAAW,EAAIluB,EAAIwjD,YAAYvrC,EAAWP,MAAM9I,MAEvEnf,EAAI,GAAKm0D,EAAmB3B,EAAa,EAAIriC,EAAU6jC,IACzDC,GAAcC,EAAkB/jC,EAChC+iC,EAAYtzD,KAAK,CACfuf,MAAO+0C,EACPh1C,OAAQi1C,IAEVj9C,GAAQg9C,EAAkB/jC,EAC1BikC,IACAF,EAAkBC,EAAmB,GAGvCR,EAAS3zD,GAAK,CACZkX,KAAMA,EACNH,IAAKo9C,EACLC,IAAKA,EACLj1C,MAAO20C,EACP50C,OAAQszC,GAEV0B,EAAkBnvD,KAAKiC,IAAIktD,EAAiBJ,GAC5CK,GAAoB3B,EAAariC,KAEnC8jC,GAAcC,EACdhB,EAAYtzD,KAAK,CACfuf,MAAO+0C,EACPh1C,OAAQi1C,IAEHF,IAER,CACD5zD,IAAK,iBACL0C,MAAO,WACL,GAAKtB,KAAK8J,QAAQmgB,QAAlB,CAIA,IAAIqL,EAAct1B,KAAK8xD,sBAEnBI,EAAWlyD,KAAKqxD,eAChBuB,EAAkB5yD,KAAK8J,QACvBslB,EAAQwjC,EAAgBxjC,MACxBV,EAAUkkC,EAAgB3/C,OAAOyb,QACjCmkC,EAAMD,EAAgBC,IACtBC,GAAY,QAAcD,EAAK7yD,KAAKyV,KAAMzV,KAAK0d,OAEnD,GAAI1d,KAAK8c,eAAgB,CACvB,IAKIi2C,EALAX,EAAM,EAEN38C,GAAO,OAAe2Z,EAAOpvB,KAAKyV,KAAOiZ,EAAS1uB,KAAKuV,MAAQvV,KAAK0xD,WAAWU,IAE/EY,EAAc9yD,EAA2BgyD,GAG7C,IACE,IAAKc,EAAY5xD,MAAO2xD,EAAUC,EAAYpyD,KAAKS,MAAO,CACxD,IAAI4xD,EAASF,EAAQzxD,MAEjB8wD,IAAQa,EAAOb,MACjBA,EAAMa,EAAOb,IACb38C,GAAO,OAAe2Z,EAAOpvB,KAAKyV,KAAOiZ,EAAS1uB,KAAKuV,MAAQvV,KAAK0xD,WAAWU,KAGjFa,EAAO39C,KAAOtV,KAAKsV,IAAMggB,EAAc5G,EACvCukC,EAAOx9C,KAAOq9C,EAAUI,WAAWJ,EAAU3iD,EAAEsF,GAAOw9C,EAAOv1C,OAC7DjI,GAAQw9C,EAAOv1C,MAAQgR,GAEzB,MAAOhtB,GACPsxD,EAAYrzD,EAAE+B,GACd,QACAsxD,EAAYxxD,SAET,CACL,IAKI2xD,EALAR,EAAM,EAENr9C,GAAM,OAAe8Z,EAAOpvB,KAAKsV,IAAMggB,EAAc5G,EAAS1uB,KAAKwV,OAASxV,KAAKyxD,YAAYkB,GAAKl1C,QAElG21C,EAAclzD,EAA2BgyD,GAG7C,IACE,IAAKkB,EAAYhyD,MAAO+xD,EAAUC,EAAYxyD,KAAKS,MAAO,CACxD,IAAIgyD,EAAUF,EAAQ7xD,MAElB+xD,EAAQV,MAAQA,IAClBA,EAAMU,EAAQV,IACdr9C,GAAM,OAAe8Z,EAAOpvB,KAAKsV,IAAMggB,EAAc5G,EAAS1uB,KAAKwV,OAASxV,KAAKyxD,YAAYkB,GAAKl1C,SAGpG41C,EAAQ/9C,IAAMA,EACd+9C,EAAQ59C,MAAQzV,KAAKyV,KAAOiZ,EAC5B2kC,EAAQ59C,KAAOq9C,EAAUI,WAAWJ,EAAU3iD,EAAEkjD,EAAQ59C,MAAO49C,EAAQ31C,OACvEpI,GAAO+9C,EAAQ51C,OAASiR,GAE1B,MAAOhtB,GACP0xD,EAAYzzD,EAAE+B,GACd,QACA0xD,EAAY5xD,SAIjB,CACD5C,IAAK,eACL0C,MAAO,WACL,MAAiC,QAA1BtB,KAAK8J,QAAQ2mB,UAAgD,WAA1BzwB,KAAK8J,QAAQ2mB,WAExD,CACD7xB,IAAK,OACL0C,MAAO,WACL,GAAItB,KAAK8J,QAAQmgB,QAAS,CACxB,IAAInb,EAAM9O,KAAK8O,KACf,OAASA,EAAK9O,MAEdA,KAAKqkD,SAEL,OAAWv1C,MAGd,CACDlQ,IAAK,QACL0C,MAAO,WACL,IAeIgyD,EAfAC,EAAUvzD,KAEVkL,EAAOlL,KAAK8J,QACZ2nD,EAAczxD,KAAKyxD,YACnBC,EAAa1xD,KAAK0xD,WAClB5iD,EAAM9O,KAAK8O,IACXsgB,EAAQlkB,EAAKkkB,MACbohC,EAAYtlD,EAAK+H,OACjBugD,EAAe,EAAAvrD,EAAA,MACf6qD,GAAY,QAAc5nD,EAAK2nD,IAAK7yD,KAAKyV,KAAMzV,KAAK0d,OACpDm0C,GAAY,OAAOrB,EAAUlgC,MAC7BmjC,EAAYjD,EAAUvqD,MACtByoB,EAAU8hC,EAAU9hC,QACpBsO,EAAW60B,EAAUhnD,KACrB6oD,EAAe12B,EAAW,EAE9Bh9B,KAAKw8B,YACL1tB,EAAI2qB,UAAYq5B,EAAUr5B,UAAU,QACpC3qB,EAAIgrB,aAAe,SACnBhrB,EAAI+X,UAAY,GAChB/X,EAAIwhB,KAAOuhC,EAAU16B,OAErB,IAAIw8B,EAAepD,GAAWC,EAAWxzB,GACrC4zB,EAAW+C,EAAa/C,SACxBF,EAAYiD,EAAajD,UACzBK,EAAa4C,EAAa5C,WAgE1Bj0C,EAAe9c,KAAK8c,eAEpBwY,EAAct1B,KAAK8xD,sBAGrBwB,EADEx2C,EACO,CACP3M,GAAG,OAAeif,EAAOpvB,KAAKyV,KAAOiZ,EAAS1uB,KAAKuV,MAAQm8C,EAAW,IACtEthD,EAAGpQ,KAAKsV,IAAMoZ,EAAU4G,EACxB/N,KAAM,GAGC,CACPpX,EAAGnQ,KAAKyV,KAAOiZ,EACfte,GAAG,OAAegf,EAAOpvB,KAAKsV,IAAMggB,EAAc5G,EAAS1uB,KAAKwV,OAASi8C,EAAY,GAAGh0C,QACxF8J,KAAM,IAIV,QAAsBvnB,KAAK8O,IAAK5D,EAAK0oD,eACrC,IAAIrjC,EAAawgC,EAAariC,EAC9B1uB,KAAKwxD,YAAY7yD,SAAQ,SAAUooB,EAAYxoB,GAC7CuQ,EAAI6X,YAAcI,EAAW0sC,WAAaA,EAC1C3kD,EAAI2X,UAAYM,EAAW0sC,WAAaA,EACxC,IAAII,EAAY/kD,EAAIwjD,YAAYvrC,EAAWP,MAAM9I,MAC7C+b,EAAYq5B,EAAUr5B,UAAU1S,EAAW0S,YAAc1S,EAAW0S,UAAY+2B,EAAU/2B,YAC1F/b,EAAQkzC,EAAW8C,EAAeG,EAClC1jD,EAAImjD,EAAOnjD,EACXC,EAAIkjD,EAAOljD,EACf0iD,EAAUgB,SAASP,EAAQ71C,OAEvBZ,EACEve,EAAI,GAAK4R,EAAIuN,EAAQgR,EAAU6kC,EAAQh+C,QACzCnF,EAAIkjD,EAAOljD,GAAKmgB,EAChB+iC,EAAO/rC,OACPpX,EAAImjD,EAAOnjD,GAAI,OAAeif,EAAOmkC,EAAQ99C,KAAOiZ,EAAS6kC,EAAQh+C,MAAQm8C,EAAW4B,EAAO/rC,QAExFhpB,EAAI,GAAK6R,EAAImgB,EAAagjC,EAAQ/9C,SAC3CrF,EAAImjD,EAAOnjD,EAAIA,EAAIshD,EAAY6B,EAAO/rC,MAAM7J,MAAQgR,EACpD4kC,EAAO/rC,OACPnX,EAAIkjD,EAAOljD,GAAI,OAAegf,EAAOmkC,EAAQj+C,IAAMggB,EAAc5G,EAAS6kC,EAAQ/9C,OAASi8C,EAAY6B,EAAO/rC,MAAM9J,SArGpG,SAAuBtN,EAAGC,EAAG2W,GAC/C,KAAI9I,MAAM2yC,IAAaA,GAAY,GAAK3yC,MAAMyyC,IAAcA,EAAY,GAAxE,CAIA5hD,EAAIgsB,OACJ,IAAIjU,GAAY,IAAA7d,GAAe+d,EAAWF,UAAW,GASrD,GARA/X,EAAI2X,WAAY,IAAAzd,GAAe+d,EAAWN,UAAW+sC,GACrD1kD,EAAIqzC,SAAU,IAAAn5C,GAAe+d,EAAWo7B,QAAS,QACjDrzC,EAAIysB,gBAAiB,IAAAvyB,GAAe+d,EAAWwU,eAAgB,GAC/DzsB,EAAI6xC,UAAW,IAAA33C,GAAe+d,EAAW45B,SAAU,SACnD7xC,EAAI+X,UAAYA,EAChB/X,EAAI6X,aAAc,IAAA3d,GAAe+d,EAAWJ,YAAa6sC,GACzD1kD,EAAIwsB,aAAY,IAAAtyB,GAAe+d,EAAWgtC,SAAU,KAEhDvD,EAAUK,cAAe,CAC3B,IAAImD,EAAc,CAChBlzC,OAAQ4vC,EAAYptD,KAAK2wD,MAAQ,EACjC5tC,WAAYU,EAAWV,WACvBlE,SAAU4E,EAAW5E,SACrByD,YAAaiB,GAEX1B,EAAU2tC,EAAUoB,MAAM/jD,EAAGygD,EAAW,GACxCxrC,EAAUhV,EAAIsjD,GAClB,QAAgB5kD,EAAKklD,EAAa7uC,EAASC,EAASorC,EAAUM,iBAAmBF,OAC5E,CACL,IAAIuD,EAAU/jD,EAAI9M,KAAKiC,KAAKy3B,EAAW0zB,GAAa,EAAG,GACnD0D,EAAWtB,EAAUI,WAAW/iD,EAAGygD,GACnCxS,GAAe,QAAcr3B,EAAWq3B,cAC5CtvC,EAAI0sB,YAEA59B,OAAOgM,OAAOw0C,GAAcrO,MAAK,SAAU/mC,GAC7C,OAAa,IAANA,MAEP,QAAmB8F,EAAK,CACtBqB,EAAGikD,EACHhkD,EAAG+jD,EACHp8B,EAAG64B,EACH54B,EAAG04B,EACH5vC,OAAQs9B,IAGVtvC,EAAI84C,KAAKwM,EAAUD,EAASvD,EAAUF,GAGxC5hD,EAAI+b,OAEc,IAAdhE,GACF/X,EAAI6sB,SAIR7sB,EAAIksB,WAqDJq5B,CADYvB,EAAU3iD,EAAEA,GACHC,EAAG2W,GACxB5W,GAAI,QAAOspB,EAAWtpB,EAAIygD,EAAW8C,EAAc52C,EAAe3M,EAAIuN,EAAQ61C,EAAQh+C,MAAOrK,EAAK2nD,KAnDrF,SAAkB1iD,EAAGC,EAAG2W,IACrC,OAAWjY,EAAKiY,EAAWP,KAAMrW,EAAGC,EAAI2gD,EAAa,EAAGc,EAAW,CACjEyC,cAAevtC,EAAW9S,OAC1BwlB,UAAWq5B,EAAUr5B,UAAU1S,EAAW0S,aAiD5C86B,CAASzB,EAAU3iD,EAAEA,GAAIC,EAAG2W,GAExBjK,EACFw2C,EAAOnjD,GAAKuN,EAAQgR,EAEpB4kC,EAAOljD,GAAKmgB,MAGhB,QAAqBvwB,KAAK8O,IAAK5D,EAAK0oD,iBAErC,CACDh1D,IAAK,YACL0C,MAAO,WACL,IAAI4J,EAAOlL,KAAK8J,QACZsrB,EAAYlqB,EAAKsW,MACjBgzC,GAAY,OAAOp/B,EAAU9E,MAC7BmkC,GAAe,OAAUr/B,EAAU1G,SAEvC,GAAK0G,EAAUnL,QAAf,CAIA,IAKI7Z,EALA0iD,GAAY,QAAc5nD,EAAK2nD,IAAK7yD,KAAKyV,KAAMzV,KAAK0d,OACpD5O,EAAM9O,KAAK8O,IACX2hB,EAAW2E,EAAU3E,SACrBijC,EAAec,EAAU3pD,KAAO,EAChC6pD,EAA6BD,EAAan/C,IAAMo+C,EAEhDj+C,EAAOzV,KAAKyV,KACZ+O,EAAWxkB,KAAK0d,MAEpB,GAAI1d,KAAK8c,eACP0H,EAAWlhB,KAAKiC,IAAInH,MAAMkF,MAAM,OAAmBtD,KAAK0xD,aACxDthD,EAAIpQ,KAAKsV,IAAMo/C,EACfj/C,GAAO,OAAevK,EAAKkkB,MAAO3Z,EAAMzV,KAAKuV,MAAQiP,OAChD,CACL,IAAIC,EAAYzkB,KAAKyxD,YAAYrsD,QAAO,SAAUC,EAAKwF,GACrD,OAAOvH,KAAKiC,IAAIF,EAAKwF,EAAK4S,UACzB,GACHrN,EAAIskD,GAA6B,OAAexpD,EAAKkkB,MAAOpvB,KAAKsV,IAAKtV,KAAKwV,OAASiP,EAAYvZ,EAAK+H,OAAOyb,QAAU1uB,KAAK8xD,uBAG7H,IAAI3hD,GAAI,OAAesgB,EAAUhb,EAAMA,EAAO+O,GAE9C1V,EAAI2qB,UAAYq5B,EAAUr5B,WAAU,OAAmBhJ,IACvD3hB,EAAIgrB,aAAe,SACnBhrB,EAAI6X,YAAcyO,EAAUnvB,MAC5B6I,EAAI2X,UAAY2O,EAAUnvB,MAC1B6I,EAAIwhB,KAAOkkC,EAAUr9B,QACrB,OAAWroB,EAAKsmB,EAAU5O,KAAMrW,EAAGC,EAAGokD,MAEvC,CACD51D,IAAK,sBACL0C,MAAO,WACL,IAAI8zB,EAAYp1B,KAAK8J,QAAQ0X,MACzBgzC,GAAY,OAAOp/B,EAAU9E,MAC7BmkC,GAAe,OAAUr/B,EAAU1G,SACvC,OAAO0G,EAAUnL,QAAUuqC,EAAUjkC,WAAakkC,EAAah3C,OAAS,IAEzE,CACD7e,IAAK,mBACL0C,MAAO,SAA0B6O,EAAGC,GAClC,IAAI7R,EAAGo2D,EAAQC,EAEf,IAAI,QAAWzkD,EAAGnQ,KAAKyV,KAAMzV,KAAKuV,SAAU,QAAWnF,EAAGpQ,KAAKsV,IAAKtV,KAAKwV,QAGvE,IAFAo/C,EAAK50D,KAAKqxD,eAEL9yD,EAAI,EAAGA,EAAIq2D,EAAGn2D,SAAUF,EAG3B,GAFAo2D,EAASC,EAAGr2D,IAER,QAAW4R,EAAGwkD,EAAOl/C,KAAMk/C,EAAOl/C,KAAOk/C,EAAOj3C,SAAU,QAAWtN,EAAGukD,EAAOr/C,IAAKq/C,EAAOr/C,IAAMq/C,EAAOl3C,QAC1G,OAAOzd,KAAKwxD,YAAYjzD,GAK9B,OAAO,OAER,CACDK,IAAK,cACL0C,MAAO,SAAqB3B,GAC1B,IAAIuL,EAAOlL,KAAK8J,QAEhB,GA4BN,SAAoBhH,EAAMoI,GACxB,IAAc,cAATpI,GAAiC,aAATA,KAAyBoI,EAAKyyC,SAAWzyC,EAAK2pD,SACzE,OAAO,EAGT,GAAI3pD,EAAK4b,UAAqB,UAAThkB,GAA6B,YAATA,GACvC,OAAO,EAGT,OAAO,EArCEgyD,CAAWn1D,EAAEmD,KAAMoI,GAAxB,CAIA,IApgB+B2O,EAAG1E,EAogB9B4/C,EAAc/0D,KAAKg1D,iBAAiBr1D,EAAEwQ,EAAGxQ,EAAEyQ,GAE/C,GAAe,cAAXzQ,EAAEmD,MAAmC,aAAXnD,EAAEmD,KAAqB,CACnD,IAAIu/C,EAAWriD,KAAKsxD,aAChB2D,GAxgB4B9/C,EAwgBI4/C,EAvgB7B,QADsBl7C,EAwgBHwoC,IAvgBL,OAANltC,GAAc0E,EAAE/N,eAAiBqJ,EAAErJ,cAAgB+N,EAAEnO,QAAUyJ,EAAEzJ,OAygB5E22C,IAAa4S,IACf,OAAS/pD,EAAK2pD,QAAS,CAACl1D,EAAG0iD,EAAUriD,MAAOA,MAG9CA,KAAKsxD,aAAeyD,EAEhBA,IAAgBE,IAClB,OAAS/pD,EAAKyyC,QAAS,CAACh+C,EAAGo1D,EAAa/0D,MAAOA,WAExC+0D,IACT,OAAS7pD,EAAK4b,QAAS,CAACnnB,EAAGo1D,EAAa/0D,MAAOA,WAK9CgxD,EArhBiB,CAshBxBlmC,GAcF,IAAIoqC,GAAgB,CAClBtnD,GAAI,SACJunD,SAAUnE,GACVxtD,MAAO,SAAeb,EAAOstD,EAAOnmD,GAClC,IAAIqc,EAASxjB,EAAMwjB,OAAS,IAAI6qC,GAAO,CACrCliD,IAAKnM,EAAMmM,IACXhF,QAASA,EACTnH,MAAOA,IAETsiC,GAAkBtiC,EAAOwjB,EAAQrc,GACjCm7B,GAAetiC,EAAOwjB,IAExBsC,KAAM,SAAc9lB,GAClBsiC,GAAkBtiC,EAAOA,EAAMwjB,eACxBxjB,EAAMwjB,QAEfuM,aAAc,SAAsB/vB,EAAOstD,EAAOnmD,GAChD,IAAIqc,EAASxjB,EAAMwjB,OACnB8e,GAAkBtiC,EAAOwjB,EAAQrc,GACjCqc,EAAOrc,QAAUA,GAEnBkqB,YAAa,SAAqBrxB,GAChC,IAAIwjB,EAASxjB,EAAMwjB,OACnBA,EAAOwrC,cACPxrC,EAAOivC,kBAETC,WAAY,SAAoB1yD,EAAOqW,GAChCA,EAAK4jC,QACRj6C,EAAMwjB,OAAOmvC,YAAYt8C,EAAKhU,QAGlCiX,SAAU,CACRgO,SAAS,EACTwG,SAAU,MACVrB,MAAO,SACPiH,UAAU,EACVlrB,SAAS,EACT6a,OAAQ,IACRc,QAAS,SAAiBnnB,EAAGonB,EAAYZ,GACvC,IAAIza,EAAQqb,EAAWjb,aACnBypD,EAAKpvC,EAAOxjB,MAEZ4yD,EAAGjzC,iBAAiB5W,IACtB6pD,EAAGxsD,KAAK2C,GACRqb,EAAW9S,QAAS,IAEpBshD,EAAG3sD,KAAK8C,GACRqb,EAAW9S,QAAS,IAGxB0pC,QAAS,KACTkX,QAAS,KACT5hD,OAAQ,CACNhN,MAAO,SAAe6I,GACpB,OAAOA,EAAInM,MAAMmH,QAAQ7D,OAE3B2qD,SAAU,GACVliC,QAAS,GACTtI,eAAgB,SAAwBzjB,GACtC,IAAI0O,EAAW1O,EAAMyO,KAAKC,SACtBmkD,EAAwB7yD,EAAMwjB,OAAOrc,QAAQmJ,OAC7C49C,EAAgB2E,EAAsB3E,cACtCxqC,EAAamvC,EAAsBnvC,WACnCoT,EAAY+7B,EAAsB/7B,UAClCxzB,EAAQuvD,EAAsBvvD,MAClC,OAAOtD,EAAM8I,yBAAyB6a,KAAI,SAAUna,GAClD,IAAIoa,EAAQpa,EAAKc,WAAWgL,SAAS44C,EAAgB,OAAInuD,GACrDkjB,GAAc,OAAUW,EAAMX,aAClC,MAAO,CACLY,KAAMnV,EAASlF,EAAKT,OAAOsJ,MAC3ByR,UAAWF,EAAMG,gBACjB+sC,UAAWxtD,EACXgO,QAAS9H,EAAKrD,QACdq5C,QAAS57B,EAAM67B,eACf2R,SAAUxtC,EAAMiI,WAChB+M,eAAgBhV,EAAMkI,iBACtBkyB,SAAUp6B,EAAMk6B,gBAChB55B,WAAYjB,EAAYlI,MAAQkI,EAAYnI,QAAU,EACtDkJ,YAAaJ,EAAMK,YACnBP,WAAYA,GAAcE,EAAMF,WAChClE,SAAUoE,EAAMpE,SAChBsX,UAAWA,GAAalT,EAAMkT,UAC9B2kB,aAAc,EACdtyC,aAAcK,EAAKT,SAEpB1L,QAGPwhB,MAAO,CACLvb,MAAO,SAAe6I,GACpB,OAAOA,EAAInM,MAAMmH,QAAQ7D,OAE3BgkB,SAAS,EACTwG,SAAU,SACVjK,KAAM,KAGVP,YAAa,CACX5d,YAAa,SAAqBtH,GAChC,OAAQA,EAAK0uB,WAAW,OAE1Bxc,OAAQ,CACN5K,YAAa,SAAqBtH,GAChC,OAAQ,CAAC,iBAAkB,SAAU,QAAQykC,SAASzkC,OAM1D00D,GAAqB,SAAUC,IACjC,OAAUD,EAAOC,GAEjB,IAAIC,EAAW32D,EAAay2D,GAE5B,SAASA,EAAMvsD,GACb,IAAI0sD,EAkBJ,OAhBA,OAAgB51D,KAAMy1D,IAEtBG,EAAUD,EAASj2D,KAAKM,OAChB2C,MAAQuG,EAAOvG,MACvBizD,EAAQ9rD,QAAUZ,EAAOY,QACzB8rD,EAAQ9mD,IAAM5F,EAAO4F,IACrB8mD,EAAQC,cAAWnzD,EACnBkzD,EAAQtgD,SAAM5S,EACdkzD,EAAQpgD,YAAS9S,EACjBkzD,EAAQngD,UAAO/S,EACfkzD,EAAQrgD,WAAQ7S,EAChBkzD,EAAQl4C,WAAQhb,EAChBkzD,EAAQn4C,YAAS/a,EACjBkzD,EAAQnlC,cAAW/tB,EACnBkzD,EAAQ5vC,YAAStjB,EACjBkzD,EAAQv/B,cAAW3zB,EACZkzD,EAsGT,OAnGA,OAAaH,EAAO,CAAC,CACnB72D,IAAK,SACL0C,MAAO,SAAgBkjB,EAAUC,GAC/B,IAAIvZ,EAAOlL,KAAK8J,QAIhB,GAHA9J,KAAKyV,KAAO,EACZzV,KAAKsV,IAAM,EAENpK,EAAK+e,QAAV,CAKAjqB,KAAK0d,MAAQ1d,KAAKuV,MAAQiP,EAC1BxkB,KAAKyd,OAASzd,KAAKwV,OAASiP,EAC5B,IAAIiV,GAAY,OAAQxuB,EAAKsb,MAAQtb,EAAKsb,KAAK/nB,OAAS,EACxDuB,KAAK61D,UAAW,OAAU3qD,EAAKwjB,SAE/B,IAAIonC,EAAWp8B,GAAY,OAAOxuB,EAAKolB,MAAMC,WAAavwB,KAAK61D,SAASp4C,OAEpEzd,KAAK8c,eACP9c,KAAKyd,OAASq4C,EAEd91D,KAAK0d,MAAQo4C,OAdb91D,KAAK0d,MAAQ1d,KAAKyd,OAASzd,KAAKuV,MAAQvV,KAAKwV,OAAS,IAiBzD,CACD5W,IAAK,eACL0C,MAAO,WACL,IAAIqjC,EAAM3kC,KAAK8J,QAAQ2mB,SACvB,MAAe,QAARkU,GAAyB,WAARA,IAEzB,CACD/lC,IAAK,YACL0C,MAAO,SAAmBif,GACxB,IAOIiE,EAAUyX,EAAQC,EAPlB5mB,EAAMtV,KAAKsV,IACXG,EAAOzV,KAAKyV,KACZD,EAASxV,KAAKwV,OACdD,EAAQvV,KAAKuV,MACbzL,EAAU9J,KAAK8J,QACfslB,EAAQtlB,EAAQslB,MAChBjN,EAAW,EAqBf,OAlBIniB,KAAK8c,gBACPmf,GAAS,OAAe7M,EAAO3Z,EAAMF,GACrC2mB,EAAS5mB,EAAMiL,EACfiE,EAAWjP,EAAQE,IAEM,SAArB3L,EAAQ2mB,UACVwL,EAASxmB,EAAO8K,EAChB2b,GAAS,OAAe9M,EAAO5Z,EAAQF,GACvC6M,GAAiB,GAAN,EAAAkC,IAEX4X,EAAS1mB,EAAQgL,EACjB2b,GAAS,OAAe9M,EAAO9Z,EAAKE,GACpC2M,EAAgB,GAAL,EAAAkC,GAGbG,EAAWhP,EAASF,GAGf,CACL2mB,OAAQA,EACRC,OAAQA,EACR1X,SAAUA,EACVrC,SAAUA,KAGb,CACDvjB,IAAK,OACL0C,MAAO,WACL,IAAIwN,EAAM9O,KAAK8O,IACX5D,EAAOlL,KAAK8J,QAEhB,GAAKoB,EAAK+e,QAAV,CAIA,IAAI8rC,GAAW,OAAO7qD,EAAKolB,MAEvB/P,EADaw1C,EAASxlC,WACA,EAAIvwB,KAAK61D,SAASvgD,IAExC0gD,EAAkBh2D,KAAKi2D,UAAU11C,GACjC0b,EAAS+5B,EAAgB/5B,OACzBC,EAAS85B,EAAgB95B,OACzB1X,EAAWwxC,EAAgBxxC,SAC3BrC,EAAW6zC,EAAgB7zC,UAE/B,OAAWrT,EAAK5D,EAAKsb,KAAM,EAAG,EAAGuvC,EAAU,CACzC9vD,MAAOiF,EAAKjF,MACZue,SAAUA,EACVrC,SAAUA,EACVsX,WAAW,OAAmBvuB,EAAKkkB,OACnC0K,aAAc,SACdY,YAAa,CAACuB,EAAQC,UAKrBu5B,EA9HgB,CA+HvB3qC,GAaF,IAAIorC,GAAe,CACjBtoD,GAAI,QACJunD,SAAUM,GACVjyD,MAAO,SAAeb,EAAOstD,EAAOnmD,IAdtC,SAAqBnH,EAAOyyB,GAC1B,IAAI5T,EAAQ,IAAIi0C,GAAM,CACpB3mD,IAAKnM,EAAMmM,IACXhF,QAASsrB,EACTzyB,MAAOA,IAETsiC,GAAkBtiC,EAAO6e,EAAO4T,GAChC6P,GAAetiC,EAAO6e,GACtB7e,EAAMwzD,WAAa30C,EAOjB40C,CAAYzzD,EAAOmH,IAErB2e,KAAM,SAAc9lB,GAClB,IAAIwzD,EAAaxzD,EAAMwzD,WACvBlxB,GAAkBtiC,EAAOwzD,UAClBxzD,EAAMwzD,YAEfzjC,aAAc,SAAsB/vB,EAAOstD,EAAOnmD,GAChD,IAAI0X,EAAQ7e,EAAMwzD,WAClBlxB,GAAkBtiC,EAAO6e,EAAO1X,GAChC0X,EAAM1X,QAAUA,GAElBmS,SAAU,CACRmT,MAAO,SACPnF,SAAS,EACTqG,KAAM,CACJtK,OAAQ,QAEVqQ,UAAU,EACV3H,QAAS,GACT+B,SAAU,MACVjK,KAAM,GACNR,OAAQ,KAEVqF,cAAe,CACbplB,MAAO,SAETggB,YAAa,CACX5d,aAAa,EACbD,YAAY,IAGZke,GAAM,IAAI+vC,QACVC,GAAkB,CACpB1oD,GAAI,WACJpK,MAAO,SAAeb,EAAOstD,EAAOnmD,GAClC,IAAI0X,EAAQ,IAAIi0C,GAAM,CACpB3mD,IAAKnM,EAAMmM,IACXhF,QAASA,EACTnH,MAAOA,IAETsiC,GAAkBtiC,EAAO6e,EAAO1X,GAChCm7B,GAAetiC,EAAO6e,GACtB8E,GAAIvhB,IAAIpC,EAAO6e,IAEjBiH,KAAM,SAAc9lB,GAClBsiC,GAAkBtiC,EAAO2jB,GAAI1hB,IAAIjC,IACjC2jB,GAAI5gB,OAAO/C,IAEb+vB,aAAc,SAAsB/vB,EAAOstD,EAAOnmD,GAChD,IAAI0X,EAAQ8E,GAAI1hB,IAAIjC,GACpBsiC,GAAkBtiC,EAAO6e,EAAO1X,GAChC0X,EAAM1X,QAAUA,GAElBmS,SAAU,CACRmT,MAAO,SACPnF,SAAS,EACTqG,KAAM,CACJtK,OAAQ,UAEVqQ,UAAU,EACV3H,QAAS,EACT+B,SAAU,MACVjK,KAAM,GACNR,OAAQ,MAEVqF,cAAe,CACbplB,MAAO,SAETggB,YAAa,CACX5d,aAAa,EACbD,YAAY,IAGZmuD,GAAc,CAChBC,QAAS,SAAiBryD,GACxB,IAAKA,EAAM1F,OACT,OAAO,EAGT,IAAIF,EAAG2D,EACHiO,EAAI,EACJC,EAAI,EACJsC,EAAQ,EAEZ,IAAKnU,EAAI,EAAG2D,EAAMiC,EAAM1F,OAAQF,EAAI2D,IAAO3D,EAAG,CAC5C,IAAI+jC,EAAKn+B,EAAM5F,GAAG0X,QAElB,GAAIqsB,GAAMA,EAAGm0B,WAAY,CACvB,IAAI9xB,EAAMrC,EAAGo0B,kBACbvmD,GAAKw0B,EAAIx0B,EACTC,GAAKu0B,EAAIv0B,IACPsC,GAIN,MAAO,CACLvC,EAAGA,EAAIuC,EACPtC,EAAGA,EAAIsC,IAGX6xB,QAAS,SAAiBpgC,EAAOwyD,GAC/B,IAAKxyD,EAAM1F,OACT,OAAO,EAGT,IAGIF,EAAG2D,EAAK00D,EAHRzmD,EAAIwmD,EAAcxmD,EAClBC,EAAIumD,EAAcvmD,EAClBwzB,EAAczvB,OAAOC,kBAGzB,IAAK7V,EAAI,EAAG2D,EAAMiC,EAAM1F,OAAQF,EAAI2D,IAAO3D,EAAG,CAC5C,IAAI+jC,EAAKn+B,EAAM5F,GAAG0X,QAElB,GAAIqsB,GAAMA,EAAGm0B,WAAY,CACvB,IAAIj5C,EAAS8kB,EAAGuB,iBACZ57B,GAAI,QAAsB0uD,EAAen5C,GAEzCvV,EAAI27B,IACNA,EAAc37B,EACd2uD,EAAiBt0B,IAKvB,GAAIs0B,EAAgB,CAClB,IAAIC,EAAKD,EAAeF,kBACxBvmD,EAAI0mD,EAAG1mD,EACPC,EAAIymD,EAAGzmD,EAGT,MAAO,CACLD,EAAGA,EACHC,EAAGA,KAKT,SAAS0mD,GAAaz7C,EAAM07C,GAS1B,OARIA,KACE,OAAQA,GACVv2D,MAAMhB,UAAUrB,KAAKC,MAAMid,EAAM07C,GAEjC17C,EAAKld,KAAK44D,IAIP17C,EAGT,SAAS27C,GAAcC,GACrB,OAAoB,iBAARA,GAAoBA,aAAeC,SAAWD,EAAI94C,QAAQ,OAAS,EACtE84C,EAAIj5B,MAAM,MAGZi5B,EAGT,SAASE,GAAkBx0D,EAAOyB,GAChC,IAAI6R,EAAU7R,EAAK6R,QACfnK,EAAe1H,EAAK0H,aACpBJ,EAAQtH,EAAKsH,MACbuB,EAAatK,EAAM2O,eAAexF,GAAcmB,WAEhDmqD,EAAwBnqD,EAAWoqD,iBAAiB3rD,GACpDsJ,EAAQoiD,EAAsBpiD,MAC9B1T,EAAQ81D,EAAsB91D,MAElC,MAAO,CACLqB,MAAOA,EACPqS,MAAOA,EACP9H,OAAQD,EAAW8H,UAAUrJ,GAC7B6K,IAAK5T,EAAMyO,KAAKC,SAASvF,GAAcsF,KAAK1F,GAC5Cyb,eAAgB7lB,EAChB0O,QAAS/C,EAAWgD,aACpBqG,UAAW5K,EACXI,aAAcA,EACdmK,QAASA,GAIb,SAASqhD,GAAe/1C,EAASzX,GAC/B,IAAIgF,EAAMyS,EAAQ5e,MAAMmM,IACpByoD,EAAOh2C,EAAQg2C,KACfC,EAASj2C,EAAQi2C,OACjBh2C,EAAQD,EAAQC,MAChBovC,EAAW9mD,EAAQ8mD,SACnBF,EAAY5mD,EAAQ4mD,UACpB+G,GAAW,OAAO3tD,EAAQ2tD,UAC1BjD,GAAY,OAAO1qD,EAAQ0qD,WAC3BkD,GAAa,OAAO5tD,EAAQ4tD,YAC5BC,EAAiBn2C,EAAM/iB,OACvBm5D,EAAkBJ,EAAO/4D,OACzBo5D,EAAoBN,EAAK94D,OACzBiwB,GAAU,OAAU5kB,EAAQ4kB,SAC5BjR,EAASiR,EAAQjR,OACjBC,EAAQ,EACRo6C,EAAqBP,EAAKnyD,QAAO,SAAUsN,EAAOqlD,GACpD,OAAOrlD,EAAQqlD,EAASC,OAAOv5D,OAASs5D,EAASE,MAAMx5D,OAASs5D,EAASG,MAAMz5D,SAC9E,IACHq5D,GAAsBv2C,EAAQ42C,WAAW15D,OAAS8iB,EAAQ62C,UAAU35D,OAEhEk5D,IACFl6C,GAAUk6C,EAAiBnD,EAAUjkC,YAAconC,EAAiB,GAAK7tD,EAAQuuD,aAAevuD,EAAQwuD,mBAGtGR,KAEFr6C,GAAUo6C,GADW/tD,EAAQyuD,cAAgBj1D,KAAKiC,IAAImrD,EAAW+G,EAASlnC,YAAcknC,EAASlnC,aACjDunC,EAAqBD,GAAqBJ,EAASlnC,YAAcunC,EAAqB,GAAKhuD,EAAQ0uD,aAGjJZ,IACFn6C,GAAU3T,EAAQ2uD,gBAAkBb,EAAkBF,EAAWnnC,YAAcqnC,EAAkB,GAAK9tD,EAAQ4uD,eAGhH,IAAIC,EAAe,EAEfC,EAAe,SAAsBrxC,GACvC7J,EAAQpa,KAAKiC,IAAImY,EAAO5O,EAAIwjD,YAAY/qC,GAAM7J,MAAQi7C,IAmBxD,OAhBA7pD,EAAIgsB,OACJhsB,EAAIwhB,KAAOkkC,EAAUr9B,QACrB,OAAK5V,EAAQC,MAAOo3C,GACpB9pD,EAAIwhB,KAAOmnC,EAAStgC,QACpB,OAAK5V,EAAQ42C,WAAWxqD,OAAO4T,EAAQ62C,WAAYQ,GACnDD,EAAe7uD,EAAQyuD,cAAgB3H,EAAW,EAAI9mD,EAAQq8B,WAAa,GAC3E,OAAKoxB,GAAM,SAAUQ,IACnB,OAAKA,EAASC,OAAQY,IACtB,OAAKb,EAASE,MAAOW,IACrB,OAAKb,EAASG,MAAOU,MAEvBD,EAAe,EACf7pD,EAAIwhB,KAAOonC,EAAWvgC,QACtB,OAAK5V,EAAQi2C,OAAQoB,GACrB9pD,EAAIksB,UAEG,CACLtd,MAFFA,GAASgR,EAAQhR,MAGfD,OAAQA,GA+BZ,SAASo7C,GAAgBl2D,EAAOmH,EAASe,EAAMiuD,GAC7C,IAAI3oD,EAAItF,EAAKsF,EACTuN,EAAQ7S,EAAK6S,MACbq7C,EAAap2D,EAAM+a,MACnBs7C,EAAmBr2D,EAAMoT,UACzBN,EAAOujD,EAAiBvjD,KACxBF,EAAQyjD,EAAiBzjD,MACzB0jD,EAAS,SAcb,MAZe,WAAXH,EACFG,EAAS9oD,IAAMsF,EAAOF,GAAS,EAAI,OAAS,QACnCpF,GAAKuN,EAAQ,EACtBu7C,EAAS,OACA9oD,GAAK4oD,EAAar7C,EAAQ,IACnCu7C,EAAS,SA5Bb,SAA6BA,EAAQt2D,EAAOmH,EAASe,GACnD,IAAIsF,EAAItF,EAAKsF,EACTuN,EAAQ7S,EAAK6S,MACbw7C,EAAQpvD,EAAQqvD,UAAYrvD,EAAQsvD,aAExC,MAAe,SAAXH,GAAqB9oD,EAAIuN,EAAQw7C,EAAQv2D,EAAM+a,OAIpC,UAAXu7C,GAAsB9oD,EAAIuN,EAAQw7C,EAAQ,QAA9C,EAsBIG,CAAoBJ,EAAQt2D,EAAOmH,EAASe,KAC9CouD,EAAS,UAGJA,EAGT,SAASK,GAAmB32D,EAAOmH,EAASe,GAC1C,IAAIiuD,EAASjuD,EAAKiuD,QAAUhvD,EAAQgvD,QApDtC,SAAyBn2D,EAAOkI,GAC9B,IAAIuF,EAAIvF,EAAKuF,EACTqN,EAAS5S,EAAK4S,OAElB,OAAIrN,EAAIqN,EAAS,EACR,MACErN,EAAIzN,EAAM8a,OAASA,EAAS,EAC9B,SAGF,SA0CuC87C,CAAgB52D,EAAOkI,GACrE,MAAO,CACLouD,OAAQpuD,EAAKouD,QAAUnvD,EAAQmvD,QAAUJ,GAAgBl2D,EAAOmH,EAASe,EAAMiuD,GAC/EA,OAAQA,GAgCZ,SAASU,GAAmB1vD,EAASe,EAAM4uD,EAAW92D,GACpD,IAAIw2D,EAAYrvD,EAAQqvD,UACpBC,EAAetvD,EAAQsvD,aACvBM,EAAe5vD,EAAQ4vD,aACvBT,EAASQ,EAAUR,OACnBH,EAASW,EAAUX,OACnBa,EAAiBR,EAAYC,EAE7BQ,GAAiB,QAAcF,GAC/BxS,EAAU0S,EAAe1S,QACzBC,EAAWyS,EAAezS,SAC1BC,EAAawS,EAAexS,WAC5BC,EAAcuS,EAAevS,YAE7Bl3C,EA1CN,SAAgBtF,EAAMouD,GACpB,IAAI9oD,EAAItF,EAAKsF,EACTuN,EAAQ7S,EAAK6S,MAQjB,MANe,UAAXu7C,EACF9oD,GAAKuN,EACe,WAAXu7C,IACT9oD,GAAKuN,EAAQ,GAGRvN,EAgCC0pD,CAAOhvD,EAAMouD,GACjB7oD,EA9BN,SAAgBvF,EAAMiuD,EAAQa,GAC5B,IAAIvpD,EAAIvF,EAAKuF,EACTqN,EAAS5S,EAAK4S,OAUlB,MARe,QAAXq7C,EACF1oD,GAAKupD,EAELvpD,GADoB,WAAX0oD,EACJr7C,EAASk8C,EAETl8C,EAAS,EAGTrN,EAkBC0pD,CAAOjvD,EAAMiuD,EAAQa,GAc7B,MAZe,WAAXb,EACa,SAAXG,EACF9oD,GAAKwpD,EACe,UAAXV,IACT9oD,GAAKwpD,GAEa,SAAXV,EACT9oD,GAAK7M,KAAKiC,IAAI2hD,EAASE,GAAc+R,EACjB,UAAXF,IACT9oD,GAAK7M,KAAKiC,IAAI4hD,EAAUE,GAAe8R,GAGlC,CACLhpD,GAAG,OAAYA,EAAG,EAAGxN,EAAM+a,MAAQ7S,EAAK6S,OACxCtN,GAAG,OAAYA,EAAG,EAAGzN,EAAM8a,OAAS5S,EAAK4S,SAI7C,SAASs8C,GAAYx4C,EAAS6N,EAAOtlB,GACnC,IAAI4kB,GAAU,OAAU5kB,EAAQ4kB,SAChC,MAAiB,WAAVU,EAAqB7N,EAAQpR,EAAIoR,EAAQ7D,MAAQ,EAAc,UAAV0R,EAAoB7N,EAAQpR,EAAIoR,EAAQ7D,MAAQgR,EAAQnZ,MAAQgM,EAAQpR,EAAIue,EAAQjZ,KAGlJ,SAASukD,GAAwB9qC,GAC/B,OAAO4nC,GAAa,GAAIE,GAAc9nC,IAWxC,SAAS+qC,GAAkBl3D,EAAWqT,GACpC,IAAI+mB,EAAW/mB,GAAWA,EAAQpG,SAAWoG,EAAQpG,QAAQuR,SAAWnL,EAAQpG,QAAQuR,QAAQxe,UAChG,OAAOo6B,EAAWp6B,EAAUo6B,SAASA,GAAYp6B,EAGnD,IAAIm3D,GAAuB,SAAUC,IACnC,OAAUD,EAASC,GAEnB,IAAIC,EAAWp7D,EAAak7D,GAE5B,SAASA,EAAQhxD,GACf,IAAImxD,EAiCJ,OA/BA,OAAgBr6D,KAAMk6D,IAEtBG,EAAUD,EAAS16D,KAAKM,OAChBs6D,QAAU,EAClBD,EAAQ/1D,QAAU,GAClB+1D,EAAQE,oBAAiB73D,EACzB23D,EAAQG,WAAQ93D,EAChB23D,EAAQI,uBAAoB/3D,EAC5B23D,EAAQK,cAAgB,GACxBL,EAAQpwD,iBAAcvH,EACtB23D,EAAQ3qD,cAAWhN,EACnB23D,EAAQ13D,MAAQuG,EAAOvG,OAASuG,EAAOC,OACvCkxD,EAAQlxD,OAASkxD,EAAQ13D,MACzB03D,EAAQvwD,QAAUZ,EAAOY,QACzBuwD,EAAQM,gBAAaj4D,EACrB23D,EAAQ74C,WAAQ9e,EAChB23D,EAAQlC,gBAAaz1D,EACrB23D,EAAQ9C,UAAO70D,EACf23D,EAAQjC,eAAY11D,EACpB23D,EAAQ7C,YAAS90D,EACjB23D,EAAQpB,YAASv2D,EACjB23D,EAAQvB,YAASp2D,EACjB23D,EAAQlqD,OAAIzN,EACZ23D,EAAQjqD,OAAI1N,EACZ23D,EAAQ58C,YAAS/a,EACjB23D,EAAQ38C,WAAQhb,EAChB23D,EAAQO,YAASl4D,EACjB23D,EAAQQ,YAASn4D,EACjB23D,EAAQS,iBAAcp4D,EACtB23D,EAAQU,sBAAmBr4D,EAC3B23D,EAAQW,qBAAkBt4D,EACnB23D,EAoqBT,OAjqBA,OAAaH,EAAS,CAAC,CACrBt7D,IAAK,aACL0C,MAAO,SAAoBwI,GACzB9J,KAAK8J,QAAUA,EACf9J,KAAKy6D,uBAAoB/3D,EACzB1C,KAAK0P,cAAWhN,IAEjB,CACD9D,IAAK,qBACL0C,MAAO,WACL,IAAIoN,EAAS1O,KAAKy6D,kBAElB,GAAI/rD,EACF,OAAOA,EAGT,IAAI/L,EAAQ3C,KAAK2C,MACbmH,EAAU9J,KAAK8J,QAAQooB,WAAWlyB,KAAKwS,cACvCtH,EAAOpB,EAAQmjB,SAAWtqB,EAAMmH,QAAQpB,WAAaoB,EAAQjB,WAC7DA,EAAa,IAAII,EAAWjJ,KAAK2C,MAAOuI,GAM5C,OAJIA,EAAKsM,aACPxX,KAAKy6D,kBAAoB78D,OAAOyZ,OAAOxO,IAGlCA,IAER,CACDjK,IAAK,aACL0C,MAAO,WACL,OAAOtB,KAAK0P,WAAa1P,KAAK0P,UArFN2G,EAqFsCrW,KAAK2C,MAAM6P,aArFzC+O,EAqFuDvhB,KArF9Ci7D,EAqFoDj7D,KAAK06D,eApF/F,OAAcrkD,EAAQ,CAC3BkL,QAASA,EACT05C,aAAcA,EACdn4D,KAAM,cAJV,IAA8BuT,EAAQkL,EAAS05C,IAuF1C,CACDr8D,IAAK,WACL0C,MAAO,SAAkB8U,EAAStM,GAChC,IAAI/G,EAAY+G,EAAQ/G,UACpBm4D,EAAcn4D,EAAUm4D,YAAY98D,MAAM4B,KAAM,CAACoW,IACjDoL,EAAQze,EAAUye,MAAMpjB,MAAM4B,KAAM,CAACoW,IACrC+kD,EAAap4D,EAAUo4D,WAAW/8D,MAAM4B,KAAM,CAACoW,IAC/C6hD,EAAQ,GAIZ,OAHAA,EAAQnB,GAAamB,EAAOjB,GAAckE,IAC1CjD,EAAQnB,GAAamB,EAAOjB,GAAcx1C,IAC1Cy2C,EAAQnB,GAAamB,EAAOjB,GAAcmE,MAG3C,CACDv8D,IAAK,gBACL0C,MAAO,SAAuB25D,EAAcnxD,GAC1C,OAAOkwD,GAAwBlwD,EAAQ/G,UAAUo1D,WAAW/5D,MAAM4B,KAAM,CAACi7D,OAE1E,CACDr8D,IAAK,UACL0C,MAAO,SAAiB25D,EAAcnxD,GACpC,IAAIsxD,EAAUp7D,KAEV+C,EAAY+G,EAAQ/G,UACpBs4D,EAAY,GAahB,OAZA,OAAKJ,GAAc,SAAU7kD,GAC3B,IAAI2hD,EAAW,CACbC,OAAQ,GACRC,MAAO,GACPC,MAAO,IAELoD,EAASrB,GAAkBl3D,EAAWqT,GAC1C0gD,GAAaiB,EAASC,OAAQhB,GAAcsE,EAAOC,YAAY77D,KAAK07D,EAAShlD,KAC7E0gD,GAAaiB,EAASE,MAAOqD,EAAOtmD,MAAMtV,KAAK07D,EAAShlD,IACxD0gD,GAAaiB,EAASG,MAAOlB,GAAcsE,EAAOE,WAAW97D,KAAK07D,EAAShlD,KAC3EilD,EAAUl9D,KAAK45D,MAEVsD,IAER,CACDz8D,IAAK,eACL0C,MAAO,SAAsB25D,EAAcnxD,GACzC,OAAOkwD,GAAwBlwD,EAAQ/G,UAAUq1D,UAAUh6D,MAAM4B,KAAM,CAACi7D,OAEzE,CACDr8D,IAAK,YACL0C,MAAO,SAAmB25D,EAAcnxD,GACtC,IAAI/G,EAAY+G,EAAQ/G,UACpB04D,EAAe14D,EAAU04D,aAAar9D,MAAM4B,KAAM,CAACi7D,IACnDzD,EAASz0D,EAAUy0D,OAAOp5D,MAAM4B,KAAM,CAACi7D,IACvCS,EAAc34D,EAAU24D,YAAYt9D,MAAM4B,KAAM,CAACi7D,IACjDhD,EAAQ,GAIZ,OAHAA,EAAQnB,GAAamB,EAAOjB,GAAcyE,IAC1CxD,EAAQnB,GAAamB,EAAOjB,GAAcQ,IAC1CS,EAAQnB,GAAamB,EAAOjB,GAAc0E,MAG3C,CACD98D,IAAK,eACL0C,MAAO,SAAsBwI,GAC3B,IAQIvL,EAAG2D,EARHy5D,EAAU37D,KAEVyI,EAASzI,KAAKsE,QACd8M,EAAOpR,KAAK2C,MAAMyO,KAClB0pD,EAAc,GACdC,EAAmB,GACnBC,EAAkB,GAClBC,EAAe,GAGnB,IAAK18D,EAAI,EAAG2D,EAAMuG,EAAOhK,OAAQF,EAAI2D,IAAO3D,EAC1C08D,EAAa98D,KAAKg5D,GAAkBn3D,KAAK2C,MAAO8F,EAAOlK,KAyBzD,OAtBIuL,EAAQ/L,SACVk9D,EAAeA,EAAal9D,QAAO,SAAUkY,EAASvK,EAAOg5B,GAC3D,OAAO56B,EAAQ/L,OAAOkY,EAASvK,EAAOg5B,EAAOtzB,OAI7CtH,EAAQ8xD,WACVX,EAAeA,EAAarhD,MAAK,SAAUC,EAAG1E,GAC5C,OAAOrL,EAAQ8xD,SAAS/hD,EAAG1E,EAAG/D,QAIlC,OAAK6pD,GAAc,SAAU7kD,GAC3B,IAAIklD,EAASrB,GAAkBnwD,EAAQ/G,UAAWqT,GAClD0kD,EAAY38D,KAAKm9D,EAAOO,WAAWn8D,KAAKi8D,EAASvlD,IACjD2kD,EAAiB58D,KAAKm9D,EAAOQ,gBAAgBp8D,KAAKi8D,EAASvlD,IAC3D4kD,EAAgB78D,KAAKm9D,EAAOS,eAAer8D,KAAKi8D,EAASvlD,OAE3DpW,KAAK86D,YAAcA,EACnB96D,KAAK+6D,iBAAmBA,EACxB/6D,KAAKg7D,gBAAkBA,EACvBh7D,KAAK26D,WAAaM,EACXA,IAER,CACDr8D,IAAK,SACL0C,MAAO,SAAgB+lC,EAASuV,GAC9B,IAEIr0C,EAFAuB,EAAU9J,KAAK8J,QAAQooB,WAAWlyB,KAAKwS,cACvC/J,EAASzI,KAAKsE,QAEd22D,EAAe,GAEnB,GAAKxyD,EAAOhK,OAML,CACL,IAAIgyB,EAAW8lC,GAAYzsD,EAAQ2mB,UAAU/wB,KAAKM,KAAMyI,EAAQzI,KAAKu6D,gBACrEU,EAAej7D,KAAKg8D,aAAalyD,GACjC9J,KAAKwhB,MAAQxhB,KAAKi8D,SAAShB,EAAcnxD,GACzC9J,KAAKm4D,WAAan4D,KAAKk8D,cAAcjB,EAAcnxD,GACnD9J,KAAKu3D,KAAOv3D,KAAKm8D,QAAQlB,EAAcnxD,GACvC9J,KAAKo4D,UAAYp4D,KAAKo8D,aAAanB,EAAcnxD,GACjD9J,KAAKw3D,OAASx3D,KAAKq8D,UAAUpB,EAAcnxD,GAC3C,IAAIe,EAAO7K,KAAKw6D,MAAQlD,GAAet3D,KAAM8J,GACzCwyD,EAAkB1+D,OAAOoM,OAAO,GAAIymB,EAAU5lB,GAC9C4uD,EAAYH,GAAmBt5D,KAAK2C,MAAOmH,EAASwyD,GACpDC,EAAkB/C,GAAmB1vD,EAASwyD,EAAiB7C,EAAWz5D,KAAK2C,OACnF3C,KAAKi5D,OAASQ,EAAUR,OACxBj5D,KAAK84D,OAASW,EAAUX,OACxBvwD,EAAa,CACX+xD,QAAS,EACTnqD,EAAGosD,EAAgBpsD,EACnBC,EAAGmsD,EAAgBnsD,EACnBsN,MAAO7S,EAAK6S,MACZD,OAAQ5S,EAAK4S,OACbm9C,OAAQnqC,EAAStgB,EACjB0qD,OAAQpqC,EAASrgB,QA1BE,IAAjBpQ,KAAKs6D,UACP/xD,EAAa,CACX+xD,QAAS,IA4Bft6D,KAAK06D,cAAgBO,EACrBj7D,KAAK0P,cAAWhN,EAEZ6F,GACFvI,KAAKgY,qBAAqBrN,OAAO3K,KAAMuI,GAGrC8+B,GAAWv9B,EAAQ0yD,UACrB1yD,EAAQ0yD,SAAS98D,KAAKM,KAAM,CAC1B2C,MAAO3C,KAAK2C,MACZ4e,QAASvhB,KACT48C,OAAQA,MAIb,CACDh+C,IAAK,YACL0C,MAAO,SAAmBm7D,EAAc3tD,EAAKjE,EAAMf,GACjD,IAAI4yD,EAAgB18D,KAAK28D,iBAAiBF,EAAc5xD,EAAMf,GAC9DgF,EAAI4sB,OAAOghC,EAAcnkC,GAAImkC,EAAclkC,IAC3C1pB,EAAI4sB,OAAOghC,EAAcjkC,GAAIikC,EAAchkC,IAC3C5pB,EAAI4sB,OAAOghC,EAAcE,GAAIF,EAAcG,MAE5C,CACDj+D,IAAK,mBACL0C,MAAO,SAA0Bm7D,EAAc5xD,EAAMf,GACnD,IAeIyuB,EAAIE,EAAImkC,EAAIpkC,EAAIE,EAAImkC,EAfpB5D,EAASj5D,KAAKi5D,OACdH,EAAS94D,KAAK84D,OACdK,EAAYrvD,EAAQqvD,UACpBO,EAAe5vD,EAAQ4vD,aAEvBoD,GAAkB,QAAcpD,GAChCxS,EAAU4V,EAAgB5V,QAC1BC,EAAW2V,EAAgB3V,SAC3BC,EAAa0V,EAAgB1V,WAC7BC,EAAcyV,EAAgBzV,YAE9B0V,EAAMN,EAAatsD,EACnB6sD,EAAMP,EAAarsD,EACnBsN,EAAQ7S,EAAK6S,MACbD,EAAS5S,EAAK4S,OA2ClB,MAxCe,WAAXq7C,GACFpgC,EAAKskC,EAAMv/C,EAAS,EAEL,SAAXw7C,GAEFxgC,GADAF,EAAKwkC,GACK5D,EACV3gC,EAAKE,EAAKygC,EACV0D,EAAKnkC,EAAKygC,IAGV1gC,GADAF,EAAKwkC,EAAMr/C,GACDy7C,EACV3gC,EAAKE,EAAKygC,EACV0D,EAAKnkC,EAAKygC,GAGZyD,EAAKrkC,IAGHE,EADa,SAAXwgC,EACG8D,EAAMz5D,KAAKiC,IAAI2hD,EAASE,GAAc+R,EACvB,UAAXF,EACJ8D,EAAMr/C,EAAQpa,KAAKiC,IAAI4hD,EAAUE,GAAe8R,EAEhDn5D,KAAK46D,OAGG,QAAX9B,GAEFpgC,GADAF,EAAKwkC,GACK7D,EACV5gC,EAAKE,EAAK0gC,EACVyD,EAAKnkC,EAAK0gC,IAGVzgC,GADAF,EAAKwkC,EAAMv/C,GACD07C,EACV5gC,EAAKE,EAAK0gC,EACVyD,EAAKnkC,EAAK0gC,GAGZ0D,EAAKrkC,GAGA,CACLD,GAAIA,EACJE,GAAIA,EACJmkC,GAAIA,EACJpkC,GAAIA,EACJE,GAAIA,EACJmkC,GAAIA,KAGP,CACDj+D,IAAK,YACL0C,MAAO,SAAmB27D,EAAInuD,EAAKhF,GACjC,IAEI0qD,EAAW6D,EAAc95D,EAFzBijB,EAAQxhB,KAAKwhB,MACb/iB,EAAS+iB,EAAM/iB,OAGnB,GAAIA,EAAQ,CACV,IAAIq0D,GAAY,QAAchpD,EAAQ+oD,IAAK7yD,KAAKmQ,EAAGnQ,KAAK0d,OASxD,IARAu/C,EAAG9sD,EAAI4pD,GAAY/5D,KAAM8J,EAAQ0mB,WAAY1mB,GAC7CgF,EAAI2qB,UAAYq5B,EAAUr5B,UAAU3vB,EAAQ0mB,YAC5C1hB,EAAIgrB,aAAe,SACnB06B,GAAY,OAAO1qD,EAAQ0qD,WAC3B6D,EAAevuD,EAAQuuD,aACvBvpD,EAAI2X,UAAY3c,EAAQozD,WACxBpuD,EAAIwhB,KAAOkkC,EAAUr9B,OAEhB54B,EAAI,EAAGA,EAAIE,IAAUF,EACxBuQ,EAAIylD,SAAS/yC,EAAMjjB,GAAIu0D,EAAU3iD,EAAE8sD,EAAG9sD,GAAI8sD,EAAG7sD,EAAIokD,EAAUjkC,WAAa,GACxE0sC,EAAG7sD,GAAKokD,EAAUjkC,WAAa8nC,EAE3B95D,EAAI,IAAME,IACZw+D,EAAG7sD,GAAKtG,EAAQwuD,kBAAoBD,MAK3C,CACDz5D,IAAK,gBACL0C,MAAO,SAAuBwN,EAAKmuD,EAAI1+D,EAAGu0D,EAAWhpD,GACnD,IAAIgxD,EAAc96D,KAAK86D,YAAYv8D,GAC/Bu9D,EAAkB97D,KAAK+6D,iBAAiBx8D,GACxCmyD,EAAY5mD,EAAQ4mD,UACpBE,EAAW9mD,EAAQ8mD,SACnBzqB,EAAar8B,EAAQq8B,WACrBsxB,GAAW,OAAO3tD,EAAQ2tD,UAC1B0F,EAASpD,GAAY/5D,KAAM,OAAQ8J,GACnCszD,EAAYtK,EAAU3iD,EAAEgtD,GACxBE,EAAU3M,EAAY+G,EAASlnC,YAAcknC,EAASlnC,WAAamgC,GAAa,EAAI,EACpF4M,EAASL,EAAG7sD,EAAIitD,EAEpB,GAAIvzD,EAAQ+mD,cAAe,CACzB,IAAImD,EAAc,CAChBlzC,OAAQxd,KAAKC,IAAIqtD,EAAUF,GAAa,EACxCrqC,WAAYy1C,EAAgBz1C,WAC5BlE,SAAU25C,EAAgB35C,SAC1ByD,YAAa,GAEXT,EAAU2tC,EAAUI,WAAWkK,EAAWxM,GAAYA,EAAW,EACjExrC,EAAUk4C,EAAS5M,EAAY,EACnC5hD,EAAI6X,YAAc7c,EAAQyzD,mBAC1BzuD,EAAI2X,UAAY3c,EAAQyzD,oBACxB,QAAUzuD,EAAKklD,EAAa7uC,EAASC,GACrCtW,EAAI6X,YAAcm0C,EAAYl0C,YAC9B9X,EAAI2X,UAAYq0C,EAAYp0C,iBAC5B,QAAU5X,EAAKklD,EAAa7uC,EAASC,OAChC,CACLtW,EAAI+X,WAAY,IAAAtoB,GAASu8D,EAAYl1C,aAAetiB,KAAKiC,IAAInH,MAAMkF,MAAM,OAAmB1F,OAAOgM,OAAOkxD,EAAYl1C,eAAiBk1C,EAAYl1C,aAAe,EAClK9W,EAAI6X,YAAcm0C,EAAYl0C,YAC9B9X,EAAIwsB,YAAYw/B,EAAYtsC,YAAc,IAC1C1f,EAAIysB,eAAiBu/B,EAAYrsC,kBAAoB,EACrD,IAAI+uC,EAAS1K,EAAUI,WAAWkK,EAAWxM,EAAWzqB,GACpDs3B,EAAS3K,EAAUI,WAAWJ,EAAUoB,MAAMkJ,EAAW,GAAIxM,EAAWzqB,EAAa,GACrFiY,GAAe,QAAc0c,EAAY1c,cAEzCxgD,OAAOgM,OAAOw0C,GAAcrO,MAAK,SAAU/mC,GAC7C,OAAa,IAANA,MAEP8F,EAAI0sB,YACJ1sB,EAAI2X,UAAY3c,EAAQyzD,oBACxB,QAAmBzuD,EAAK,CACtBqB,EAAGqtD,EACHptD,EAAGktD,EACHvlC,EAAG64B,EACH54B,EAAG04B,EACH5vC,OAAQs9B,IAEVtvC,EAAI+b,OACJ/b,EAAI6sB,SACJ7sB,EAAI2X,UAAYq0C,EAAYp0C,gBAC5B5X,EAAI0sB,aACJ,QAAmB1sB,EAAK,CACtBqB,EAAGstD,EACHrtD,EAAGktD,EAAS,EACZvlC,EAAG64B,EAAW,EACd54B,EAAG04B,EAAY,EACf5vC,OAAQs9B,IAEVtvC,EAAI+b,SAEJ/b,EAAI2X,UAAY3c,EAAQyzD,mBACxBzuD,EAAIisB,SAASyiC,EAAQF,EAAQ1M,EAAUF,GACvC5hD,EAAI4uD,WAAWF,EAAQF,EAAQ1M,EAAUF,GACzC5hD,EAAI2X,UAAYq0C,EAAYp0C,gBAC5B5X,EAAIisB,SAAS0iC,EAAQH,EAAS,EAAG1M,EAAW,EAAGF,EAAY,IAI/D5hD,EAAI2X,UAAYzmB,KAAKg7D,gBAAgBz8D,KAEtC,CACDK,IAAK,WACL0C,MAAO,SAAkB27D,EAAInuD,EAAKhF,GAChC,IAkBIiuD,EAAU4F,EAAW1F,EAAO15D,EAAGi4B,EAAGjrB,EAAMkrB,EAlBxC8gC,EAAOv3D,KAAKu3D,KACZiB,EAAc1uD,EAAQ0uD,YACtBoF,EAAY9zD,EAAQ8zD,UACpBrF,EAAgBzuD,EAAQyuD,cACxB7H,EAAY5mD,EAAQ4mD,UACpBE,EAAW9mD,EAAQ8mD,SACnBzqB,EAAar8B,EAAQq8B,WACrBsxB,GAAW,OAAO3tD,EAAQ2tD,UAC1BoG,EAAiBpG,EAASlnC,WAC1ButC,EAAe,EACfhL,GAAY,QAAchpD,EAAQ+oD,IAAK7yD,KAAKmQ,EAAGnQ,KAAK0d,OAEpDqgD,EAAiB,SAAwBx2C,GAC3CzY,EAAIylD,SAAShtC,EAAMurC,EAAU3iD,EAAE8sD,EAAG9sD,EAAI2tD,GAAeb,EAAG7sD,EAAIytD,EAAiB,GAC7EZ,EAAG7sD,GAAKytD,EAAiBrF,GAGvBwF,EAA0BlL,EAAUr5B,UAAUmkC,GAUlD,IARA9uD,EAAI2qB,UAAYmkC,EAChB9uD,EAAIgrB,aAAe,SACnBhrB,EAAIwhB,KAAOmnC,EAAStgC,OACpB8lC,EAAG9sD,EAAI4pD,GAAY/5D,KAAMg+D,EAAyBl0D,GAClDgF,EAAI2X,UAAY3c,EAAQm0D,WACxB,OAAKj+D,KAAKm4D,WAAY4F,GACtBD,EAAevF,GAA6C,UAA5ByF,EAAoD,WAAdJ,EAAyBhN,EAAW,EAAIzqB,EAAayqB,EAAW,EAAIzqB,EAAa,EAElJ5nC,EAAI,EAAGgN,EAAOgsD,EAAK94D,OAAQF,EAAIgN,IAAQhN,EAAG,CAa7C,IAZAw5D,EAAWR,EAAKh5D,GAChBo/D,EAAY39D,KAAKg7D,gBAAgBz8D,GACjCuQ,EAAI2X,UAAYk3C,GAChB,OAAK5F,EAASC,OAAQ+F,GACtB9F,EAAQF,EAASE,MAEbM,GAAiBN,EAAMx5D,SACzBuB,KAAKk+D,cAAcpvD,EAAKmuD,EAAI1+D,EAAGu0D,EAAWhpD,GAE1C+zD,EAAiBv6D,KAAKiC,IAAIkyD,EAASlnC,WAAYmgC,IAG5Cl6B,EAAI,EAAGC,EAAOwhC,EAAMx5D,OAAQ+3B,EAAIC,IAAQD,EAC3CunC,EAAe9F,EAAMzhC,IACrBqnC,EAAiBpG,EAASlnC,YAG5B,OAAKwnC,EAASG,MAAO6F,GAGvBD,EAAe,EACfD,EAAiBpG,EAASlnC,YAC1B,OAAKvwB,KAAKo4D,UAAW2F,GACrBd,EAAG7sD,GAAKooD,IAET,CACD55D,IAAK,aACL0C,MAAO,SAAoB27D,EAAInuD,EAAKhF,GAClC,IAEI4tD,EAAYn5D,EAFZi5D,EAASx3D,KAAKw3D,OACd/4D,EAAS+4D,EAAO/4D,OAGpB,GAAIA,EAAQ,CACV,IAAIq0D,GAAY,QAAchpD,EAAQ+oD,IAAK7yD,KAAKmQ,EAAGnQ,KAAK0d,OASxD,IARAu/C,EAAG9sD,EAAI4pD,GAAY/5D,KAAM8J,EAAQq0D,YAAar0D,GAC9CmzD,EAAG7sD,GAAKtG,EAAQ2uD,gBAChB3pD,EAAI2qB,UAAYq5B,EAAUr5B,UAAU3vB,EAAQq0D,aAC5CrvD,EAAIgrB,aAAe,SACnB49B,GAAa,OAAO5tD,EAAQ4tD,YAC5B5oD,EAAI2X,UAAY3c,EAAQs0D,YACxBtvD,EAAIwhB,KAAOonC,EAAWvgC,OAEjB54B,EAAI,EAAGA,EAAIE,IAAUF,EACxBuQ,EAAIylD,SAASiD,EAAOj5D,GAAIu0D,EAAU3iD,EAAE8sD,EAAG9sD,GAAI8sD,EAAG7sD,EAAIsnD,EAAWnnC,WAAa,GAC1E0sC,EAAG7sD,GAAKsnD,EAAWnnC,WAAazmB,EAAQ4uD,iBAI7C,CACD95D,IAAK,iBACL0C,MAAO,SAAwB27D,EAAInuD,EAAKuvD,EAAav0D,GACnD,IAAImvD,EAASj5D,KAAKi5D,OACdH,EAAS94D,KAAK84D,OACd3oD,EAAI8sD,EAAG9sD,EACPC,EAAI6sD,EAAG7sD,EACPsN,EAAQ2gD,EAAY3gD,MACpBD,EAAS4gD,EAAY5gD,OAErB6gD,GAAkB,QAAcx0D,EAAQ4vD,cACxCxS,EAAUoX,EAAgBpX,QAC1BC,EAAWmX,EAAgBnX,SAC3BC,EAAakX,EAAgBlX,WAC7BC,EAAciX,EAAgBjX,YAElCv4C,EAAI2X,UAAY3c,EAAQ4c,gBACxB5X,EAAI6X,YAAc7c,EAAQ8c,YAC1B9X,EAAI+X,UAAY/c,EAAQ8b,YACxB9W,EAAI0sB,YACJ1sB,EAAI2sB,OAAOtrB,EAAI+2C,EAAS92C,GAET,QAAX0oD,GACF94D,KAAKu+D,UAAUtB,EAAInuD,EAAKuvD,EAAav0D,GAGvCgF,EAAI4sB,OAAOvrB,EAAIuN,EAAQypC,EAAU/2C,GACjCtB,EAAI0vD,iBAAiBruD,EAAIuN,EAAOtN,EAAGD,EAAIuN,EAAOtN,EAAI+2C,GAEnC,WAAX2R,GAAkC,UAAXG,GACzBj5D,KAAKu+D,UAAUtB,EAAInuD,EAAKuvD,EAAav0D,GAGvCgF,EAAI4sB,OAAOvrB,EAAIuN,EAAOtN,EAAIqN,EAAS4pC,GACnCv4C,EAAI0vD,iBAAiBruD,EAAIuN,EAAOtN,EAAIqN,EAAQtN,EAAIuN,EAAQ2pC,EAAaj3C,EAAIqN,GAE1D,WAAXq7C,GACF94D,KAAKu+D,UAAUtB,EAAInuD,EAAKuvD,EAAav0D,GAGvCgF,EAAI4sB,OAAOvrB,EAAIi3C,EAAYh3C,EAAIqN,GAC/B3O,EAAI0vD,iBAAiBruD,EAAGC,EAAIqN,EAAQtN,EAAGC,EAAIqN,EAAS2pC,GAErC,WAAX0R,GAAkC,SAAXG,GACzBj5D,KAAKu+D,UAAUtB,EAAInuD,EAAKuvD,EAAav0D,GAGvCgF,EAAI4sB,OAAOvrB,EAAGC,EAAI82C,GAClBp4C,EAAI0vD,iBAAiBruD,EAAGC,EAAGD,EAAI+2C,EAAS92C,GACxCtB,EAAImvC,YACJnvC,EAAI+b,OAEA/gB,EAAQ8b,YAAc,GACxB9W,EAAI6sB,WAGP,CACD/8B,IAAK,yBACL0C,MAAO,SAAgCwI,GACrC,IAAInH,EAAQ3C,KAAK2C,MACbC,EAAQ5C,KAAKiK,YACbw0D,EAAQ77D,GAASA,EAAMuN,EACvBuuD,EAAQ97D,GAASA,EAAMwN,EAE3B,GAAIquD,GAASC,EAAO,CAClB,IAAIjuC,EAAW8lC,GAAYzsD,EAAQ2mB,UAAU/wB,KAAKM,KAAMA,KAAKsE,QAAStE,KAAKu6D,gBAE3E,IAAK9pC,EACH,OAGF,IAAI5lB,EAAO7K,KAAKw6D,MAAQlD,GAAet3D,KAAM8J,GACzCwyD,EAAkB1+D,OAAOoM,OAAO,GAAIymB,EAAUzwB,KAAKw6D,OACnDf,EAAYH,GAAmB32D,EAAOmH,EAASwyD,GAC/Cp7C,EAAQs4C,GAAmB1vD,EAASwyD,EAAiB7C,EAAW92D,GAEhE87D,EAAMl3D,MAAQ2Z,EAAM/Q,GAAKuuD,EAAMn3D,MAAQ2Z,EAAM9Q,IAC/CpQ,KAAKi5D,OAASQ,EAAUR,OACxBj5D,KAAK84D,OAASW,EAAUX,OACxB94D,KAAK0d,MAAQ7S,EAAK6S,MAClB1d,KAAKyd,OAAS5S,EAAK4S,OACnBzd,KAAK46D,OAASnqC,EAAStgB,EACvBnQ,KAAK66D,OAASpqC,EAASrgB,EAEvBpQ,KAAKgY,qBAAqBrN,OAAO3K,KAAMkhB,OAI5C,CACDtiB,IAAK,cACL0C,MAAO,WACL,QAAStB,KAAKs6D,UAEf,CACD17D,IAAK,OACL0C,MAAO,SAAcwN,GACnB,IAAIhF,EAAU9J,KAAK8J,QAAQooB,WAAWlyB,KAAKwS,cACvC8nD,EAAUt6D,KAAKs6D,QAEnB,GAAKA,EAAL,CAIAt6D,KAAK2+D,uBAAuB70D,GAE5B,IAAIu0D,EAAc,CAChB3gD,MAAO1d,KAAK0d,MACZD,OAAQzd,KAAKyd,QAEXw/C,EAAK,CACP9sD,EAAGnQ,KAAKmQ,EACRC,EAAGpQ,KAAKoQ,GAEVkqD,EAAUh3D,KAAK2W,IAAIqgD,GAAW,KAAO,EAAIA,EACzC,IAAI5rC,GAAU,OAAU5kB,EAAQ4kB,SAC5BkwC,EAAoB5+D,KAAKwhB,MAAM/iB,QAAUuB,KAAKm4D,WAAW15D,QAAUuB,KAAKu3D,KAAK94D,QAAUuB,KAAKo4D,UAAU35D,QAAUuB,KAAKw3D,OAAO/4D,OAE5HqL,EAAQmjB,SAAW2xC,IACrB9vD,EAAIgsB,OACJhsB,EAAI+vD,YAAcvE,EAClBt6D,KAAKs8B,eAAe2gC,EAAInuD,EAAKuvD,EAAav0D,IAC1C,QAAsBgF,EAAKhF,EAAQ8pD,eACnCqJ,EAAG7sD,GAAKse,EAAQpZ,IAChBtV,KAAKw8B,UAAUygC,EAAInuD,EAAKhF,GACxB9J,KAAK8+D,SAAS7B,EAAInuD,EAAKhF,GACvB9J,KAAK++D,WAAW9B,EAAInuD,EAAKhF,IACzB,QAAqBgF,EAAKhF,EAAQ8pD,eAClC9kD,EAAIksB,cAGP,CACDp8B,IAAK,oBACL0C,MAAO,WACL,OAAOtB,KAAKsE,SAAW,KAExB,CACD1F,IAAK,oBACL0C,MAAO,SAA2Bi7C,EAAgBoa,GAChD,IAAIqI,EAAUh/D,KAEVy8C,EAAaz8C,KAAKsE,QAClBmE,EAAS8zC,EAAej2B,KAAI,SAAU24C,GACxC,IAAInzD,EAAemzD,EAAOnzD,aACtBJ,EAAQuzD,EAAOvzD,MAEfS,EAAO6yD,EAAQr8D,MAAM2O,eAAexF,GAExC,IAAKK,EACH,MAAM,IAAIwxB,MAAM,kCAAoC7xB,GAGtD,MAAO,CACLA,aAAcA,EACdmK,QAAS9J,EAAKiF,KAAK1F,GACnBA,MAAOA,MAGP27B,IAAW,QAAeoV,EAAYh0C,GAEtCy2D,EAAkBl/D,KAAKm/D,iBAAiB12D,EAAQkuD,IAEhDtvB,GAAW63B,KACbl/D,KAAKsE,QAAUmE,EACfzI,KAAKu6D,eAAiB5D,EACtB32D,KAAKo/D,qBAAsB,EAC3Bp/D,KAAK2K,QAAO,MAGf,CACD/L,IAAK,cACL0C,MAAO,SAAqB3B,EAAGi9C,GAC7B,IAAIO,IAAc3+C,UAAUC,OAAS,QAAsBiE,IAAjBlE,UAAU,KAAmBA,UAAU,GAEjF,GAAIo+C,GAAU58C,KAAKo/D,oBACjB,OAAO,EAGTp/D,KAAKo/D,qBAAsB,EAC3B,IAAIt1D,EAAU9J,KAAK8J,QACf2yC,EAAaz8C,KAAKsE,SAAW,GAE7BmE,EAASzI,KAAKu9C,mBAAmB59C,EAAG88C,EAAYG,EAAQO,GAExD+hB,EAAkBl/D,KAAKm/D,iBAAiB12D,EAAQ9I,GAEhD0nC,EAAUuV,KAAW,QAAen0C,EAAQg0C,IAAeyiB,EAc/D,OAZI73B,IACFrnC,KAAKsE,QAAUmE,GAEXqB,EAAQmjB,SAAWnjB,EAAQ0yD,YAC7Bx8D,KAAKu6D,eAAiB,CACpBpqD,EAAGxQ,EAAEwQ,EACLC,EAAGzQ,EAAEyQ,GAEPpQ,KAAK2K,QAAO,EAAMiyC,KAIfvV,IAER,CACDzoC,IAAK,qBACL0C,MAAO,SAA4B3B,EAAG88C,EAAYG,EAAQO,GACxD,IAAIrzC,EAAU9J,KAAK8J,QAEnB,GAAe,aAAXnK,EAAEmD,KACJ,MAAO,GAGT,IAAKq6C,EACH,OAAOV,EAGT,IAAIh0C,EAASzI,KAAK2C,MAAMi7C,0BAA0Bj+C,EAAGmK,EAAQmC,KAAMnC,EAAS8yC,GAM5E,OAJI9yC,EAAQqB,SACV1C,EAAO0C,UAGF1C,IAER,CACD7J,IAAK,mBACL0C,MAAO,SAA0BmH,EAAQ9I,GACvC,IAAIi7D,EAAS56D,KAAK46D,OACdC,EAAS76D,KAAK66D,OACd/wD,EAAU9J,KAAK8J,QACf2mB,EAAW8lC,GAAYzsD,EAAQ2mB,UAAU/wB,KAAKM,KAAMyI,EAAQ9I,GAChE,OAAoB,IAAb8wB,IAAuBmqC,IAAWnqC,EAAStgB,GAAK0qD,IAAWpqC,EAASrgB,OAIxE8pD,EA3sBkB,CA4sBzBpvC,GAEFovC,GAAQ3D,YAAcA,GACtB,IAAI8I,GAAiB,CACnBzxD,GAAI,UACJunD,SAAU+E,GACV3D,YAAaA,GACb+I,UAAW,SAAmB38D,EAAOstD,EAAOnmD,GACtCA,IACFnH,EAAM4e,QAAU,IAAI24C,GAAQ,CAC1Bv3D,MAAOA,EACPmH,QAASA,MAIf4oB,aAAc,SAAsB/vB,EAAOstD,EAAOnmD,GAC5CnH,EAAM4e,SACR5e,EAAM4e,QAAQ3R,WAAW9F,IAG7B8S,MAAO,SAAeja,EAAOstD,EAAOnmD,GAC9BnH,EAAM4e,SACR5e,EAAM4e,QAAQ3R,WAAW9F,IAG7By1D,UAAW,SAAmB58D,GAC5B,IAAI4e,EAAU5e,EAAM4e,QAEpB,GAAIA,GAAWA,EAAQi+C,cAAe,CACpC,IAAIxmD,EAAO,CACTuI,QAASA,GAGX,IAAuD,IAAnD5e,EAAMyxB,cAAc,oBAAqBpb,GAC3C,OAGFuI,EAAQld,KAAK1B,EAAMmM,KACnBnM,EAAMyxB,cAAc,mBAAoBpb,KAG5Cq8C,WAAY,SAAoB1yD,EAAOqW,GACrC,GAAIrW,EAAM4e,QAAS,CACjB,IAAIwJ,EAAmB/R,EAAK4jC,OAExBj6C,EAAM4e,QAAQ+zC,YAAYt8C,EAAKhU,MAAO+lB,EAAkB/R,EAAKmkC,eAC/DnkC,EAAKquB,SAAU,KAIrBprB,SAAU,CACRgR,SAAS,EACTuvC,SAAU,KACV/rC,SAAU,UACV/J,gBAAiB,kBACjBw2C,WAAY,OACZ1I,UAAW,CACTxuC,OAAQ,QAEVqyC,aAAc,EACdC,kBAAmB,EACnB9nC,WAAY,OACZytC,UAAW,OACXzF,YAAa,EACbf,SAAU,GACVmG,UAAW,OACXQ,YAAa,OACb1F,cAAe,EACfD,gBAAiB,EACjBf,WAAY,CACV1xC,OAAQ,QAEVm4C,YAAa,OACbzvC,QAAS,EACT0qC,aAAc,EACdD,UAAW,EACXO,aAAc,EACdhJ,UAAW,SAAmB5hD,EAAK5D,GACjC,OAAOA,EAAKusD,SAAS5sD,MAEvB+lD,SAAU,SAAkB9hD,EAAK5D,GAC/B,OAAOA,EAAKusD,SAAS5sD,MAEvB0yD,mBAAoB,OACpBhF,eAAe,EACfpyB,WAAY,EACZvf,YAAa,gBACbhB,YAAa,EACbld,UAAW,CACTxF,SAAU,IACV4D,OAAQ,gBAEV+B,WAAY,CACVL,QAAS,CACP1F,KAAM,SACNyF,WAAY,CAAC,IAAK,IAAK,QAAS,SAAU,SAAU,WAEtD+xD,QAAS,CACPxzD,OAAQ,SACR5D,SAAU,MAGdH,UAAW,CACTm4D,YAAa,KACb15C,MAAO,SAAey5C,GACpB,GAAIA,EAAax8D,OAAS,EAAG,CAC3B,IAAI2F,EAAO62D,EAAa,GACpBhoD,EAAS7O,EAAKzB,MAAMyO,KAAK6B,OACzBwsD,EAAaxsD,EAASA,EAAOxU,OAAS,EAE1C,GAAIuB,MAAQA,KAAK8J,SAAiC,YAAtB9J,KAAK8J,QAAQmC,KACvC,OAAO7H,EAAK4L,QAAQgF,OAAS,GACxB,GAAI5Q,EAAK4Q,MACd,OAAO5Q,EAAK4Q,MACP,GAAIyqD,EAAa,GAAKr7D,EAAKkS,UAAYmpD,EAC5C,OAAOxsD,EAAO7O,EAAKkS,WAIvB,MAAO,IAET6kD,WAAY,KACZhD,WAAY,KACZoD,YAAa,KACbvmD,MAAO,SAAeiS,GACpB,GAAIjnB,MAAQA,KAAK8J,SAAiC,YAAtB9J,KAAK8J,QAAQmC,KACvC,OAAOgb,EAAYjS,MAAQ,KAAOiS,EAAYE,gBAAkBF,EAAYE,eAG9E,IAAInS,EAAQiS,EAAYjX,QAAQgF,OAAS,GAErCA,IACFA,GAAS,MAGX,IAAI1T,EAAQ2lB,EAAYE,eAMxB,OAJK,OAAc7lB,KACjB0T,GAAS1T,GAGJ0T,GAET6mD,WAAY,SAAoB50C,GAC9B,IACInd,EADOmd,EAAYtkB,MAAM2O,eAAe2V,EAAYnb,cACrCmB,WAAWgL,SAASgP,EAAY3Q,WACnD,MAAO,CACLsQ,YAAa9c,EAAQ8c,YACrBF,gBAAiB5c,EAAQ4c,gBACzBd,YAAa9b,EAAQ8b,YACrB4I,WAAY1kB,EAAQ0kB,WACpBC,iBAAkB3kB,EAAQ2kB,iBAC1B2vB,aAAc,IAGlB2d,eAAgB,WACd,OAAO/7D,KAAK8J,QAAQm0D,WAEtBnC,gBAAiB,SAAyB70C,GACxC,IACInd,EADOmd,EAAYtkB,MAAM2O,eAAe2V,EAAYnb,cACrCmB,WAAWgL,SAASgP,EAAY3Q,WACnD,MAAO,CACL+P,WAAYvc,EAAQuc,WACpBlE,SAAUrY,EAAQqY,WAGtBq5C,WAAY,KACZpD,UAAW,KACXqD,aAAc,KACdjE,OAAQ,KACRkE,YAAa,OAGjBrwC,cAAe,CACbosC,SAAU,OACVC,WAAY,OACZlD,UAAW,QAEbvuC,YAAa,CACX5d,YAAa,SAAqBtH,GAChC,MAAgB,WAATA,GAA8B,aAATA,GAAgC,aAATA,GAErDqH,YAAY,EACZrF,UAAW,CACTsF,aAAa,EACbD,YAAY,GAEdM,UAAW,CACTP,WAAW,GAEbU,WAAY,CACVV,UAAW,cAGfuqC,uBAAwB,CAAC,gBAEvBpxB,GAAuB1jB,OAAOyZ,OAAO,CACvCiqB,UAAW,KACXo+B,WAAYjX,GACZkX,OAAQj0D,GACRslD,OAAQkE,GACR0K,SAAUtJ,GACVb,MAAOS,GACPgE,QAASmF,KAiBX,SAASQ,GAAe5sD,EAAQsD,EAAK7K,EAAOo0D,GAC1C,IAAI1yC,EAAQna,EAAOkL,QAAQ5H,GAE3B,OAAe,IAAX6W,EAjBY,SAAqBna,EAAQsD,EAAK7K,EAAOo0D,GAWzD,MAVmB,iBAARvpD,GACT7K,EAAQuH,EAAO9U,KAAKoY,GAAO,EAC3BupD,EAAYnT,QAAQ,CAClBjhD,MAAOA,EACPsJ,MAAOuB,KAEA0H,MAAM1H,KACf7K,EAAQ,MAGHA,EAOEq0D,CAAY9sD,EAAQsD,EAAK7K,EAAOo0D,GAIlC1yC,IADIna,EAAO+sD,YAAYzpD,GACN7K,EAAQ0hB,EAGlC,IAII6yC,GAA6B,SAAUC,IACzC,OAAUD,EAAeC,GAEzB,IAAIC,EAAWnhE,EAAaihE,GAE5B,SAASA,EAAcx5D,GACrB,IAAI25D,EAQJ,OANA,OAAgBpgE,KAAMigE,IAEtBG,EAAUD,EAASzgE,KAAKM,KAAMyG,IACtB45D,iBAAc39D,EACtB09D,EAAQE,YAAc,EACtBF,EAAQG,aAAe,GAChBH,EA8IT,OA3IA,OAAaH,EAAe,CAAC,CAC3BrhE,IAAK,OACL0C,MAAO,SAAckvC,GACnB,IAAIgwB,EAAQxgE,KAAKugE,aAEjB,GAAIC,EAAM/hE,OAAQ,CAChB,IAGIgiE,EAHAxtD,EAASjT,KAAKkT,YAEdwtD,EAAcxgE,EAA2BsgE,GAG7C,IACE,IAAKE,EAAYt/D,MAAOq/D,EAAUC,EAAY9/D,KAAKS,MAAO,CACxD,IAAIs/D,EAAgBF,EAAQn/D,MACxBs/D,EAAUD,EAAcj1D,MACxBsJ,EAAQ2rD,EAAc3rD,MAEtB/B,EAAO2tD,KAAa5rD,GACtB/B,EAAO8F,OAAO6nD,EAAS,IAG3B,MAAOl/D,GACPg/D,EAAY/gE,EAAE+B,GACd,QACAg/D,EAAYl/D,IAGdxB,KAAKugE,aAAe,IAGtB,QAAK,OAAgBN,EAAczgE,WAAY,OAAQQ,MAAMN,KAAKM,KAAMwwC,KAEzE,CACD5xC,IAAK,QACL0C,MAAO,SAAeiV,EAAK7K,GACzB,IAAI,OAAc6K,GAChB,OAAO,KAGT,IAAItD,EAASjT,KAAKkT,YAElB,OA9DW,SAAoBxH,EAAOnG,GAC1C,OAAiB,OAAVmG,EAAiB,MAAO,OAAYpI,KAAKwqB,MAAMpiB,GAAQ,EAAGnG,GA6DtDyqB,CADPtkB,EAAQm1D,SAASn1D,IAAUuH,EAAOvH,KAAW6K,EAAM7K,EAAQm0D,GAAe5sD,EAAQsD,GAAK,IAAAvN,GAAe0C,EAAO6K,GAAMvW,KAAKugE,cAC/FttD,EAAOxU,OAAS,KAE1C,CACDG,IAAK,sBACL0C,MAAO,WACL,IAAIw/D,EAAuB9gE,KAAKwU,gBAC5BC,EAAaqsD,EAAqBrsD,WAClCC,EAAaosD,EAAqBpsD,WAElCqsD,EAAkB/gE,KAAKuyB,WAAU,GACjChvB,EAAMw9D,EAAgBx9D,IACtBgC,EAAMw7D,EAAgBx7D,IAEE,UAAxBvF,KAAK8J,QAAQmkB,SACVxZ,IACHlR,EAAM,GAGHmR,IACHnP,EAAMvF,KAAKkT,YAAYzU,OAAS,IAIpCuB,KAAKuD,IAAMA,EACXvD,KAAKuF,IAAMA,IAEZ,CACD3G,IAAK,aACL0C,MAAO,WACL,IAAIiC,EAAMvD,KAAKuD,IACXgC,EAAMvF,KAAKuF,IACXgb,EAASvgB,KAAK8J,QAAQyW,OACtBpG,EAAQ,GACRlH,EAASjT,KAAKkT,YAClBD,EAAiB,IAAR1P,GAAagC,IAAQ0N,EAAOxU,OAAS,EAAIwU,EAASA,EAAOnS,MAAMyC,EAAKgC,EAAM,GACnFvF,KAAKsgE,YAAch9D,KAAKiC,IAAI0N,EAAOxU,QAAU8hB,EAAS,EAAI,GAAI,GAC9DvgB,KAAKqgE,YAAcrgE,KAAKuD,KAAOgd,EAAS,GAAM,GAE9C,IAAK,IAAIjf,EAAQiC,EAAKjC,GAASiE,EAAKjE,IAClC6Y,EAAMhc,KAAK,CACTmD,MAAOA,IAIX,OAAO6Y,IAER,CACDvb,IAAK,mBACL0C,MAAO,SAA0BA,GAC/B,IAAI2R,EAASjT,KAAKkT,YAElB,OAAI5R,GAAS,GAAKA,EAAQ2R,EAAOxU,OACxBwU,EAAO3R,GAGTA,IAER,CACD1C,IAAK,YACL0C,MAAO,YACL,QAAK,OAAgB2+D,EAAczgE,WAAY,YAAaQ,MAAMN,KAAKM,MAElEA,KAAK8c,iBACR9c,KAAK0xB,gBAAkB1xB,KAAK0xB,kBAG/B,CACD9yB,IAAK,mBACL0C,MAAO,SAA0BA,GAK/B,MAJqB,iBAAVA,IACTA,EAAQtB,KAAKqT,MAAM/R,IAGJ,OAAVA,EAAiBuS,IAAM7T,KAAKuf,oBAAoBje,EAAQtB,KAAKqgE,aAAergE,KAAKsgE,eAEzF,CACD1hE,IAAK,kBACL0C,MAAO,SAAyBoK,GAC9B,IAAIyO,EAAQna,KAAKma,MAEjB,OAAIzO,EAAQ,GAAKA,EAAQyO,EAAM1b,OAAS,EAC/B,KAGFuB,KAAKka,iBAAiBC,EAAMzO,GAAOpK,SAE3C,CACD1C,IAAK,mBACL0C,MAAO,SAA0Bm2B,GAC/B,OAAOn0B,KAAKwqB,MAAM9tB,KAAKqgE,YAAcrgE,KAAKghE,mBAAmBvpC,GAASz3B,KAAKsgE,eAE5E,CACD1hE,IAAK,eACL0C,MAAO,WACL,OAAOtB,KAAKwV,WAITyqD,EA5JwB,CA6J/BtvC,IA8HF,SAASswC,GAAkB3/D,EAAO4/D,EAAYC,GAC5C,IAAI/lD,EAAa+lD,EAAO/lD,WACpBuT,EAAcwyC,EAAOxyC,YACrByyC,GAAM,IAAAlsD,GAAUyZ,GAChB5S,GAASX,EAAa9X,KAAKqgB,IAAIy9C,GAAO99D,KAAKmgB,IAAI29C,KAAS,KACxD3iE,EAAS,IAAOyiE,GAAc,GAAK5/D,GAAO7C,OAC9C,OAAO6E,KAAKC,IAAI29D,EAAanlD,EAAOtd,GAlItCwhE,GAAcryD,GAAK,WACnBqyD,GAAchkD,SAAW,CACvB9B,MAAO,CACL+U,SAAU+wC,GAAczgE,UAAUyV,mBAkItC,IAAIosD,GAA+B,SAAUC,IAC3C,OAAUD,EAAiBC,GAE3B,IAAIC,EAAWviE,EAAaqiE,GAE5B,SAASA,EAAgB56D,GACvB,IAAI+6D,EAUJ,OARA,OAAgBxhE,KAAMqhE,IAEtBG,EAAUD,EAAS7hE,KAAKM,KAAMyG,IACtBjD,WAAQd,EAChB8+D,EAAQp2D,SAAM1I,EACd8+D,EAAQnB,iBAAc39D,EACtB8+D,EAAQC,eAAY/+D,EACpB8+D,EAAQlB,YAAc,EACfkB,EA+JT,OA5JA,OAAaH,EAAiB,CAAC,CAC7BziE,IAAK,QACL0C,MAAO,SAAeiV,EAAK7K,GACzB,OAAI,OAAc6K,KAIE,iBAARA,GAAoBA,aAAepC,UAAY0sD,UAAUtqD,GAH5D,MAODA,IAET,CACD3X,IAAK,yBACL0C,MAAO,WACL,IAAIof,EAAc1gB,KAAK8J,QAAQ4W,YAE3BghD,EAAuB1hE,KAAKwU,gBAC5BC,EAAaitD,EAAqBjtD,WAClCC,EAAagtD,EAAqBhtD,WAElCnR,EAAMvD,KAAKuD,IACXgC,EAAMvF,KAAKuF,IAEXo8D,EAAS,SAAgB34D,GAC3B,OAAOzF,EAAMkR,EAAalR,EAAMyF,GAG9B44D,EAAS,SAAgB54D,GAC3B,OAAOzD,EAAMmP,EAAanP,EAAMyD,GAGlC,GAAI0X,EAAa,CACf,IAAImhD,GAAU,IAAAzgE,GAAKmC,GACfu+D,GAAU,IAAA1gE,GAAKmE,GAEfs8D,EAAU,GAAKC,EAAU,EAC3BF,EAAO,GACEC,EAAU,GAAKC,EAAU,GAClCH,EAAO,GAIX,GAAIp+D,IAAQgC,EAAK,CACf,IAAIgb,EAAS,GAEThb,GAAO4O,OAAO4tD,kBAAoBx+D,GAAO4Q,OAAO6tD,oBAClDzhD,EAASjd,KAAK2W,IAAU,IAAN1U,IAGpBq8D,EAAOr8D,EAAMgb,GAERG,GACHihD,EAAOp+D,EAAMgd,GAIjBvgB,KAAKuD,IAAMA,EACXvD,KAAKuF,IAAMA,IAEZ,CACD3G,IAAK,eACL0C,MAAO,WACL,IAGI2gE,EAHA31C,EAAWtsB,KAAK8J,QAAQqQ,MACxBqS,EAAgBF,EAASE,cACzB01C,EAAW51C,EAAS41C,SAmBxB,OAhBIA,GACFD,EAAW3+D,KAAKgqB,KAAKttB,KAAKuF,IAAM28D,GAAY5+D,KAAK0D,MAAMhH,KAAKuD,IAAM2+D,GAAY,GAE/D,MACblxB,QAAQG,KAAK,UAAUxjC,OAAO3N,KAAK4N,GAAI,qBAAqBD,OAAOu0D,EAAU,mCAAmCv0D,OAAOs0D,EAAU,8BACjIA,EAAW,MAGbA,EAAWjiE,KAAKmiE,mBAChB31C,EAAgBA,GAAiB,IAG/BA,IACFy1C,EAAW3+D,KAAKC,IAAIipB,EAAey1C,IAG9BA,IAER,CACDrjE,IAAK,mBACL0C,MAAO,WACL,OAAO6S,OAAOC,oBAEf,CACDxV,IAAK,aACL0C,MAAO,WACL,IAAI4J,EAAOlL,KAAK8J,QACZwiB,EAAWphB,EAAKiP,MAChB8nD,EAAWjiE,KAAKoiE,eAgBhBjoD,EAlQV,SAAyBkoD,EAAmBC,GAC1C,IAoBIt8D,EAAQu8D,EAASC,EAASC,EApB1BtoD,EAAQ,GAER8T,EAASo0C,EAAkBp0C,OAC3BpsB,EAAOwgE,EAAkBxgE,KACzB0B,EAAM8+D,EAAkB9+D,IACxBgC,EAAM88D,EAAkB98D,IACxBm9D,EAAYL,EAAkBK,UAC9BhwD,EAAQ2vD,EAAkB3vD,MAC1BuvD,EAAWI,EAAkBJ,SAC7BU,EAAYN,EAAkBM,UAC9BC,EAAgBP,EAAkBO,cAClC/gC,EAAOhgC,GAAQ,EACfghE,EAAYZ,EAAW,EACvBa,EAAOR,EAAU/+D,IACjBw/D,EAAOT,EAAU/8D,IACjBkP,IAAc,OAAclR,GAC5BmR,IAAc,OAAcnP,GAC5By9D,IAAgB,OAActwD,GAC9BwuD,GAAc6B,EAAOD,IAASH,EAAY,GAC1CjgD,GAAU,SAASqgD,EAAOD,GAAQD,EAAYhhC,GAAQA,EAG1D,GAAInf,EArBc,QAqBYjO,IAAeC,EAC3C,MAAO,CAAC,CACNpT,MAAOwhE,GACN,CACDxhE,MAAOyhE,KAIXN,EAAYn/D,KAAKgqB,KAAKy1C,EAAOrgD,GAAWpf,KAAK0D,MAAM87D,EAAOpgD,IAE1CmgD,IACdngD,GAAU,QAAQ+/C,EAAY//C,EAAUmgD,EAAYhhC,GAAQA,IAGzD,OAAc6gC,KACjB18D,EAAS1C,KAAK6oB,IAAI,GAAIu2C,GACtBhgD,EAAUpf,KAAKgqB,KAAK5K,EAAU1c,GAAUA,GAG3B,UAAXioB,GACFs0C,EAAUj/D,KAAK0D,MAAM87D,EAAOpgD,GAAWA,EACvC8/C,EAAUl/D,KAAKgqB,KAAKy1C,EAAOrgD,GAAWA,IAEtC6/C,EAAUO,EACVN,EAAUO,GAGRtuD,GAAcC,GAAc7S,IAAQ,SAAa0D,EAAMhC,GAAO1B,EAAM6gB,EAAU,MAEhFA,GAAWnd,EAAMhC,IADjBk/D,EAAYn/D,KAAKwqB,MAAMxqB,KAAKC,KAAKgC,EAAMhC,GAAOmf,EAASu/C,KAEvDM,EAAUh/D,EACVi/D,EAAUj9D,GACDy9D,EAITtgD,IAFA8/C,EAAU9tD,EAAanP,EAAMi9D,IAD7BD,EAAU9tD,EAAalR,EAAMg/D,KAE7BE,EAAY/vD,EAAQ,IAGpB+vD,GAAaD,EAAUD,GAAW7/C,EAGhC+/C,GADE,QAAaA,EAAWn/D,KAAKwqB,MAAM20C,GAAY//C,EAAU,KAC/Cpf,KAAKwqB,MAAM20C,GAEXn/D,KAAKgqB,KAAKm1C,IAI1B,IAAIQ,EAAgB3/D,KAAKiC,KAAI,QAAemd,IAAU,QAAe6/C,IACrEv8D,EAAS1C,KAAK6oB,IAAI,IAAI,OAAcu2C,GAAaO,EAAgBP,GACjEH,EAAUj/D,KAAKwqB,MAAMy0C,EAAUv8D,GAAUA,EACzCw8D,EAAUl/D,KAAKwqB,MAAM00C,EAAUx8D,GAAUA,EACzC,IAAIwwB,EAAI,EAoBR,IAlBI/hB,IACEmuD,GAAiBL,IAAYh/D,GAC/B4W,EAAMhc,KAAK,CACTmD,MAAOiC,IAGLg/D,EAAUh/D,GACZizB,KAGE,QAAalzB,KAAKwqB,OAAOy0C,EAAU/rC,EAAI9T,GAAW1c,GAAUA,EAAQzC,EAAK09D,GAAkB19D,EAAK29D,EAAYmB,KAC9G7rC,KAEO+rC,EAAUh/D,GACnBizB,KAIGA,EAAIisC,IAAajsC,EACtBrc,EAAMhc,KAAK,CACTmD,MAAOgC,KAAKwqB,OAAOy0C,EAAU/rC,EAAI9T,GAAW1c,GAAUA,IAkB1D,OAdI0O,GAAckuD,GAAiBJ,IAAYj9D,EACzC4U,EAAM1b,SAAU,QAAa0b,EAAMA,EAAM1b,OAAS,GAAG6C,MAAOiE,EAAK07D,GAAkB17D,EAAK27D,EAAYmB,IACtGloD,EAAMA,EAAM1b,OAAS,GAAG6C,MAAQiE,EAEhC4U,EAAMhc,KAAK,CACTmD,MAAOiE,IAGDmP,GAAc8tD,IAAYj9D,GACpC4U,EAAMhc,KAAK,CACTmD,MAAOkhE,IAIJroD,EAgJS+oD,CAdkB,CAC5BjB,SAFFA,EAAW3+D,KAAKiC,IAAI,EAAG08D,GAGrBh0C,OAAQ/iB,EAAK+iB,OACb1qB,IAAK2H,EAAK3H,IACVgC,IAAK2F,EAAK3F,IACVm9D,UAAWp2C,EAASo2C,UACpB7gE,KAAMyqB,EAAS41C,SACfxvD,MAAO4Z,EAAS5Z,MAChBiwD,UAAW3iE,KAAKmjE,aAChB/nD,WAAYpb,KAAK8c,eACjB6R,YAAarC,EAASqC,aAAe,EACrCi0C,eAA0C,IAA3Bt2C,EAASs2C,eAEV5iE,KAAKqxB,QAAUrxB,MAgB/B,MAboB,UAAhBkL,EAAK+iB,SACP,QAAmB9T,EAAOna,KAAM,SAG9BkL,EAAKC,SACPgP,EAAMhP,UACNnL,KAAKwD,MAAQxD,KAAKuF,IAClBvF,KAAKoL,IAAMpL,KAAKuD,MAEhBvD,KAAKwD,MAAQxD,KAAKuD,IAClBvD,KAAKoL,IAAMpL,KAAKuF,KAGX4U,IAER,CACDvb,IAAK,YACL0C,MAAO,WACL,IAAI6Y,EAAQna,KAAKma,MACb3W,EAAQxD,KAAKuD,IACb6H,EAAMpL,KAAKuF,IAIf,IAFA,QAAK,OAAgB87D,EAAgB7hE,WAAY,YAAaQ,MAAMN,KAAKM,MAErEA,KAAK8J,QAAQyW,QAAUpG,EAAM1b,OAAQ,CACvC,IAAI8hB,GAAUnV,EAAM5H,GAASF,KAAKiC,IAAI4U,EAAM1b,OAAS,EAAG,GAAK,EAC7D+E,GAAS+c,EACTnV,GAAOmV,EAGTvgB,KAAKqgE,YAAc78D,EACnBxD,KAAKyhE,UAAYr2D,EACjBpL,KAAKsgE,YAAcl1D,EAAM5H,IAE1B,CACD5E,IAAK,mBACL0C,MAAO,SAA0BA,GAC/B,OAAO,OAAaA,EAAOtB,KAAK2C,MAAMmH,QAAQ4b,OAAQ1lB,KAAK8J,QAAQqQ,MAAM8R,YAItEo1C,EA/K0B,CAgLjC1wC,IAEEyyC,GAA2B,SAAUC,IACvC,OAAUD,EAAaC,GAEvB,IAAIC,EAAWtkE,EAAaokE,GAE5B,SAASA,IAGP,OAFA,OAAgBpjE,KAAMojE,GAEfE,EAASllE,MAAM4B,KAAMxB,WAsC9B,OAnCA,OAAa4kE,EAAa,CAAC,CACzBxkE,IAAK,sBACL0C,MAAO,WACL,IAAIiiE,EAAmBvjE,KAAKuyB,WAAU,GAClChvB,EAAMggE,EAAiBhgE,IACvBgC,EAAMg+D,EAAiBh+D,IAE3BvF,KAAKuD,KAAM,OAAeA,GAAOA,EAAM,EACvCvD,KAAKuF,KAAM,OAAeA,GAAOA,EAAM,EACvCvF,KAAKwjE,2BAEN,CACD5kE,IAAK,mBACL0C,MAAO,WACL,IAAI8Z,EAAapb,KAAK8c,eAClBre,EAAS2c,EAAapb,KAAK0d,MAAQ1d,KAAKyd,OACxCkR,GAAc,IAAAzZ,GAAUlV,KAAK8J,QAAQqQ,MAAMwU,aAC3C5S,GAASX,EAAa9X,KAAKqgB,IAAIgL,GAAerrB,KAAKmgB,IAAIkL,KAAiB,KAExE+H,EAAW12B,KAAKk3B,wBAAwB,GAE5C,OAAO5zB,KAAKgqB,KAAK7uB,EAAS6E,KAAKC,IAAI,GAAImzB,EAASnG,WAAaxU,MAE9D,CACDnd,IAAK,mBACL0C,MAAO,SAA0BA,GAC/B,OAAiB,OAAVA,EAAiBuS,IAAM7T,KAAKuf,oBAAoBje,EAAQtB,KAAKqgE,aAAergE,KAAKsgE,eAEzF,CACD1hE,IAAK,mBACL0C,MAAO,SAA0Bm2B,GAC/B,OAAOz3B,KAAKqgE,YAAcrgE,KAAKghE,mBAAmBvpC,GAASz3B,KAAKsgE,gBAI7D8C,EA9CsB,CA+C7B/B,IASF,SAASoC,GAAQC,GAEf,OAAkB,IADLA,EAAUpgE,KAAK6oB,IAAI,GAAI7oB,KAAK0D,OAAM,OAAM08D,KARvDN,GAAYx1D,GAAK,SACjBw1D,GAAYnnD,SAAW,CACrB9B,MAAO,CACL+U,SAAU9C,GAAMd,WAAWC,UA0C/B,IAAIo4C,GAAgC,SAAUC,IAC5C,OAAUD,EAAkBC,GAE5B,IAAIC,EAAW7kE,EAAa2kE,GAE5B,SAASA,EAAiBl9D,GACxB,IAAIq9D,EASJ,OAPA,OAAgB9jE,KAAM2jE,IAEtBG,EAAUD,EAASnkE,KAAKM,KAAMyG,IACtBjD,WAAQd,EAChBohE,EAAQ14D,SAAM1I,EACdohE,EAAQzD,iBAAc39D,EACtBohE,EAAQxD,YAAc,EACfwD,EA2IT,OAxIA,OAAaH,EAAkB,CAAC,CAC9B/kE,IAAK,QACL0C,MAAO,SAAeiV,EAAK7K,GACzB,IAAIpK,EAAQ+/D,GAAgB7hE,UAAU6T,MAAMjV,MAAM4B,KAAM,CAACuW,EAAK7K,IAE9D,GAAc,IAAVpK,EAKJ,OAAO,OAAeA,IAAUA,EAAQ,EAAIA,EAAQ,KAJlDtB,KAAK+jE,OAAQ,IAMhB,CACDnlE,IAAK,sBACL0C,MAAO,WACL,IAAI0iE,EAAmBhkE,KAAKuyB,WAAU,GAClChvB,EAAMygE,EAAiBzgE,IACvBgC,EAAMy+D,EAAiBz+D,IAE3BvF,KAAKuD,KAAM,OAAeA,GAAOD,KAAKiC,IAAI,EAAGhC,GAAO,KACpDvD,KAAKuF,KAAM,OAAeA,GAAOjC,KAAKiC,IAAI,EAAGA,GAAO,KAEhDvF,KAAK8J,QAAQ4W,cACf1gB,KAAK+jE,OAAQ,GAGf/jE,KAAKwjE,2BAEN,CACD5kE,IAAK,yBACL0C,MAAO,WACL,IAAI2iE,EAAuBjkE,KAAKwU,gBAC5BC,EAAawvD,EAAqBxvD,WAClCC,EAAauvD,EAAqBvvD,WAElCnR,EAAMvD,KAAKuD,IACXgC,EAAMvF,KAAKuF,IAEXo8D,EAAS,SAAgB34D,GAC3B,OAAOzF,EAAMkR,EAAalR,EAAMyF,GAG9B44D,EAAS,SAAgB54D,GAC3B,OAAOzD,EAAMmP,EAAanP,EAAMyD,GAG9Bk7D,EAAM,SAAal7D,EAAGm7D,GACxB,OAAO7gE,KAAK6oB,IAAI,GAAI7oB,KAAK0D,OAAM,OAAMgC,IAAMm7D,IAGzC5gE,IAAQgC,IACNhC,GAAO,GACTo+D,EAAO,GACPC,EAAO,MAEPD,EAAOuC,EAAI3gE,GAAM,IACjBq+D,EAAOsC,EAAI3+D,EAAK,MAIhBhC,GAAO,GACTo+D,EAAOuC,EAAI3+D,GAAM,IAGfA,GAAO,GACTq8D,EAAOsC,EAAI3gE,EAAK,IAGdvD,KAAK+jE,OAAS/jE,KAAKuD,MAAQvD,KAAK8xB,eAAiBvuB,IAAQ2gE,EAAIlkE,KAAKuD,IAAK,IACzEo+D,EAAOuC,EAAI3gE,GAAM,IAGnBvD,KAAKuD,IAAMA,EACXvD,KAAKuF,IAAMA,IAEZ,CACD3G,IAAK,aACL0C,MAAO,WACL,IAAI4J,EAAOlL,KAAK8J,QAKZqQ,EAtIV,SAAuBkoD,EAAmBC,GACxC,IAAI8B,EAAS9gE,KAAK0D,OAAM,OAAMs7D,EAAU/8D,MACpC8+D,EAAiB/gE,KAAKgqB,KAAKg1C,EAAU/8D,IAAMjC,KAAK6oB,IAAI,GAAIi4C,IACxDjqD,EAAQ,GACRupD,GAAU,OAAgBrB,EAAkB9+D,IAAKD,KAAK6oB,IAAI,GAAI7oB,KAAK0D,OAAM,OAAMs7D,EAAU/+D,QACzF2gE,EAAM5gE,KAAK0D,OAAM,OAAM08D,IACvBY,EAAchhE,KAAK0D,MAAM08D,EAAUpgE,KAAK6oB,IAAI,GAAI+3C,IAChDxB,EAAYwB,EAAM,EAAI5gE,KAAK6oB,IAAI,GAAI7oB,KAAK2W,IAAIiqD,IAAQ,EAExD,GACE/pD,EAAMhc,KAAK,CACTmD,MAAOoiE,EACP12C,MAAOy2C,GAAQC,KAIG,MAFlBY,IAGAA,EAAc,EAEd5B,IADEwB,GACiB,EAAI,EAAIxB,GAG7BgB,EAAUpgE,KAAKwqB,MAAMw2C,EAAchhE,KAAK6oB,IAAI,GAAI+3C,GAAOxB,GAAaA,QAC7DwB,EAAME,GAAUF,IAAQE,GAAUE,EAAcD,GAEzD,IAAIE,GAAW,OAAgBlC,EAAkB98D,IAAKm+D,GAKtD,OAJAvpD,EAAMhc,KAAK,CACTmD,MAAOijE,EACPv3C,MAAOy2C,GAAQC,KAEVvpD,EAwGSqqD,CAJY,CACtBjhE,IAAKvD,KAAK4xB,SACVrsB,IAAKvF,KAAK2xB,UAEiC3xB,MAe7C,MAboB,UAAhBkL,EAAK+iB,SACP,QAAmB9T,EAAOna,KAAM,SAG9BkL,EAAKC,SACPgP,EAAMhP,UACNnL,KAAKwD,MAAQxD,KAAKuF,IAClBvF,KAAKoL,IAAMpL,KAAKuD,MAEhBvD,KAAKwD,MAAQxD,KAAKuD,IAClBvD,KAAKoL,IAAMpL,KAAKuF,KAGX4U,IAER,CACDvb,IAAK,mBACL0C,MAAO,SAA0BA,GAC/B,YAAiBoB,IAAVpB,EAAsB,KAAM,OAAaA,EAAOtB,KAAK2C,MAAMmH,QAAQ4b,OAAQ1lB,KAAK8J,QAAQqQ,MAAM8R,UAEtG,CACDrtB,IAAK,YACL0C,MAAO,WACL,IAAIkC,EAAQxD,KAAKuD,KAEjB,QAAK,OAAgBogE,EAAiBnkE,WAAY,YAAaQ,MAAMN,KAAKM,MAE1EA,KAAKqgE,aAAc,OAAM78D,GACzBxD,KAAKsgE,aAAc,OAAMtgE,KAAKuF,MAAO,OAAM/B,KAE5C,CACD5E,IAAK,mBACL0C,MAAO,SAA0BA,GAK/B,YAJcoB,IAAVpB,GAAiC,IAAVA,IACzBA,EAAQtB,KAAKuD,KAGD,OAAVjC,GAAkB2c,MAAM3c,GACnBuS,IAGF7T,KAAKuf,mBAAmBje,IAAUtB,KAAKuD,IAAM,IAAK,OAAMjC,GAAStB,KAAKqgE,aAAergE,KAAKsgE,eAElG,CACD1hE,IAAK,mBACL0C,MAAO,SAA0Bm2B,GAC/B,IAAIC,EAAU13B,KAAKghE,mBAAmBvpC,GACtC,OAAOn0B,KAAK6oB,IAAI,GAAInsB,KAAKqgE,YAAc3oC,EAAU13B,KAAKsgE,iBAInDqD,EA1J2B,CA2JlChzC,IAYF,SAAS8zC,GAAsBv5D,GAC7B,IAAIohB,EAAWphB,EAAKiP,MAEpB,GAAImS,EAASrC,SAAW/e,EAAK+e,QAAS,CACpC,IAAIyE,GAAU,OAAUpC,EAASkD,iBACjC,OAAO,IAAAxmB,GAAesjB,EAASgE,MAAQhE,EAASgE,KAAKzlB,KAAM,EAAA5C,EAAA,WAAsBymB,EAAQjR,OAG3F,OAAO,EAWT,SAASinD,GAAgB3gD,EAAO4gB,EAAK95B,EAAMtH,EAAKgC,GAC9C,OAAIwe,IAAUxgB,GAAOwgB,IAAUxe,EACtB,CACL/B,MAAOmhC,EAAM95B,EAAO,EACpBO,IAAKu5B,EAAM95B,EAAO,GAEXkZ,EAAQxgB,GAAOwgB,EAAQxe,EACzB,CACL/B,MAAOmhC,EAAM95B,EACbO,IAAKu5B,GAIF,CACLnhC,MAAOmhC,EACPv5B,IAAKu5B,EAAM95B,GAIf,SAAS85D,GAAmB35D,GAc1B,IAbA,IA5BwB8D,EAAKwhB,EAAMtb,EA4B/ByG,EAAO,CACT7J,EAAG5G,EAAMyK,KAAOzK,EAAM6qD,SAASpgD,KAC/B/R,EAAGsH,EAAMuK,MAAQvK,EAAM6qD,SAAStgD,MAChCL,EAAGlK,EAAMsK,IAAMtK,EAAM6qD,SAASvgD,IAC9BH,EAAGnK,EAAMwK,OAASxK,EAAM6qD,SAASrgD,QAE/BovD,EAAShnE,OAAOoM,OAAO,GAAIyR,GAC3BkZ,EAAa,GACbjG,EAAU,GACVm2C,EAAa75D,EAAM85D,aAAarmE,OAChCsmE,EAAiB/5D,EAAMlB,QAAQqgB,YAC/B66C,EAAkBD,EAAeE,kBAAoB,EAAA5gD,EAAKwgD,EAAa,EAElEtmE,EAAI,EAAGA,EAAIsmE,EAAYtmE,IAAK,CACnC,IAAI2M,EAAO65D,EAAe7yC,WAAWlnB,EAAMk6D,qBAAqB3mE,IAChEmwB,EAAQnwB,GAAK2M,EAAKwjB,QAClB,IAAI/D,EAAgB3f,EAAMm6D,iBAAiB5mE,EAAGyM,EAAMo6D,YAAc12C,EAAQnwB,GAAIymE,GAC1EK,GAAS,OAAOn6D,EAAKolB,MACrBwlC,GA9CkBhnD,EA8CU9D,EAAM8D,IA9CXwhB,EA8CgB+0C,EA9CVrwD,EA8CkBhK,EAAM85D,aAAavmE,GA7CxEyW,GAAQ,OAAQA,GAASA,EAAQ,CAACA,GAC3B,CACL+iB,GAAG,QAAajpB,EAAKwhB,EAAK6G,OAAQniB,GAClCgjB,EAAGhjB,EAAMvW,OAAS6xB,EAAKC,aA2CvBoE,EAAWp2B,GAAKu3D,EAEhB,IAAIrgC,GAAe,QAAgBzqB,EAAM0e,cAAcnrB,GAAKymE,GAExDjhD,EAAQzgB,KAAKwqB,OAAM,OAAU2H,IAGjC6vC,GAAaV,EAAQnpD,EAAMga,EAFbivC,GAAgB3gD,EAAO4G,EAAcxa,EAAG2lD,EAAS/9B,EAAG,EAAG,KACvD2sC,GAAgB3gD,EAAO4G,EAAcva,EAAG0lD,EAAS99B,EAAG,GAAI,MAIxEhtB,EAAMu6D,eAAe9pD,EAAK7J,EAAIgzD,EAAOhzD,EAAGgzD,EAAOlhE,EAAI+X,EAAK/X,EAAG+X,EAAKvG,EAAI0vD,EAAO1vD,EAAG0vD,EAAOzvD,EAAIsG,EAAKtG,GAC9FnK,EAAMw6D,iBA0BR,SAA8Bx6D,EAAO2pB,EAAYjG,GAQ/C,IAPA,IAAIvqB,EAAQ,GACR0gE,EAAa75D,EAAM85D,aAAarmE,OAChCyM,EAAOF,EAAMlB,QACb27D,EAAQhB,GAAsBv5D,GAAQ,EACtCw6D,EAAgB16D,EAAMo6D,YACtBJ,EAAkB95D,EAAKif,YAAY86C,kBAAoB,EAAA5gD,EAAKwgD,EAAa,EAEpEtmE,EAAI,EAAGA,EAAIsmE,EAAYtmE,IAAK,CACnC,IAAIonE,EAAqB36D,EAAMm6D,iBAAiB5mE,EAAGmnE,EAAgBD,EAAQ/2C,EAAQnwB,GAAIymE,GACnFjhD,EAAQzgB,KAAKwqB,OAAM,QAAU,QAAgB63C,EAAmB5hD,MAAQ,EAAAI,KACxEtZ,EAAO8pB,EAAWp2B,GAClB6R,EAAIw1D,GAAUD,EAAmBv1D,EAAGvF,EAAKmtB,EAAGjU,GAC5C0V,EAAYosC,GAAqB9hD,GACjCtO,EAAOqwD,GAAiBH,EAAmBx1D,EAAGtF,EAAKktB,EAAG0B,GAC1Dt1B,EAAMhG,KAAK,CACTgS,EAAGw1D,EAAmBx1D,EACtBC,EAAGA,EACHqpB,UAAWA,EACXhkB,KAAMA,EACNH,IAAKlF,EACLmF,MAAOE,EAAO5K,EAAKktB,EACnBviB,OAAQpF,EAAIvF,EAAKmtB,IAIrB,OAAO7zB,EApDkB4hE,CAAqB/6D,EAAO2pB,EAAYjG,GAGnE,SAAS42C,GAAaV,EAAQnpD,EAAMsI,EAAOiiD,EAASC,GAClD,IAAItiD,EAAMrgB,KAAK2W,IAAI3W,KAAKqgB,IAAII,IACxBN,EAAMngB,KAAK2W,IAAI3W,KAAKmgB,IAAIM,IACxB5T,EAAI,EACJC,EAAI,EAEJ41D,EAAQxiE,MAAQiY,EAAK7J,GACvBzB,GAAKsL,EAAK7J,EAAIo0D,EAAQxiE,OAASmgB,EAC/BihD,EAAOhzD,EAAItO,KAAKC,IAAIqhE,EAAOhzD,EAAG6J,EAAK7J,EAAIzB,IAC9B61D,EAAQ56D,IAAMqQ,EAAK/X,IAC5ByM,GAAK61D,EAAQ56D,IAAMqQ,EAAK/X,GAAKigB,EAC7BihD,EAAOlhE,EAAIJ,KAAKiC,IAAIq/D,EAAOlhE,EAAG+X,EAAK/X,EAAIyM,IAGrC81D,EAAQziE,MAAQiY,EAAKvG,GACvB9E,GAAKqL,EAAKvG,EAAI+wD,EAAQziE,OAASigB,EAC/BmhD,EAAO1vD,EAAI5R,KAAKC,IAAIqhE,EAAO1vD,EAAGuG,EAAKvG,EAAI9E,IAC9B61D,EAAQ76D,IAAMqQ,EAAKtG,IAC5B/E,GAAK61D,EAAQ76D,IAAMqQ,EAAKtG,GAAKsO,EAC7BmhD,EAAOzvD,EAAI7R,KAAKiC,IAAIq/D,EAAOzvD,EAAGsG,EAAKtG,EAAI/E,IAiC3C,SAASy1D,GAAqB9hD,GAC5B,OAAc,IAAVA,GAAyB,MAAVA,EACV,SACEA,EAAQ,IACV,OAGF,QAGT,SAAS+hD,GAAiB31D,EAAG4nB,EAAG3I,GAO9B,MANc,UAAVA,EACFjf,GAAK4nB,EACc,WAAV3I,IACTjf,GAAK4nB,EAAI,GAGJ5nB,EAGT,SAASy1D,GAAUx1D,EAAG4nB,EAAGjU,GAOvB,OANc,KAAVA,GAA0B,MAAVA,EAClB3T,GAAK4nB,EAAI,GACAjU,EAAQ,KAAOA,EAAQ,MAChC3T,GAAK4nB,GAGA5nB,EAsDT,SAAS81D,GAAel7D,EAAO8V,EAAQoJ,EAAUu1C,GAC/C,IAAI3wD,EAAM9D,EAAM8D,IAEhB,GAAIob,EACFpb,EAAI0W,IAAIxa,EAAMue,QAASve,EAAMwe,QAAS1I,EAAQ,EAAG,EAAAuB,OAC5C,CACL,IAAIsI,EAAgB3f,EAAMm6D,iBAAiB,EAAGrkD,GAC9ChS,EAAI2sB,OAAO9Q,EAAcxa,EAAGwa,EAAcva,GAE1C,IAAK,IAAI7R,EAAI,EAAGA,EAAIkhE,EAAYlhE,IAC9BosB,EAAgB3f,EAAMm6D,iBAAiB5mE,EAAGuiB,GAC1ChS,EAAI4sB,OAAO/Q,EAAcxa,EAAGwa,EAAcva,IAlOhDuzD,GAAiB/1D,GAAK,cACtB+1D,GAAiB1nD,SAAW,CAC1B9B,MAAO,CACL+U,SAAU9C,GAAMd,WAAWY,YAC3Bc,MAAO,CACLC,SAAS,KAgQf,IAAIk5C,GAAiC,SAAUC,IAC7C,OAAUD,EAAmBC,GAE7B,IAAIC,EAAWrnE,EAAamnE,GAE5B,SAASA,EAAkB1/D,GACzB,IAAI6/D,EAUJ,OARA,OAAgBtmE,KAAMmmE,IAEtBG,EAAUD,EAAS3mE,KAAKM,KAAMyG,IACtB8iB,aAAU7mB,EAClB4jE,EAAQ98C,aAAU9mB,EAClB4jE,EAAQlB,iBAAc1iE,EACtB4jE,EAAQxB,aAAe,GACvBwB,EAAQd,iBAAmB,GACpBc,EAoQT,OAjQA,OAAaH,EAAmB,CAAC,CAC/BvnE,IAAK,gBACL0C,MAAO,WACL,IAAIotB,EAAU1uB,KAAK61D,UAAW,OAAU4O,GAAsBzkE,KAAK8J,SAAW,GAC1EiuB,EAAI/3B,KAAK0d,MAAQ1d,KAAKwkB,SAAWkK,EAAQhR,MACzCsa,EAAIh4B,KAAKyd,OAASzd,KAAKykB,UAAYiK,EAAQjR,OAC/Czd,KAAKupB,QAAUjmB,KAAK0D,MAAMhH,KAAKyV,KAAOsiB,EAAI,EAAIrJ,EAAQjZ,MACtDzV,KAAKwpB,QAAUlmB,KAAK0D,MAAMhH,KAAKsV,IAAM0iB,EAAI,EAAItJ,EAAQpZ,KACrDtV,KAAKolE,YAAc9hE,KAAK0D,MAAM1D,KAAKC,IAAIw0B,EAAGC,GAAK,KAEhD,CACDp5B,IAAK,sBACL0C,MAAO,WACL,IAAIilE,EAAmBvmE,KAAKuyB,WAAU,GAClChvB,EAAMgjE,EAAiBhjE,IACvBgC,EAAMghE,EAAiBhhE,IAE3BvF,KAAKuD,KAAM,OAAeA,KAAS0a,MAAM1a,GAAOA,EAAM,EACtDvD,KAAKuF,KAAM,OAAeA,KAAS0Y,MAAM1Y,GAAOA,EAAM,EACtDvF,KAAKwjE,2BAEN,CACD5kE,IAAK,mBACL0C,MAAO,WACL,OAAOgC,KAAKgqB,KAAKttB,KAAKolE,YAAcX,GAAsBzkE,KAAK8J,YAEhE,CACDlL,IAAK,qBACL0C,MAAO,SAA4B6Y,GACjC,IAAIqsD,EAAUxmE,KAEdqhE,GAAgB7hE,UAAU82B,mBAAmB52B,KAAKM,KAAMma,GACxDna,KAAK8kE,aAAe9kE,KAAKkT,YAAYoT,KAAI,SAAUhlB,EAAOoK,GACxD,IAAIsJ,GAAQ,OAASwxD,EAAQ18D,QAAQqgB,YAAY+E,SAAU,CAAC5tB,EAAOoK,GAAQ86D,GAC3E,OAAOxxD,GAAmB,IAAVA,EAAcA,EAAQ,MACrCjX,QAAO,SAAUiL,EAAGzK,GACrB,OAAOioE,EAAQ7jE,MAAMyc,kBAAkB7gB,QAG1C,CACDK,IAAK,MACL0C,MAAO,WACL,IAAI4J,EAAOlL,KAAK8J,QAEZoB,EAAK+e,SAAW/e,EAAKif,YAAYF,QACnC06C,GAAmB3kE,MAEnBA,KAAKulE,eAAe,EAAG,EAAG,EAAG,KAGhC,CACD3mE,IAAK,iBACL0C,MAAO,SAAwBmlE,EAAcC,EAAeC,EAAaC,GACvE5mE,KAAKupB,SAAWjmB,KAAK0D,OAAOy/D,EAAeC,GAAiB,GAC5D1mE,KAAKwpB,SAAWlmB,KAAK0D,OAAO2/D,EAAcC,GAAkB,GAC5D5mE,KAAKolE,aAAe9hE,KAAKC,IAAIvD,KAAKolE,YAAc,EAAG9hE,KAAKiC,IAAIkhE,EAAcC,EAAeC,EAAaC,MAEvG,CACDhoE,IAAK,gBACL0C,MAAO,SAAuBoK,GAC5B,IAAIm7D,EAAkB,EAAAxkD,GAAOriB,KAAK8kE,aAAarmE,QAAU,GACrD6kB,EAAatjB,KAAK8J,QAAQwZ,YAAc,EAC5C,OAAO,QAAgB5X,EAAQm7D,GAAkB,IAAA3xD,GAAUoO,MAE5D,CACD1kB,IAAK,gCACL0C,MAAO,SAAuCA,GAC5C,IAAI,OAAcA,GAChB,OAAOuS,IAGT,IAAIizD,EAAgB9mE,KAAKolE,aAAeplE,KAAKuF,IAAMvF,KAAKuD,KAExD,OAAIvD,KAAK8J,QAAQqB,SACPnL,KAAKuF,IAAMjE,GAASwlE,GAGtBxlE,EAAQtB,KAAKuD,KAAOujE,IAE7B,CACDloE,IAAK,gCACL0C,MAAO,SAAuCwiC,GAC5C,IAAI,OAAcA,GAChB,OAAOjwB,IAGT,IAAIkzD,EAAiBjjC,GAAY9jC,KAAKolE,aAAeplE,KAAKuF,IAAMvF,KAAKuD,MACrE,OAAOvD,KAAK8J,QAAQqB,QAAUnL,KAAKuF,IAAMwhE,EAAiB/mE,KAAKuD,IAAMwjE,IAEtE,CACDnoE,IAAK,uBACL0C,MAAO,SAA8BoK,GACnC,IAAIye,EAAcnqB,KAAK8kE,cAAgB,GAEvC,GAAIp5D,GAAS,GAAKA,EAAQye,EAAY1rB,OAAQ,CAC5C,IAAIuoE,EAAa78C,EAAYze,GAC7B,OA3HR,SAAiC2K,EAAQ3K,EAAOsJ,GAC9C,OAAO,OAAcqB,EAAQ,CAC3BrB,MAAOA,EACPtJ,MAAOA,EACP5I,KAAM,eAuHKmkE,CAAwBjnE,KAAKwS,aAAc9G,EAAOs7D,MAG5D,CACDpoE,IAAK,mBACL0C,MAAO,SAA0BoK,EAAOw7D,GACtC,IAAIlC,EAAkBxmE,UAAUC,OAAS,QAAsBiE,IAAjBlE,UAAU,GAAmBA,UAAU,GAAK,EACtFulB,EAAQ/jB,KAAK0pB,cAAche,GAAS,EAAAyY,EAAU6gD,EAClD,MAAO,CACL70D,EAAG7M,KAAKmgB,IAAIM,GAASmjD,EAAqBlnE,KAAKupB,QAC/CnZ,EAAG9M,KAAKqgB,IAAII,GAASmjD,EAAqBlnE,KAAKwpB,QAC/CzF,MAAOA,KAGV,CACDnlB,IAAK,2BACL0C,MAAO,SAAkCoK,EAAOpK,GAC9C,OAAOtB,KAAKmlE,iBAAiBz5D,EAAO1L,KAAK8pB,8BAA8BxoB,MAExE,CACD1C,IAAK,kBACL0C,MAAO,SAAyBoK,GAC9B,OAAO1L,KAAK4qB,yBAAyBlf,GAAS,EAAG1L,KAAK23B,kBAEvD,CACD/4B,IAAK,wBACL0C,MAAO,SAA+BoK,GACpC,IAAIy7D,EAAwBnnE,KAAKwlE,iBAAiB95D,GAKlD,MAAO,CACL+J,KALS0xD,EAAsB1xD,KAM/BH,IALQ6xD,EAAsB7xD,IAM9BC,MALU4xD,EAAsB5xD,MAMhCC,OALW2xD,EAAsB3xD,UAQpC,CACD5W,IAAK,iBACL0C,MAAO,WACL,IAAI8lE,EAAkBpnE,KAAK8J,QACvB4c,EAAkB0gD,EAAgB1gD,gBAClCwD,EAAWk9C,EAAgB5mD,KAAK0J,SAEpC,GAAIxD,EAAiB,CACnB,IAAI5X,EAAM9O,KAAK8O,IACfA,EAAIgsB,OACJhsB,EAAI0sB,YACJ0qC,GAAelmE,KAAMA,KAAK8pB,8BAA8B9pB,KAAKyhE,WAAYv3C,EAAUlqB,KAAK8kE,aAAarmE,QACrGqQ,EAAImvC,YACJnvC,EAAI2X,UAAYC,EAChB5X,EAAI+b,OACJ/b,EAAIksB,aAGP,CACDp8B,IAAK,WACL0C,MAAO,WACL,IAOI/C,EAAGgiB,EAAQkQ,EAPX42C,EAAUrnE,KAEV8O,EAAM9O,KAAK8O,IACX5D,EAAOlL,KAAK8J,QACZkgB,EAAa9e,EAAK8e,WAClBxJ,EAAOtV,EAAKsV,KACZi/C,EAAaz/D,KAAK8kE,aAAarmE,OAiBnC,GAdIyM,EAAKif,YAAYF,SAzR3B,SAAyBjf,EAAOy0D,GAI9B,IAHA,IAAI3wD,EAAM9D,EAAM8D,IACZqb,EAAcnf,EAAMlB,QAAQqgB,YAEvB5rB,EAAIkhE,EAAa,EAAGlhE,GAAK,EAAGA,IAAK,CACxC,IAAI86B,EAAclP,EAAY+H,WAAWlnB,EAAMk6D,qBAAqB3mE,IAChE8mE,GAAS,OAAOhsC,EAAY/I,MAC5Bg3C,EAAwBt8D,EAAMw6D,iBAAiBjnE,GAC/C4R,EAAIm3D,EAAsBn3D,EAC1BC,EAAIk3D,EAAsBl3D,EAC1BqpB,EAAY6tC,EAAsB7tC,UAClChkB,EAAO6xD,EAAsB7xD,KAC7BH,EAAMgyD,EAAsBhyD,IAC5BC,EAAQ+xD,EAAsB/xD,MAC9BC,EAAS8xD,EAAsB9xD,OAC/B+Z,EAAgB8J,EAAY9J,cAEhC,KAAK,OAAcA,GAAgB,CACjC,IAAI6uB,GAAe,QAAc/kB,EAAY+kB,cACzC1vB,GAAU,OAAU2K,EAAY7J,iBACpC1gB,EAAI2X,UAAY8I,EAChB,IAAIg4C,EAAe9xD,EAAOiZ,EAAQjZ,KAC9B+xD,EAAclyD,EAAMoZ,EAAQpZ,IAC5BmyD,EAAgBlyD,EAAQE,EAAOiZ,EAAQhR,MACvCgqD,EAAiBlyD,EAASF,EAAMoZ,EAAQjR,OAExC7f,OAAOgM,OAAOw0C,GAAcrO,MAAK,SAAU/mC,GAC7C,OAAa,IAANA,MAEP8F,EAAI0sB,aACJ,QAAmB1sB,EAAK,CACtBqB,EAAGo3D,EACHn3D,EAAGo3D,EACHzvC,EAAG0vC,EACHzvC,EAAG0vC,EACH5mD,OAAQs9B,IAEVtvC,EAAI+b,QAEJ/b,EAAIisB,SAASwsC,EAAcC,EAAaC,EAAeC,IAI3D,OAAW54D,EAAK9D,EAAM85D,aAAavmE,GAAI4R,EAAGC,EAAIi1D,EAAO90C,WAAa,EAAG80C,EAAQ,CAC3Ep/D,MAAOozB,EAAYpzB,MACnBwzB,UAAWA,EACXK,aAAc,YA4OZ6tC,CAAgB3nE,KAAMy/D,GAGpBj/C,EAAKyJ,SACPjqB,KAAKma,MAAMxb,SAAQ,SAAU6F,EAAMkH,GACjC,GAAc,IAAVA,EAAa,CACf6U,EAAS8mD,EAAQv9C,8BAA8BtlB,EAAKlD,OACpD,IAAI+3B,EAAc7Y,EAAK0R,WAAWm1C,EAAQ70D,WAAW9G,EAAQ,KA9NzE,SAAwBV,EAAO48D,EAAc9mD,EAAQ2+C,GACnD,IAAI3wD,EAAM9D,EAAM8D,IACZob,EAAW09C,EAAa19C,SACxBjkB,EAAQ2hE,EAAa3hE,MACrB4gB,EAAY+gD,EAAa/gD,WAExBqD,IAAau1C,IAAex5D,IAAU4gB,GAAa/F,EAAS,IAIjEhS,EAAIgsB,OACJhsB,EAAI6X,YAAc1gB,EAClB6I,EAAI+X,UAAYA,EAChB/X,EAAIwsB,YAAYssC,EAAap5C,YAC7B1f,EAAIysB,eAAiBqsC,EAAan5C,iBAClC3f,EAAI0sB,YACJ0qC,GAAel7D,EAAO8V,EAAQoJ,EAAUu1C,GACxC3wD,EAAImvC,YACJnvC,EAAI6sB,SACJ7sB,EAAIksB,WA4MM6sC,CAAeR,EAAShuC,EAAa9Y,EAAQk/C,OAK/Cz1C,EAAWC,QAAS,CAGtB,IAFAnb,EAAIgsB,OAECv8B,EAAIkhE,EAAa,EAAGlhE,GAAK,EAAGA,IAAK,CACpC,IAAI86B,EAAcrP,EAAWkI,WAAWlyB,KAAKklE,qBAAqB3mE,IAC9D0H,EAAQozB,EAAYpzB,MACpB4gB,EAAYwS,EAAYxS,UAEvBA,GAAc5gB,IAInB6I,EAAI+X,UAAYA,EAChB/X,EAAI6X,YAAc1gB,EAClB6I,EAAIwsB,YAAYjC,EAAY7K,YAC5B1f,EAAIysB,eAAiBlC,EAAY5K,iBACjClO,EAASvgB,KAAK8pB,8BAA8B5e,EAAKiP,MAAMhP,QAAUnL,KAAKuD,IAAMvD,KAAKuF,KACjFkrB,EAAWzwB,KAAKmlE,iBAAiB5mE,EAAGgiB,GACpCzR,EAAI0sB,YACJ1sB,EAAI2sB,OAAOz7B,KAAKupB,QAASvpB,KAAKwpB,SAC9B1a,EAAI4sB,OAAOjL,EAAStgB,EAAGsgB,EAASrgB,GAChCtB,EAAI6sB,UAGN7sB,EAAIksB,aAGP,CACDp8B,IAAK,aACL0C,MAAO,cACN,CACD1C,IAAK,aACL0C,MAAO,WACL,IAAIwmE,EAAU9nE,KAEV8O,EAAM9O,KAAK8O,IACX5D,EAAOlL,KAAK8J,QACZwiB,EAAWphB,EAAKiP,MAEpB,GAAKmS,EAASrC,QAAd,CAIA,IACI1J,EAAQ7C,EADR4F,EAAatjB,KAAK0pB,cAAc,GAEpC5a,EAAIgsB,OACJhsB,EAAIkzC,UAAUhiD,KAAKupB,QAASvpB,KAAKwpB,SACjC1a,EAAIi5D,OAAOzkD,GACXxU,EAAI2qB,UAAY,SAChB3qB,EAAIgrB,aAAe,SACnB95B,KAAKma,MAAMxb,SAAQ,SAAU6F,EAAMkH,GACjC,GAAc,IAAVA,GAAgBR,EAAKC,QAAzB,CAIA,IAAIkuB,EAAc/M,EAAS4F,WAAW41C,EAAQt1D,WAAW9G,IACrDgrB,GAAW,OAAO2C,EAAY/I,MAGlC,GAFA/P,EAASunD,EAAQh+C,8BAA8Bg+C,EAAQ3tD,MAAMzO,GAAOpK,OAEhE+3B,EAAY/J,kBAAmB,CACjCxgB,EAAIwhB,KAAOoG,EAASS,OACpBzZ,EAAQ5O,EAAIwjD,YAAY9tD,EAAKwQ,OAAO0I,MACpC5O,EAAI2X,UAAY4S,EAAY9J,cAC5B,IAAIb,GAAU,OAAU2K,EAAY7J,iBACpC1gB,EAAIisB,UAAUrd,EAAQ,EAAIgR,EAAQjZ,MAAO8K,EAASmW,EAAS7rB,KAAO,EAAI6jB,EAAQpZ,IAAKoI,EAAQgR,EAAQhR,MAAOgZ,EAAS7rB,KAAO6jB,EAAQjR,SAGpI,OAAW3O,EAAKtK,EAAKwQ,MAAO,GAAIuL,EAAQmW,EAAU,CAChDzwB,MAAOozB,EAAYpzB,YAGvB6I,EAAIksB,aAEL,CACDp8B,IAAK,YACL0C,MAAO,gBAGF6kE,EApR4B,CAqRnC9E,IAEF8E,GAAkBv4D,GAAK,eACvBu4D,GAAkBlqD,SAAW,CAC3BgO,SAAS,EACT+9C,SAAS,EACTv3C,SAAU,YACVzG,WAAY,CACVC,SAAS,EACTpD,UAAW,EACX2H,WAAY,GACZC,iBAAkB,GAEpBjO,KAAM,CACJ0J,UAAU,GAEZ5G,WAAY,EACZnJ,MAAO,CACLmV,mBAAmB,EACnBJ,SAAU9C,GAAMd,WAAWC,SAE7BpB,YAAa,CACXoF,mBAAe7sB,EACf8sB,gBAAiB,EACjBvF,SAAS,EACTqG,KAAM,CACJzlB,KAAM,IAERqkB,SAAU,SAAkBla,GAC1B,OAAOA,GAET0Z,QAAS,EACTu2C,mBAAmB,IAGvBkB,GAAkB96C,cAAgB,CAChC,mBAAoB,cACpB,oBAAqB,QACrB,cAAe,SAEjB86C,GAAkBlgD,YAAc,CAC9B+D,WAAY,CACV7hB,UAAW,SAGf,IAAI8/D,GAAY,CACdC,YAAa,CACXC,QAAQ,EACRt9D,KAAM,EACNu9D,MAAO,KAETC,OAAQ,CACNF,QAAQ,EACRt9D,KAAM,IACNu9D,MAAO,IAETE,OAAQ,CACNH,QAAQ,EACRt9D,KAAM,IACNu9D,MAAO,IAETG,KAAM,CACJJ,QAAQ,EACRt9D,KAAM,KACNu9D,MAAO,IAETI,IAAK,CACHL,QAAQ,EACRt9D,KAAM,MACNu9D,MAAO,IAETK,KAAM,CACJN,QAAQ,EACRt9D,KAAM,OACNu9D,MAAO,GAETM,MAAO,CACLP,QAAQ,EACRt9D,KAAM,OACNu9D,MAAO,IAETO,QAAS,CACPR,QAAQ,EACRt9D,KAAM,OACNu9D,MAAO,GAETQ,KAAM,CACJT,QAAQ,EACRt9D,KAAM,SAGNg+D,GAAQjrE,OAAOD,KAAKsqE,IAExB,SAASa,GAAOjvD,EAAG1E,GACjB,OAAO0E,EAAI1E,EAGb,SAAS4zD,GAAO/9D,EAAOg+D,GACrB,IAAI,OAAcA,GAChB,OAAO,KAGT,IAAIC,EAAUj+D,EAAMk+D,SAChBC,EAAoBn+D,EAAMo+D,WAC1BC,EAASF,EAAkBE,OAC3Bv7C,EAAQq7C,EAAkBr7C,MAC1Bw7C,EAAaH,EAAkBG,WAC/BhoE,EAAQ0nE,EAUZ,MARsB,mBAAXK,IACT/nE,EAAQ+nE,EAAO/nE,KAGZ,OAAeA,KAClBA,EAA0B,iBAAX+nE,EAAsBJ,EAAQ51D,MAAM/R,EAAO+nE,GAAUJ,EAAQ51D,MAAM/R,IAGtE,OAAVA,EACK,MAGLwsB,IACFxsB,EAAkB,SAAVwsB,KAAqB,OAASw7C,KAA8B,IAAfA,EAAuEL,EAAQM,QAAQjoE,EAAOwsB,GAAvEm7C,EAAQM,QAAQjoE,EAAO,UAAWgoE,KAGxGhoE,GAGV,SAASkoE,GAA0BC,EAASlmE,EAAKgC,EAAKmkE,GAGpD,IAFA,IAAIn+D,EAAOs9D,GAAMpqE,OAERF,EAAIsqE,GAAM1qD,QAAQsrD,GAAUlrE,EAAIgN,EAAO,IAAKhN,EAAG,CACtD,IAAIorE,EAAW1B,GAAUY,GAAMtqE,IAC3ByH,EAAS2jE,EAASvB,MAAQuB,EAASvB,MAAQj0D,OAAO4tD,iBAEtD,GAAI4H,EAASxB,QAAU7kE,KAAKgqB,MAAM/nB,EAAMhC,IAAQyC,EAAS2jE,EAAS9+D,QAAU6+D,EAC1E,OAAOb,GAAMtqE,GAIjB,OAAOsqE,GAAMt9D,EAAO,GAuBtB,SAASq+D,GAAQzvD,EAAO0vD,EAAMC,GAC5B,GAAKA,GAEE,GAAIA,EAAWrrE,OAAQ,CAC5B,IAAIsrE,GAAW,QAAQD,EAAYD,GAC/BrnC,EAAKunC,EAASvnC,GACdC,EAAKsnC,EAAStnC,GAGlBtoB,EADgB2vD,EAAWtnC,IAAOqnC,EAAOC,EAAWtnC,GAAMsnC,EAAWrnC,KAClD,QAPnBtoB,EAAM0vD,IAAQ,EA4BlB,SAASG,GAAoBh/D,EAAOpB,EAAQqgE,GAC1C,IAGI1rE,EAAG+C,EAHH6Y,EAAQ,GACRmM,EAAM,GACN/a,EAAO3B,EAAOnL,OAGlB,IAAKF,EAAI,EAAGA,EAAIgN,IAAQhN,EAEtB+nB,EADAhlB,EAAQsI,EAAOrL,IACFA,EACb4b,EAAMhc,KAAK,CACTmD,MAAOA,EACP0rB,OAAO,IAIX,OAAgB,IAATzhB,GAAe0+D,EAhCxB,SAAuBj/D,EAAOmP,EAAOmM,EAAK2jD,GACxC,IAGIj9C,EAAOthB,EAHPu9D,EAAUj+D,EAAMk+D,SAChB97C,GAAS67C,EAAQM,QAAQpvD,EAAM,GAAG7Y,MAAO2oE,GACzCrsD,EAAOzD,EAAMA,EAAM1b,OAAS,GAAG6C,MAGnC,IAAK0rB,EAAQI,EAAOJ,GAASpP,EAAMoP,GAASi8C,EAAQn+D,IAAIkiB,EAAO,EAAGi9C,IAChEv+D,EAAQ4a,EAAI0G,KAEC,IACX7S,EAAMzO,GAAOshB,OAAQ,GAIzB,OAAO7S,EAkBmC+vD,CAAcl/D,EAAOmP,EAAOmM,EAAK2jD,GAAzC9vD,EAGpC,IAAIgwD,GAAyB,SAAUC,IACrC,OAAUD,EAAWC,GAErB,IAAIC,EAAWrrE,EAAamrE,GAE5B,SAASA,EAAU1/D,GACjB,IAAI6/D,EAeJ,OAbA,OAAgBtqE,KAAMmqE,IAEtBG,EAAUD,EAAS3qE,KAAKM,KAAMyK,IACtB8O,OAAS,CACfnI,KAAM,GACN6B,OAAQ,GACR3I,IAAK,IAEPggE,EAAQC,MAAQ,MAChBD,EAAQE,gBAAa9nE,EACrB4nE,EAAQG,SAAW,GACnBH,EAAQI,aAAc,EACtBJ,EAAQlB,gBAAa1mE,EACd4nE,EAqVT,OAlVA,OAAaH,EAAW,CAAC,CACvBvrE,IAAK,OACL0C,MAAO,SAAco2C,EAAWxsC,GAC9B,IAAI2+D,EAAOnyB,EAAUmyB,OAASnyB,EAAUmyB,KAAO,IAC3CZ,EAAUjpE,KAAKkpE,SAAW,IAAIlnC,GAASC,MAAMyV,EAAU1V,SAASn/B,MACpEomE,EAAQhxB,KAAK/sC,IACb,QAAQ2+D,EAAKc,eAAgB1B,EAAQ2B,WACrC5qE,KAAKopE,WAAa,CAChBC,OAAQQ,EAAKR,OACbv7C,MAAO+7C,EAAK/7C,MACZw7C,WAAYO,EAAKP,aAGnB,QAAK,OAAgBa,EAAU3qE,WAAY,OAAQQ,MAAMN,KAAKM,KAAM03C,GAEpE13C,KAAK0qE,YAAcx/D,EAAK2/D,aAEzB,CACDjsE,IAAK,QACL0C,MAAO,SAAeiV,EAAK7K,GACzB,YAAYhJ,IAAR6T,EACK,KAGFwyD,GAAO/oE,KAAMuW,KAErB,CACD3X,IAAK,eACL0C,MAAO,YACL,QAAK,OAAgB6oE,EAAU3qE,WAAY,eAAgBQ,MAAMN,KAAKM,MAEtEA,KAAKuZ,OAAS,CACZnI,KAAM,GACN6B,OAAQ,GACR3I,IAAK,MAGR,CACD1L,IAAK,sBACL0C,MAAO,WACL,IAAIwI,EAAU9J,KAAK8J,QACfm/D,EAAUjpE,KAAKkpE,SACfrnC,EAAO/3B,EAAQ+/D,KAAKhoC,MAAQ,MAE5BipC,EAAuB9qE,KAAKwU,gBAC5BjR,EAAMunE,EAAqBvnE,IAC3BgC,EAAMulE,EAAqBvlE,IAC3BkP,EAAaq2D,EAAqBr2D,WAClCC,EAAao2D,EAAqBp2D,WAEtC,SAASq2D,EAAa98C,GACfxZ,GAAewJ,MAAMgQ,EAAO1qB,OAC/BA,EAAMD,KAAKC,IAAIA,EAAK0qB,EAAO1qB,MAGxBmR,GAAeuJ,MAAMgQ,EAAO1oB,OAC/BA,EAAMjC,KAAKiC,IAAIA,EAAK0oB,EAAO1oB,MAI1BkP,GAAeC,IAClBq2D,EAAa/qE,KAAKgrE,mBAEK,UAAnBlhE,EAAQmkB,QAA+C,WAAzBnkB,EAAQqQ,MAAMzb,QAC9CqsE,EAAa/qE,KAAKuyB,WAAU,KAIhChvB,GAAM,OAAeA,KAAS0a,MAAM1a,GAAOA,GAAO0lE,EAAQM,QAAQxlE,KAAKC,MAAO69B,GAC9Et8B,GAAM,OAAeA,KAAS0Y,MAAM1Y,GAAOA,GAAO0jE,EAAQgC,MAAMlnE,KAAKC,MAAO69B,GAAQ,EACpF7hC,KAAKuD,IAAMD,KAAKC,IAAIA,EAAKgC,EAAM,GAC/BvF,KAAKuF,IAAMjC,KAAKiC,IAAIhC,EAAM,EAAGgC,KAE9B,CACD3G,IAAK,kBACL0C,MAAO,WACL,IAAIW,EAAMjC,KAAKkrE,qBACX3nE,EAAM4Q,OAAOC,kBACb7O,EAAM4O,OAAOE,kBAOjB,OALIpS,EAAIxD,SACN8E,EAAMtB,EAAI,GACVsD,EAAMtD,EAAIA,EAAIxD,OAAS,IAGlB,CACL8E,IAAKA,EACLgC,IAAKA,KAGR,CACD3G,IAAK,aACL0C,MAAO,WACL,IAAIwI,EAAU9J,KAAK8J,QACfqhE,EAAWrhE,EAAQ+/D,KACnBv9C,EAAWxiB,EAAQqQ,MACnB2vD,EAAiC,WAApBx9C,EAAS5tB,OAAsBsB,KAAKkrE,qBAAuBlrE,KAAKorE,YAE1D,UAAnBthE,EAAQmkB,QAAsB67C,EAAWrrE,SAC3CuB,KAAKuD,IAAMvD,KAAK4xB,UAAYk4C,EAAW,GACvC9pE,KAAKuF,IAAMvF,KAAK2xB,UAAYm4C,EAAWA,EAAWrrE,OAAS,IAG7D,IAAI8E,EAAMvD,KAAKuD,IACXgC,EAAMvF,KAAKuF,IAEX4U,GAAQ,QAAe2vD,EAAYvmE,EAAKgC,GAU5C,OARAvF,KAAKuqE,MAAQY,EAAStpC,OAASvV,EAASD,SAAWm9C,GAA0B2B,EAAS1B,QAASzpE,KAAKuD,IAAKvD,KAAKuF,IAAKvF,KAAKqrE,kBAAkB9nE,IAxMhJ,SAAoCyH,EAAOypB,EAAUg1C,EAASlmE,EAAKgC,GACjE,IAAK,IAAIhH,EAAIsqE,GAAMpqE,OAAS,EAAGF,GAAKsqE,GAAM1qD,QAAQsrD,GAAUlrE,IAAK,CAC/D,IAAIsjC,EAAOgnC,GAAMtqE,GAEjB,GAAI0pE,GAAUpmC,GAAMsmC,QAAUn9D,EAAMk+D,SAASz7C,KAAKloB,EAAKhC,EAAKs+B,IAASpN,EAAW,EAC9E,OAAOoN,EAIX,OAAOgnC,GAAMY,EAAUZ,GAAM1qD,QAAQsrD,GAAW,GA+LsG6B,CAA2BtrE,KAAMma,EAAM1b,OAAQ0sE,EAAS1B,QAASzpE,KAAKuD,IAAKvD,KAAKuF,MAClOvF,KAAKwqE,WAAcl+C,EAASU,MAAMC,SAA0B,SAAfjtB,KAAKuqE,MA7LxD,SAA4B1oC,GAC1B,IAAK,IAAItjC,EAAIsqE,GAAM1qD,QAAQ0jB,GAAQ,EAAGt2B,EAAOs9D,GAAMpqE,OAAQF,EAAIgN,IAAQhN,EACrE,GAAI0pE,GAAUY,GAAMtqE,IAAI4pE,OACtB,OAAOU,GAAMtqE,GA0LoEgtE,CAAmBvrE,KAAKuqE,YAApC7nE,EACrE1C,KAAKwrE,YAAY1B,GAEbhgE,EAAQqB,SACVgP,EAAMhP,UAGD6+D,GAAoBhqE,KAAMma,EAAOna,KAAKwqE,cAE9C,CACD5rE,IAAK,gBACL0C,MAAO,WACDtB,KAAK8J,QAAQ2hE,qBACfzrE,KAAKwrE,YAAYxrE,KAAKma,MAAMmM,KAAI,SAAU9hB,GACxC,OAAQA,EAAKlD,YAIlB,CACD1C,IAAK,cACL0C,MAAO,SAAqBwoE,GAC1B,IAEI18C,EAAOxP,EAFPpa,EAAQ,EACR4H,EAAM,EAGNpL,KAAK8J,QAAQyW,QAAUupD,EAAWrrE,SACpC2uB,EAAQptB,KAAK0rE,mBAAmB5B,EAAW,IAGzCtmE,EADwB,IAAtBsmE,EAAWrrE,OACL,EAAI2uB,GAEHptB,KAAK0rE,mBAAmB5B,EAAW,IAAM18C,GAAS,EAG7DxP,EAAO5d,KAAK0rE,mBAAmB5B,EAAWA,EAAWrrE,OAAS,IAG5D2M,EADwB,IAAtB0+D,EAAWrrE,OACPmf,GAECA,EAAO5d,KAAK0rE,mBAAmB5B,EAAWA,EAAWrrE,OAAS,KAAO,GAIhF,IAAI26B,EAAQ0wC,EAAWrrE,OAAS,EAAI,GAAM,IAC1C+E,GAAQ,OAAYA,EAAO,EAAG41B,GAC9BhuB,GAAM,OAAYA,EAAK,EAAGguB,GAC1Bp5B,KAAKyqE,SAAW,CACdjnE,MAAOA,EACP4H,IAAKA,EACLpF,OAAQ,GAAKxC,EAAQ,EAAI4H,MAG5B,CACDxM,IAAK,YACL0C,MAAO,WACL,IAWIuoE,EAAMn3D,EAXNu2D,EAAUjpE,KAAKkpE,SACf3lE,EAAMvD,KAAKuD,IACXgC,EAAMvF,KAAKuF,IACXuE,EAAU9J,KAAK8J,QACfqhE,EAAWrhE,EAAQ+/D,KACnB16C,EAAQg8C,EAAStpC,MAAQ2nC,GAA0B2B,EAAS1B,QAASlmE,EAAKgC,EAAKvF,KAAKqrE,kBAAkB9nE,IACtG2+D,GAAW,IAAAl5D,GAAemiE,EAASjJ,SAAU,GAC7CpgC,EAAoB,SAAV3S,GAAmBg8C,EAAS7B,WACtCqC,GAAa,OAAS7pC,KAAwB,IAAZA,EAClC3nB,EAAQ,GACRiT,EAAQ7pB,EASZ,GANIooE,IACFv+C,GAAS67C,EAAQM,QAAQn8C,EAAO,UAAW0U,IAG7C1U,GAAS67C,EAAQM,QAAQn8C,EAAOu+C,EAAa,MAAQx8C,GAEjD85C,EAAQx7C,KAAKloB,EAAKhC,EAAK4rB,GAAS,IAAS+yC,EAC3C,MAAM,IAAIvkC,MAAMp6B,EAAM,QAAUgC,EAAM,uCAAyC28D,EAAW,IAAM/yC,GAGlG,IAAI26C,EAAsC,SAAzBhgE,EAAQqQ,MAAMzb,QAAqBsB,KAAK4rE,oBAEzD,IAAK/B,EAAOz8C,EAAO1a,EAAQ,EAAGm3D,EAAOtkE,EAAKskE,GAAQZ,EAAQn+D,IAAI++D,EAAM3H,EAAU/yC,GAAQzc,IACpFk3D,GAAQzvD,EAAO0vD,EAAMC,GAOvB,OAJID,IAAStkE,GAA0B,UAAnBuE,EAAQmkB,QAAgC,IAAVvb,GAChDk3D,GAAQzvD,EAAO0vD,EAAMC,GAGhBlsE,OAAOD,KAAKwc,GAAOP,MAAK,SAAUC,EAAG1E,GAC1C,OAAO0E,EAAI1E,KACVmR,KAAI,SAAUnW,GACf,OAAQA,OAGX,CACDvR,IAAK,mBACL0C,MAAO,SAA0BA,GAC/B,IAAI2nE,EAAUjpE,KAAKkpE,SACfiC,EAAWnrE,KAAK8J,QAAQ+/D,KAE5B,OAAIsB,EAASU,cACJ5C,EAAQh9C,OAAO3qB,EAAO6pE,EAASU,eAGjC5C,EAAQh9C,OAAO3qB,EAAO6pE,EAASR,eAAemB,YAEtD,CACDltE,IAAK,sBACL0C,MAAO,SAA6BuoE,EAAMn+D,EAAOyO,EAAO8R,GACtD,IAAIniB,EAAU9J,KAAK8J,QACf8gE,EAAU9gE,EAAQ+/D,KAAKc,eACvB9oC,EAAO7hC,KAAKuqE,MACZN,EAAYjqE,KAAKwqE,WACjBuB,EAAclqC,GAAQ+oC,EAAQ/oC,GAC9BmqC,EAAc/B,GAAaW,EAAQX,GACnCzlE,EAAO2V,EAAMzO,GACbshB,EAAQi9C,GAAa+B,GAAexnE,GAAQA,EAAKwoB,MAEjDhY,EAAQhV,KAAKkpE,SAASj9C,OAAO49C,EAAM59C,IAAWe,EAAQg/C,EAAcD,IAEpEE,EAAYniE,EAAQqQ,MAAM+U,SAC9B,OAAO+8C,GAAY,OAASA,EAAW,CAACj3D,EAAOtJ,EAAOyO,GAAQna,MAAQgV,IAEvE,CACDpW,IAAK,qBACL0C,MAAO,SAA4B6Y,GACjC,IAAI5b,EAAGgN,EAAM/G,EAEb,IAAKjG,EAAI,EAAGgN,EAAO4O,EAAM1b,OAAQF,EAAIgN,IAAQhN,GAC3CiG,EAAO2V,EAAM5b,IACRyW,MAAQhV,KAAKksE,oBAAoB1nE,EAAKlD,MAAO/C,EAAG4b,KAGxD,CACDvb,IAAK,qBACL0C,MAAO,SAA4BA,GACjC,OAAiB,OAAVA,EAAiBuS,KAAOvS,EAAQtB,KAAKuD,MAAQvD,KAAKuF,IAAMvF,KAAKuD,OAErE,CACD3E,IAAK,mBACL0C,MAAO,SAA0BA,GAC/B,IAAI6qE,EAAUnsE,KAAKyqE,SACf9lC,EAAM3kC,KAAK0rE,mBAAmBpqE,GAClC,OAAOtB,KAAKuf,oBAAoB4sD,EAAQ3oE,MAAQmhC,GAAOwnC,EAAQnmE,UAEhE,CACDpH,IAAK,mBACL0C,MAAO,SAA0Bm2B,GAC/B,IAAI00C,EAAUnsE,KAAKyqE,SACf9lC,EAAM3kC,KAAKghE,mBAAmBvpC,GAAS00C,EAAQnmE,OAASmmE,EAAQ/gE,IACpE,OAAOpL,KAAKuD,IAAMohC,GAAO3kC,KAAKuF,IAAMvF,KAAKuD,OAE1C,CACD3E,IAAK,gBACL0C,MAAO,SAAuB0T,GAC5B,IAAIo3D,EAAYpsE,KAAK8J,QAAQqQ,MACzBkyD,EAAiBrsE,KAAK8O,IAAIwjD,YAAYt9C,GAAO0I,MAC7CqG,GAAQ,IAAA7O,GAAUlV,KAAK8c,eAAiBsvD,EAAUx9C,YAAcw9C,EAAUz9C,aAC1E29C,EAAchpE,KAAKmgB,IAAIM,GACvBwoD,EAAcjpE,KAAKqgB,IAAII,GAEvByoD,EAAexsE,KAAKk3B,wBAAwB,GAAGrsB,KAEnD,MAAO,CACLktB,EAAGs0C,EAAiBC,EAAcE,EAAeD,EACjDv0C,EAAGq0C,EAAiBE,EAAcC,EAAeF,KAGpD,CACD1tE,IAAK,oBACL0C,MAAO,SAA2BmrE,GAChC,IAAItB,EAAWnrE,KAAK8J,QAAQ+/D,KACxBc,EAAiBQ,EAASR,eAC1B1+C,EAAS0+C,EAAeQ,EAAStpC,OAAS8oC,EAAezC,YAEzDwE,EAAe1sE,KAAKksE,oBAAoBO,EAAa,EAAGzC,GAAoBhqE,KAAM,CAACysE,GAAczsE,KAAKwqE,YAAav+C,GAEnHphB,EAAO7K,KAAK2sE,cAAcD,GAE1BhD,EAAWpmE,KAAK0D,MAAMhH,KAAK8c,eAAiB9c,KAAK0d,MAAQ7S,EAAKktB,EAAI/3B,KAAKyd,OAAS5S,EAAKmtB,GAAK,EAC9F,OAAO0xC,EAAW,EAAIA,EAAW,IAElC,CACD9qE,IAAK,oBACL0C,MAAO,WACL,IACI/C,EAAGgN,EADHu+D,EAAa9pE,KAAKuZ,OAAOnI,MAAQ,GAGrC,GAAI04D,EAAWrrE,OACb,OAAOqrE,EAGT,IAAIx3C,EAAQtyB,KAAK+M,0BAEjB,GAAI/M,KAAK0qE,aAAep4C,EAAM7zB,OAC5B,OAAOuB,KAAKuZ,OAAOnI,KAAOkhB,EAAM,GAAGrlB,WAAWyM,mBAAmB1Z,MAGnE,IAAKzB,EAAI,EAAGgN,EAAO+mB,EAAM7zB,OAAQF,EAAIgN,IAAQhN,EAC3CurE,EAAaA,EAAWn8D,OAAO2kB,EAAM/zB,GAAG0O,WAAWyM,mBAAmB1Z,OAGxE,OAAOA,KAAKuZ,OAAOnI,KAAOpR,KAAK4sE,UAAU9C,KAE1C,CACDlrE,IAAK,qBACL0C,MAAO,WACL,IACI/C,EAAGgN,EADHu+D,EAAa9pE,KAAKuZ,OAAOtG,QAAU,GAGvC,GAAI62D,EAAWrrE,OACb,OAAOqrE,EAGT,IAAI72D,EAASjT,KAAKkT,YAElB,IAAK3U,EAAI,EAAGgN,EAAO0H,EAAOxU,OAAQF,EAAIgN,IAAQhN,EAC5CurE,EAAW3rE,KAAK4qE,GAAO/oE,KAAMiT,EAAO1U,KAGtC,OAAOyB,KAAKuZ,OAAOtG,OAASjT,KAAK0qE,YAAcZ,EAAa9pE,KAAK4sE,UAAU9C,KAE5E,CACDlrE,IAAK,YACL0C,MAAO,SAAmBsI,GACxB,OAAO,IAAA+P,GAAa/P,EAAOgQ,KAAKkvD,SAI7BqB,EA1WoB,CA2W3Bx5C,IAsBF,SAASi8B,GAAYigB,EAAO7uD,EAAK7S,GAC/B,IAEI2hE,EAAYC,EAAYC,EAAYC,EAFpCzqC,EAAK,EACLC,EAAKoqC,EAAMpuE,OAAS,EAGxB,GAAI0M,EAAS,CACX,GAAI6S,GAAO6uD,EAAMrqC,GAAImC,KAAO3mB,GAAO6uD,EAAMpqC,GAAIkC,IAAK,CAChD,IAAIuoC,GAAgB,OAAaL,EAAO,MAAO7uD,GAE/CwkB,EAAK0qC,EAAc1qC,GACnBC,EAAKyqC,EAAczqC,GAGrB,IAAI0qC,EAAYN,EAAMrqC,GACtBsqC,EAAaK,EAAUxoC,IACvBqoC,EAAaG,EAAUtD,KACvB,IAAIuD,EAAYP,EAAMpqC,GACtBsqC,EAAaK,EAAUzoC,IACvBsoC,EAAaG,EAAUvD,SAClB,CACL,GAAI7rD,GAAO6uD,EAAMrqC,GAAIqnC,MAAQ7rD,GAAO6uD,EAAMpqC,GAAIonC,KAAM,CAClD,IAAIwD,GAAgB,OAAaR,EAAO,OAAQ7uD,GAEhDwkB,EAAK6qC,EAAc7qC,GACnBC,EAAK4qC,EAAc5qC,GAGrB,IAAI6qC,EAAaT,EAAMrqC,GACvBsqC,EAAaQ,EAAWzD,KACxBmD,EAAaM,EAAW3oC,IACxB,IAAI4oC,EAAaV,EAAMpqC,GACvBsqC,EAAaQ,EAAW1D,KACxBoD,EAAaM,EAAW5oC,IAG1B,IAAI6oC,EAAOT,EAAaD,EACxB,OAAOU,EAAOR,GAAcC,EAAaD,IAAehvD,EAAM8uD,GAAcU,EAAOR,EAxDrF7C,GAAUv8D,GAAK,OACfu8D,GAAUluD,SAAW,CACnBgS,OAAQ,OACR+T,SAAU,GACV6nC,KAAM,CACJR,QAAQ,EACRxnC,MAAM,EACN/T,OAAO,EACPw7C,YAAY,EACZG,QAAS,cACTkB,eAAgB,IAElBxwD,MAAO,CACLzb,OAAQ,OACRsuB,MAAO,CACLC,SAAS,KA4Cf,IAAIwgD,GAA+B,SAAUC,IAC3C,OAAUD,EAAiBC,GAE3B,IAAIC,EAAW3uE,EAAayuE,GAE5B,SAASA,EAAgBhjE,GACvB,IAAImjE,EAQJ,OANA,OAAgB5tE,KAAMytE,IAEtBG,EAAUD,EAASjuE,KAAKM,KAAMyK,IACtBojE,OAAS,GACjBD,EAAQE,aAAUprE,EAClBkrE,EAAQG,iBAAcrrE,EACfkrE,EA2FT,OAxFA,OAAaH,EAAiB,CAAC,CAC7B7uE,IAAK,cACL0C,MAAO,WACL,IAAIwoE,EAAa9pE,KAAKguE,yBAElBnB,EAAQ7sE,KAAK6tE,OAAS7tE,KAAKiuE,iBAAiBnE,GAChD9pE,KAAK8tE,QAAUlhB,GAAYigB,EAAO7sE,KAAKuD,KACvCvD,KAAK+tE,YAAcnhB,GAAYigB,EAAO7sE,KAAKuF,KAAOvF,KAAK8tE,SAEvD,QAAK,OAAgBL,EAAgBjuE,WAAY,cAAeQ,MAAMN,KAAKM,KAAM8pE,KAElF,CACDlrE,IAAK,mBACL0C,MAAO,SAA0BwoE,GAC/B,IAIIvrE,EAAGgN,EAAMsH,EAAMyG,EAAMxX,EAJrByB,EAAMvD,KAAKuD,IACXgC,EAAMvF,KAAKuF,IACXpB,EAAQ,GACR0oE,EAAQ,GAGZ,IAAKtuE,EAAI,EAAGgN,EAAOu+D,EAAWrrE,OAAQF,EAAIgN,IAAQhN,GAChD+a,EAAOwwD,EAAWvrE,KAENgF,GAAO+V,GAAQ/T,GACzBpB,EAAMhG,KAAKmb,GAIf,GAAInV,EAAM1F,OAAS,EACjB,MAAO,CAAC,CACNorE,KAAMtmE,EACNohC,IAAK,GACJ,CACDklC,KAAMtkE,EACNo/B,IAAK,IAIT,IAAKpmC,EAAI,EAAGgN,EAAOpH,EAAM1F,OAAQF,EAAIgN,IAAQhN,EAC3CuD,EAAOqC,EAAM5F,EAAI,GACjBsU,EAAO1O,EAAM5F,EAAI,GACjB+a,EAAOnV,EAAM5F,GAET+E,KAAKwqB,OAAOhsB,EAAO+Q,GAAQ,KAAOyG,GACpCuzD,EAAM1uE,KAAK,CACT0rE,KAAMvwD,EACNqrB,IAAKpmC,GAAKgN,EAAO,KAKvB,OAAOshE,IAER,CACDjuE,IAAK,yBACL0C,MAAO,WACL,IAAIwoE,EAAa9pE,KAAKuZ,OAAOjP,KAAO,GAEpC,GAAIw/D,EAAWrrE,OACb,OAAOqrE,EAGT,IAAI14D,EAAOpR,KAAK4rE,oBACZ52D,EAAQhV,KAAKkrE,qBASjB,OANEpB,EADE14D,EAAK3S,QAAUuW,EAAMvW,OACVuB,KAAK4sE,UAAUx7D,EAAKzD,OAAOqH,IAE3B5D,EAAK3S,OAAS2S,EAAO4D,EAGpC80D,EAAa9pE,KAAKuZ,OAAOjP,IAAMw/D,IAGhC,CACDlrE,IAAK,qBACL0C,MAAO,SAA4BA,GACjC,OAAQsrD,GAAY5sD,KAAK6tE,OAAQvsE,GAAStB,KAAK8tE,SAAW9tE,KAAK+tE,cAEhE,CACDnvE,IAAK,mBACL0C,MAAO,SAA0Bm2B,GAC/B,IAAI00C,EAAUnsE,KAAKyqE,SACf/yC,EAAU13B,KAAKghE,mBAAmBvpC,GAAS00C,EAAQnmE,OAASmmE,EAAQ/gE,IACxE,OAAOwhD,GAAY5sD,KAAK6tE,OAAQn2C,EAAU13B,KAAK+tE,YAAc/tE,KAAK8tE,SAAS,OAIxEL,EAzG0B,CA0GjCtD,IAEFsD,GAAgB7/D,GAAK,aACrB6/D,GAAgBxxD,SAAWkuD,GAAUluD,SACrC,IASIiyD,GAAgB,CAACxvC,GAAa7oB,GAAUyL,GATlB1jB,OAAOyZ,OAAO,CACtCiqB,UAAW,KACX2+B,cAAeA,GACfmD,YAAaA,GACbO,iBAAkBA,GAClBwC,kBAAmBA,GACnBgE,UAAWA,GACXsD,gBAAiBA","sources":["webpack://kanha-shanthi-vanam/../node_modules/chart.js/dist/chart.mjs"],"sourcesContent":["import _assertThisInitialized from \"/codebuild/output/src68387856/src/my/sites/node_modules/@babel/runtime/helpers/esm/assertThisInitialized\";\nimport _get from \"/codebuild/output/src68387856/src/my/sites/node_modules/@babel/runtime/helpers/esm/get\";\nimport _inherits from \"/codebuild/output/src68387856/src/my/sites/node_modules/@babel/runtime/helpers/esm/inherits\";\nimport _possibleConstructorReturn from \"/codebuild/output/src68387856/src/my/sites/node_modules/@babel/runtime/helpers/esm/possibleConstructorReturn\";\nimport _getPrototypeOf from \"/codebuild/output/src68387856/src/my/sites/node_modules/@babel/runtime/helpers/esm/getPrototypeOf\";\nimport _slicedToArray from \"/codebuild/output/src68387856/src/my/sites/node_modules/@babel/runtime/helpers/esm/slicedToArray\";\nimport _defineProperty from \"/codebuild/output/src68387856/src/my/sites/node_modules/@babel/runtime/helpers/esm/defineProperty\";\nimport _toConsumableArray from \"/codebuild/output/src68387856/src/my/sites/node_modules/@babel/runtime/helpers/esm/toConsumableArray\";\nimport _classCallCheck from \"/codebuild/output/src68387856/src/my/sites/node_modules/@babel/runtime/helpers/esm/classCallCheck\";\nimport _createClass from \"/codebuild/output/src68387856/src/my/sites/node_modules/@babel/runtime/helpers/esm/createClass\";\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== \"undefined\" && o[Symbol.iterator] || o[\"@@iterator\"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\n/*!\n * Chart.js v3.9.1\n * https://www.chartjs.org\n * (c) 2022 Chart.js Contributors\n * Released under the MIT License\n */\nimport { r as requestAnimFrame, a as resolve, e as effects, c as _color, d as defaults, i as isObject, b as isArray, v as valueOrDefault, u as unlistenArrayEvents, l as listenArrayEvents, f as resolveObjectKey, g as isNumberFinite, h as createContext, j as defined, s as sign, k as isNullOrUndef, _ as _arrayUnique, t as toRadians, m as toPercentage, n as toDimension, T as TAU, o as formatNumber, p as _angleBetween, H as HALF_PI, P as PI, q as _getStartAndCountOfVisiblePoints, w as _scaleRangesChanged, x as isNumber, y as _parseObjectDataRadialScale, z as log10, A as _factorize, B as finiteOrDefault, C as callback, D as _addGrace, E as _limitValue, F as toDegrees, G as _measureText, I as _int16Range, J as _alignPixel, K as toPadding, L as clipArea, M as renderText, N as unclipArea, O as toFont, Q as each, R as _toLeftRightCenter, S as _alignStartEnd, U as overrides, V as merge, W as _capitalize, X as getRelativePosition, Y as _rlookupByKey, Z as _lookupByKey, $ as _isPointInArea, a0 as getAngleFromPoint, a1 as _getMaximumSize, a2 as _getParentNode, a3 as readUsedSize, a4 as throttled, a5 as supportsEventListenerOptions, a6 as _isDomSupported, a7 as descriptors, a8 as isFunction, a9 as _attachContext, aa as _createResolver, ab as _descriptors, ac as mergeIf, ad as uid, ae as debounce, af as retinaScale, ag as clearCanvas, ah as setsEqual, ai as _elementsEqual, aj as _isClickEvent, ak as _isBetween, al as _readValueToProps, am as _updateBezierControlPoints, an as _computeSegments, ao as _boundSegments, ap as _steppedInterpolation, aq as _bezierInterpolation, ar as _pointInLine, as as _steppedLineTo, at as _bezierCurveTo, au as drawPoint, av as addRoundedRectPath, aw as toTRBL, ax as toTRBLCorners, ay as _boundSegment, az as _normalizeAngle, aA as getRtlAdapter, aB as overrideTextDirection, aC as _textX, aD as restoreTextDirection, aE as drawPointLegend, aF as noop, aG as distanceBetweenPoints, aH as _setMinAndMaxByKey, aI as niceNum, aJ as almostWhole, aK as almostEquals, aL as _decimalPlaces, aM as _longestText, aN as _filterBetween, aO as _lookup } from './chunks/helpers.segment.mjs';\nexport { d as defaults } from './chunks/helpers.segment.mjs';\n\nvar Animator = /*#__PURE__*/function () {\n function Animator() {\n _classCallCheck(this, Animator);\n\n this._request = null;\n this._charts = new Map();\n this._running = false;\n this._lastDate = undefined;\n }\n\n _createClass(Animator, [{\n key: \"_notify\",\n value: function _notify(chart, anims, date, type) {\n var callbacks = anims.listeners[type];\n var numSteps = anims.duration;\n callbacks.forEach(function (fn) {\n return fn({\n chart: chart,\n initial: anims.initial,\n numSteps: numSteps,\n currentStep: Math.min(date - anims.start, numSteps)\n });\n });\n }\n }, {\n key: \"_refresh\",\n value: function _refresh() {\n var _this = this;\n\n if (this._request) {\n return;\n }\n\n this._running = true;\n this._request = requestAnimFrame.call(window, function () {\n _this._update();\n\n _this._request = null;\n\n if (_this._running) {\n _this._refresh();\n }\n });\n }\n }, {\n key: \"_update\",\n value: function _update() {\n var _this2 = this;\n\n var date = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : Date.now();\n var remaining = 0;\n\n this._charts.forEach(function (anims, chart) {\n if (!anims.running || !anims.items.length) {\n return;\n }\n\n var items = anims.items;\n var i = items.length - 1;\n var draw = false;\n var item;\n\n for (; i >= 0; --i) {\n item = items[i];\n\n if (item._active) {\n if (item._total > anims.duration) {\n anims.duration = item._total;\n }\n\n item.tick(date);\n draw = true;\n } else {\n items[i] = items[items.length - 1];\n items.pop();\n }\n }\n\n if (draw) {\n chart.draw();\n\n _this2._notify(chart, anims, date, 'progress');\n }\n\n if (!items.length) {\n anims.running = false;\n\n _this2._notify(chart, anims, date, 'complete');\n\n anims.initial = false;\n }\n\n remaining += items.length;\n });\n\n this._lastDate = date;\n\n if (remaining === 0) {\n this._running = false;\n }\n }\n }, {\n key: \"_getAnims\",\n value: function _getAnims(chart) {\n var charts = this._charts;\n var anims = charts.get(chart);\n\n if (!anims) {\n anims = {\n running: false,\n initial: true,\n items: [],\n listeners: {\n complete: [],\n progress: []\n }\n };\n charts.set(chart, anims);\n }\n\n return anims;\n }\n }, {\n key: \"listen\",\n value: function listen(chart, event, cb) {\n this._getAnims(chart).listeners[event].push(cb);\n }\n }, {\n key: \"add\",\n value: function add(chart, items) {\n var _this$_getAnims$items;\n\n if (!items || !items.length) {\n return;\n }\n\n (_this$_getAnims$items = this._getAnims(chart).items).push.apply(_this$_getAnims$items, _toConsumableArray(items));\n }\n }, {\n key: \"has\",\n value: function has(chart) {\n return this._getAnims(chart).items.length > 0;\n }\n }, {\n key: \"start\",\n value: function start(chart) {\n var anims = this._charts.get(chart);\n\n if (!anims) {\n return;\n }\n\n anims.running = true;\n anims.start = Date.now();\n anims.duration = anims.items.reduce(function (acc, cur) {\n return Math.max(acc, cur._duration);\n }, 0);\n\n this._refresh();\n }\n }, {\n key: \"running\",\n value: function running(chart) {\n if (!this._running) {\n return false;\n }\n\n var anims = this._charts.get(chart);\n\n if (!anims || !anims.running || !anims.items.length) {\n return false;\n }\n\n return true;\n }\n }, {\n key: \"stop\",\n value: function stop(chart) {\n var anims = this._charts.get(chart);\n\n if (!anims || !anims.items.length) {\n return;\n }\n\n var items = anims.items;\n var i = items.length - 1;\n\n for (; i >= 0; --i) {\n items[i].cancel();\n }\n\n anims.items = [];\n\n this._notify(chart, anims, Date.now(), 'complete');\n }\n }, {\n key: \"remove\",\n value: function remove(chart) {\n return this._charts.delete(chart);\n }\n }]);\n\n return Animator;\n}();\n\nvar animator = new Animator();\nvar transparent = 'transparent';\nvar interpolators = {\n boolean: function boolean(from, to, factor) {\n return factor > 0.5 ? to : from;\n },\n color: function color(from, to, factor) {\n var c0 = _color(from || transparent);\n\n var c1 = c0.valid && _color(to || transparent);\n\n return c1 && c1.valid ? c1.mix(c0, factor).hexString() : to;\n },\n number: function number(from, to, factor) {\n return from + (to - from) * factor;\n }\n};\n\nvar Animation = /*#__PURE__*/function () {\n function Animation(cfg, target, prop, to) {\n _classCallCheck(this, Animation);\n\n var currentValue = target[prop];\n to = resolve([cfg.to, to, currentValue, cfg.from]);\n var from = resolve([cfg.from, currentValue, to]);\n this._active = true;\n this._fn = cfg.fn || interpolators[cfg.type || typeof from];\n this._easing = effects[cfg.easing] || effects.linear;\n this._start = Math.floor(Date.now() + (cfg.delay || 0));\n this._duration = this._total = Math.floor(cfg.duration);\n this._loop = !!cfg.loop;\n this._target = target;\n this._prop = prop;\n this._from = from;\n this._to = to;\n this._promises = undefined;\n }\n\n _createClass(Animation, [{\n key: \"active\",\n value: function active() {\n return this._active;\n }\n }, {\n key: \"update\",\n value: function update(cfg, to, date) {\n if (this._active) {\n this._notify(false);\n\n var currentValue = this._target[this._prop];\n var elapsed = date - this._start;\n var remain = this._duration - elapsed;\n this._start = date;\n this._duration = Math.floor(Math.max(remain, cfg.duration));\n this._total += elapsed;\n this._loop = !!cfg.loop;\n this._to = resolve([cfg.to, to, currentValue, cfg.from]);\n this._from = resolve([cfg.from, currentValue, to]);\n }\n }\n }, {\n key: \"cancel\",\n value: function cancel() {\n if (this._active) {\n this.tick(Date.now());\n this._active = false;\n\n this._notify(false);\n }\n }\n }, {\n key: \"tick\",\n value: function tick(date) {\n var elapsed = date - this._start;\n var duration = this._duration;\n var prop = this._prop;\n var from = this._from;\n var loop = this._loop;\n var to = this._to;\n var factor;\n this._active = from !== to && (loop || elapsed < duration);\n\n if (!this._active) {\n this._target[prop] = to;\n\n this._notify(true);\n\n return;\n }\n\n if (elapsed < 0) {\n this._target[prop] = from;\n return;\n }\n\n factor = elapsed / duration % 2;\n factor = loop && factor > 1 ? 2 - factor : factor;\n factor = this._easing(Math.min(1, Math.max(0, factor)));\n this._target[prop] = this._fn(from, to, factor);\n }\n }, {\n key: \"wait\",\n value: function wait() {\n var promises = this._promises || (this._promises = []);\n return new Promise(function (res, rej) {\n promises.push({\n res: res,\n rej: rej\n });\n });\n }\n }, {\n key: \"_notify\",\n value: function _notify(resolved) {\n var method = resolved ? 'res' : 'rej';\n var promises = this._promises || [];\n\n for (var i = 0; i < promises.length; i++) {\n promises[i][method]();\n }\n }\n }]);\n\n return Animation;\n}();\n\nvar numbers = ['x', 'y', 'borderWidth', 'radius', 'tension'];\nvar colors = ['color', 'borderColor', 'backgroundColor'];\ndefaults.set('animation', {\n delay: undefined,\n duration: 1000,\n easing: 'easeOutQuart',\n fn: undefined,\n from: undefined,\n loop: undefined,\n to: undefined,\n type: undefined\n});\nvar animationOptions = Object.keys(defaults.animation);\ndefaults.describe('animation', {\n _fallback: false,\n _indexable: false,\n _scriptable: function _scriptable(name) {\n return name !== 'onProgress' && name !== 'onComplete' && name !== 'fn';\n }\n});\ndefaults.set('animations', {\n colors: {\n type: 'color',\n properties: colors\n },\n numbers: {\n type: 'number',\n properties: numbers\n }\n});\ndefaults.describe('animations', {\n _fallback: 'animation'\n});\ndefaults.set('transitions', {\n active: {\n animation: {\n duration: 400\n }\n },\n resize: {\n animation: {\n duration: 0\n }\n },\n show: {\n animations: {\n colors: {\n from: 'transparent'\n },\n visible: {\n type: 'boolean',\n duration: 0\n }\n }\n },\n hide: {\n animations: {\n colors: {\n to: 'transparent'\n },\n visible: {\n type: 'boolean',\n easing: 'linear',\n fn: function fn(v) {\n return v | 0;\n }\n }\n }\n }\n});\n\nvar Animations = /*#__PURE__*/function () {\n function Animations(chart, config) {\n _classCallCheck(this, Animations);\n\n this._chart = chart;\n this._properties = new Map();\n this.configure(config);\n }\n\n _createClass(Animations, [{\n key: \"configure\",\n value: function configure(config) {\n if (!isObject(config)) {\n return;\n }\n\n var animatedProps = this._properties;\n Object.getOwnPropertyNames(config).forEach(function (key) {\n var cfg = config[key];\n\n if (!isObject(cfg)) {\n return;\n }\n\n var resolved = {};\n\n var _iterator = _createForOfIteratorHelper(animationOptions),\n _step;\n\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var option = _step.value;\n resolved[option] = cfg[option];\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n\n (isArray(cfg.properties) && cfg.properties || [key]).forEach(function (prop) {\n if (prop === key || !animatedProps.has(prop)) {\n animatedProps.set(prop, resolved);\n }\n });\n });\n }\n }, {\n key: \"_animateOptions\",\n value: function _animateOptions(target, values) {\n var newOptions = values.options;\n var options = resolveTargetOptions(target, newOptions);\n\n if (!options) {\n return [];\n }\n\n var animations = this._createAnimations(options, newOptions);\n\n if (newOptions.$shared) {\n awaitAll(target.options.$animations, newOptions).then(function () {\n target.options = newOptions;\n }, function () {});\n }\n\n return animations;\n }\n }, {\n key: \"_createAnimations\",\n value: function _createAnimations(target, values) {\n var animatedProps = this._properties;\n var animations = [];\n var running = target.$animations || (target.$animations = {});\n var props = Object.keys(values);\n var date = Date.now();\n var i;\n\n for (i = props.length - 1; i >= 0; --i) {\n var prop = props[i];\n\n if (prop.charAt(0) === '$') {\n continue;\n }\n\n if (prop === 'options') {\n animations.push.apply(animations, _toConsumableArray(this._animateOptions(target, values)));\n continue;\n }\n\n var value = values[prop];\n var animation = running[prop];\n var cfg = animatedProps.get(prop);\n\n if (animation) {\n if (cfg && animation.active()) {\n animation.update(cfg, value, date);\n continue;\n } else {\n animation.cancel();\n }\n }\n\n if (!cfg || !cfg.duration) {\n target[prop] = value;\n continue;\n }\n\n running[prop] = animation = new Animation(cfg, target, prop, value);\n animations.push(animation);\n }\n\n return animations;\n }\n }, {\n key: \"update\",\n value: function update(target, values) {\n if (this._properties.size === 0) {\n Object.assign(target, values);\n return;\n }\n\n var animations = this._createAnimations(target, values);\n\n if (animations.length) {\n animator.add(this._chart, animations);\n return true;\n }\n }\n }]);\n\n return Animations;\n}();\n\nfunction awaitAll(animations, properties) {\n var running = [];\n var keys = Object.keys(properties);\n\n for (var i = 0; i < keys.length; i++) {\n var anim = animations[keys[i]];\n\n if (anim && anim.active()) {\n running.push(anim.wait());\n }\n }\n\n return Promise.all(running);\n}\n\nfunction resolveTargetOptions(target, newOptions) {\n if (!newOptions) {\n return;\n }\n\n var options = target.options;\n\n if (!options) {\n target.options = newOptions;\n return;\n }\n\n if (options.$shared) {\n target.options = options = Object.assign({}, options, {\n $shared: false,\n $animations: {}\n });\n }\n\n return options;\n}\n\nfunction scaleClip(scale, allowedOverflow) {\n var opts = scale && scale.options || {};\n var reverse = opts.reverse;\n var min = opts.min === undefined ? allowedOverflow : 0;\n var max = opts.max === undefined ? allowedOverflow : 0;\n return {\n start: reverse ? max : min,\n end: reverse ? min : max\n };\n}\n\nfunction defaultClip(xScale, yScale, allowedOverflow) {\n if (allowedOverflow === false) {\n return false;\n }\n\n var x = scaleClip(xScale, allowedOverflow);\n var y = scaleClip(yScale, allowedOverflow);\n return {\n top: y.end,\n right: x.end,\n bottom: y.start,\n left: x.start\n };\n}\n\nfunction toClip(value) {\n var t, r, b, l;\n\n if (isObject(value)) {\n t = value.top;\n r = value.right;\n b = value.bottom;\n l = value.left;\n } else {\n t = r = b = l = value;\n }\n\n return {\n top: t,\n right: r,\n bottom: b,\n left: l,\n disabled: value === false\n };\n}\n\nfunction getSortedDatasetIndices(chart, filterVisible) {\n var keys = [];\n\n var metasets = chart._getSortedDatasetMetas(filterVisible);\n\n var i, ilen;\n\n for (i = 0, ilen = metasets.length; i < ilen; ++i) {\n keys.push(metasets[i].index);\n }\n\n return keys;\n}\n\nfunction _applyStack(stack, value, dsIndex) {\n var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n var keys = stack.keys;\n var singleMode = options.mode === 'single';\n var i, ilen, datasetIndex, otherValue;\n\n if (value === null) {\n return;\n }\n\n for (i = 0, ilen = keys.length; i < ilen; ++i) {\n datasetIndex = +keys[i];\n\n if (datasetIndex === dsIndex) {\n if (options.all) {\n continue;\n }\n\n break;\n }\n\n otherValue = stack.values[datasetIndex];\n\n if (isNumberFinite(otherValue) && (singleMode || value === 0 || sign(value) === sign(otherValue))) {\n value += otherValue;\n }\n }\n\n return value;\n}\n\nfunction convertObjectDataToArray(data) {\n var keys = Object.keys(data);\n var adata = new Array(keys.length);\n var i, ilen, key;\n\n for (i = 0, ilen = keys.length; i < ilen; ++i) {\n key = keys[i];\n adata[i] = {\n x: key,\n y: data[key]\n };\n }\n\n return adata;\n}\n\nfunction isStacked(scale, meta) {\n var stacked = scale && scale.options.stacked;\n return stacked || stacked === undefined && meta.stack !== undefined;\n}\n\nfunction getStackKey(indexScale, valueScale, meta) {\n return \"\".concat(indexScale.id, \".\").concat(valueScale.id, \".\").concat(meta.stack || meta.type);\n}\n\nfunction getUserBounds(scale) {\n var _scale$getUserBounds = scale.getUserBounds(),\n min = _scale$getUserBounds.min,\n max = _scale$getUserBounds.max,\n minDefined = _scale$getUserBounds.minDefined,\n maxDefined = _scale$getUserBounds.maxDefined;\n\n return {\n min: minDefined ? min : Number.NEGATIVE_INFINITY,\n max: maxDefined ? max : Number.POSITIVE_INFINITY\n };\n}\n\nfunction getOrCreateStack(stacks, stackKey, indexValue) {\n var subStack = stacks[stackKey] || (stacks[stackKey] = {});\n return subStack[indexValue] || (subStack[indexValue] = {});\n}\n\nfunction getLastIndexInStack(stack, vScale, positive, type) {\n var _iterator2 = _createForOfIteratorHelper(vScale.getMatchingVisibleMetas(type).reverse()),\n _step2;\n\n try {\n for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n var meta = _step2.value;\n var value = stack[meta.index];\n\n if (positive && value > 0 || !positive && value < 0) {\n return meta.index;\n }\n }\n } catch (err) {\n _iterator2.e(err);\n } finally {\n _iterator2.f();\n }\n\n return null;\n}\n\nfunction updateStacks(controller, parsed) {\n var chart = controller.chart,\n meta = controller._cachedMeta;\n var stacks = chart._stacks || (chart._stacks = {});\n var iScale = meta.iScale,\n vScale = meta.vScale,\n datasetIndex = meta.index;\n var iAxis = iScale.axis;\n var vAxis = vScale.axis;\n var key = getStackKey(iScale, vScale, meta);\n var ilen = parsed.length;\n var stack;\n\n for (var i = 0; i < ilen; ++i) {\n var item = parsed[i];\n var _index = item[iAxis],\n value = item[vAxis];\n var itemStacks = item._stacks || (item._stacks = {});\n stack = itemStacks[vAxis] = getOrCreateStack(stacks, key, _index);\n stack[datasetIndex] = value;\n stack._top = getLastIndexInStack(stack, vScale, true, meta.type);\n stack._bottom = getLastIndexInStack(stack, vScale, false, meta.type);\n }\n}\n\nfunction getFirstScaleId(chart, axis) {\n var scales = chart.scales;\n return Object.keys(scales).filter(function (key) {\n return scales[key].axis === axis;\n }).shift();\n}\n\nfunction createDatasetContext(parent, index) {\n return createContext(parent, {\n active: false,\n dataset: undefined,\n datasetIndex: index,\n index: index,\n mode: 'default',\n type: 'dataset'\n });\n}\n\nfunction createDataContext(parent, index, element) {\n return createContext(parent, {\n active: false,\n dataIndex: index,\n parsed: undefined,\n raw: undefined,\n element: element,\n index: index,\n mode: 'default',\n type: 'data'\n });\n}\n\nfunction clearStacks(meta, items) {\n var datasetIndex = meta.controller.index;\n var axis = meta.vScale && meta.vScale.axis;\n\n if (!axis) {\n return;\n }\n\n items = items || meta._parsed;\n\n var _iterator3 = _createForOfIteratorHelper(items),\n _step3;\n\n try {\n for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {\n var parsed = _step3.value;\n var stacks = parsed._stacks;\n\n if (!stacks || stacks[axis] === undefined || stacks[axis][datasetIndex] === undefined) {\n return;\n }\n\n delete stacks[axis][datasetIndex];\n }\n } catch (err) {\n _iterator3.e(err);\n } finally {\n _iterator3.f();\n }\n}\n\nvar isDirectUpdateMode = function isDirectUpdateMode(mode) {\n return mode === 'reset' || mode === 'none';\n};\n\nvar cloneIfNotShared = function cloneIfNotShared(cached, shared) {\n return shared ? cached : Object.assign({}, cached);\n};\n\nvar createStack = function createStack(canStack, meta, chart) {\n return canStack && !meta.hidden && meta._stacked && {\n keys: getSortedDatasetIndices(chart, true),\n values: null\n };\n};\n\nvar DatasetController = /*#__PURE__*/function () {\n function DatasetController(chart, datasetIndex) {\n _classCallCheck(this, DatasetController);\n\n this.chart = chart;\n this._ctx = chart.ctx;\n this.index = datasetIndex;\n this._cachedDataOpts = {};\n this._cachedMeta = this.getMeta();\n this._type = this._cachedMeta.type;\n this.options = undefined;\n this._parsing = false;\n this._data = undefined;\n this._objectData = undefined;\n this._sharedOptions = undefined;\n this._drawStart = undefined;\n this._drawCount = undefined;\n this.enableOptionSharing = false;\n this.supportsDecimation = false;\n this.$context = undefined;\n this._syncList = [];\n this.initialize();\n }\n\n _createClass(DatasetController, [{\n key: \"initialize\",\n value: function initialize() {\n var meta = this._cachedMeta;\n this.configure();\n this.linkScales();\n meta._stacked = isStacked(meta.vScale, meta);\n this.addElements();\n }\n }, {\n key: \"updateIndex\",\n value: function updateIndex(datasetIndex) {\n if (this.index !== datasetIndex) {\n clearStacks(this._cachedMeta);\n }\n\n this.index = datasetIndex;\n }\n }, {\n key: \"linkScales\",\n value: function linkScales() {\n var chart = this.chart;\n var meta = this._cachedMeta;\n var dataset = this.getDataset();\n\n var chooseId = function chooseId(axis, x, y, r) {\n return axis === 'x' ? x : axis === 'r' ? r : y;\n };\n\n var xid = meta.xAxisID = valueOrDefault(dataset.xAxisID, getFirstScaleId(chart, 'x'));\n var yid = meta.yAxisID = valueOrDefault(dataset.yAxisID, getFirstScaleId(chart, 'y'));\n var rid = meta.rAxisID = valueOrDefault(dataset.rAxisID, getFirstScaleId(chart, 'r'));\n var indexAxis = meta.indexAxis;\n var iid = meta.iAxisID = chooseId(indexAxis, xid, yid, rid);\n var vid = meta.vAxisID = chooseId(indexAxis, yid, xid, rid);\n meta.xScale = this.getScaleForId(xid);\n meta.yScale = this.getScaleForId(yid);\n meta.rScale = this.getScaleForId(rid);\n meta.iScale = this.getScaleForId(iid);\n meta.vScale = this.getScaleForId(vid);\n }\n }, {\n key: \"getDataset\",\n value: function getDataset() {\n return this.chart.data.datasets[this.index];\n }\n }, {\n key: \"getMeta\",\n value: function getMeta() {\n return this.chart.getDatasetMeta(this.index);\n }\n }, {\n key: \"getScaleForId\",\n value: function getScaleForId(scaleID) {\n return this.chart.scales[scaleID];\n }\n }, {\n key: \"_getOtherScale\",\n value: function _getOtherScale(scale) {\n var meta = this._cachedMeta;\n return scale === meta.iScale ? meta.vScale : meta.iScale;\n }\n }, {\n key: \"reset\",\n value: function reset() {\n this._update('reset');\n }\n }, {\n key: \"_destroy\",\n value: function _destroy() {\n var meta = this._cachedMeta;\n\n if (this._data) {\n unlistenArrayEvents(this._data, this);\n }\n\n if (meta._stacked) {\n clearStacks(meta);\n }\n }\n }, {\n key: \"_dataCheck\",\n value: function _dataCheck() {\n var dataset = this.getDataset();\n var data = dataset.data || (dataset.data = []);\n var _data = this._data;\n\n if (isObject(data)) {\n this._data = convertObjectDataToArray(data);\n } else if (_data !== data) {\n if (_data) {\n unlistenArrayEvents(_data, this);\n var meta = this._cachedMeta;\n clearStacks(meta);\n meta._parsed = [];\n }\n\n if (data && Object.isExtensible(data)) {\n listenArrayEvents(data, this);\n }\n\n this._syncList = [];\n this._data = data;\n }\n }\n }, {\n key: \"addElements\",\n value: function addElements() {\n var meta = this._cachedMeta;\n\n this._dataCheck();\n\n if (this.datasetElementType) {\n meta.dataset = new this.datasetElementType();\n }\n }\n }, {\n key: \"buildOrUpdateElements\",\n value: function buildOrUpdateElements(resetNewElements) {\n var meta = this._cachedMeta;\n var dataset = this.getDataset();\n var stackChanged = false;\n\n this._dataCheck();\n\n var oldStacked = meta._stacked;\n meta._stacked = isStacked(meta.vScale, meta);\n\n if (meta.stack !== dataset.stack) {\n stackChanged = true;\n clearStacks(meta);\n meta.stack = dataset.stack;\n }\n\n this._resyncElements(resetNewElements);\n\n if (stackChanged || oldStacked !== meta._stacked) {\n updateStacks(this, meta._parsed);\n }\n }\n }, {\n key: \"configure\",\n value: function configure() {\n var config = this.chart.config;\n var scopeKeys = config.datasetScopeKeys(this._type);\n var scopes = config.getOptionScopes(this.getDataset(), scopeKeys, true);\n this.options = config.createResolver(scopes, this.getContext());\n this._parsing = this.options.parsing;\n this._cachedDataOpts = {};\n }\n }, {\n key: \"parse\",\n value: function parse(start, count) {\n var meta = this._cachedMeta,\n data = this._data;\n var iScale = meta.iScale,\n _stacked = meta._stacked;\n var iAxis = iScale.axis;\n var sorted = start === 0 && count === data.length ? true : meta._sorted;\n var prev = start > 0 && meta._parsed[start - 1];\n var i, cur, parsed;\n\n if (this._parsing === false) {\n meta._parsed = data;\n meta._sorted = true;\n parsed = data;\n } else {\n if (isArray(data[start])) {\n parsed = this.parseArrayData(meta, data, start, count);\n } else if (isObject(data[start])) {\n parsed = this.parseObjectData(meta, data, start, count);\n } else {\n parsed = this.parsePrimitiveData(meta, data, start, count);\n }\n\n var isNotInOrderComparedToPrev = function isNotInOrderComparedToPrev() {\n return cur[iAxis] === null || prev && cur[iAxis] < prev[iAxis];\n };\n\n for (i = 0; i < count; ++i) {\n meta._parsed[i + start] = cur = parsed[i];\n\n if (sorted) {\n if (isNotInOrderComparedToPrev()) {\n sorted = false;\n }\n\n prev = cur;\n }\n }\n\n meta._sorted = sorted;\n }\n\n if (_stacked) {\n updateStacks(this, parsed);\n }\n }\n }, {\n key: \"parsePrimitiveData\",\n value: function parsePrimitiveData(meta, data, start, count) {\n var iScale = meta.iScale,\n vScale = meta.vScale;\n var iAxis = iScale.axis;\n var vAxis = vScale.axis;\n var labels = iScale.getLabels();\n var singleScale = iScale === vScale;\n var parsed = new Array(count);\n var i, ilen, index;\n\n for (i = 0, ilen = count; i < ilen; ++i) {\n var _parsed$i;\n\n index = i + start;\n parsed[i] = (_parsed$i = {}, _defineProperty(_parsed$i, iAxis, singleScale || iScale.parse(labels[index], index)), _defineProperty(_parsed$i, vAxis, vScale.parse(data[index], index)), _parsed$i);\n }\n\n return parsed;\n }\n }, {\n key: \"parseArrayData\",\n value: function parseArrayData(meta, data, start, count) {\n var xScale = meta.xScale,\n yScale = meta.yScale;\n var parsed = new Array(count);\n var i, ilen, index, item;\n\n for (i = 0, ilen = count; i < ilen; ++i) {\n index = i + start;\n item = data[index];\n parsed[i] = {\n x: xScale.parse(item[0], index),\n y: yScale.parse(item[1], index)\n };\n }\n\n return parsed;\n }\n }, {\n key: \"parseObjectData\",\n value: function parseObjectData(meta, data, start, count) {\n var xScale = meta.xScale,\n yScale = meta.yScale;\n var _this$_parsing = this._parsing,\n _this$_parsing$xAxisK = _this$_parsing.xAxisKey,\n xAxisKey = _this$_parsing$xAxisK === void 0 ? 'x' : _this$_parsing$xAxisK,\n _this$_parsing$yAxisK = _this$_parsing.yAxisKey,\n yAxisKey = _this$_parsing$yAxisK === void 0 ? 'y' : _this$_parsing$yAxisK;\n var parsed = new Array(count);\n var i, ilen, index, item;\n\n for (i = 0, ilen = count; i < ilen; ++i) {\n index = i + start;\n item = data[index];\n parsed[i] = {\n x: xScale.parse(resolveObjectKey(item, xAxisKey), index),\n y: yScale.parse(resolveObjectKey(item, yAxisKey), index)\n };\n }\n\n return parsed;\n }\n }, {\n key: \"getParsed\",\n value: function getParsed(index) {\n return this._cachedMeta._parsed[index];\n }\n }, {\n key: \"getDataElement\",\n value: function getDataElement(index) {\n return this._cachedMeta.data[index];\n }\n }, {\n key: \"applyStack\",\n value: function applyStack(scale, parsed, mode) {\n var chart = this.chart;\n var meta = this._cachedMeta;\n var value = parsed[scale.axis];\n var stack = {\n keys: getSortedDatasetIndices(chart, true),\n values: parsed._stacks[scale.axis]\n };\n return _applyStack(stack, value, meta.index, {\n mode: mode\n });\n }\n }, {\n key: \"updateRangeFromParsed\",\n value: function updateRangeFromParsed(range, scale, parsed, stack) {\n var parsedValue = parsed[scale.axis];\n var value = parsedValue === null ? NaN : parsedValue;\n var values = stack && parsed._stacks[scale.axis];\n\n if (stack && values) {\n stack.values = values;\n value = _applyStack(stack, parsedValue, this._cachedMeta.index);\n }\n\n range.min = Math.min(range.min, value);\n range.max = Math.max(range.max, value);\n }\n }, {\n key: \"getMinMax\",\n value: function getMinMax(scale, canStack) {\n var meta = this._cachedMeta;\n var _parsed = meta._parsed;\n var sorted = meta._sorted && scale === meta.iScale;\n var ilen = _parsed.length;\n\n var otherScale = this._getOtherScale(scale);\n\n var stack = createStack(canStack, meta, this.chart);\n var range = {\n min: Number.POSITIVE_INFINITY,\n max: Number.NEGATIVE_INFINITY\n };\n\n var _getUserBounds = getUserBounds(otherScale),\n otherMin = _getUserBounds.min,\n otherMax = _getUserBounds.max;\n\n var i, parsed;\n\n function _skip() {\n parsed = _parsed[i];\n var otherValue = parsed[otherScale.axis];\n return !isNumberFinite(parsed[scale.axis]) || otherMin > otherValue || otherMax < otherValue;\n }\n\n for (i = 0; i < ilen; ++i) {\n if (_skip()) {\n continue;\n }\n\n this.updateRangeFromParsed(range, scale, parsed, stack);\n\n if (sorted) {\n break;\n }\n }\n\n if (sorted) {\n for (i = ilen - 1; i >= 0; --i) {\n if (_skip()) {\n continue;\n }\n\n this.updateRangeFromParsed(range, scale, parsed, stack);\n break;\n }\n }\n\n return range;\n }\n }, {\n key: \"getAllParsedValues\",\n value: function getAllParsedValues(scale) {\n var parsed = this._cachedMeta._parsed;\n var values = [];\n var i, ilen, value;\n\n for (i = 0, ilen = parsed.length; i < ilen; ++i) {\n value = parsed[i][scale.axis];\n\n if (isNumberFinite(value)) {\n values.push(value);\n }\n }\n\n return values;\n }\n }, {\n key: \"getMaxOverflow\",\n value: function getMaxOverflow() {\n return false;\n }\n }, {\n key: \"getLabelAndValue\",\n value: function getLabelAndValue(index) {\n var meta = this._cachedMeta;\n var iScale = meta.iScale;\n var vScale = meta.vScale;\n var parsed = this.getParsed(index);\n return {\n label: iScale ? '' + iScale.getLabelForValue(parsed[iScale.axis]) : '',\n value: vScale ? '' + vScale.getLabelForValue(parsed[vScale.axis]) : ''\n };\n }\n }, {\n key: \"_update\",\n value: function _update(mode) {\n var meta = this._cachedMeta;\n this.update(mode || 'default');\n meta._clip = toClip(valueOrDefault(this.options.clip, defaultClip(meta.xScale, meta.yScale, this.getMaxOverflow())));\n }\n }, {\n key: \"update\",\n value: function update(mode) {}\n }, {\n key: \"draw\",\n value: function draw() {\n var ctx = this._ctx;\n var chart = this.chart;\n var meta = this._cachedMeta;\n var elements = meta.data || [];\n var area = chart.chartArea;\n var active = [];\n var start = this._drawStart || 0;\n var count = this._drawCount || elements.length - start;\n var drawActiveElementsOnTop = this.options.drawActiveElementsOnTop;\n var i;\n\n if (meta.dataset) {\n meta.dataset.draw(ctx, area, start, count);\n }\n\n for (i = start; i < start + count; ++i) {\n var element = elements[i];\n\n if (element.hidden) {\n continue;\n }\n\n if (element.active && drawActiveElementsOnTop) {\n active.push(element);\n } else {\n element.draw(ctx, area);\n }\n }\n\n for (i = 0; i < active.length; ++i) {\n active[i].draw(ctx, area);\n }\n }\n }, {\n key: \"getStyle\",\n value: function getStyle(index, active) {\n var mode = active ? 'active' : 'default';\n return index === undefined && this._cachedMeta.dataset ? this.resolveDatasetElementOptions(mode) : this.resolveDataElementOptions(index || 0, mode);\n }\n }, {\n key: \"getContext\",\n value: function getContext(index, active, mode) {\n var dataset = this.getDataset();\n var context;\n\n if (index >= 0 && index < this._cachedMeta.data.length) {\n var element = this._cachedMeta.data[index];\n context = element.$context || (element.$context = createDataContext(this.getContext(), index, element));\n context.parsed = this.getParsed(index);\n context.raw = dataset.data[index];\n context.index = context.dataIndex = index;\n } else {\n context = this.$context || (this.$context = createDatasetContext(this.chart.getContext(), this.index));\n context.dataset = dataset;\n context.index = context.datasetIndex = this.index;\n }\n\n context.active = !!active;\n context.mode = mode;\n return context;\n }\n }, {\n key: \"resolveDatasetElementOptions\",\n value: function resolveDatasetElementOptions(mode) {\n return this._resolveElementOptions(this.datasetElementType.id, mode);\n }\n }, {\n key: \"resolveDataElementOptions\",\n value: function resolveDataElementOptions(index, mode) {\n return this._resolveElementOptions(this.dataElementType.id, mode, index);\n }\n }, {\n key: \"_resolveElementOptions\",\n value: function _resolveElementOptions(elementType) {\n var _this3 = this;\n\n var mode = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'default';\n var index = arguments.length > 2 ? arguments[2] : undefined;\n var active = mode === 'active';\n var cache = this._cachedDataOpts;\n var cacheKey = elementType + '-' + mode;\n var cached = cache[cacheKey];\n var sharing = this.enableOptionSharing && defined(index);\n\n if (cached) {\n return cloneIfNotShared(cached, sharing);\n }\n\n var config = this.chart.config;\n var scopeKeys = config.datasetElementScopeKeys(this._type, elementType);\n var prefixes = active ? [\"\".concat(elementType, \"Hover\"), 'hover', elementType, ''] : [elementType, ''];\n var scopes = config.getOptionScopes(this.getDataset(), scopeKeys);\n var names = Object.keys(defaults.elements[elementType]);\n\n var context = function context() {\n return _this3.getContext(index, active);\n };\n\n var values = config.resolveNamedOptions(scopes, names, context, prefixes);\n\n if (values.$shared) {\n values.$shared = sharing;\n cache[cacheKey] = Object.freeze(cloneIfNotShared(values, sharing));\n }\n\n return values;\n }\n }, {\n key: \"_resolveAnimations\",\n value: function _resolveAnimations(index, transition, active) {\n var chart = this.chart;\n var cache = this._cachedDataOpts;\n var cacheKey = \"animation-\".concat(transition);\n var cached = cache[cacheKey];\n\n if (cached) {\n return cached;\n }\n\n var options;\n\n if (chart.options.animation !== false) {\n var config = this.chart.config;\n var scopeKeys = config.datasetAnimationScopeKeys(this._type, transition);\n var scopes = config.getOptionScopes(this.getDataset(), scopeKeys);\n options = config.createResolver(scopes, this.getContext(index, active, transition));\n }\n\n var animations = new Animations(chart, options && options.animations);\n\n if (options && options._cacheable) {\n cache[cacheKey] = Object.freeze(animations);\n }\n\n return animations;\n }\n }, {\n key: \"getSharedOptions\",\n value: function getSharedOptions(options) {\n if (!options.$shared) {\n return;\n }\n\n return this._sharedOptions || (this._sharedOptions = Object.assign({}, options));\n }\n }, {\n key: \"includeOptions\",\n value: function includeOptions(mode, sharedOptions) {\n return !sharedOptions || isDirectUpdateMode(mode) || this.chart._animationsDisabled;\n }\n }, {\n key: \"_getSharedOptions\",\n value: function _getSharedOptions(start, mode) {\n var firstOpts = this.resolveDataElementOptions(start, mode);\n var previouslySharedOptions = this._sharedOptions;\n var sharedOptions = this.getSharedOptions(firstOpts);\n var includeOptions = this.includeOptions(mode, sharedOptions) || sharedOptions !== previouslySharedOptions;\n this.updateSharedOptions(sharedOptions, mode, firstOpts);\n return {\n sharedOptions: sharedOptions,\n includeOptions: includeOptions\n };\n }\n }, {\n key: \"updateElement\",\n value: function updateElement(element, index, properties, mode) {\n if (isDirectUpdateMode(mode)) {\n Object.assign(element, properties);\n } else {\n this._resolveAnimations(index, mode).update(element, properties);\n }\n }\n }, {\n key: \"updateSharedOptions\",\n value: function updateSharedOptions(sharedOptions, mode, newOptions) {\n if (sharedOptions && !isDirectUpdateMode(mode)) {\n this._resolveAnimations(undefined, mode).update(sharedOptions, newOptions);\n }\n }\n }, {\n key: \"_setStyle\",\n value: function _setStyle(element, index, mode, active) {\n element.active = active;\n var options = this.getStyle(index, active);\n\n this._resolveAnimations(index, mode, active).update(element, {\n options: !active && this.getSharedOptions(options) || options\n });\n }\n }, {\n key: \"removeHoverStyle\",\n value: function removeHoverStyle(element, datasetIndex, index) {\n this._setStyle(element, index, 'active', false);\n }\n }, {\n key: \"setHoverStyle\",\n value: function setHoverStyle(element, datasetIndex, index) {\n this._setStyle(element, index, 'active', true);\n }\n }, {\n key: \"_removeDatasetHoverStyle\",\n value: function _removeDatasetHoverStyle() {\n var element = this._cachedMeta.dataset;\n\n if (element) {\n this._setStyle(element, undefined, 'active', false);\n }\n }\n }, {\n key: \"_setDatasetHoverStyle\",\n value: function _setDatasetHoverStyle() {\n var element = this._cachedMeta.dataset;\n\n if (element) {\n this._setStyle(element, undefined, 'active', true);\n }\n }\n }, {\n key: \"_resyncElements\",\n value: function _resyncElements(resetNewElements) {\n var data = this._data;\n var elements = this._cachedMeta.data;\n\n var _iterator4 = _createForOfIteratorHelper(this._syncList),\n _step4;\n\n try {\n for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {\n var _step4$value = _slicedToArray(_step4.value, 3),\n method = _step4$value[0],\n arg1 = _step4$value[1],\n arg2 = _step4$value[2];\n\n this[method](arg1, arg2);\n }\n } catch (err) {\n _iterator4.e(err);\n } finally {\n _iterator4.f();\n }\n\n this._syncList = [];\n var numMeta = elements.length;\n var numData = data.length;\n var count = Math.min(numData, numMeta);\n\n if (count) {\n this.parse(0, count);\n }\n\n if (numData > numMeta) {\n this._insertElements(numMeta, numData - numMeta, resetNewElements);\n } else if (numData < numMeta) {\n this._removeElements(numData, numMeta - numData);\n }\n }\n }, {\n key: \"_insertElements\",\n value: function _insertElements(start, count) {\n var resetNewElements = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;\n var meta = this._cachedMeta;\n var data = meta.data;\n var end = start + count;\n var i;\n\n var move = function move(arr) {\n arr.length += count;\n\n for (i = arr.length - 1; i >= end; i--) {\n arr[i] = arr[i - count];\n }\n };\n\n move(data);\n\n for (i = start; i < end; ++i) {\n data[i] = new this.dataElementType();\n }\n\n if (this._parsing) {\n move(meta._parsed);\n }\n\n this.parse(start, count);\n\n if (resetNewElements) {\n this.updateElements(data, start, count, 'reset');\n }\n }\n }, {\n key: \"updateElements\",\n value: function updateElements(element, start, count, mode) {}\n }, {\n key: \"_removeElements\",\n value: function _removeElements(start, count) {\n var meta = this._cachedMeta;\n\n if (this._parsing) {\n var removed = meta._parsed.splice(start, count);\n\n if (meta._stacked) {\n clearStacks(meta, removed);\n }\n }\n\n meta.data.splice(start, count);\n }\n }, {\n key: \"_sync\",\n value: function _sync(args) {\n if (this._parsing) {\n this._syncList.push(args);\n } else {\n var _args2 = _slicedToArray(args, 3),\n method = _args2[0],\n arg1 = _args2[1],\n arg2 = _args2[2];\n\n this[method](arg1, arg2);\n }\n\n this.chart._dataChanges.push([this.index].concat(_toConsumableArray(args)));\n }\n }, {\n key: \"_onDataPush\",\n value: function _onDataPush() {\n var count = arguments.length;\n\n this._sync(['_insertElements', this.getDataset().data.length - count, count]);\n }\n }, {\n key: \"_onDataPop\",\n value: function _onDataPop() {\n this._sync(['_removeElements', this._cachedMeta.data.length - 1, 1]);\n }\n }, {\n key: \"_onDataShift\",\n value: function _onDataShift() {\n this._sync(['_removeElements', 0, 1]);\n }\n }, {\n key: \"_onDataSplice\",\n value: function _onDataSplice(start, count) {\n if (count) {\n this._sync(['_removeElements', start, count]);\n }\n\n var newCount = arguments.length - 2;\n\n if (newCount) {\n this._sync(['_insertElements', start, newCount]);\n }\n }\n }, {\n key: \"_onDataUnshift\",\n value: function _onDataUnshift() {\n this._sync(['_insertElements', 0, arguments.length]);\n }\n }]);\n\n return DatasetController;\n}();\n\nDatasetController.defaults = {};\nDatasetController.prototype.datasetElementType = null;\nDatasetController.prototype.dataElementType = null;\n\nfunction getAllScaleValues(scale, type) {\n if (!scale._cache.$bar) {\n var visibleMetas = scale.getMatchingVisibleMetas(type);\n var values = [];\n\n for (var i = 0, ilen = visibleMetas.length; i < ilen; i++) {\n values = values.concat(visibleMetas[i].controller.getAllParsedValues(scale));\n }\n\n scale._cache.$bar = _arrayUnique(values.sort(function (a, b) {\n return a - b;\n }));\n }\n\n return scale._cache.$bar;\n}\n\nfunction computeMinSampleSize(meta) {\n var scale = meta.iScale;\n var values = getAllScaleValues(scale, meta.type);\n var min = scale._length;\n var i, ilen, curr, prev;\n\n var updateMinAndPrev = function updateMinAndPrev() {\n if (curr === 32767 || curr === -32768) {\n return;\n }\n\n if (defined(prev)) {\n min = Math.min(min, Math.abs(curr - prev) || min);\n }\n\n prev = curr;\n };\n\n for (i = 0, ilen = values.length; i < ilen; ++i) {\n curr = scale.getPixelForValue(values[i]);\n updateMinAndPrev();\n }\n\n prev = undefined;\n\n for (i = 0, ilen = scale.ticks.length; i < ilen; ++i) {\n curr = scale.getPixelForTick(i);\n updateMinAndPrev();\n }\n\n return min;\n}\n\nfunction computeFitCategoryTraits(index, ruler, options, stackCount) {\n var thickness = options.barThickness;\n var size, ratio;\n\n if (isNullOrUndef(thickness)) {\n size = ruler.min * options.categoryPercentage;\n ratio = options.barPercentage;\n } else {\n size = thickness * stackCount;\n ratio = 1;\n }\n\n return {\n chunk: size / stackCount,\n ratio: ratio,\n start: ruler.pixels[index] - size / 2\n };\n}\n\nfunction computeFlexCategoryTraits(index, ruler, options, stackCount) {\n var pixels = ruler.pixels;\n var curr = pixels[index];\n var prev = index > 0 ? pixels[index - 1] : null;\n var next = index < pixels.length - 1 ? pixels[index + 1] : null;\n var percent = options.categoryPercentage;\n\n if (prev === null) {\n prev = curr - (next === null ? ruler.end - ruler.start : next - curr);\n }\n\n if (next === null) {\n next = curr + curr - prev;\n }\n\n var start = curr - (curr - Math.min(prev, next)) / 2 * percent;\n var size = Math.abs(next - prev) / 2 * percent;\n return {\n chunk: size / stackCount,\n ratio: options.barPercentage,\n start: start\n };\n}\n\nfunction parseFloatBar(entry, item, vScale, i) {\n var startValue = vScale.parse(entry[0], i);\n var endValue = vScale.parse(entry[1], i);\n var min = Math.min(startValue, endValue);\n var max = Math.max(startValue, endValue);\n var barStart = min;\n var barEnd = max;\n\n if (Math.abs(min) > Math.abs(max)) {\n barStart = max;\n barEnd = min;\n }\n\n item[vScale.axis] = barEnd;\n item._custom = {\n barStart: barStart,\n barEnd: barEnd,\n start: startValue,\n end: endValue,\n min: min,\n max: max\n };\n}\n\nfunction parseValue(entry, item, vScale, i) {\n if (isArray(entry)) {\n parseFloatBar(entry, item, vScale, i);\n } else {\n item[vScale.axis] = vScale.parse(entry, i);\n }\n\n return item;\n}\n\nfunction parseArrayOrPrimitive(meta, data, start, count) {\n var iScale = meta.iScale;\n var vScale = meta.vScale;\n var labels = iScale.getLabels();\n var singleScale = iScale === vScale;\n var parsed = [];\n var i, ilen, item, entry;\n\n for (i = start, ilen = start + count; i < ilen; ++i) {\n entry = data[i];\n item = {};\n item[iScale.axis] = singleScale || iScale.parse(labels[i], i);\n parsed.push(parseValue(entry, item, vScale, i));\n }\n\n return parsed;\n}\n\nfunction isFloatBar(custom) {\n return custom && custom.barStart !== undefined && custom.barEnd !== undefined;\n}\n\nfunction barSign(size, vScale, actualBase) {\n if (size !== 0) {\n return sign(size);\n }\n\n return (vScale.isHorizontal() ? 1 : -1) * (vScale.min >= actualBase ? 1 : -1);\n}\n\nfunction borderProps(properties) {\n var reverse, start, end, top, bottom;\n\n if (properties.horizontal) {\n reverse = properties.base > properties.x;\n start = 'left';\n end = 'right';\n } else {\n reverse = properties.base < properties.y;\n start = 'bottom';\n end = 'top';\n }\n\n if (reverse) {\n top = 'end';\n bottom = 'start';\n } else {\n top = 'start';\n bottom = 'end';\n }\n\n return {\n start: start,\n end: end,\n reverse: reverse,\n top: top,\n bottom: bottom\n };\n}\n\nfunction setBorderSkipped(properties, options, stack, index) {\n var edge = options.borderSkipped;\n var res = {};\n\n if (!edge) {\n properties.borderSkipped = res;\n return;\n }\n\n if (edge === true) {\n properties.borderSkipped = {\n top: true,\n right: true,\n bottom: true,\n left: true\n };\n return;\n }\n\n var _borderProps = borderProps(properties),\n start = _borderProps.start,\n end = _borderProps.end,\n reverse = _borderProps.reverse,\n top = _borderProps.top,\n bottom = _borderProps.bottom;\n\n if (edge === 'middle' && stack) {\n properties.enableBorderRadius = true;\n\n if ((stack._top || 0) === index) {\n edge = top;\n } else if ((stack._bottom || 0) === index) {\n edge = bottom;\n } else {\n res[parseEdge(bottom, start, end, reverse)] = true;\n edge = top;\n }\n }\n\n res[parseEdge(edge, start, end, reverse)] = true;\n properties.borderSkipped = res;\n}\n\nfunction parseEdge(edge, a, b, reverse) {\n if (reverse) {\n edge = swap(edge, a, b);\n edge = startEnd(edge, b, a);\n } else {\n edge = startEnd(edge, a, b);\n }\n\n return edge;\n}\n\nfunction swap(orig, v1, v2) {\n return orig === v1 ? v2 : orig === v2 ? v1 : orig;\n}\n\nfunction startEnd(v, start, end) {\n return v === 'start' ? start : v === 'end' ? end : v;\n}\n\nfunction setInflateAmount(properties, _ref, ratio) {\n var inflateAmount = _ref.inflateAmount;\n properties.inflateAmount = inflateAmount === 'auto' ? ratio === 1 ? 0.33 : 0 : inflateAmount;\n}\n\nvar BarController = /*#__PURE__*/function (_DatasetController) {\n _inherits(BarController, _DatasetController);\n\n var _super = _createSuper(BarController);\n\n function BarController() {\n _classCallCheck(this, BarController);\n\n return _super.apply(this, arguments);\n }\n\n _createClass(BarController, [{\n key: \"parsePrimitiveData\",\n value: function parsePrimitiveData(meta, data, start, count) {\n return parseArrayOrPrimitive(meta, data, start, count);\n }\n }, {\n key: \"parseArrayData\",\n value: function parseArrayData(meta, data, start, count) {\n return parseArrayOrPrimitive(meta, data, start, count);\n }\n }, {\n key: \"parseObjectData\",\n value: function parseObjectData(meta, data, start, count) {\n var iScale = meta.iScale,\n vScale = meta.vScale;\n var _this$_parsing2 = this._parsing,\n _this$_parsing2$xAxis = _this$_parsing2.xAxisKey,\n xAxisKey = _this$_parsing2$xAxis === void 0 ? 'x' : _this$_parsing2$xAxis,\n _this$_parsing2$yAxis = _this$_parsing2.yAxisKey,\n yAxisKey = _this$_parsing2$yAxis === void 0 ? 'y' : _this$_parsing2$yAxis;\n var iAxisKey = iScale.axis === 'x' ? xAxisKey : yAxisKey;\n var vAxisKey = vScale.axis === 'x' ? xAxisKey : yAxisKey;\n var parsed = [];\n var i, ilen, item, obj;\n\n for (i = start, ilen = start + count; i < ilen; ++i) {\n obj = data[i];\n item = {};\n item[iScale.axis] = iScale.parse(resolveObjectKey(obj, iAxisKey), i);\n parsed.push(parseValue(resolveObjectKey(obj, vAxisKey), item, vScale, i));\n }\n\n return parsed;\n }\n }, {\n key: \"updateRangeFromParsed\",\n value: function updateRangeFromParsed(range, scale, parsed, stack) {\n _get(_getPrototypeOf(BarController.prototype), \"updateRangeFromParsed\", this).call(this, range, scale, parsed, stack);\n\n var custom = parsed._custom;\n\n if (custom && scale === this._cachedMeta.vScale) {\n range.min = Math.min(range.min, custom.min);\n range.max = Math.max(range.max, custom.max);\n }\n }\n }, {\n key: \"getMaxOverflow\",\n value: function getMaxOverflow() {\n return 0;\n }\n }, {\n key: \"getLabelAndValue\",\n value: function getLabelAndValue(index) {\n var meta = this._cachedMeta;\n var iScale = meta.iScale,\n vScale = meta.vScale;\n var parsed = this.getParsed(index);\n var custom = parsed._custom;\n var value = isFloatBar(custom) ? '[' + custom.start + ', ' + custom.end + ']' : '' + vScale.getLabelForValue(parsed[vScale.axis]);\n return {\n label: '' + iScale.getLabelForValue(parsed[iScale.axis]),\n value: value\n };\n }\n }, {\n key: \"initialize\",\n value: function initialize() {\n this.enableOptionSharing = true;\n\n _get(_getPrototypeOf(BarController.prototype), \"initialize\", this).call(this);\n\n var meta = this._cachedMeta;\n meta.stack = this.getDataset().stack;\n }\n }, {\n key: \"update\",\n value: function update(mode) {\n var meta = this._cachedMeta;\n this.updateElements(meta.data, 0, meta.data.length, mode);\n }\n }, {\n key: \"updateElements\",\n value: function updateElements(bars, start, count, mode) {\n var reset = mode === 'reset';\n var index = this.index,\n vScale = this._cachedMeta.vScale;\n var base = vScale.getBasePixel();\n var horizontal = vScale.isHorizontal();\n\n var ruler = this._getRuler();\n\n var _this$_getSharedOptio = this._getSharedOptions(start, mode),\n sharedOptions = _this$_getSharedOptio.sharedOptions,\n includeOptions = _this$_getSharedOptio.includeOptions;\n\n for (var i = start; i < start + count; i++) {\n var parsed = this.getParsed(i);\n var vpixels = reset || isNullOrUndef(parsed[vScale.axis]) ? {\n base: base,\n head: base\n } : this._calculateBarValuePixels(i);\n\n var ipixels = this._calculateBarIndexPixels(i, ruler);\n\n var stack = (parsed._stacks || {})[vScale.axis];\n var properties = {\n horizontal: horizontal,\n base: vpixels.base,\n enableBorderRadius: !stack || isFloatBar(parsed._custom) || index === stack._top || index === stack._bottom,\n x: horizontal ? vpixels.head : ipixels.center,\n y: horizontal ? ipixels.center : vpixels.head,\n height: horizontal ? ipixels.size : Math.abs(vpixels.size),\n width: horizontal ? Math.abs(vpixels.size) : ipixels.size\n };\n\n if (includeOptions) {\n properties.options = sharedOptions || this.resolveDataElementOptions(i, bars[i].active ? 'active' : mode);\n }\n\n var options = properties.options || bars[i].options;\n setBorderSkipped(properties, options, stack, index);\n setInflateAmount(properties, options, ruler.ratio);\n this.updateElement(bars[i], i, properties, mode);\n }\n }\n }, {\n key: \"_getStacks\",\n value: function _getStacks(last, dataIndex) {\n var iScale = this._cachedMeta.iScale;\n var metasets = iScale.getMatchingVisibleMetas(this._type).filter(function (meta) {\n return meta.controller.options.grouped;\n });\n var stacked = iScale.options.stacked;\n var stacks = [];\n\n var skipNull = function skipNull(meta) {\n var parsed = meta.controller.getParsed(dataIndex);\n var val = parsed && parsed[meta.vScale.axis];\n\n if (isNullOrUndef(val) || isNaN(val)) {\n return true;\n }\n };\n\n var _iterator5 = _createForOfIteratorHelper(metasets),\n _step5;\n\n try {\n for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {\n var meta = _step5.value;\n\n if (dataIndex !== undefined && skipNull(meta)) {\n continue;\n }\n\n if (stacked === false || stacks.indexOf(meta.stack) === -1 || stacked === undefined && meta.stack === undefined) {\n stacks.push(meta.stack);\n }\n\n if (meta.index === last) {\n break;\n }\n }\n } catch (err) {\n _iterator5.e(err);\n } finally {\n _iterator5.f();\n }\n\n if (!stacks.length) {\n stacks.push(undefined);\n }\n\n return stacks;\n }\n }, {\n key: \"_getStackCount\",\n value: function _getStackCount(index) {\n return this._getStacks(undefined, index).length;\n }\n }, {\n key: \"_getStackIndex\",\n value: function _getStackIndex(datasetIndex, name, dataIndex) {\n var stacks = this._getStacks(datasetIndex, dataIndex);\n\n var index = name !== undefined ? stacks.indexOf(name) : -1;\n return index === -1 ? stacks.length - 1 : index;\n }\n }, {\n key: \"_getRuler\",\n value: function _getRuler() {\n var opts = this.options;\n var meta = this._cachedMeta;\n var iScale = meta.iScale;\n var pixels = [];\n var i, ilen;\n\n for (i = 0, ilen = meta.data.length; i < ilen; ++i) {\n pixels.push(iScale.getPixelForValue(this.getParsed(i)[iScale.axis], i));\n }\n\n var barThickness = opts.barThickness;\n var min = barThickness || computeMinSampleSize(meta);\n return {\n min: min,\n pixels: pixels,\n start: iScale._startPixel,\n end: iScale._endPixel,\n stackCount: this._getStackCount(),\n scale: iScale,\n grouped: opts.grouped,\n ratio: barThickness ? 1 : opts.categoryPercentage * opts.barPercentage\n };\n }\n }, {\n key: \"_calculateBarValuePixels\",\n value: function _calculateBarValuePixels(index) {\n var _this$_cachedMeta = this._cachedMeta,\n vScale = _this$_cachedMeta.vScale,\n _stacked = _this$_cachedMeta._stacked,\n _this$options = this.options,\n baseValue = _this$options.base,\n minBarLength = _this$options.minBarLength;\n var actualBase = baseValue || 0;\n var parsed = this.getParsed(index);\n var custom = parsed._custom;\n var floating = isFloatBar(custom);\n var value = parsed[vScale.axis];\n var start = 0;\n var length = _stacked ? this.applyStack(vScale, parsed, _stacked) : value;\n var head, size;\n\n if (length !== value) {\n start = length - value;\n length = value;\n }\n\n if (floating) {\n value = custom.barStart;\n length = custom.barEnd - custom.barStart;\n\n if (value !== 0 && sign(value) !== sign(custom.barEnd)) {\n start = 0;\n }\n\n start += value;\n }\n\n var startValue = !isNullOrUndef(baseValue) && !floating ? baseValue : start;\n var base = vScale.getPixelForValue(startValue);\n\n if (this.chart.getDataVisibility(index)) {\n head = vScale.getPixelForValue(start + length);\n } else {\n head = base;\n }\n\n size = head - base;\n\n if (Math.abs(size) < minBarLength) {\n size = barSign(size, vScale, actualBase) * minBarLength;\n\n if (value === actualBase) {\n base -= size / 2;\n }\n\n var startPixel = vScale.getPixelForDecimal(0);\n var endPixel = vScale.getPixelForDecimal(1);\n var min = Math.min(startPixel, endPixel);\n var max = Math.max(startPixel, endPixel);\n base = Math.max(Math.min(base, max), min);\n head = base + size;\n }\n\n if (base === vScale.getPixelForValue(actualBase)) {\n var halfGrid = sign(size) * vScale.getLineWidthForValue(actualBase) / 2;\n base += halfGrid;\n size -= halfGrid;\n }\n\n return {\n size: size,\n base: base,\n head: head,\n center: head + size / 2\n };\n }\n }, {\n key: \"_calculateBarIndexPixels\",\n value: function _calculateBarIndexPixels(index, ruler) {\n var scale = ruler.scale;\n var options = this.options;\n var skipNull = options.skipNull;\n var maxBarThickness = valueOrDefault(options.maxBarThickness, Infinity);\n var center, size;\n\n if (ruler.grouped) {\n var stackCount = skipNull ? this._getStackCount(index) : ruler.stackCount;\n var range = options.barThickness === 'flex' ? computeFlexCategoryTraits(index, ruler, options, stackCount) : computeFitCategoryTraits(index, ruler, options, stackCount);\n\n var stackIndex = this._getStackIndex(this.index, this._cachedMeta.stack, skipNull ? index : undefined);\n\n center = range.start + range.chunk * stackIndex + range.chunk / 2;\n size = Math.min(maxBarThickness, range.chunk * range.ratio);\n } else {\n center = scale.getPixelForValue(this.getParsed(index)[scale.axis], index);\n size = Math.min(maxBarThickness, ruler.min * ruler.ratio);\n }\n\n return {\n base: center - size / 2,\n head: center + size / 2,\n center: center,\n size: size\n };\n }\n }, {\n key: \"draw\",\n value: function draw() {\n var meta = this._cachedMeta;\n var vScale = meta.vScale;\n var rects = meta.data;\n var ilen = rects.length;\n var i = 0;\n\n for (; i < ilen; ++i) {\n if (this.getParsed(i)[vScale.axis] !== null) {\n rects[i].draw(this._ctx);\n }\n }\n }\n }]);\n\n return BarController;\n}(DatasetController);\n\nBarController.id = 'bar';\nBarController.defaults = {\n datasetElementType: false,\n dataElementType: 'bar',\n categoryPercentage: 0.8,\n barPercentage: 0.9,\n grouped: true,\n animations: {\n numbers: {\n type: 'number',\n properties: ['x', 'y', 'base', 'width', 'height']\n }\n }\n};\nBarController.overrides = {\n scales: {\n _index_: {\n type: 'category',\n offset: true,\n grid: {\n offset: true\n }\n },\n _value_: {\n type: 'linear',\n beginAtZero: true\n }\n }\n};\n\nvar BubbleController = /*#__PURE__*/function (_DatasetController2) {\n _inherits(BubbleController, _DatasetController2);\n\n var _super2 = _createSuper(BubbleController);\n\n function BubbleController() {\n _classCallCheck(this, BubbleController);\n\n return _super2.apply(this, arguments);\n }\n\n _createClass(BubbleController, [{\n key: \"initialize\",\n value: function initialize() {\n this.enableOptionSharing = true;\n\n _get(_getPrototypeOf(BubbleController.prototype), \"initialize\", this).call(this);\n }\n }, {\n key: \"parsePrimitiveData\",\n value: function parsePrimitiveData(meta, data, start, count) {\n var parsed = _get(_getPrototypeOf(BubbleController.prototype), \"parsePrimitiveData\", this).call(this, meta, data, start, count);\n\n for (var i = 0; i < parsed.length; i++) {\n parsed[i]._custom = this.resolveDataElementOptions(i + start).radius;\n }\n\n return parsed;\n }\n }, {\n key: \"parseArrayData\",\n value: function parseArrayData(meta, data, start, count) {\n var parsed = _get(_getPrototypeOf(BubbleController.prototype), \"parseArrayData\", this).call(this, meta, data, start, count);\n\n for (var i = 0; i < parsed.length; i++) {\n var item = data[start + i];\n parsed[i]._custom = valueOrDefault(item[2], this.resolveDataElementOptions(i + start).radius);\n }\n\n return parsed;\n }\n }, {\n key: \"parseObjectData\",\n value: function parseObjectData(meta, data, start, count) {\n var parsed = _get(_getPrototypeOf(BubbleController.prototype), \"parseObjectData\", this).call(this, meta, data, start, count);\n\n for (var i = 0; i < parsed.length; i++) {\n var item = data[start + i];\n parsed[i]._custom = valueOrDefault(item && item.r && +item.r, this.resolveDataElementOptions(i + start).radius);\n }\n\n return parsed;\n }\n }, {\n key: \"getMaxOverflow\",\n value: function getMaxOverflow() {\n var data = this._cachedMeta.data;\n var max = 0;\n\n for (var i = data.length - 1; i >= 0; --i) {\n max = Math.max(max, data[i].size(this.resolveDataElementOptions(i)) / 2);\n }\n\n return max > 0 && max;\n }\n }, {\n key: \"getLabelAndValue\",\n value: function getLabelAndValue(index) {\n var meta = this._cachedMeta;\n var xScale = meta.xScale,\n yScale = meta.yScale;\n var parsed = this.getParsed(index);\n var x = xScale.getLabelForValue(parsed.x);\n var y = yScale.getLabelForValue(parsed.y);\n var r = parsed._custom;\n return {\n label: meta.label,\n value: '(' + x + ', ' + y + (r ? ', ' + r : '') + ')'\n };\n }\n }, {\n key: \"update\",\n value: function update(mode) {\n var points = this._cachedMeta.data;\n this.updateElements(points, 0, points.length, mode);\n }\n }, {\n key: \"updateElements\",\n value: function updateElements(points, start, count, mode) {\n var reset = mode === 'reset';\n var _this$_cachedMeta2 = this._cachedMeta,\n iScale = _this$_cachedMeta2.iScale,\n vScale = _this$_cachedMeta2.vScale;\n\n var _this$_getSharedOptio2 = this._getSharedOptions(start, mode),\n sharedOptions = _this$_getSharedOptio2.sharedOptions,\n includeOptions = _this$_getSharedOptio2.includeOptions;\n\n var iAxis = iScale.axis;\n var vAxis = vScale.axis;\n\n for (var i = start; i < start + count; i++) {\n var point = points[i];\n var parsed = !reset && this.getParsed(i);\n var properties = {};\n var iPixel = properties[iAxis] = reset ? iScale.getPixelForDecimal(0.5) : iScale.getPixelForValue(parsed[iAxis]);\n var vPixel = properties[vAxis] = reset ? vScale.getBasePixel() : vScale.getPixelForValue(parsed[vAxis]);\n properties.skip = isNaN(iPixel) || isNaN(vPixel);\n\n if (includeOptions) {\n properties.options = sharedOptions || this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n\n if (reset) {\n properties.options.radius = 0;\n }\n }\n\n this.updateElement(point, i, properties, mode);\n }\n }\n }, {\n key: \"resolveDataElementOptions\",\n value: function resolveDataElementOptions(index, mode) {\n var parsed = this.getParsed(index);\n\n var values = _get(_getPrototypeOf(BubbleController.prototype), \"resolveDataElementOptions\", this).call(this, index, mode);\n\n if (values.$shared) {\n values = Object.assign({}, values, {\n $shared: false\n });\n }\n\n var radius = values.radius;\n\n if (mode !== 'active') {\n values.radius = 0;\n }\n\n values.radius += valueOrDefault(parsed && parsed._custom, radius);\n return values;\n }\n }]);\n\n return BubbleController;\n}(DatasetController);\n\nBubbleController.id = 'bubble';\nBubbleController.defaults = {\n datasetElementType: false,\n dataElementType: 'point',\n animations: {\n numbers: {\n type: 'number',\n properties: ['x', 'y', 'borderWidth', 'radius']\n }\n }\n};\nBubbleController.overrides = {\n scales: {\n x: {\n type: 'linear'\n },\n y: {\n type: 'linear'\n }\n },\n plugins: {\n tooltip: {\n callbacks: {\n title: function title() {\n return '';\n }\n }\n }\n }\n};\n\nfunction getRatioAndOffset(rotation, circumference, cutout) {\n var ratioX = 1;\n var ratioY = 1;\n var offsetX = 0;\n var offsetY = 0;\n\n if (circumference < TAU) {\n var startAngle = rotation;\n var endAngle = startAngle + circumference;\n var startX = Math.cos(startAngle);\n var startY = Math.sin(startAngle);\n var endX = Math.cos(endAngle);\n var endY = Math.sin(endAngle);\n\n var calcMax = function calcMax(angle, a, b) {\n return _angleBetween(angle, startAngle, endAngle, true) ? 1 : Math.max(a, a * cutout, b, b * cutout);\n };\n\n var calcMin = function calcMin(angle, a, b) {\n return _angleBetween(angle, startAngle, endAngle, true) ? -1 : Math.min(a, a * cutout, b, b * cutout);\n };\n\n var maxX = calcMax(0, startX, endX);\n var maxY = calcMax(HALF_PI, startY, endY);\n var minX = calcMin(PI, startX, endX);\n var minY = calcMin(PI + HALF_PI, startY, endY);\n ratioX = (maxX - minX) / 2;\n ratioY = (maxY - minY) / 2;\n offsetX = -(maxX + minX) / 2;\n offsetY = -(maxY + minY) / 2;\n }\n\n return {\n ratioX: ratioX,\n ratioY: ratioY,\n offsetX: offsetX,\n offsetY: offsetY\n };\n}\n\nvar DoughnutController = /*#__PURE__*/function (_DatasetController3) {\n _inherits(DoughnutController, _DatasetController3);\n\n var _super3 = _createSuper(DoughnutController);\n\n function DoughnutController(chart, datasetIndex) {\n var _this4;\n\n _classCallCheck(this, DoughnutController);\n\n _this4 = _super3.call(this, chart, datasetIndex);\n _this4.enableOptionSharing = true;\n _this4.innerRadius = undefined;\n _this4.outerRadius = undefined;\n _this4.offsetX = undefined;\n _this4.offsetY = undefined;\n return _this4;\n }\n\n _createClass(DoughnutController, [{\n key: \"linkScales\",\n value: function linkScales() {}\n }, {\n key: \"parse\",\n value: function parse(start, count) {\n var data = this.getDataset().data;\n var meta = this._cachedMeta;\n\n if (this._parsing === false) {\n meta._parsed = data;\n } else {\n var getter = function getter(i) {\n return +data[i];\n };\n\n if (isObject(data[start])) {\n var _this$_parsing$key = this._parsing.key,\n key = _this$_parsing$key === void 0 ? 'value' : _this$_parsing$key;\n\n getter = function getter(i) {\n return +resolveObjectKey(data[i], key);\n };\n }\n\n var i, ilen;\n\n for (i = start, ilen = start + count; i < ilen; ++i) {\n meta._parsed[i] = getter(i);\n }\n }\n }\n }, {\n key: \"_getRotation\",\n value: function _getRotation() {\n return toRadians(this.options.rotation - 90);\n }\n }, {\n key: \"_getCircumference\",\n value: function _getCircumference() {\n return toRadians(this.options.circumference);\n }\n }, {\n key: \"_getRotationExtents\",\n value: function _getRotationExtents() {\n var min = TAU;\n var max = -TAU;\n\n for (var i = 0; i < this.chart.data.datasets.length; ++i) {\n if (this.chart.isDatasetVisible(i)) {\n var controller = this.chart.getDatasetMeta(i).controller;\n\n var rotation = controller._getRotation();\n\n var circumference = controller._getCircumference();\n\n min = Math.min(min, rotation);\n max = Math.max(max, rotation + circumference);\n }\n }\n\n return {\n rotation: min,\n circumference: max - min\n };\n }\n }, {\n key: \"update\",\n value: function update(mode) {\n var chart = this.chart;\n var chartArea = chart.chartArea;\n var meta = this._cachedMeta;\n var arcs = meta.data;\n var spacing = this.getMaxBorderWidth() + this.getMaxOffset(arcs) + this.options.spacing;\n var maxSize = Math.max((Math.min(chartArea.width, chartArea.height) - spacing) / 2, 0);\n var cutout = Math.min(toPercentage(this.options.cutout, maxSize), 1);\n\n var chartWeight = this._getRingWeight(this.index);\n\n var _this$_getRotationExt = this._getRotationExtents(),\n circumference = _this$_getRotationExt.circumference,\n rotation = _this$_getRotationExt.rotation;\n\n var _getRatioAndOffset = getRatioAndOffset(rotation, circumference, cutout),\n ratioX = _getRatioAndOffset.ratioX,\n ratioY = _getRatioAndOffset.ratioY,\n offsetX = _getRatioAndOffset.offsetX,\n offsetY = _getRatioAndOffset.offsetY;\n\n var maxWidth = (chartArea.width - spacing) / ratioX;\n var maxHeight = (chartArea.height - spacing) / ratioY;\n var maxRadius = Math.max(Math.min(maxWidth, maxHeight) / 2, 0);\n var outerRadius = toDimension(this.options.radius, maxRadius);\n var innerRadius = Math.max(outerRadius * cutout, 0);\n\n var radiusLength = (outerRadius - innerRadius) / this._getVisibleDatasetWeightTotal();\n\n this.offsetX = offsetX * outerRadius;\n this.offsetY = offsetY * outerRadius;\n meta.total = this.calculateTotal();\n this.outerRadius = outerRadius - radiusLength * this._getRingWeightOffset(this.index);\n this.innerRadius = Math.max(this.outerRadius - radiusLength * chartWeight, 0);\n this.updateElements(arcs, 0, arcs.length, mode);\n }\n }, {\n key: \"_circumference\",\n value: function _circumference(i, reset) {\n var opts = this.options;\n var meta = this._cachedMeta;\n\n var circumference = this._getCircumference();\n\n if (reset && opts.animation.animateRotate || !this.chart.getDataVisibility(i) || meta._parsed[i] === null || meta.data[i].hidden) {\n return 0;\n }\n\n return this.calculateCircumference(meta._parsed[i] * circumference / TAU);\n }\n }, {\n key: \"updateElements\",\n value: function updateElements(arcs, start, count, mode) {\n var reset = mode === 'reset';\n var chart = this.chart;\n var chartArea = chart.chartArea;\n var opts = chart.options;\n var animationOpts = opts.animation;\n var centerX = (chartArea.left + chartArea.right) / 2;\n var centerY = (chartArea.top + chartArea.bottom) / 2;\n var animateScale = reset && animationOpts.animateScale;\n var innerRadius = animateScale ? 0 : this.innerRadius;\n var outerRadius = animateScale ? 0 : this.outerRadius;\n\n var _this$_getSharedOptio3 = this._getSharedOptions(start, mode),\n sharedOptions = _this$_getSharedOptio3.sharedOptions,\n includeOptions = _this$_getSharedOptio3.includeOptions;\n\n var startAngle = this._getRotation();\n\n var i;\n\n for (i = 0; i < start; ++i) {\n startAngle += this._circumference(i, reset);\n }\n\n for (i = start; i < start + count; ++i) {\n var circumference = this._circumference(i, reset);\n\n var arc = arcs[i];\n var properties = {\n x: centerX + this.offsetX,\n y: centerY + this.offsetY,\n startAngle: startAngle,\n endAngle: startAngle + circumference,\n circumference: circumference,\n outerRadius: outerRadius,\n innerRadius: innerRadius\n };\n\n if (includeOptions) {\n properties.options = sharedOptions || this.resolveDataElementOptions(i, arc.active ? 'active' : mode);\n }\n\n startAngle += circumference;\n this.updateElement(arc, i, properties, mode);\n }\n }\n }, {\n key: \"calculateTotal\",\n value: function calculateTotal() {\n var meta = this._cachedMeta;\n var metaData = meta.data;\n var total = 0;\n var i;\n\n for (i = 0; i < metaData.length; i++) {\n var value = meta._parsed[i];\n\n if (value !== null && !isNaN(value) && this.chart.getDataVisibility(i) && !metaData[i].hidden) {\n total += Math.abs(value);\n }\n }\n\n return total;\n }\n }, {\n key: \"calculateCircumference\",\n value: function calculateCircumference(value) {\n var total = this._cachedMeta.total;\n\n if (total > 0 && !isNaN(value)) {\n return TAU * (Math.abs(value) / total);\n }\n\n return 0;\n }\n }, {\n key: \"getLabelAndValue\",\n value: function getLabelAndValue(index) {\n var meta = this._cachedMeta;\n var chart = this.chart;\n var labels = chart.data.labels || [];\n var value = formatNumber(meta._parsed[index], chart.options.locale);\n return {\n label: labels[index] || '',\n value: value\n };\n }\n }, {\n key: \"getMaxBorderWidth\",\n value: function getMaxBorderWidth(arcs) {\n var max = 0;\n var chart = this.chart;\n var i, ilen, meta, controller, options;\n\n if (!arcs) {\n for (i = 0, ilen = chart.data.datasets.length; i < ilen; ++i) {\n if (chart.isDatasetVisible(i)) {\n meta = chart.getDatasetMeta(i);\n arcs = meta.data;\n controller = meta.controller;\n break;\n }\n }\n }\n\n if (!arcs) {\n return 0;\n }\n\n for (i = 0, ilen = arcs.length; i < ilen; ++i) {\n options = controller.resolveDataElementOptions(i);\n\n if (options.borderAlign !== 'inner') {\n max = Math.max(max, options.borderWidth || 0, options.hoverBorderWidth || 0);\n }\n }\n\n return max;\n }\n }, {\n key: \"getMaxOffset\",\n value: function getMaxOffset(arcs) {\n var max = 0;\n\n for (var i = 0, ilen = arcs.length; i < ilen; ++i) {\n var options = this.resolveDataElementOptions(i);\n max = Math.max(max, options.offset || 0, options.hoverOffset || 0);\n }\n\n return max;\n }\n }, {\n key: \"_getRingWeightOffset\",\n value: function _getRingWeightOffset(datasetIndex) {\n var ringWeightOffset = 0;\n\n for (var i = 0; i < datasetIndex; ++i) {\n if (this.chart.isDatasetVisible(i)) {\n ringWeightOffset += this._getRingWeight(i);\n }\n }\n\n return ringWeightOffset;\n }\n }, {\n key: \"_getRingWeight\",\n value: function _getRingWeight(datasetIndex) {\n return Math.max(valueOrDefault(this.chart.data.datasets[datasetIndex].weight, 1), 0);\n }\n }, {\n key: \"_getVisibleDatasetWeightTotal\",\n value: function _getVisibleDatasetWeightTotal() {\n return this._getRingWeightOffset(this.chart.data.datasets.length) || 1;\n }\n }]);\n\n return DoughnutController;\n}(DatasetController);\n\nDoughnutController.id = 'doughnut';\nDoughnutController.defaults = {\n datasetElementType: false,\n dataElementType: 'arc',\n animation: {\n animateRotate: true,\n animateScale: false\n },\n animations: {\n numbers: {\n type: 'number',\n properties: ['circumference', 'endAngle', 'innerRadius', 'outerRadius', 'startAngle', 'x', 'y', 'offset', 'borderWidth', 'spacing']\n }\n },\n cutout: '50%',\n rotation: 0,\n circumference: 360,\n radius: '100%',\n spacing: 0,\n indexAxis: 'r'\n};\nDoughnutController.descriptors = {\n _scriptable: function _scriptable(name) {\n return name !== 'spacing';\n },\n _indexable: function _indexable(name) {\n return name !== 'spacing';\n }\n};\nDoughnutController.overrides = {\n aspectRatio: 1,\n plugins: {\n legend: {\n labels: {\n generateLabels: function generateLabels(chart) {\n var data = chart.data;\n\n if (data.labels.length && data.datasets.length) {\n var pointStyle = chart.legend.options.labels.pointStyle;\n return data.labels.map(function (label, i) {\n var meta = chart.getDatasetMeta(0);\n var style = meta.controller.getStyle(i);\n return {\n text: label,\n fillStyle: style.backgroundColor,\n strokeStyle: style.borderColor,\n lineWidth: style.borderWidth,\n pointStyle: pointStyle,\n hidden: !chart.getDataVisibility(i),\n index: i\n };\n });\n }\n\n return [];\n }\n },\n onClick: function onClick(e, legendItem, legend) {\n legend.chart.toggleDataVisibility(legendItem.index);\n legend.chart.update();\n }\n },\n tooltip: {\n callbacks: {\n title: function title() {\n return '';\n },\n label: function label(tooltipItem) {\n var dataLabel = tooltipItem.label;\n var value = ': ' + tooltipItem.formattedValue;\n\n if (isArray(dataLabel)) {\n dataLabel = dataLabel.slice();\n dataLabel[0] += value;\n } else {\n dataLabel += value;\n }\n\n return dataLabel;\n }\n }\n }\n }\n};\n\nvar LineController = /*#__PURE__*/function (_DatasetController4) {\n _inherits(LineController, _DatasetController4);\n\n var _super4 = _createSuper(LineController);\n\n function LineController() {\n _classCallCheck(this, LineController);\n\n return _super4.apply(this, arguments);\n }\n\n _createClass(LineController, [{\n key: \"initialize\",\n value: function initialize() {\n this.enableOptionSharing = true;\n this.supportsDecimation = true;\n\n _get(_getPrototypeOf(LineController.prototype), \"initialize\", this).call(this);\n }\n }, {\n key: \"update\",\n value: function update(mode) {\n var meta = this._cachedMeta;\n var line = meta.dataset,\n _meta$data = meta.data,\n points = _meta$data === void 0 ? [] : _meta$data,\n _dataset = meta._dataset;\n var animationsDisabled = this.chart._animationsDisabled;\n\n var _getStartAndCountOfVi = _getStartAndCountOfVisiblePoints(meta, points, animationsDisabled),\n start = _getStartAndCountOfVi.start,\n count = _getStartAndCountOfVi.count;\n\n this._drawStart = start;\n this._drawCount = count;\n\n if (_scaleRangesChanged(meta)) {\n start = 0;\n count = points.length;\n }\n\n line._chart = this.chart;\n line._datasetIndex = this.index;\n line._decimated = !!_dataset._decimated;\n line.points = points;\n var options = this.resolveDatasetElementOptions(mode);\n\n if (!this.options.showLine) {\n options.borderWidth = 0;\n }\n\n options.segment = this.options.segment;\n this.updateElement(line, undefined, {\n animated: !animationsDisabled,\n options: options\n }, mode);\n this.updateElements(points, start, count, mode);\n }\n }, {\n key: \"updateElements\",\n value: function updateElements(points, start, count, mode) {\n var reset = mode === 'reset';\n var _this$_cachedMeta3 = this._cachedMeta,\n iScale = _this$_cachedMeta3.iScale,\n vScale = _this$_cachedMeta3.vScale,\n _stacked = _this$_cachedMeta3._stacked,\n _dataset = _this$_cachedMeta3._dataset;\n\n var _this$_getSharedOptio4 = this._getSharedOptions(start, mode),\n sharedOptions = _this$_getSharedOptio4.sharedOptions,\n includeOptions = _this$_getSharedOptio4.includeOptions;\n\n var iAxis = iScale.axis;\n var vAxis = vScale.axis;\n var _this$options2 = this.options,\n spanGaps = _this$options2.spanGaps,\n segment = _this$options2.segment;\n var maxGapLength = isNumber(spanGaps) ? spanGaps : Number.POSITIVE_INFINITY;\n var directUpdate = this.chart._animationsDisabled || reset || mode === 'none';\n var prevParsed = start > 0 && this.getParsed(start - 1);\n\n for (var i = start; i < start + count; ++i) {\n var point = points[i];\n var parsed = this.getParsed(i);\n var properties = directUpdate ? point : {};\n var nullData = isNullOrUndef(parsed[vAxis]);\n var iPixel = properties[iAxis] = iScale.getPixelForValue(parsed[iAxis], i);\n var vPixel = properties[vAxis] = reset || nullData ? vScale.getBasePixel() : vScale.getPixelForValue(_stacked ? this.applyStack(vScale, parsed, _stacked) : parsed[vAxis], i);\n properties.skip = isNaN(iPixel) || isNaN(vPixel) || nullData;\n properties.stop = i > 0 && Math.abs(parsed[iAxis] - prevParsed[iAxis]) > maxGapLength;\n\n if (segment) {\n properties.parsed = parsed;\n properties.raw = _dataset.data[i];\n }\n\n if (includeOptions) {\n properties.options = sharedOptions || this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n }\n\n if (!directUpdate) {\n this.updateElement(point, i, properties, mode);\n }\n\n prevParsed = parsed;\n }\n }\n }, {\n key: \"getMaxOverflow\",\n value: function getMaxOverflow() {\n var meta = this._cachedMeta;\n var dataset = meta.dataset;\n var border = dataset.options && dataset.options.borderWidth || 0;\n var data = meta.data || [];\n\n if (!data.length) {\n return border;\n }\n\n var firstPoint = data[0].size(this.resolveDataElementOptions(0));\n var lastPoint = data[data.length - 1].size(this.resolveDataElementOptions(data.length - 1));\n return Math.max(border, firstPoint, lastPoint) / 2;\n }\n }, {\n key: \"draw\",\n value: function draw() {\n var meta = this._cachedMeta;\n meta.dataset.updateControlPoints(this.chart.chartArea, meta.iScale.axis);\n\n _get(_getPrototypeOf(LineController.prototype), \"draw\", this).call(this);\n }\n }]);\n\n return LineController;\n}(DatasetController);\n\nLineController.id = 'line';\nLineController.defaults = {\n datasetElementType: 'line',\n dataElementType: 'point',\n showLine: true,\n spanGaps: false\n};\nLineController.overrides = {\n scales: {\n _index_: {\n type: 'category'\n },\n _value_: {\n type: 'linear'\n }\n }\n};\n\nvar PolarAreaController = /*#__PURE__*/function (_DatasetController5) {\n _inherits(PolarAreaController, _DatasetController5);\n\n var _super5 = _createSuper(PolarAreaController);\n\n function PolarAreaController(chart, datasetIndex) {\n var _this5;\n\n _classCallCheck(this, PolarAreaController);\n\n _this5 = _super5.call(this, chart, datasetIndex);\n _this5.innerRadius = undefined;\n _this5.outerRadius = undefined;\n return _this5;\n }\n\n _createClass(PolarAreaController, [{\n key: \"getLabelAndValue\",\n value: function getLabelAndValue(index) {\n var meta = this._cachedMeta;\n var chart = this.chart;\n var labels = chart.data.labels || [];\n var value = formatNumber(meta._parsed[index].r, chart.options.locale);\n return {\n label: labels[index] || '',\n value: value\n };\n }\n }, {\n key: \"parseObjectData\",\n value: function parseObjectData(meta, data, start, count) {\n return _parseObjectDataRadialScale.bind(this)(meta, data, start, count);\n }\n }, {\n key: \"update\",\n value: function update(mode) {\n var arcs = this._cachedMeta.data;\n\n this._updateRadius();\n\n this.updateElements(arcs, 0, arcs.length, mode);\n }\n }, {\n key: \"getMinMax\",\n value: function getMinMax() {\n var _this6 = this;\n\n var meta = this._cachedMeta;\n var range = {\n min: Number.POSITIVE_INFINITY,\n max: Number.NEGATIVE_INFINITY\n };\n meta.data.forEach(function (element, index) {\n var parsed = _this6.getParsed(index).r;\n\n if (!isNaN(parsed) && _this6.chart.getDataVisibility(index)) {\n if (parsed < range.min) {\n range.min = parsed;\n }\n\n if (parsed > range.max) {\n range.max = parsed;\n }\n }\n });\n return range;\n }\n }, {\n key: \"_updateRadius\",\n value: function _updateRadius() {\n var chart = this.chart;\n var chartArea = chart.chartArea;\n var opts = chart.options;\n var minSize = Math.min(chartArea.right - chartArea.left, chartArea.bottom - chartArea.top);\n var outerRadius = Math.max(minSize / 2, 0);\n var innerRadius = Math.max(opts.cutoutPercentage ? outerRadius / 100 * opts.cutoutPercentage : 1, 0);\n var radiusLength = (outerRadius - innerRadius) / chart.getVisibleDatasetCount();\n this.outerRadius = outerRadius - radiusLength * this.index;\n this.innerRadius = this.outerRadius - radiusLength;\n }\n }, {\n key: \"updateElements\",\n value: function updateElements(arcs, start, count, mode) {\n var reset = mode === 'reset';\n var chart = this.chart;\n var opts = chart.options;\n var animationOpts = opts.animation;\n var scale = this._cachedMeta.rScale;\n var centerX = scale.xCenter;\n var centerY = scale.yCenter;\n var datasetStartAngle = scale.getIndexAngle(0) - 0.5 * PI;\n var angle = datasetStartAngle;\n var i;\n var defaultAngle = 360 / this.countVisibleElements();\n\n for (i = 0; i < start; ++i) {\n angle += this._computeAngle(i, mode, defaultAngle);\n }\n\n for (i = start; i < start + count; i++) {\n var arc = arcs[i];\n var startAngle = angle;\n\n var endAngle = angle + this._computeAngle(i, mode, defaultAngle);\n\n var outerRadius = chart.getDataVisibility(i) ? scale.getDistanceFromCenterForValue(this.getParsed(i).r) : 0;\n angle = endAngle;\n\n if (reset) {\n if (animationOpts.animateScale) {\n outerRadius = 0;\n }\n\n if (animationOpts.animateRotate) {\n startAngle = endAngle = datasetStartAngle;\n }\n }\n\n var properties = {\n x: centerX,\n y: centerY,\n innerRadius: 0,\n outerRadius: outerRadius,\n startAngle: startAngle,\n endAngle: endAngle,\n options: this.resolveDataElementOptions(i, arc.active ? 'active' : mode)\n };\n this.updateElement(arc, i, properties, mode);\n }\n }\n }, {\n key: \"countVisibleElements\",\n value: function countVisibleElements() {\n var _this7 = this;\n\n var meta = this._cachedMeta;\n var count = 0;\n meta.data.forEach(function (element, index) {\n if (!isNaN(_this7.getParsed(index).r) && _this7.chart.getDataVisibility(index)) {\n count++;\n }\n });\n return count;\n }\n }, {\n key: \"_computeAngle\",\n value: function _computeAngle(index, mode, defaultAngle) {\n return this.chart.getDataVisibility(index) ? toRadians(this.resolveDataElementOptions(index, mode).angle || defaultAngle) : 0;\n }\n }]);\n\n return PolarAreaController;\n}(DatasetController);\n\nPolarAreaController.id = 'polarArea';\nPolarAreaController.defaults = {\n dataElementType: 'arc',\n animation: {\n animateRotate: true,\n animateScale: true\n },\n animations: {\n numbers: {\n type: 'number',\n properties: ['x', 'y', 'startAngle', 'endAngle', 'innerRadius', 'outerRadius']\n }\n },\n indexAxis: 'r',\n startAngle: 0\n};\nPolarAreaController.overrides = {\n aspectRatio: 1,\n plugins: {\n legend: {\n labels: {\n generateLabels: function generateLabels(chart) {\n var data = chart.data;\n\n if (data.labels.length && data.datasets.length) {\n var pointStyle = chart.legend.options.labels.pointStyle;\n return data.labels.map(function (label, i) {\n var meta = chart.getDatasetMeta(0);\n var style = meta.controller.getStyle(i);\n return {\n text: label,\n fillStyle: style.backgroundColor,\n strokeStyle: style.borderColor,\n lineWidth: style.borderWidth,\n pointStyle: pointStyle,\n hidden: !chart.getDataVisibility(i),\n index: i\n };\n });\n }\n\n return [];\n }\n },\n onClick: function onClick(e, legendItem, legend) {\n legend.chart.toggleDataVisibility(legendItem.index);\n legend.chart.update();\n }\n },\n tooltip: {\n callbacks: {\n title: function title() {\n return '';\n },\n label: function label(context) {\n return context.chart.data.labels[context.dataIndex] + ': ' + context.formattedValue;\n }\n }\n }\n },\n scales: {\n r: {\n type: 'radialLinear',\n angleLines: {\n display: false\n },\n beginAtZero: true,\n grid: {\n circular: true\n },\n pointLabels: {\n display: false\n },\n startAngle: 0\n }\n }\n};\n\nvar PieController = /*#__PURE__*/function (_DoughnutController) {\n _inherits(PieController, _DoughnutController);\n\n var _super6 = _createSuper(PieController);\n\n function PieController() {\n _classCallCheck(this, PieController);\n\n return _super6.apply(this, arguments);\n }\n\n return PieController;\n}(DoughnutController);\n\nPieController.id = 'pie';\nPieController.defaults = {\n cutout: 0,\n rotation: 0,\n circumference: 360,\n radius: '100%'\n};\n\nvar RadarController = /*#__PURE__*/function (_DatasetController6) {\n _inherits(RadarController, _DatasetController6);\n\n var _super7 = _createSuper(RadarController);\n\n function RadarController() {\n _classCallCheck(this, RadarController);\n\n return _super7.apply(this, arguments);\n }\n\n _createClass(RadarController, [{\n key: \"getLabelAndValue\",\n value: function getLabelAndValue(index) {\n var vScale = this._cachedMeta.vScale;\n var parsed = this.getParsed(index);\n return {\n label: vScale.getLabels()[index],\n value: '' + vScale.getLabelForValue(parsed[vScale.axis])\n };\n }\n }, {\n key: \"parseObjectData\",\n value: function parseObjectData(meta, data, start, count) {\n return _parseObjectDataRadialScale.bind(this)(meta, data, start, count);\n }\n }, {\n key: \"update\",\n value: function update(mode) {\n var meta = this._cachedMeta;\n var line = meta.dataset;\n var points = meta.data || [];\n var labels = meta.iScale.getLabels();\n line.points = points;\n\n if (mode !== 'resize') {\n var options = this.resolveDatasetElementOptions(mode);\n\n if (!this.options.showLine) {\n options.borderWidth = 0;\n }\n\n var properties = {\n _loop: true,\n _fullLoop: labels.length === points.length,\n options: options\n };\n this.updateElement(line, undefined, properties, mode);\n }\n\n this.updateElements(points, 0, points.length, mode);\n }\n }, {\n key: \"updateElements\",\n value: function updateElements(points, start, count, mode) {\n var scale = this._cachedMeta.rScale;\n var reset = mode === 'reset';\n\n for (var i = start; i < start + count; i++) {\n var point = points[i];\n var options = this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n var pointPosition = scale.getPointPositionForValue(i, this.getParsed(i).r);\n var x = reset ? scale.xCenter : pointPosition.x;\n var y = reset ? scale.yCenter : pointPosition.y;\n var properties = {\n x: x,\n y: y,\n angle: pointPosition.angle,\n skip: isNaN(x) || isNaN(y),\n options: options\n };\n this.updateElement(point, i, properties, mode);\n }\n }\n }]);\n\n return RadarController;\n}(DatasetController);\n\nRadarController.id = 'radar';\nRadarController.defaults = {\n datasetElementType: 'line',\n dataElementType: 'point',\n indexAxis: 'r',\n showLine: true,\n elements: {\n line: {\n fill: 'start'\n }\n }\n};\nRadarController.overrides = {\n aspectRatio: 1,\n scales: {\n r: {\n type: 'radialLinear'\n }\n }\n};\n\nvar Element = /*#__PURE__*/function () {\n function Element() {\n _classCallCheck(this, Element);\n\n this.x = undefined;\n this.y = undefined;\n this.active = false;\n this.options = undefined;\n this.$animations = undefined;\n }\n\n _createClass(Element, [{\n key: \"tooltipPosition\",\n value: function tooltipPosition(useFinalPosition) {\n var _this$getProps = this.getProps(['x', 'y'], useFinalPosition),\n x = _this$getProps.x,\n y = _this$getProps.y;\n\n return {\n x: x,\n y: y\n };\n }\n }, {\n key: \"hasValue\",\n value: function hasValue() {\n return isNumber(this.x) && isNumber(this.y);\n }\n }, {\n key: \"getProps\",\n value: function getProps(props, final) {\n var _this8 = this;\n\n var anims = this.$animations;\n\n if (!final || !anims) {\n return this;\n }\n\n var ret = {};\n props.forEach(function (prop) {\n ret[prop] = anims[prop] && anims[prop].active() ? anims[prop]._to : _this8[prop];\n });\n return ret;\n }\n }]);\n\n return Element;\n}();\n\nElement.defaults = {};\nElement.defaultRoutes = undefined;\nvar formatters = {\n values: function values(value) {\n return isArray(value) ? value : '' + value;\n },\n numeric: function numeric(tickValue, index, ticks) {\n if (tickValue === 0) {\n return '0';\n }\n\n var locale = this.chart.options.locale;\n var notation;\n var delta = tickValue;\n\n if (ticks.length > 1) {\n var maxTick = Math.max(Math.abs(ticks[0].value), Math.abs(ticks[ticks.length - 1].value));\n\n if (maxTick < 1e-4 || maxTick > 1e+15) {\n notation = 'scientific';\n }\n\n delta = calculateDelta(tickValue, ticks);\n }\n\n var logDelta = log10(Math.abs(delta));\n var numDecimal = Math.max(Math.min(-1 * Math.floor(logDelta), 20), 0);\n var options = {\n notation: notation,\n minimumFractionDigits: numDecimal,\n maximumFractionDigits: numDecimal\n };\n Object.assign(options, this.options.ticks.format);\n return formatNumber(tickValue, locale, options);\n },\n logarithmic: function logarithmic(tickValue, index, ticks) {\n if (tickValue === 0) {\n return '0';\n }\n\n var remain = tickValue / Math.pow(10, Math.floor(log10(tickValue)));\n\n if (remain === 1 || remain === 2 || remain === 5) {\n return formatters.numeric.call(this, tickValue, index, ticks);\n }\n\n return '';\n }\n};\n\nfunction calculateDelta(tickValue, ticks) {\n var delta = ticks.length > 3 ? ticks[2].value - ticks[1].value : ticks[1].value - ticks[0].value;\n\n if (Math.abs(delta) >= 1 && tickValue !== Math.floor(tickValue)) {\n delta = tickValue - Math.floor(tickValue);\n }\n\n return delta;\n}\n\nvar Ticks = {\n formatters: formatters\n};\ndefaults.set('scale', {\n display: true,\n offset: false,\n reverse: false,\n beginAtZero: false,\n bounds: 'ticks',\n grace: 0,\n grid: {\n display: true,\n lineWidth: 1,\n drawBorder: true,\n drawOnChartArea: true,\n drawTicks: true,\n tickLength: 8,\n tickWidth: function tickWidth(_ctx, options) {\n return options.lineWidth;\n },\n tickColor: function tickColor(_ctx, options) {\n return options.color;\n },\n offset: false,\n borderDash: [],\n borderDashOffset: 0.0,\n borderWidth: 1\n },\n title: {\n display: false,\n text: '',\n padding: {\n top: 4,\n bottom: 4\n }\n },\n ticks: {\n minRotation: 0,\n maxRotation: 50,\n mirror: false,\n textStrokeWidth: 0,\n textStrokeColor: '',\n padding: 3,\n display: true,\n autoSkip: true,\n autoSkipPadding: 3,\n labelOffset: 0,\n callback: Ticks.formatters.values,\n minor: {},\n major: {},\n align: 'center',\n crossAlign: 'near',\n showLabelBackdrop: false,\n backdropColor: 'rgba(255, 255, 255, 0.75)',\n backdropPadding: 2\n }\n});\ndefaults.route('scale.ticks', 'color', '', 'color');\ndefaults.route('scale.grid', 'color', '', 'borderColor');\ndefaults.route('scale.grid', 'borderColor', '', 'borderColor');\ndefaults.route('scale.title', 'color', '', 'color');\ndefaults.describe('scale', {\n _fallback: false,\n _scriptable: function _scriptable(name) {\n return !name.startsWith('before') && !name.startsWith('after') && name !== 'callback' && name !== 'parser';\n },\n _indexable: function _indexable(name) {\n return name !== 'borderDash' && name !== 'tickBorderDash';\n }\n});\ndefaults.describe('scales', {\n _fallback: 'scale'\n});\ndefaults.describe('scale.ticks', {\n _scriptable: function _scriptable(name) {\n return name !== 'backdropPadding' && name !== 'callback';\n },\n _indexable: function _indexable(name) {\n return name !== 'backdropPadding';\n }\n});\n\nfunction autoSkip(scale, ticks) {\n var tickOpts = scale.options.ticks;\n var ticksLimit = tickOpts.maxTicksLimit || determineMaxTicks(scale);\n var majorIndices = tickOpts.major.enabled ? getMajorIndices(ticks) : [];\n var numMajorIndices = majorIndices.length;\n var first = majorIndices[0];\n var last = majorIndices[numMajorIndices - 1];\n var newTicks = [];\n\n if (numMajorIndices > ticksLimit) {\n skipMajors(ticks, newTicks, majorIndices, numMajorIndices / ticksLimit);\n return newTicks;\n }\n\n var spacing = calculateSpacing(majorIndices, ticks, ticksLimit);\n\n if (numMajorIndices > 0) {\n var i, ilen;\n var avgMajorSpacing = numMajorIndices > 1 ? Math.round((last - first) / (numMajorIndices - 1)) : null;\n skip(ticks, newTicks, spacing, isNullOrUndef(avgMajorSpacing) ? 0 : first - avgMajorSpacing, first);\n\n for (i = 0, ilen = numMajorIndices - 1; i < ilen; i++) {\n skip(ticks, newTicks, spacing, majorIndices[i], majorIndices[i + 1]);\n }\n\n skip(ticks, newTicks, spacing, last, isNullOrUndef(avgMajorSpacing) ? ticks.length : last + avgMajorSpacing);\n return newTicks;\n }\n\n skip(ticks, newTicks, spacing);\n return newTicks;\n}\n\nfunction determineMaxTicks(scale) {\n var offset = scale.options.offset;\n\n var tickLength = scale._tickSize();\n\n var maxScale = scale._length / tickLength + (offset ? 0 : 1);\n var maxChart = scale._maxLength / tickLength;\n return Math.floor(Math.min(maxScale, maxChart));\n}\n\nfunction calculateSpacing(majorIndices, ticks, ticksLimit) {\n var evenMajorSpacing = getEvenSpacing(majorIndices);\n var spacing = ticks.length / ticksLimit;\n\n if (!evenMajorSpacing) {\n return Math.max(spacing, 1);\n }\n\n var factors = _factorize(evenMajorSpacing);\n\n for (var i = 0, ilen = factors.length - 1; i < ilen; i++) {\n var factor = factors[i];\n\n if (factor > spacing) {\n return factor;\n }\n }\n\n return Math.max(spacing, 1);\n}\n\nfunction getMajorIndices(ticks) {\n var result = [];\n var i, ilen;\n\n for (i = 0, ilen = ticks.length; i < ilen; i++) {\n if (ticks[i].major) {\n result.push(i);\n }\n }\n\n return result;\n}\n\nfunction skipMajors(ticks, newTicks, majorIndices, spacing) {\n var count = 0;\n var next = majorIndices[0];\n var i;\n spacing = Math.ceil(spacing);\n\n for (i = 0; i < ticks.length; i++) {\n if (i === next) {\n newTicks.push(ticks[i]);\n count++;\n next = majorIndices[count * spacing];\n }\n }\n}\n\nfunction skip(ticks, newTicks, spacing, majorStart, majorEnd) {\n var start = valueOrDefault(majorStart, 0);\n var end = Math.min(valueOrDefault(majorEnd, ticks.length), ticks.length);\n var count = 0;\n var length, i, next;\n spacing = Math.ceil(spacing);\n\n if (majorEnd) {\n length = majorEnd - majorStart;\n spacing = length / Math.floor(length / spacing);\n }\n\n next = start;\n\n while (next < 0) {\n count++;\n next = Math.round(start + count * spacing);\n }\n\n for (i = Math.max(start, 0); i < end; i++) {\n if (i === next) {\n newTicks.push(ticks[i]);\n count++;\n next = Math.round(start + count * spacing);\n }\n }\n}\n\nfunction getEvenSpacing(arr) {\n var len = arr.length;\n var i, diff;\n\n if (len < 2) {\n return false;\n }\n\n for (diff = arr[0], i = 1; i < len; ++i) {\n if (arr[i] - arr[i - 1] !== diff) {\n return false;\n }\n }\n\n return diff;\n}\n\nvar reverseAlign = function reverseAlign(align) {\n return align === 'left' ? 'right' : align === 'right' ? 'left' : align;\n};\n\nvar offsetFromEdge = function offsetFromEdge(scale, edge, offset) {\n return edge === 'top' || edge === 'left' ? scale[edge] + offset : scale[edge] - offset;\n};\n\nfunction sample(arr, numItems) {\n var result = [];\n var increment = arr.length / numItems;\n var len = arr.length;\n var i = 0;\n\n for (; i < len; i += increment) {\n result.push(arr[Math.floor(i)]);\n }\n\n return result;\n}\n\nfunction getPixelForGridLine(scale, index, offsetGridLines) {\n var length = scale.ticks.length;\n var validIndex = Math.min(index, length - 1);\n var start = scale._startPixel;\n var end = scale._endPixel;\n var epsilon = 1e-6;\n var lineValue = scale.getPixelForTick(validIndex);\n var offset;\n\n if (offsetGridLines) {\n if (length === 1) {\n offset = Math.max(lineValue - start, end - lineValue);\n } else if (index === 0) {\n offset = (scale.getPixelForTick(1) - lineValue) / 2;\n } else {\n offset = (lineValue - scale.getPixelForTick(validIndex - 1)) / 2;\n }\n\n lineValue += validIndex < index ? offset : -offset;\n\n if (lineValue < start - epsilon || lineValue > end + epsilon) {\n return;\n }\n }\n\n return lineValue;\n}\n\nfunction garbageCollect(caches, length) {\n each(caches, function (cache) {\n var gc = cache.gc;\n var gcLen = gc.length / 2;\n var i;\n\n if (gcLen > length) {\n for (i = 0; i < gcLen; ++i) {\n delete cache.data[gc[i]];\n }\n\n gc.splice(0, gcLen);\n }\n });\n}\n\nfunction getTickMarkLength(options) {\n return options.drawTicks ? options.tickLength : 0;\n}\n\nfunction getTitleHeight(options, fallback) {\n if (!options.display) {\n return 0;\n }\n\n var font = toFont(options.font, fallback);\n var padding = toPadding(options.padding);\n var lines = isArray(options.text) ? options.text.length : 1;\n return lines * font.lineHeight + padding.height;\n}\n\nfunction createScaleContext(parent, scale) {\n return createContext(parent, {\n scale: scale,\n type: 'scale'\n });\n}\n\nfunction createTickContext(parent, index, tick) {\n return createContext(parent, {\n tick: tick,\n index: index,\n type: 'tick'\n });\n}\n\nfunction titleAlign(align, position, reverse) {\n var ret = _toLeftRightCenter(align);\n\n if (reverse && position !== 'right' || !reverse && position === 'right') {\n ret = reverseAlign(ret);\n }\n\n return ret;\n}\n\nfunction titleArgs(scale, offset, position, align) {\n var top = scale.top,\n left = scale.left,\n bottom = scale.bottom,\n right = scale.right,\n chart = scale.chart;\n var chartArea = chart.chartArea,\n scales = chart.scales;\n var rotation = 0;\n var maxWidth, titleX, titleY;\n var height = bottom - top;\n var width = right - left;\n\n if (scale.isHorizontal()) {\n titleX = _alignStartEnd(align, left, right);\n\n if (isObject(position)) {\n var positionAxisID = Object.keys(position)[0];\n var value = position[positionAxisID];\n titleY = scales[positionAxisID].getPixelForValue(value) + height - offset;\n } else if (position === 'center') {\n titleY = (chartArea.bottom + chartArea.top) / 2 + height - offset;\n } else {\n titleY = offsetFromEdge(scale, position, offset);\n }\n\n maxWidth = right - left;\n } else {\n if (isObject(position)) {\n var _positionAxisID = Object.keys(position)[0];\n var _value = position[_positionAxisID];\n titleX = scales[_positionAxisID].getPixelForValue(_value) - width + offset;\n } else if (position === 'center') {\n titleX = (chartArea.left + chartArea.right) / 2 - width + offset;\n } else {\n titleX = offsetFromEdge(scale, position, offset);\n }\n\n titleY = _alignStartEnd(align, bottom, top);\n rotation = position === 'left' ? -HALF_PI : HALF_PI;\n }\n\n return {\n titleX: titleX,\n titleY: titleY,\n maxWidth: maxWidth,\n rotation: rotation\n };\n}\n\nvar Scale = /*#__PURE__*/function (_Element) {\n _inherits(Scale, _Element);\n\n var _super8 = _createSuper(Scale);\n\n function Scale(cfg) {\n var _this9;\n\n _classCallCheck(this, Scale);\n\n _this9 = _super8.call(this);\n _this9.id = cfg.id;\n _this9.type = cfg.type;\n _this9.options = undefined;\n _this9.ctx = cfg.ctx;\n _this9.chart = cfg.chart;\n _this9.top = undefined;\n _this9.bottom = undefined;\n _this9.left = undefined;\n _this9.right = undefined;\n _this9.width = undefined;\n _this9.height = undefined;\n _this9._margins = {\n left: 0,\n right: 0,\n top: 0,\n bottom: 0\n };\n _this9.maxWidth = undefined;\n _this9.maxHeight = undefined;\n _this9.paddingTop = undefined;\n _this9.paddingBottom = undefined;\n _this9.paddingLeft = undefined;\n _this9.paddingRight = undefined;\n _this9.axis = undefined;\n _this9.labelRotation = undefined;\n _this9.min = undefined;\n _this9.max = undefined;\n _this9._range = undefined;\n _this9.ticks = [];\n _this9._gridLineItems = null;\n _this9._labelItems = null;\n _this9._labelSizes = null;\n _this9._length = 0;\n _this9._maxLength = 0;\n _this9._longestTextCache = {};\n _this9._startPixel = undefined;\n _this9._endPixel = undefined;\n _this9._reversePixels = false;\n _this9._userMax = undefined;\n _this9._userMin = undefined;\n _this9._suggestedMax = undefined;\n _this9._suggestedMin = undefined;\n _this9._ticksLength = 0;\n _this9._borderValue = 0;\n _this9._cache = {};\n _this9._dataLimitsCached = false;\n _this9.$context = undefined;\n return _this9;\n }\n\n _createClass(Scale, [{\n key: \"init\",\n value: function init(options) {\n this.options = options.setContext(this.getContext());\n this.axis = options.axis;\n this._userMin = this.parse(options.min);\n this._userMax = this.parse(options.max);\n this._suggestedMin = this.parse(options.suggestedMin);\n this._suggestedMax = this.parse(options.suggestedMax);\n }\n }, {\n key: \"parse\",\n value: function parse(raw, index) {\n return raw;\n }\n }, {\n key: \"getUserBounds\",\n value: function getUserBounds() {\n var _userMin = this._userMin,\n _userMax = this._userMax,\n _suggestedMin = this._suggestedMin,\n _suggestedMax = this._suggestedMax;\n _userMin = finiteOrDefault(_userMin, Number.POSITIVE_INFINITY);\n _userMax = finiteOrDefault(_userMax, Number.NEGATIVE_INFINITY);\n _suggestedMin = finiteOrDefault(_suggestedMin, Number.POSITIVE_INFINITY);\n _suggestedMax = finiteOrDefault(_suggestedMax, Number.NEGATIVE_INFINITY);\n return {\n min: finiteOrDefault(_userMin, _suggestedMin),\n max: finiteOrDefault(_userMax, _suggestedMax),\n minDefined: isNumberFinite(_userMin),\n maxDefined: isNumberFinite(_userMax)\n };\n }\n }, {\n key: \"getMinMax\",\n value: function getMinMax(canStack) {\n var _this$getUserBounds = this.getUserBounds(),\n min = _this$getUserBounds.min,\n max = _this$getUserBounds.max,\n minDefined = _this$getUserBounds.minDefined,\n maxDefined = _this$getUserBounds.maxDefined;\n\n var range;\n\n if (minDefined && maxDefined) {\n return {\n min: min,\n max: max\n };\n }\n\n var metas = this.getMatchingVisibleMetas();\n\n for (var i = 0, ilen = metas.length; i < ilen; ++i) {\n range = metas[i].controller.getMinMax(this, canStack);\n\n if (!minDefined) {\n min = Math.min(min, range.min);\n }\n\n if (!maxDefined) {\n max = Math.max(max, range.max);\n }\n }\n\n min = maxDefined && min > max ? max : min;\n max = minDefined && min > max ? min : max;\n return {\n min: finiteOrDefault(min, finiteOrDefault(max, min)),\n max: finiteOrDefault(max, finiteOrDefault(min, max))\n };\n }\n }, {\n key: \"getPadding\",\n value: function getPadding() {\n return {\n left: this.paddingLeft || 0,\n top: this.paddingTop || 0,\n right: this.paddingRight || 0,\n bottom: this.paddingBottom || 0\n };\n }\n }, {\n key: \"getTicks\",\n value: function getTicks() {\n return this.ticks;\n }\n }, {\n key: \"getLabels\",\n value: function getLabels() {\n var data = this.chart.data;\n return this.options.labels || (this.isHorizontal() ? data.xLabels : data.yLabels) || data.labels || [];\n }\n }, {\n key: \"beforeLayout\",\n value: function beforeLayout() {\n this._cache = {};\n this._dataLimitsCached = false;\n }\n }, {\n key: \"beforeUpdate\",\n value: function beforeUpdate() {\n callback(this.options.beforeUpdate, [this]);\n }\n }, {\n key: \"update\",\n value: function update(maxWidth, maxHeight, margins) {\n var _this$options3 = this.options,\n beginAtZero = _this$options3.beginAtZero,\n grace = _this$options3.grace,\n tickOpts = _this$options3.ticks;\n var sampleSize = tickOpts.sampleSize;\n this.beforeUpdate();\n this.maxWidth = maxWidth;\n this.maxHeight = maxHeight;\n this._margins = margins = Object.assign({\n left: 0,\n right: 0,\n top: 0,\n bottom: 0\n }, margins);\n this.ticks = null;\n this._labelSizes = null;\n this._gridLineItems = null;\n this._labelItems = null;\n this.beforeSetDimensions();\n this.setDimensions();\n this.afterSetDimensions();\n this._maxLength = this.isHorizontal() ? this.width + margins.left + margins.right : this.height + margins.top + margins.bottom;\n\n if (!this._dataLimitsCached) {\n this.beforeDataLimits();\n this.determineDataLimits();\n this.afterDataLimits();\n this._range = _addGrace(this, grace, beginAtZero);\n this._dataLimitsCached = true;\n }\n\n this.beforeBuildTicks();\n this.ticks = this.buildTicks() || [];\n this.afterBuildTicks();\n var samplingEnabled = sampleSize < this.ticks.length;\n\n this._convertTicksToLabels(samplingEnabled ? sample(this.ticks, sampleSize) : this.ticks);\n\n this.configure();\n this.beforeCalculateLabelRotation();\n this.calculateLabelRotation();\n this.afterCalculateLabelRotation();\n\n if (tickOpts.display && (tickOpts.autoSkip || tickOpts.source === 'auto')) {\n this.ticks = autoSkip(this, this.ticks);\n this._labelSizes = null;\n this.afterAutoSkip();\n }\n\n if (samplingEnabled) {\n this._convertTicksToLabels(this.ticks);\n }\n\n this.beforeFit();\n this.fit();\n this.afterFit();\n this.afterUpdate();\n }\n }, {\n key: \"configure\",\n value: function configure() {\n var reversePixels = this.options.reverse;\n var startPixel, endPixel;\n\n if (this.isHorizontal()) {\n startPixel = this.left;\n endPixel = this.right;\n } else {\n startPixel = this.top;\n endPixel = this.bottom;\n reversePixels = !reversePixels;\n }\n\n this._startPixel = startPixel;\n this._endPixel = endPixel;\n this._reversePixels = reversePixels;\n this._length = endPixel - startPixel;\n this._alignToPixels = this.options.alignToPixels;\n }\n }, {\n key: \"afterUpdate\",\n value: function afterUpdate() {\n callback(this.options.afterUpdate, [this]);\n }\n }, {\n key: \"beforeSetDimensions\",\n value: function beforeSetDimensions() {\n callback(this.options.beforeSetDimensions, [this]);\n }\n }, {\n key: \"setDimensions\",\n value: function setDimensions() {\n if (this.isHorizontal()) {\n this.width = this.maxWidth;\n this.left = 0;\n this.right = this.width;\n } else {\n this.height = this.maxHeight;\n this.top = 0;\n this.bottom = this.height;\n }\n\n this.paddingLeft = 0;\n this.paddingTop = 0;\n this.paddingRight = 0;\n this.paddingBottom = 0;\n }\n }, {\n key: \"afterSetDimensions\",\n value: function afterSetDimensions() {\n callback(this.options.afterSetDimensions, [this]);\n }\n }, {\n key: \"_callHooks\",\n value: function _callHooks(name) {\n this.chart.notifyPlugins(name, this.getContext());\n callback(this.options[name], [this]);\n }\n }, {\n key: \"beforeDataLimits\",\n value: function beforeDataLimits() {\n this._callHooks('beforeDataLimits');\n }\n }, {\n key: \"determineDataLimits\",\n value: function determineDataLimits() {}\n }, {\n key: \"afterDataLimits\",\n value: function afterDataLimits() {\n this._callHooks('afterDataLimits');\n }\n }, {\n key: \"beforeBuildTicks\",\n value: function beforeBuildTicks() {\n this._callHooks('beforeBuildTicks');\n }\n }, {\n key: \"buildTicks\",\n value: function buildTicks() {\n return [];\n }\n }, {\n key: \"afterBuildTicks\",\n value: function afterBuildTicks() {\n this._callHooks('afterBuildTicks');\n }\n }, {\n key: \"beforeTickToLabelConversion\",\n value: function beforeTickToLabelConversion() {\n callback(this.options.beforeTickToLabelConversion, [this]);\n }\n }, {\n key: \"generateTickLabels\",\n value: function generateTickLabels(ticks) {\n var tickOpts = this.options.ticks;\n var i, ilen, tick;\n\n for (i = 0, ilen = ticks.length; i < ilen; i++) {\n tick = ticks[i];\n tick.label = callback(tickOpts.callback, [tick.value, i, ticks], this);\n }\n }\n }, {\n key: \"afterTickToLabelConversion\",\n value: function afterTickToLabelConversion() {\n callback(this.options.afterTickToLabelConversion, [this]);\n }\n }, {\n key: \"beforeCalculateLabelRotation\",\n value: function beforeCalculateLabelRotation() {\n callback(this.options.beforeCalculateLabelRotation, [this]);\n }\n }, {\n key: \"calculateLabelRotation\",\n value: function calculateLabelRotation() {\n var options = this.options;\n var tickOpts = options.ticks;\n var numTicks = this.ticks.length;\n var minRotation = tickOpts.minRotation || 0;\n var maxRotation = tickOpts.maxRotation;\n var labelRotation = minRotation;\n var tickWidth, maxHeight, maxLabelDiagonal;\n\n if (!this._isVisible() || !tickOpts.display || minRotation >= maxRotation || numTicks <= 1 || !this.isHorizontal()) {\n this.labelRotation = minRotation;\n return;\n }\n\n var labelSizes = this._getLabelSizes();\n\n var maxLabelWidth = labelSizes.widest.width;\n var maxLabelHeight = labelSizes.highest.height;\n\n var maxWidth = _limitValue(this.chart.width - maxLabelWidth, 0, this.maxWidth);\n\n tickWidth = options.offset ? this.maxWidth / numTicks : maxWidth / (numTicks - 1);\n\n if (maxLabelWidth + 6 > tickWidth) {\n tickWidth = maxWidth / (numTicks - (options.offset ? 0.5 : 1));\n maxHeight = this.maxHeight - getTickMarkLength(options.grid) - tickOpts.padding - getTitleHeight(options.title, this.chart.options.font);\n maxLabelDiagonal = Math.sqrt(maxLabelWidth * maxLabelWidth + maxLabelHeight * maxLabelHeight);\n labelRotation = toDegrees(Math.min(Math.asin(_limitValue((labelSizes.highest.height + 6) / tickWidth, -1, 1)), Math.asin(_limitValue(maxHeight / maxLabelDiagonal, -1, 1)) - Math.asin(_limitValue(maxLabelHeight / maxLabelDiagonal, -1, 1))));\n labelRotation = Math.max(minRotation, Math.min(maxRotation, labelRotation));\n }\n\n this.labelRotation = labelRotation;\n }\n }, {\n key: \"afterCalculateLabelRotation\",\n value: function afterCalculateLabelRotation() {\n callback(this.options.afterCalculateLabelRotation, [this]);\n }\n }, {\n key: \"afterAutoSkip\",\n value: function afterAutoSkip() {}\n }, {\n key: \"beforeFit\",\n value: function beforeFit() {\n callback(this.options.beforeFit, [this]);\n }\n }, {\n key: \"fit\",\n value: function fit() {\n var minSize = {\n width: 0,\n height: 0\n };\n var chart = this.chart,\n _this$options4 = this.options,\n tickOpts = _this$options4.ticks,\n titleOpts = _this$options4.title,\n gridOpts = _this$options4.grid;\n\n var display = this._isVisible();\n\n var isHorizontal = this.isHorizontal();\n\n if (display) {\n var titleHeight = getTitleHeight(titleOpts, chart.options.font);\n\n if (isHorizontal) {\n minSize.width = this.maxWidth;\n minSize.height = getTickMarkLength(gridOpts) + titleHeight;\n } else {\n minSize.height = this.maxHeight;\n minSize.width = getTickMarkLength(gridOpts) + titleHeight;\n }\n\n if (tickOpts.display && this.ticks.length) {\n var _this$_getLabelSizes = this._getLabelSizes(),\n first = _this$_getLabelSizes.first,\n last = _this$_getLabelSizes.last,\n widest = _this$_getLabelSizes.widest,\n highest = _this$_getLabelSizes.highest;\n\n var tickPadding = tickOpts.padding * 2;\n var angleRadians = toRadians(this.labelRotation);\n var cos = Math.cos(angleRadians);\n var sin = Math.sin(angleRadians);\n\n if (isHorizontal) {\n var labelHeight = tickOpts.mirror ? 0 : sin * widest.width + cos * highest.height;\n minSize.height = Math.min(this.maxHeight, minSize.height + labelHeight + tickPadding);\n } else {\n var labelWidth = tickOpts.mirror ? 0 : cos * widest.width + sin * highest.height;\n minSize.width = Math.min(this.maxWidth, minSize.width + labelWidth + tickPadding);\n }\n\n this._calculatePadding(first, last, sin, cos);\n }\n }\n\n this._handleMargins();\n\n if (isHorizontal) {\n this.width = this._length = chart.width - this._margins.left - this._margins.right;\n this.height = minSize.height;\n } else {\n this.width = minSize.width;\n this.height = this._length = chart.height - this._margins.top - this._margins.bottom;\n }\n }\n }, {\n key: \"_calculatePadding\",\n value: function _calculatePadding(first, last, sin, cos) {\n var _this$options5 = this.options,\n _this$options5$ticks = _this$options5.ticks,\n align = _this$options5$ticks.align,\n padding = _this$options5$ticks.padding,\n position = _this$options5.position;\n var isRotated = this.labelRotation !== 0;\n var labelsBelowTicks = position !== 'top' && this.axis === 'x';\n\n if (this.isHorizontal()) {\n var offsetLeft = this.getPixelForTick(0) - this.left;\n var offsetRight = this.right - this.getPixelForTick(this.ticks.length - 1);\n var paddingLeft = 0;\n var paddingRight = 0;\n\n if (isRotated) {\n if (labelsBelowTicks) {\n paddingLeft = cos * first.width;\n paddingRight = sin * last.height;\n } else {\n paddingLeft = sin * first.height;\n paddingRight = cos * last.width;\n }\n } else if (align === 'start') {\n paddingRight = last.width;\n } else if (align === 'end') {\n paddingLeft = first.width;\n } else if (align !== 'inner') {\n paddingLeft = first.width / 2;\n paddingRight = last.width / 2;\n }\n\n this.paddingLeft = Math.max((paddingLeft - offsetLeft + padding) * this.width / (this.width - offsetLeft), 0);\n this.paddingRight = Math.max((paddingRight - offsetRight + padding) * this.width / (this.width - offsetRight), 0);\n } else {\n var paddingTop = last.height / 2;\n var paddingBottom = first.height / 2;\n\n if (align === 'start') {\n paddingTop = 0;\n paddingBottom = first.height;\n } else if (align === 'end') {\n paddingTop = last.height;\n paddingBottom = 0;\n }\n\n this.paddingTop = paddingTop + padding;\n this.paddingBottom = paddingBottom + padding;\n }\n }\n }, {\n key: \"_handleMargins\",\n value: function _handleMargins() {\n if (this._margins) {\n this._margins.left = Math.max(this.paddingLeft, this._margins.left);\n this._margins.top = Math.max(this.paddingTop, this._margins.top);\n this._margins.right = Math.max(this.paddingRight, this._margins.right);\n this._margins.bottom = Math.max(this.paddingBottom, this._margins.bottom);\n }\n }\n }, {\n key: \"afterFit\",\n value: function afterFit() {\n callback(this.options.afterFit, [this]);\n }\n }, {\n key: \"isHorizontal\",\n value: function isHorizontal() {\n var _this$options6 = this.options,\n axis = _this$options6.axis,\n position = _this$options6.position;\n return position === 'top' || position === 'bottom' || axis === 'x';\n }\n }, {\n key: \"isFullSize\",\n value: function isFullSize() {\n return this.options.fullSize;\n }\n }, {\n key: \"_convertTicksToLabels\",\n value: function _convertTicksToLabels(ticks) {\n this.beforeTickToLabelConversion();\n this.generateTickLabels(ticks);\n var i, ilen;\n\n for (i = 0, ilen = ticks.length; i < ilen; i++) {\n if (isNullOrUndef(ticks[i].label)) {\n ticks.splice(i, 1);\n ilen--;\n i--;\n }\n }\n\n this.afterTickToLabelConversion();\n }\n }, {\n key: \"_getLabelSizes\",\n value: function _getLabelSizes() {\n var labelSizes = this._labelSizes;\n\n if (!labelSizes) {\n var sampleSize = this.options.ticks.sampleSize;\n var ticks = this.ticks;\n\n if (sampleSize < ticks.length) {\n ticks = sample(ticks, sampleSize);\n }\n\n this._labelSizes = labelSizes = this._computeLabelSizes(ticks, ticks.length);\n }\n\n return labelSizes;\n }\n }, {\n key: \"_computeLabelSizes\",\n value: function _computeLabelSizes(ticks, length) {\n var ctx = this.ctx,\n caches = this._longestTextCache;\n var widths = [];\n var heights = [];\n var widestLabelSize = 0;\n var highestLabelSize = 0;\n var i, j, jlen, label, tickFont, fontString, cache, lineHeight, width, height, nestedLabel;\n\n for (i = 0; i < length; ++i) {\n label = ticks[i].label;\n tickFont = this._resolveTickFontOptions(i);\n ctx.font = fontString = tickFont.string;\n cache = caches[fontString] = caches[fontString] || {\n data: {},\n gc: []\n };\n lineHeight = tickFont.lineHeight;\n width = height = 0;\n\n if (!isNullOrUndef(label) && !isArray(label)) {\n width = _measureText(ctx, cache.data, cache.gc, width, label);\n height = lineHeight;\n } else if (isArray(label)) {\n for (j = 0, jlen = label.length; j < jlen; ++j) {\n nestedLabel = label[j];\n\n if (!isNullOrUndef(nestedLabel) && !isArray(nestedLabel)) {\n width = _measureText(ctx, cache.data, cache.gc, width, nestedLabel);\n height += lineHeight;\n }\n }\n }\n\n widths.push(width);\n heights.push(height);\n widestLabelSize = Math.max(width, widestLabelSize);\n highestLabelSize = Math.max(height, highestLabelSize);\n }\n\n garbageCollect(caches, length);\n var widest = widths.indexOf(widestLabelSize);\n var highest = heights.indexOf(highestLabelSize);\n\n var valueAt = function valueAt(idx) {\n return {\n width: widths[idx] || 0,\n height: heights[idx] || 0\n };\n };\n\n return {\n first: valueAt(0),\n last: valueAt(length - 1),\n widest: valueAt(widest),\n highest: valueAt(highest),\n widths: widths,\n heights: heights\n };\n }\n }, {\n key: \"getLabelForValue\",\n value: function getLabelForValue(value) {\n return value;\n }\n }, {\n key: \"getPixelForValue\",\n value: function getPixelForValue(value, index) {\n return NaN;\n }\n }, {\n key: \"getValueForPixel\",\n value: function getValueForPixel(pixel) {}\n }, {\n key: \"getPixelForTick\",\n value: function getPixelForTick(index) {\n var ticks = this.ticks;\n\n if (index < 0 || index > ticks.length - 1) {\n return null;\n }\n\n return this.getPixelForValue(ticks[index].value);\n }\n }, {\n key: \"getPixelForDecimal\",\n value: function getPixelForDecimal(decimal) {\n if (this._reversePixels) {\n decimal = 1 - decimal;\n }\n\n var pixel = this._startPixel + decimal * this._length;\n return _int16Range(this._alignToPixels ? _alignPixel(this.chart, pixel, 0) : pixel);\n }\n }, {\n key: \"getDecimalForPixel\",\n value: function getDecimalForPixel(pixel) {\n var decimal = (pixel - this._startPixel) / this._length;\n return this._reversePixels ? 1 - decimal : decimal;\n }\n }, {\n key: \"getBasePixel\",\n value: function getBasePixel() {\n return this.getPixelForValue(this.getBaseValue());\n }\n }, {\n key: \"getBaseValue\",\n value: function getBaseValue() {\n var min = this.min,\n max = this.max;\n return min < 0 && max < 0 ? max : min > 0 && max > 0 ? min : 0;\n }\n }, {\n key: \"getContext\",\n value: function getContext(index) {\n var ticks = this.ticks || [];\n\n if (index >= 0 && index < ticks.length) {\n var tick = ticks[index];\n return tick.$context || (tick.$context = createTickContext(this.getContext(), index, tick));\n }\n\n return this.$context || (this.$context = createScaleContext(this.chart.getContext(), this));\n }\n }, {\n key: \"_tickSize\",\n value: function _tickSize() {\n var optionTicks = this.options.ticks;\n var rot = toRadians(this.labelRotation);\n var cos = Math.abs(Math.cos(rot));\n var sin = Math.abs(Math.sin(rot));\n\n var labelSizes = this._getLabelSizes();\n\n var padding = optionTicks.autoSkipPadding || 0;\n var w = labelSizes ? labelSizes.widest.width + padding : 0;\n var h = labelSizes ? labelSizes.highest.height + padding : 0;\n return this.isHorizontal() ? h * cos > w * sin ? w / cos : h / sin : h * sin < w * cos ? h / cos : w / sin;\n }\n }, {\n key: \"_isVisible\",\n value: function _isVisible() {\n var display = this.options.display;\n\n if (display !== 'auto') {\n return !!display;\n }\n\n return this.getMatchingVisibleMetas().length > 0;\n }\n }, {\n key: \"_computeGridLineItems\",\n value: function _computeGridLineItems(chartArea) {\n var axis = this.axis;\n var chart = this.chart;\n var options = this.options;\n var grid = options.grid,\n position = options.position;\n var offset = grid.offset;\n var isHorizontal = this.isHorizontal();\n var ticks = this.ticks;\n var ticksLength = ticks.length + (offset ? 1 : 0);\n var tl = getTickMarkLength(grid);\n var items = [];\n var borderOpts = grid.setContext(this.getContext());\n var axisWidth = borderOpts.drawBorder ? borderOpts.borderWidth : 0;\n var axisHalfWidth = axisWidth / 2;\n\n var alignBorderValue = function alignBorderValue(pixel) {\n return _alignPixel(chart, pixel, axisWidth);\n };\n\n var borderValue, i, lineValue, alignedLineValue;\n var tx1, ty1, tx2, ty2, x1, y1, x2, y2;\n\n if (position === 'top') {\n borderValue = alignBorderValue(this.bottom);\n ty1 = this.bottom - tl;\n ty2 = borderValue - axisHalfWidth;\n y1 = alignBorderValue(chartArea.top) + axisHalfWidth;\n y2 = chartArea.bottom;\n } else if (position === 'bottom') {\n borderValue = alignBorderValue(this.top);\n y1 = chartArea.top;\n y2 = alignBorderValue(chartArea.bottom) - axisHalfWidth;\n ty1 = borderValue + axisHalfWidth;\n ty2 = this.top + tl;\n } else if (position === 'left') {\n borderValue = alignBorderValue(this.right);\n tx1 = this.right - tl;\n tx2 = borderValue - axisHalfWidth;\n x1 = alignBorderValue(chartArea.left) + axisHalfWidth;\n x2 = chartArea.right;\n } else if (position === 'right') {\n borderValue = alignBorderValue(this.left);\n x1 = chartArea.left;\n x2 = alignBorderValue(chartArea.right) - axisHalfWidth;\n tx1 = borderValue + axisHalfWidth;\n tx2 = this.left + tl;\n } else if (axis === 'x') {\n if (position === 'center') {\n borderValue = alignBorderValue((chartArea.top + chartArea.bottom) / 2 + 0.5);\n } else if (isObject(position)) {\n var positionAxisID = Object.keys(position)[0];\n var value = position[positionAxisID];\n borderValue = alignBorderValue(this.chart.scales[positionAxisID].getPixelForValue(value));\n }\n\n y1 = chartArea.top;\n y2 = chartArea.bottom;\n ty1 = borderValue + axisHalfWidth;\n ty2 = ty1 + tl;\n } else if (axis === 'y') {\n if (position === 'center') {\n borderValue = alignBorderValue((chartArea.left + chartArea.right) / 2);\n } else if (isObject(position)) {\n var _positionAxisID2 = Object.keys(position)[0];\n var _value2 = position[_positionAxisID2];\n borderValue = alignBorderValue(this.chart.scales[_positionAxisID2].getPixelForValue(_value2));\n }\n\n tx1 = borderValue - axisHalfWidth;\n tx2 = tx1 - tl;\n x1 = chartArea.left;\n x2 = chartArea.right;\n }\n\n var limit = valueOrDefault(options.ticks.maxTicksLimit, ticksLength);\n var step = Math.max(1, Math.ceil(ticksLength / limit));\n\n for (i = 0; i < ticksLength; i += step) {\n var optsAtIndex = grid.setContext(this.getContext(i));\n var lineWidth = optsAtIndex.lineWidth;\n var lineColor = optsAtIndex.color;\n var borderDash = optsAtIndex.borderDash || [];\n var borderDashOffset = optsAtIndex.borderDashOffset;\n var tickWidth = optsAtIndex.tickWidth;\n var tickColor = optsAtIndex.tickColor;\n var tickBorderDash = optsAtIndex.tickBorderDash || [];\n var tickBorderDashOffset = optsAtIndex.tickBorderDashOffset;\n lineValue = getPixelForGridLine(this, i, offset);\n\n if (lineValue === undefined) {\n continue;\n }\n\n alignedLineValue = _alignPixel(chart, lineValue, lineWidth);\n\n if (isHorizontal) {\n tx1 = tx2 = x1 = x2 = alignedLineValue;\n } else {\n ty1 = ty2 = y1 = y2 = alignedLineValue;\n }\n\n items.push({\n tx1: tx1,\n ty1: ty1,\n tx2: tx2,\n ty2: ty2,\n x1: x1,\n y1: y1,\n x2: x2,\n y2: y2,\n width: lineWidth,\n color: lineColor,\n borderDash: borderDash,\n borderDashOffset: borderDashOffset,\n tickWidth: tickWidth,\n tickColor: tickColor,\n tickBorderDash: tickBorderDash,\n tickBorderDashOffset: tickBorderDashOffset\n });\n }\n\n this._ticksLength = ticksLength;\n this._borderValue = borderValue;\n return items;\n }\n }, {\n key: \"_computeLabelItems\",\n value: function _computeLabelItems(chartArea) {\n var axis = this.axis;\n var options = this.options;\n var position = options.position,\n optionTicks = options.ticks;\n var isHorizontal = this.isHorizontal();\n var ticks = this.ticks;\n var align = optionTicks.align,\n crossAlign = optionTicks.crossAlign,\n padding = optionTicks.padding,\n mirror = optionTicks.mirror;\n var tl = getTickMarkLength(options.grid);\n var tickAndPadding = tl + padding;\n var hTickAndPadding = mirror ? -padding : tickAndPadding;\n var rotation = -toRadians(this.labelRotation);\n var items = [];\n var i, ilen, tick, label, x, y, textAlign, pixel, font, lineHeight, lineCount, textOffset;\n var textBaseline = 'middle';\n\n if (position === 'top') {\n y = this.bottom - hTickAndPadding;\n textAlign = this._getXAxisLabelAlignment();\n } else if (position === 'bottom') {\n y = this.top + hTickAndPadding;\n textAlign = this._getXAxisLabelAlignment();\n } else if (position === 'left') {\n var ret = this._getYAxisLabelAlignment(tl);\n\n textAlign = ret.textAlign;\n x = ret.x;\n } else if (position === 'right') {\n var _ret = this._getYAxisLabelAlignment(tl);\n\n textAlign = _ret.textAlign;\n x = _ret.x;\n } else if (axis === 'x') {\n if (position === 'center') {\n y = (chartArea.top + chartArea.bottom) / 2 + tickAndPadding;\n } else if (isObject(position)) {\n var positionAxisID = Object.keys(position)[0];\n var value = position[positionAxisID];\n y = this.chart.scales[positionAxisID].getPixelForValue(value) + tickAndPadding;\n }\n\n textAlign = this._getXAxisLabelAlignment();\n } else if (axis === 'y') {\n if (position === 'center') {\n x = (chartArea.left + chartArea.right) / 2 - tickAndPadding;\n } else if (isObject(position)) {\n var _positionAxisID3 = Object.keys(position)[0];\n var _value3 = position[_positionAxisID3];\n x = this.chart.scales[_positionAxisID3].getPixelForValue(_value3);\n }\n\n textAlign = this._getYAxisLabelAlignment(tl).textAlign;\n }\n\n if (axis === 'y') {\n if (align === 'start') {\n textBaseline = 'top';\n } else if (align === 'end') {\n textBaseline = 'bottom';\n }\n }\n\n var labelSizes = this._getLabelSizes();\n\n for (i = 0, ilen = ticks.length; i < ilen; ++i) {\n tick = ticks[i];\n label = tick.label;\n var optsAtIndex = optionTicks.setContext(this.getContext(i));\n pixel = this.getPixelForTick(i) + optionTicks.labelOffset;\n font = this._resolveTickFontOptions(i);\n lineHeight = font.lineHeight;\n lineCount = isArray(label) ? label.length : 1;\n var halfCount = lineCount / 2;\n var color = optsAtIndex.color;\n var strokeColor = optsAtIndex.textStrokeColor;\n var strokeWidth = optsAtIndex.textStrokeWidth;\n var tickTextAlign = textAlign;\n\n if (isHorizontal) {\n x = pixel;\n\n if (textAlign === 'inner') {\n if (i === ilen - 1) {\n tickTextAlign = !this.options.reverse ? 'right' : 'left';\n } else if (i === 0) {\n tickTextAlign = !this.options.reverse ? 'left' : 'right';\n } else {\n tickTextAlign = 'center';\n }\n }\n\n if (position === 'top') {\n if (crossAlign === 'near' || rotation !== 0) {\n textOffset = -lineCount * lineHeight + lineHeight / 2;\n } else if (crossAlign === 'center') {\n textOffset = -labelSizes.highest.height / 2 - halfCount * lineHeight + lineHeight;\n } else {\n textOffset = -labelSizes.highest.height + lineHeight / 2;\n }\n } else {\n if (crossAlign === 'near' || rotation !== 0) {\n textOffset = lineHeight / 2;\n } else if (crossAlign === 'center') {\n textOffset = labelSizes.highest.height / 2 - halfCount * lineHeight;\n } else {\n textOffset = labelSizes.highest.height - lineCount * lineHeight;\n }\n }\n\n if (mirror) {\n textOffset *= -1;\n }\n } else {\n y = pixel;\n textOffset = (1 - lineCount) * lineHeight / 2;\n }\n\n var backdrop = void 0;\n\n if (optsAtIndex.showLabelBackdrop) {\n var labelPadding = toPadding(optsAtIndex.backdropPadding);\n var height = labelSizes.heights[i];\n var width = labelSizes.widths[i];\n var top = y + textOffset - labelPadding.top;\n var left = x - labelPadding.left;\n\n switch (textBaseline) {\n case 'middle':\n top -= height / 2;\n break;\n\n case 'bottom':\n top -= height;\n break;\n }\n\n switch (textAlign) {\n case 'center':\n left -= width / 2;\n break;\n\n case 'right':\n left -= width;\n break;\n }\n\n backdrop = {\n left: left,\n top: top,\n width: width + labelPadding.width,\n height: height + labelPadding.height,\n color: optsAtIndex.backdropColor\n };\n }\n\n items.push({\n rotation: rotation,\n label: label,\n font: font,\n color: color,\n strokeColor: strokeColor,\n strokeWidth: strokeWidth,\n textOffset: textOffset,\n textAlign: tickTextAlign,\n textBaseline: textBaseline,\n translation: [x, y],\n backdrop: backdrop\n });\n }\n\n return items;\n }\n }, {\n key: \"_getXAxisLabelAlignment\",\n value: function _getXAxisLabelAlignment() {\n var _this$options7 = this.options,\n position = _this$options7.position,\n ticks = _this$options7.ticks;\n var rotation = -toRadians(this.labelRotation);\n\n if (rotation) {\n return position === 'top' ? 'left' : 'right';\n }\n\n var align = 'center';\n\n if (ticks.align === 'start') {\n align = 'left';\n } else if (ticks.align === 'end') {\n align = 'right';\n } else if (ticks.align === 'inner') {\n align = 'inner';\n }\n\n return align;\n }\n }, {\n key: \"_getYAxisLabelAlignment\",\n value: function _getYAxisLabelAlignment(tl) {\n var _this$options8 = this.options,\n position = _this$options8.position,\n _this$options8$ticks = _this$options8.ticks,\n crossAlign = _this$options8$ticks.crossAlign,\n mirror = _this$options8$ticks.mirror,\n padding = _this$options8$ticks.padding;\n\n var labelSizes = this._getLabelSizes();\n\n var tickAndPadding = tl + padding;\n var widest = labelSizes.widest.width;\n var textAlign;\n var x;\n\n if (position === 'left') {\n if (mirror) {\n x = this.right + padding;\n\n if (crossAlign === 'near') {\n textAlign = 'left';\n } else if (crossAlign === 'center') {\n textAlign = 'center';\n x += widest / 2;\n } else {\n textAlign = 'right';\n x += widest;\n }\n } else {\n x = this.right - tickAndPadding;\n\n if (crossAlign === 'near') {\n textAlign = 'right';\n } else if (crossAlign === 'center') {\n textAlign = 'center';\n x -= widest / 2;\n } else {\n textAlign = 'left';\n x = this.left;\n }\n }\n } else if (position === 'right') {\n if (mirror) {\n x = this.left + padding;\n\n if (crossAlign === 'near') {\n textAlign = 'right';\n } else if (crossAlign === 'center') {\n textAlign = 'center';\n x -= widest / 2;\n } else {\n textAlign = 'left';\n x -= widest;\n }\n } else {\n x = this.left + tickAndPadding;\n\n if (crossAlign === 'near') {\n textAlign = 'left';\n } else if (crossAlign === 'center') {\n textAlign = 'center';\n x += widest / 2;\n } else {\n textAlign = 'right';\n x = this.right;\n }\n }\n } else {\n textAlign = 'right';\n }\n\n return {\n textAlign: textAlign,\n x: x\n };\n }\n }, {\n key: \"_computeLabelArea\",\n value: function _computeLabelArea() {\n if (this.options.ticks.mirror) {\n return;\n }\n\n var chart = this.chart;\n var position = this.options.position;\n\n if (position === 'left' || position === 'right') {\n return {\n top: 0,\n left: this.left,\n bottom: chart.height,\n right: this.right\n };\n }\n\n if (position === 'top' || position === 'bottom') {\n return {\n top: this.top,\n left: 0,\n bottom: this.bottom,\n right: chart.width\n };\n }\n }\n }, {\n key: \"drawBackground\",\n value: function drawBackground() {\n var ctx = this.ctx,\n backgroundColor = this.options.backgroundColor,\n left = this.left,\n top = this.top,\n width = this.width,\n height = this.height;\n\n if (backgroundColor) {\n ctx.save();\n ctx.fillStyle = backgroundColor;\n ctx.fillRect(left, top, width, height);\n ctx.restore();\n }\n }\n }, {\n key: \"getLineWidthForValue\",\n value: function getLineWidthForValue(value) {\n var grid = this.options.grid;\n\n if (!this._isVisible() || !grid.display) {\n return 0;\n }\n\n var ticks = this.ticks;\n var index = ticks.findIndex(function (t) {\n return t.value === value;\n });\n\n if (index >= 0) {\n var opts = grid.setContext(this.getContext(index));\n return opts.lineWidth;\n }\n\n return 0;\n }\n }, {\n key: \"drawGrid\",\n value: function drawGrid(chartArea) {\n var grid = this.options.grid;\n var ctx = this.ctx;\n\n var items = this._gridLineItems || (this._gridLineItems = this._computeGridLineItems(chartArea));\n\n var i, ilen;\n\n var drawLine = function drawLine(p1, p2, style) {\n if (!style.width || !style.color) {\n return;\n }\n\n ctx.save();\n ctx.lineWidth = style.width;\n ctx.strokeStyle = style.color;\n ctx.setLineDash(style.borderDash || []);\n ctx.lineDashOffset = style.borderDashOffset;\n ctx.beginPath();\n ctx.moveTo(p1.x, p1.y);\n ctx.lineTo(p2.x, p2.y);\n ctx.stroke();\n ctx.restore();\n };\n\n if (grid.display) {\n for (i = 0, ilen = items.length; i < ilen; ++i) {\n var item = items[i];\n\n if (grid.drawOnChartArea) {\n drawLine({\n x: item.x1,\n y: item.y1\n }, {\n x: item.x2,\n y: item.y2\n }, item);\n }\n\n if (grid.drawTicks) {\n drawLine({\n x: item.tx1,\n y: item.ty1\n }, {\n x: item.tx2,\n y: item.ty2\n }, {\n color: item.tickColor,\n width: item.tickWidth,\n borderDash: item.tickBorderDash,\n borderDashOffset: item.tickBorderDashOffset\n });\n }\n }\n }\n }\n }, {\n key: \"drawBorder\",\n value: function drawBorder() {\n var chart = this.chart,\n ctx = this.ctx,\n grid = this.options.grid;\n var borderOpts = grid.setContext(this.getContext());\n var axisWidth = grid.drawBorder ? borderOpts.borderWidth : 0;\n\n if (!axisWidth) {\n return;\n }\n\n var lastLineWidth = grid.setContext(this.getContext(0)).lineWidth;\n var borderValue = this._borderValue;\n var x1, x2, y1, y2;\n\n if (this.isHorizontal()) {\n x1 = _alignPixel(chart, this.left, axisWidth) - axisWidth / 2;\n x2 = _alignPixel(chart, this.right, lastLineWidth) + lastLineWidth / 2;\n y1 = y2 = borderValue;\n } else {\n y1 = _alignPixel(chart, this.top, axisWidth) - axisWidth / 2;\n y2 = _alignPixel(chart, this.bottom, lastLineWidth) + lastLineWidth / 2;\n x1 = x2 = borderValue;\n }\n\n ctx.save();\n ctx.lineWidth = borderOpts.borderWidth;\n ctx.strokeStyle = borderOpts.borderColor;\n ctx.beginPath();\n ctx.moveTo(x1, y1);\n ctx.lineTo(x2, y2);\n ctx.stroke();\n ctx.restore();\n }\n }, {\n key: \"drawLabels\",\n value: function drawLabels(chartArea) {\n var optionTicks = this.options.ticks;\n\n if (!optionTicks.display) {\n return;\n }\n\n var ctx = this.ctx;\n\n var area = this._computeLabelArea();\n\n if (area) {\n clipArea(ctx, area);\n }\n\n var items = this._labelItems || (this._labelItems = this._computeLabelItems(chartArea));\n\n var i, ilen;\n\n for (i = 0, ilen = items.length; i < ilen; ++i) {\n var item = items[i];\n var tickFont = item.font;\n var label = item.label;\n\n if (item.backdrop) {\n ctx.fillStyle = item.backdrop.color;\n ctx.fillRect(item.backdrop.left, item.backdrop.top, item.backdrop.width, item.backdrop.height);\n }\n\n var y = item.textOffset;\n renderText(ctx, label, 0, y, tickFont, item);\n }\n\n if (area) {\n unclipArea(ctx);\n }\n }\n }, {\n key: \"drawTitle\",\n value: function drawTitle() {\n var ctx = this.ctx,\n _this$options9 = this.options,\n position = _this$options9.position,\n title = _this$options9.title,\n reverse = _this$options9.reverse;\n\n if (!title.display) {\n return;\n }\n\n var font = toFont(title.font);\n var padding = toPadding(title.padding);\n var align = title.align;\n var offset = font.lineHeight / 2;\n\n if (position === 'bottom' || position === 'center' || isObject(position)) {\n offset += padding.bottom;\n\n if (isArray(title.text)) {\n offset += font.lineHeight * (title.text.length - 1);\n }\n } else {\n offset += padding.top;\n }\n\n var _titleArgs = titleArgs(this, offset, position, align),\n titleX = _titleArgs.titleX,\n titleY = _titleArgs.titleY,\n maxWidth = _titleArgs.maxWidth,\n rotation = _titleArgs.rotation;\n\n renderText(ctx, title.text, 0, 0, font, {\n color: title.color,\n maxWidth: maxWidth,\n rotation: rotation,\n textAlign: titleAlign(align, position, reverse),\n textBaseline: 'middle',\n translation: [titleX, titleY]\n });\n }\n }, {\n key: \"draw\",\n value: function draw(chartArea) {\n if (!this._isVisible()) {\n return;\n }\n\n this.drawBackground();\n this.drawGrid(chartArea);\n this.drawBorder();\n this.drawTitle();\n this.drawLabels(chartArea);\n }\n }, {\n key: \"_layers\",\n value: function _layers() {\n var _this10 = this;\n\n var opts = this.options;\n var tz = opts.ticks && opts.ticks.z || 0;\n var gz = valueOrDefault(opts.grid && opts.grid.z, -1);\n\n if (!this._isVisible() || this.draw !== Scale.prototype.draw) {\n return [{\n z: tz,\n draw: function draw(chartArea) {\n _this10.draw(chartArea);\n }\n }];\n }\n\n return [{\n z: gz,\n draw: function draw(chartArea) {\n _this10.drawBackground();\n\n _this10.drawGrid(chartArea);\n\n _this10.drawTitle();\n }\n }, {\n z: gz + 1,\n draw: function draw() {\n _this10.drawBorder();\n }\n }, {\n z: tz,\n draw: function draw(chartArea) {\n _this10.drawLabels(chartArea);\n }\n }];\n }\n }, {\n key: \"getMatchingVisibleMetas\",\n value: function getMatchingVisibleMetas(type) {\n var metas = this.chart.getSortedVisibleDatasetMetas();\n var axisID = this.axis + 'AxisID';\n var result = [];\n var i, ilen;\n\n for (i = 0, ilen = metas.length; i < ilen; ++i) {\n var meta = metas[i];\n\n if (meta[axisID] === this.id && (!type || meta.type === type)) {\n result.push(meta);\n }\n }\n\n return result;\n }\n }, {\n key: \"_resolveTickFontOptions\",\n value: function _resolveTickFontOptions(index) {\n var opts = this.options.ticks.setContext(this.getContext(index));\n return toFont(opts.font);\n }\n }, {\n key: \"_maxDigits\",\n value: function _maxDigits() {\n var fontSize = this._resolveTickFontOptions(0).lineHeight;\n\n return (this.isHorizontal() ? this.width : this.height) / fontSize;\n }\n }]);\n\n return Scale;\n}(Element);\n\nvar TypedRegistry = /*#__PURE__*/function () {\n function TypedRegistry(type, scope, override) {\n _classCallCheck(this, TypedRegistry);\n\n this.type = type;\n this.scope = scope;\n this.override = override;\n this.items = Object.create(null);\n }\n\n _createClass(TypedRegistry, [{\n key: \"isForType\",\n value: function isForType(type) {\n return Object.prototype.isPrototypeOf.call(this.type.prototype, type.prototype);\n }\n }, {\n key: \"register\",\n value: function register(item) {\n var proto = Object.getPrototypeOf(item);\n var parentScope;\n\n if (isIChartComponent(proto)) {\n parentScope = this.register(proto);\n }\n\n var items = this.items;\n var id = item.id;\n var scope = this.scope + '.' + id;\n\n if (!id) {\n throw new Error('class does not have id: ' + item);\n }\n\n if (id in items) {\n return scope;\n }\n\n items[id] = item;\n registerDefaults(item, scope, parentScope);\n\n if (this.override) {\n defaults.override(item.id, item.overrides);\n }\n\n return scope;\n }\n }, {\n key: \"get\",\n value: function get(id) {\n return this.items[id];\n }\n }, {\n key: \"unregister\",\n value: function unregister(item) {\n var items = this.items;\n var id = item.id;\n var scope = this.scope;\n\n if (id in items) {\n delete items[id];\n }\n\n if (scope && id in defaults[scope]) {\n delete defaults[scope][id];\n\n if (this.override) {\n delete overrides[id];\n }\n }\n }\n }]);\n\n return TypedRegistry;\n}();\n\nfunction registerDefaults(item, scope, parentScope) {\n var itemDefaults = merge(Object.create(null), [parentScope ? defaults.get(parentScope) : {}, defaults.get(scope), item.defaults]);\n defaults.set(scope, itemDefaults);\n\n if (item.defaultRoutes) {\n routeDefaults(scope, item.defaultRoutes);\n }\n\n if (item.descriptors) {\n defaults.describe(scope, item.descriptors);\n }\n}\n\nfunction routeDefaults(scope, routes) {\n Object.keys(routes).forEach(function (property) {\n var propertyParts = property.split('.');\n var sourceName = propertyParts.pop();\n var sourceScope = [scope].concat(propertyParts).join('.');\n var parts = routes[property].split('.');\n var targetName = parts.pop();\n var targetScope = parts.join('.');\n defaults.route(sourceScope, sourceName, targetScope, targetName);\n });\n}\n\nfunction isIChartComponent(proto) {\n return 'id' in proto && 'defaults' in proto;\n}\n\nvar Registry = /*#__PURE__*/function () {\n function Registry() {\n _classCallCheck(this, Registry);\n\n this.controllers = new TypedRegistry(DatasetController, 'datasets', true);\n this.elements = new TypedRegistry(Element, 'elements');\n this.plugins = new TypedRegistry(Object, 'plugins');\n this.scales = new TypedRegistry(Scale, 'scales');\n this._typedRegistries = [this.controllers, this.scales, this.elements];\n }\n\n _createClass(Registry, [{\n key: \"add\",\n value: function add() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n this._each('register', args);\n }\n }, {\n key: \"remove\",\n value: function remove() {\n for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n\n this._each('unregister', args);\n }\n }, {\n key: \"addControllers\",\n value: function addControllers() {\n for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n args[_key3] = arguments[_key3];\n }\n\n this._each('register', args, this.controllers);\n }\n }, {\n key: \"addElements\",\n value: function addElements() {\n for (var _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {\n args[_key4] = arguments[_key4];\n }\n\n this._each('register', args, this.elements);\n }\n }, {\n key: \"addPlugins\",\n value: function addPlugins() {\n for (var _len5 = arguments.length, args = new Array(_len5), _key5 = 0; _key5 < _len5; _key5++) {\n args[_key5] = arguments[_key5];\n }\n\n this._each('register', args, this.plugins);\n }\n }, {\n key: \"addScales\",\n value: function addScales() {\n for (var _len6 = arguments.length, args = new Array(_len6), _key6 = 0; _key6 < _len6; _key6++) {\n args[_key6] = arguments[_key6];\n }\n\n this._each('register', args, this.scales);\n }\n }, {\n key: \"getController\",\n value: function getController(id) {\n return this._get(id, this.controllers, 'controller');\n }\n }, {\n key: \"getElement\",\n value: function getElement(id) {\n return this._get(id, this.elements, 'element');\n }\n }, {\n key: \"getPlugin\",\n value: function getPlugin(id) {\n return this._get(id, this.plugins, 'plugin');\n }\n }, {\n key: \"getScale\",\n value: function getScale(id) {\n return this._get(id, this.scales, 'scale');\n }\n }, {\n key: \"removeControllers\",\n value: function removeControllers() {\n for (var _len7 = arguments.length, args = new Array(_len7), _key7 = 0; _key7 < _len7; _key7++) {\n args[_key7] = arguments[_key7];\n }\n\n this._each('unregister', args, this.controllers);\n }\n }, {\n key: \"removeElements\",\n value: function removeElements() {\n for (var _len8 = arguments.length, args = new Array(_len8), _key8 = 0; _key8 < _len8; _key8++) {\n args[_key8] = arguments[_key8];\n }\n\n this._each('unregister', args, this.elements);\n }\n }, {\n key: \"removePlugins\",\n value: function removePlugins() {\n for (var _len9 = arguments.length, args = new Array(_len9), _key9 = 0; _key9 < _len9; _key9++) {\n args[_key9] = arguments[_key9];\n }\n\n this._each('unregister', args, this.plugins);\n }\n }, {\n key: \"removeScales\",\n value: function removeScales() {\n for (var _len10 = arguments.length, args = new Array(_len10), _key10 = 0; _key10 < _len10; _key10++) {\n args[_key10] = arguments[_key10];\n }\n\n this._each('unregister', args, this.scales);\n }\n }, {\n key: \"_each\",\n value: function _each(method, args, typedRegistry) {\n var _this11 = this;\n\n _toConsumableArray(args).forEach(function (arg) {\n var reg = typedRegistry || _this11._getRegistryForType(arg);\n\n if (typedRegistry || reg.isForType(arg) || reg === _this11.plugins && arg.id) {\n _this11._exec(method, reg, arg);\n } else {\n each(arg, function (item) {\n var itemReg = typedRegistry || _this11._getRegistryForType(item);\n\n _this11._exec(method, itemReg, item);\n });\n }\n });\n }\n }, {\n key: \"_exec\",\n value: function _exec(method, registry, component) {\n var camelMethod = _capitalize(method);\n\n callback(component['before' + camelMethod], [], component);\n registry[method](component);\n callback(component['after' + camelMethod], [], component);\n }\n }, {\n key: \"_getRegistryForType\",\n value: function _getRegistryForType(type) {\n for (var i = 0; i < this._typedRegistries.length; i++) {\n var reg = this._typedRegistries[i];\n\n if (reg.isForType(type)) {\n return reg;\n }\n }\n\n return this.plugins;\n }\n }, {\n key: \"_get\",\n value: function _get(id, typedRegistry, type) {\n var item = typedRegistry.get(id);\n\n if (item === undefined) {\n throw new Error('\"' + id + '\" is not a registered ' + type + '.');\n }\n\n return item;\n }\n }]);\n\n return Registry;\n}();\n\nvar registry = new Registry();\n\nvar ScatterController = /*#__PURE__*/function (_DatasetController7) {\n _inherits(ScatterController, _DatasetController7);\n\n var _super9 = _createSuper(ScatterController);\n\n function ScatterController() {\n _classCallCheck(this, ScatterController);\n\n return _super9.apply(this, arguments);\n }\n\n _createClass(ScatterController, [{\n key: \"update\",\n value: function update(mode) {\n var meta = this._cachedMeta;\n var _meta$data2 = meta.data,\n points = _meta$data2 === void 0 ? [] : _meta$data2;\n var animationsDisabled = this.chart._animationsDisabled;\n\n var _getStartAndCountOfVi2 = _getStartAndCountOfVisiblePoints(meta, points, animationsDisabled),\n start = _getStartAndCountOfVi2.start,\n count = _getStartAndCountOfVi2.count;\n\n this._drawStart = start;\n this._drawCount = count;\n\n if (_scaleRangesChanged(meta)) {\n start = 0;\n count = points.length;\n }\n\n if (this.options.showLine) {\n var line = meta.dataset,\n _dataset = meta._dataset;\n line._chart = this.chart;\n line._datasetIndex = this.index;\n line._decimated = !!_dataset._decimated;\n line.points = points;\n var options = this.resolveDatasetElementOptions(mode);\n options.segment = this.options.segment;\n this.updateElement(line, undefined, {\n animated: !animationsDisabled,\n options: options\n }, mode);\n }\n\n this.updateElements(points, start, count, mode);\n }\n }, {\n key: \"addElements\",\n value: function addElements() {\n var showLine = this.options.showLine;\n\n if (!this.datasetElementType && showLine) {\n this.datasetElementType = registry.getElement('line');\n }\n\n _get(_getPrototypeOf(ScatterController.prototype), \"addElements\", this).call(this);\n }\n }, {\n key: \"updateElements\",\n value: function updateElements(points, start, count, mode) {\n var reset = mode === 'reset';\n var _this$_cachedMeta4 = this._cachedMeta,\n iScale = _this$_cachedMeta4.iScale,\n vScale = _this$_cachedMeta4.vScale,\n _stacked = _this$_cachedMeta4._stacked,\n _dataset = _this$_cachedMeta4._dataset;\n var firstOpts = this.resolveDataElementOptions(start, mode);\n var sharedOptions = this.getSharedOptions(firstOpts);\n var includeOptions = this.includeOptions(mode, sharedOptions);\n var iAxis = iScale.axis;\n var vAxis = vScale.axis;\n var _this$options10 = this.options,\n spanGaps = _this$options10.spanGaps,\n segment = _this$options10.segment;\n var maxGapLength = isNumber(spanGaps) ? spanGaps : Number.POSITIVE_INFINITY;\n var directUpdate = this.chart._animationsDisabled || reset || mode === 'none';\n var prevParsed = start > 0 && this.getParsed(start - 1);\n\n for (var i = start; i < start + count; ++i) {\n var point = points[i];\n var parsed = this.getParsed(i);\n var properties = directUpdate ? point : {};\n var nullData = isNullOrUndef(parsed[vAxis]);\n var iPixel = properties[iAxis] = iScale.getPixelForValue(parsed[iAxis], i);\n var vPixel = properties[vAxis] = reset || nullData ? vScale.getBasePixel() : vScale.getPixelForValue(_stacked ? this.applyStack(vScale, parsed, _stacked) : parsed[vAxis], i);\n properties.skip = isNaN(iPixel) || isNaN(vPixel) || nullData;\n properties.stop = i > 0 && Math.abs(parsed[iAxis] - prevParsed[iAxis]) > maxGapLength;\n\n if (segment) {\n properties.parsed = parsed;\n properties.raw = _dataset.data[i];\n }\n\n if (includeOptions) {\n properties.options = sharedOptions || this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n }\n\n if (!directUpdate) {\n this.updateElement(point, i, properties, mode);\n }\n\n prevParsed = parsed;\n }\n\n this.updateSharedOptions(sharedOptions, mode, firstOpts);\n }\n }, {\n key: \"getMaxOverflow\",\n value: function getMaxOverflow() {\n var meta = this._cachedMeta;\n var data = meta.data || [];\n\n if (!this.options.showLine) {\n var max = 0;\n\n for (var i = data.length - 1; i >= 0; --i) {\n max = Math.max(max, data[i].size(this.resolveDataElementOptions(i)) / 2);\n }\n\n return max > 0 && max;\n }\n\n var dataset = meta.dataset;\n var border = dataset.options && dataset.options.borderWidth || 0;\n\n if (!data.length) {\n return border;\n }\n\n var firstPoint = data[0].size(this.resolveDataElementOptions(0));\n var lastPoint = data[data.length - 1].size(this.resolveDataElementOptions(data.length - 1));\n return Math.max(border, firstPoint, lastPoint) / 2;\n }\n }]);\n\n return ScatterController;\n}(DatasetController);\n\nScatterController.id = 'scatter';\nScatterController.defaults = {\n datasetElementType: false,\n dataElementType: 'point',\n showLine: false,\n fill: false\n};\nScatterController.overrides = {\n interaction: {\n mode: 'point'\n },\n plugins: {\n tooltip: {\n callbacks: {\n title: function title() {\n return '';\n },\n label: function label(item) {\n return '(' + item.label + ', ' + item.formattedValue + ')';\n }\n }\n }\n },\n scales: {\n x: {\n type: 'linear'\n },\n y: {\n type: 'linear'\n }\n }\n};\nvar controllers = /*#__PURE__*/Object.freeze({\n __proto__: null,\n BarController: BarController,\n BubbleController: BubbleController,\n DoughnutController: DoughnutController,\n LineController: LineController,\n PolarAreaController: PolarAreaController,\n PieController: PieController,\n RadarController: RadarController,\n ScatterController: ScatterController\n});\n\nfunction abstract() {\n throw new Error('This method is not implemented: Check that a complete date adapter is provided.');\n}\n\nvar DateAdapter = /*#__PURE__*/function () {\n function DateAdapter(options) {\n _classCallCheck(this, DateAdapter);\n\n this.options = options || {};\n }\n\n _createClass(DateAdapter, [{\n key: \"init\",\n value: function init(chartOptions) {}\n }, {\n key: \"formats\",\n value: function formats() {\n return abstract();\n }\n }, {\n key: \"parse\",\n value: function parse(value, format) {\n return abstract();\n }\n }, {\n key: \"format\",\n value: function format(timestamp, _format) {\n return abstract();\n }\n }, {\n key: \"add\",\n value: function add(timestamp, amount, unit) {\n return abstract();\n }\n }, {\n key: \"diff\",\n value: function diff(a, b, unit) {\n return abstract();\n }\n }, {\n key: \"startOf\",\n value: function startOf(timestamp, unit, weekday) {\n return abstract();\n }\n }, {\n key: \"endOf\",\n value: function endOf(timestamp, unit) {\n return abstract();\n }\n }]);\n\n return DateAdapter;\n}();\n\nDateAdapter.override = function (members) {\n Object.assign(DateAdapter.prototype, members);\n};\n\nvar adapters = {\n _date: DateAdapter\n};\n\nfunction binarySearch(metaset, axis, value, intersect) {\n var controller = metaset.controller,\n data = metaset.data,\n _sorted = metaset._sorted;\n var iScale = controller._cachedMeta.iScale;\n\n if (iScale && axis === iScale.axis && axis !== 'r' && _sorted && data.length) {\n var lookupMethod = iScale._reversePixels ? _rlookupByKey : _lookupByKey;\n\n if (!intersect) {\n return lookupMethod(data, axis, value);\n } else if (controller._sharedOptions) {\n var el = data[0];\n var range = typeof el.getRange === 'function' && el.getRange(axis);\n\n if (range) {\n var start = lookupMethod(data, axis, value - range);\n var end = lookupMethod(data, axis, value + range);\n return {\n lo: start.lo,\n hi: end.hi\n };\n }\n }\n }\n\n return {\n lo: 0,\n hi: data.length - 1\n };\n}\n\nfunction evaluateInteractionItems(chart, axis, position, handler, intersect) {\n var metasets = chart.getSortedVisibleDatasetMetas();\n var value = position[axis];\n\n for (var i = 0, ilen = metasets.length; i < ilen; ++i) {\n var _metasets$i = metasets[i],\n _index2 = _metasets$i.index,\n data = _metasets$i.data;\n\n var _binarySearch = binarySearch(metasets[i], axis, value, intersect),\n lo = _binarySearch.lo,\n hi = _binarySearch.hi;\n\n for (var j = lo; j <= hi; ++j) {\n var element = data[j];\n\n if (!element.skip) {\n handler(element, _index2, j);\n }\n }\n }\n}\n\nfunction getDistanceMetricForAxis(axis) {\n var useX = axis.indexOf('x') !== -1;\n var useY = axis.indexOf('y') !== -1;\n return function (pt1, pt2) {\n var deltaX = useX ? Math.abs(pt1.x - pt2.x) : 0;\n var deltaY = useY ? Math.abs(pt1.y - pt2.y) : 0;\n return Math.sqrt(Math.pow(deltaX, 2) + Math.pow(deltaY, 2));\n };\n}\n\nfunction getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible) {\n var items = [];\n\n if (!includeInvisible && !chart.isPointInArea(position)) {\n return items;\n }\n\n var evaluationFunc = function evaluationFunc(element, datasetIndex, index) {\n if (!includeInvisible && !_isPointInArea(element, chart.chartArea, 0)) {\n return;\n }\n\n if (element.inRange(position.x, position.y, useFinalPosition)) {\n items.push({\n element: element,\n datasetIndex: datasetIndex,\n index: index\n });\n }\n };\n\n evaluateInteractionItems(chart, axis, position, evaluationFunc, true);\n return items;\n}\n\nfunction getNearestRadialItems(chart, position, axis, useFinalPosition) {\n var items = [];\n\n function evaluationFunc(element, datasetIndex, index) {\n var _element$getProps = element.getProps(['startAngle', 'endAngle'], useFinalPosition),\n startAngle = _element$getProps.startAngle,\n endAngle = _element$getProps.endAngle;\n\n var _getAngleFromPoint = getAngleFromPoint(element, {\n x: position.x,\n y: position.y\n }),\n angle = _getAngleFromPoint.angle;\n\n if (_angleBetween(angle, startAngle, endAngle)) {\n items.push({\n element: element,\n datasetIndex: datasetIndex,\n index: index\n });\n }\n }\n\n evaluateInteractionItems(chart, axis, position, evaluationFunc);\n return items;\n}\n\nfunction getNearestCartesianItems(chart, position, axis, intersect, useFinalPosition, includeInvisible) {\n var items = [];\n var distanceMetric = getDistanceMetricForAxis(axis);\n var minDistance = Number.POSITIVE_INFINITY;\n\n function evaluationFunc(element, datasetIndex, index) {\n var inRange = element.inRange(position.x, position.y, useFinalPosition);\n\n if (intersect && !inRange) {\n return;\n }\n\n var center = element.getCenterPoint(useFinalPosition);\n var pointInArea = !!includeInvisible || chart.isPointInArea(center);\n\n if (!pointInArea && !inRange) {\n return;\n }\n\n var distance = distanceMetric(position, center);\n\n if (distance < minDistance) {\n items = [{\n element: element,\n datasetIndex: datasetIndex,\n index: index\n }];\n minDistance = distance;\n } else if (distance === minDistance) {\n items.push({\n element: element,\n datasetIndex: datasetIndex,\n index: index\n });\n }\n }\n\n evaluateInteractionItems(chart, axis, position, evaluationFunc);\n return items;\n}\n\nfunction getNearestItems(chart, position, axis, intersect, useFinalPosition, includeInvisible) {\n if (!includeInvisible && !chart.isPointInArea(position)) {\n return [];\n }\n\n return axis === 'r' && !intersect ? getNearestRadialItems(chart, position, axis, useFinalPosition) : getNearestCartesianItems(chart, position, axis, intersect, useFinalPosition, includeInvisible);\n}\n\nfunction getAxisItems(chart, position, axis, intersect, useFinalPosition) {\n var items = [];\n var rangeMethod = axis === 'x' ? 'inXRange' : 'inYRange';\n var intersectsItem = false;\n evaluateInteractionItems(chart, axis, position, function (element, datasetIndex, index) {\n if (element[rangeMethod](position[axis], useFinalPosition)) {\n items.push({\n element: element,\n datasetIndex: datasetIndex,\n index: index\n });\n intersectsItem = intersectsItem || element.inRange(position.x, position.y, useFinalPosition);\n }\n });\n\n if (intersect && !intersectsItem) {\n return [];\n }\n\n return items;\n}\n\nvar Interaction = {\n evaluateInteractionItems: evaluateInteractionItems,\n modes: {\n index: function index(chart, e, options, useFinalPosition) {\n var position = getRelativePosition(e, chart);\n var axis = options.axis || 'x';\n var includeInvisible = options.includeInvisible || false;\n var items = options.intersect ? getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible) : getNearestItems(chart, position, axis, false, useFinalPosition, includeInvisible);\n var elements = [];\n\n if (!items.length) {\n return [];\n }\n\n chart.getSortedVisibleDatasetMetas().forEach(function (meta) {\n var index = items[0].index;\n var element = meta.data[index];\n\n if (element && !element.skip) {\n elements.push({\n element: element,\n datasetIndex: meta.index,\n index: index\n });\n }\n });\n return elements;\n },\n dataset: function dataset(chart, e, options, useFinalPosition) {\n var position = getRelativePosition(e, chart);\n var axis = options.axis || 'xy';\n var includeInvisible = options.includeInvisible || false;\n var items = options.intersect ? getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible) : getNearestItems(chart, position, axis, false, useFinalPosition, includeInvisible);\n\n if (items.length > 0) {\n var datasetIndex = items[0].datasetIndex;\n var data = chart.getDatasetMeta(datasetIndex).data;\n items = [];\n\n for (var i = 0; i < data.length; ++i) {\n items.push({\n element: data[i],\n datasetIndex: datasetIndex,\n index: i\n });\n }\n }\n\n return items;\n },\n point: function point(chart, e, options, useFinalPosition) {\n var position = getRelativePosition(e, chart);\n var axis = options.axis || 'xy';\n var includeInvisible = options.includeInvisible || false;\n return getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible);\n },\n nearest: function nearest(chart, e, options, useFinalPosition) {\n var position = getRelativePosition(e, chart);\n var axis = options.axis || 'xy';\n var includeInvisible = options.includeInvisible || false;\n return getNearestItems(chart, position, axis, options.intersect, useFinalPosition, includeInvisible);\n },\n x: function x(chart, e, options, useFinalPosition) {\n var position = getRelativePosition(e, chart);\n return getAxisItems(chart, position, 'x', options.intersect, useFinalPosition);\n },\n y: function y(chart, e, options, useFinalPosition) {\n var position = getRelativePosition(e, chart);\n return getAxisItems(chart, position, 'y', options.intersect, useFinalPosition);\n }\n }\n};\nvar STATIC_POSITIONS = ['left', 'top', 'right', 'bottom'];\n\nfunction filterByPosition(array, position) {\n return array.filter(function (v) {\n return v.pos === position;\n });\n}\n\nfunction filterDynamicPositionByAxis(array, axis) {\n return array.filter(function (v) {\n return STATIC_POSITIONS.indexOf(v.pos) === -1 && v.box.axis === axis;\n });\n}\n\nfunction sortByWeight(array, reverse) {\n return array.sort(function (a, b) {\n var v0 = reverse ? b : a;\n var v1 = reverse ? a : b;\n return v0.weight === v1.weight ? v0.index - v1.index : v0.weight - v1.weight;\n });\n}\n\nfunction wrapBoxes(boxes) {\n var layoutBoxes = [];\n var i, ilen, box, pos, stack, stackWeight;\n\n for (i = 0, ilen = (boxes || []).length; i < ilen; ++i) {\n box = boxes[i];\n var _box = box;\n pos = _box.position;\n var _box$options = _box.options;\n stack = _box$options.stack;\n var _box$options$stackWei = _box$options.stackWeight;\n stackWeight = _box$options$stackWei === void 0 ? 1 : _box$options$stackWei;\n layoutBoxes.push({\n index: i,\n box: box,\n pos: pos,\n horizontal: box.isHorizontal(),\n weight: box.weight,\n stack: stack && pos + stack,\n stackWeight: stackWeight\n });\n }\n\n return layoutBoxes;\n}\n\nfunction buildStacks(layouts) {\n var stacks = {};\n\n var _iterator6 = _createForOfIteratorHelper(layouts),\n _step6;\n\n try {\n for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {\n var wrap = _step6.value;\n var stack = wrap.stack,\n pos = wrap.pos,\n stackWeight = wrap.stackWeight;\n\n if (!stack || !STATIC_POSITIONS.includes(pos)) {\n continue;\n }\n\n var _stack = stacks[stack] || (stacks[stack] = {\n count: 0,\n placed: 0,\n weight: 0,\n size: 0\n });\n\n _stack.count++;\n _stack.weight += stackWeight;\n }\n } catch (err) {\n _iterator6.e(err);\n } finally {\n _iterator6.f();\n }\n\n return stacks;\n}\n\nfunction setLayoutDims(layouts, params) {\n var stacks = buildStacks(layouts);\n var vBoxMaxWidth = params.vBoxMaxWidth,\n hBoxMaxHeight = params.hBoxMaxHeight;\n var i, ilen, layout;\n\n for (i = 0, ilen = layouts.length; i < ilen; ++i) {\n layout = layouts[i];\n var fullSize = layout.box.fullSize;\n var stack = stacks[layout.stack];\n var factor = stack && layout.stackWeight / stack.weight;\n\n if (layout.horizontal) {\n layout.width = factor ? factor * vBoxMaxWidth : fullSize && params.availableWidth;\n layout.height = hBoxMaxHeight;\n } else {\n layout.width = vBoxMaxWidth;\n layout.height = factor ? factor * hBoxMaxHeight : fullSize && params.availableHeight;\n }\n }\n\n return stacks;\n}\n\nfunction buildLayoutBoxes(boxes) {\n var layoutBoxes = wrapBoxes(boxes);\n var fullSize = sortByWeight(layoutBoxes.filter(function (wrap) {\n return wrap.box.fullSize;\n }), true);\n var left = sortByWeight(filterByPosition(layoutBoxes, 'left'), true);\n var right = sortByWeight(filterByPosition(layoutBoxes, 'right'));\n var top = sortByWeight(filterByPosition(layoutBoxes, 'top'), true);\n var bottom = sortByWeight(filterByPosition(layoutBoxes, 'bottom'));\n var centerHorizontal = filterDynamicPositionByAxis(layoutBoxes, 'x');\n var centerVertical = filterDynamicPositionByAxis(layoutBoxes, 'y');\n return {\n fullSize: fullSize,\n leftAndTop: left.concat(top),\n rightAndBottom: right.concat(centerVertical).concat(bottom).concat(centerHorizontal),\n chartArea: filterByPosition(layoutBoxes, 'chartArea'),\n vertical: left.concat(right).concat(centerVertical),\n horizontal: top.concat(bottom).concat(centerHorizontal)\n };\n}\n\nfunction getCombinedMax(maxPadding, chartArea, a, b) {\n return Math.max(maxPadding[a], chartArea[a]) + Math.max(maxPadding[b], chartArea[b]);\n}\n\nfunction updateMaxPadding(maxPadding, boxPadding) {\n maxPadding.top = Math.max(maxPadding.top, boxPadding.top);\n maxPadding.left = Math.max(maxPadding.left, boxPadding.left);\n maxPadding.bottom = Math.max(maxPadding.bottom, boxPadding.bottom);\n maxPadding.right = Math.max(maxPadding.right, boxPadding.right);\n}\n\nfunction updateDims(chartArea, params, layout, stacks) {\n var pos = layout.pos,\n box = layout.box;\n var maxPadding = chartArea.maxPadding;\n\n if (!isObject(pos)) {\n if (layout.size) {\n chartArea[pos] -= layout.size;\n }\n\n var stack = stacks[layout.stack] || {\n size: 0,\n count: 1\n };\n stack.size = Math.max(stack.size, layout.horizontal ? box.height : box.width);\n layout.size = stack.size / stack.count;\n chartArea[pos] += layout.size;\n }\n\n if (box.getPadding) {\n updateMaxPadding(maxPadding, box.getPadding());\n }\n\n var newWidth = Math.max(0, params.outerWidth - getCombinedMax(maxPadding, chartArea, 'left', 'right'));\n var newHeight = Math.max(0, params.outerHeight - getCombinedMax(maxPadding, chartArea, 'top', 'bottom'));\n var widthChanged = newWidth !== chartArea.w;\n var heightChanged = newHeight !== chartArea.h;\n chartArea.w = newWidth;\n chartArea.h = newHeight;\n return layout.horizontal ? {\n same: widthChanged,\n other: heightChanged\n } : {\n same: heightChanged,\n other: widthChanged\n };\n}\n\nfunction handleMaxPadding(chartArea) {\n var maxPadding = chartArea.maxPadding;\n\n function updatePos(pos) {\n var change = Math.max(maxPadding[pos] - chartArea[pos], 0);\n chartArea[pos] += change;\n return change;\n }\n\n chartArea.y += updatePos('top');\n chartArea.x += updatePos('left');\n updatePos('right');\n updatePos('bottom');\n}\n\nfunction getMargins(horizontal, chartArea) {\n var maxPadding = chartArea.maxPadding;\n\n function marginForPositions(positions) {\n var margin = {\n left: 0,\n top: 0,\n right: 0,\n bottom: 0\n };\n positions.forEach(function (pos) {\n margin[pos] = Math.max(chartArea[pos], maxPadding[pos]);\n });\n return margin;\n }\n\n return horizontal ? marginForPositions(['left', 'right']) : marginForPositions(['top', 'bottom']);\n}\n\nfunction fitBoxes(boxes, chartArea, params, stacks) {\n var refitBoxes = [];\n var i, ilen, layout, box, refit, changed;\n\n for (i = 0, ilen = boxes.length, refit = 0; i < ilen; ++i) {\n layout = boxes[i];\n box = layout.box;\n box.update(layout.width || chartArea.w, layout.height || chartArea.h, getMargins(layout.horizontal, chartArea));\n\n var _updateDims = updateDims(chartArea, params, layout, stacks),\n same = _updateDims.same,\n other = _updateDims.other;\n\n refit |= same && refitBoxes.length;\n changed = changed || other;\n\n if (!box.fullSize) {\n refitBoxes.push(layout);\n }\n }\n\n return refit && fitBoxes(refitBoxes, chartArea, params, stacks) || changed;\n}\n\nfunction setBoxDims(box, left, top, width, height) {\n box.top = top;\n box.left = left;\n box.right = left + width;\n box.bottom = top + height;\n box.width = width;\n box.height = height;\n}\n\nfunction placeBoxes(boxes, chartArea, params, stacks) {\n var userPadding = params.padding;\n var x = chartArea.x,\n y = chartArea.y;\n\n var _iterator7 = _createForOfIteratorHelper(boxes),\n _step7;\n\n try {\n for (_iterator7.s(); !(_step7 = _iterator7.n()).done;) {\n var layout = _step7.value;\n var box = layout.box;\n var stack = stacks[layout.stack] || {\n count: 1,\n placed: 0,\n weight: 1\n };\n var weight = layout.stackWeight / stack.weight || 1;\n\n if (layout.horizontal) {\n var width = chartArea.w * weight;\n var height = stack.size || box.height;\n\n if (defined(stack.start)) {\n y = stack.start;\n }\n\n if (box.fullSize) {\n setBoxDims(box, userPadding.left, y, params.outerWidth - userPadding.right - userPadding.left, height);\n } else {\n setBoxDims(box, chartArea.left + stack.placed, y, width, height);\n }\n\n stack.start = y;\n stack.placed += width;\n y = box.bottom;\n } else {\n var _height = chartArea.h * weight;\n\n var _width = stack.size || box.width;\n\n if (defined(stack.start)) {\n x = stack.start;\n }\n\n if (box.fullSize) {\n setBoxDims(box, x, userPadding.top, _width, params.outerHeight - userPadding.bottom - userPadding.top);\n } else {\n setBoxDims(box, x, chartArea.top + stack.placed, _width, _height);\n }\n\n stack.start = x;\n stack.placed += _height;\n x = box.right;\n }\n }\n } catch (err) {\n _iterator7.e(err);\n } finally {\n _iterator7.f();\n }\n\n chartArea.x = x;\n chartArea.y = y;\n}\n\ndefaults.set('layout', {\n autoPadding: true,\n padding: {\n top: 0,\n right: 0,\n bottom: 0,\n left: 0\n }\n});\nvar layouts = {\n addBox: function addBox(chart, item) {\n if (!chart.boxes) {\n chart.boxes = [];\n }\n\n item.fullSize = item.fullSize || false;\n item.position = item.position || 'top';\n item.weight = item.weight || 0;\n\n item._layers = item._layers || function () {\n return [{\n z: 0,\n draw: function draw(chartArea) {\n item.draw(chartArea);\n }\n }];\n };\n\n chart.boxes.push(item);\n },\n removeBox: function removeBox(chart, layoutItem) {\n var index = chart.boxes ? chart.boxes.indexOf(layoutItem) : -1;\n\n if (index !== -1) {\n chart.boxes.splice(index, 1);\n }\n },\n configure: function configure(chart, item, options) {\n item.fullSize = options.fullSize;\n item.position = options.position;\n item.weight = options.weight;\n },\n update: function update(chart, width, height, minPadding) {\n if (!chart) {\n return;\n }\n\n var padding = toPadding(chart.options.layout.padding);\n var availableWidth = Math.max(width - padding.width, 0);\n var availableHeight = Math.max(height - padding.height, 0);\n var boxes = buildLayoutBoxes(chart.boxes);\n var verticalBoxes = boxes.vertical;\n var horizontalBoxes = boxes.horizontal;\n each(chart.boxes, function (box) {\n if (typeof box.beforeLayout === 'function') {\n box.beforeLayout();\n }\n });\n var visibleVerticalBoxCount = verticalBoxes.reduce(function (total, wrap) {\n return wrap.box.options && wrap.box.options.display === false ? total : total + 1;\n }, 0) || 1;\n var params = Object.freeze({\n outerWidth: width,\n outerHeight: height,\n padding: padding,\n availableWidth: availableWidth,\n availableHeight: availableHeight,\n vBoxMaxWidth: availableWidth / 2 / visibleVerticalBoxCount,\n hBoxMaxHeight: availableHeight / 2\n });\n var maxPadding = Object.assign({}, padding);\n updateMaxPadding(maxPadding, toPadding(minPadding));\n var chartArea = Object.assign({\n maxPadding: maxPadding,\n w: availableWidth,\n h: availableHeight,\n x: padding.left,\n y: padding.top\n }, padding);\n var stacks = setLayoutDims(verticalBoxes.concat(horizontalBoxes), params);\n fitBoxes(boxes.fullSize, chartArea, params, stacks);\n fitBoxes(verticalBoxes, chartArea, params, stacks);\n\n if (fitBoxes(horizontalBoxes, chartArea, params, stacks)) {\n fitBoxes(verticalBoxes, chartArea, params, stacks);\n }\n\n handleMaxPadding(chartArea);\n placeBoxes(boxes.leftAndTop, chartArea, params, stacks);\n chartArea.x += chartArea.w;\n chartArea.y += chartArea.h;\n placeBoxes(boxes.rightAndBottom, chartArea, params, stacks);\n chart.chartArea = {\n left: chartArea.left,\n top: chartArea.top,\n right: chartArea.left + chartArea.w,\n bottom: chartArea.top + chartArea.h,\n height: chartArea.h,\n width: chartArea.w\n };\n each(boxes.chartArea, function (layout) {\n var box = layout.box;\n Object.assign(box, chart.chartArea);\n box.update(chartArea.w, chartArea.h, {\n left: 0,\n top: 0,\n right: 0,\n bottom: 0\n });\n });\n }\n};\n\nvar BasePlatform = /*#__PURE__*/function () {\n function BasePlatform() {\n _classCallCheck(this, BasePlatform);\n }\n\n _createClass(BasePlatform, [{\n key: \"acquireContext\",\n value: function acquireContext(canvas, aspectRatio) {}\n }, {\n key: \"releaseContext\",\n value: function releaseContext(context) {\n return false;\n }\n }, {\n key: \"addEventListener\",\n value: function addEventListener(chart, type, listener) {}\n }, {\n key: \"removeEventListener\",\n value: function removeEventListener(chart, type, listener) {}\n }, {\n key: \"getDevicePixelRatio\",\n value: function getDevicePixelRatio() {\n return 1;\n }\n }, {\n key: \"getMaximumSize\",\n value: function getMaximumSize(element, width, height, aspectRatio) {\n width = Math.max(0, width || element.width);\n height = height || element.height;\n return {\n width: width,\n height: Math.max(0, aspectRatio ? Math.floor(width / aspectRatio) : height)\n };\n }\n }, {\n key: \"isAttached\",\n value: function isAttached(canvas) {\n return true;\n }\n }, {\n key: \"updateConfig\",\n value: function updateConfig(config) {}\n }]);\n\n return BasePlatform;\n}();\n\nvar BasicPlatform = /*#__PURE__*/function (_BasePlatform) {\n _inherits(BasicPlatform, _BasePlatform);\n\n var _super10 = _createSuper(BasicPlatform);\n\n function BasicPlatform() {\n _classCallCheck(this, BasicPlatform);\n\n return _super10.apply(this, arguments);\n }\n\n _createClass(BasicPlatform, [{\n key: \"acquireContext\",\n value: function acquireContext(item) {\n return item && item.getContext && item.getContext('2d') || null;\n }\n }, {\n key: \"updateConfig\",\n value: function updateConfig(config) {\n config.options.animation = false;\n }\n }]);\n\n return BasicPlatform;\n}(BasePlatform);\n\nvar EXPANDO_KEY = '$chartjs';\nvar EVENT_TYPES = {\n touchstart: 'mousedown',\n touchmove: 'mousemove',\n touchend: 'mouseup',\n pointerenter: 'mouseenter',\n pointerdown: 'mousedown',\n pointermove: 'mousemove',\n pointerup: 'mouseup',\n pointerleave: 'mouseout',\n pointerout: 'mouseout'\n};\n\nvar isNullOrEmpty = function isNullOrEmpty(value) {\n return value === null || value === '';\n};\n\nfunction initCanvas(canvas, aspectRatio) {\n var style = canvas.style;\n var renderHeight = canvas.getAttribute('height');\n var renderWidth = canvas.getAttribute('width');\n canvas[EXPANDO_KEY] = {\n initial: {\n height: renderHeight,\n width: renderWidth,\n style: {\n display: style.display,\n height: style.height,\n width: style.width\n }\n }\n };\n style.display = style.display || 'block';\n style.boxSizing = style.boxSizing || 'border-box';\n\n if (isNullOrEmpty(renderWidth)) {\n var displayWidth = readUsedSize(canvas, 'width');\n\n if (displayWidth !== undefined) {\n canvas.width = displayWidth;\n }\n }\n\n if (isNullOrEmpty(renderHeight)) {\n if (canvas.style.height === '') {\n canvas.height = canvas.width / (aspectRatio || 2);\n } else {\n var displayHeight = readUsedSize(canvas, 'height');\n\n if (displayHeight !== undefined) {\n canvas.height = displayHeight;\n }\n }\n }\n\n return canvas;\n}\n\nvar eventListenerOptions = supportsEventListenerOptions ? {\n passive: true\n} : false;\n\nfunction addListener(node, type, listener) {\n node.addEventListener(type, listener, eventListenerOptions);\n}\n\nfunction removeListener(chart, type, listener) {\n chart.canvas.removeEventListener(type, listener, eventListenerOptions);\n}\n\nfunction fromNativeEvent(event, chart) {\n var type = EVENT_TYPES[event.type] || event.type;\n\n var _getRelativePosition = getRelativePosition(event, chart),\n x = _getRelativePosition.x,\n y = _getRelativePosition.y;\n\n return {\n type: type,\n chart: chart,\n native: event,\n x: x !== undefined ? x : null,\n y: y !== undefined ? y : null\n };\n}\n\nfunction nodeListContains(nodeList, canvas) {\n var _iterator8 = _createForOfIteratorHelper(nodeList),\n _step8;\n\n try {\n for (_iterator8.s(); !(_step8 = _iterator8.n()).done;) {\n var node = _step8.value;\n\n if (node === canvas || node.contains(canvas)) {\n return true;\n }\n }\n } catch (err) {\n _iterator8.e(err);\n } finally {\n _iterator8.f();\n }\n}\n\nfunction createAttachObserver(chart, type, listener) {\n var canvas = chart.canvas;\n var observer = new MutationObserver(function (entries) {\n var trigger = false;\n\n var _iterator9 = _createForOfIteratorHelper(entries),\n _step9;\n\n try {\n for (_iterator9.s(); !(_step9 = _iterator9.n()).done;) {\n var entry = _step9.value;\n trigger = trigger || nodeListContains(entry.addedNodes, canvas);\n trigger = trigger && !nodeListContains(entry.removedNodes, canvas);\n }\n } catch (err) {\n _iterator9.e(err);\n } finally {\n _iterator9.f();\n }\n\n if (trigger) {\n listener();\n }\n });\n observer.observe(document, {\n childList: true,\n subtree: true\n });\n return observer;\n}\n\nfunction createDetachObserver(chart, type, listener) {\n var canvas = chart.canvas;\n var observer = new MutationObserver(function (entries) {\n var trigger = false;\n\n var _iterator10 = _createForOfIteratorHelper(entries),\n _step10;\n\n try {\n for (_iterator10.s(); !(_step10 = _iterator10.n()).done;) {\n var entry = _step10.value;\n trigger = trigger || nodeListContains(entry.removedNodes, canvas);\n trigger = trigger && !nodeListContains(entry.addedNodes, canvas);\n }\n } catch (err) {\n _iterator10.e(err);\n } finally {\n _iterator10.f();\n }\n\n if (trigger) {\n listener();\n }\n });\n observer.observe(document, {\n childList: true,\n subtree: true\n });\n return observer;\n}\n\nvar drpListeningCharts = new Map();\nvar oldDevicePixelRatio = 0;\n\nfunction onWindowResize() {\n var dpr = window.devicePixelRatio;\n\n if (dpr === oldDevicePixelRatio) {\n return;\n }\n\n oldDevicePixelRatio = dpr;\n drpListeningCharts.forEach(function (resize, chart) {\n if (chart.currentDevicePixelRatio !== dpr) {\n resize();\n }\n });\n}\n\nfunction listenDevicePixelRatioChanges(chart, resize) {\n if (!drpListeningCharts.size) {\n window.addEventListener('resize', onWindowResize);\n }\n\n drpListeningCharts.set(chart, resize);\n}\n\nfunction unlistenDevicePixelRatioChanges(chart) {\n drpListeningCharts.delete(chart);\n\n if (!drpListeningCharts.size) {\n window.removeEventListener('resize', onWindowResize);\n }\n}\n\nfunction createResizeObserver(chart, type, listener) {\n var canvas = chart.canvas;\n\n var container = canvas && _getParentNode(canvas);\n\n if (!container) {\n return;\n }\n\n var resize = throttled(function (width, height) {\n var w = container.clientWidth;\n listener(width, height);\n\n if (w < container.clientWidth) {\n listener();\n }\n }, window);\n var observer = new ResizeObserver(function (entries) {\n var entry = entries[0];\n var width = entry.contentRect.width;\n var height = entry.contentRect.height;\n\n if (width === 0 && height === 0) {\n return;\n }\n\n resize(width, height);\n });\n observer.observe(container);\n listenDevicePixelRatioChanges(chart, resize);\n return observer;\n}\n\nfunction releaseObserver(chart, type, observer) {\n if (observer) {\n observer.disconnect();\n }\n\n if (type === 'resize') {\n unlistenDevicePixelRatioChanges(chart);\n }\n}\n\nfunction createProxyAndListen(chart, type, listener) {\n var canvas = chart.canvas;\n var proxy = throttled(function (event) {\n if (chart.ctx !== null) {\n listener(fromNativeEvent(event, chart));\n }\n }, chart, function (args) {\n var event = args[0];\n return [event, event.offsetX, event.offsetY];\n });\n addListener(canvas, type, proxy);\n return proxy;\n}\n\nvar DomPlatform = /*#__PURE__*/function (_BasePlatform2) {\n _inherits(DomPlatform, _BasePlatform2);\n\n var _super11 = _createSuper(DomPlatform);\n\n function DomPlatform() {\n _classCallCheck(this, DomPlatform);\n\n return _super11.apply(this, arguments);\n }\n\n _createClass(DomPlatform, [{\n key: \"acquireContext\",\n value: function acquireContext(canvas, aspectRatio) {\n var context = canvas && canvas.getContext && canvas.getContext('2d');\n\n if (context && context.canvas === canvas) {\n initCanvas(canvas, aspectRatio);\n return context;\n }\n\n return null;\n }\n }, {\n key: \"releaseContext\",\n value: function releaseContext(context) {\n var canvas = context.canvas;\n\n if (!canvas[EXPANDO_KEY]) {\n return false;\n }\n\n var initial = canvas[EXPANDO_KEY].initial;\n ['height', 'width'].forEach(function (prop) {\n var value = initial[prop];\n\n if (isNullOrUndef(value)) {\n canvas.removeAttribute(prop);\n } else {\n canvas.setAttribute(prop, value);\n }\n });\n var style = initial.style || {};\n Object.keys(style).forEach(function (key) {\n canvas.style[key] = style[key];\n });\n canvas.width = canvas.width;\n delete canvas[EXPANDO_KEY];\n return true;\n }\n }, {\n key: \"addEventListener\",\n value: function addEventListener(chart, type, listener) {\n this.removeEventListener(chart, type);\n var proxies = chart.$proxies || (chart.$proxies = {});\n var handlers = {\n attach: createAttachObserver,\n detach: createDetachObserver,\n resize: createResizeObserver\n };\n var handler = handlers[type] || createProxyAndListen;\n proxies[type] = handler(chart, type, listener);\n }\n }, {\n key: \"removeEventListener\",\n value: function removeEventListener(chart, type) {\n var proxies = chart.$proxies || (chart.$proxies = {});\n var proxy = proxies[type];\n\n if (!proxy) {\n return;\n }\n\n var handlers = {\n attach: releaseObserver,\n detach: releaseObserver,\n resize: releaseObserver\n };\n var handler = handlers[type] || removeListener;\n handler(chart, type, proxy);\n proxies[type] = undefined;\n }\n }, {\n key: \"getDevicePixelRatio\",\n value: function getDevicePixelRatio() {\n return window.devicePixelRatio;\n }\n }, {\n key: \"getMaximumSize\",\n value: function getMaximumSize(canvas, width, height, aspectRatio) {\n return _getMaximumSize(canvas, width, height, aspectRatio);\n }\n }, {\n key: \"isAttached\",\n value: function isAttached(canvas) {\n var container = _getParentNode(canvas);\n\n return !!(container && container.isConnected);\n }\n }]);\n\n return DomPlatform;\n}(BasePlatform);\n\nfunction _detectPlatform(canvas) {\n if (!_isDomSupported() || typeof OffscreenCanvas !== 'undefined' && canvas instanceof OffscreenCanvas) {\n return BasicPlatform;\n }\n\n return DomPlatform;\n}\n\nvar PluginService = /*#__PURE__*/function () {\n function PluginService() {\n _classCallCheck(this, PluginService);\n\n this._init = [];\n }\n\n _createClass(PluginService, [{\n key: \"notify\",\n value: function notify(chart, hook, args, filter) {\n if (hook === 'beforeInit') {\n this._init = this._createDescriptors(chart, true);\n\n this._notify(this._init, chart, 'install');\n }\n\n var descriptors = filter ? this._descriptors(chart).filter(filter) : this._descriptors(chart);\n\n var result = this._notify(descriptors, chart, hook, args);\n\n if (hook === 'afterDestroy') {\n this._notify(descriptors, chart, 'stop');\n\n this._notify(this._init, chart, 'uninstall');\n }\n\n return result;\n }\n }, {\n key: \"_notify\",\n value: function _notify(descriptors, chart, hook, args) {\n args = args || {};\n\n var _iterator11 = _createForOfIteratorHelper(descriptors),\n _step11;\n\n try {\n for (_iterator11.s(); !(_step11 = _iterator11.n()).done;) {\n var descriptor = _step11.value;\n var plugin = descriptor.plugin;\n var method = plugin[hook];\n var params = [chart, args, descriptor.options];\n\n if (callback(method, params, plugin) === false && args.cancelable) {\n return false;\n }\n }\n } catch (err) {\n _iterator11.e(err);\n } finally {\n _iterator11.f();\n }\n\n return true;\n }\n }, {\n key: \"invalidate\",\n value: function invalidate() {\n if (!isNullOrUndef(this._cache)) {\n this._oldCache = this._cache;\n this._cache = undefined;\n }\n }\n }, {\n key: \"_descriptors\",\n value: function _descriptors(chart) {\n if (this._cache) {\n return this._cache;\n }\n\n var descriptors = this._cache = this._createDescriptors(chart);\n\n this._notifyStateChanges(chart);\n\n return descriptors;\n }\n }, {\n key: \"_createDescriptors\",\n value: function _createDescriptors(chart, all) {\n var config = chart && chart.config;\n var options = valueOrDefault(config.options && config.options.plugins, {});\n var plugins = allPlugins(config);\n return options === false && !all ? [] : createDescriptors(chart, plugins, options, all);\n }\n }, {\n key: \"_notifyStateChanges\",\n value: function _notifyStateChanges(chart) {\n var previousDescriptors = this._oldCache || [];\n var descriptors = this._cache;\n\n var diff = function diff(a, b) {\n return a.filter(function (x) {\n return !b.some(function (y) {\n return x.plugin.id === y.plugin.id;\n });\n });\n };\n\n this._notify(diff(previousDescriptors, descriptors), chart, 'stop');\n\n this._notify(diff(descriptors, previousDescriptors), chart, 'start');\n }\n }]);\n\n return PluginService;\n}();\n\nfunction allPlugins(config) {\n var localIds = {};\n var plugins = [];\n var keys = Object.keys(registry.plugins.items);\n\n for (var i = 0; i < keys.length; i++) {\n plugins.push(registry.getPlugin(keys[i]));\n }\n\n var local = config.plugins || [];\n\n for (var _i = 0; _i < local.length; _i++) {\n var plugin = local[_i];\n\n if (plugins.indexOf(plugin) === -1) {\n plugins.push(plugin);\n localIds[plugin.id] = true;\n }\n }\n\n return {\n plugins: plugins,\n localIds: localIds\n };\n}\n\nfunction getOpts(options, all) {\n if (!all && options === false) {\n return null;\n }\n\n if (options === true) {\n return {};\n }\n\n return options;\n}\n\nfunction createDescriptors(chart, _ref2, options, all) {\n var plugins = _ref2.plugins,\n localIds = _ref2.localIds;\n var result = [];\n var context = chart.getContext();\n\n var _iterator12 = _createForOfIteratorHelper(plugins),\n _step12;\n\n try {\n for (_iterator12.s(); !(_step12 = _iterator12.n()).done;) {\n var plugin = _step12.value;\n var id = plugin.id;\n var opts = getOpts(options[id], all);\n\n if (opts === null) {\n continue;\n }\n\n result.push({\n plugin: plugin,\n options: pluginOpts(chart.config, {\n plugin: plugin,\n local: localIds[id]\n }, opts, context)\n });\n }\n } catch (err) {\n _iterator12.e(err);\n } finally {\n _iterator12.f();\n }\n\n return result;\n}\n\nfunction pluginOpts(config, _ref3, opts, context) {\n var plugin = _ref3.plugin,\n local = _ref3.local;\n var keys = config.pluginScopeKeys(plugin);\n var scopes = config.getOptionScopes(opts, keys);\n\n if (local && plugin.defaults) {\n scopes.push(plugin.defaults);\n }\n\n return config.createResolver(scopes, context, [''], {\n scriptable: false,\n indexable: false,\n allKeys: true\n });\n}\n\nfunction getIndexAxis(type, options) {\n var datasetDefaults = defaults.datasets[type] || {};\n var datasetOptions = (options.datasets || {})[type] || {};\n return datasetOptions.indexAxis || options.indexAxis || datasetDefaults.indexAxis || 'x';\n}\n\nfunction getAxisFromDefaultScaleID(id, indexAxis) {\n var axis = id;\n\n if (id === '_index_') {\n axis = indexAxis;\n } else if (id === '_value_') {\n axis = indexAxis === 'x' ? 'y' : 'x';\n }\n\n return axis;\n}\n\nfunction getDefaultScaleIDFromAxis(axis, indexAxis) {\n return axis === indexAxis ? '_index_' : '_value_';\n}\n\nfunction axisFromPosition(position) {\n if (position === 'top' || position === 'bottom') {\n return 'x';\n }\n\n if (position === 'left' || position === 'right') {\n return 'y';\n }\n}\n\nfunction determineAxis(id, scaleOptions) {\n if (id === 'x' || id === 'y') {\n return id;\n }\n\n return scaleOptions.axis || axisFromPosition(scaleOptions.position) || id.charAt(0).toLowerCase();\n}\n\nfunction mergeScaleConfig(config, options) {\n var chartDefaults = overrides[config.type] || {\n scales: {}\n };\n var configScales = options.scales || {};\n var chartIndexAxis = getIndexAxis(config.type, options);\n var firstIDs = Object.create(null);\n var scales = Object.create(null);\n Object.keys(configScales).forEach(function (id) {\n var scaleConf = configScales[id];\n\n if (!isObject(scaleConf)) {\n return console.error(\"Invalid scale configuration for scale: \".concat(id));\n }\n\n if (scaleConf._proxy) {\n return console.warn(\"Ignoring resolver passed as options for scale: \".concat(id));\n }\n\n var axis = determineAxis(id, scaleConf);\n var defaultId = getDefaultScaleIDFromAxis(axis, chartIndexAxis);\n var defaultScaleOptions = chartDefaults.scales || {};\n firstIDs[axis] = firstIDs[axis] || id;\n scales[id] = mergeIf(Object.create(null), [{\n axis: axis\n }, scaleConf, defaultScaleOptions[axis], defaultScaleOptions[defaultId]]);\n });\n config.data.datasets.forEach(function (dataset) {\n var type = dataset.type || config.type;\n var indexAxis = dataset.indexAxis || getIndexAxis(type, options);\n var datasetDefaults = overrides[type] || {};\n var defaultScaleOptions = datasetDefaults.scales || {};\n Object.keys(defaultScaleOptions).forEach(function (defaultID) {\n var axis = getAxisFromDefaultScaleID(defaultID, indexAxis);\n var id = dataset[axis + 'AxisID'] || firstIDs[axis] || axis;\n scales[id] = scales[id] || Object.create(null);\n mergeIf(scales[id], [{\n axis: axis\n }, configScales[id], defaultScaleOptions[defaultID]]);\n });\n });\n Object.keys(scales).forEach(function (key) {\n var scale = scales[key];\n mergeIf(scale, [defaults.scales[scale.type], defaults.scale]);\n });\n return scales;\n}\n\nfunction initOptions(config) {\n var options = config.options || (config.options = {});\n options.plugins = valueOrDefault(options.plugins, {});\n options.scales = mergeScaleConfig(config, options);\n}\n\nfunction initData(data) {\n data = data || {};\n data.datasets = data.datasets || [];\n data.labels = data.labels || [];\n return data;\n}\n\nfunction initConfig(config) {\n config = config || {};\n config.data = initData(config.data);\n initOptions(config);\n return config;\n}\n\nvar keyCache = new Map();\nvar keysCached = new Set();\n\nfunction cachedKeys(cacheKey, generate) {\n var keys = keyCache.get(cacheKey);\n\n if (!keys) {\n keys = generate();\n keyCache.set(cacheKey, keys);\n keysCached.add(keys);\n }\n\n return keys;\n}\n\nvar addIfFound = function addIfFound(set, obj, key) {\n var opts = resolveObjectKey(obj, key);\n\n if (opts !== undefined) {\n set.add(opts);\n }\n};\n\nvar Config = /*#__PURE__*/function () {\n function Config(config) {\n _classCallCheck(this, Config);\n\n this._config = initConfig(config);\n this._scopeCache = new Map();\n this._resolverCache = new Map();\n }\n\n _createClass(Config, [{\n key: \"platform\",\n get: function get() {\n return this._config.platform;\n }\n }, {\n key: \"type\",\n get: function get() {\n return this._config.type;\n },\n set: function set(type) {\n this._config.type = type;\n }\n }, {\n key: \"data\",\n get: function get() {\n return this._config.data;\n },\n set: function set(data) {\n this._config.data = initData(data);\n }\n }, {\n key: \"options\",\n get: function get() {\n return this._config.options;\n },\n set: function set(options) {\n this._config.options = options;\n }\n }, {\n key: \"plugins\",\n get: function get() {\n return this._config.plugins;\n }\n }, {\n key: \"update\",\n value: function update() {\n var config = this._config;\n this.clearCache();\n initOptions(config);\n }\n }, {\n key: \"clearCache\",\n value: function clearCache() {\n this._scopeCache.clear();\n\n this._resolverCache.clear();\n }\n }, {\n key: \"datasetScopeKeys\",\n value: function datasetScopeKeys(datasetType) {\n return cachedKeys(datasetType, function () {\n return [[\"datasets.\".concat(datasetType), '']];\n });\n }\n }, {\n key: \"datasetAnimationScopeKeys\",\n value: function datasetAnimationScopeKeys(datasetType, transition) {\n return cachedKeys(\"\".concat(datasetType, \".transition.\").concat(transition), function () {\n return [[\"datasets.\".concat(datasetType, \".transitions.\").concat(transition), \"transitions.\".concat(transition)], [\"datasets.\".concat(datasetType), '']];\n });\n }\n }, {\n key: \"datasetElementScopeKeys\",\n value: function datasetElementScopeKeys(datasetType, elementType) {\n return cachedKeys(\"\".concat(datasetType, \"-\").concat(elementType), function () {\n return [[\"datasets.\".concat(datasetType, \".elements.\").concat(elementType), \"datasets.\".concat(datasetType), \"elements.\".concat(elementType), '']];\n });\n }\n }, {\n key: \"pluginScopeKeys\",\n value: function pluginScopeKeys(plugin) {\n var id = plugin.id;\n var type = this.type;\n return cachedKeys(\"\".concat(type, \"-plugin-\").concat(id), function () {\n return [[\"plugins.\".concat(id)].concat(_toConsumableArray(plugin.additionalOptionScopes || []))];\n });\n }\n }, {\n key: \"_cachedScopes\",\n value: function _cachedScopes(mainScope, resetCache) {\n var _scopeCache = this._scopeCache;\n\n var cache = _scopeCache.get(mainScope);\n\n if (!cache || resetCache) {\n cache = new Map();\n\n _scopeCache.set(mainScope, cache);\n }\n\n return cache;\n }\n }, {\n key: \"getOptionScopes\",\n value: function getOptionScopes(mainScope, keyLists, resetCache) {\n var options = this.options,\n type = this.type;\n\n var cache = this._cachedScopes(mainScope, resetCache);\n\n var cached = cache.get(keyLists);\n\n if (cached) {\n return cached;\n }\n\n var scopes = new Set();\n keyLists.forEach(function (keys) {\n if (mainScope) {\n scopes.add(mainScope);\n keys.forEach(function (key) {\n return addIfFound(scopes, mainScope, key);\n });\n }\n\n keys.forEach(function (key) {\n return addIfFound(scopes, options, key);\n });\n keys.forEach(function (key) {\n return addIfFound(scopes, overrides[type] || {}, key);\n });\n keys.forEach(function (key) {\n return addIfFound(scopes, defaults, key);\n });\n keys.forEach(function (key) {\n return addIfFound(scopes, descriptors, key);\n });\n });\n var array = Array.from(scopes);\n\n if (array.length === 0) {\n array.push(Object.create(null));\n }\n\n if (keysCached.has(keyLists)) {\n cache.set(keyLists, array);\n }\n\n return array;\n }\n }, {\n key: \"chartOptionScopes\",\n value: function chartOptionScopes() {\n var options = this.options,\n type = this.type;\n return [options, overrides[type] || {}, defaults.datasets[type] || {}, {\n type: type\n }, defaults, descriptors];\n }\n }, {\n key: \"resolveNamedOptions\",\n value: function resolveNamedOptions(scopes, names, context) {\n var prefixes = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : [''];\n var result = {\n $shared: true\n };\n\n var _getResolver = getResolver(this._resolverCache, scopes, prefixes),\n resolver = _getResolver.resolver,\n subPrefixes = _getResolver.subPrefixes;\n\n var options = resolver;\n\n if (needContext(resolver, names)) {\n result.$shared = false;\n context = isFunction(context) ? context() : context;\n var subResolver = this.createResolver(scopes, context, subPrefixes);\n options = _attachContext(resolver, context, subResolver);\n }\n\n var _iterator13 = _createForOfIteratorHelper(names),\n _step13;\n\n try {\n for (_iterator13.s(); !(_step13 = _iterator13.n()).done;) {\n var prop = _step13.value;\n result[prop] = options[prop];\n }\n } catch (err) {\n _iterator13.e(err);\n } finally {\n _iterator13.f();\n }\n\n return result;\n }\n }, {\n key: \"createResolver\",\n value: function createResolver(scopes, context) {\n var prefixes = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [''];\n var descriptorDefaults = arguments.length > 3 ? arguments[3] : undefined;\n\n var _getResolver2 = getResolver(this._resolverCache, scopes, prefixes),\n resolver = _getResolver2.resolver;\n\n return isObject(context) ? _attachContext(resolver, context, undefined, descriptorDefaults) : resolver;\n }\n }]);\n\n return Config;\n}();\n\nfunction getResolver(resolverCache, scopes, prefixes) {\n var cache = resolverCache.get(scopes);\n\n if (!cache) {\n cache = new Map();\n resolverCache.set(scopes, cache);\n }\n\n var cacheKey = prefixes.join();\n var cached = cache.get(cacheKey);\n\n if (!cached) {\n var resolver = _createResolver(scopes, prefixes);\n\n cached = {\n resolver: resolver,\n subPrefixes: prefixes.filter(function (p) {\n return !p.toLowerCase().includes('hover');\n })\n };\n cache.set(cacheKey, cached);\n }\n\n return cached;\n}\n\nvar hasFunction = function hasFunction(value) {\n return isObject(value) && Object.getOwnPropertyNames(value).reduce(function (acc, key) {\n return acc || isFunction(value[key]);\n }, false);\n};\n\nfunction needContext(proxy, names) {\n var _descriptors2 = _descriptors(proxy),\n isScriptable = _descriptors2.isScriptable,\n isIndexable = _descriptors2.isIndexable;\n\n var _iterator14 = _createForOfIteratorHelper(names),\n _step14;\n\n try {\n for (_iterator14.s(); !(_step14 = _iterator14.n()).done;) {\n var prop = _step14.value;\n var scriptable = isScriptable(prop);\n var indexable = isIndexable(prop);\n var value = (indexable || scriptable) && proxy[prop];\n\n if (scriptable && (isFunction(value) || hasFunction(value)) || indexable && isArray(value)) {\n return true;\n }\n }\n } catch (err) {\n _iterator14.e(err);\n } finally {\n _iterator14.f();\n }\n\n return false;\n}\n\nvar version = \"3.9.1\";\nvar KNOWN_POSITIONS = ['top', 'bottom', 'left', 'right', 'chartArea'];\n\nfunction positionIsHorizontal(position, axis) {\n return position === 'top' || position === 'bottom' || KNOWN_POSITIONS.indexOf(position) === -1 && axis === 'x';\n}\n\nfunction compare2Level(l1, l2) {\n return function (a, b) {\n return a[l1] === b[l1] ? a[l2] - b[l2] : a[l1] - b[l1];\n };\n}\n\nfunction onAnimationsComplete(context) {\n var chart = context.chart;\n var animationOptions = chart.options.animation;\n chart.notifyPlugins('afterRender');\n callback(animationOptions && animationOptions.onComplete, [context], chart);\n}\n\nfunction onAnimationProgress(context) {\n var chart = context.chart;\n var animationOptions = chart.options.animation;\n callback(animationOptions && animationOptions.onProgress, [context], chart);\n}\n\nfunction getCanvas(item) {\n if (_isDomSupported() && typeof item === 'string') {\n item = document.getElementById(item);\n } else if (item && item.length) {\n item = item[0];\n }\n\n if (item && item.canvas) {\n item = item.canvas;\n }\n\n return item;\n}\n\nvar instances = {};\n\nvar getChart = function getChart(key) {\n var canvas = getCanvas(key);\n return Object.values(instances).filter(function (c) {\n return c.canvas === canvas;\n }).pop();\n};\n\nfunction moveNumericKeys(obj, start, move) {\n var keys = Object.keys(obj);\n\n for (var _i2 = 0, _keys = keys; _i2 < _keys.length; _i2++) {\n var key = _keys[_i2];\n var intKey = +key;\n\n if (intKey >= start) {\n var value = obj[key];\n delete obj[key];\n\n if (move > 0 || intKey > start) {\n obj[intKey + move] = value;\n }\n }\n }\n}\n\nfunction determineLastEvent(e, lastEvent, inChartArea, isClick) {\n if (!inChartArea || e.type === 'mouseout') {\n return null;\n }\n\n if (isClick) {\n return lastEvent;\n }\n\n return e;\n}\n\nvar Chart = /*#__PURE__*/function () {\n function Chart(item, userConfig) {\n var _this12 = this;\n\n _classCallCheck(this, Chart);\n\n var config = this.config = new Config(userConfig);\n var initialCanvas = getCanvas(item);\n var existingChart = getChart(initialCanvas);\n\n if (existingChart) {\n throw new Error('Canvas is already in use. Chart with ID \\'' + existingChart.id + '\\'' + ' must be destroyed before the canvas with ID \\'' + existingChart.canvas.id + '\\' can be reused.');\n }\n\n var options = config.createResolver(config.chartOptionScopes(), this.getContext());\n this.platform = new (config.platform || _detectPlatform(initialCanvas))();\n this.platform.updateConfig(config);\n var context = this.platform.acquireContext(initialCanvas, options.aspectRatio);\n var canvas = context && context.canvas;\n var height = canvas && canvas.height;\n var width = canvas && canvas.width;\n this.id = uid();\n this.ctx = context;\n this.canvas = canvas;\n this.width = width;\n this.height = height;\n this._options = options;\n this._aspectRatio = this.aspectRatio;\n this._layers = [];\n this._metasets = [];\n this._stacks = undefined;\n this.boxes = [];\n this.currentDevicePixelRatio = undefined;\n this.chartArea = undefined;\n this._active = [];\n this._lastEvent = undefined;\n this._listeners = {};\n this._responsiveListeners = undefined;\n this._sortedMetasets = [];\n this.scales = {};\n this._plugins = new PluginService();\n this.$proxies = {};\n this._hiddenIndices = {};\n this.attached = false;\n this._animationsDisabled = undefined;\n this.$context = undefined;\n this._doResize = debounce(function (mode) {\n return _this12.update(mode);\n }, options.resizeDelay || 0);\n this._dataChanges = [];\n instances[this.id] = this;\n\n if (!context || !canvas) {\n console.error(\"Failed to create chart: can't acquire context from the given item\");\n return;\n }\n\n animator.listen(this, 'complete', onAnimationsComplete);\n animator.listen(this, 'progress', onAnimationProgress);\n\n this._initialize();\n\n if (this.attached) {\n this.update();\n }\n }\n\n _createClass(Chart, [{\n key: \"aspectRatio\",\n get: function get() {\n var _this$options11 = this.options,\n aspectRatio = _this$options11.aspectRatio,\n maintainAspectRatio = _this$options11.maintainAspectRatio,\n width = this.width,\n height = this.height,\n _aspectRatio = this._aspectRatio;\n\n if (!isNullOrUndef(aspectRatio)) {\n return aspectRatio;\n }\n\n if (maintainAspectRatio && _aspectRatio) {\n return _aspectRatio;\n }\n\n return height ? width / height : null;\n }\n }, {\n key: \"data\",\n get: function get() {\n return this.config.data;\n },\n set: function set(data) {\n this.config.data = data;\n }\n }, {\n key: \"options\",\n get: function get() {\n return this._options;\n },\n set: function set(options) {\n this.config.options = options;\n }\n }, {\n key: \"_initialize\",\n value: function _initialize() {\n this.notifyPlugins('beforeInit');\n\n if (this.options.responsive) {\n this.resize();\n } else {\n retinaScale(this, this.options.devicePixelRatio);\n }\n\n this.bindEvents();\n this.notifyPlugins('afterInit');\n return this;\n }\n }, {\n key: \"clear\",\n value: function clear() {\n clearCanvas(this.canvas, this.ctx);\n return this;\n }\n }, {\n key: \"stop\",\n value: function stop() {\n animator.stop(this);\n return this;\n }\n }, {\n key: \"resize\",\n value: function resize(width, height) {\n if (!animator.running(this)) {\n this._resize(width, height);\n } else {\n this._resizeBeforeDraw = {\n width: width,\n height: height\n };\n }\n }\n }, {\n key: \"_resize\",\n value: function _resize(width, height) {\n var options = this.options;\n var canvas = this.canvas;\n var aspectRatio = options.maintainAspectRatio && this.aspectRatio;\n var newSize = this.platform.getMaximumSize(canvas, width, height, aspectRatio);\n var newRatio = options.devicePixelRatio || this.platform.getDevicePixelRatio();\n var mode = this.width ? 'resize' : 'attach';\n this.width = newSize.width;\n this.height = newSize.height;\n this._aspectRatio = this.aspectRatio;\n\n if (!retinaScale(this, newRatio, true)) {\n return;\n }\n\n this.notifyPlugins('resize', {\n size: newSize\n });\n callback(options.onResize, [this, newSize], this);\n\n if (this.attached) {\n if (this._doResize(mode)) {\n this.render();\n }\n }\n }\n }, {\n key: \"ensureScalesHaveIDs\",\n value: function ensureScalesHaveIDs() {\n var options = this.options;\n var scalesOptions = options.scales || {};\n each(scalesOptions, function (axisOptions, axisID) {\n axisOptions.id = axisID;\n });\n }\n }, {\n key: \"buildOrUpdateScales\",\n value: function buildOrUpdateScales() {\n var _this13 = this;\n\n var options = this.options;\n var scaleOpts = options.scales;\n var scales = this.scales;\n var updated = Object.keys(scales).reduce(function (obj, id) {\n obj[id] = false;\n return obj;\n }, {});\n var items = [];\n\n if (scaleOpts) {\n items = items.concat(Object.keys(scaleOpts).map(function (id) {\n var scaleOptions = scaleOpts[id];\n var axis = determineAxis(id, scaleOptions);\n var isRadial = axis === 'r';\n var isHorizontal = axis === 'x';\n return {\n options: scaleOptions,\n dposition: isRadial ? 'chartArea' : isHorizontal ? 'bottom' : 'left',\n dtype: isRadial ? 'radialLinear' : isHorizontal ? 'category' : 'linear'\n };\n }));\n }\n\n each(items, function (item) {\n var scaleOptions = item.options;\n var id = scaleOptions.id;\n var axis = determineAxis(id, scaleOptions);\n var scaleType = valueOrDefault(scaleOptions.type, item.dtype);\n\n if (scaleOptions.position === undefined || positionIsHorizontal(scaleOptions.position, axis) !== positionIsHorizontal(item.dposition)) {\n scaleOptions.position = item.dposition;\n }\n\n updated[id] = true;\n var scale = null;\n\n if (id in scales && scales[id].type === scaleType) {\n scale = scales[id];\n } else {\n var scaleClass = registry.getScale(scaleType);\n scale = new scaleClass({\n id: id,\n type: scaleType,\n ctx: _this13.ctx,\n chart: _this13\n });\n scales[scale.id] = scale;\n }\n\n scale.init(scaleOptions, options);\n });\n each(updated, function (hasUpdated, id) {\n if (!hasUpdated) {\n delete scales[id];\n }\n });\n each(scales, function (scale) {\n layouts.configure(_this13, scale, scale.options);\n layouts.addBox(_this13, scale);\n });\n }\n }, {\n key: \"_updateMetasets\",\n value: function _updateMetasets() {\n var metasets = this._metasets;\n var numData = this.data.datasets.length;\n var numMeta = metasets.length;\n metasets.sort(function (a, b) {\n return a.index - b.index;\n });\n\n if (numMeta > numData) {\n for (var i = numData; i < numMeta; ++i) {\n this._destroyDatasetMeta(i);\n }\n\n metasets.splice(numData, numMeta - numData);\n }\n\n this._sortedMetasets = metasets.slice(0).sort(compare2Level('order', 'index'));\n }\n }, {\n key: \"_removeUnreferencedMetasets\",\n value: function _removeUnreferencedMetasets() {\n var _this14 = this;\n\n var metasets = this._metasets,\n datasets = this.data.datasets;\n\n if (metasets.length > datasets.length) {\n delete this._stacks;\n }\n\n metasets.forEach(function (meta, index) {\n if (datasets.filter(function (x) {\n return x === meta._dataset;\n }).length === 0) {\n _this14._destroyDatasetMeta(index);\n }\n });\n }\n }, {\n key: \"buildOrUpdateControllers\",\n value: function buildOrUpdateControllers() {\n var newControllers = [];\n var datasets = this.data.datasets;\n var i, ilen;\n\n this._removeUnreferencedMetasets();\n\n for (i = 0, ilen = datasets.length; i < ilen; i++) {\n var dataset = datasets[i];\n var meta = this.getDatasetMeta(i);\n var type = dataset.type || this.config.type;\n\n if (meta.type && meta.type !== type) {\n this._destroyDatasetMeta(i);\n\n meta = this.getDatasetMeta(i);\n }\n\n meta.type = type;\n meta.indexAxis = dataset.indexAxis || getIndexAxis(type, this.options);\n meta.order = dataset.order || 0;\n meta.index = i;\n meta.label = '' + dataset.label;\n meta.visible = this.isDatasetVisible(i);\n\n if (meta.controller) {\n meta.controller.updateIndex(i);\n meta.controller.linkScales();\n } else {\n var ControllerClass = registry.getController(type);\n var _defaults$datasets$ty = defaults.datasets[type],\n datasetElementType = _defaults$datasets$ty.datasetElementType,\n dataElementType = _defaults$datasets$ty.dataElementType;\n Object.assign(ControllerClass.prototype, {\n dataElementType: registry.getElement(dataElementType),\n datasetElementType: datasetElementType && registry.getElement(datasetElementType)\n });\n meta.controller = new ControllerClass(this, i);\n newControllers.push(meta.controller);\n }\n }\n\n this._updateMetasets();\n\n return newControllers;\n }\n }, {\n key: \"_resetElements\",\n value: function _resetElements() {\n var _this15 = this;\n\n each(this.data.datasets, function (dataset, datasetIndex) {\n _this15.getDatasetMeta(datasetIndex).controller.reset();\n }, this);\n }\n }, {\n key: \"reset\",\n value: function reset() {\n this._resetElements();\n\n this.notifyPlugins('reset');\n }\n }, {\n key: \"update\",\n value: function update(mode) {\n var config = this.config;\n config.update();\n var options = this._options = config.createResolver(config.chartOptionScopes(), this.getContext());\n var animsDisabled = this._animationsDisabled = !options.animation;\n\n this._updateScales();\n\n this._checkEventBindings();\n\n this._updateHiddenIndices();\n\n this._plugins.invalidate();\n\n if (this.notifyPlugins('beforeUpdate', {\n mode: mode,\n cancelable: true\n }) === false) {\n return;\n }\n\n var newControllers = this.buildOrUpdateControllers();\n this.notifyPlugins('beforeElementsUpdate');\n var minPadding = 0;\n\n for (var i = 0, ilen = this.data.datasets.length; i < ilen; i++) {\n var _this$getDatasetMeta = this.getDatasetMeta(i),\n controller = _this$getDatasetMeta.controller;\n\n var reset = !animsDisabled && newControllers.indexOf(controller) === -1;\n controller.buildOrUpdateElements(reset);\n minPadding = Math.max(+controller.getMaxOverflow(), minPadding);\n }\n\n minPadding = this._minPadding = options.layout.autoPadding ? minPadding : 0;\n\n this._updateLayout(minPadding);\n\n if (!animsDisabled) {\n each(newControllers, function (controller) {\n controller.reset();\n });\n }\n\n this._updateDatasets(mode);\n\n this.notifyPlugins('afterUpdate', {\n mode: mode\n });\n\n this._layers.sort(compare2Level('z', '_idx'));\n\n var _active = this._active,\n _lastEvent = this._lastEvent;\n\n if (_lastEvent) {\n this._eventHandler(_lastEvent, true);\n } else if (_active.length) {\n this._updateHoverStyles(_active, _active, true);\n }\n\n this.render();\n }\n }, {\n key: \"_updateScales\",\n value: function _updateScales() {\n var _this16 = this;\n\n each(this.scales, function (scale) {\n layouts.removeBox(_this16, scale);\n });\n this.ensureScalesHaveIDs();\n this.buildOrUpdateScales();\n }\n }, {\n key: \"_checkEventBindings\",\n value: function _checkEventBindings() {\n var options = this.options;\n var existingEvents = new Set(Object.keys(this._listeners));\n var newEvents = new Set(options.events);\n\n if (!setsEqual(existingEvents, newEvents) || !!this._responsiveListeners !== options.responsive) {\n this.unbindEvents();\n this.bindEvents();\n }\n }\n }, {\n key: \"_updateHiddenIndices\",\n value: function _updateHiddenIndices() {\n var _hiddenIndices = this._hiddenIndices;\n var changes = this._getUniformDataChanges() || [];\n\n var _iterator15 = _createForOfIteratorHelper(changes),\n _step15;\n\n try {\n for (_iterator15.s(); !(_step15 = _iterator15.n()).done;) {\n var _step15$value = _step15.value,\n method = _step15$value.method,\n start = _step15$value.start,\n count = _step15$value.count;\n var move = method === '_removeElements' ? -count : count;\n moveNumericKeys(_hiddenIndices, start, move);\n }\n } catch (err) {\n _iterator15.e(err);\n } finally {\n _iterator15.f();\n }\n }\n }, {\n key: \"_getUniformDataChanges\",\n value: function _getUniformDataChanges() {\n var _dataChanges = this._dataChanges;\n\n if (!_dataChanges || !_dataChanges.length) {\n return;\n }\n\n this._dataChanges = [];\n var datasetCount = this.data.datasets.length;\n\n var makeSet = function makeSet(idx) {\n return new Set(_dataChanges.filter(function (c) {\n return c[0] === idx;\n }).map(function (c, i) {\n return i + ',' + c.splice(1).join(',');\n }));\n };\n\n var changeSet = makeSet(0);\n\n for (var i = 1; i < datasetCount; i++) {\n if (!setsEqual(changeSet, makeSet(i))) {\n return;\n }\n }\n\n return Array.from(changeSet).map(function (c) {\n return c.split(',');\n }).map(function (a) {\n return {\n method: a[1],\n start: +a[2],\n count: +a[3]\n };\n });\n }\n }, {\n key: \"_updateLayout\",\n value: function _updateLayout(minPadding) {\n var _this17 = this;\n\n if (this.notifyPlugins('beforeLayout', {\n cancelable: true\n }) === false) {\n return;\n }\n\n layouts.update(this, this.width, this.height, minPadding);\n var area = this.chartArea;\n var noArea = area.width <= 0 || area.height <= 0;\n this._layers = [];\n each(this.boxes, function (box) {\n var _this17$_layers;\n\n if (noArea && box.position === 'chartArea') {\n return;\n }\n\n if (box.configure) {\n box.configure();\n }\n\n (_this17$_layers = _this17._layers).push.apply(_this17$_layers, _toConsumableArray(box._layers()));\n }, this);\n\n this._layers.forEach(function (item, index) {\n item._idx = index;\n });\n\n this.notifyPlugins('afterLayout');\n }\n }, {\n key: \"_updateDatasets\",\n value: function _updateDatasets(mode) {\n if (this.notifyPlugins('beforeDatasetsUpdate', {\n mode: mode,\n cancelable: true\n }) === false) {\n return;\n }\n\n for (var i = 0, ilen = this.data.datasets.length; i < ilen; ++i) {\n this.getDatasetMeta(i).controller.configure();\n }\n\n for (var _i3 = 0, _ilen = this.data.datasets.length; _i3 < _ilen; ++_i3) {\n this._updateDataset(_i3, isFunction(mode) ? mode({\n datasetIndex: _i3\n }) : mode);\n }\n\n this.notifyPlugins('afterDatasetsUpdate', {\n mode: mode\n });\n }\n }, {\n key: \"_updateDataset\",\n value: function _updateDataset(index, mode) {\n var meta = this.getDatasetMeta(index);\n var args = {\n meta: meta,\n index: index,\n mode: mode,\n cancelable: true\n };\n\n if (this.notifyPlugins('beforeDatasetUpdate', args) === false) {\n return;\n }\n\n meta.controller._update(mode);\n\n args.cancelable = false;\n this.notifyPlugins('afterDatasetUpdate', args);\n }\n }, {\n key: \"render\",\n value: function render() {\n if (this.notifyPlugins('beforeRender', {\n cancelable: true\n }) === false) {\n return;\n }\n\n if (animator.has(this)) {\n if (this.attached && !animator.running(this)) {\n animator.start(this);\n }\n } else {\n this.draw();\n onAnimationsComplete({\n chart: this\n });\n }\n }\n }, {\n key: \"draw\",\n value: function draw() {\n var i;\n\n if (this._resizeBeforeDraw) {\n var _this$_resizeBeforeDr = this._resizeBeforeDraw,\n width = _this$_resizeBeforeDr.width,\n height = _this$_resizeBeforeDr.height;\n\n this._resize(width, height);\n\n this._resizeBeforeDraw = null;\n }\n\n this.clear();\n\n if (this.width <= 0 || this.height <= 0) {\n return;\n }\n\n if (this.notifyPlugins('beforeDraw', {\n cancelable: true\n }) === false) {\n return;\n }\n\n var layers = this._layers;\n\n for (i = 0; i < layers.length && layers[i].z <= 0; ++i) {\n layers[i].draw(this.chartArea);\n }\n\n this._drawDatasets();\n\n for (; i < layers.length; ++i) {\n layers[i].draw(this.chartArea);\n }\n\n this.notifyPlugins('afterDraw');\n }\n }, {\n key: \"_getSortedDatasetMetas\",\n value: function _getSortedDatasetMetas(filterVisible) {\n var metasets = this._sortedMetasets;\n var result = [];\n var i, ilen;\n\n for (i = 0, ilen = metasets.length; i < ilen; ++i) {\n var meta = metasets[i];\n\n if (!filterVisible || meta.visible) {\n result.push(meta);\n }\n }\n\n return result;\n }\n }, {\n key: \"getSortedVisibleDatasetMetas\",\n value: function getSortedVisibleDatasetMetas() {\n return this._getSortedDatasetMetas(true);\n }\n }, {\n key: \"_drawDatasets\",\n value: function _drawDatasets() {\n if (this.notifyPlugins('beforeDatasetsDraw', {\n cancelable: true\n }) === false) {\n return;\n }\n\n var metasets = this.getSortedVisibleDatasetMetas();\n\n for (var i = metasets.length - 1; i >= 0; --i) {\n this._drawDataset(metasets[i]);\n }\n\n this.notifyPlugins('afterDatasetsDraw');\n }\n }, {\n key: \"_drawDataset\",\n value: function _drawDataset(meta) {\n var ctx = this.ctx;\n var clip = meta._clip;\n var useClip = !clip.disabled;\n var area = this.chartArea;\n var args = {\n meta: meta,\n index: meta.index,\n cancelable: true\n };\n\n if (this.notifyPlugins('beforeDatasetDraw', args) === false) {\n return;\n }\n\n if (useClip) {\n clipArea(ctx, {\n left: clip.left === false ? 0 : area.left - clip.left,\n right: clip.right === false ? this.width : area.right + clip.right,\n top: clip.top === false ? 0 : area.top - clip.top,\n bottom: clip.bottom === false ? this.height : area.bottom + clip.bottom\n });\n }\n\n meta.controller.draw();\n\n if (useClip) {\n unclipArea(ctx);\n }\n\n args.cancelable = false;\n this.notifyPlugins('afterDatasetDraw', args);\n }\n }, {\n key: \"isPointInArea\",\n value: function isPointInArea(point) {\n return _isPointInArea(point, this.chartArea, this._minPadding);\n }\n }, {\n key: \"getElementsAtEventForMode\",\n value: function getElementsAtEventForMode(e, mode, options, useFinalPosition) {\n var method = Interaction.modes[mode];\n\n if (typeof method === 'function') {\n return method(this, e, options, useFinalPosition);\n }\n\n return [];\n }\n }, {\n key: \"getDatasetMeta\",\n value: function getDatasetMeta(datasetIndex) {\n var dataset = this.data.datasets[datasetIndex];\n var metasets = this._metasets;\n var meta = metasets.filter(function (x) {\n return x && x._dataset === dataset;\n }).pop();\n\n if (!meta) {\n meta = {\n type: null,\n data: [],\n dataset: null,\n controller: null,\n hidden: null,\n xAxisID: null,\n yAxisID: null,\n order: dataset && dataset.order || 0,\n index: datasetIndex,\n _dataset: dataset,\n _parsed: [],\n _sorted: false\n };\n metasets.push(meta);\n }\n\n return meta;\n }\n }, {\n key: \"getContext\",\n value: function getContext() {\n return this.$context || (this.$context = createContext(null, {\n chart: this,\n type: 'chart'\n }));\n }\n }, {\n key: \"getVisibleDatasetCount\",\n value: function getVisibleDatasetCount() {\n return this.getSortedVisibleDatasetMetas().length;\n }\n }, {\n key: \"isDatasetVisible\",\n value: function isDatasetVisible(datasetIndex) {\n var dataset = this.data.datasets[datasetIndex];\n\n if (!dataset) {\n return false;\n }\n\n var meta = this.getDatasetMeta(datasetIndex);\n return typeof meta.hidden === 'boolean' ? !meta.hidden : !dataset.hidden;\n }\n }, {\n key: \"setDatasetVisibility\",\n value: function setDatasetVisibility(datasetIndex, visible) {\n var meta = this.getDatasetMeta(datasetIndex);\n meta.hidden = !visible;\n }\n }, {\n key: \"toggleDataVisibility\",\n value: function toggleDataVisibility(index) {\n this._hiddenIndices[index] = !this._hiddenIndices[index];\n }\n }, {\n key: \"getDataVisibility\",\n value: function getDataVisibility(index) {\n return !this._hiddenIndices[index];\n }\n }, {\n key: \"_updateVisibility\",\n value: function _updateVisibility(datasetIndex, dataIndex, visible) {\n var mode = visible ? 'show' : 'hide';\n var meta = this.getDatasetMeta(datasetIndex);\n\n var anims = meta.controller._resolveAnimations(undefined, mode);\n\n if (defined(dataIndex)) {\n meta.data[dataIndex].hidden = !visible;\n this.update();\n } else {\n this.setDatasetVisibility(datasetIndex, visible);\n anims.update(meta, {\n visible: visible\n });\n this.update(function (ctx) {\n return ctx.datasetIndex === datasetIndex ? mode : undefined;\n });\n }\n }\n }, {\n key: \"hide\",\n value: function hide(datasetIndex, dataIndex) {\n this._updateVisibility(datasetIndex, dataIndex, false);\n }\n }, {\n key: \"show\",\n value: function show(datasetIndex, dataIndex) {\n this._updateVisibility(datasetIndex, dataIndex, true);\n }\n }, {\n key: \"_destroyDatasetMeta\",\n value: function _destroyDatasetMeta(datasetIndex) {\n var meta = this._metasets[datasetIndex];\n\n if (meta && meta.controller) {\n meta.controller._destroy();\n }\n\n delete this._metasets[datasetIndex];\n }\n }, {\n key: \"_stop\",\n value: function _stop() {\n var i, ilen;\n this.stop();\n animator.remove(this);\n\n for (i = 0, ilen = this.data.datasets.length; i < ilen; ++i) {\n this._destroyDatasetMeta(i);\n }\n }\n }, {\n key: \"destroy\",\n value: function destroy() {\n this.notifyPlugins('beforeDestroy');\n var canvas = this.canvas,\n ctx = this.ctx;\n\n this._stop();\n\n this.config.clearCache();\n\n if (canvas) {\n this.unbindEvents();\n clearCanvas(canvas, ctx);\n this.platform.releaseContext(ctx);\n this.canvas = null;\n this.ctx = null;\n }\n\n this.notifyPlugins('destroy');\n delete instances[this.id];\n this.notifyPlugins('afterDestroy');\n }\n }, {\n key: \"toBase64Image\",\n value: function toBase64Image() {\n var _this$canvas;\n\n return (_this$canvas = this.canvas).toDataURL.apply(_this$canvas, arguments);\n }\n }, {\n key: \"bindEvents\",\n value: function bindEvents() {\n this.bindUserEvents();\n\n if (this.options.responsive) {\n this.bindResponsiveEvents();\n } else {\n this.attached = true;\n }\n }\n }, {\n key: \"bindUserEvents\",\n value: function bindUserEvents() {\n var _this18 = this;\n\n var listeners = this._listeners;\n var platform = this.platform;\n\n var _add = function _add(type, listener) {\n platform.addEventListener(_this18, type, listener);\n listeners[type] = listener;\n };\n\n var listener = function listener(e, x, y) {\n e.offsetX = x;\n e.offsetY = y;\n\n _this18._eventHandler(e);\n };\n\n each(this.options.events, function (type) {\n return _add(type, listener);\n });\n }\n }, {\n key: \"bindResponsiveEvents\",\n value: function bindResponsiveEvents() {\n var _this19 = this;\n\n if (!this._responsiveListeners) {\n this._responsiveListeners = {};\n }\n\n var listeners = this._responsiveListeners;\n var platform = this.platform;\n\n var _add = function _add(type, listener) {\n platform.addEventListener(_this19, type, listener);\n listeners[type] = listener;\n };\n\n var _remove = function _remove(type, listener) {\n if (listeners[type]) {\n platform.removeEventListener(_this19, type, listener);\n delete listeners[type];\n }\n };\n\n var listener = function listener(width, height) {\n if (_this19.canvas) {\n _this19.resize(width, height);\n }\n };\n\n var detached;\n\n var attached = function attached() {\n _remove('attach', attached);\n\n _this19.attached = true;\n\n _this19.resize();\n\n _add('resize', listener);\n\n _add('detach', detached);\n };\n\n detached = function detached() {\n _this19.attached = false;\n\n _remove('resize', listener);\n\n _this19._stop();\n\n _this19._resize(0, 0);\n\n _add('attach', attached);\n };\n\n if (platform.isAttached(this.canvas)) {\n attached();\n } else {\n detached();\n }\n }\n }, {\n key: \"unbindEvents\",\n value: function unbindEvents() {\n var _this20 = this;\n\n each(this._listeners, function (listener, type) {\n _this20.platform.removeEventListener(_this20, type, listener);\n });\n this._listeners = {};\n each(this._responsiveListeners, function (listener, type) {\n _this20.platform.removeEventListener(_this20, type, listener);\n });\n this._responsiveListeners = undefined;\n }\n }, {\n key: \"updateHoverStyle\",\n value: function updateHoverStyle(items, mode, enabled) {\n var prefix = enabled ? 'set' : 'remove';\n var meta, item, i, ilen;\n\n if (mode === 'dataset') {\n meta = this.getDatasetMeta(items[0].datasetIndex);\n meta.controller['_' + prefix + 'DatasetHoverStyle']();\n }\n\n for (i = 0, ilen = items.length; i < ilen; ++i) {\n item = items[i];\n var controller = item && this.getDatasetMeta(item.datasetIndex).controller;\n\n if (controller) {\n controller[prefix + 'HoverStyle'](item.element, item.datasetIndex, item.index);\n }\n }\n }\n }, {\n key: \"getActiveElements\",\n value: function getActiveElements() {\n return this._active || [];\n }\n }, {\n key: \"setActiveElements\",\n value: function setActiveElements(activeElements) {\n var _this21 = this;\n\n var lastActive = this._active || [];\n var active = activeElements.map(function (_ref4) {\n var datasetIndex = _ref4.datasetIndex,\n index = _ref4.index;\n\n var meta = _this21.getDatasetMeta(datasetIndex);\n\n if (!meta) {\n throw new Error('No dataset found at index ' + datasetIndex);\n }\n\n return {\n datasetIndex: datasetIndex,\n element: meta.data[index],\n index: index\n };\n });\n var changed = !_elementsEqual(active, lastActive);\n\n if (changed) {\n this._active = active;\n this._lastEvent = null;\n\n this._updateHoverStyles(active, lastActive);\n }\n }\n }, {\n key: \"notifyPlugins\",\n value: function notifyPlugins(hook, args, filter) {\n return this._plugins.notify(this, hook, args, filter);\n }\n }, {\n key: \"_updateHoverStyles\",\n value: function _updateHoverStyles(active, lastActive, replay) {\n var hoverOptions = this.options.hover;\n\n var diff = function diff(a, b) {\n return a.filter(function (x) {\n return !b.some(function (y) {\n return x.datasetIndex === y.datasetIndex && x.index === y.index;\n });\n });\n };\n\n var deactivated = diff(lastActive, active);\n var activated = replay ? active : diff(active, lastActive);\n\n if (deactivated.length) {\n this.updateHoverStyle(deactivated, hoverOptions.mode, false);\n }\n\n if (activated.length && hoverOptions.mode) {\n this.updateHoverStyle(activated, hoverOptions.mode, true);\n }\n }\n }, {\n key: \"_eventHandler\",\n value: function _eventHandler(e, replay) {\n var _this22 = this;\n\n var args = {\n event: e,\n replay: replay,\n cancelable: true,\n inChartArea: this.isPointInArea(e)\n };\n\n var eventFilter = function eventFilter(plugin) {\n return (plugin.options.events || _this22.options.events).includes(e.native.type);\n };\n\n if (this.notifyPlugins('beforeEvent', args, eventFilter) === false) {\n return;\n }\n\n var changed = this._handleEvent(e, replay, args.inChartArea);\n\n args.cancelable = false;\n this.notifyPlugins('afterEvent', args, eventFilter);\n\n if (changed || args.changed) {\n this.render();\n }\n\n return this;\n }\n }, {\n key: \"_handleEvent\",\n value: function _handleEvent(e, replay, inChartArea) {\n var _this$_active = this._active,\n lastActive = _this$_active === void 0 ? [] : _this$_active,\n options = this.options;\n var useFinalPosition = replay;\n\n var active = this._getActiveElements(e, lastActive, inChartArea, useFinalPosition);\n\n var isClick = _isClickEvent(e);\n\n var lastEvent = determineLastEvent(e, this._lastEvent, inChartArea, isClick);\n\n if (inChartArea) {\n this._lastEvent = null;\n callback(options.onHover, [e, active, this], this);\n\n if (isClick) {\n callback(options.onClick, [e, active, this], this);\n }\n }\n\n var changed = !_elementsEqual(active, lastActive);\n\n if (changed || replay) {\n this._active = active;\n\n this._updateHoverStyles(active, lastActive, replay);\n }\n\n this._lastEvent = lastEvent;\n return changed;\n }\n }, {\n key: \"_getActiveElements\",\n value: function _getActiveElements(e, lastActive, inChartArea, useFinalPosition) {\n if (e.type === 'mouseout') {\n return [];\n }\n\n if (!inChartArea) {\n return lastActive;\n }\n\n var hoverOptions = this.options.hover;\n return this.getElementsAtEventForMode(e, hoverOptions.mode, hoverOptions, useFinalPosition);\n }\n }]);\n\n return Chart;\n}();\n\nvar invalidatePlugins = function invalidatePlugins() {\n return each(Chart.instances, function (chart) {\n return chart._plugins.invalidate();\n });\n};\n\nvar enumerable = true;\nObject.defineProperties(Chart, {\n defaults: {\n enumerable: enumerable,\n value: defaults\n },\n instances: {\n enumerable: enumerable,\n value: instances\n },\n overrides: {\n enumerable: enumerable,\n value: overrides\n },\n registry: {\n enumerable: enumerable,\n value: registry\n },\n version: {\n enumerable: enumerable,\n value: version\n },\n getChart: {\n enumerable: enumerable,\n value: getChart\n },\n register: {\n enumerable: enumerable,\n value: function value() {\n registry.add.apply(registry, arguments);\n invalidatePlugins();\n }\n },\n unregister: {\n enumerable: enumerable,\n value: function value() {\n registry.remove.apply(registry, arguments);\n invalidatePlugins();\n }\n }\n});\n\nfunction clipArc(ctx, element, endAngle) {\n var startAngle = element.startAngle,\n pixelMargin = element.pixelMargin,\n x = element.x,\n y = element.y,\n outerRadius = element.outerRadius,\n innerRadius = element.innerRadius;\n var angleMargin = pixelMargin / outerRadius;\n ctx.beginPath();\n ctx.arc(x, y, outerRadius, startAngle - angleMargin, endAngle + angleMargin);\n\n if (innerRadius > pixelMargin) {\n angleMargin = pixelMargin / innerRadius;\n ctx.arc(x, y, innerRadius, endAngle + angleMargin, startAngle - angleMargin, true);\n } else {\n ctx.arc(x, y, pixelMargin, endAngle + HALF_PI, startAngle - HALF_PI);\n }\n\n ctx.closePath();\n ctx.clip();\n}\n\nfunction toRadiusCorners(value) {\n return _readValueToProps(value, ['outerStart', 'outerEnd', 'innerStart', 'innerEnd']);\n}\n\nfunction parseBorderRadius$1(arc, innerRadius, outerRadius, angleDelta) {\n var o = toRadiusCorners(arc.options.borderRadius);\n var halfThickness = (outerRadius - innerRadius) / 2;\n var innerLimit = Math.min(halfThickness, angleDelta * innerRadius / 2);\n\n var computeOuterLimit = function computeOuterLimit(val) {\n var outerArcLimit = (outerRadius - Math.min(halfThickness, val)) * angleDelta / 2;\n return _limitValue(val, 0, Math.min(halfThickness, outerArcLimit));\n };\n\n return {\n outerStart: computeOuterLimit(o.outerStart),\n outerEnd: computeOuterLimit(o.outerEnd),\n innerStart: _limitValue(o.innerStart, 0, innerLimit),\n innerEnd: _limitValue(o.innerEnd, 0, innerLimit)\n };\n}\n\nfunction rThetaToXY(r, theta, x, y) {\n return {\n x: x + r * Math.cos(theta),\n y: y + r * Math.sin(theta)\n };\n}\n\nfunction pathArc(ctx, element, offset, spacing, end, circular) {\n var x = element.x,\n y = element.y,\n start = element.startAngle,\n pixelMargin = element.pixelMargin,\n innerR = element.innerRadius;\n var outerRadius = Math.max(element.outerRadius + spacing + offset - pixelMargin, 0);\n var innerRadius = innerR > 0 ? innerR + spacing + offset + pixelMargin : 0;\n var spacingOffset = 0;\n var alpha = end - start;\n\n if (spacing) {\n var noSpacingInnerRadius = innerR > 0 ? innerR - spacing : 0;\n var noSpacingOuterRadius = outerRadius > 0 ? outerRadius - spacing : 0;\n var avNogSpacingRadius = (noSpacingInnerRadius + noSpacingOuterRadius) / 2;\n var adjustedAngle = avNogSpacingRadius !== 0 ? alpha * avNogSpacingRadius / (avNogSpacingRadius + spacing) : alpha;\n spacingOffset = (alpha - adjustedAngle) / 2;\n }\n\n var beta = Math.max(0.001, alpha * outerRadius - offset / PI) / outerRadius;\n var angleOffset = (alpha - beta) / 2;\n var startAngle = start + angleOffset + spacingOffset;\n var endAngle = end - angleOffset - spacingOffset;\n\n var _parseBorderRadius$ = parseBorderRadius$1(element, innerRadius, outerRadius, endAngle - startAngle),\n outerStart = _parseBorderRadius$.outerStart,\n outerEnd = _parseBorderRadius$.outerEnd,\n innerStart = _parseBorderRadius$.innerStart,\n innerEnd = _parseBorderRadius$.innerEnd;\n\n var outerStartAdjustedRadius = outerRadius - outerStart;\n var outerEndAdjustedRadius = outerRadius - outerEnd;\n var outerStartAdjustedAngle = startAngle + outerStart / outerStartAdjustedRadius;\n var outerEndAdjustedAngle = endAngle - outerEnd / outerEndAdjustedRadius;\n var innerStartAdjustedRadius = innerRadius + innerStart;\n var innerEndAdjustedRadius = innerRadius + innerEnd;\n var innerStartAdjustedAngle = startAngle + innerStart / innerStartAdjustedRadius;\n var innerEndAdjustedAngle = endAngle - innerEnd / innerEndAdjustedRadius;\n ctx.beginPath();\n\n if (circular) {\n ctx.arc(x, y, outerRadius, outerStartAdjustedAngle, outerEndAdjustedAngle);\n\n if (outerEnd > 0) {\n var pCenter = rThetaToXY(outerEndAdjustedRadius, outerEndAdjustedAngle, x, y);\n ctx.arc(pCenter.x, pCenter.y, outerEnd, outerEndAdjustedAngle, endAngle + HALF_PI);\n }\n\n var p4 = rThetaToXY(innerEndAdjustedRadius, endAngle, x, y);\n ctx.lineTo(p4.x, p4.y);\n\n if (innerEnd > 0) {\n var _pCenter = rThetaToXY(innerEndAdjustedRadius, innerEndAdjustedAngle, x, y);\n\n ctx.arc(_pCenter.x, _pCenter.y, innerEnd, endAngle + HALF_PI, innerEndAdjustedAngle + Math.PI);\n }\n\n ctx.arc(x, y, innerRadius, endAngle - innerEnd / innerRadius, startAngle + innerStart / innerRadius, true);\n\n if (innerStart > 0) {\n var _pCenter2 = rThetaToXY(innerStartAdjustedRadius, innerStartAdjustedAngle, x, y);\n\n ctx.arc(_pCenter2.x, _pCenter2.y, innerStart, innerStartAdjustedAngle + Math.PI, startAngle - HALF_PI);\n }\n\n var p8 = rThetaToXY(outerStartAdjustedRadius, startAngle, x, y);\n ctx.lineTo(p8.x, p8.y);\n\n if (outerStart > 0) {\n var _pCenter3 = rThetaToXY(outerStartAdjustedRadius, outerStartAdjustedAngle, x, y);\n\n ctx.arc(_pCenter3.x, _pCenter3.y, outerStart, startAngle - HALF_PI, outerStartAdjustedAngle);\n }\n } else {\n ctx.moveTo(x, y);\n var outerStartX = Math.cos(outerStartAdjustedAngle) * outerRadius + x;\n var outerStartY = Math.sin(outerStartAdjustedAngle) * outerRadius + y;\n ctx.lineTo(outerStartX, outerStartY);\n var outerEndX = Math.cos(outerEndAdjustedAngle) * outerRadius + x;\n var outerEndY = Math.sin(outerEndAdjustedAngle) * outerRadius + y;\n ctx.lineTo(outerEndX, outerEndY);\n }\n\n ctx.closePath();\n}\n\nfunction drawArc(ctx, element, offset, spacing, circular) {\n var fullCircles = element.fullCircles,\n startAngle = element.startAngle,\n circumference = element.circumference;\n var endAngle = element.endAngle;\n\n if (fullCircles) {\n pathArc(ctx, element, offset, spacing, startAngle + TAU, circular);\n\n for (var i = 0; i < fullCircles; ++i) {\n ctx.fill();\n }\n\n if (!isNaN(circumference)) {\n endAngle = startAngle + circumference % TAU;\n\n if (circumference % TAU === 0) {\n endAngle += TAU;\n }\n }\n }\n\n pathArc(ctx, element, offset, spacing, endAngle, circular);\n ctx.fill();\n return endAngle;\n}\n\nfunction drawFullCircleBorders(ctx, element, inner) {\n var x = element.x,\n y = element.y,\n startAngle = element.startAngle,\n pixelMargin = element.pixelMargin,\n fullCircles = element.fullCircles;\n var outerRadius = Math.max(element.outerRadius - pixelMargin, 0);\n var innerRadius = element.innerRadius + pixelMargin;\n var i;\n\n if (inner) {\n clipArc(ctx, element, startAngle + TAU);\n }\n\n ctx.beginPath();\n ctx.arc(x, y, innerRadius, startAngle + TAU, startAngle, true);\n\n for (i = 0; i < fullCircles; ++i) {\n ctx.stroke();\n }\n\n ctx.beginPath();\n ctx.arc(x, y, outerRadius, startAngle, startAngle + TAU);\n\n for (i = 0; i < fullCircles; ++i) {\n ctx.stroke();\n }\n}\n\nfunction drawBorder(ctx, element, offset, spacing, endAngle, circular) {\n var options = element.options;\n var borderWidth = options.borderWidth,\n borderJoinStyle = options.borderJoinStyle;\n var inner = options.borderAlign === 'inner';\n\n if (!borderWidth) {\n return;\n }\n\n if (inner) {\n ctx.lineWidth = borderWidth * 2;\n ctx.lineJoin = borderJoinStyle || 'round';\n } else {\n ctx.lineWidth = borderWidth;\n ctx.lineJoin = borderJoinStyle || 'bevel';\n }\n\n if (element.fullCircles) {\n drawFullCircleBorders(ctx, element, inner);\n }\n\n if (inner) {\n clipArc(ctx, element, endAngle);\n }\n\n pathArc(ctx, element, offset, spacing, endAngle, circular);\n ctx.stroke();\n}\n\nvar ArcElement = /*#__PURE__*/function (_Element2) {\n _inherits(ArcElement, _Element2);\n\n var _super12 = _createSuper(ArcElement);\n\n function ArcElement(cfg) {\n var _this23;\n\n _classCallCheck(this, ArcElement);\n\n _this23 = _super12.call(this);\n _this23.options = undefined;\n _this23.circumference = undefined;\n _this23.startAngle = undefined;\n _this23.endAngle = undefined;\n _this23.innerRadius = undefined;\n _this23.outerRadius = undefined;\n _this23.pixelMargin = 0;\n _this23.fullCircles = 0;\n\n if (cfg) {\n Object.assign(_assertThisInitialized(_this23), cfg);\n }\n\n return _this23;\n }\n\n _createClass(ArcElement, [{\n key: \"inRange\",\n value: function inRange(chartX, chartY, useFinalPosition) {\n var point = this.getProps(['x', 'y'], useFinalPosition);\n\n var _getAngleFromPoint2 = getAngleFromPoint(point, {\n x: chartX,\n y: chartY\n }),\n angle = _getAngleFromPoint2.angle,\n distance = _getAngleFromPoint2.distance;\n\n var _this$getProps2 = this.getProps(['startAngle', 'endAngle', 'innerRadius', 'outerRadius', 'circumference'], useFinalPosition),\n startAngle = _this$getProps2.startAngle,\n endAngle = _this$getProps2.endAngle,\n innerRadius = _this$getProps2.innerRadius,\n outerRadius = _this$getProps2.outerRadius,\n circumference = _this$getProps2.circumference;\n\n var rAdjust = this.options.spacing / 2;\n\n var _circumference = valueOrDefault(circumference, endAngle - startAngle);\n\n var betweenAngles = _circumference >= TAU || _angleBetween(angle, startAngle, endAngle);\n\n var withinRadius = _isBetween(distance, innerRadius + rAdjust, outerRadius + rAdjust);\n\n return betweenAngles && withinRadius;\n }\n }, {\n key: \"getCenterPoint\",\n value: function getCenterPoint(useFinalPosition) {\n var _this$getProps3 = this.getProps(['x', 'y', 'startAngle', 'endAngle', 'innerRadius', 'outerRadius', 'circumference'], useFinalPosition),\n x = _this$getProps3.x,\n y = _this$getProps3.y,\n startAngle = _this$getProps3.startAngle,\n endAngle = _this$getProps3.endAngle,\n innerRadius = _this$getProps3.innerRadius,\n outerRadius = _this$getProps3.outerRadius;\n\n var _this$options12 = this.options,\n offset = _this$options12.offset,\n spacing = _this$options12.spacing;\n var halfAngle = (startAngle + endAngle) / 2;\n var halfRadius = (innerRadius + outerRadius + spacing + offset) / 2;\n return {\n x: x + Math.cos(halfAngle) * halfRadius,\n y: y + Math.sin(halfAngle) * halfRadius\n };\n }\n }, {\n key: \"tooltipPosition\",\n value: function tooltipPosition(useFinalPosition) {\n return this.getCenterPoint(useFinalPosition);\n }\n }, {\n key: \"draw\",\n value: function draw(ctx) {\n var options = this.options,\n circumference = this.circumference;\n var offset = (options.offset || 0) / 2;\n var spacing = (options.spacing || 0) / 2;\n var circular = options.circular;\n this.pixelMargin = options.borderAlign === 'inner' ? 0.33 : 0;\n this.fullCircles = circumference > TAU ? Math.floor(circumference / TAU) : 0;\n\n if (circumference === 0 || this.innerRadius < 0 || this.outerRadius < 0) {\n return;\n }\n\n ctx.save();\n var radiusOffset = 0;\n\n if (offset) {\n radiusOffset = offset / 2;\n var halfAngle = (this.startAngle + this.endAngle) / 2;\n ctx.translate(Math.cos(halfAngle) * radiusOffset, Math.sin(halfAngle) * radiusOffset);\n\n if (this.circumference >= PI) {\n radiusOffset = offset;\n }\n }\n\n ctx.fillStyle = options.backgroundColor;\n ctx.strokeStyle = options.borderColor;\n var endAngle = drawArc(ctx, this, radiusOffset, spacing, circular);\n drawBorder(ctx, this, radiusOffset, spacing, endAngle, circular);\n ctx.restore();\n }\n }]);\n\n return ArcElement;\n}(Element);\n\nArcElement.id = 'arc';\nArcElement.defaults = {\n borderAlign: 'center',\n borderColor: '#fff',\n borderJoinStyle: undefined,\n borderRadius: 0,\n borderWidth: 2,\n offset: 0,\n spacing: 0,\n angle: undefined,\n circular: true\n};\nArcElement.defaultRoutes = {\n backgroundColor: 'backgroundColor'\n};\n\nfunction setStyle(ctx, options) {\n var style = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : options;\n ctx.lineCap = valueOrDefault(style.borderCapStyle, options.borderCapStyle);\n ctx.setLineDash(valueOrDefault(style.borderDash, options.borderDash));\n ctx.lineDashOffset = valueOrDefault(style.borderDashOffset, options.borderDashOffset);\n ctx.lineJoin = valueOrDefault(style.borderJoinStyle, options.borderJoinStyle);\n ctx.lineWidth = valueOrDefault(style.borderWidth, options.borderWidth);\n ctx.strokeStyle = valueOrDefault(style.borderColor, options.borderColor);\n}\n\nfunction lineTo(ctx, previous, target) {\n ctx.lineTo(target.x, target.y);\n}\n\nfunction getLineMethod(options) {\n if (options.stepped) {\n return _steppedLineTo;\n }\n\n if (options.tension || options.cubicInterpolationMode === 'monotone') {\n return _bezierCurveTo;\n }\n\n return lineTo;\n}\n\nfunction pathVars(points, segment) {\n var params = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n var count = points.length;\n var _params$start = params.start,\n paramsStart = _params$start === void 0 ? 0 : _params$start,\n _params$end = params.end,\n paramsEnd = _params$end === void 0 ? count - 1 : _params$end;\n var segmentStart = segment.start,\n segmentEnd = segment.end;\n var start = Math.max(paramsStart, segmentStart);\n var end = Math.min(paramsEnd, segmentEnd);\n var outside = paramsStart < segmentStart && paramsEnd < segmentStart || paramsStart > segmentEnd && paramsEnd > segmentEnd;\n return {\n count: count,\n start: start,\n loop: segment.loop,\n ilen: end < start && !outside ? count + end - start : end - start\n };\n}\n\nfunction pathSegment(ctx, line, segment, params) {\n var points = line.points,\n options = line.options;\n\n var _pathVars = pathVars(points, segment, params),\n count = _pathVars.count,\n start = _pathVars.start,\n loop = _pathVars.loop,\n ilen = _pathVars.ilen;\n\n var lineMethod = getLineMethod(options);\n\n var _ref5 = params || {},\n _ref5$move = _ref5.move,\n move = _ref5$move === void 0 ? true : _ref5$move,\n reverse = _ref5.reverse;\n\n var i, point, prev;\n\n for (i = 0; i <= ilen; ++i) {\n point = points[(start + (reverse ? ilen - i : i)) % count];\n\n if (point.skip) {\n continue;\n } else if (move) {\n ctx.moveTo(point.x, point.y);\n move = false;\n } else {\n lineMethod(ctx, prev, point, reverse, options.stepped);\n }\n\n prev = point;\n }\n\n if (loop) {\n point = points[(start + (reverse ? ilen : 0)) % count];\n lineMethod(ctx, prev, point, reverse, options.stepped);\n }\n\n return !!loop;\n}\n\nfunction fastPathSegment(ctx, line, segment, params) {\n var points = line.points;\n\n var _pathVars2 = pathVars(points, segment, params),\n count = _pathVars2.count,\n start = _pathVars2.start,\n ilen = _pathVars2.ilen;\n\n var _ref6 = params || {},\n _ref6$move = _ref6.move,\n move = _ref6$move === void 0 ? true : _ref6$move,\n reverse = _ref6.reverse;\n\n var avgX = 0;\n var countX = 0;\n var i, point, prevX, minY, maxY, lastY;\n\n var pointIndex = function pointIndex(index) {\n return (start + (reverse ? ilen - index : index)) % count;\n };\n\n var drawX = function drawX() {\n if (minY !== maxY) {\n ctx.lineTo(avgX, maxY);\n ctx.lineTo(avgX, minY);\n ctx.lineTo(avgX, lastY);\n }\n };\n\n if (move) {\n point = points[pointIndex(0)];\n ctx.moveTo(point.x, point.y);\n }\n\n for (i = 0; i <= ilen; ++i) {\n point = points[pointIndex(i)];\n\n if (point.skip) {\n continue;\n }\n\n var x = point.x;\n var y = point.y;\n var truncX = x | 0;\n\n if (truncX === prevX) {\n if (y < minY) {\n minY = y;\n } else if (y > maxY) {\n maxY = y;\n }\n\n avgX = (countX * avgX + x) / ++countX;\n } else {\n drawX();\n ctx.lineTo(x, y);\n prevX = truncX;\n countX = 0;\n minY = maxY = y;\n }\n\n lastY = y;\n }\n\n drawX();\n}\n\nfunction _getSegmentMethod(line) {\n var opts = line.options;\n var borderDash = opts.borderDash && opts.borderDash.length;\n var useFastPath = !line._decimated && !line._loop && !opts.tension && opts.cubicInterpolationMode !== 'monotone' && !opts.stepped && !borderDash;\n return useFastPath ? fastPathSegment : pathSegment;\n}\n\nfunction _getInterpolationMethod(options) {\n if (options.stepped) {\n return _steppedInterpolation;\n }\n\n if (options.tension || options.cubicInterpolationMode === 'monotone') {\n return _bezierInterpolation;\n }\n\n return _pointInLine;\n}\n\nfunction strokePathWithCache(ctx, line, start, count) {\n var path = line._path;\n\n if (!path) {\n path = line._path = new Path2D();\n\n if (line.path(path, start, count)) {\n path.closePath();\n }\n }\n\n setStyle(ctx, line.options);\n ctx.stroke(path);\n}\n\nfunction strokePathDirect(ctx, line, start, count) {\n var segments = line.segments,\n options = line.options;\n\n var segmentMethod = _getSegmentMethod(line);\n\n var _iterator16 = _createForOfIteratorHelper(segments),\n _step16;\n\n try {\n for (_iterator16.s(); !(_step16 = _iterator16.n()).done;) {\n var segment = _step16.value;\n setStyle(ctx, options, segment.style);\n ctx.beginPath();\n\n if (segmentMethod(ctx, line, segment, {\n start: start,\n end: start + count - 1\n })) {\n ctx.closePath();\n }\n\n ctx.stroke();\n }\n } catch (err) {\n _iterator16.e(err);\n } finally {\n _iterator16.f();\n }\n}\n\nvar usePath2D = typeof Path2D === 'function';\n\nfunction _draw(ctx, line, start, count) {\n if (usePath2D && !line.options.segment) {\n strokePathWithCache(ctx, line, start, count);\n } else {\n strokePathDirect(ctx, line, start, count);\n }\n}\n\nvar LineElement = /*#__PURE__*/function (_Element3) {\n _inherits(LineElement, _Element3);\n\n var _super13 = _createSuper(LineElement);\n\n function LineElement(cfg) {\n var _this24;\n\n _classCallCheck(this, LineElement);\n\n _this24 = _super13.call(this);\n _this24.animated = true;\n _this24.options = undefined;\n _this24._chart = undefined;\n _this24._loop = undefined;\n _this24._fullLoop = undefined;\n _this24._path = undefined;\n _this24._points = undefined;\n _this24._segments = undefined;\n _this24._decimated = false;\n _this24._pointsUpdated = false;\n _this24._datasetIndex = undefined;\n\n if (cfg) {\n Object.assign(_assertThisInitialized(_this24), cfg);\n }\n\n return _this24;\n }\n\n _createClass(LineElement, [{\n key: \"updateControlPoints\",\n value: function updateControlPoints(chartArea, indexAxis) {\n var options = this.options;\n\n if ((options.tension || options.cubicInterpolationMode === 'monotone') && !options.stepped && !this._pointsUpdated) {\n var loop = options.spanGaps ? this._loop : this._fullLoop;\n\n _updateBezierControlPoints(this._points, options, chartArea, loop, indexAxis);\n\n this._pointsUpdated = true;\n }\n }\n }, {\n key: \"points\",\n get: function get() {\n return this._points;\n },\n set: function set(points) {\n this._points = points;\n delete this._segments;\n delete this._path;\n this._pointsUpdated = false;\n }\n }, {\n key: \"segments\",\n get: function get() {\n return this._segments || (this._segments = _computeSegments(this, this.options.segment));\n }\n }, {\n key: \"first\",\n value: function first() {\n var segments = this.segments;\n var points = this.points;\n return segments.length && points[segments[0].start];\n }\n }, {\n key: \"last\",\n value: function last() {\n var segments = this.segments;\n var points = this.points;\n var count = segments.length;\n return count && points[segments[count - 1].end];\n }\n }, {\n key: \"interpolate\",\n value: function interpolate(point, property) {\n var options = this.options;\n var value = point[property];\n var points = this.points;\n\n var segments = _boundSegments(this, {\n property: property,\n start: value,\n end: value\n });\n\n if (!segments.length) {\n return;\n }\n\n var result = [];\n\n var _interpolate = _getInterpolationMethod(options);\n\n var i, ilen;\n\n for (i = 0, ilen = segments.length; i < ilen; ++i) {\n var _segments$i = segments[i],\n start = _segments$i.start,\n end = _segments$i.end;\n var p1 = points[start];\n var p2 = points[end];\n\n if (p1 === p2) {\n result.push(p1);\n continue;\n }\n\n var t = Math.abs((value - p1[property]) / (p2[property] - p1[property]));\n\n var interpolated = _interpolate(p1, p2, t, options.stepped);\n\n interpolated[property] = point[property];\n result.push(interpolated);\n }\n\n return result.length === 1 ? result[0] : result;\n }\n }, {\n key: \"pathSegment\",\n value: function pathSegment(ctx, segment, params) {\n var segmentMethod = _getSegmentMethod(this);\n\n return segmentMethod(ctx, this, segment, params);\n }\n }, {\n key: \"path\",\n value: function path(ctx, start, count) {\n var segments = this.segments;\n\n var segmentMethod = _getSegmentMethod(this);\n\n var loop = this._loop;\n start = start || 0;\n count = count || this.points.length - start;\n\n var _iterator17 = _createForOfIteratorHelper(segments),\n _step17;\n\n try {\n for (_iterator17.s(); !(_step17 = _iterator17.n()).done;) {\n var segment = _step17.value;\n loop &= segmentMethod(ctx, this, segment, {\n start: start,\n end: start + count - 1\n });\n }\n } catch (err) {\n _iterator17.e(err);\n } finally {\n _iterator17.f();\n }\n\n return !!loop;\n }\n }, {\n key: \"draw\",\n value: function draw(ctx, chartArea, start, count) {\n var options = this.options || {};\n var points = this.points || [];\n\n if (points.length && options.borderWidth) {\n ctx.save();\n\n _draw(ctx, this, start, count);\n\n ctx.restore();\n }\n\n if (this.animated) {\n this._pointsUpdated = false;\n this._path = undefined;\n }\n }\n }]);\n\n return LineElement;\n}(Element);\n\nLineElement.id = 'line';\nLineElement.defaults = {\n borderCapStyle: 'butt',\n borderDash: [],\n borderDashOffset: 0,\n borderJoinStyle: 'miter',\n borderWidth: 3,\n capBezierPoints: true,\n cubicInterpolationMode: 'default',\n fill: false,\n spanGaps: false,\n stepped: false,\n tension: 0\n};\nLineElement.defaultRoutes = {\n backgroundColor: 'backgroundColor',\n borderColor: 'borderColor'\n};\nLineElement.descriptors = {\n _scriptable: true,\n _indexable: function _indexable(name) {\n return name !== 'borderDash' && name !== 'fill';\n }\n};\n\nfunction inRange$1(el, pos, axis, useFinalPosition) {\n var options = el.options;\n\n var _el$getProps = el.getProps([axis], useFinalPosition),\n value = _el$getProps[axis];\n\n return Math.abs(pos - value) < options.radius + options.hitRadius;\n}\n\nvar PointElement = /*#__PURE__*/function (_Element4) {\n _inherits(PointElement, _Element4);\n\n var _super14 = _createSuper(PointElement);\n\n function PointElement(cfg) {\n var _this25;\n\n _classCallCheck(this, PointElement);\n\n _this25 = _super14.call(this);\n _this25.options = undefined;\n _this25.parsed = undefined;\n _this25.skip = undefined;\n _this25.stop = undefined;\n\n if (cfg) {\n Object.assign(_assertThisInitialized(_this25), cfg);\n }\n\n return _this25;\n }\n\n _createClass(PointElement, [{\n key: \"inRange\",\n value: function inRange(mouseX, mouseY, useFinalPosition) {\n var options = this.options;\n\n var _this$getProps4 = this.getProps(['x', 'y'], useFinalPosition),\n x = _this$getProps4.x,\n y = _this$getProps4.y;\n\n return Math.pow(mouseX - x, 2) + Math.pow(mouseY - y, 2) < Math.pow(options.hitRadius + options.radius, 2);\n }\n }, {\n key: \"inXRange\",\n value: function inXRange(mouseX, useFinalPosition) {\n return inRange$1(this, mouseX, 'x', useFinalPosition);\n }\n }, {\n key: \"inYRange\",\n value: function inYRange(mouseY, useFinalPosition) {\n return inRange$1(this, mouseY, 'y', useFinalPosition);\n }\n }, {\n key: \"getCenterPoint\",\n value: function getCenterPoint(useFinalPosition) {\n var _this$getProps5 = this.getProps(['x', 'y'], useFinalPosition),\n x = _this$getProps5.x,\n y = _this$getProps5.y;\n\n return {\n x: x,\n y: y\n };\n }\n }, {\n key: \"size\",\n value: function size(options) {\n options = options || this.options || {};\n var radius = options.radius || 0;\n radius = Math.max(radius, radius && options.hoverRadius || 0);\n var borderWidth = radius && options.borderWidth || 0;\n return (radius + borderWidth) * 2;\n }\n }, {\n key: \"draw\",\n value: function draw(ctx, area) {\n var options = this.options;\n\n if (this.skip || options.radius < 0.1 || !_isPointInArea(this, area, this.size(options) / 2)) {\n return;\n }\n\n ctx.strokeStyle = options.borderColor;\n ctx.lineWidth = options.borderWidth;\n ctx.fillStyle = options.backgroundColor;\n drawPoint(ctx, options, this.x, this.y);\n }\n }, {\n key: \"getRange\",\n value: function getRange() {\n var options = this.options || {};\n return options.radius + options.hitRadius;\n }\n }]);\n\n return PointElement;\n}(Element);\n\nPointElement.id = 'point';\nPointElement.defaults = {\n borderWidth: 1,\n hitRadius: 1,\n hoverBorderWidth: 1,\n hoverRadius: 4,\n pointStyle: 'circle',\n radius: 3,\n rotation: 0\n};\nPointElement.defaultRoutes = {\n backgroundColor: 'backgroundColor',\n borderColor: 'borderColor'\n};\n\nfunction getBarBounds(bar, useFinalPosition) {\n var _bar$getProps = bar.getProps(['x', 'y', 'base', 'width', 'height'], useFinalPosition),\n x = _bar$getProps.x,\n y = _bar$getProps.y,\n base = _bar$getProps.base,\n width = _bar$getProps.width,\n height = _bar$getProps.height;\n\n var left, right, top, bottom, half;\n\n if (bar.horizontal) {\n half = height / 2;\n left = Math.min(x, base);\n right = Math.max(x, base);\n top = y - half;\n bottom = y + half;\n } else {\n half = width / 2;\n left = x - half;\n right = x + half;\n top = Math.min(y, base);\n bottom = Math.max(y, base);\n }\n\n return {\n left: left,\n top: top,\n right: right,\n bottom: bottom\n };\n}\n\nfunction skipOrLimit(skip, value, min, max) {\n return skip ? 0 : _limitValue(value, min, max);\n}\n\nfunction parseBorderWidth(bar, maxW, maxH) {\n var value = bar.options.borderWidth;\n var skip = bar.borderSkipped;\n var o = toTRBL(value);\n return {\n t: skipOrLimit(skip.top, o.top, 0, maxH),\n r: skipOrLimit(skip.right, o.right, 0, maxW),\n b: skipOrLimit(skip.bottom, o.bottom, 0, maxH),\n l: skipOrLimit(skip.left, o.left, 0, maxW)\n };\n}\n\nfunction parseBorderRadius(bar, maxW, maxH) {\n var _bar$getProps2 = bar.getProps(['enableBorderRadius']),\n enableBorderRadius = _bar$getProps2.enableBorderRadius;\n\n var value = bar.options.borderRadius;\n var o = toTRBLCorners(value);\n var maxR = Math.min(maxW, maxH);\n var skip = bar.borderSkipped;\n var enableBorder = enableBorderRadius || isObject(value);\n return {\n topLeft: skipOrLimit(!enableBorder || skip.top || skip.left, o.topLeft, 0, maxR),\n topRight: skipOrLimit(!enableBorder || skip.top || skip.right, o.topRight, 0, maxR),\n bottomLeft: skipOrLimit(!enableBorder || skip.bottom || skip.left, o.bottomLeft, 0, maxR),\n bottomRight: skipOrLimit(!enableBorder || skip.bottom || skip.right, o.bottomRight, 0, maxR)\n };\n}\n\nfunction boundingRects(bar) {\n var bounds = getBarBounds(bar);\n var width = bounds.right - bounds.left;\n var height = bounds.bottom - bounds.top;\n var border = parseBorderWidth(bar, width / 2, height / 2);\n var radius = parseBorderRadius(bar, width / 2, height / 2);\n return {\n outer: {\n x: bounds.left,\n y: bounds.top,\n w: width,\n h: height,\n radius: radius\n },\n inner: {\n x: bounds.left + border.l,\n y: bounds.top + border.t,\n w: width - border.l - border.r,\n h: height - border.t - border.b,\n radius: {\n topLeft: Math.max(0, radius.topLeft - Math.max(border.t, border.l)),\n topRight: Math.max(0, radius.topRight - Math.max(border.t, border.r)),\n bottomLeft: Math.max(0, radius.bottomLeft - Math.max(border.b, border.l)),\n bottomRight: Math.max(0, radius.bottomRight - Math.max(border.b, border.r))\n }\n }\n };\n}\n\nfunction _inRange(bar, x, y, useFinalPosition) {\n var skipX = x === null;\n var skipY = y === null;\n var skipBoth = skipX && skipY;\n var bounds = bar && !skipBoth && getBarBounds(bar, useFinalPosition);\n return bounds && (skipX || _isBetween(x, bounds.left, bounds.right)) && (skipY || _isBetween(y, bounds.top, bounds.bottom));\n}\n\nfunction hasRadius(radius) {\n return radius.topLeft || radius.topRight || radius.bottomLeft || radius.bottomRight;\n}\n\nfunction addNormalRectPath(ctx, rect) {\n ctx.rect(rect.x, rect.y, rect.w, rect.h);\n}\n\nfunction inflateRect(rect, amount) {\n var refRect = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n var x = rect.x !== refRect.x ? -amount : 0;\n var y = rect.y !== refRect.y ? -amount : 0;\n var w = (rect.x + rect.w !== refRect.x + refRect.w ? amount : 0) - x;\n var h = (rect.y + rect.h !== refRect.y + refRect.h ? amount : 0) - y;\n return {\n x: rect.x + x,\n y: rect.y + y,\n w: rect.w + w,\n h: rect.h + h,\n radius: rect.radius\n };\n}\n\nvar BarElement = /*#__PURE__*/function (_Element5) {\n _inherits(BarElement, _Element5);\n\n var _super15 = _createSuper(BarElement);\n\n function BarElement(cfg) {\n var _this26;\n\n _classCallCheck(this, BarElement);\n\n _this26 = _super15.call(this);\n _this26.options = undefined;\n _this26.horizontal = undefined;\n _this26.base = undefined;\n _this26.width = undefined;\n _this26.height = undefined;\n _this26.inflateAmount = undefined;\n\n if (cfg) {\n Object.assign(_assertThisInitialized(_this26), cfg);\n }\n\n return _this26;\n }\n\n _createClass(BarElement, [{\n key: \"draw\",\n value: function draw(ctx) {\n var inflateAmount = this.inflateAmount,\n _this$options13 = this.options,\n borderColor = _this$options13.borderColor,\n backgroundColor = _this$options13.backgroundColor;\n\n var _boundingRects = boundingRects(this),\n inner = _boundingRects.inner,\n outer = _boundingRects.outer;\n\n var addRectPath = hasRadius(outer.radius) ? addRoundedRectPath : addNormalRectPath;\n ctx.save();\n\n if (outer.w !== inner.w || outer.h !== inner.h) {\n ctx.beginPath();\n addRectPath(ctx, inflateRect(outer, inflateAmount, inner));\n ctx.clip();\n addRectPath(ctx, inflateRect(inner, -inflateAmount, outer));\n ctx.fillStyle = borderColor;\n ctx.fill('evenodd');\n }\n\n ctx.beginPath();\n addRectPath(ctx, inflateRect(inner, inflateAmount));\n ctx.fillStyle = backgroundColor;\n ctx.fill();\n ctx.restore();\n }\n }, {\n key: \"inRange\",\n value: function inRange(mouseX, mouseY, useFinalPosition) {\n return _inRange(this, mouseX, mouseY, useFinalPosition);\n }\n }, {\n key: \"inXRange\",\n value: function inXRange(mouseX, useFinalPosition) {\n return _inRange(this, mouseX, null, useFinalPosition);\n }\n }, {\n key: \"inYRange\",\n value: function inYRange(mouseY, useFinalPosition) {\n return _inRange(this, null, mouseY, useFinalPosition);\n }\n }, {\n key: \"getCenterPoint\",\n value: function getCenterPoint(useFinalPosition) {\n var _this$getProps6 = this.getProps(['x', 'y', 'base', 'horizontal'], useFinalPosition),\n x = _this$getProps6.x,\n y = _this$getProps6.y,\n base = _this$getProps6.base,\n horizontal = _this$getProps6.horizontal;\n\n return {\n x: horizontal ? (x + base) / 2 : x,\n y: horizontal ? y : (y + base) / 2\n };\n }\n }, {\n key: \"getRange\",\n value: function getRange(axis) {\n return axis === 'x' ? this.width / 2 : this.height / 2;\n }\n }]);\n\n return BarElement;\n}(Element);\n\nBarElement.id = 'bar';\nBarElement.defaults = {\n borderSkipped: 'start',\n borderWidth: 0,\n borderRadius: 0,\n inflateAmount: 'auto',\n pointStyle: undefined\n};\nBarElement.defaultRoutes = {\n backgroundColor: 'backgroundColor',\n borderColor: 'borderColor'\n};\nvar elements = /*#__PURE__*/Object.freeze({\n __proto__: null,\n ArcElement: ArcElement,\n LineElement: LineElement,\n PointElement: PointElement,\n BarElement: BarElement\n});\n\nfunction lttbDecimation(data, start, count, availableWidth, options) {\n var samples = options.samples || availableWidth;\n\n if (samples >= count) {\n return data.slice(start, start + count);\n }\n\n var decimated = [];\n var bucketWidth = (count - 2) / (samples - 2);\n var sampledIndex = 0;\n var endIndex = start + count - 1;\n var a = start;\n var i, maxAreaPoint, maxArea, area, nextA;\n decimated[sampledIndex++] = data[a];\n\n for (i = 0; i < samples - 2; i++) {\n var avgX = 0;\n var avgY = 0;\n var j = void 0;\n var avgRangeStart = Math.floor((i + 1) * bucketWidth) + 1 + start;\n var avgRangeEnd = Math.min(Math.floor((i + 2) * bucketWidth) + 1, count) + start;\n var avgRangeLength = avgRangeEnd - avgRangeStart;\n\n for (j = avgRangeStart; j < avgRangeEnd; j++) {\n avgX += data[j].x;\n avgY += data[j].y;\n }\n\n avgX /= avgRangeLength;\n avgY /= avgRangeLength;\n var rangeOffs = Math.floor(i * bucketWidth) + 1 + start;\n var rangeTo = Math.min(Math.floor((i + 1) * bucketWidth) + 1, count) + start;\n var _data$a = data[a],\n pointAx = _data$a.x,\n pointAy = _data$a.y;\n maxArea = area = -1;\n\n for (j = rangeOffs; j < rangeTo; j++) {\n area = 0.5 * Math.abs((pointAx - avgX) * (data[j].y - pointAy) - (pointAx - data[j].x) * (avgY - pointAy));\n\n if (area > maxArea) {\n maxArea = area;\n maxAreaPoint = data[j];\n nextA = j;\n }\n }\n\n decimated[sampledIndex++] = maxAreaPoint;\n a = nextA;\n }\n\n decimated[sampledIndex++] = data[endIndex];\n return decimated;\n}\n\nfunction minMaxDecimation(data, start, count, availableWidth) {\n var avgX = 0;\n var countX = 0;\n var i, point, x, y, prevX, minIndex, maxIndex, startIndex, minY, maxY;\n var decimated = [];\n var endIndex = start + count - 1;\n var xMin = data[start].x;\n var xMax = data[endIndex].x;\n var dx = xMax - xMin;\n\n for (i = start; i < start + count; ++i) {\n point = data[i];\n x = (point.x - xMin) / dx * availableWidth;\n y = point.y;\n var truncX = x | 0;\n\n if (truncX === prevX) {\n if (y < minY) {\n minY = y;\n minIndex = i;\n } else if (y > maxY) {\n maxY = y;\n maxIndex = i;\n }\n\n avgX = (countX * avgX + point.x) / ++countX;\n } else {\n var lastIndex = i - 1;\n\n if (!isNullOrUndef(minIndex) && !isNullOrUndef(maxIndex)) {\n var intermediateIndex1 = Math.min(minIndex, maxIndex);\n var intermediateIndex2 = Math.max(minIndex, maxIndex);\n\n if (intermediateIndex1 !== startIndex && intermediateIndex1 !== lastIndex) {\n decimated.push(_objectSpread(_objectSpread({}, data[intermediateIndex1]), {}, {\n x: avgX\n }));\n }\n\n if (intermediateIndex2 !== startIndex && intermediateIndex2 !== lastIndex) {\n decimated.push(_objectSpread(_objectSpread({}, data[intermediateIndex2]), {}, {\n x: avgX\n }));\n }\n }\n\n if (i > 0 && lastIndex !== startIndex) {\n decimated.push(data[lastIndex]);\n }\n\n decimated.push(point);\n prevX = truncX;\n countX = 0;\n minY = maxY = y;\n minIndex = maxIndex = startIndex = i;\n }\n }\n\n return decimated;\n}\n\nfunction cleanDecimatedDataset(dataset) {\n if (dataset._decimated) {\n var data = dataset._data;\n delete dataset._decimated;\n delete dataset._data;\n Object.defineProperty(dataset, 'data', {\n value: data\n });\n }\n}\n\nfunction cleanDecimatedData(chart) {\n chart.data.datasets.forEach(function (dataset) {\n cleanDecimatedDataset(dataset);\n });\n}\n\nfunction getStartAndCountOfVisiblePointsSimplified(meta, points) {\n var pointCount = points.length;\n var start = 0;\n var count;\n var iScale = meta.iScale;\n\n var _iScale$getUserBounds = iScale.getUserBounds(),\n min = _iScale$getUserBounds.min,\n max = _iScale$getUserBounds.max,\n minDefined = _iScale$getUserBounds.minDefined,\n maxDefined = _iScale$getUserBounds.maxDefined;\n\n if (minDefined) {\n start = _limitValue(_lookupByKey(points, iScale.axis, min).lo, 0, pointCount - 1);\n }\n\n if (maxDefined) {\n count = _limitValue(_lookupByKey(points, iScale.axis, max).hi + 1, start, pointCount) - start;\n } else {\n count = pointCount - start;\n }\n\n return {\n start: start,\n count: count\n };\n}\n\nvar plugin_decimation = {\n id: 'decimation',\n defaults: {\n algorithm: 'min-max',\n enabled: false\n },\n beforeElementsUpdate: function beforeElementsUpdate(chart, args, options) {\n if (!options.enabled) {\n cleanDecimatedData(chart);\n return;\n }\n\n var availableWidth = chart.width;\n chart.data.datasets.forEach(function (dataset, datasetIndex) {\n var _data = dataset._data,\n indexAxis = dataset.indexAxis;\n var meta = chart.getDatasetMeta(datasetIndex);\n var data = _data || dataset.data;\n\n if (resolve([indexAxis, chart.options.indexAxis]) === 'y') {\n return;\n }\n\n if (!meta.controller.supportsDecimation) {\n return;\n }\n\n var xAxis = chart.scales[meta.xAxisID];\n\n if (xAxis.type !== 'linear' && xAxis.type !== 'time') {\n return;\n }\n\n if (chart.options.parsing) {\n return;\n }\n\n var _getStartAndCountOfVi3 = getStartAndCountOfVisiblePointsSimplified(meta, data),\n start = _getStartAndCountOfVi3.start,\n count = _getStartAndCountOfVi3.count;\n\n var threshold = options.threshold || 4 * availableWidth;\n\n if (count <= threshold) {\n cleanDecimatedDataset(dataset);\n return;\n }\n\n if (isNullOrUndef(_data)) {\n dataset._data = data;\n delete dataset.data;\n Object.defineProperty(dataset, 'data', {\n configurable: true,\n enumerable: true,\n get: function get() {\n return this._decimated;\n },\n set: function set(d) {\n this._data = d;\n }\n });\n }\n\n var decimated;\n\n switch (options.algorithm) {\n case 'lttb':\n decimated = lttbDecimation(data, start, count, availableWidth, options);\n break;\n\n case 'min-max':\n decimated = minMaxDecimation(data, start, count, availableWidth);\n break;\n\n default:\n throw new Error(\"Unsupported decimation algorithm '\".concat(options.algorithm, \"'\"));\n }\n\n dataset._decimated = decimated;\n });\n },\n destroy: function destroy(chart) {\n cleanDecimatedData(chart);\n }\n};\n\nfunction _segments(line, target, property) {\n var segments = line.segments;\n var points = line.points;\n var tpoints = target.points;\n var parts = [];\n\n var _iterator18 = _createForOfIteratorHelper(segments),\n _step18;\n\n try {\n for (_iterator18.s(); !(_step18 = _iterator18.n()).done;) {\n var segment = _step18.value;\n var start = segment.start,\n end = segment.end;\n end = _findSegmentEnd(start, end, points);\n\n var bounds = _getBounds(property, points[start], points[end], segment.loop);\n\n if (!target.segments) {\n parts.push({\n source: segment,\n target: bounds,\n start: points[start],\n end: points[end]\n });\n continue;\n }\n\n var targetSegments = _boundSegments(target, bounds);\n\n var _iterator19 = _createForOfIteratorHelper(targetSegments),\n _step19;\n\n try {\n for (_iterator19.s(); !(_step19 = _iterator19.n()).done;) {\n var tgt = _step19.value;\n\n var subBounds = _getBounds(property, tpoints[tgt.start], tpoints[tgt.end], tgt.loop);\n\n var fillSources = _boundSegment(segment, points, subBounds);\n\n var _iterator20 = _createForOfIteratorHelper(fillSources),\n _step20;\n\n try {\n for (_iterator20.s(); !(_step20 = _iterator20.n()).done;) {\n var fillSource = _step20.value;\n parts.push({\n source: fillSource,\n target: tgt,\n start: _defineProperty({}, property, _getEdge(bounds, subBounds, 'start', Math.max)),\n end: _defineProperty({}, property, _getEdge(bounds, subBounds, 'end', Math.min))\n });\n }\n } catch (err) {\n _iterator20.e(err);\n } finally {\n _iterator20.f();\n }\n }\n } catch (err) {\n _iterator19.e(err);\n } finally {\n _iterator19.f();\n }\n }\n } catch (err) {\n _iterator18.e(err);\n } finally {\n _iterator18.f();\n }\n\n return parts;\n}\n\nfunction _getBounds(property, first, last, loop) {\n if (loop) {\n return;\n }\n\n var start = first[property];\n var end = last[property];\n\n if (property === 'angle') {\n start = _normalizeAngle(start);\n end = _normalizeAngle(end);\n }\n\n return {\n property: property,\n start: start,\n end: end\n };\n}\n\nfunction _pointsFromSegments(boundary, line) {\n var _ref7 = boundary || {},\n _ref7$x = _ref7.x,\n x = _ref7$x === void 0 ? null : _ref7$x,\n _ref7$y = _ref7.y,\n y = _ref7$y === void 0 ? null : _ref7$y;\n\n var linePoints = line.points;\n var points = [];\n line.segments.forEach(function (_ref8) {\n var start = _ref8.start,\n end = _ref8.end;\n end = _findSegmentEnd(start, end, linePoints);\n var first = linePoints[start];\n var last = linePoints[end];\n\n if (y !== null) {\n points.push({\n x: first.x,\n y: y\n });\n points.push({\n x: last.x,\n y: y\n });\n } else if (x !== null) {\n points.push({\n x: x,\n y: first.y\n });\n points.push({\n x: x,\n y: last.y\n });\n }\n });\n return points;\n}\n\nfunction _findSegmentEnd(start, end, points) {\n for (; end > start; end--) {\n var point = points[end];\n\n if (!isNaN(point.x) && !isNaN(point.y)) {\n break;\n }\n }\n\n return end;\n}\n\nfunction _getEdge(a, b, prop, fn) {\n if (a && b) {\n return fn(a[prop], b[prop]);\n }\n\n return a ? a[prop] : b ? b[prop] : 0;\n}\n\nfunction _createBoundaryLine(boundary, line) {\n var points = [];\n var _loop = false;\n\n if (isArray(boundary)) {\n _loop = true;\n points = boundary;\n } else {\n points = _pointsFromSegments(boundary, line);\n }\n\n return points.length ? new LineElement({\n points: points,\n options: {\n tension: 0\n },\n _loop: _loop,\n _fullLoop: _loop\n }) : null;\n}\n\nfunction _shouldApplyFill(source) {\n return source && source.fill !== false;\n}\n\nfunction _resolveTarget(sources, index, propagate) {\n var source = sources[index];\n var fill = source.fill;\n var visited = [index];\n var target;\n\n if (!propagate) {\n return fill;\n }\n\n while (fill !== false && visited.indexOf(fill) === -1) {\n if (!isNumberFinite(fill)) {\n return fill;\n }\n\n target = sources[fill];\n\n if (!target) {\n return false;\n }\n\n if (target.visible) {\n return fill;\n }\n\n visited.push(fill);\n fill = target.fill;\n }\n\n return false;\n}\n\nfunction _decodeFill(line, index, count) {\n var fill = parseFillOption(line);\n\n if (isObject(fill)) {\n return isNaN(fill.value) ? false : fill;\n }\n\n var target = parseFloat(fill);\n\n if (isNumberFinite(target) && Math.floor(target) === target) {\n return decodeTargetIndex(fill[0], index, target, count);\n }\n\n return ['origin', 'start', 'end', 'stack', 'shape'].indexOf(fill) >= 0 && fill;\n}\n\nfunction decodeTargetIndex(firstCh, index, target, count) {\n if (firstCh === '-' || firstCh === '+') {\n target = index + target;\n }\n\n if (target === index || target < 0 || target >= count) {\n return false;\n }\n\n return target;\n}\n\nfunction _getTargetPixel(fill, scale) {\n var pixel = null;\n\n if (fill === 'start') {\n pixel = scale.bottom;\n } else if (fill === 'end') {\n pixel = scale.top;\n } else if (isObject(fill)) {\n pixel = scale.getPixelForValue(fill.value);\n } else if (scale.getBasePixel) {\n pixel = scale.getBasePixel();\n }\n\n return pixel;\n}\n\nfunction _getTargetValue(fill, scale, startValue) {\n var value;\n\n if (fill === 'start') {\n value = startValue;\n } else if (fill === 'end') {\n value = scale.options.reverse ? scale.min : scale.max;\n } else if (isObject(fill)) {\n value = fill.value;\n } else {\n value = scale.getBaseValue();\n }\n\n return value;\n}\n\nfunction parseFillOption(line) {\n var options = line.options;\n var fillOption = options.fill;\n var fill = valueOrDefault(fillOption && fillOption.target, fillOption);\n\n if (fill === undefined) {\n fill = !!options.backgroundColor;\n }\n\n if (fill === false || fill === null) {\n return false;\n }\n\n if (fill === true) {\n return 'origin';\n }\n\n return fill;\n}\n\nfunction _buildStackLine(source) {\n var scale = source.scale,\n index = source.index,\n line = source.line;\n var points = [];\n var segments = line.segments;\n var sourcePoints = line.points;\n var linesBelow = getLinesBelow(scale, index);\n linesBelow.push(_createBoundaryLine({\n x: null,\n y: scale.bottom\n }, line));\n\n for (var i = 0; i < segments.length; i++) {\n var segment = segments[i];\n\n for (var j = segment.start; j <= segment.end; j++) {\n addPointsBelow(points, sourcePoints[j], linesBelow);\n }\n }\n\n return new LineElement({\n points: points,\n options: {}\n });\n}\n\nfunction getLinesBelow(scale, index) {\n var below = [];\n var metas = scale.getMatchingVisibleMetas('line');\n\n for (var i = 0; i < metas.length; i++) {\n var meta = metas[i];\n\n if (meta.index === index) {\n break;\n }\n\n if (!meta.hidden) {\n below.unshift(meta.dataset);\n }\n }\n\n return below;\n}\n\nfunction addPointsBelow(points, sourcePoint, linesBelow) {\n var postponed = [];\n\n for (var j = 0; j < linesBelow.length; j++) {\n var line = linesBelow[j];\n\n var _findPoint = findPoint(line, sourcePoint, 'x'),\n first = _findPoint.first,\n last = _findPoint.last,\n point = _findPoint.point;\n\n if (!point || first && last) {\n continue;\n }\n\n if (first) {\n postponed.unshift(point);\n } else {\n points.push(point);\n\n if (!last) {\n break;\n }\n }\n }\n\n points.push.apply(points, postponed);\n}\n\nfunction findPoint(line, sourcePoint, property) {\n var point = line.interpolate(sourcePoint, property);\n\n if (!point) {\n return {};\n }\n\n var pointValue = point[property];\n var segments = line.segments;\n var linePoints = line.points;\n var first = false;\n var last = false;\n\n for (var i = 0; i < segments.length; i++) {\n var segment = segments[i];\n var firstValue = linePoints[segment.start][property];\n var lastValue = linePoints[segment.end][property];\n\n if (_isBetween(pointValue, firstValue, lastValue)) {\n first = pointValue === firstValue;\n last = pointValue === lastValue;\n break;\n }\n }\n\n return {\n first: first,\n last: last,\n point: point\n };\n}\n\nvar simpleArc = /*#__PURE__*/function () {\n function simpleArc(opts) {\n _classCallCheck(this, simpleArc);\n\n this.x = opts.x;\n this.y = opts.y;\n this.radius = opts.radius;\n }\n\n _createClass(simpleArc, [{\n key: \"pathSegment\",\n value: function pathSegment(ctx, bounds, opts) {\n var x = this.x,\n y = this.y,\n radius = this.radius;\n bounds = bounds || {\n start: 0,\n end: TAU\n };\n ctx.arc(x, y, radius, bounds.end, bounds.start, true);\n return !opts.bounds;\n }\n }, {\n key: \"interpolate\",\n value: function interpolate(point) {\n var x = this.x,\n y = this.y,\n radius = this.radius;\n var angle = point.angle;\n return {\n x: x + Math.cos(angle) * radius,\n y: y + Math.sin(angle) * radius,\n angle: angle\n };\n }\n }]);\n\n return simpleArc;\n}();\n\nfunction _getTarget(source) {\n var chart = source.chart,\n fill = source.fill,\n line = source.line;\n\n if (isNumberFinite(fill)) {\n return getLineByIndex(chart, fill);\n }\n\n if (fill === 'stack') {\n return _buildStackLine(source);\n }\n\n if (fill === 'shape') {\n return true;\n }\n\n var boundary = computeBoundary(source);\n\n if (boundary instanceof simpleArc) {\n return boundary;\n }\n\n return _createBoundaryLine(boundary, line);\n}\n\nfunction getLineByIndex(chart, index) {\n var meta = chart.getDatasetMeta(index);\n var visible = meta && chart.isDatasetVisible(index);\n return visible ? meta.dataset : null;\n}\n\nfunction computeBoundary(source) {\n var scale = source.scale || {};\n\n if (scale.getPointPositionForValue) {\n return computeCircularBoundary(source);\n }\n\n return computeLinearBoundary(source);\n}\n\nfunction computeLinearBoundary(source) {\n var _source$scale = source.scale,\n scale = _source$scale === void 0 ? {} : _source$scale,\n fill = source.fill;\n\n var pixel = _getTargetPixel(fill, scale);\n\n if (isNumberFinite(pixel)) {\n var horizontal = scale.isHorizontal();\n return {\n x: horizontal ? pixel : null,\n y: horizontal ? null : pixel\n };\n }\n\n return null;\n}\n\nfunction computeCircularBoundary(source) {\n var scale = source.scale,\n fill = source.fill;\n var options = scale.options;\n var length = scale.getLabels().length;\n var start = options.reverse ? scale.max : scale.min;\n\n var value = _getTargetValue(fill, scale, start);\n\n var target = [];\n\n if (options.grid.circular) {\n var center = scale.getPointPositionForValue(0, start);\n return new simpleArc({\n x: center.x,\n y: center.y,\n radius: scale.getDistanceFromCenterForValue(value)\n });\n }\n\n for (var i = 0; i < length; ++i) {\n target.push(scale.getPointPositionForValue(i, value));\n }\n\n return target;\n}\n\nfunction _drawfill(ctx, source, area) {\n var target = _getTarget(source);\n\n var line = source.line,\n scale = source.scale,\n axis = source.axis;\n var lineOpts = line.options;\n var fillOption = lineOpts.fill;\n var color = lineOpts.backgroundColor;\n\n var _ref9 = fillOption || {},\n _ref9$above = _ref9.above,\n above = _ref9$above === void 0 ? color : _ref9$above,\n _ref9$below = _ref9.below,\n below = _ref9$below === void 0 ? color : _ref9$below;\n\n if (target && line.points.length) {\n clipArea(ctx, area);\n doFill(ctx, {\n line: line,\n target: target,\n above: above,\n below: below,\n area: area,\n scale: scale,\n axis: axis\n });\n unclipArea(ctx);\n }\n}\n\nfunction doFill(ctx, cfg) {\n var line = cfg.line,\n target = cfg.target,\n above = cfg.above,\n below = cfg.below,\n area = cfg.area,\n scale = cfg.scale;\n var property = line._loop ? 'angle' : cfg.axis;\n ctx.save();\n\n if (property === 'x' && below !== above) {\n clipVertical(ctx, target, area.top);\n fill(ctx, {\n line: line,\n target: target,\n color: above,\n scale: scale,\n property: property\n });\n ctx.restore();\n ctx.save();\n clipVertical(ctx, target, area.bottom);\n }\n\n fill(ctx, {\n line: line,\n target: target,\n color: below,\n scale: scale,\n property: property\n });\n ctx.restore();\n}\n\nfunction clipVertical(ctx, target, clipY) {\n var segments = target.segments,\n points = target.points;\n var first = true;\n var lineLoop = false;\n ctx.beginPath();\n\n var _iterator21 = _createForOfIteratorHelper(segments),\n _step21;\n\n try {\n for (_iterator21.s(); !(_step21 = _iterator21.n()).done;) {\n var segment = _step21.value;\n var start = segment.start,\n end = segment.end;\n var firstPoint = points[start];\n\n var lastPoint = points[_findSegmentEnd(start, end, points)];\n\n if (first) {\n ctx.moveTo(firstPoint.x, firstPoint.y);\n first = false;\n } else {\n ctx.lineTo(firstPoint.x, clipY);\n ctx.lineTo(firstPoint.x, firstPoint.y);\n }\n\n lineLoop = !!target.pathSegment(ctx, segment, {\n move: lineLoop\n });\n\n if (lineLoop) {\n ctx.closePath();\n } else {\n ctx.lineTo(lastPoint.x, clipY);\n }\n }\n } catch (err) {\n _iterator21.e(err);\n } finally {\n _iterator21.f();\n }\n\n ctx.lineTo(target.first().x, clipY);\n ctx.closePath();\n ctx.clip();\n}\n\nfunction fill(ctx, cfg) {\n var line = cfg.line,\n target = cfg.target,\n property = cfg.property,\n color = cfg.color,\n scale = cfg.scale;\n\n var segments = _segments(line, target, property);\n\n var _iterator22 = _createForOfIteratorHelper(segments),\n _step22;\n\n try {\n for (_iterator22.s(); !(_step22 = _iterator22.n()).done;) {\n var _step22$value = _step22.value,\n src = _step22$value.source,\n tgt = _step22$value.target,\n start = _step22$value.start,\n end = _step22$value.end;\n var _src$style = src.style;\n _src$style = _src$style === void 0 ? {} : _src$style;\n var _src$style$background = _src$style.backgroundColor,\n backgroundColor = _src$style$background === void 0 ? color : _src$style$background;\n var notShape = target !== true;\n ctx.save();\n ctx.fillStyle = backgroundColor;\n clipBounds(ctx, scale, notShape && _getBounds(property, start, end));\n ctx.beginPath();\n var lineLoop = !!line.pathSegment(ctx, src);\n var loop = void 0;\n\n if (notShape) {\n if (lineLoop) {\n ctx.closePath();\n } else {\n interpolatedLineTo(ctx, target, end, property);\n }\n\n var targetLoop = !!target.pathSegment(ctx, tgt, {\n move: lineLoop,\n reverse: true\n });\n loop = lineLoop && targetLoop;\n\n if (!loop) {\n interpolatedLineTo(ctx, target, start, property);\n }\n }\n\n ctx.closePath();\n ctx.fill(loop ? 'evenodd' : 'nonzero');\n ctx.restore();\n }\n } catch (err) {\n _iterator22.e(err);\n } finally {\n _iterator22.f();\n }\n}\n\nfunction clipBounds(ctx, scale, bounds) {\n var _scale$chart$chartAre = scale.chart.chartArea,\n top = _scale$chart$chartAre.top,\n bottom = _scale$chart$chartAre.bottom;\n\n var _ref10 = bounds || {},\n property = _ref10.property,\n start = _ref10.start,\n end = _ref10.end;\n\n if (property === 'x') {\n ctx.beginPath();\n ctx.rect(start, top, end - start, bottom - top);\n ctx.clip();\n }\n}\n\nfunction interpolatedLineTo(ctx, target, point, property) {\n var interpolatedPoint = target.interpolate(point, property);\n\n if (interpolatedPoint) {\n ctx.lineTo(interpolatedPoint.x, interpolatedPoint.y);\n }\n}\n\nvar index = {\n id: 'filler',\n afterDatasetsUpdate: function afterDatasetsUpdate(chart, _args, options) {\n var count = (chart.data.datasets || []).length;\n var sources = [];\n var meta, i, line, source;\n\n for (i = 0; i < count; ++i) {\n meta = chart.getDatasetMeta(i);\n line = meta.dataset;\n source = null;\n\n if (line && line.options && line instanceof LineElement) {\n source = {\n visible: chart.isDatasetVisible(i),\n index: i,\n fill: _decodeFill(line, i, count),\n chart: chart,\n axis: meta.controller.options.indexAxis,\n scale: meta.vScale,\n line: line\n };\n }\n\n meta.$filler = source;\n sources.push(source);\n }\n\n for (i = 0; i < count; ++i) {\n source = sources[i];\n\n if (!source || source.fill === false) {\n continue;\n }\n\n source.fill = _resolveTarget(sources, i, options.propagate);\n }\n },\n beforeDraw: function beforeDraw(chart, _args, options) {\n var draw = options.drawTime === 'beforeDraw';\n var metasets = chart.getSortedVisibleDatasetMetas();\n var area = chart.chartArea;\n\n for (var i = metasets.length - 1; i >= 0; --i) {\n var source = metasets[i].$filler;\n\n if (!source) {\n continue;\n }\n\n source.line.updateControlPoints(area, source.axis);\n\n if (draw && source.fill) {\n _drawfill(chart.ctx, source, area);\n }\n }\n },\n beforeDatasetsDraw: function beforeDatasetsDraw(chart, _args, options) {\n if (options.drawTime !== 'beforeDatasetsDraw') {\n return;\n }\n\n var metasets = chart.getSortedVisibleDatasetMetas();\n\n for (var i = metasets.length - 1; i >= 0; --i) {\n var source = metasets[i].$filler;\n\n if (_shouldApplyFill(source)) {\n _drawfill(chart.ctx, source, chart.chartArea);\n }\n }\n },\n beforeDatasetDraw: function beforeDatasetDraw(chart, args, options) {\n var source = args.meta.$filler;\n\n if (!_shouldApplyFill(source) || options.drawTime !== 'beforeDatasetDraw') {\n return;\n }\n\n _drawfill(chart.ctx, source, chart.chartArea);\n },\n defaults: {\n propagate: true,\n drawTime: 'beforeDatasetDraw'\n }\n};\n\nvar getBoxSize = function getBoxSize(labelOpts, fontSize) {\n var _labelOpts$boxHeight = labelOpts.boxHeight,\n boxHeight = _labelOpts$boxHeight === void 0 ? fontSize : _labelOpts$boxHeight,\n _labelOpts$boxWidth = labelOpts.boxWidth,\n boxWidth = _labelOpts$boxWidth === void 0 ? fontSize : _labelOpts$boxWidth;\n\n if (labelOpts.usePointStyle) {\n boxHeight = Math.min(boxHeight, fontSize);\n boxWidth = labelOpts.pointStyleWidth || Math.min(boxWidth, fontSize);\n }\n\n return {\n boxWidth: boxWidth,\n boxHeight: boxHeight,\n itemHeight: Math.max(fontSize, boxHeight)\n };\n};\n\nvar itemsEqual = function itemsEqual(a, b) {\n return a !== null && b !== null && a.datasetIndex === b.datasetIndex && a.index === b.index;\n};\n\nvar Legend = /*#__PURE__*/function (_Element6) {\n _inherits(Legend, _Element6);\n\n var _super16 = _createSuper(Legend);\n\n function Legend(config) {\n var _this27;\n\n _classCallCheck(this, Legend);\n\n _this27 = _super16.call(this);\n _this27._added = false;\n _this27.legendHitBoxes = [];\n _this27._hoveredItem = null;\n _this27.doughnutMode = false;\n _this27.chart = config.chart;\n _this27.options = config.options;\n _this27.ctx = config.ctx;\n _this27.legendItems = undefined;\n _this27.columnSizes = undefined;\n _this27.lineWidths = undefined;\n _this27.maxHeight = undefined;\n _this27.maxWidth = undefined;\n _this27.top = undefined;\n _this27.bottom = undefined;\n _this27.left = undefined;\n _this27.right = undefined;\n _this27.height = undefined;\n _this27.width = undefined;\n _this27._margins = undefined;\n _this27.position = undefined;\n _this27.weight = undefined;\n _this27.fullSize = undefined;\n return _this27;\n }\n\n _createClass(Legend, [{\n key: \"update\",\n value: function update(maxWidth, maxHeight, margins) {\n this.maxWidth = maxWidth;\n this.maxHeight = maxHeight;\n this._margins = margins;\n this.setDimensions();\n this.buildLabels();\n this.fit();\n }\n }, {\n key: \"setDimensions\",\n value: function setDimensions() {\n if (this.isHorizontal()) {\n this.width = this.maxWidth;\n this.left = this._margins.left;\n this.right = this.width;\n } else {\n this.height = this.maxHeight;\n this.top = this._margins.top;\n this.bottom = this.height;\n }\n }\n }, {\n key: \"buildLabels\",\n value: function buildLabels() {\n var _this28 = this;\n\n var labelOpts = this.options.labels || {};\n var legendItems = callback(labelOpts.generateLabels, [this.chart], this) || [];\n\n if (labelOpts.filter) {\n legendItems = legendItems.filter(function (item) {\n return labelOpts.filter(item, _this28.chart.data);\n });\n }\n\n if (labelOpts.sort) {\n legendItems = legendItems.sort(function (a, b) {\n return labelOpts.sort(a, b, _this28.chart.data);\n });\n }\n\n if (this.options.reverse) {\n legendItems.reverse();\n }\n\n this.legendItems = legendItems;\n }\n }, {\n key: \"fit\",\n value: function fit() {\n var options = this.options,\n ctx = this.ctx;\n\n if (!options.display) {\n this.width = this.height = 0;\n return;\n }\n\n var labelOpts = options.labels;\n var labelFont = toFont(labelOpts.font);\n var fontSize = labelFont.size;\n\n var titleHeight = this._computeTitleHeight();\n\n var _getBoxSize = getBoxSize(labelOpts, fontSize),\n boxWidth = _getBoxSize.boxWidth,\n itemHeight = _getBoxSize.itemHeight;\n\n var width, height;\n ctx.font = labelFont.string;\n\n if (this.isHorizontal()) {\n width = this.maxWidth;\n height = this._fitRows(titleHeight, fontSize, boxWidth, itemHeight) + 10;\n } else {\n height = this.maxHeight;\n width = this._fitCols(titleHeight, fontSize, boxWidth, itemHeight) + 10;\n }\n\n this.width = Math.min(width, options.maxWidth || this.maxWidth);\n this.height = Math.min(height, options.maxHeight || this.maxHeight);\n }\n }, {\n key: \"_fitRows\",\n value: function _fitRows(titleHeight, fontSize, boxWidth, itemHeight) {\n var ctx = this.ctx,\n maxWidth = this.maxWidth,\n padding = this.options.labels.padding;\n var hitboxes = this.legendHitBoxes = [];\n var lineWidths = this.lineWidths = [0];\n var lineHeight = itemHeight + padding;\n var totalHeight = titleHeight;\n ctx.textAlign = 'left';\n ctx.textBaseline = 'middle';\n var row = -1;\n var top = -lineHeight;\n this.legendItems.forEach(function (legendItem, i) {\n var itemWidth = boxWidth + fontSize / 2 + ctx.measureText(legendItem.text).width;\n\n if (i === 0 || lineWidths[lineWidths.length - 1] + itemWidth + 2 * padding > maxWidth) {\n totalHeight += lineHeight;\n lineWidths[lineWidths.length - (i > 0 ? 0 : 1)] = 0;\n top += lineHeight;\n row++;\n }\n\n hitboxes[i] = {\n left: 0,\n top: top,\n row: row,\n width: itemWidth,\n height: itemHeight\n };\n lineWidths[lineWidths.length - 1] += itemWidth + padding;\n });\n return totalHeight;\n }\n }, {\n key: \"_fitCols\",\n value: function _fitCols(titleHeight, fontSize, boxWidth, itemHeight) {\n var ctx = this.ctx,\n maxHeight = this.maxHeight,\n padding = this.options.labels.padding;\n var hitboxes = this.legendHitBoxes = [];\n var columnSizes = this.columnSizes = [];\n var heightLimit = maxHeight - titleHeight;\n var totalWidth = padding;\n var currentColWidth = 0;\n var currentColHeight = 0;\n var left = 0;\n var col = 0;\n this.legendItems.forEach(function (legendItem, i) {\n var itemWidth = boxWidth + fontSize / 2 + ctx.measureText(legendItem.text).width;\n\n if (i > 0 && currentColHeight + itemHeight + 2 * padding > heightLimit) {\n totalWidth += currentColWidth + padding;\n columnSizes.push({\n width: currentColWidth,\n height: currentColHeight\n });\n left += currentColWidth + padding;\n col++;\n currentColWidth = currentColHeight = 0;\n }\n\n hitboxes[i] = {\n left: left,\n top: currentColHeight,\n col: col,\n width: itemWidth,\n height: itemHeight\n };\n currentColWidth = Math.max(currentColWidth, itemWidth);\n currentColHeight += itemHeight + padding;\n });\n totalWidth += currentColWidth;\n columnSizes.push({\n width: currentColWidth,\n height: currentColHeight\n });\n return totalWidth;\n }\n }, {\n key: \"adjustHitBoxes\",\n value: function adjustHitBoxes() {\n if (!this.options.display) {\n return;\n }\n\n var titleHeight = this._computeTitleHeight();\n\n var hitboxes = this.legendHitBoxes,\n _this$options14 = this.options,\n align = _this$options14.align,\n padding = _this$options14.labels.padding,\n rtl = _this$options14.rtl;\n var rtlHelper = getRtlAdapter(rtl, this.left, this.width);\n\n if (this.isHorizontal()) {\n var row = 0;\n\n var left = _alignStartEnd(align, this.left + padding, this.right - this.lineWidths[row]);\n\n var _iterator23 = _createForOfIteratorHelper(hitboxes),\n _step23;\n\n try {\n for (_iterator23.s(); !(_step23 = _iterator23.n()).done;) {\n var hitbox = _step23.value;\n\n if (row !== hitbox.row) {\n row = hitbox.row;\n left = _alignStartEnd(align, this.left + padding, this.right - this.lineWidths[row]);\n }\n\n hitbox.top += this.top + titleHeight + padding;\n hitbox.left = rtlHelper.leftForLtr(rtlHelper.x(left), hitbox.width);\n left += hitbox.width + padding;\n }\n } catch (err) {\n _iterator23.e(err);\n } finally {\n _iterator23.f();\n }\n } else {\n var col = 0;\n\n var top = _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - this.columnSizes[col].height);\n\n var _iterator24 = _createForOfIteratorHelper(hitboxes),\n _step24;\n\n try {\n for (_iterator24.s(); !(_step24 = _iterator24.n()).done;) {\n var _hitbox = _step24.value;\n\n if (_hitbox.col !== col) {\n col = _hitbox.col;\n top = _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - this.columnSizes[col].height);\n }\n\n _hitbox.top = top;\n _hitbox.left += this.left + padding;\n _hitbox.left = rtlHelper.leftForLtr(rtlHelper.x(_hitbox.left), _hitbox.width);\n top += _hitbox.height + padding;\n }\n } catch (err) {\n _iterator24.e(err);\n } finally {\n _iterator24.f();\n }\n }\n }\n }, {\n key: \"isHorizontal\",\n value: function isHorizontal() {\n return this.options.position === 'top' || this.options.position === 'bottom';\n }\n }, {\n key: \"draw\",\n value: function draw() {\n if (this.options.display) {\n var ctx = this.ctx;\n clipArea(ctx, this);\n\n this._draw();\n\n unclipArea(ctx);\n }\n }\n }, {\n key: \"_draw\",\n value: function _draw() {\n var _this29 = this;\n\n var opts = this.options,\n columnSizes = this.columnSizes,\n lineWidths = this.lineWidths,\n ctx = this.ctx;\n var align = opts.align,\n labelOpts = opts.labels;\n var defaultColor = defaults.color;\n var rtlHelper = getRtlAdapter(opts.rtl, this.left, this.width);\n var labelFont = toFont(labelOpts.font);\n var fontColor = labelOpts.color,\n padding = labelOpts.padding;\n var fontSize = labelFont.size;\n var halfFontSize = fontSize / 2;\n var cursor;\n this.drawTitle();\n ctx.textAlign = rtlHelper.textAlign('left');\n ctx.textBaseline = 'middle';\n ctx.lineWidth = 0.5;\n ctx.font = labelFont.string;\n\n var _getBoxSize2 = getBoxSize(labelOpts, fontSize),\n boxWidth = _getBoxSize2.boxWidth,\n boxHeight = _getBoxSize2.boxHeight,\n itemHeight = _getBoxSize2.itemHeight;\n\n var drawLegendBox = function drawLegendBox(x, y, legendItem) {\n if (isNaN(boxWidth) || boxWidth <= 0 || isNaN(boxHeight) || boxHeight < 0) {\n return;\n }\n\n ctx.save();\n var lineWidth = valueOrDefault(legendItem.lineWidth, 1);\n ctx.fillStyle = valueOrDefault(legendItem.fillStyle, defaultColor);\n ctx.lineCap = valueOrDefault(legendItem.lineCap, 'butt');\n ctx.lineDashOffset = valueOrDefault(legendItem.lineDashOffset, 0);\n ctx.lineJoin = valueOrDefault(legendItem.lineJoin, 'miter');\n ctx.lineWidth = lineWidth;\n ctx.strokeStyle = valueOrDefault(legendItem.strokeStyle, defaultColor);\n ctx.setLineDash(valueOrDefault(legendItem.lineDash, []));\n\n if (labelOpts.usePointStyle) {\n var drawOptions = {\n radius: boxHeight * Math.SQRT2 / 2,\n pointStyle: legendItem.pointStyle,\n rotation: legendItem.rotation,\n borderWidth: lineWidth\n };\n var centerX = rtlHelper.xPlus(x, boxWidth / 2);\n var centerY = y + halfFontSize;\n drawPointLegend(ctx, drawOptions, centerX, centerY, labelOpts.pointStyleWidth && boxWidth);\n } else {\n var yBoxTop = y + Math.max((fontSize - boxHeight) / 2, 0);\n var xBoxLeft = rtlHelper.leftForLtr(x, boxWidth);\n var borderRadius = toTRBLCorners(legendItem.borderRadius);\n ctx.beginPath();\n\n if (Object.values(borderRadius).some(function (v) {\n return v !== 0;\n })) {\n addRoundedRectPath(ctx, {\n x: xBoxLeft,\n y: yBoxTop,\n w: boxWidth,\n h: boxHeight,\n radius: borderRadius\n });\n } else {\n ctx.rect(xBoxLeft, yBoxTop, boxWidth, boxHeight);\n }\n\n ctx.fill();\n\n if (lineWidth !== 0) {\n ctx.stroke();\n }\n }\n\n ctx.restore();\n };\n\n var fillText = function fillText(x, y, legendItem) {\n renderText(ctx, legendItem.text, x, y + itemHeight / 2, labelFont, {\n strikethrough: legendItem.hidden,\n textAlign: rtlHelper.textAlign(legendItem.textAlign)\n });\n };\n\n var isHorizontal = this.isHorizontal();\n\n var titleHeight = this._computeTitleHeight();\n\n if (isHorizontal) {\n cursor = {\n x: _alignStartEnd(align, this.left + padding, this.right - lineWidths[0]),\n y: this.top + padding + titleHeight,\n line: 0\n };\n } else {\n cursor = {\n x: this.left + padding,\n y: _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - columnSizes[0].height),\n line: 0\n };\n }\n\n overrideTextDirection(this.ctx, opts.textDirection);\n var lineHeight = itemHeight + padding;\n this.legendItems.forEach(function (legendItem, i) {\n ctx.strokeStyle = legendItem.fontColor || fontColor;\n ctx.fillStyle = legendItem.fontColor || fontColor;\n var textWidth = ctx.measureText(legendItem.text).width;\n var textAlign = rtlHelper.textAlign(legendItem.textAlign || (legendItem.textAlign = labelOpts.textAlign));\n var width = boxWidth + halfFontSize + textWidth;\n var x = cursor.x;\n var y = cursor.y;\n rtlHelper.setWidth(_this29.width);\n\n if (isHorizontal) {\n if (i > 0 && x + width + padding > _this29.right) {\n y = cursor.y += lineHeight;\n cursor.line++;\n x = cursor.x = _alignStartEnd(align, _this29.left + padding, _this29.right - lineWidths[cursor.line]);\n }\n } else if (i > 0 && y + lineHeight > _this29.bottom) {\n x = cursor.x = x + columnSizes[cursor.line].width + padding;\n cursor.line++;\n y = cursor.y = _alignStartEnd(align, _this29.top + titleHeight + padding, _this29.bottom - columnSizes[cursor.line].height);\n }\n\n var realX = rtlHelper.x(x);\n drawLegendBox(realX, y, legendItem);\n x = _textX(textAlign, x + boxWidth + halfFontSize, isHorizontal ? x + width : _this29.right, opts.rtl);\n fillText(rtlHelper.x(x), y, legendItem);\n\n if (isHorizontal) {\n cursor.x += width + padding;\n } else {\n cursor.y += lineHeight;\n }\n });\n restoreTextDirection(this.ctx, opts.textDirection);\n }\n }, {\n key: \"drawTitle\",\n value: function drawTitle() {\n var opts = this.options;\n var titleOpts = opts.title;\n var titleFont = toFont(titleOpts.font);\n var titlePadding = toPadding(titleOpts.padding);\n\n if (!titleOpts.display) {\n return;\n }\n\n var rtlHelper = getRtlAdapter(opts.rtl, this.left, this.width);\n var ctx = this.ctx;\n var position = titleOpts.position;\n var halfFontSize = titleFont.size / 2;\n var topPaddingPlusHalfFontSize = titlePadding.top + halfFontSize;\n var y;\n var left = this.left;\n var maxWidth = this.width;\n\n if (this.isHorizontal()) {\n maxWidth = Math.max.apply(Math, _toConsumableArray(this.lineWidths));\n y = this.top + topPaddingPlusHalfFontSize;\n left = _alignStartEnd(opts.align, left, this.right - maxWidth);\n } else {\n var maxHeight = this.columnSizes.reduce(function (acc, size) {\n return Math.max(acc, size.height);\n }, 0);\n y = topPaddingPlusHalfFontSize + _alignStartEnd(opts.align, this.top, this.bottom - maxHeight - opts.labels.padding - this._computeTitleHeight());\n }\n\n var x = _alignStartEnd(position, left, left + maxWidth);\n\n ctx.textAlign = rtlHelper.textAlign(_toLeftRightCenter(position));\n ctx.textBaseline = 'middle';\n ctx.strokeStyle = titleOpts.color;\n ctx.fillStyle = titleOpts.color;\n ctx.font = titleFont.string;\n renderText(ctx, titleOpts.text, x, y, titleFont);\n }\n }, {\n key: \"_computeTitleHeight\",\n value: function _computeTitleHeight() {\n var titleOpts = this.options.title;\n var titleFont = toFont(titleOpts.font);\n var titlePadding = toPadding(titleOpts.padding);\n return titleOpts.display ? titleFont.lineHeight + titlePadding.height : 0;\n }\n }, {\n key: \"_getLegendItemAt\",\n value: function _getLegendItemAt(x, y) {\n var i, hitBox, lh;\n\n if (_isBetween(x, this.left, this.right) && _isBetween(y, this.top, this.bottom)) {\n lh = this.legendHitBoxes;\n\n for (i = 0; i < lh.length; ++i) {\n hitBox = lh[i];\n\n if (_isBetween(x, hitBox.left, hitBox.left + hitBox.width) && _isBetween(y, hitBox.top, hitBox.top + hitBox.height)) {\n return this.legendItems[i];\n }\n }\n }\n\n return null;\n }\n }, {\n key: \"handleEvent\",\n value: function handleEvent(e) {\n var opts = this.options;\n\n if (!isListened(e.type, opts)) {\n return;\n }\n\n var hoveredItem = this._getLegendItemAt(e.x, e.y);\n\n if (e.type === 'mousemove' || e.type === 'mouseout') {\n var previous = this._hoveredItem;\n var sameItem = itemsEqual(previous, hoveredItem);\n\n if (previous && !sameItem) {\n callback(opts.onLeave, [e, previous, this], this);\n }\n\n this._hoveredItem = hoveredItem;\n\n if (hoveredItem && !sameItem) {\n callback(opts.onHover, [e, hoveredItem, this], this);\n }\n } else if (hoveredItem) {\n callback(opts.onClick, [e, hoveredItem, this], this);\n }\n }\n }]);\n\n return Legend;\n}(Element);\n\nfunction isListened(type, opts) {\n if ((type === 'mousemove' || type === 'mouseout') && (opts.onHover || opts.onLeave)) {\n return true;\n }\n\n if (opts.onClick && (type === 'click' || type === 'mouseup')) {\n return true;\n }\n\n return false;\n}\n\nvar plugin_legend = {\n id: 'legend',\n _element: Legend,\n start: function start(chart, _args, options) {\n var legend = chart.legend = new Legend({\n ctx: chart.ctx,\n options: options,\n chart: chart\n });\n layouts.configure(chart, legend, options);\n layouts.addBox(chart, legend);\n },\n stop: function stop(chart) {\n layouts.removeBox(chart, chart.legend);\n delete chart.legend;\n },\n beforeUpdate: function beforeUpdate(chart, _args, options) {\n var legend = chart.legend;\n layouts.configure(chart, legend, options);\n legend.options = options;\n },\n afterUpdate: function afterUpdate(chart) {\n var legend = chart.legend;\n legend.buildLabels();\n legend.adjustHitBoxes();\n },\n afterEvent: function afterEvent(chart, args) {\n if (!args.replay) {\n chart.legend.handleEvent(args.event);\n }\n },\n defaults: {\n display: true,\n position: 'top',\n align: 'center',\n fullSize: true,\n reverse: false,\n weight: 1000,\n onClick: function onClick(e, legendItem, legend) {\n var index = legendItem.datasetIndex;\n var ci = legend.chart;\n\n if (ci.isDatasetVisible(index)) {\n ci.hide(index);\n legendItem.hidden = true;\n } else {\n ci.show(index);\n legendItem.hidden = false;\n }\n },\n onHover: null,\n onLeave: null,\n labels: {\n color: function color(ctx) {\n return ctx.chart.options.color;\n },\n boxWidth: 40,\n padding: 10,\n generateLabels: function generateLabels(chart) {\n var datasets = chart.data.datasets;\n var _chart$legend$options = chart.legend.options.labels,\n usePointStyle = _chart$legend$options.usePointStyle,\n pointStyle = _chart$legend$options.pointStyle,\n textAlign = _chart$legend$options.textAlign,\n color = _chart$legend$options.color;\n return chart._getSortedDatasetMetas().map(function (meta) {\n var style = meta.controller.getStyle(usePointStyle ? 0 : undefined);\n var borderWidth = toPadding(style.borderWidth);\n return {\n text: datasets[meta.index].label,\n fillStyle: style.backgroundColor,\n fontColor: color,\n hidden: !meta.visible,\n lineCap: style.borderCapStyle,\n lineDash: style.borderDash,\n lineDashOffset: style.borderDashOffset,\n lineJoin: style.borderJoinStyle,\n lineWidth: (borderWidth.width + borderWidth.height) / 4,\n strokeStyle: style.borderColor,\n pointStyle: pointStyle || style.pointStyle,\n rotation: style.rotation,\n textAlign: textAlign || style.textAlign,\n borderRadius: 0,\n datasetIndex: meta.index\n };\n }, this);\n }\n },\n title: {\n color: function color(ctx) {\n return ctx.chart.options.color;\n },\n display: false,\n position: 'center',\n text: ''\n }\n },\n descriptors: {\n _scriptable: function _scriptable(name) {\n return !name.startsWith('on');\n },\n labels: {\n _scriptable: function _scriptable(name) {\n return !['generateLabels', 'filter', 'sort'].includes(name);\n }\n }\n }\n};\n\nvar Title = /*#__PURE__*/function (_Element7) {\n _inherits(Title, _Element7);\n\n var _super17 = _createSuper(Title);\n\n function Title(config) {\n var _this30;\n\n _classCallCheck(this, Title);\n\n _this30 = _super17.call(this);\n _this30.chart = config.chart;\n _this30.options = config.options;\n _this30.ctx = config.ctx;\n _this30._padding = undefined;\n _this30.top = undefined;\n _this30.bottom = undefined;\n _this30.left = undefined;\n _this30.right = undefined;\n _this30.width = undefined;\n _this30.height = undefined;\n _this30.position = undefined;\n _this30.weight = undefined;\n _this30.fullSize = undefined;\n return _this30;\n }\n\n _createClass(Title, [{\n key: \"update\",\n value: function update(maxWidth, maxHeight) {\n var opts = this.options;\n this.left = 0;\n this.top = 0;\n\n if (!opts.display) {\n this.width = this.height = this.right = this.bottom = 0;\n return;\n }\n\n this.width = this.right = maxWidth;\n this.height = this.bottom = maxHeight;\n var lineCount = isArray(opts.text) ? opts.text.length : 1;\n this._padding = toPadding(opts.padding);\n\n var textSize = lineCount * toFont(opts.font).lineHeight + this._padding.height;\n\n if (this.isHorizontal()) {\n this.height = textSize;\n } else {\n this.width = textSize;\n }\n }\n }, {\n key: \"isHorizontal\",\n value: function isHorizontal() {\n var pos = this.options.position;\n return pos === 'top' || pos === 'bottom';\n }\n }, {\n key: \"_drawArgs\",\n value: function _drawArgs(offset) {\n var top = this.top,\n left = this.left,\n bottom = this.bottom,\n right = this.right,\n options = this.options;\n var align = options.align;\n var rotation = 0;\n var maxWidth, titleX, titleY;\n\n if (this.isHorizontal()) {\n titleX = _alignStartEnd(align, left, right);\n titleY = top + offset;\n maxWidth = right - left;\n } else {\n if (options.position === 'left') {\n titleX = left + offset;\n titleY = _alignStartEnd(align, bottom, top);\n rotation = PI * -0.5;\n } else {\n titleX = right - offset;\n titleY = _alignStartEnd(align, top, bottom);\n rotation = PI * 0.5;\n }\n\n maxWidth = bottom - top;\n }\n\n return {\n titleX: titleX,\n titleY: titleY,\n maxWidth: maxWidth,\n rotation: rotation\n };\n }\n }, {\n key: \"draw\",\n value: function draw() {\n var ctx = this.ctx;\n var opts = this.options;\n\n if (!opts.display) {\n return;\n }\n\n var fontOpts = toFont(opts.font);\n var lineHeight = fontOpts.lineHeight;\n var offset = lineHeight / 2 + this._padding.top;\n\n var _this$_drawArgs = this._drawArgs(offset),\n titleX = _this$_drawArgs.titleX,\n titleY = _this$_drawArgs.titleY,\n maxWidth = _this$_drawArgs.maxWidth,\n rotation = _this$_drawArgs.rotation;\n\n renderText(ctx, opts.text, 0, 0, fontOpts, {\n color: opts.color,\n maxWidth: maxWidth,\n rotation: rotation,\n textAlign: _toLeftRightCenter(opts.align),\n textBaseline: 'middle',\n translation: [titleX, titleY]\n });\n }\n }]);\n\n return Title;\n}(Element);\n\nfunction createTitle(chart, titleOpts) {\n var title = new Title({\n ctx: chart.ctx,\n options: titleOpts,\n chart: chart\n });\n layouts.configure(chart, title, titleOpts);\n layouts.addBox(chart, title);\n chart.titleBlock = title;\n}\n\nvar plugin_title = {\n id: 'title',\n _element: Title,\n start: function start(chart, _args, options) {\n createTitle(chart, options);\n },\n stop: function stop(chart) {\n var titleBlock = chart.titleBlock;\n layouts.removeBox(chart, titleBlock);\n delete chart.titleBlock;\n },\n beforeUpdate: function beforeUpdate(chart, _args, options) {\n var title = chart.titleBlock;\n layouts.configure(chart, title, options);\n title.options = options;\n },\n defaults: {\n align: 'center',\n display: false,\n font: {\n weight: 'bold'\n },\n fullSize: true,\n padding: 10,\n position: 'top',\n text: '',\n weight: 2000\n },\n defaultRoutes: {\n color: 'color'\n },\n descriptors: {\n _scriptable: true,\n _indexable: false\n }\n};\nvar map = new WeakMap();\nvar plugin_subtitle = {\n id: 'subtitle',\n start: function start(chart, _args, options) {\n var title = new Title({\n ctx: chart.ctx,\n options: options,\n chart: chart\n });\n layouts.configure(chart, title, options);\n layouts.addBox(chart, title);\n map.set(chart, title);\n },\n stop: function stop(chart) {\n layouts.removeBox(chart, map.get(chart));\n map.delete(chart);\n },\n beforeUpdate: function beforeUpdate(chart, _args, options) {\n var title = map.get(chart);\n layouts.configure(chart, title, options);\n title.options = options;\n },\n defaults: {\n align: 'center',\n display: false,\n font: {\n weight: 'normal'\n },\n fullSize: true,\n padding: 0,\n position: 'top',\n text: '',\n weight: 1500\n },\n defaultRoutes: {\n color: 'color'\n },\n descriptors: {\n _scriptable: true,\n _indexable: false\n }\n};\nvar positioners = {\n average: function average(items) {\n if (!items.length) {\n return false;\n }\n\n var i, len;\n var x = 0;\n var y = 0;\n var count = 0;\n\n for (i = 0, len = items.length; i < len; ++i) {\n var el = items[i].element;\n\n if (el && el.hasValue()) {\n var pos = el.tooltipPosition();\n x += pos.x;\n y += pos.y;\n ++count;\n }\n }\n\n return {\n x: x / count,\n y: y / count\n };\n },\n nearest: function nearest(items, eventPosition) {\n if (!items.length) {\n return false;\n }\n\n var x = eventPosition.x;\n var y = eventPosition.y;\n var minDistance = Number.POSITIVE_INFINITY;\n var i, len, nearestElement;\n\n for (i = 0, len = items.length; i < len; ++i) {\n var el = items[i].element;\n\n if (el && el.hasValue()) {\n var center = el.getCenterPoint();\n var d = distanceBetweenPoints(eventPosition, center);\n\n if (d < minDistance) {\n minDistance = d;\n nearestElement = el;\n }\n }\n }\n\n if (nearestElement) {\n var tp = nearestElement.tooltipPosition();\n x = tp.x;\n y = tp.y;\n }\n\n return {\n x: x,\n y: y\n };\n }\n};\n\nfunction pushOrConcat(base, toPush) {\n if (toPush) {\n if (isArray(toPush)) {\n Array.prototype.push.apply(base, toPush);\n } else {\n base.push(toPush);\n }\n }\n\n return base;\n}\n\nfunction splitNewlines(str) {\n if ((typeof str === 'string' || str instanceof String) && str.indexOf('\\n') > -1) {\n return str.split('\\n');\n }\n\n return str;\n}\n\nfunction createTooltipItem(chart, item) {\n var element = item.element,\n datasetIndex = item.datasetIndex,\n index = item.index;\n var controller = chart.getDatasetMeta(datasetIndex).controller;\n\n var _controller$getLabelA = controller.getLabelAndValue(index),\n label = _controller$getLabelA.label,\n value = _controller$getLabelA.value;\n\n return {\n chart: chart,\n label: label,\n parsed: controller.getParsed(index),\n raw: chart.data.datasets[datasetIndex].data[index],\n formattedValue: value,\n dataset: controller.getDataset(),\n dataIndex: index,\n datasetIndex: datasetIndex,\n element: element\n };\n}\n\nfunction getTooltipSize(tooltip, options) {\n var ctx = tooltip.chart.ctx;\n var body = tooltip.body,\n footer = tooltip.footer,\n title = tooltip.title;\n var boxWidth = options.boxWidth,\n boxHeight = options.boxHeight;\n var bodyFont = toFont(options.bodyFont);\n var titleFont = toFont(options.titleFont);\n var footerFont = toFont(options.footerFont);\n var titleLineCount = title.length;\n var footerLineCount = footer.length;\n var bodyLineItemCount = body.length;\n var padding = toPadding(options.padding);\n var height = padding.height;\n var width = 0;\n var combinedBodyLength = body.reduce(function (count, bodyItem) {\n return count + bodyItem.before.length + bodyItem.lines.length + bodyItem.after.length;\n }, 0);\n combinedBodyLength += tooltip.beforeBody.length + tooltip.afterBody.length;\n\n if (titleLineCount) {\n height += titleLineCount * titleFont.lineHeight + (titleLineCount - 1) * options.titleSpacing + options.titleMarginBottom;\n }\n\n if (combinedBodyLength) {\n var bodyLineHeight = options.displayColors ? Math.max(boxHeight, bodyFont.lineHeight) : bodyFont.lineHeight;\n height += bodyLineItemCount * bodyLineHeight + (combinedBodyLength - bodyLineItemCount) * bodyFont.lineHeight + (combinedBodyLength - 1) * options.bodySpacing;\n }\n\n if (footerLineCount) {\n height += options.footerMarginTop + footerLineCount * footerFont.lineHeight + (footerLineCount - 1) * options.footerSpacing;\n }\n\n var widthPadding = 0;\n\n var maxLineWidth = function maxLineWidth(line) {\n width = Math.max(width, ctx.measureText(line).width + widthPadding);\n };\n\n ctx.save();\n ctx.font = titleFont.string;\n each(tooltip.title, maxLineWidth);\n ctx.font = bodyFont.string;\n each(tooltip.beforeBody.concat(tooltip.afterBody), maxLineWidth);\n widthPadding = options.displayColors ? boxWidth + 2 + options.boxPadding : 0;\n each(body, function (bodyItem) {\n each(bodyItem.before, maxLineWidth);\n each(bodyItem.lines, maxLineWidth);\n each(bodyItem.after, maxLineWidth);\n });\n widthPadding = 0;\n ctx.font = footerFont.string;\n each(tooltip.footer, maxLineWidth);\n ctx.restore();\n width += padding.width;\n return {\n width: width,\n height: height\n };\n}\n\nfunction determineYAlign(chart, size) {\n var y = size.y,\n height = size.height;\n\n if (y < height / 2) {\n return 'top';\n } else if (y > chart.height - height / 2) {\n return 'bottom';\n }\n\n return 'center';\n}\n\nfunction doesNotFitWithAlign(xAlign, chart, options, size) {\n var x = size.x,\n width = size.width;\n var caret = options.caretSize + options.caretPadding;\n\n if (xAlign === 'left' && x + width + caret > chart.width) {\n return true;\n }\n\n if (xAlign === 'right' && x - width - caret < 0) {\n return true;\n }\n}\n\nfunction determineXAlign(chart, options, size, yAlign) {\n var x = size.x,\n width = size.width;\n var chartWidth = chart.width,\n _chart$chartArea = chart.chartArea,\n left = _chart$chartArea.left,\n right = _chart$chartArea.right;\n var xAlign = 'center';\n\n if (yAlign === 'center') {\n xAlign = x <= (left + right) / 2 ? 'left' : 'right';\n } else if (x <= width / 2) {\n xAlign = 'left';\n } else if (x >= chartWidth - width / 2) {\n xAlign = 'right';\n }\n\n if (doesNotFitWithAlign(xAlign, chart, options, size)) {\n xAlign = 'center';\n }\n\n return xAlign;\n}\n\nfunction determineAlignment(chart, options, size) {\n var yAlign = size.yAlign || options.yAlign || determineYAlign(chart, size);\n return {\n xAlign: size.xAlign || options.xAlign || determineXAlign(chart, options, size, yAlign),\n yAlign: yAlign\n };\n}\n\nfunction alignX(size, xAlign) {\n var x = size.x,\n width = size.width;\n\n if (xAlign === 'right') {\n x -= width;\n } else if (xAlign === 'center') {\n x -= width / 2;\n }\n\n return x;\n}\n\nfunction alignY(size, yAlign, paddingAndSize) {\n var y = size.y,\n height = size.height;\n\n if (yAlign === 'top') {\n y += paddingAndSize;\n } else if (yAlign === 'bottom') {\n y -= height + paddingAndSize;\n } else {\n y -= height / 2;\n }\n\n return y;\n}\n\nfunction getBackgroundPoint(options, size, alignment, chart) {\n var caretSize = options.caretSize,\n caretPadding = options.caretPadding,\n cornerRadius = options.cornerRadius;\n var xAlign = alignment.xAlign,\n yAlign = alignment.yAlign;\n var paddingAndSize = caretSize + caretPadding;\n\n var _toTRBLCorners = toTRBLCorners(cornerRadius),\n topLeft = _toTRBLCorners.topLeft,\n topRight = _toTRBLCorners.topRight,\n bottomLeft = _toTRBLCorners.bottomLeft,\n bottomRight = _toTRBLCorners.bottomRight;\n\n var x = alignX(size, xAlign);\n var y = alignY(size, yAlign, paddingAndSize);\n\n if (yAlign === 'center') {\n if (xAlign === 'left') {\n x += paddingAndSize;\n } else if (xAlign === 'right') {\n x -= paddingAndSize;\n }\n } else if (xAlign === 'left') {\n x -= Math.max(topLeft, bottomLeft) + caretSize;\n } else if (xAlign === 'right') {\n x += Math.max(topRight, bottomRight) + caretSize;\n }\n\n return {\n x: _limitValue(x, 0, chart.width - size.width),\n y: _limitValue(y, 0, chart.height - size.height)\n };\n}\n\nfunction getAlignedX(tooltip, align, options) {\n var padding = toPadding(options.padding);\n return align === 'center' ? tooltip.x + tooltip.width / 2 : align === 'right' ? tooltip.x + tooltip.width - padding.right : tooltip.x + padding.left;\n}\n\nfunction getBeforeAfterBodyLines(callback) {\n return pushOrConcat([], splitNewlines(callback));\n}\n\nfunction createTooltipContext(parent, tooltip, tooltipItems) {\n return createContext(parent, {\n tooltip: tooltip,\n tooltipItems: tooltipItems,\n type: 'tooltip'\n });\n}\n\nfunction overrideCallbacks(callbacks, context) {\n var override = context && context.dataset && context.dataset.tooltip && context.dataset.tooltip.callbacks;\n return override ? callbacks.override(override) : callbacks;\n}\n\nvar Tooltip = /*#__PURE__*/function (_Element8) {\n _inherits(Tooltip, _Element8);\n\n var _super18 = _createSuper(Tooltip);\n\n function Tooltip(config) {\n var _this31;\n\n _classCallCheck(this, Tooltip);\n\n _this31 = _super18.call(this);\n _this31.opacity = 0;\n _this31._active = [];\n _this31._eventPosition = undefined;\n _this31._size = undefined;\n _this31._cachedAnimations = undefined;\n _this31._tooltipItems = [];\n _this31.$animations = undefined;\n _this31.$context = undefined;\n _this31.chart = config.chart || config._chart;\n _this31._chart = _this31.chart;\n _this31.options = config.options;\n _this31.dataPoints = undefined;\n _this31.title = undefined;\n _this31.beforeBody = undefined;\n _this31.body = undefined;\n _this31.afterBody = undefined;\n _this31.footer = undefined;\n _this31.xAlign = undefined;\n _this31.yAlign = undefined;\n _this31.x = undefined;\n _this31.y = undefined;\n _this31.height = undefined;\n _this31.width = undefined;\n _this31.caretX = undefined;\n _this31.caretY = undefined;\n _this31.labelColors = undefined;\n _this31.labelPointStyles = undefined;\n _this31.labelTextColors = undefined;\n return _this31;\n }\n\n _createClass(Tooltip, [{\n key: \"initialize\",\n value: function initialize(options) {\n this.options = options;\n this._cachedAnimations = undefined;\n this.$context = undefined;\n }\n }, {\n key: \"_resolveAnimations\",\n value: function _resolveAnimations() {\n var cached = this._cachedAnimations;\n\n if (cached) {\n return cached;\n }\n\n var chart = this.chart;\n var options = this.options.setContext(this.getContext());\n var opts = options.enabled && chart.options.animation && options.animations;\n var animations = new Animations(this.chart, opts);\n\n if (opts._cacheable) {\n this._cachedAnimations = Object.freeze(animations);\n }\n\n return animations;\n }\n }, {\n key: \"getContext\",\n value: function getContext() {\n return this.$context || (this.$context = createTooltipContext(this.chart.getContext(), this, this._tooltipItems));\n }\n }, {\n key: \"getTitle\",\n value: function getTitle(context, options) {\n var callbacks = options.callbacks;\n var beforeTitle = callbacks.beforeTitle.apply(this, [context]);\n var title = callbacks.title.apply(this, [context]);\n var afterTitle = callbacks.afterTitle.apply(this, [context]);\n var lines = [];\n lines = pushOrConcat(lines, splitNewlines(beforeTitle));\n lines = pushOrConcat(lines, splitNewlines(title));\n lines = pushOrConcat(lines, splitNewlines(afterTitle));\n return lines;\n }\n }, {\n key: \"getBeforeBody\",\n value: function getBeforeBody(tooltipItems, options) {\n return getBeforeAfterBodyLines(options.callbacks.beforeBody.apply(this, [tooltipItems]));\n }\n }, {\n key: \"getBody\",\n value: function getBody(tooltipItems, options) {\n var _this32 = this;\n\n var callbacks = options.callbacks;\n var bodyItems = [];\n each(tooltipItems, function (context) {\n var bodyItem = {\n before: [],\n lines: [],\n after: []\n };\n var scoped = overrideCallbacks(callbacks, context);\n pushOrConcat(bodyItem.before, splitNewlines(scoped.beforeLabel.call(_this32, context)));\n pushOrConcat(bodyItem.lines, scoped.label.call(_this32, context));\n pushOrConcat(bodyItem.after, splitNewlines(scoped.afterLabel.call(_this32, context)));\n bodyItems.push(bodyItem);\n });\n return bodyItems;\n }\n }, {\n key: \"getAfterBody\",\n value: function getAfterBody(tooltipItems, options) {\n return getBeforeAfterBodyLines(options.callbacks.afterBody.apply(this, [tooltipItems]));\n }\n }, {\n key: \"getFooter\",\n value: function getFooter(tooltipItems, options) {\n var callbacks = options.callbacks;\n var beforeFooter = callbacks.beforeFooter.apply(this, [tooltipItems]);\n var footer = callbacks.footer.apply(this, [tooltipItems]);\n var afterFooter = callbacks.afterFooter.apply(this, [tooltipItems]);\n var lines = [];\n lines = pushOrConcat(lines, splitNewlines(beforeFooter));\n lines = pushOrConcat(lines, splitNewlines(footer));\n lines = pushOrConcat(lines, splitNewlines(afterFooter));\n return lines;\n }\n }, {\n key: \"_createItems\",\n value: function _createItems(options) {\n var _this33 = this;\n\n var active = this._active;\n var data = this.chart.data;\n var labelColors = [];\n var labelPointStyles = [];\n var labelTextColors = [];\n var tooltipItems = [];\n var i, len;\n\n for (i = 0, len = active.length; i < len; ++i) {\n tooltipItems.push(createTooltipItem(this.chart, active[i]));\n }\n\n if (options.filter) {\n tooltipItems = tooltipItems.filter(function (element, index, array) {\n return options.filter(element, index, array, data);\n });\n }\n\n if (options.itemSort) {\n tooltipItems = tooltipItems.sort(function (a, b) {\n return options.itemSort(a, b, data);\n });\n }\n\n each(tooltipItems, function (context) {\n var scoped = overrideCallbacks(options.callbacks, context);\n labelColors.push(scoped.labelColor.call(_this33, context));\n labelPointStyles.push(scoped.labelPointStyle.call(_this33, context));\n labelTextColors.push(scoped.labelTextColor.call(_this33, context));\n });\n this.labelColors = labelColors;\n this.labelPointStyles = labelPointStyles;\n this.labelTextColors = labelTextColors;\n this.dataPoints = tooltipItems;\n return tooltipItems;\n }\n }, {\n key: \"update\",\n value: function update(changed, replay) {\n var options = this.options.setContext(this.getContext());\n var active = this._active;\n var properties;\n var tooltipItems = [];\n\n if (!active.length) {\n if (this.opacity !== 0) {\n properties = {\n opacity: 0\n };\n }\n } else {\n var position = positioners[options.position].call(this, active, this._eventPosition);\n tooltipItems = this._createItems(options);\n this.title = this.getTitle(tooltipItems, options);\n this.beforeBody = this.getBeforeBody(tooltipItems, options);\n this.body = this.getBody(tooltipItems, options);\n this.afterBody = this.getAfterBody(tooltipItems, options);\n this.footer = this.getFooter(tooltipItems, options);\n var size = this._size = getTooltipSize(this, options);\n var positionAndSize = Object.assign({}, position, size);\n var alignment = determineAlignment(this.chart, options, positionAndSize);\n var backgroundPoint = getBackgroundPoint(options, positionAndSize, alignment, this.chart);\n this.xAlign = alignment.xAlign;\n this.yAlign = alignment.yAlign;\n properties = {\n opacity: 1,\n x: backgroundPoint.x,\n y: backgroundPoint.y,\n width: size.width,\n height: size.height,\n caretX: position.x,\n caretY: position.y\n };\n }\n\n this._tooltipItems = tooltipItems;\n this.$context = undefined;\n\n if (properties) {\n this._resolveAnimations().update(this, properties);\n }\n\n if (changed && options.external) {\n options.external.call(this, {\n chart: this.chart,\n tooltip: this,\n replay: replay\n });\n }\n }\n }, {\n key: \"drawCaret\",\n value: function drawCaret(tooltipPoint, ctx, size, options) {\n var caretPosition = this.getCaretPosition(tooltipPoint, size, options);\n ctx.lineTo(caretPosition.x1, caretPosition.y1);\n ctx.lineTo(caretPosition.x2, caretPosition.y2);\n ctx.lineTo(caretPosition.x3, caretPosition.y3);\n }\n }, {\n key: \"getCaretPosition\",\n value: function getCaretPosition(tooltipPoint, size, options) {\n var xAlign = this.xAlign,\n yAlign = this.yAlign;\n var caretSize = options.caretSize,\n cornerRadius = options.cornerRadius;\n\n var _toTRBLCorners2 = toTRBLCorners(cornerRadius),\n topLeft = _toTRBLCorners2.topLeft,\n topRight = _toTRBLCorners2.topRight,\n bottomLeft = _toTRBLCorners2.bottomLeft,\n bottomRight = _toTRBLCorners2.bottomRight;\n\n var ptX = tooltipPoint.x,\n ptY = tooltipPoint.y;\n var width = size.width,\n height = size.height;\n var x1, x2, x3, y1, y2, y3;\n\n if (yAlign === 'center') {\n y2 = ptY + height / 2;\n\n if (xAlign === 'left') {\n x1 = ptX;\n x2 = x1 - caretSize;\n y1 = y2 + caretSize;\n y3 = y2 - caretSize;\n } else {\n x1 = ptX + width;\n x2 = x1 + caretSize;\n y1 = y2 - caretSize;\n y3 = y2 + caretSize;\n }\n\n x3 = x1;\n } else {\n if (xAlign === 'left') {\n x2 = ptX + Math.max(topLeft, bottomLeft) + caretSize;\n } else if (xAlign === 'right') {\n x2 = ptX + width - Math.max(topRight, bottomRight) - caretSize;\n } else {\n x2 = this.caretX;\n }\n\n if (yAlign === 'top') {\n y1 = ptY;\n y2 = y1 - caretSize;\n x1 = x2 - caretSize;\n x3 = x2 + caretSize;\n } else {\n y1 = ptY + height;\n y2 = y1 + caretSize;\n x1 = x2 + caretSize;\n x3 = x2 - caretSize;\n }\n\n y3 = y1;\n }\n\n return {\n x1: x1,\n x2: x2,\n x3: x3,\n y1: y1,\n y2: y2,\n y3: y3\n };\n }\n }, {\n key: \"drawTitle\",\n value: function drawTitle(pt, ctx, options) {\n var title = this.title;\n var length = title.length;\n var titleFont, titleSpacing, i;\n\n if (length) {\n var rtlHelper = getRtlAdapter(options.rtl, this.x, this.width);\n pt.x = getAlignedX(this, options.titleAlign, options);\n ctx.textAlign = rtlHelper.textAlign(options.titleAlign);\n ctx.textBaseline = 'middle';\n titleFont = toFont(options.titleFont);\n titleSpacing = options.titleSpacing;\n ctx.fillStyle = options.titleColor;\n ctx.font = titleFont.string;\n\n for (i = 0; i < length; ++i) {\n ctx.fillText(title[i], rtlHelper.x(pt.x), pt.y + titleFont.lineHeight / 2);\n pt.y += titleFont.lineHeight + titleSpacing;\n\n if (i + 1 === length) {\n pt.y += options.titleMarginBottom - titleSpacing;\n }\n }\n }\n }\n }, {\n key: \"_drawColorBox\",\n value: function _drawColorBox(ctx, pt, i, rtlHelper, options) {\n var labelColors = this.labelColors[i];\n var labelPointStyle = this.labelPointStyles[i];\n var boxHeight = options.boxHeight,\n boxWidth = options.boxWidth,\n boxPadding = options.boxPadding;\n var bodyFont = toFont(options.bodyFont);\n var colorX = getAlignedX(this, 'left', options);\n var rtlColorX = rtlHelper.x(colorX);\n var yOffSet = boxHeight < bodyFont.lineHeight ? (bodyFont.lineHeight - boxHeight) / 2 : 0;\n var colorY = pt.y + yOffSet;\n\n if (options.usePointStyle) {\n var drawOptions = {\n radius: Math.min(boxWidth, boxHeight) / 2,\n pointStyle: labelPointStyle.pointStyle,\n rotation: labelPointStyle.rotation,\n borderWidth: 1\n };\n var centerX = rtlHelper.leftForLtr(rtlColorX, boxWidth) + boxWidth / 2;\n var centerY = colorY + boxHeight / 2;\n ctx.strokeStyle = options.multiKeyBackground;\n ctx.fillStyle = options.multiKeyBackground;\n drawPoint(ctx, drawOptions, centerX, centerY);\n ctx.strokeStyle = labelColors.borderColor;\n ctx.fillStyle = labelColors.backgroundColor;\n drawPoint(ctx, drawOptions, centerX, centerY);\n } else {\n ctx.lineWidth = isObject(labelColors.borderWidth) ? Math.max.apply(Math, _toConsumableArray(Object.values(labelColors.borderWidth))) : labelColors.borderWidth || 1;\n ctx.strokeStyle = labelColors.borderColor;\n ctx.setLineDash(labelColors.borderDash || []);\n ctx.lineDashOffset = labelColors.borderDashOffset || 0;\n var outerX = rtlHelper.leftForLtr(rtlColorX, boxWidth - boxPadding);\n var innerX = rtlHelper.leftForLtr(rtlHelper.xPlus(rtlColorX, 1), boxWidth - boxPadding - 2);\n var borderRadius = toTRBLCorners(labelColors.borderRadius);\n\n if (Object.values(borderRadius).some(function (v) {\n return v !== 0;\n })) {\n ctx.beginPath();\n ctx.fillStyle = options.multiKeyBackground;\n addRoundedRectPath(ctx, {\n x: outerX,\n y: colorY,\n w: boxWidth,\n h: boxHeight,\n radius: borderRadius\n });\n ctx.fill();\n ctx.stroke();\n ctx.fillStyle = labelColors.backgroundColor;\n ctx.beginPath();\n addRoundedRectPath(ctx, {\n x: innerX,\n y: colorY + 1,\n w: boxWidth - 2,\n h: boxHeight - 2,\n radius: borderRadius\n });\n ctx.fill();\n } else {\n ctx.fillStyle = options.multiKeyBackground;\n ctx.fillRect(outerX, colorY, boxWidth, boxHeight);\n ctx.strokeRect(outerX, colorY, boxWidth, boxHeight);\n ctx.fillStyle = labelColors.backgroundColor;\n ctx.fillRect(innerX, colorY + 1, boxWidth - 2, boxHeight - 2);\n }\n }\n\n ctx.fillStyle = this.labelTextColors[i];\n }\n }, {\n key: \"drawBody\",\n value: function drawBody(pt, ctx, options) {\n var body = this.body;\n var bodySpacing = options.bodySpacing,\n bodyAlign = options.bodyAlign,\n displayColors = options.displayColors,\n boxHeight = options.boxHeight,\n boxWidth = options.boxWidth,\n boxPadding = options.boxPadding;\n var bodyFont = toFont(options.bodyFont);\n var bodyLineHeight = bodyFont.lineHeight;\n var xLinePadding = 0;\n var rtlHelper = getRtlAdapter(options.rtl, this.x, this.width);\n\n var fillLineOfText = function fillLineOfText(line) {\n ctx.fillText(line, rtlHelper.x(pt.x + xLinePadding), pt.y + bodyLineHeight / 2);\n pt.y += bodyLineHeight + bodySpacing;\n };\n\n var bodyAlignForCalculation = rtlHelper.textAlign(bodyAlign);\n var bodyItem, textColor, lines, i, j, ilen, jlen;\n ctx.textAlign = bodyAlign;\n ctx.textBaseline = 'middle';\n ctx.font = bodyFont.string;\n pt.x = getAlignedX(this, bodyAlignForCalculation, options);\n ctx.fillStyle = options.bodyColor;\n each(this.beforeBody, fillLineOfText);\n xLinePadding = displayColors && bodyAlignForCalculation !== 'right' ? bodyAlign === 'center' ? boxWidth / 2 + boxPadding : boxWidth + 2 + boxPadding : 0;\n\n for (i = 0, ilen = body.length; i < ilen; ++i) {\n bodyItem = body[i];\n textColor = this.labelTextColors[i];\n ctx.fillStyle = textColor;\n each(bodyItem.before, fillLineOfText);\n lines = bodyItem.lines;\n\n if (displayColors && lines.length) {\n this._drawColorBox(ctx, pt, i, rtlHelper, options);\n\n bodyLineHeight = Math.max(bodyFont.lineHeight, boxHeight);\n }\n\n for (j = 0, jlen = lines.length; j < jlen; ++j) {\n fillLineOfText(lines[j]);\n bodyLineHeight = bodyFont.lineHeight;\n }\n\n each(bodyItem.after, fillLineOfText);\n }\n\n xLinePadding = 0;\n bodyLineHeight = bodyFont.lineHeight;\n each(this.afterBody, fillLineOfText);\n pt.y -= bodySpacing;\n }\n }, {\n key: \"drawFooter\",\n value: function drawFooter(pt, ctx, options) {\n var footer = this.footer;\n var length = footer.length;\n var footerFont, i;\n\n if (length) {\n var rtlHelper = getRtlAdapter(options.rtl, this.x, this.width);\n pt.x = getAlignedX(this, options.footerAlign, options);\n pt.y += options.footerMarginTop;\n ctx.textAlign = rtlHelper.textAlign(options.footerAlign);\n ctx.textBaseline = 'middle';\n footerFont = toFont(options.footerFont);\n ctx.fillStyle = options.footerColor;\n ctx.font = footerFont.string;\n\n for (i = 0; i < length; ++i) {\n ctx.fillText(footer[i], rtlHelper.x(pt.x), pt.y + footerFont.lineHeight / 2);\n pt.y += footerFont.lineHeight + options.footerSpacing;\n }\n }\n }\n }, {\n key: \"drawBackground\",\n value: function drawBackground(pt, ctx, tooltipSize, options) {\n var xAlign = this.xAlign,\n yAlign = this.yAlign;\n var x = pt.x,\n y = pt.y;\n var width = tooltipSize.width,\n height = tooltipSize.height;\n\n var _toTRBLCorners3 = toTRBLCorners(options.cornerRadius),\n topLeft = _toTRBLCorners3.topLeft,\n topRight = _toTRBLCorners3.topRight,\n bottomLeft = _toTRBLCorners3.bottomLeft,\n bottomRight = _toTRBLCorners3.bottomRight;\n\n ctx.fillStyle = options.backgroundColor;\n ctx.strokeStyle = options.borderColor;\n ctx.lineWidth = options.borderWidth;\n ctx.beginPath();\n ctx.moveTo(x + topLeft, y);\n\n if (yAlign === 'top') {\n this.drawCaret(pt, ctx, tooltipSize, options);\n }\n\n ctx.lineTo(x + width - topRight, y);\n ctx.quadraticCurveTo(x + width, y, x + width, y + topRight);\n\n if (yAlign === 'center' && xAlign === 'right') {\n this.drawCaret(pt, ctx, tooltipSize, options);\n }\n\n ctx.lineTo(x + width, y + height - bottomRight);\n ctx.quadraticCurveTo(x + width, y + height, x + width - bottomRight, y + height);\n\n if (yAlign === 'bottom') {\n this.drawCaret(pt, ctx, tooltipSize, options);\n }\n\n ctx.lineTo(x + bottomLeft, y + height);\n ctx.quadraticCurveTo(x, y + height, x, y + height - bottomLeft);\n\n if (yAlign === 'center' && xAlign === 'left') {\n this.drawCaret(pt, ctx, tooltipSize, options);\n }\n\n ctx.lineTo(x, y + topLeft);\n ctx.quadraticCurveTo(x, y, x + topLeft, y);\n ctx.closePath();\n ctx.fill();\n\n if (options.borderWidth > 0) {\n ctx.stroke();\n }\n }\n }, {\n key: \"_updateAnimationTarget\",\n value: function _updateAnimationTarget(options) {\n var chart = this.chart;\n var anims = this.$animations;\n var animX = anims && anims.x;\n var animY = anims && anims.y;\n\n if (animX || animY) {\n var position = positioners[options.position].call(this, this._active, this._eventPosition);\n\n if (!position) {\n return;\n }\n\n var size = this._size = getTooltipSize(this, options);\n var positionAndSize = Object.assign({}, position, this._size);\n var alignment = determineAlignment(chart, options, positionAndSize);\n var point = getBackgroundPoint(options, positionAndSize, alignment, chart);\n\n if (animX._to !== point.x || animY._to !== point.y) {\n this.xAlign = alignment.xAlign;\n this.yAlign = alignment.yAlign;\n this.width = size.width;\n this.height = size.height;\n this.caretX = position.x;\n this.caretY = position.y;\n\n this._resolveAnimations().update(this, point);\n }\n }\n }\n }, {\n key: \"_willRender\",\n value: function _willRender() {\n return !!this.opacity;\n }\n }, {\n key: \"draw\",\n value: function draw(ctx) {\n var options = this.options.setContext(this.getContext());\n var opacity = this.opacity;\n\n if (!opacity) {\n return;\n }\n\n this._updateAnimationTarget(options);\n\n var tooltipSize = {\n width: this.width,\n height: this.height\n };\n var pt = {\n x: this.x,\n y: this.y\n };\n opacity = Math.abs(opacity) < 1e-3 ? 0 : opacity;\n var padding = toPadding(options.padding);\n var hasTooltipContent = this.title.length || this.beforeBody.length || this.body.length || this.afterBody.length || this.footer.length;\n\n if (options.enabled && hasTooltipContent) {\n ctx.save();\n ctx.globalAlpha = opacity;\n this.drawBackground(pt, ctx, tooltipSize, options);\n overrideTextDirection(ctx, options.textDirection);\n pt.y += padding.top;\n this.drawTitle(pt, ctx, options);\n this.drawBody(pt, ctx, options);\n this.drawFooter(pt, ctx, options);\n restoreTextDirection(ctx, options.textDirection);\n ctx.restore();\n }\n }\n }, {\n key: \"getActiveElements\",\n value: function getActiveElements() {\n return this._active || [];\n }\n }, {\n key: \"setActiveElements\",\n value: function setActiveElements(activeElements, eventPosition) {\n var _this34 = this;\n\n var lastActive = this._active;\n var active = activeElements.map(function (_ref11) {\n var datasetIndex = _ref11.datasetIndex,\n index = _ref11.index;\n\n var meta = _this34.chart.getDatasetMeta(datasetIndex);\n\n if (!meta) {\n throw new Error('Cannot find a dataset at index ' + datasetIndex);\n }\n\n return {\n datasetIndex: datasetIndex,\n element: meta.data[index],\n index: index\n };\n });\n var changed = !_elementsEqual(lastActive, active);\n\n var positionChanged = this._positionChanged(active, eventPosition);\n\n if (changed || positionChanged) {\n this._active = active;\n this._eventPosition = eventPosition;\n this._ignoreReplayEvents = true;\n this.update(true);\n }\n }\n }, {\n key: \"handleEvent\",\n value: function handleEvent(e, replay) {\n var inChartArea = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;\n\n if (replay && this._ignoreReplayEvents) {\n return false;\n }\n\n this._ignoreReplayEvents = false;\n var options = this.options;\n var lastActive = this._active || [];\n\n var active = this._getActiveElements(e, lastActive, replay, inChartArea);\n\n var positionChanged = this._positionChanged(active, e);\n\n var changed = replay || !_elementsEqual(active, lastActive) || positionChanged;\n\n if (changed) {\n this._active = active;\n\n if (options.enabled || options.external) {\n this._eventPosition = {\n x: e.x,\n y: e.y\n };\n this.update(true, replay);\n }\n }\n\n return changed;\n }\n }, {\n key: \"_getActiveElements\",\n value: function _getActiveElements(e, lastActive, replay, inChartArea) {\n var options = this.options;\n\n if (e.type === 'mouseout') {\n return [];\n }\n\n if (!inChartArea) {\n return lastActive;\n }\n\n var active = this.chart.getElementsAtEventForMode(e, options.mode, options, replay);\n\n if (options.reverse) {\n active.reverse();\n }\n\n return active;\n }\n }, {\n key: \"_positionChanged\",\n value: function _positionChanged(active, e) {\n var caretX = this.caretX,\n caretY = this.caretY,\n options = this.options;\n var position = positioners[options.position].call(this, active, e);\n return position !== false && (caretX !== position.x || caretY !== position.y);\n }\n }]);\n\n return Tooltip;\n}(Element);\n\nTooltip.positioners = positioners;\nvar plugin_tooltip = {\n id: 'tooltip',\n _element: Tooltip,\n positioners: positioners,\n afterInit: function afterInit(chart, _args, options) {\n if (options) {\n chart.tooltip = new Tooltip({\n chart: chart,\n options: options\n });\n }\n },\n beforeUpdate: function beforeUpdate(chart, _args, options) {\n if (chart.tooltip) {\n chart.tooltip.initialize(options);\n }\n },\n reset: function reset(chart, _args, options) {\n if (chart.tooltip) {\n chart.tooltip.initialize(options);\n }\n },\n afterDraw: function afterDraw(chart) {\n var tooltip = chart.tooltip;\n\n if (tooltip && tooltip._willRender()) {\n var args = {\n tooltip: tooltip\n };\n\n if (chart.notifyPlugins('beforeTooltipDraw', args) === false) {\n return;\n }\n\n tooltip.draw(chart.ctx);\n chart.notifyPlugins('afterTooltipDraw', args);\n }\n },\n afterEvent: function afterEvent(chart, args) {\n if (chart.tooltip) {\n var useFinalPosition = args.replay;\n\n if (chart.tooltip.handleEvent(args.event, useFinalPosition, args.inChartArea)) {\n args.changed = true;\n }\n }\n },\n defaults: {\n enabled: true,\n external: null,\n position: 'average',\n backgroundColor: 'rgba(0,0,0,0.8)',\n titleColor: '#fff',\n titleFont: {\n weight: 'bold'\n },\n titleSpacing: 2,\n titleMarginBottom: 6,\n titleAlign: 'left',\n bodyColor: '#fff',\n bodySpacing: 2,\n bodyFont: {},\n bodyAlign: 'left',\n footerColor: '#fff',\n footerSpacing: 2,\n footerMarginTop: 6,\n footerFont: {\n weight: 'bold'\n },\n footerAlign: 'left',\n padding: 6,\n caretPadding: 2,\n caretSize: 5,\n cornerRadius: 6,\n boxHeight: function boxHeight(ctx, opts) {\n return opts.bodyFont.size;\n },\n boxWidth: function boxWidth(ctx, opts) {\n return opts.bodyFont.size;\n },\n multiKeyBackground: '#fff',\n displayColors: true,\n boxPadding: 0,\n borderColor: 'rgba(0,0,0,0)',\n borderWidth: 0,\n animation: {\n duration: 400,\n easing: 'easeOutQuart'\n },\n animations: {\n numbers: {\n type: 'number',\n properties: ['x', 'y', 'width', 'height', 'caretX', 'caretY']\n },\n opacity: {\n easing: 'linear',\n duration: 200\n }\n },\n callbacks: {\n beforeTitle: noop,\n title: function title(tooltipItems) {\n if (tooltipItems.length > 0) {\n var item = tooltipItems[0];\n var labels = item.chart.data.labels;\n var labelCount = labels ? labels.length : 0;\n\n if (this && this.options && this.options.mode === 'dataset') {\n return item.dataset.label || '';\n } else if (item.label) {\n return item.label;\n } else if (labelCount > 0 && item.dataIndex < labelCount) {\n return labels[item.dataIndex];\n }\n }\n\n return '';\n },\n afterTitle: noop,\n beforeBody: noop,\n beforeLabel: noop,\n label: function label(tooltipItem) {\n if (this && this.options && this.options.mode === 'dataset') {\n return tooltipItem.label + ': ' + tooltipItem.formattedValue || tooltipItem.formattedValue;\n }\n\n var label = tooltipItem.dataset.label || '';\n\n if (label) {\n label += ': ';\n }\n\n var value = tooltipItem.formattedValue;\n\n if (!isNullOrUndef(value)) {\n label += value;\n }\n\n return label;\n },\n labelColor: function labelColor(tooltipItem) {\n var meta = tooltipItem.chart.getDatasetMeta(tooltipItem.datasetIndex);\n var options = meta.controller.getStyle(tooltipItem.dataIndex);\n return {\n borderColor: options.borderColor,\n backgroundColor: options.backgroundColor,\n borderWidth: options.borderWidth,\n borderDash: options.borderDash,\n borderDashOffset: options.borderDashOffset,\n borderRadius: 0\n };\n },\n labelTextColor: function labelTextColor() {\n return this.options.bodyColor;\n },\n labelPointStyle: function labelPointStyle(tooltipItem) {\n var meta = tooltipItem.chart.getDatasetMeta(tooltipItem.datasetIndex);\n var options = meta.controller.getStyle(tooltipItem.dataIndex);\n return {\n pointStyle: options.pointStyle,\n rotation: options.rotation\n };\n },\n afterLabel: noop,\n afterBody: noop,\n beforeFooter: noop,\n footer: noop,\n afterFooter: noop\n }\n },\n defaultRoutes: {\n bodyFont: 'font',\n footerFont: 'font',\n titleFont: 'font'\n },\n descriptors: {\n _scriptable: function _scriptable(name) {\n return name !== 'filter' && name !== 'itemSort' && name !== 'external';\n },\n _indexable: false,\n callbacks: {\n _scriptable: false,\n _indexable: false\n },\n animation: {\n _fallback: false\n },\n animations: {\n _fallback: 'animation'\n }\n },\n additionalOptionScopes: ['interaction']\n};\nvar plugins = /*#__PURE__*/Object.freeze({\n __proto__: null,\n Decimation: plugin_decimation,\n Filler: index,\n Legend: plugin_legend,\n SubTitle: plugin_subtitle,\n Title: plugin_title,\n Tooltip: plugin_tooltip\n});\n\nvar addIfString = function addIfString(labels, raw, index, addedLabels) {\n if (typeof raw === 'string') {\n index = labels.push(raw) - 1;\n addedLabels.unshift({\n index: index,\n label: raw\n });\n } else if (isNaN(raw)) {\n index = null;\n }\n\n return index;\n};\n\nfunction findOrAddLabel(labels, raw, index, addedLabels) {\n var first = labels.indexOf(raw);\n\n if (first === -1) {\n return addIfString(labels, raw, index, addedLabels);\n }\n\n var last = labels.lastIndexOf(raw);\n return first !== last ? index : first;\n}\n\nvar validIndex = function validIndex(index, max) {\n return index === null ? null : _limitValue(Math.round(index), 0, max);\n};\n\nvar CategoryScale = /*#__PURE__*/function (_Scale) {\n _inherits(CategoryScale, _Scale);\n\n var _super19 = _createSuper(CategoryScale);\n\n function CategoryScale(cfg) {\n var _this35;\n\n _classCallCheck(this, CategoryScale);\n\n _this35 = _super19.call(this, cfg);\n _this35._startValue = undefined;\n _this35._valueRange = 0;\n _this35._addedLabels = [];\n return _this35;\n }\n\n _createClass(CategoryScale, [{\n key: \"init\",\n value: function init(scaleOptions) {\n var added = this._addedLabels;\n\n if (added.length) {\n var labels = this.getLabels();\n\n var _iterator25 = _createForOfIteratorHelper(added),\n _step25;\n\n try {\n for (_iterator25.s(); !(_step25 = _iterator25.n()).done;) {\n var _step25$value = _step25.value,\n _index3 = _step25$value.index,\n label = _step25$value.label;\n\n if (labels[_index3] === label) {\n labels.splice(_index3, 1);\n }\n }\n } catch (err) {\n _iterator25.e(err);\n } finally {\n _iterator25.f();\n }\n\n this._addedLabels = [];\n }\n\n _get(_getPrototypeOf(CategoryScale.prototype), \"init\", this).call(this, scaleOptions);\n }\n }, {\n key: \"parse\",\n value: function parse(raw, index) {\n if (isNullOrUndef(raw)) {\n return null;\n }\n\n var labels = this.getLabels();\n index = isFinite(index) && labels[index] === raw ? index : findOrAddLabel(labels, raw, valueOrDefault(index, raw), this._addedLabels);\n return validIndex(index, labels.length - 1);\n }\n }, {\n key: \"determineDataLimits\",\n value: function determineDataLimits() {\n var _this$getUserBounds2 = this.getUserBounds(),\n minDefined = _this$getUserBounds2.minDefined,\n maxDefined = _this$getUserBounds2.maxDefined;\n\n var _this$getMinMax = this.getMinMax(true),\n min = _this$getMinMax.min,\n max = _this$getMinMax.max;\n\n if (this.options.bounds === 'ticks') {\n if (!minDefined) {\n min = 0;\n }\n\n if (!maxDefined) {\n max = this.getLabels().length - 1;\n }\n }\n\n this.min = min;\n this.max = max;\n }\n }, {\n key: \"buildTicks\",\n value: function buildTicks() {\n var min = this.min;\n var max = this.max;\n var offset = this.options.offset;\n var ticks = [];\n var labels = this.getLabels();\n labels = min === 0 && max === labels.length - 1 ? labels : labels.slice(min, max + 1);\n this._valueRange = Math.max(labels.length - (offset ? 0 : 1), 1);\n this._startValue = this.min - (offset ? 0.5 : 0);\n\n for (var value = min; value <= max; value++) {\n ticks.push({\n value: value\n });\n }\n\n return ticks;\n }\n }, {\n key: \"getLabelForValue\",\n value: function getLabelForValue(value) {\n var labels = this.getLabels();\n\n if (value >= 0 && value < labels.length) {\n return labels[value];\n }\n\n return value;\n }\n }, {\n key: \"configure\",\n value: function configure() {\n _get(_getPrototypeOf(CategoryScale.prototype), \"configure\", this).call(this);\n\n if (!this.isHorizontal()) {\n this._reversePixels = !this._reversePixels;\n }\n }\n }, {\n key: \"getPixelForValue\",\n value: function getPixelForValue(value) {\n if (typeof value !== 'number') {\n value = this.parse(value);\n }\n\n return value === null ? NaN : this.getPixelForDecimal((value - this._startValue) / this._valueRange);\n }\n }, {\n key: \"getPixelForTick\",\n value: function getPixelForTick(index) {\n var ticks = this.ticks;\n\n if (index < 0 || index > ticks.length - 1) {\n return null;\n }\n\n return this.getPixelForValue(ticks[index].value);\n }\n }, {\n key: \"getValueForPixel\",\n value: function getValueForPixel(pixel) {\n return Math.round(this._startValue + this.getDecimalForPixel(pixel) * this._valueRange);\n }\n }, {\n key: \"getBasePixel\",\n value: function getBasePixel() {\n return this.bottom;\n }\n }]);\n\n return CategoryScale;\n}(Scale);\n\nCategoryScale.id = 'category';\nCategoryScale.defaults = {\n ticks: {\n callback: CategoryScale.prototype.getLabelForValue\n }\n};\n\nfunction generateTicks$1(generationOptions, dataRange) {\n var ticks = [];\n var MIN_SPACING = 1e-14;\n var bounds = generationOptions.bounds,\n step = generationOptions.step,\n min = generationOptions.min,\n max = generationOptions.max,\n precision = generationOptions.precision,\n count = generationOptions.count,\n maxTicks = generationOptions.maxTicks,\n maxDigits = generationOptions.maxDigits,\n includeBounds = generationOptions.includeBounds;\n var unit = step || 1;\n var maxSpaces = maxTicks - 1;\n var rmin = dataRange.min,\n rmax = dataRange.max;\n var minDefined = !isNullOrUndef(min);\n var maxDefined = !isNullOrUndef(max);\n var countDefined = !isNullOrUndef(count);\n var minSpacing = (rmax - rmin) / (maxDigits + 1);\n var spacing = niceNum((rmax - rmin) / maxSpaces / unit) * unit;\n var factor, niceMin, niceMax, numSpaces;\n\n if (spacing < MIN_SPACING && !minDefined && !maxDefined) {\n return [{\n value: rmin\n }, {\n value: rmax\n }];\n }\n\n numSpaces = Math.ceil(rmax / spacing) - Math.floor(rmin / spacing);\n\n if (numSpaces > maxSpaces) {\n spacing = niceNum(numSpaces * spacing / maxSpaces / unit) * unit;\n }\n\n if (!isNullOrUndef(precision)) {\n factor = Math.pow(10, precision);\n spacing = Math.ceil(spacing * factor) / factor;\n }\n\n if (bounds === 'ticks') {\n niceMin = Math.floor(rmin / spacing) * spacing;\n niceMax = Math.ceil(rmax / spacing) * spacing;\n } else {\n niceMin = rmin;\n niceMax = rmax;\n }\n\n if (minDefined && maxDefined && step && almostWhole((max - min) / step, spacing / 1000)) {\n numSpaces = Math.round(Math.min((max - min) / spacing, maxTicks));\n spacing = (max - min) / numSpaces;\n niceMin = min;\n niceMax = max;\n } else if (countDefined) {\n niceMin = minDefined ? min : niceMin;\n niceMax = maxDefined ? max : niceMax;\n numSpaces = count - 1;\n spacing = (niceMax - niceMin) / numSpaces;\n } else {\n numSpaces = (niceMax - niceMin) / spacing;\n\n if (almostEquals(numSpaces, Math.round(numSpaces), spacing / 1000)) {\n numSpaces = Math.round(numSpaces);\n } else {\n numSpaces = Math.ceil(numSpaces);\n }\n }\n\n var decimalPlaces = Math.max(_decimalPlaces(spacing), _decimalPlaces(niceMin));\n factor = Math.pow(10, isNullOrUndef(precision) ? decimalPlaces : precision);\n niceMin = Math.round(niceMin * factor) / factor;\n niceMax = Math.round(niceMax * factor) / factor;\n var j = 0;\n\n if (minDefined) {\n if (includeBounds && niceMin !== min) {\n ticks.push({\n value: min\n });\n\n if (niceMin < min) {\n j++;\n }\n\n if (almostEquals(Math.round((niceMin + j * spacing) * factor) / factor, min, relativeLabelSize(min, minSpacing, generationOptions))) {\n j++;\n }\n } else if (niceMin < min) {\n j++;\n }\n }\n\n for (; j < numSpaces; ++j) {\n ticks.push({\n value: Math.round((niceMin + j * spacing) * factor) / factor\n });\n }\n\n if (maxDefined && includeBounds && niceMax !== max) {\n if (ticks.length && almostEquals(ticks[ticks.length - 1].value, max, relativeLabelSize(max, minSpacing, generationOptions))) {\n ticks[ticks.length - 1].value = max;\n } else {\n ticks.push({\n value: max\n });\n }\n } else if (!maxDefined || niceMax === max) {\n ticks.push({\n value: niceMax\n });\n }\n\n return ticks;\n}\n\nfunction relativeLabelSize(value, minSpacing, _ref12) {\n var horizontal = _ref12.horizontal,\n minRotation = _ref12.minRotation;\n var rad = toRadians(minRotation);\n var ratio = (horizontal ? Math.sin(rad) : Math.cos(rad)) || 0.001;\n var length = 0.75 * minSpacing * ('' + value).length;\n return Math.min(minSpacing / ratio, length);\n}\n\nvar LinearScaleBase = /*#__PURE__*/function (_Scale2) {\n _inherits(LinearScaleBase, _Scale2);\n\n var _super20 = _createSuper(LinearScaleBase);\n\n function LinearScaleBase(cfg) {\n var _this36;\n\n _classCallCheck(this, LinearScaleBase);\n\n _this36 = _super20.call(this, cfg);\n _this36.start = undefined;\n _this36.end = undefined;\n _this36._startValue = undefined;\n _this36._endValue = undefined;\n _this36._valueRange = 0;\n return _this36;\n }\n\n _createClass(LinearScaleBase, [{\n key: \"parse\",\n value: function parse(raw, index) {\n if (isNullOrUndef(raw)) {\n return null;\n }\n\n if ((typeof raw === 'number' || raw instanceof Number) && !isFinite(+raw)) {\n return null;\n }\n\n return +raw;\n }\n }, {\n key: \"handleTickRangeOptions\",\n value: function handleTickRangeOptions() {\n var beginAtZero = this.options.beginAtZero;\n\n var _this$getUserBounds3 = this.getUserBounds(),\n minDefined = _this$getUserBounds3.minDefined,\n maxDefined = _this$getUserBounds3.maxDefined;\n\n var min = this.min,\n max = this.max;\n\n var setMin = function setMin(v) {\n return min = minDefined ? min : v;\n };\n\n var setMax = function setMax(v) {\n return max = maxDefined ? max : v;\n };\n\n if (beginAtZero) {\n var minSign = sign(min);\n var maxSign = sign(max);\n\n if (minSign < 0 && maxSign < 0) {\n setMax(0);\n } else if (minSign > 0 && maxSign > 0) {\n setMin(0);\n }\n }\n\n if (min === max) {\n var offset = 1;\n\n if (max >= Number.MAX_SAFE_INTEGER || min <= Number.MIN_SAFE_INTEGER) {\n offset = Math.abs(max * 0.05);\n }\n\n setMax(max + offset);\n\n if (!beginAtZero) {\n setMin(min - offset);\n }\n }\n\n this.min = min;\n this.max = max;\n }\n }, {\n key: \"getTickLimit\",\n value: function getTickLimit() {\n var tickOpts = this.options.ticks;\n var maxTicksLimit = tickOpts.maxTicksLimit,\n stepSize = tickOpts.stepSize;\n var maxTicks;\n\n if (stepSize) {\n maxTicks = Math.ceil(this.max / stepSize) - Math.floor(this.min / stepSize) + 1;\n\n if (maxTicks > 1000) {\n console.warn(\"scales.\".concat(this.id, \".ticks.stepSize: \").concat(stepSize, \" would result generating up to \").concat(maxTicks, \" ticks. Limiting to 1000.\"));\n maxTicks = 1000;\n }\n } else {\n maxTicks = this.computeTickLimit();\n maxTicksLimit = maxTicksLimit || 11;\n }\n\n if (maxTicksLimit) {\n maxTicks = Math.min(maxTicksLimit, maxTicks);\n }\n\n return maxTicks;\n }\n }, {\n key: \"computeTickLimit\",\n value: function computeTickLimit() {\n return Number.POSITIVE_INFINITY;\n }\n }, {\n key: \"buildTicks\",\n value: function buildTicks() {\n var opts = this.options;\n var tickOpts = opts.ticks;\n var maxTicks = this.getTickLimit();\n maxTicks = Math.max(2, maxTicks);\n var numericGeneratorOptions = {\n maxTicks: maxTicks,\n bounds: opts.bounds,\n min: opts.min,\n max: opts.max,\n precision: tickOpts.precision,\n step: tickOpts.stepSize,\n count: tickOpts.count,\n maxDigits: this._maxDigits(),\n horizontal: this.isHorizontal(),\n minRotation: tickOpts.minRotation || 0,\n includeBounds: tickOpts.includeBounds !== false\n };\n var dataRange = this._range || this;\n var ticks = generateTicks$1(numericGeneratorOptions, dataRange);\n\n if (opts.bounds === 'ticks') {\n _setMinAndMaxByKey(ticks, this, 'value');\n }\n\n if (opts.reverse) {\n ticks.reverse();\n this.start = this.max;\n this.end = this.min;\n } else {\n this.start = this.min;\n this.end = this.max;\n }\n\n return ticks;\n }\n }, {\n key: \"configure\",\n value: function configure() {\n var ticks = this.ticks;\n var start = this.min;\n var end = this.max;\n\n _get(_getPrototypeOf(LinearScaleBase.prototype), \"configure\", this).call(this);\n\n if (this.options.offset && ticks.length) {\n var offset = (end - start) / Math.max(ticks.length - 1, 1) / 2;\n start -= offset;\n end += offset;\n }\n\n this._startValue = start;\n this._endValue = end;\n this._valueRange = end - start;\n }\n }, {\n key: \"getLabelForValue\",\n value: function getLabelForValue(value) {\n return formatNumber(value, this.chart.options.locale, this.options.ticks.format);\n }\n }]);\n\n return LinearScaleBase;\n}(Scale);\n\nvar LinearScale = /*#__PURE__*/function (_LinearScaleBase) {\n _inherits(LinearScale, _LinearScaleBase);\n\n var _super21 = _createSuper(LinearScale);\n\n function LinearScale() {\n _classCallCheck(this, LinearScale);\n\n return _super21.apply(this, arguments);\n }\n\n _createClass(LinearScale, [{\n key: \"determineDataLimits\",\n value: function determineDataLimits() {\n var _this$getMinMax2 = this.getMinMax(true),\n min = _this$getMinMax2.min,\n max = _this$getMinMax2.max;\n\n this.min = isNumberFinite(min) ? min : 0;\n this.max = isNumberFinite(max) ? max : 1;\n this.handleTickRangeOptions();\n }\n }, {\n key: \"computeTickLimit\",\n value: function computeTickLimit() {\n var horizontal = this.isHorizontal();\n var length = horizontal ? this.width : this.height;\n var minRotation = toRadians(this.options.ticks.minRotation);\n var ratio = (horizontal ? Math.sin(minRotation) : Math.cos(minRotation)) || 0.001;\n\n var tickFont = this._resolveTickFontOptions(0);\n\n return Math.ceil(length / Math.min(40, tickFont.lineHeight / ratio));\n }\n }, {\n key: \"getPixelForValue\",\n value: function getPixelForValue(value) {\n return value === null ? NaN : this.getPixelForDecimal((value - this._startValue) / this._valueRange);\n }\n }, {\n key: \"getValueForPixel\",\n value: function getValueForPixel(pixel) {\n return this._startValue + this.getDecimalForPixel(pixel) * this._valueRange;\n }\n }]);\n\n return LinearScale;\n}(LinearScaleBase);\n\nLinearScale.id = 'linear';\nLinearScale.defaults = {\n ticks: {\n callback: Ticks.formatters.numeric\n }\n};\n\nfunction isMajor(tickVal) {\n var remain = tickVal / Math.pow(10, Math.floor(log10(tickVal)));\n return remain === 1;\n}\n\nfunction generateTicks(generationOptions, dataRange) {\n var endExp = Math.floor(log10(dataRange.max));\n var endSignificand = Math.ceil(dataRange.max / Math.pow(10, endExp));\n var ticks = [];\n var tickVal = finiteOrDefault(generationOptions.min, Math.pow(10, Math.floor(log10(dataRange.min))));\n var exp = Math.floor(log10(tickVal));\n var significand = Math.floor(tickVal / Math.pow(10, exp));\n var precision = exp < 0 ? Math.pow(10, Math.abs(exp)) : 1;\n\n do {\n ticks.push({\n value: tickVal,\n major: isMajor(tickVal)\n });\n ++significand;\n\n if (significand === 10) {\n significand = 1;\n ++exp;\n precision = exp >= 0 ? 1 : precision;\n }\n\n tickVal = Math.round(significand * Math.pow(10, exp) * precision) / precision;\n } while (exp < endExp || exp === endExp && significand < endSignificand);\n\n var lastTick = finiteOrDefault(generationOptions.max, tickVal);\n ticks.push({\n value: lastTick,\n major: isMajor(tickVal)\n });\n return ticks;\n}\n\nvar LogarithmicScale = /*#__PURE__*/function (_Scale3) {\n _inherits(LogarithmicScale, _Scale3);\n\n var _super22 = _createSuper(LogarithmicScale);\n\n function LogarithmicScale(cfg) {\n var _this37;\n\n _classCallCheck(this, LogarithmicScale);\n\n _this37 = _super22.call(this, cfg);\n _this37.start = undefined;\n _this37.end = undefined;\n _this37._startValue = undefined;\n _this37._valueRange = 0;\n return _this37;\n }\n\n _createClass(LogarithmicScale, [{\n key: \"parse\",\n value: function parse(raw, index) {\n var value = LinearScaleBase.prototype.parse.apply(this, [raw, index]);\n\n if (value === 0) {\n this._zero = true;\n return undefined;\n }\n\n return isNumberFinite(value) && value > 0 ? value : null;\n }\n }, {\n key: \"determineDataLimits\",\n value: function determineDataLimits() {\n var _this$getMinMax3 = this.getMinMax(true),\n min = _this$getMinMax3.min,\n max = _this$getMinMax3.max;\n\n this.min = isNumberFinite(min) ? Math.max(0, min) : null;\n this.max = isNumberFinite(max) ? Math.max(0, max) : null;\n\n if (this.options.beginAtZero) {\n this._zero = true;\n }\n\n this.handleTickRangeOptions();\n }\n }, {\n key: \"handleTickRangeOptions\",\n value: function handleTickRangeOptions() {\n var _this$getUserBounds4 = this.getUserBounds(),\n minDefined = _this$getUserBounds4.minDefined,\n maxDefined = _this$getUserBounds4.maxDefined;\n\n var min = this.min;\n var max = this.max;\n\n var setMin = function setMin(v) {\n return min = minDefined ? min : v;\n };\n\n var setMax = function setMax(v) {\n return max = maxDefined ? max : v;\n };\n\n var exp = function exp(v, m) {\n return Math.pow(10, Math.floor(log10(v)) + m);\n };\n\n if (min === max) {\n if (min <= 0) {\n setMin(1);\n setMax(10);\n } else {\n setMin(exp(min, -1));\n setMax(exp(max, +1));\n }\n }\n\n if (min <= 0) {\n setMin(exp(max, -1));\n }\n\n if (max <= 0) {\n setMax(exp(min, +1));\n }\n\n if (this._zero && this.min !== this._suggestedMin && min === exp(this.min, 0)) {\n setMin(exp(min, -1));\n }\n\n this.min = min;\n this.max = max;\n }\n }, {\n key: \"buildTicks\",\n value: function buildTicks() {\n var opts = this.options;\n var generationOptions = {\n min: this._userMin,\n max: this._userMax\n };\n var ticks = generateTicks(generationOptions, this);\n\n if (opts.bounds === 'ticks') {\n _setMinAndMaxByKey(ticks, this, 'value');\n }\n\n if (opts.reverse) {\n ticks.reverse();\n this.start = this.max;\n this.end = this.min;\n } else {\n this.start = this.min;\n this.end = this.max;\n }\n\n return ticks;\n }\n }, {\n key: \"getLabelForValue\",\n value: function getLabelForValue(value) {\n return value === undefined ? '0' : formatNumber(value, this.chart.options.locale, this.options.ticks.format);\n }\n }, {\n key: \"configure\",\n value: function configure() {\n var start = this.min;\n\n _get(_getPrototypeOf(LogarithmicScale.prototype), \"configure\", this).call(this);\n\n this._startValue = log10(start);\n this._valueRange = log10(this.max) - log10(start);\n }\n }, {\n key: \"getPixelForValue\",\n value: function getPixelForValue(value) {\n if (value === undefined || value === 0) {\n value = this.min;\n }\n\n if (value === null || isNaN(value)) {\n return NaN;\n }\n\n return this.getPixelForDecimal(value === this.min ? 0 : (log10(value) - this._startValue) / this._valueRange);\n }\n }, {\n key: \"getValueForPixel\",\n value: function getValueForPixel(pixel) {\n var decimal = this.getDecimalForPixel(pixel);\n return Math.pow(10, this._startValue + decimal * this._valueRange);\n }\n }]);\n\n return LogarithmicScale;\n}(Scale);\n\nLogarithmicScale.id = 'logarithmic';\nLogarithmicScale.defaults = {\n ticks: {\n callback: Ticks.formatters.logarithmic,\n major: {\n enabled: true\n }\n }\n};\n\nfunction getTickBackdropHeight(opts) {\n var tickOpts = opts.ticks;\n\n if (tickOpts.display && opts.display) {\n var padding = toPadding(tickOpts.backdropPadding);\n return valueOrDefault(tickOpts.font && tickOpts.font.size, defaults.font.size) + padding.height;\n }\n\n return 0;\n}\n\nfunction measureLabelSize(ctx, font, label) {\n label = isArray(label) ? label : [label];\n return {\n w: _longestText(ctx, font.string, label),\n h: label.length * font.lineHeight\n };\n}\n\nfunction determineLimits(angle, pos, size, min, max) {\n if (angle === min || angle === max) {\n return {\n start: pos - size / 2,\n end: pos + size / 2\n };\n } else if (angle < min || angle > max) {\n return {\n start: pos - size,\n end: pos\n };\n }\n\n return {\n start: pos,\n end: pos + size\n };\n}\n\nfunction fitWithPointLabels(scale) {\n var orig = {\n l: scale.left + scale._padding.left,\n r: scale.right - scale._padding.right,\n t: scale.top + scale._padding.top,\n b: scale.bottom - scale._padding.bottom\n };\n var limits = Object.assign({}, orig);\n var labelSizes = [];\n var padding = [];\n var valueCount = scale._pointLabels.length;\n var pointLabelOpts = scale.options.pointLabels;\n var additionalAngle = pointLabelOpts.centerPointLabels ? PI / valueCount : 0;\n\n for (var i = 0; i < valueCount; i++) {\n var opts = pointLabelOpts.setContext(scale.getPointLabelContext(i));\n padding[i] = opts.padding;\n var pointPosition = scale.getPointPosition(i, scale.drawingArea + padding[i], additionalAngle);\n var plFont = toFont(opts.font);\n var textSize = measureLabelSize(scale.ctx, plFont, scale._pointLabels[i]);\n labelSizes[i] = textSize;\n\n var angleRadians = _normalizeAngle(scale.getIndexAngle(i) + additionalAngle);\n\n var angle = Math.round(toDegrees(angleRadians));\n var hLimits = determineLimits(angle, pointPosition.x, textSize.w, 0, 180);\n var vLimits = determineLimits(angle, pointPosition.y, textSize.h, 90, 270);\n updateLimits(limits, orig, angleRadians, hLimits, vLimits);\n }\n\n scale.setCenterPoint(orig.l - limits.l, limits.r - orig.r, orig.t - limits.t, limits.b - orig.b);\n scale._pointLabelItems = buildPointLabelItems(scale, labelSizes, padding);\n}\n\nfunction updateLimits(limits, orig, angle, hLimits, vLimits) {\n var sin = Math.abs(Math.sin(angle));\n var cos = Math.abs(Math.cos(angle));\n var x = 0;\n var y = 0;\n\n if (hLimits.start < orig.l) {\n x = (orig.l - hLimits.start) / sin;\n limits.l = Math.min(limits.l, orig.l - x);\n } else if (hLimits.end > orig.r) {\n x = (hLimits.end - orig.r) / sin;\n limits.r = Math.max(limits.r, orig.r + x);\n }\n\n if (vLimits.start < orig.t) {\n y = (orig.t - vLimits.start) / cos;\n limits.t = Math.min(limits.t, orig.t - y);\n } else if (vLimits.end > orig.b) {\n y = (vLimits.end - orig.b) / cos;\n limits.b = Math.max(limits.b, orig.b + y);\n }\n}\n\nfunction buildPointLabelItems(scale, labelSizes, padding) {\n var items = [];\n var valueCount = scale._pointLabels.length;\n var opts = scale.options;\n var extra = getTickBackdropHeight(opts) / 2;\n var outerDistance = scale.drawingArea;\n var additionalAngle = opts.pointLabels.centerPointLabels ? PI / valueCount : 0;\n\n for (var i = 0; i < valueCount; i++) {\n var pointLabelPosition = scale.getPointPosition(i, outerDistance + extra + padding[i], additionalAngle);\n var angle = Math.round(toDegrees(_normalizeAngle(pointLabelPosition.angle + HALF_PI)));\n var size = labelSizes[i];\n var y = yForAngle(pointLabelPosition.y, size.h, angle);\n var textAlign = getTextAlignForAngle(angle);\n var left = leftForTextAlign(pointLabelPosition.x, size.w, textAlign);\n items.push({\n x: pointLabelPosition.x,\n y: y,\n textAlign: textAlign,\n left: left,\n top: y,\n right: left + size.w,\n bottom: y + size.h\n });\n }\n\n return items;\n}\n\nfunction getTextAlignForAngle(angle) {\n if (angle === 0 || angle === 180) {\n return 'center';\n } else if (angle < 180) {\n return 'left';\n }\n\n return 'right';\n}\n\nfunction leftForTextAlign(x, w, align) {\n if (align === 'right') {\n x -= w;\n } else if (align === 'center') {\n x -= w / 2;\n }\n\n return x;\n}\n\nfunction yForAngle(y, h, angle) {\n if (angle === 90 || angle === 270) {\n y -= h / 2;\n } else if (angle > 270 || angle < 90) {\n y -= h;\n }\n\n return y;\n}\n\nfunction drawPointLabels(scale, labelCount) {\n var ctx = scale.ctx,\n pointLabels = scale.options.pointLabels;\n\n for (var i = labelCount - 1; i >= 0; i--) {\n var optsAtIndex = pointLabels.setContext(scale.getPointLabelContext(i));\n var plFont = toFont(optsAtIndex.font);\n var _scale$_pointLabelIte = scale._pointLabelItems[i],\n x = _scale$_pointLabelIte.x,\n y = _scale$_pointLabelIte.y,\n textAlign = _scale$_pointLabelIte.textAlign,\n left = _scale$_pointLabelIte.left,\n top = _scale$_pointLabelIte.top,\n right = _scale$_pointLabelIte.right,\n bottom = _scale$_pointLabelIte.bottom;\n var backdropColor = optsAtIndex.backdropColor;\n\n if (!isNullOrUndef(backdropColor)) {\n var borderRadius = toTRBLCorners(optsAtIndex.borderRadius);\n var padding = toPadding(optsAtIndex.backdropPadding);\n ctx.fillStyle = backdropColor;\n var backdropLeft = left - padding.left;\n var backdropTop = top - padding.top;\n var backdropWidth = right - left + padding.width;\n var backdropHeight = bottom - top + padding.height;\n\n if (Object.values(borderRadius).some(function (v) {\n return v !== 0;\n })) {\n ctx.beginPath();\n addRoundedRectPath(ctx, {\n x: backdropLeft,\n y: backdropTop,\n w: backdropWidth,\n h: backdropHeight,\n radius: borderRadius\n });\n ctx.fill();\n } else {\n ctx.fillRect(backdropLeft, backdropTop, backdropWidth, backdropHeight);\n }\n }\n\n renderText(ctx, scale._pointLabels[i], x, y + plFont.lineHeight / 2, plFont, {\n color: optsAtIndex.color,\n textAlign: textAlign,\n textBaseline: 'middle'\n });\n }\n}\n\nfunction pathRadiusLine(scale, radius, circular, labelCount) {\n var ctx = scale.ctx;\n\n if (circular) {\n ctx.arc(scale.xCenter, scale.yCenter, radius, 0, TAU);\n } else {\n var pointPosition = scale.getPointPosition(0, radius);\n ctx.moveTo(pointPosition.x, pointPosition.y);\n\n for (var i = 1; i < labelCount; i++) {\n pointPosition = scale.getPointPosition(i, radius);\n ctx.lineTo(pointPosition.x, pointPosition.y);\n }\n }\n}\n\nfunction drawRadiusLine(scale, gridLineOpts, radius, labelCount) {\n var ctx = scale.ctx;\n var circular = gridLineOpts.circular;\n var color = gridLineOpts.color,\n lineWidth = gridLineOpts.lineWidth;\n\n if (!circular && !labelCount || !color || !lineWidth || radius < 0) {\n return;\n }\n\n ctx.save();\n ctx.strokeStyle = color;\n ctx.lineWidth = lineWidth;\n ctx.setLineDash(gridLineOpts.borderDash);\n ctx.lineDashOffset = gridLineOpts.borderDashOffset;\n ctx.beginPath();\n pathRadiusLine(scale, radius, circular, labelCount);\n ctx.closePath();\n ctx.stroke();\n ctx.restore();\n}\n\nfunction createPointLabelContext(parent, index, label) {\n return createContext(parent, {\n label: label,\n index: index,\n type: 'pointLabel'\n });\n}\n\nvar RadialLinearScale = /*#__PURE__*/function (_LinearScaleBase2) {\n _inherits(RadialLinearScale, _LinearScaleBase2);\n\n var _super23 = _createSuper(RadialLinearScale);\n\n function RadialLinearScale(cfg) {\n var _this38;\n\n _classCallCheck(this, RadialLinearScale);\n\n _this38 = _super23.call(this, cfg);\n _this38.xCenter = undefined;\n _this38.yCenter = undefined;\n _this38.drawingArea = undefined;\n _this38._pointLabels = [];\n _this38._pointLabelItems = [];\n return _this38;\n }\n\n _createClass(RadialLinearScale, [{\n key: \"setDimensions\",\n value: function setDimensions() {\n var padding = this._padding = toPadding(getTickBackdropHeight(this.options) / 2);\n var w = this.width = this.maxWidth - padding.width;\n var h = this.height = this.maxHeight - padding.height;\n this.xCenter = Math.floor(this.left + w / 2 + padding.left);\n this.yCenter = Math.floor(this.top + h / 2 + padding.top);\n this.drawingArea = Math.floor(Math.min(w, h) / 2);\n }\n }, {\n key: \"determineDataLimits\",\n value: function determineDataLimits() {\n var _this$getMinMax4 = this.getMinMax(false),\n min = _this$getMinMax4.min,\n max = _this$getMinMax4.max;\n\n this.min = isNumberFinite(min) && !isNaN(min) ? min : 0;\n this.max = isNumberFinite(max) && !isNaN(max) ? max : 0;\n this.handleTickRangeOptions();\n }\n }, {\n key: \"computeTickLimit\",\n value: function computeTickLimit() {\n return Math.ceil(this.drawingArea / getTickBackdropHeight(this.options));\n }\n }, {\n key: \"generateTickLabels\",\n value: function generateTickLabels(ticks) {\n var _this39 = this;\n\n LinearScaleBase.prototype.generateTickLabels.call(this, ticks);\n this._pointLabels = this.getLabels().map(function (value, index) {\n var label = callback(_this39.options.pointLabels.callback, [value, index], _this39);\n return label || label === 0 ? label : '';\n }).filter(function (v, i) {\n return _this39.chart.getDataVisibility(i);\n });\n }\n }, {\n key: \"fit\",\n value: function fit() {\n var opts = this.options;\n\n if (opts.display && opts.pointLabels.display) {\n fitWithPointLabels(this);\n } else {\n this.setCenterPoint(0, 0, 0, 0);\n }\n }\n }, {\n key: \"setCenterPoint\",\n value: function setCenterPoint(leftMovement, rightMovement, topMovement, bottomMovement) {\n this.xCenter += Math.floor((leftMovement - rightMovement) / 2);\n this.yCenter += Math.floor((topMovement - bottomMovement) / 2);\n this.drawingArea -= Math.min(this.drawingArea / 2, Math.max(leftMovement, rightMovement, topMovement, bottomMovement));\n }\n }, {\n key: \"getIndexAngle\",\n value: function getIndexAngle(index) {\n var angleMultiplier = TAU / (this._pointLabels.length || 1);\n var startAngle = this.options.startAngle || 0;\n return _normalizeAngle(index * angleMultiplier + toRadians(startAngle));\n }\n }, {\n key: \"getDistanceFromCenterForValue\",\n value: function getDistanceFromCenterForValue(value) {\n if (isNullOrUndef(value)) {\n return NaN;\n }\n\n var scalingFactor = this.drawingArea / (this.max - this.min);\n\n if (this.options.reverse) {\n return (this.max - value) * scalingFactor;\n }\n\n return (value - this.min) * scalingFactor;\n }\n }, {\n key: \"getValueForDistanceFromCenter\",\n value: function getValueForDistanceFromCenter(distance) {\n if (isNullOrUndef(distance)) {\n return NaN;\n }\n\n var scaledDistance = distance / (this.drawingArea / (this.max - this.min));\n return this.options.reverse ? this.max - scaledDistance : this.min + scaledDistance;\n }\n }, {\n key: \"getPointLabelContext\",\n value: function getPointLabelContext(index) {\n var pointLabels = this._pointLabels || [];\n\n if (index >= 0 && index < pointLabels.length) {\n var pointLabel = pointLabels[index];\n return createPointLabelContext(this.getContext(), index, pointLabel);\n }\n }\n }, {\n key: \"getPointPosition\",\n value: function getPointPosition(index, distanceFromCenter) {\n var additionalAngle = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;\n var angle = this.getIndexAngle(index) - HALF_PI + additionalAngle;\n return {\n x: Math.cos(angle) * distanceFromCenter + this.xCenter,\n y: Math.sin(angle) * distanceFromCenter + this.yCenter,\n angle: angle\n };\n }\n }, {\n key: \"getPointPositionForValue\",\n value: function getPointPositionForValue(index, value) {\n return this.getPointPosition(index, this.getDistanceFromCenterForValue(value));\n }\n }, {\n key: \"getBasePosition\",\n value: function getBasePosition(index) {\n return this.getPointPositionForValue(index || 0, this.getBaseValue());\n }\n }, {\n key: \"getPointLabelPosition\",\n value: function getPointLabelPosition(index) {\n var _this$_pointLabelItem = this._pointLabelItems[index],\n left = _this$_pointLabelItem.left,\n top = _this$_pointLabelItem.top,\n right = _this$_pointLabelItem.right,\n bottom = _this$_pointLabelItem.bottom;\n return {\n left: left,\n top: top,\n right: right,\n bottom: bottom\n };\n }\n }, {\n key: \"drawBackground\",\n value: function drawBackground() {\n var _this$options15 = this.options,\n backgroundColor = _this$options15.backgroundColor,\n circular = _this$options15.grid.circular;\n\n if (backgroundColor) {\n var ctx = this.ctx;\n ctx.save();\n ctx.beginPath();\n pathRadiusLine(this, this.getDistanceFromCenterForValue(this._endValue), circular, this._pointLabels.length);\n ctx.closePath();\n ctx.fillStyle = backgroundColor;\n ctx.fill();\n ctx.restore();\n }\n }\n }, {\n key: \"drawGrid\",\n value: function drawGrid() {\n var _this40 = this;\n\n var ctx = this.ctx;\n var opts = this.options;\n var angleLines = opts.angleLines,\n grid = opts.grid;\n var labelCount = this._pointLabels.length;\n var i, offset, position;\n\n if (opts.pointLabels.display) {\n drawPointLabels(this, labelCount);\n }\n\n if (grid.display) {\n this.ticks.forEach(function (tick, index) {\n if (index !== 0) {\n offset = _this40.getDistanceFromCenterForValue(tick.value);\n var optsAtIndex = grid.setContext(_this40.getContext(index - 1));\n drawRadiusLine(_this40, optsAtIndex, offset, labelCount);\n }\n });\n }\n\n if (angleLines.display) {\n ctx.save();\n\n for (i = labelCount - 1; i >= 0; i--) {\n var optsAtIndex = angleLines.setContext(this.getPointLabelContext(i));\n var color = optsAtIndex.color,\n lineWidth = optsAtIndex.lineWidth;\n\n if (!lineWidth || !color) {\n continue;\n }\n\n ctx.lineWidth = lineWidth;\n ctx.strokeStyle = color;\n ctx.setLineDash(optsAtIndex.borderDash);\n ctx.lineDashOffset = optsAtIndex.borderDashOffset;\n offset = this.getDistanceFromCenterForValue(opts.ticks.reverse ? this.min : this.max);\n position = this.getPointPosition(i, offset);\n ctx.beginPath();\n ctx.moveTo(this.xCenter, this.yCenter);\n ctx.lineTo(position.x, position.y);\n ctx.stroke();\n }\n\n ctx.restore();\n }\n }\n }, {\n key: \"drawBorder\",\n value: function drawBorder() {}\n }, {\n key: \"drawLabels\",\n value: function drawLabels() {\n var _this41 = this;\n\n var ctx = this.ctx;\n var opts = this.options;\n var tickOpts = opts.ticks;\n\n if (!tickOpts.display) {\n return;\n }\n\n var startAngle = this.getIndexAngle(0);\n var offset, width;\n ctx.save();\n ctx.translate(this.xCenter, this.yCenter);\n ctx.rotate(startAngle);\n ctx.textAlign = 'center';\n ctx.textBaseline = 'middle';\n this.ticks.forEach(function (tick, index) {\n if (index === 0 && !opts.reverse) {\n return;\n }\n\n var optsAtIndex = tickOpts.setContext(_this41.getContext(index));\n var tickFont = toFont(optsAtIndex.font);\n offset = _this41.getDistanceFromCenterForValue(_this41.ticks[index].value);\n\n if (optsAtIndex.showLabelBackdrop) {\n ctx.font = tickFont.string;\n width = ctx.measureText(tick.label).width;\n ctx.fillStyle = optsAtIndex.backdropColor;\n var padding = toPadding(optsAtIndex.backdropPadding);\n ctx.fillRect(-width / 2 - padding.left, -offset - tickFont.size / 2 - padding.top, width + padding.width, tickFont.size + padding.height);\n }\n\n renderText(ctx, tick.label, 0, -offset, tickFont, {\n color: optsAtIndex.color\n });\n });\n ctx.restore();\n }\n }, {\n key: \"drawTitle\",\n value: function drawTitle() {}\n }]);\n\n return RadialLinearScale;\n}(LinearScaleBase);\n\nRadialLinearScale.id = 'radialLinear';\nRadialLinearScale.defaults = {\n display: true,\n animate: true,\n position: 'chartArea',\n angleLines: {\n display: true,\n lineWidth: 1,\n borderDash: [],\n borderDashOffset: 0.0\n },\n grid: {\n circular: false\n },\n startAngle: 0,\n ticks: {\n showLabelBackdrop: true,\n callback: Ticks.formatters.numeric\n },\n pointLabels: {\n backdropColor: undefined,\n backdropPadding: 2,\n display: true,\n font: {\n size: 10\n },\n callback: function callback(label) {\n return label;\n },\n padding: 5,\n centerPointLabels: false\n }\n};\nRadialLinearScale.defaultRoutes = {\n 'angleLines.color': 'borderColor',\n 'pointLabels.color': 'color',\n 'ticks.color': 'color'\n};\nRadialLinearScale.descriptors = {\n angleLines: {\n _fallback: 'grid'\n }\n};\nvar INTERVALS = {\n millisecond: {\n common: true,\n size: 1,\n steps: 1000\n },\n second: {\n common: true,\n size: 1000,\n steps: 60\n },\n minute: {\n common: true,\n size: 60000,\n steps: 60\n },\n hour: {\n common: true,\n size: 3600000,\n steps: 24\n },\n day: {\n common: true,\n size: 86400000,\n steps: 30\n },\n week: {\n common: false,\n size: 604800000,\n steps: 4\n },\n month: {\n common: true,\n size: 2.628e9,\n steps: 12\n },\n quarter: {\n common: false,\n size: 7.884e9,\n steps: 4\n },\n year: {\n common: true,\n size: 3.154e10\n }\n};\nvar UNITS = Object.keys(INTERVALS);\n\nfunction sorter(a, b) {\n return a - b;\n}\n\nfunction _parse(scale, input) {\n if (isNullOrUndef(input)) {\n return null;\n }\n\n var adapter = scale._adapter;\n var _scale$_parseOpts = scale._parseOpts,\n parser = _scale$_parseOpts.parser,\n round = _scale$_parseOpts.round,\n isoWeekday = _scale$_parseOpts.isoWeekday;\n var value = input;\n\n if (typeof parser === 'function') {\n value = parser(value);\n }\n\n if (!isNumberFinite(value)) {\n value = typeof parser === 'string' ? adapter.parse(value, parser) : adapter.parse(value);\n }\n\n if (value === null) {\n return null;\n }\n\n if (round) {\n value = round === 'week' && (isNumber(isoWeekday) || isoWeekday === true) ? adapter.startOf(value, 'isoWeek', isoWeekday) : adapter.startOf(value, round);\n }\n\n return +value;\n}\n\nfunction determineUnitForAutoTicks(minUnit, min, max, capacity) {\n var ilen = UNITS.length;\n\n for (var i = UNITS.indexOf(minUnit); i < ilen - 1; ++i) {\n var interval = INTERVALS[UNITS[i]];\n var factor = interval.steps ? interval.steps : Number.MAX_SAFE_INTEGER;\n\n if (interval.common && Math.ceil((max - min) / (factor * interval.size)) <= capacity) {\n return UNITS[i];\n }\n }\n\n return UNITS[ilen - 1];\n}\n\nfunction determineUnitForFormatting(scale, numTicks, minUnit, min, max) {\n for (var i = UNITS.length - 1; i >= UNITS.indexOf(minUnit); i--) {\n var unit = UNITS[i];\n\n if (INTERVALS[unit].common && scale._adapter.diff(max, min, unit) >= numTicks - 1) {\n return unit;\n }\n }\n\n return UNITS[minUnit ? UNITS.indexOf(minUnit) : 0];\n}\n\nfunction determineMajorUnit(unit) {\n for (var i = UNITS.indexOf(unit) + 1, ilen = UNITS.length; i < ilen; ++i) {\n if (INTERVALS[UNITS[i]].common) {\n return UNITS[i];\n }\n }\n}\n\nfunction addTick(ticks, time, timestamps) {\n if (!timestamps) {\n ticks[time] = true;\n } else if (timestamps.length) {\n var _lookup2 = _lookup(timestamps, time),\n lo = _lookup2.lo,\n hi = _lookup2.hi;\n\n var timestamp = timestamps[lo] >= time ? timestamps[lo] : timestamps[hi];\n ticks[timestamp] = true;\n }\n}\n\nfunction setMajorTicks(scale, ticks, map, majorUnit) {\n var adapter = scale._adapter;\n var first = +adapter.startOf(ticks[0].value, majorUnit);\n var last = ticks[ticks.length - 1].value;\n var major, index;\n\n for (major = first; major <= last; major = +adapter.add(major, 1, majorUnit)) {\n index = map[major];\n\n if (index >= 0) {\n ticks[index].major = true;\n }\n }\n\n return ticks;\n}\n\nfunction ticksFromTimestamps(scale, values, majorUnit) {\n var ticks = [];\n var map = {};\n var ilen = values.length;\n var i, value;\n\n for (i = 0; i < ilen; ++i) {\n value = values[i];\n map[value] = i;\n ticks.push({\n value: value,\n major: false\n });\n }\n\n return ilen === 0 || !majorUnit ? ticks : setMajorTicks(scale, ticks, map, majorUnit);\n}\n\nvar TimeScale = /*#__PURE__*/function (_Scale4) {\n _inherits(TimeScale, _Scale4);\n\n var _super24 = _createSuper(TimeScale);\n\n function TimeScale(props) {\n var _this42;\n\n _classCallCheck(this, TimeScale);\n\n _this42 = _super24.call(this, props);\n _this42._cache = {\n data: [],\n labels: [],\n all: []\n };\n _this42._unit = 'day';\n _this42._majorUnit = undefined;\n _this42._offsets = {};\n _this42._normalized = false;\n _this42._parseOpts = undefined;\n return _this42;\n }\n\n _createClass(TimeScale, [{\n key: \"init\",\n value: function init(scaleOpts, opts) {\n var time = scaleOpts.time || (scaleOpts.time = {});\n var adapter = this._adapter = new adapters._date(scaleOpts.adapters.date);\n adapter.init(opts);\n mergeIf(time.displayFormats, adapter.formats());\n this._parseOpts = {\n parser: time.parser,\n round: time.round,\n isoWeekday: time.isoWeekday\n };\n\n _get(_getPrototypeOf(TimeScale.prototype), \"init\", this).call(this, scaleOpts);\n\n this._normalized = opts.normalized;\n }\n }, {\n key: \"parse\",\n value: function parse(raw, index) {\n if (raw === undefined) {\n return null;\n }\n\n return _parse(this, raw);\n }\n }, {\n key: \"beforeLayout\",\n value: function beforeLayout() {\n _get(_getPrototypeOf(TimeScale.prototype), \"beforeLayout\", this).call(this);\n\n this._cache = {\n data: [],\n labels: [],\n all: []\n };\n }\n }, {\n key: \"determineDataLimits\",\n value: function determineDataLimits() {\n var options = this.options;\n var adapter = this._adapter;\n var unit = options.time.unit || 'day';\n\n var _this$getUserBounds5 = this.getUserBounds(),\n min = _this$getUserBounds5.min,\n max = _this$getUserBounds5.max,\n minDefined = _this$getUserBounds5.minDefined,\n maxDefined = _this$getUserBounds5.maxDefined;\n\n function _applyBounds(bounds) {\n if (!minDefined && !isNaN(bounds.min)) {\n min = Math.min(min, bounds.min);\n }\n\n if (!maxDefined && !isNaN(bounds.max)) {\n max = Math.max(max, bounds.max);\n }\n }\n\n if (!minDefined || !maxDefined) {\n _applyBounds(this._getLabelBounds());\n\n if (options.bounds !== 'ticks' || options.ticks.source !== 'labels') {\n _applyBounds(this.getMinMax(false));\n }\n }\n\n min = isNumberFinite(min) && !isNaN(min) ? min : +adapter.startOf(Date.now(), unit);\n max = isNumberFinite(max) && !isNaN(max) ? max : +adapter.endOf(Date.now(), unit) + 1;\n this.min = Math.min(min, max - 1);\n this.max = Math.max(min + 1, max);\n }\n }, {\n key: \"_getLabelBounds\",\n value: function _getLabelBounds() {\n var arr = this.getLabelTimestamps();\n var min = Number.POSITIVE_INFINITY;\n var max = Number.NEGATIVE_INFINITY;\n\n if (arr.length) {\n min = arr[0];\n max = arr[arr.length - 1];\n }\n\n return {\n min: min,\n max: max\n };\n }\n }, {\n key: \"buildTicks\",\n value: function buildTicks() {\n var options = this.options;\n var timeOpts = options.time;\n var tickOpts = options.ticks;\n var timestamps = tickOpts.source === 'labels' ? this.getLabelTimestamps() : this._generate();\n\n if (options.bounds === 'ticks' && timestamps.length) {\n this.min = this._userMin || timestamps[0];\n this.max = this._userMax || timestamps[timestamps.length - 1];\n }\n\n var min = this.min;\n var max = this.max;\n\n var ticks = _filterBetween(timestamps, min, max);\n\n this._unit = timeOpts.unit || (tickOpts.autoSkip ? determineUnitForAutoTicks(timeOpts.minUnit, this.min, this.max, this._getLabelCapacity(min)) : determineUnitForFormatting(this, ticks.length, timeOpts.minUnit, this.min, this.max));\n this._majorUnit = !tickOpts.major.enabled || this._unit === 'year' ? undefined : determineMajorUnit(this._unit);\n this.initOffsets(timestamps);\n\n if (options.reverse) {\n ticks.reverse();\n }\n\n return ticksFromTimestamps(this, ticks, this._majorUnit);\n }\n }, {\n key: \"afterAutoSkip\",\n value: function afterAutoSkip() {\n if (this.options.offsetAfterAutoskip) {\n this.initOffsets(this.ticks.map(function (tick) {\n return +tick.value;\n }));\n }\n }\n }, {\n key: \"initOffsets\",\n value: function initOffsets(timestamps) {\n var start = 0;\n var end = 0;\n var first, last;\n\n if (this.options.offset && timestamps.length) {\n first = this.getDecimalForValue(timestamps[0]);\n\n if (timestamps.length === 1) {\n start = 1 - first;\n } else {\n start = (this.getDecimalForValue(timestamps[1]) - first) / 2;\n }\n\n last = this.getDecimalForValue(timestamps[timestamps.length - 1]);\n\n if (timestamps.length === 1) {\n end = last;\n } else {\n end = (last - this.getDecimalForValue(timestamps[timestamps.length - 2])) / 2;\n }\n }\n\n var limit = timestamps.length < 3 ? 0.5 : 0.25;\n start = _limitValue(start, 0, limit);\n end = _limitValue(end, 0, limit);\n this._offsets = {\n start: start,\n end: end,\n factor: 1 / (start + 1 + end)\n };\n }\n }, {\n key: \"_generate\",\n value: function _generate() {\n var adapter = this._adapter;\n var min = this.min;\n var max = this.max;\n var options = this.options;\n var timeOpts = options.time;\n var minor = timeOpts.unit || determineUnitForAutoTicks(timeOpts.minUnit, min, max, this._getLabelCapacity(min));\n var stepSize = valueOrDefault(timeOpts.stepSize, 1);\n var weekday = minor === 'week' ? timeOpts.isoWeekday : false;\n var hasWeekday = isNumber(weekday) || weekday === true;\n var ticks = {};\n var first = min;\n var time, count;\n\n if (hasWeekday) {\n first = +adapter.startOf(first, 'isoWeek', weekday);\n }\n\n first = +adapter.startOf(first, hasWeekday ? 'day' : minor);\n\n if (adapter.diff(max, min, minor) > 100000 * stepSize) {\n throw new Error(min + ' and ' + max + ' are too far apart with stepSize of ' + stepSize + ' ' + minor);\n }\n\n var timestamps = options.ticks.source === 'data' && this.getDataTimestamps();\n\n for (time = first, count = 0; time < max; time = +adapter.add(time, stepSize, minor), count++) {\n addTick(ticks, time, timestamps);\n }\n\n if (time === max || options.bounds === 'ticks' || count === 1) {\n addTick(ticks, time, timestamps);\n }\n\n return Object.keys(ticks).sort(function (a, b) {\n return a - b;\n }).map(function (x) {\n return +x;\n });\n }\n }, {\n key: \"getLabelForValue\",\n value: function getLabelForValue(value) {\n var adapter = this._adapter;\n var timeOpts = this.options.time;\n\n if (timeOpts.tooltipFormat) {\n return adapter.format(value, timeOpts.tooltipFormat);\n }\n\n return adapter.format(value, timeOpts.displayFormats.datetime);\n }\n }, {\n key: \"_tickFormatFunction\",\n value: function _tickFormatFunction(time, index, ticks, format) {\n var options = this.options;\n var formats = options.time.displayFormats;\n var unit = this._unit;\n var majorUnit = this._majorUnit;\n var minorFormat = unit && formats[unit];\n var majorFormat = majorUnit && formats[majorUnit];\n var tick = ticks[index];\n var major = majorUnit && majorFormat && tick && tick.major;\n\n var label = this._adapter.format(time, format || (major ? majorFormat : minorFormat));\n\n var formatter = options.ticks.callback;\n return formatter ? callback(formatter, [label, index, ticks], this) : label;\n }\n }, {\n key: \"generateTickLabels\",\n value: function generateTickLabels(ticks) {\n var i, ilen, tick;\n\n for (i = 0, ilen = ticks.length; i < ilen; ++i) {\n tick = ticks[i];\n tick.label = this._tickFormatFunction(tick.value, i, ticks);\n }\n }\n }, {\n key: \"getDecimalForValue\",\n value: function getDecimalForValue(value) {\n return value === null ? NaN : (value - this.min) / (this.max - this.min);\n }\n }, {\n key: \"getPixelForValue\",\n value: function getPixelForValue(value) {\n var offsets = this._offsets;\n var pos = this.getDecimalForValue(value);\n return this.getPixelForDecimal((offsets.start + pos) * offsets.factor);\n }\n }, {\n key: \"getValueForPixel\",\n value: function getValueForPixel(pixel) {\n var offsets = this._offsets;\n var pos = this.getDecimalForPixel(pixel) / offsets.factor - offsets.end;\n return this.min + pos * (this.max - this.min);\n }\n }, {\n key: \"_getLabelSize\",\n value: function _getLabelSize(label) {\n var ticksOpts = this.options.ticks;\n var tickLabelWidth = this.ctx.measureText(label).width;\n var angle = toRadians(this.isHorizontal() ? ticksOpts.maxRotation : ticksOpts.minRotation);\n var cosRotation = Math.cos(angle);\n var sinRotation = Math.sin(angle);\n\n var tickFontSize = this._resolveTickFontOptions(0).size;\n\n return {\n w: tickLabelWidth * cosRotation + tickFontSize * sinRotation,\n h: tickLabelWidth * sinRotation + tickFontSize * cosRotation\n };\n }\n }, {\n key: \"_getLabelCapacity\",\n value: function _getLabelCapacity(exampleTime) {\n var timeOpts = this.options.time;\n var displayFormats = timeOpts.displayFormats;\n var format = displayFormats[timeOpts.unit] || displayFormats.millisecond;\n\n var exampleLabel = this._tickFormatFunction(exampleTime, 0, ticksFromTimestamps(this, [exampleTime], this._majorUnit), format);\n\n var size = this._getLabelSize(exampleLabel);\n\n var capacity = Math.floor(this.isHorizontal() ? this.width / size.w : this.height / size.h) - 1;\n return capacity > 0 ? capacity : 1;\n }\n }, {\n key: \"getDataTimestamps\",\n value: function getDataTimestamps() {\n var timestamps = this._cache.data || [];\n var i, ilen;\n\n if (timestamps.length) {\n return timestamps;\n }\n\n var metas = this.getMatchingVisibleMetas();\n\n if (this._normalized && metas.length) {\n return this._cache.data = metas[0].controller.getAllParsedValues(this);\n }\n\n for (i = 0, ilen = metas.length; i < ilen; ++i) {\n timestamps = timestamps.concat(metas[i].controller.getAllParsedValues(this));\n }\n\n return this._cache.data = this.normalize(timestamps);\n }\n }, {\n key: \"getLabelTimestamps\",\n value: function getLabelTimestamps() {\n var timestamps = this._cache.labels || [];\n var i, ilen;\n\n if (timestamps.length) {\n return timestamps;\n }\n\n var labels = this.getLabels();\n\n for (i = 0, ilen = labels.length; i < ilen; ++i) {\n timestamps.push(_parse(this, labels[i]));\n }\n\n return this._cache.labels = this._normalized ? timestamps : this.normalize(timestamps);\n }\n }, {\n key: \"normalize\",\n value: function normalize(values) {\n return _arrayUnique(values.sort(sorter));\n }\n }]);\n\n return TimeScale;\n}(Scale);\n\nTimeScale.id = 'time';\nTimeScale.defaults = {\n bounds: 'data',\n adapters: {},\n time: {\n parser: false,\n unit: false,\n round: false,\n isoWeekday: false,\n minUnit: 'millisecond',\n displayFormats: {}\n },\n ticks: {\n source: 'auto',\n major: {\n enabled: false\n }\n }\n};\n\nfunction interpolate(table, val, reverse) {\n var lo = 0;\n var hi = table.length - 1;\n var prevSource, nextSource, prevTarget, nextTarget;\n\n if (reverse) {\n if (val >= table[lo].pos && val <= table[hi].pos) {\n var _lookupByKey2 = _lookupByKey(table, 'pos', val);\n\n lo = _lookupByKey2.lo;\n hi = _lookupByKey2.hi;\n }\n\n var _table$lo = table[lo];\n prevSource = _table$lo.pos;\n prevTarget = _table$lo.time;\n var _table$hi = table[hi];\n nextSource = _table$hi.pos;\n nextTarget = _table$hi.time;\n } else {\n if (val >= table[lo].time && val <= table[hi].time) {\n var _lookupByKey3 = _lookupByKey(table, 'time', val);\n\n lo = _lookupByKey3.lo;\n hi = _lookupByKey3.hi;\n }\n\n var _table$lo2 = table[lo];\n prevSource = _table$lo2.time;\n prevTarget = _table$lo2.pos;\n var _table$hi2 = table[hi];\n nextSource = _table$hi2.time;\n nextTarget = _table$hi2.pos;\n }\n\n var span = nextSource - prevSource;\n return span ? prevTarget + (nextTarget - prevTarget) * (val - prevSource) / span : prevTarget;\n}\n\nvar TimeSeriesScale = /*#__PURE__*/function (_TimeScale) {\n _inherits(TimeSeriesScale, _TimeScale);\n\n var _super25 = _createSuper(TimeSeriesScale);\n\n function TimeSeriesScale(props) {\n var _this43;\n\n _classCallCheck(this, TimeSeriesScale);\n\n _this43 = _super25.call(this, props);\n _this43._table = [];\n _this43._minPos = undefined;\n _this43._tableRange = undefined;\n return _this43;\n }\n\n _createClass(TimeSeriesScale, [{\n key: \"initOffsets\",\n value: function initOffsets() {\n var timestamps = this._getTimestampsForTable();\n\n var table = this._table = this.buildLookupTable(timestamps);\n this._minPos = interpolate(table, this.min);\n this._tableRange = interpolate(table, this.max) - this._minPos;\n\n _get(_getPrototypeOf(TimeSeriesScale.prototype), \"initOffsets\", this).call(this, timestamps);\n }\n }, {\n key: \"buildLookupTable\",\n value: function buildLookupTable(timestamps) {\n var min = this.min,\n max = this.max;\n var items = [];\n var table = [];\n var i, ilen, prev, curr, next;\n\n for (i = 0, ilen = timestamps.length; i < ilen; ++i) {\n curr = timestamps[i];\n\n if (curr >= min && curr <= max) {\n items.push(curr);\n }\n }\n\n if (items.length < 2) {\n return [{\n time: min,\n pos: 0\n }, {\n time: max,\n pos: 1\n }];\n }\n\n for (i = 0, ilen = items.length; i < ilen; ++i) {\n next = items[i + 1];\n prev = items[i - 1];\n curr = items[i];\n\n if (Math.round((next + prev) / 2) !== curr) {\n table.push({\n time: curr,\n pos: i / (ilen - 1)\n });\n }\n }\n\n return table;\n }\n }, {\n key: \"_getTimestampsForTable\",\n value: function _getTimestampsForTable() {\n var timestamps = this._cache.all || [];\n\n if (timestamps.length) {\n return timestamps;\n }\n\n var data = this.getDataTimestamps();\n var label = this.getLabelTimestamps();\n\n if (data.length && label.length) {\n timestamps = this.normalize(data.concat(label));\n } else {\n timestamps = data.length ? data : label;\n }\n\n timestamps = this._cache.all = timestamps;\n return timestamps;\n }\n }, {\n key: \"getDecimalForValue\",\n value: function getDecimalForValue(value) {\n return (interpolate(this._table, value) - this._minPos) / this._tableRange;\n }\n }, {\n key: \"getValueForPixel\",\n value: function getValueForPixel(pixel) {\n var offsets = this._offsets;\n var decimal = this.getDecimalForPixel(pixel) / offsets.factor - offsets.end;\n return interpolate(this._table, decimal * this._tableRange + this._minPos, true);\n }\n }]);\n\n return TimeSeriesScale;\n}(TimeScale);\n\nTimeSeriesScale.id = 'timeseries';\nTimeSeriesScale.defaults = TimeScale.defaults;\nvar scales = /*#__PURE__*/Object.freeze({\n __proto__: null,\n CategoryScale: CategoryScale,\n LinearScale: LinearScale,\n LogarithmicScale: LogarithmicScale,\n RadialLinearScale: RadialLinearScale,\n TimeScale: TimeScale,\n TimeSeriesScale: TimeSeriesScale\n});\nvar registerables = [controllers, elements, plugins, scales];\nexport { Animation, Animations, ArcElement, BarController, BarElement, BasePlatform, BasicPlatform, BubbleController, CategoryScale, Chart, DatasetController, plugin_decimation as Decimation, DomPlatform, DoughnutController, Element, index as Filler, Interaction, plugin_legend as Legend, LineController, LineElement, LinearScale, LogarithmicScale, PieController, PointElement, PolarAreaController, RadarController, RadialLinearScale, Scale, ScatterController, plugin_subtitle as SubTitle, Ticks, TimeScale, TimeSeriesScale, plugin_title as Title, plugin_tooltip as Tooltip, adapters as _adapters, _detectPlatform, animator, controllers, elements, layouts, plugins, registerables, registry, scales };"],"names":["ownKeys","object","enumerableOnly","keys","Object","getOwnPropertySymbols","symbols","filter","sym","getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","target","i","arguments","length","source","forEach","key","getOwnPropertyDescriptors","defineProperties","defineProperty","_createSuper","Derived","hasNativeReflectConstruct","Reflect","construct","sham","Proxy","Boolean","prototype","valueOf","call","e","_isNativeReflectConstruct","result","Super","NewTarget","this","constructor","_createForOfIteratorHelper","o","allowArrayLike","it","Symbol","iterator","Array","isArray","minLen","_arrayLikeToArray","n","toString","slice","name","from","test","_unsupportedIterableToArray","F","s","done","value","_e","f","TypeError","err","normalCompletion","didErr","step","next","_e2","return","arr","len","arr2","Animator","_request","_charts","Map","_running","_lastDate","undefined","chart","anims","date","type","callbacks","listeners","numSteps","duration","fn","initial","currentStep","Math","min","start","_this","r","window","_update","_refresh","_this2","Date","now","remaining","running","items","item","draw","_active","_total","tick","pop","_notify","charts","get","complete","progress","set","event","cb","_getAnims","_this$_getAnims$items","reduce","acc","cur","max","_duration","cancel","delete","animator","transparent","interpolators","boolean","to","factor","color","c0","c1","valid","mix","hexString","number","Animation","cfg","prop","currentValue","_fn","_easing","easing","_start","floor","delay","_loop","loop","_target","_prop","_from","_to","_promises","elapsed","remain","promises","Promise","res","rej","resolved","method","d","animationOptions","_fallback","_indexable","_scriptable","colors","properties","numbers","active","animation","resize","show","animations","visible","hide","v","Animations","config","_chart","_properties","configure","animatedProps","getOwnPropertyNames","_step","_iterator","option","has","values","newOptions","options","$shared","assign","$animations","resolveTargetOptions","_createAnimations","anim","wait","all","awaitAll","then","props","charAt","update","_animateOptions","size","add","scaleClip","scale","allowedOverflow","opts","reverse","end","getSortedDatasetIndices","filterVisible","ilen","metasets","_getSortedDatasetMetas","index","_applyStack","stack","dsIndex","datasetIndex","otherValue","singleMode","mode","isStacked","meta","stacked","getOrCreateStack","stacks","stackKey","indexValue","subStack","getLastIndexInStack","vScale","positive","_step2","_iterator2","getMatchingVisibleMetas","updateStacks","controller","parsed","_cachedMeta","_stacks","iScale","iAxis","axis","vAxis","indexScale","valueScale","concat","id","getStackKey","_index","_top","_bottom","getFirstScaleId","scales","shift","clearStacks","_step3","_iterator3","_parsed","isDirectUpdateMode","cloneIfNotShared","cached","shared","DatasetController","_ctx","ctx","_cachedDataOpts","getMeta","_type","_parsing","_data","_objectData","_sharedOptions","_drawStart","_drawCount","enableOptionSharing","supportsDecimation","$context","_syncList","initialize","linkScales","_stacked","addElements","dataset","getDataset","chooseId","x","y","xid","xAxisID","yid","yAxisID","rid","rAxisID","indexAxis","iid","iAxisID","vid","vAxisID","xScale","getScaleForId","yScale","rScale","data","datasets","getDatasetMeta","scaleID","u","adata","convertObjectDataToArray","isExtensible","l","_dataCheck","datasetElementType","resetNewElements","stackChanged","oldStacked","_resyncElements","scopeKeys","datasetScopeKeys","scopes","getOptionScopes","createResolver","getContext","parsing","count","sorted","_sorted","prev","parseArrayData","parseObjectData","parsePrimitiveData","labels","getLabels","singleScale","_parsed$i","parse","_this$_parsing","_this$_parsing$xAxisK","xAxisKey","_this$_parsing$yAxisK","yAxisKey","range","parsedValue","NaN","canStack","otherScale","_getOtherScale","hidden","createStack","Number","POSITIVE_INFINITY","NEGATIVE_INFINITY","_getUserBounds","_scale$getUserBounds","getUserBounds","minDefined","maxDefined","otherMin","otherMax","_skip","updateRangeFromParsed","getParsed","label","getLabelForValue","t","b","_clip","clip","top","right","bottom","left","defaultClip","getMaxOverflow","disabled","elements","area","chartArea","drawActiveElementsOnTop","element","resolveDatasetElementOptions","resolveDataElementOptions","context","parent","dataIndex","raw","createDataContext","createDatasetContext","_resolveElementOptions","dataElementType","elementType","_this3","cache","cacheKey","sharing","datasetElementScopeKeys","prefixes","names","resolveNamedOptions","freeze","transition","datasetAnimationScopeKeys","_cacheable","sharedOptions","_animationsDisabled","firstOpts","previouslySharedOptions","getSharedOptions","includeOptions","updateSharedOptions","_resolveAnimations","getStyle","_setStyle","_step4","_iterator4","_step4$value","arg1","arg2","numMeta","numData","_insertElements","_removeElements","move","updateElements","removed","splice","args","_args2","_dataChanges","_sync","newCount","computeMinSampleSize","curr","_cache","$bar","visibleMetas","getAllParsedValues","_","sort","a","getAllScaleValues","_length","updateMinAndPrev","abs","getPixelForValue","ticks","getPixelForTick","parseValue","entry","startValue","endValue","barStart","barEnd","_custom","parseFloatBar","parseArrayOrPrimitive","isFloatBar","custom","setBorderSkipped","edge","borderSkipped","_borderProps","horizontal","base","borderProps","enableBorderRadius","parseEdge","orig","v1","v2","startEnd","setInflateAmount","_ref","ratio","inflateAmount","defaults","BarController","_DatasetController","_super","obj","_this$_parsing2","_this$_parsing2$xAxis","_this$_parsing2$yAxis","iAxisKey","vAxisKey","bars","reset","getBasePixel","isHorizontal","ruler","_getRuler","_this$_getSharedOptio","_getSharedOptions","vpixels","head","_calculateBarValuePixels","ipixels","_calculateBarIndexPixels","center","height","width","updateElement","last","_step5","grouped","skipNull","val","isNaN","_iterator5","indexOf","_getStacks","pixels","barThickness","_startPixel","_endPixel","stackCount","_getStackCount","categoryPercentage","barPercentage","_this$_cachedMeta","_this$options","baseValue","minBarLength","actualBase","floating","applyStack","getDataVisibility","barSign","startPixel","getPixelForDecimal","endPixel","halfGrid","getLineWidthForValue","maxBarThickness","Infinity","percent","chunk","computeFlexCategoryTraits","thickness","computeFitCategoryTraits","stackIndex","_getStackIndex","rects","overrides","_index_","offset","grid","_value_","beginAtZero","BubbleController","_DatasetController2","_super2","radius","points","_this$_cachedMeta2","_this$_getSharedOptio2","point","iPixel","vPixel","skip","plugins","tooltip","title","DoughnutController","_DatasetController3","_super3","_this4","innerRadius","outerRadius","offsetX","offsetY","getter","_this$_parsing$key","rotation","circumference","T","isDatasetVisible","_getRotation","_getCircumference","arcs","spacing","getMaxBorderWidth","getMaxOffset","maxSize","cutout","chartWeight","_getRingWeight","_this$_getRotationExt","_getRotationExtents","_getRatioAndOffset","ratioX","ratioY","startAngle","endAngle","startX","cos","startY","sin","endX","endY","calcMax","angle","calcMin","maxX","maxY","H","minX","P","minY","getRatioAndOffset","maxWidth","maxHeight","maxRadius","radiusLength","_getVisibleDatasetWeightTotal","total","calculateTotal","_getRingWeightOffset","animateRotate","calculateCircumference","animationOpts","centerX","centerY","animateScale","_this$_getSharedOptio3","_circumference","arc","metaData","locale","borderAlign","borderWidth","hoverBorderWidth","hoverOffset","ringWeightOffset","weight","descriptors","aspectRatio","legend","generateLabels","pointStyle","map","style","text","fillStyle","backgroundColor","strokeStyle","borderColor","lineWidth","onClick","legendItem","toggleDataVisibility","tooltipItem","dataLabel","formattedValue","LineController","_DatasetController4","_super4","line","_meta$data","_dataset","animationsDisabled","_getStartAndCountOfVi","_datasetIndex","_decimated","showLine","segment","animated","_this$_cachedMeta3","_this$_getSharedOptio4","_this$options2","spanGaps","maxGapLength","directUpdate","prevParsed","nullData","stop","border","firstPoint","lastPoint","updateControlPoints","PolarAreaController","_DatasetController5","_super5","_this5","_updateRadius","_this6","minSize","cutoutPercentage","getVisibleDatasetCount","xCenter","yCenter","datasetStartAngle","getIndexAngle","defaultAngle","countVisibleElements","_computeAngle","getDistanceFromCenterForValue","_this7","angleLines","display","circular","pointLabels","PieController","_DoughnutController","_super6","RadarController","_DatasetController6","_super7","_fullLoop","pointPosition","getPointPositionForValue","fill","Element","useFinalPosition","_this$getProps","getProps","final","_this8","ret","defaultRoutes","formatters","numeric","tickValue","notation","delta","maxTick","calculateDelta","logDelta","numDecimal","minimumFractionDigits","maximumFractionDigits","format","logarithmic","pow","Ticks","autoSkip","tickOpts","ticksLimit","maxTicksLimit","tickLength","_tickSize","maxScale","maxChart","_maxLength","determineMaxTicks","majorIndices","major","enabled","getMajorIndices","numMajorIndices","first","newTicks","ceil","skipMajors","evenMajorSpacing","diff","getEvenSpacing","factors","calculateSpacing","avgMajorSpacing","round","majorStart","majorEnd","bounds","grace","drawBorder","drawOnChartArea","drawTicks","tickWidth","tickColor","borderDash","borderDashOffset","padding","minRotation","maxRotation","mirror","textStrokeWidth","textStrokeColor","autoSkipPadding","labelOffset","callback","minor","align","crossAlign","showLabelBackdrop","backdropColor","backdropPadding","startsWith","offsetFromEdge","sample","numItems","increment","getPixelForGridLine","offsetGridLines","validIndex","epsilon","lineValue","getTickMarkLength","getTitleHeight","fallback","font","lineHeight","titleAlign","position","reverseAlign","Scale","_Element","_super8","_this9","_margins","paddingTop","paddingBottom","paddingLeft","paddingRight","labelRotation","_range","_gridLineItems","_labelItems","_labelSizes","_longestTextCache","_reversePixels","_userMax","_userMin","_suggestedMax","_suggestedMin","_ticksLength","_borderValue","_dataLimitsCached","setContext","suggestedMin","suggestedMax","_this$getUserBounds","metas","getMinMax","xLabels","yLabels","beforeUpdate","margins","_this$options3","sampleSize","beforeSetDimensions","setDimensions","afterSetDimensions","beforeDataLimits","determineDataLimits","afterDataLimits","beforeBuildTicks","buildTicks","afterBuildTicks","samplingEnabled","_convertTicksToLabels","beforeCalculateLabelRotation","calculateLabelRotation","afterCalculateLabelRotation","afterAutoSkip","beforeFit","fit","afterFit","afterUpdate","reversePixels","_alignToPixels","alignToPixels","notifyPlugins","_callHooks","beforeTickToLabelConversion","afterTickToLabelConversion","maxLabelDiagonal","numTicks","_isVisible","labelSizes","_getLabelSizes","maxLabelWidth","widest","maxLabelHeight","highest","sqrt","asin","_this$options4","titleOpts","gridOpts","titleHeight","_this$_getLabelSizes","tickPadding","angleRadians","labelHeight","labelWidth","_calculatePadding","_handleMargins","_this$options5","_this$options5$ticks","isRotated","labelsBelowTicks","offsetLeft","offsetRight","_this$options6","fullSize","generateTickLabels","_computeLabelSizes","j","jlen","tickFont","fontString","nestedLabel","caches","widths","heights","widestLabelSize","highestLabelSize","_resolveTickFontOptions","string","gc","gcLen","garbageCollect","valueAt","idx","pixel","decimal","getBaseValue","createTickContext","optionTicks","rot","w","h","borderValue","alignedLineValue","tx1","ty1","tx2","ty2","x1","y1","x2","y2","ticksLength","tl","borderOpts","axisWidth","axisHalfWidth","alignBorderValue","positionAxisID","_positionAxisID2","_value2","limit","optsAtIndex","lineColor","tickBorderDash","tickBorderDashOffset","textAlign","lineCount","textOffset","tickAndPadding","hTickAndPadding","textBaseline","_getXAxisLabelAlignment","_getYAxisLabelAlignment","_ret","_positionAxisID3","_value3","halfCount","strokeColor","strokeWidth","tickTextAlign","backdrop","labelPadding","translation","_this$options7","_this$options8","_this$options8$ticks","save","fillRect","restore","findIndex","_computeGridLineItems","drawLine","p1","p2","setLineDash","lineDashOffset","beginPath","moveTo","lineTo","stroke","lastLineWidth","_computeLabelArea","_computeLabelItems","_this$options9","_titleArgs","titleX","titleY","_positionAxisID","_value","titleArgs","drawBackground","drawGrid","drawTitle","drawLabels","_this10","tz","z","gz","getSortedVisibleDatasetMetas","axisID","fontSize","TypedRegistry","scope","override","create","isPrototypeOf","parentScope","proto","getPrototypeOf","isIChartComponent","register","Error","itemDefaults","routes","property","propertyParts","split","sourceName","sourceScope","join","parts","targetName","targetScope","routeDefaults","registerDefaults","Registry","controllers","_typedRegistries","_len","_key","_each","_len2","_key2","_len3","_key3","_len4","_key4","_len5","_key5","_len6","_key6","_get","_len7","_key7","_len8","_key8","_len9","_key9","_len10","_key10","typedRegistry","_this11","arg","reg","_getRegistryForType","isForType","_exec","itemReg","registry","component","camelMethod","ScatterController","_DatasetController7","_super9","_meta$data2","_getStartAndCountOfVi2","getElement","_this$_cachedMeta4","_this$options10","interaction","__proto__","abstract","DateAdapter","chartOptions","timestamp","_format","amount","unit","weekday","members","adapters","_date","binarySearch","metaset","intersect","lookupMethod","el","getRange","lo","hi","evaluateInteractionItems","handler","_metasets$i","_index2","_binarySearch","getIntersectItems","includeInvisible","isPointInArea","inRange","getNearestCartesianItems","distanceMetric","useX","useY","pt1","pt2","deltaX","deltaY","getDistanceMetricForAxis","minDistance","getCenterPoint","distance","getNearestItems","_element$getProps","getNearestRadialItems","getAxisItems","rangeMethod","intersectsItem","Interaction","modes","nearest","STATIC_POSITIONS","filterByPosition","array","pos","filterDynamicPositionByAxis","box","sortByWeight","v0","setLayoutDims","layouts","params","layout","_step6","_iterator6","wrap","stackWeight","includes","_stack","placed","buildStacks","vBoxMaxWidth","hBoxMaxHeight","availableWidth","availableHeight","getCombinedMax","maxPadding","updateMaxPadding","boxPadding","updateDims","getPadding","newWidth","outerWidth","newHeight","outerHeight","widthChanged","heightChanged","same","other","getMargins","marginForPositions","positions","margin","fitBoxes","boxes","refit","changed","refitBoxes","_updateDims","setBoxDims","placeBoxes","_step7","userPadding","_iterator7","_height","_width","autoPadding","_layers","layoutItem","minPadding","layoutBoxes","_box","_box$options","_box$options$stackWei","wrapBoxes","centerHorizontal","centerVertical","leftAndTop","rightAndBottom","vertical","buildLayoutBoxes","verticalBoxes","horizontalBoxes","beforeLayout","visibleVerticalBoxCount","updatePos","change","handleMaxPadding","BasePlatform","canvas","listener","BasicPlatform","_BasePlatform","_super10","EVENT_TYPES","touchstart","touchmove","touchend","pointerenter","pointerdown","pointermove","pointerup","pointerleave","pointerout","isNullOrEmpty","eventListenerOptions","passive","removeListener","removeEventListener","nodeListContains","nodeList","_step8","_iterator8","node","contains","createAttachObserver","observer","MutationObserver","entries","_step9","trigger","_iterator9","addedNodes","removedNodes","observe","document","childList","subtree","createDetachObserver","_step10","_iterator10","drpListeningCharts","oldDevicePixelRatio","onWindowResize","dpr","devicePixelRatio","currentDevicePixelRatio","createResizeObserver","container","clientWidth","ResizeObserver","contentRect","addEventListener","listenDevicePixelRatioChanges","releaseObserver","disconnect","unlistenDevicePixelRatioChanges","createProxyAndListen","proxy","_getRelativePosition","native","fromNativeEvent","addListener","DomPlatform","_BasePlatform2","_super11","renderHeight","getAttribute","renderWidth","boxSizing","displayWidth","displayHeight","initCanvas","removeAttribute","setAttribute","proxies","$proxies","attach","detach","isConnected","PluginService","_init","hook","_createDescriptors","_descriptors","_step11","_iterator11","descriptor","plugin","cancelable","_oldCache","_notifyStateChanges","localIds","getPlugin","local","_i","allPlugins","_ref2","_step12","_iterator12","getOpts","pluginOpts","createDescriptors","previousDescriptors","some","_ref3","pluginScopeKeys","scriptable","indexable","allKeys","getIndexAxis","datasetDefaults","determineAxis","scaleOptions","toLowerCase","initOptions","chartDefaults","configScales","chartIndexAxis","firstIDs","scaleConf","console","error","_proxy","warn","defaultId","getDefaultScaleIDFromAxis","defaultScaleOptions","defaultID","getAxisFromDefaultScaleID","mergeScaleConfig","initData","keyCache","keysCached","Set","cachedKeys","generate","addIfFound","Config","_config","initConfig","_scopeCache","_resolverCache","platform","clearCache","clear","datasetType","additionalOptionScopes","mainScope","resetCache","keyLists","_cachedScopes","_getResolver","getResolver","resolver","subPrefixes","needContext","subResolver","_step13","_iterator13","descriptorDefaults","_getResolver2","resolverCache","p","hasFunction","_step14","_descriptors2","isScriptable","isIndexable","_iterator14","KNOWN_POSITIONS","positionIsHorizontal","compare2Level","l1","l2","onAnimationsComplete","onComplete","onAnimationProgress","onProgress","getCanvas","getElementById","instances","getChart","c","moveNumericKeys","_i2","_keys","intKey","Chart","userConfig","_this12","initialCanvas","existingChart","chartOptionScopes","OffscreenCanvas","_detectPlatform","updateConfig","acquireContext","_options","_aspectRatio","_metasets","_lastEvent","_listeners","_responsiveListeners","_sortedMetasets","_plugins","_hiddenIndices","attached","_doResize","resizeDelay","listen","_initialize","_this$options11","maintainAspectRatio","responsive","bindEvents","_resizeBeforeDraw","_resize","newSize","getMaximumSize","newRatio","getDevicePixelRatio","onResize","render","scalesOptions","axisOptions","_this13","scaleOpts","updated","isRadial","dposition","dtype","scaleType","getScale","init","hasUpdated","_destroyDatasetMeta","_this14","newControllers","_removeUnreferencedMetasets","order","updateIndex","ControllerClass","getController","_defaults$datasets$ty","_updateMetasets","_this15","_resetElements","animsDisabled","_updateScales","_checkEventBindings","_updateHiddenIndices","invalidate","buildOrUpdateControllers","buildOrUpdateElements","_minPadding","_updateLayout","_updateDatasets","_eventHandler","_updateHoverStyles","_this16","ensureScalesHaveIDs","buildOrUpdateScales","existingEvents","newEvents","events","unbindEvents","_step15","_iterator15","_getUniformDataChanges","_step15$value","datasetCount","makeSet","changeSet","_this17","noArea","_this17$_layers","_idx","_i3","_ilen","_updateDataset","_this$_resizeBeforeDr","layers","_drawDatasets","_drawDataset","useClip","setDatasetVisibility","_updateVisibility","_destroy","remove","_stop","releaseContext","_this$canvas","toDataURL","bindUserEvents","bindResponsiveEvents","_this18","_add","_this19","detached","_remove","isAttached","_this20","prefix","activeElements","_this21","lastActive","_ref4","notify","replay","hoverOptions","hover","deactivated","activated","updateHoverStyle","_this22","inChartArea","eventFilter","_handleEvent","_this$_active","_getActiveElements","isClick","lastEvent","determineLastEvent","onHover","getElementsAtEventForMode","invalidatePlugins","clipArc","pixelMargin","angleMargin","closePath","parseBorderRadius$1","angleDelta","borderRadius","halfThickness","innerLimit","computeOuterLimit","outerArcLimit","outerStart","outerEnd","innerStart","innerEnd","rThetaToXY","theta","pathArc","innerR","spacingOffset","alpha","avNogSpacingRadius","angleOffset","_parseBorderRadius$","outerStartAdjustedRadius","outerEndAdjustedRadius","outerStartAdjustedAngle","outerEndAdjustedAngle","innerStartAdjustedRadius","innerEndAdjustedRadius","innerStartAdjustedAngle","innerEndAdjustedAngle","pCenter","p4","_pCenter","PI","_pCenter2","p8","_pCenter3","outerStartX","outerStartY","outerEndX","outerEndY","borderJoinStyle","inner","lineJoin","fullCircles","drawFullCircleBorders","version","unregister","ArcElement","_Element2","_super12","_this23","chartX","chartY","_getAngleFromPoint2","_this$getProps2","rAdjust","betweenAngles","withinRadius","_this$getProps3","_this$options12","halfAngle","halfRadius","radiusOffset","translate","drawArc","setStyle","lineCap","borderCapStyle","previous","pathVars","_params$start","paramsStart","_params$end","paramsEnd","segmentStart","segmentEnd","outside","pathSegment","_pathVars","lineMethod","stepped","tension","cubicInterpolationMode","getLineMethod","_ref5","_ref5$move","fastPathSegment","prevX","lastY","_pathVars2","_ref6","_ref6$move","avgX","countX","pointIndex","drawX","truncX","_getSegmentMethod","usePath2D","Path2D","_draw","path","_path","strokePathWithCache","_step16","segments","segmentMethod","_iterator16","strokePathDirect","LineElement","_Element3","_super13","_this24","_points","_segments","_pointsUpdated","_interpolate","_getInterpolationMethod","_segments$i","interpolated","_step17","_iterator17","inRange$1","hitRadius","capBezierPoints","PointElement","_Element4","_super14","_this25","mouseX","mouseY","_this$getProps4","_this$getProps5","hoverRadius","getBarBounds","bar","half","_bar$getProps","skipOrLimit","boundingRects","maxW","maxH","parseBorderWidth","maxR","enableBorder","topLeft","topRight","bottomLeft","bottomRight","parseBorderRadius","outer","_inRange","skipX","skipY","addNormalRectPath","rect","inflateRect","refRect","BarElement","_Element5","_super15","_this26","_this$options13","_boundingRects","addRectPath","_this$getProps6","cleanDecimatedDataset","cleanDecimatedData","plugin_decimation","algorithm","beforeElementsUpdate","xAxis","_getStartAndCountOfVi3","pointCount","_iScale$getUserBounds","getStartAndCountOfVisiblePointsSimplified","threshold","decimated","configurable","samples","maxAreaPoint","maxArea","nextA","bucketWidth","sampledIndex","endIndex","avgY","avgRangeStart","avgRangeEnd","avgRangeLength","rangeOffs","rangeTo","_data$a","pointAx","pointAy","lttbDecimation","minIndex","maxIndex","startIndex","xMin","dx","lastIndex","intermediateIndex1","intermediateIndex2","minMaxDecimation","destroy","_getBounds","_findSegmentEnd","_getEdge","_createBoundaryLine","boundary","_ref7","_ref7$x","_ref7$y","linePoints","_ref8","_pointsFromSegments","_shouldApplyFill","_resolveTarget","sources","propagate","visited","_decodeFill","fillOption","parseFillOption","parseFloat","firstCh","decodeTargetIndex","addPointsBelow","sourcePoint","linesBelow","postponed","_findPoint","findPoint","unshift","interpolate","pointValue","firstValue","lastValue","simpleArc","_getTarget","getLineByIndex","sourcePoints","below","getLinesBelow","_buildStackLine","_getTargetValue","computeCircularBoundary","_source$scale","_getTargetPixel","computeLinearBoundary","computeBoundary","_drawfill","lineOpts","_ref9","_ref9$above","above","_ref9$below","clipVertical","doFill","clipY","lineLoop","_step21","_iterator21","_step22","_step18","tpoints","_iterator18","_step19","_iterator19","_step20","tgt","subBounds","_iterator20","fillSource","_iterator22","_step22$value","src","_src$style","_src$style$background","notShape","clipBounds","interpolatedLineTo","targetLoop","_scale$chart$chartAre","_ref10","interpolatedPoint","afterDatasetsUpdate","_args","$filler","beforeDraw","drawTime","beforeDatasetsDraw","beforeDatasetDraw","getBoxSize","labelOpts","_labelOpts$boxHeight","boxHeight","_labelOpts$boxWidth","boxWidth","usePointStyle","pointStyleWidth","itemHeight","Legend","_Element6","_super16","_this27","_added","legendHitBoxes","_hoveredItem","doughnutMode","legendItems","columnSizes","lineWidths","buildLabels","_this28","labelFont","_computeTitleHeight","_getBoxSize","_fitRows","_fitCols","hitboxes","totalHeight","row","itemWidth","measureText","heightLimit","totalWidth","currentColWidth","currentColHeight","col","_this$options14","rtl","rtlHelper","_step23","_iterator23","hitbox","leftForLtr","_step24","_iterator24","_hitbox","cursor","_this29","defaultColor","fontColor","halfFontSize","_getBoxSize2","textDirection","textWidth","setWidth","lineDash","drawOptions","SQRT2","xPlus","yBoxTop","xBoxLeft","drawLegendBox","strikethrough","fillText","titleFont","titlePadding","topPaddingPlusHalfFontSize","hitBox","lh","onLeave","isListened","hoveredItem","_getLegendItemAt","sameItem","plugin_legend","_element","adjustHitBoxes","afterEvent","handleEvent","ci","_chart$legend$options","Title","_Element7","_super17","_this30","_padding","textSize","fontOpts","_this$_drawArgs","_drawArgs","plugin_title","titleBlock","createTitle","WeakMap","plugin_subtitle","positioners","average","hasValue","tooltipPosition","eventPosition","nearestElement","tp","pushOrConcat","toPush","splitNewlines","str","String","createTooltipItem","_controller$getLabelA","getLabelAndValue","getTooltipSize","body","footer","bodyFont","footerFont","titleLineCount","footerLineCount","bodyLineItemCount","combinedBodyLength","bodyItem","before","lines","after","beforeBody","afterBody","titleSpacing","titleMarginBottom","displayColors","bodySpacing","footerMarginTop","footerSpacing","widthPadding","maxLineWidth","determineXAlign","yAlign","chartWidth","_chart$chartArea","xAlign","caret","caretSize","caretPadding","doesNotFitWithAlign","determineAlignment","determineYAlign","getBackgroundPoint","alignment","cornerRadius","paddingAndSize","_toTRBLCorners","alignX","alignY","getAlignedX","getBeforeAfterBodyLines","overrideCallbacks","Tooltip","_Element8","_super18","_this31","opacity","_eventPosition","_size","_cachedAnimations","_tooltipItems","dataPoints","caretX","caretY","labelColors","labelPointStyles","labelTextColors","tooltipItems","beforeTitle","afterTitle","_this32","bodyItems","scoped","beforeLabel","afterLabel","beforeFooter","afterFooter","_this33","itemSort","labelColor","labelPointStyle","labelTextColor","_createItems","getTitle","getBeforeBody","getBody","getAfterBody","getFooter","positionAndSize","backgroundPoint","external","tooltipPoint","caretPosition","getCaretPosition","x3","y3","_toTRBLCorners2","ptX","ptY","pt","titleColor","colorX","rtlColorX","yOffSet","colorY","multiKeyBackground","outerX","innerX","strokeRect","textColor","bodyAlign","bodyLineHeight","xLinePadding","fillLineOfText","bodyAlignForCalculation","bodyColor","_drawColorBox","footerAlign","footerColor","tooltipSize","_toTRBLCorners3","drawCaret","quadraticCurveTo","animX","animY","_updateAnimationTarget","hasTooltipContent","globalAlpha","drawBody","drawFooter","_this34","_ref11","positionChanged","_positionChanged","_ignoreReplayEvents","plugin_tooltip","afterInit","afterDraw","_willRender","labelCount","Decimation","Filler","SubTitle","findOrAddLabel","addedLabels","addIfString","lastIndexOf","CategoryScale","_Scale","_super19","_this35","_startValue","_valueRange","_addedLabels","added","_step25","_iterator25","_step25$value","_index3","isFinite","_this$getUserBounds2","_this$getMinMax","getDecimalForPixel","relativeLabelSize","minSpacing","_ref12","rad","LinearScaleBase","_Scale2","_super20","_this36","_endValue","_this$getUserBounds3","setMin","setMax","minSign","maxSign","MAX_SAFE_INTEGER","MIN_SAFE_INTEGER","maxTicks","stepSize","computeTickLimit","getTickLimit","generationOptions","dataRange","niceMin","niceMax","numSpaces","precision","maxDigits","includeBounds","maxSpaces","rmin","rmax","countDefined","decimalPlaces","generateTicks$1","_maxDigits","LinearScale","_LinearScaleBase","_super21","_this$getMinMax2","handleTickRangeOptions","isMajor","tickVal","LogarithmicScale","_Scale3","_super22","_this37","_zero","_this$getMinMax3","_this$getUserBounds4","exp","m","endExp","endSignificand","significand","lastTick","generateTicks","getTickBackdropHeight","determineLimits","fitWithPointLabels","limits","valueCount","_pointLabels","pointLabelOpts","additionalAngle","centerPointLabels","getPointLabelContext","getPointPosition","drawingArea","plFont","updateLimits","setCenterPoint","_pointLabelItems","extra","outerDistance","pointLabelPosition","yForAngle","getTextAlignForAngle","leftForTextAlign","buildPointLabelItems","hLimits","vLimits","pathRadiusLine","RadialLinearScale","_LinearScaleBase2","_super23","_this38","_this$getMinMax4","_this39","leftMovement","rightMovement","topMovement","bottomMovement","angleMultiplier","scalingFactor","scaledDistance","pointLabel","createPointLabelContext","distanceFromCenter","_this$_pointLabelItem","_this$options15","_this40","_scale$_pointLabelIte","backdropLeft","backdropTop","backdropWidth","backdropHeight","drawPointLabels","gridLineOpts","drawRadiusLine","_this41","rotate","animate","INTERVALS","millisecond","common","steps","second","minute","hour","day","week","month","quarter","year","UNITS","sorter","_parse","input","adapter","_adapter","_scale$_parseOpts","_parseOpts","parser","isoWeekday","startOf","determineUnitForAutoTicks","minUnit","capacity","interval","addTick","time","timestamps","_lookup2","ticksFromTimestamps","majorUnit","setMajorTicks","TimeScale","_Scale4","_super24","_this42","_unit","_majorUnit","_offsets","_normalized","displayFormats","formats","normalized","_this$getUserBounds5","_applyBounds","_getLabelBounds","endOf","getLabelTimestamps","timeOpts","_generate","_getLabelCapacity","determineUnitForFormatting","determineMajorUnit","initOffsets","offsetAfterAutoskip","getDecimalForValue","hasWeekday","getDataTimestamps","tooltipFormat","datetime","minorFormat","majorFormat","formatter","_tickFormatFunction","offsets","ticksOpts","tickLabelWidth","cosRotation","sinRotation","tickFontSize","exampleTime","exampleLabel","_getLabelSize","normalize","table","prevSource","nextSource","prevTarget","nextTarget","_lookupByKey2","_table$lo","_table$hi","_lookupByKey3","_table$lo2","_table$hi2","span","TimeSeriesScale","_TimeScale","_super25","_this43","_table","_minPos","_tableRange","_getTimestampsForTable","buildLookupTable","registerables"],"sourceRoot":""}