diff --git "a/dist/distill.bundle.js.map" "b/dist/distill.bundle.js.map" --- "a/dist/distill.bundle.js.map" +++ "b/dist/distill.bundle.js.map" @@ -1 +1 @@ -{"version":3,"file":"distill.bundle.js","mappings":"msJAC+CA,EAE5C,WAAc,aAgBf,IAAMC,EAAO,CAAC,SAAU,SAAU,UAAW,YAAa,WAAY,SAAU,YAC1EC,EAAS,CAAC,OAAQ,OAAQ,QAAS,QAAS,MAAO,OAAQ,OAAQ,OAAQ,QAAS,OAAQ,OAAQ,QACpGC,EAAU,SAAAC,GAAC,OAAIA,EAAI,GAAK,IAAMA,EAAIA,CAAC,EAEnCC,EAAM,SAASC,GACnB,IAAMC,EAAMN,EAAKK,EAAKE,UAAUC,UAAU,EAAG,GACvCC,EAAaP,EAAQG,EAAKK,WAC1BC,EAAQV,EAAOI,EAAKO,YAAYJ,UAAU,EAAE,GAC5CK,EAAOR,EAAKS,cAAcC,WAC1BC,EAAQX,EAAKY,cAAcF,WAC3BG,EAAUb,EAAKc,gBAAgBJ,WAC/BK,EAAUf,EAAKgB,gBAAgBN,WACrC,MAAO,GAAPO,OAAUhB,EAAG,MAAAgB,OAAKb,EAAU,KAAAa,OAAIX,EAAK,KAAAW,OAAIT,EAAI,KAAAS,OAAIN,EAAK,KAAAM,OAAIJ,EAAO,KAAAI,OAAIF,EAAO,KAC9E,EAmBMG,EAAM,WAiBV,OAAAC,GARA,SAAAD,EAAYE,GAAQC,EAAA,KAAAH,GAClBI,KAAKC,KAAOH,EAAOI,OACnBF,KAAKG,YAAcL,EAAOM,UAC1BJ,KAAKK,YAAcP,EAAOO,YAC1BL,KAAKM,eAAiBR,EAAOQ,eAC7BN,KAAKO,aAAeT,EAAOS,cAAgB,EAC7C,GAEA,EAAAC,IAAA,YAAAC,IACA,WACE,IAAMC,EAAQV,KAAKC,KAAKU,MAAM,KAC9B,OAAOD,EAAME,MAAM,EAAGF,EAAMG,OAAS,GAAGC,KAAK,IAC/C,GAEA,CAAAN,IAAA,WAAAC,IACA,WACE,IAAMC,EAAQV,KAAKC,KAAKU,MAAM,KAC9B,OAAOD,EAAMA,EAAMG,OAAQ,EAC7B,IAAC,CA3BS,GAuDX,IAEKE,EAAW,WACf,SAAAA,IAAchB,EAAA,KAAAgB,GACZf,KAAKgB,MAAQ,kBACbhB,KAAKiB,YAAc,GACnBjB,KAAKkB,QAAU,GAEflB,KAAKmB,aAAe,IAAIC,IACxBpB,KAAKqB,oBAAqB,EAc1BrB,KAAKsB,UAAY,GACjBtB,KAAKuB,oBAAqB,EAe1BvB,KAAKwB,QAAU,CAAC,EAgBhBxB,KAAKyB,MAAQ,CAAC,EASdzB,KAAK0B,SAAMC,EACX3B,KAAK4B,mBAAgBD,CACvB,CAgBA,OAAA9B,EAAAkB,EAAA,EAAAP,IAAA,MAAAC,IAIA,WACE,OAAIT,KAAK6B,KACA7B,KAAK6B,KACH7B,KAAK8B,aAAe9B,KAAKwB,QAAQO,IACnC/B,KAAKwB,QAAQO,IAAM,IAAM/B,KAAK8B,YAC5B9B,KAAKwB,QAAQO,IACf/B,KAAKwB,QAAQO,SADf,CAGT,EAEAC,IAbA,SAAQC,GACNjC,KAAK6B,KAAOI,CACd,GAAC,CAAAzB,IAAA,YAAAC,IAYD,WACE,OAAIT,KAAKkC,WACA,sBAAwBlC,KAAKkC,gBAEpC,CAEJ,GAGA,CAAA1B,IAAA,aAAAC,IAIA,WACE,OAAOT,KAAKmC,YAAcnC,KAAKmC,YAAcnC,KAAK+B,IAAM,gBAC1D,EAEAC,IAPA,SAAeC,GACbjC,KAAKmC,YAAcF,CACrB,GAAC,CAAAzB,IAAA,mBAAAC,IAMD,WACE,OAAOhC,EAAIuB,KAAK4B,cAClB,GAEA,CAAApB,IAAA,iBAAAC,IACA,WACE,OAAOhC,EAAIuB,KAAKoC,YAClB,GAEA,CAAA5B,IAAA,gBAAAC,IACA,WACE,OAAOT,KAAK4B,cAAczC,aAC5B,GAEA,CAAAqB,IAAA,iBAAAC,IACA,WACE,OAAOnC,EAAO0B,KAAK4B,cAAc3C,WACnC,GAEA,CAAAuB,IAAA,eAAAC,IACA,WACE,OAAOT,KAAK4B,cAAc7C,SAC5B,GAEA,CAAAyB,IAAA,uBAAAC,IACA,WACE,OAAOlC,EAAQyB,KAAK4B,cAAc3C,WAAa,EACjD,GAEA,CAAAuB,IAAA,qBAAAC,IACA,WACE,OAAOlC,EAAQyB,KAAK4B,cAAc7C,UACpC,GAAC,CAAAyB,IAAA,uBAAAC,IAED,WACE,OAAOT,KAAK4B,cAAcS,cAAc1B,MAAM,KAAK,EACrD,GAAC,CAAAH,IAAA,SAAAC,IAED,WACE,IAAM6B,EAAStC,KAAKuC,cAAgB,KACpC,GAAID,EAAS,EACX,MAAM,IAAIE,MAAM,yDAElB,OAAOF,CACT,GAAC,CAAA9B,IAAA,QAAAC,IAED,WACE,OAAOT,KAAK4B,cAAc3C,WAAa,CACzC,GAEA,CAAAuB,IAAA,sBAAAC,IACA,WACE,OAAIT,KAAKkB,QAAQL,OAAS,EACjBb,KAAKkB,QAAQ,GAAGuB,SAAW,WACD,IAAxBzC,KAAKkB,QAAQL,OACfb,KAAKkB,QAAQ,GAAGuB,SAAW,MAAQzC,KAAKkB,QAAQ,GAAGuB,SACzB,IAAxBzC,KAAKkB,QAAQL,OACfb,KAAKkB,QAAQ,GAAGuB,cADlB,CAGT,GAEA,CAAAjC,IAAA,gBAAAC,IACA,WACE,OAAOT,KAAKkB,QAAQwB,KAAI,SAAAxC,GACtB,OAAOA,EAAOuC,SAAW,KAAOvC,EAAOyC,SACzC,IAAG7B,KAAK,QACV,GAEA,CAAAN,IAAA,OAAAC,IACA,WACE,IAAImC,EAAO,GAMX,OALI5C,KAAKkB,QAAQL,SACf+B,GAAQ5C,KAAKkB,QAAQ,GAAGuB,SAASI,cACjCD,GAAQ5C,KAAKuC,cACbK,GAAQ5C,KAAKgB,MAAML,MAAM,KAAK,GAAGkC,eAE5BD,GAAQ,UACjB,GAAC,CAAApC,IAAA,sBAAAC,IAED,WAA0B,IAAAqC,EAAA,KACxB,OAAO,IAAI1B,IAAIpB,KAAKsB,UAAUoB,KAAK,SAAAK,GAEjC,MAAO,CAACA,EADMD,EAAK3B,aAAaV,IAAIsC,GAEtC,IACF,GAAC,CAAAvC,IAAA,eAAAC,IAUD,WACE,OAAOT,KAAKgD,aACd,EAAChB,IAVD,SAAiBb,GACXA,aAAwBC,IAC1BpB,KAAKgD,cAAgB7B,EACY,WAAxB8B,EAAO9B,KAChBnB,KAAKgD,cA9QW,SAASlD,GAC7B,IAAM4C,EAAM,IAAItB,IAChB,IAAK,IAAI8B,KAAYpD,EACfA,EAAOqD,eAAeD,IACxBR,EAAIV,IAAIkB,EAAUpD,EAAOoD,IAG7B,OAAOR,CACT,CAsQ2BU,CAAcjC,GAEvC,GAAC,CAAAX,IAAA,iBAAAyB,MAYD,SAAeoB,GACbC,OAAOC,OAAOF,EAAQrD,MACtBqD,EAAOlC,aArSW,SAASuB,GAI7B,OAHec,MAAMC,KAAKf,GAAKgB,QAAO,SAAC5D,EAAM6D,GAAA,I,MAAAC,EAAAC,EAAAF,EAAE,GAACnD,EAAGoD,EAAA,GAAE3B,EAAK2B,EAAA,UACxDN,OAAOC,OAAOzD,G,EAAM,G,EAAWmC,G,MAANzB,M,2FAAe,GACvC,CAAC,EAEN,CAgS0BsD,CAAc9D,KAAK+D,qBACzCV,EAAOtB,IAAM/B,KAAK+B,IAClBsB,EAAO3B,IAAM1B,KAAK0B,IAClB2B,EAAOW,UAAYhE,KAAKgE,UACxBX,EAAOY,WAAajE,KAAKiE,WACrBjE,KAAK4B,gBACPyB,EAAOf,OAAStC,KAAKsC,OACrBe,EAAOa,MAAQlE,KAAKkE,MACpBb,EAAOc,iBAAmBnE,KAAKmE,iBAC/Bd,EAAOd,cAAgBvC,KAAKuC,cAC5Bc,EAAOe,eAAiBpE,KAAKoE,eAC7Bf,EAAOgB,aAAerE,KAAKqE,aAC3BhB,EAAOiB,qBAAuBtE,KAAKsE,qBACnCjB,EAAOkB,mBAAqBvE,KAAKuE,oBAE/BvE,KAAKoC,cACPiB,EAAOmB,eAAiBxE,KAAKwE,gBAE/BnB,EAAOoB,oBAAsBzE,KAAKyE,oBAClCpB,EAAOqB,cAAgB1E,KAAK0E,cAC5BrB,EAAOT,KAAO5C,KAAK4C,IACrB,IAAC,EAAApC,IAAA,aAAAyB,MA7BD,SAAkB0C,GAChB,IAAMC,EAAc,IAAI7D,EAExB,OADAuC,OAAOC,OAAOqB,EAAaD,GACpBC,CACT,IAAC,CAvNc,GAkQXC,EAAW,SAACC,GAChB,gBAAAC,GAEE,SAAAC,IAAc,IAAAC,EAAAlF,EAAA,KAAAiF,GACZC,EAAAC,EAAA,KAAAF,GAGA,IAAMG,EAAU,CAACC,WAAW,EAAMC,eAAe,EAAMC,SAAS,GAC1DC,EAAW,IAAIC,kBAAkB,WACrCD,EAASE,aACTR,EAAKS,mBACLH,EAASI,QAAOV,EAAOE,EACzB,IAGgC,OAAhCI,EAASI,QAAOV,EAAOE,GAASF,CAClC,CAAC,OAAAW,EAAAZ,EAAAD,GAAAlF,EAAAmF,EAAA,EAAAxE,IAAA,oBAAAyB,MAED,WACE4D,EAAAb,EAAA,2BAAAa,CAAA,IAEA7F,KAAK0F,kBACP,GAGA,CAAAlF,IAAA,mBAAAyB,MACA,WACMjC,KAAK8F,aAAe9F,KAAK+F,MAC3B/F,KAAKgG,eAET,GAAC,CAAAxF,IAAA,gBAAAyB,MAED,WACEgE,QAAQC,MAAM,cAADvG,OAAeK,KAAKmG,YAAYlG,KAAI,kDACnD,IAAC,CAjCH,CAAqB6E,EAoCvB,EAkBMsB,EAAW,SAACnG,EAAMoG,GAAqC,IAArBC,IAASC,UAAA1F,OAAA,QAAAc,IAAA4E,UAAA,KAAAA,UAAA,GAE/C,OAAO,SAACzB,GAEN,IAAM0B,EAAWC,SAASC,cAAc,YAOxC,OANAF,EAASG,UAAYN,EAEjBC,GAAa,aAAcM,QAC7BC,SAASC,gBAAgBN,EAAUvG,GAGrC,SAAA8G,GAIE,SAAAC,IAAc,IAAAC,EAOX,OAPWlH,EAAA,KAAAiH,IACZC,EAAA/B,EAAA,KAAA8B,IAEKE,MAAQT,SAASU,WAAWX,EAASY,SAAS,GAC/Cd,IACFW,EAAKI,aAAa,CAACC,KAAM,SACzBL,EAAKM,WAAWC,YAAYP,EAAKC,QAClCD,CACH,CAAC,OAAArB,EAAAoB,EAAAD,GAAAlH,EAAAmH,EAAA,EAAAxG,IAAA,oBAAAyB,MAED,WACMjC,KAAKyH,aAAa,yBAGlBnB,EACE,aAAcM,QAChBC,SAASa,aAAa1H,MAGxBA,KAAK2H,aAAa3H,KAAKkH,MAAOlH,KAAK4H,YAEvC,GAAC,CAAApH,IAAA,OAAAC,IAED,WACE,OAAI6F,EACKtG,KAAKuH,WAELvH,IAEX,GAEA,CAAAQ,IAAA,IAAAyB,MACA,SAAE4F,GACA,OAAO7H,KAAK+F,KAAK+B,cAAcD,EACjC,GAAC,CAAArH,IAAA,KAAAyB,MAED,SAAG4F,GACD,OAAO7H,KAAK+F,KAAKgC,iBAAiBF,EACpC,IAAC,EAAArH,IAAA,KAAAC,IAxCD,WAAkB,OAAOR,CAAM,IAAC,CAFlC,CAAqB6E,EA4CvB,CACF,EAEIkD,EAAO,60BAqBLC,EAAgB,SAASC,EAAWC,EAAMC,GAQ9C,IALA,IAAIC,EAAQD,EACRE,EAAa,EAEXC,EAAcL,EAAUrH,OAEvBwH,EAAQF,EAAKtH,QAAQ,CAC1B,IAAM2H,EAAYL,EAAKE,GAEvB,GACEC,GAAc,GACdH,EAAKvH,MAAMyH,EAAOA,EAAQE,KAAiBL,EAE3C,OAAOG,EACgB,OAAdG,EACTH,IACuB,MAAdG,EACTF,IACuB,MAAdE,GACTF,IAGFD,GACF,CAEA,OAAQ,CACV,EAEMI,EAAoB,SAASC,EAAWC,EAAWC,EAAYC,GAGnE,IAFA,IAAMC,EAAY,GAETC,EAAI,EAAGA,EAAIL,EAAU7H,OAAQkI,IACpC,GAA0B,SAAtBL,EAAUK,GAAGC,KAAiB,CAChC,IAAMb,EAAOO,EAAUK,GAAGE,KAEtBC,GAAiB,EACjBC,EAAY,EACZC,OAAS,EAYb,KATmB,KADnBA,EAAYjB,EAAKkB,QAAQV,MAEvBQ,EAAYC,EACZN,EAAUQ,KAAK,CACbN,KAAM,OACNC,KAAMd,EAAKvH,MAAM,EAAGuI,KAEtBD,GAAiB,KAGN,CAEX,GAAIA,EAAgB,CAElB,IAAmB,KADnBE,EAAYjB,EAAKkB,QAAQV,EAAWQ,IAElC,MAGFL,EAAUQ,KAAK,CACbN,KAAM,OACNC,KAAMd,EAAKvH,MAAMuI,EAAWC,KAG9BD,EAAYC,CACd,KAAO,CAML,IAAmB,KALnBA,EAAYnB,EACVW,EACAT,EACAgB,EAAYR,EAAU9H,SAGtB,MAGFiI,EAAUQ,KAAK,CACbN,KAAM,OACNC,KAAMd,EAAKvH,MAAMuI,EAAYR,EAAU9H,OAAQuI,GAC/CG,QAASpB,EAAKvH,MAAMuI,EAAWC,EAAYR,EAAW/H,QACtDgI,QAASA,IAGXM,EAAYC,EAAYR,EAAW/H,MACrC,CAEAqI,GAAkBA,CACpB,CAEAJ,EAAUQ,KAAK,CACbN,KAAM,OACNC,KAAMd,EAAKvH,MAAMuI,IAErB,MACEL,EAAUQ,KAAKZ,EAAUK,IAI7B,OAAOD,CACT,EAmBMU,EAAmB,SAASrB,EAAMsB,GAItC,IAHA,IAAMR,EAlBoB,SAASd,EAAMuB,GAEzC,IADA,IAAIT,EAAO,CAAC,CAAED,KAAM,OAAQC,KAAMd,IACzBY,EAAI,EAAGA,EAAIW,EAAW7I,OAAQkI,IAAK,CAC1C,IAAMb,EAAYwB,EAAWX,GAC7BE,EAAOR,EACLQ,EACAf,EAAUyB,KACVzB,EAAU0B,MACV1B,EAAUW,UAAW,EAEzB,CACA,OAAOI,CACT,CAMeY,CAAoB1B,EAAMsB,EAAYC,YAC7CI,EAAWrD,SAASsD,yBAEjBhB,EAAI,EAAGA,EAAIE,EAAKpI,OAAQkI,IAC/B,GAAqB,SAAjBE,EAAKF,GAAGC,KACVc,EAAStC,YAAYf,SAASuD,eAAef,EAAKF,GAAGE,WAChD,CACL,IAAMgB,EAAMxD,SAASC,cAAc,UAC7BsB,EAAOiB,EAAKF,GAAGE,KAGrBQ,EAAYS,YAAcjB,EAAKF,GAAGF,QAClC,IACEoB,EAAInE,YAAckC,EACdyB,EAAYS,aACdD,EAAIE,aAAa,QAAS,GAE9B,CAAE,MAAOC,GACP,KAAMA,aAAa3I,MAAM4I,YACvB,MAAMD,EAERX,EAAYa,cACV,uCAAyCrB,EAAKF,GAAGE,KAAO,UACxDmB,GAEFN,EAAStC,YAAYf,SAASuD,eAAef,EAAKF,GAAGQ,UACrD,QACF,CACAO,EAAStC,YAAYyC,EACvB,CAGF,OAAOH,CACT,EAEMS,EAAa,SAASC,EAAMf,GAChC,IAAK,IAAIV,EAAI,EAAGA,EAAIyB,EAAKC,WAAW5J,OAAQkI,IAAK,CAC/C,IAAM2B,EAAYF,EAAKC,WAAW1B,GAClC,GAA2B,IAAvB2B,EAAUC,SAAgB,CAE5B,IAAMxC,EAAOuC,EAAU5E,YACvB,GAAI2D,EAAYmB,cAAczC,GAAO,CACnC,IAAM0C,EAAOrB,EAAiBrB,EAAMsB,GACpCV,GAAK8B,EAAKJ,WAAW5J,OAAS,EAC9B2J,EAAKM,aAAaD,EAAMH,EAC1B,CACF,MAAkC,IAAvBA,EAAUC,WAIhB,IADDlB,EAAYsB,YAAY1B,QAAQqB,EAAUM,SAASnI,gBAInD0H,EAAWG,EAAWjB,EAI5B,CACF,EAEMwB,EAA2B,CAC/BvB,WAAY,CACV,CAAEC,KAAM,KAAMC,MAAO,KAAMf,SAAS,GACpC,CAAEc,KAAM,MAAOC,MAAO,MAAOf,SAAS,GACtC,CAAEc,KAAM,MAAOC,MAAO,MAAOf,SAAS,IAKxCkC,YAAa,CACX,SACA,WACA,QACA,WACA,MACA,OACA,OAGFT,cAAe,SAASY,EAAKC,GAC3BlF,QAAQC,MAAMgF,EAAKC,EACrB,GAsBIC,EAAc,6GAqBdC,EAAK,SAAAC,GAAA,SAAAD,IAAA,OAAAtL,EAAA,KAAAsL,GAAAnG,EAAA,KAAAmG,EAAA9E,UAAA,QAAAX,EAAAyF,EAAAC,GAAAzL,EAAAwL,EAAA,EAAA7K,IAAA,UAAAC,IAgDT,WACE,IAAM8K,EAAe,CAAErB,YAAalK,KAAKyH,aAAa,UACtD,OAAOnE,OAAOC,OAAOgI,EAAcF,EAAMG,aAC3C,GAAC,CAAAhL,IAAA,oBAAAyB,MAED,WACE4D,EAAAwF,EAAA,2BAAAxF,CAAA,IACKwF,EAAMI,YACTJ,EAAMK,UAEV,GAAC,CAAAlL,IAAA,gBAAAyB,MAED,WACE,GAAqB,oBAAVR,MAAuB,CAChC,IAAMkK,EAAY3L,KAAK+F,KAAK+B,cAAc,oBAC1CrG,MAAMmK,OAAO5L,KAAK8F,YAAa6F,EAAW3L,KAAKmF,QACjD,CACF,IAAC,EAAA3E,IAAA,eAAAC,IApDD,WAME,OALK4K,EAAMQ,gBACTR,EAAMQ,cAAgB,CACpBnC,WAAY,CAAE,CAAE,KAAO,KAAM,MAAQ,KAAM,SAAW,MAGnD2B,EAAMQ,aACf,EAAC7J,IAlBD,SAAwBmD,GACtBkG,EAAMQ,cAAgB1G,EAClBkG,EAAMG,aAAa9B,aAChB2B,EAAMI,WAGTJ,EAAMS,sBAFNT,EAAMK,WAKZ,GAAC,CAAAlL,IAAA,sBAAAyB,MAWD,WAEE,IAC8B8J,EADuBC,EAAAC,EAApCxF,SAASsB,iBAAiB,WACb,IAA9B,IAAAiE,EAAAE,MAAAH,EAAAC,EAAAxN,KAAA2N,MAAkBJ,EAAA9J,MACR+D,eAEV,OAAAmF,GAAAa,EAAA5B,EAAAe,EAAA,SAAAa,EAAAI,GAAA,CACIf,EAAMG,aAAa9B,YArEC,SAASc,EAAMrF,GACzC,IAAKqF,EACH,MAAM,IAAIhI,MAAM,iCAGlB,IAAMiH,EAAcnG,OAAOC,OAAO,CAAC,EAAG0H,EAA0B9F,GAC1DkH,EAAmB5C,EAAYC,WAAW4C,SAAQ,SAAAC,GAAC,MAAI,CAC3DA,EAAE5C,KACF4C,EAAE3C,MACH,IAGDH,EAAYmB,cAFU,SAAAzC,GAAI,OACxBkE,EAAiBG,MAAK,SAAAD,GAAC,OAAyB,IAArBpE,EAAKkB,QAAQkD,EAAS,GAAC,EAEpDhC,EAAWC,EAAMf,EACnB,CAwDMgD,CAAoBhG,SAASiG,KAAMrB,EAAMG,aAE7C,GAAC,CAAAhL,IAAA,WAAAyB,MAED,WAEEwE,SAASkG,KAAKC,mBAAmB,YAAaxB,GAE9C,IAAMyB,EAAYpG,SAASC,cAAc,UACzCmG,EAAUC,IA7DK,qDA8DfD,EAAUE,OAAQ,EAClBF,EAAUG,OAAS3B,EAAMS,oBACzBe,EAAUI,YAAc,YACxBxG,SAASkG,KAAKnF,YAAYqF,GAE1BxB,EAAMI,YAAa,CACrB,IAAC,CA9CQ,CAAS5G,EAnBVuB,EAAS,SAAU,KAAFzG,OAC3ByL,EAAW,sHAAAzL,OAYXqI,EAAI,oDAMyBkF,CAAEC,eAuF/B,SAASC,IAAkC,IAGfC,E,EAHDC,EAAG/G,UAAA1F,OAAA,QAAAc,IAAA4E,UAAA,GAAAA,UAAA,GAAGE,SACzBnF,EAAY,IAAIiM,IAC0BC,EAAAvB,EAA/BqB,EAAIvF,iBAAiB,WACZ,IAA1B,IAAAyF,EAAAtB,MAAAmB,EAAAG,EAAAhP,KAAA2N,MAA4B,KAGJsB,EAHbxD,EAAGoD,EAAApL,MAEyCyL,EAAAzB,GADnChC,EAAI0D,aAAa,QAAU1D,EAAI0D,aAAa,eACvChN,MAAM,KAAK+B,KAAI,SAAAkL,GAAC,OAAIA,EAAEC,MAAM,KAC7B,IAAtB,IAAAH,EAAAxB,MAAAuB,EAAAC,EAAAlP,KAAA2N,MAAwB,KAAb3L,EAAGiN,EAAAxL,MACZX,EAAUwM,IAAItN,EAChB,CAAC,OAAA2K,GAAAuC,EAAAtD,EAAAe,EAAA,SAAAuC,EAAAtB,GAAA,CACH,CAAC,OAAAjB,GAAAqC,EAAApD,EAAAe,EAAA,SAAAqC,EAAApB,GAAA,CACD,O,+CAAW9K,I,oSACb,CAEA,SAASyM,EAAcC,EAAKxH,EAAUyH,EAAKC,GACzC,GAAkB,MAAdF,EAAI9N,OACN,MAAO,GAET,IAAIQ,EAAQsN,EAAI9N,OAAOS,MAAM,SACzBwN,EAAezN,EAAMgC,KAAI,SAAAzC,GAE3B,IAA0B,IAD1BA,EAAOA,EAAK4N,QACHxE,QAAQ,KACf,IAAI+E,EAAOnO,EAAKU,MAAM,KAAK,GAAGkN,OAC1BQ,EAASpO,EAAKU,MAAM,KAAK,QACE,GAAtBV,EAAKoJ,QAAQ,MAClB+E,EAAOnO,EACRU,MAAM,KACNC,OAAO,GAAG,GACViN,OACCQ,EAASpO,EACVU,MAAM,KACNC,MAAM,GAAI,GACVE,KAAK,MAEJsN,EAAOnO,EAAK4N,OAElB,IAAIS,EAAW,GAQf,OAPc3M,MAAV0M,IAKFC,GAJAA,EAAWD,EACRR,OACAlN,MAAM,KACN+B,KAAI,SAAAwJ,GAAC,OAAIA,EAAE2B,OAAO,EAAE,KACH/M,KAAK,KAAO,KAE3B0F,EACJ+H,QAAQ,OAAQF,GAChBE,QAAQ,OAAQH,GAChBG,QAAQ,OAAQD,GAChBT,MACL,IACA,OAAInN,EAAMG,OAAS,EACPsN,EAAavN,MAAM,EAAGF,EAAMG,OAAS,GAAGC,KAAKmN,KAC/CC,GAAYD,GAAOE,EAAazN,EAAMG,OAAS,IAGhDsN,EAAa,EAExB,CAEA,SAASK,EAAaR,GACpB,IAAIS,EAAOT,EAAIxM,SAAWwM,EAAIU,WAAa,GAC3C,GAAI,WAAYV,EAAK,CACnB,IAAI9J,EAAQ8J,EAAI9J,OAAS8J,EAAIW,OAC7BzK,EAAiBvC,MAATuC,EAAqB,IAAMA,EAAQ,IAAM,GACjDuK,GAAQ,SAAWT,EAAI1L,OAAS4B,CAClC,CASA,MARI,UAAW8J,IACbS,GAAQ,SAAWT,EAAIY,OAEb,IAARH,IAAYA,GAAQ,MACpB,cAAeT,GAEY,MAD7BS,GAAQT,EAAIa,WACHJ,EAAK5N,OAAS,KAAW4N,GAAQ,KAErCA,CACT,CAEA,SAASK,EAAYd,GACnB,GAAI,QAASA,EAAK,CAChB,IAAIjM,EAAMiM,EAAIjM,IACVgN,EAAc,8BAA8BC,KAAKjN,GAKrD,GAJmB,MAAfgN,IACFhN,EAAM,wBAAHpC,OAA2BoP,EAAY,GAAE,SAGzB,QAAjBhN,EAAInB,OAAO,GACb,IAAIqO,EAAQ,UACc,SAAjBlN,EAAInB,OAAO,KAChBqO,EAAQ,QAEd,MAAO,mBAAPtP,OAA0BoC,EAAG,OAAApC,OAAMsP,GAAS,OAAM,QACpD,CAGE,MAAO,EAEX,CACA,SAASC,EAAWlB,EAAKmB,GACvB,MAAI,QAASnB,EACJ,GAAPrO,OAAUwP,EAAW,OAAS,GAAE,8BAAAxP,OAChCqO,EAAItM,IAAG,4CAAA/B,OACkCqO,EAAItM,IAAG,QAEzC,EAEX,CAMA,SAAS0N,EAAkBpB,EAAKqB,GAC9B,GAAIrB,EAAK,CACP,IAAIS,EANR,SAAsBT,GACpB,MAAO,uBAAyBA,EAAIhN,MAAQ,UAC9C,CAIesO,CAAatB,GAexB,OAdAS,GAAQK,EAAYd,GAAO,OACvBA,EAAI9N,SACNuO,GAAQV,EAAcC,EAAK,aAAc,KAAM,UAC3CA,EAAI9O,MAAQ8O,EAAItP,QAClB+P,GAAQ,OAGRT,EAAI9O,MAAQ8O,EAAItP,KAClB+P,IAAST,EAAI9O,MAAQ8O,EAAItP,MAAQ,KAEjC+P,GAAQ,MAEVA,GAAQD,EAAaR,IACbkB,EAAWlB,EAarB,CACE,MAAO,GAEX,CAEA,SAASuB,EAAWvB,GAClB,GAAIA,EAAK,CACP,IAAIS,EAAO,GACXA,GAAQ,WAAaT,EAAIhN,MAAQ,YACjCyN,GAAQK,EAAYd,GACpBS,GAAQ,OAER,IAAIe,EAAQzB,EAAcC,EAAK,YAAa,MAAQ,IAChDyB,EACFjB,EAAaR,GAAKH,OAAS,IAAMG,EAAI9O,KAAO,KAAOgQ,EAAWlB,GAAK,GAOrE,OALKwB,EAAQC,GAAO5O,OAAS6O,KAAKC,IAAI,GAAI3B,EAAIhN,MAAMH,QAClD4N,GAAQe,EAAQ,IAAMC,EAEtBhB,GAAQe,EAAQ,OAASC,EAEpBhB,CACT,CACE,MAAO,GAEX,CAEA,SAASmB,IACP,OAAqE,IAA9D,CAAC,cAAe,YAAYvG,QAAQ5C,SAASoJ,WACtD,CAqCA,SAASC,EAAiBC,GACxB,IAAMlD,EAAYkD,EAAQC,kBAC1B,GAAInD,EAAW,CAEb,GAA0B,QADbA,EAAUc,aAAa,QAC3BhN,MAAM,KAAK,GAAc,CAChC,IAAMyG,EAAUyF,EAAU/G,YAE1B,OA5BN,SAA+ClB,GAG7C,IACsCqL,EADtCC,EAAAjE,EACmBrH,EAAY1D,SAAO,IAAtC,IAAAgP,EAAAhE,MAAA+D,EAAAC,EAAA1R,KAAA2N,MAAwC,KAA/BjM,EAAM+P,EAAAhO,MACPkO,EAAcC,QAAQlQ,EAAOG,aAC7BgQ,EAAcD,QAAQlQ,EAAOK,cACnC,GAAK4P,EACL,GAAIE,EACFpK,QAAQqK,KAAK,UAAD3Q,OAAWO,EAAOA,OAAM,uHAC/B,CACL,IAAIqQ,EAAiB,CACnB,KAAQrQ,EAAOG,aAEbH,EAAOI,iBAAgBiQ,EAAexO,IAAM7B,EAAOI,gBACvDJ,EAAOK,aAAe,CAACgQ,EACzB,CACF,CAAC,OAAApF,GAAA+E,EAAA9F,EAAAe,EAAA,SAAA+E,EAAA9D,GAAA,CACD,OAAOxH,CACT,CASa4L,CADQC,KAAKC,MAAMtJ,GAE5B,CACEnB,QAAQC,MAAM,qEAElB,MACED,QAAQC,MAAM,mIAEhB,MAAO,CAAC,CACV,CA9OAmF,EAAMI,YAAa,EACnBJ,EAAMsF,oBAAqB,EAC3B/J,OAAOyE,MAAQA,EA4Od,IAEKuF,EAAa,SAAAC,GAIjB,SAAAD,IAAc,IAAAE,EAAA/Q,EAAA,KAAA6Q,GACZE,EAAA5L,EAAA,KAAA0L,GAWgC,OARf,IAAIpL,kBAAkB,SAACuL,GAAY,IACvBC,EADuBC,EAAAhF,EAC9B8E,GAAO,IAA3B,IAAAE,EAAA/E,MAAA8E,EAAAC,EAAAzS,KAAA2N,MAA6B,KAAlB+E,EAAKF,EAAA/O,MACd,GAA8B,WAA1BiP,EAAM7N,OAAO2H,UAAwC,kBAAfkG,EAAMlI,KAA0B,CACxE,IAAMC,EAAO6G,EAAgBgB,GAC7BA,EAAKK,OAAOlI,EACd,CACF,CAAC,OAAAkC,GAAA8F,EAAA7G,EAAAe,EAAA,SAAA8F,EAAA7E,GAAA,CACH,IACSzG,QAAOmL,EATA,CAAC1L,WAAW,EAAMC,eAAe,EAAMC,SAAS,IAShCwL,CAClC,CAAC,OAAAlL,EAAAgL,EAAAC,GAAAhR,EAAA+Q,EAAA,EAAApQ,IAAA,SAAAyB,MAED,SAAOgH,GACL,IACMmI,EAAQ,IAAIC,YAAY,uBADd,CAAEC,OAAQrI,EAAMsI,SAAS,IAEzC9K,SAAS+K,cAAcJ,EACzB,IAAC,EAAA5Q,IAAA,KAAAC,IArBD,WAAkB,MAAO,gBAAkB,IAAC,CAF3B,CAE2BgR,EAFlBtE,cAuH5B,IAAMvI,EAAc,IAAI7D,EAElB2Q,EAAa,CACjB9M,YAAaA,EACb+M,UAAW,CACTxQ,aAAc,GACdG,UAAW,IAEbsQ,UAAW,CACTC,iBAAgB,SAACT,GACf,IAAAU,EAAAjO,EAAwBuN,EAAME,OAAM,GAA7BS,EAAOD,EAAA,GAAEE,EAAIF,EAAA,GAGpB,GAAKlN,EAAYrD,mBASjB,GAAKqD,EAAYvD,mBAAjB,CAQA,IAAM4Q,EAAUD,EAAKtP,KAAI,SAAAlC,GAAG,OAAIoE,EAAYtD,UAAU+H,QAAQ7I,EAAI,IAClEuR,EAAQE,QAAUA,EAClB,IAAMlB,EAAUiB,EAAKtP,KAAI,SAAAlC,GAAG,OAAIoE,EAAYzD,aAAaV,IAAID,EAAI,IACjEuR,EAAQhB,QAAUA,CALlB,MAJEW,EAAWC,UAAUxQ,aAAamI,MAAK,kBACrCoI,EAAWE,UAAUC,iBAAiBT,EAAM,SAV9CM,EAAWC,UAAUrQ,UAAUgI,MAAK,kBAClCoI,EAAWE,UAAUC,iBAAiBT,EAAM,GAkBlD,EAEAc,iBAAgB,WAIdtN,EAAYtD,UAAY8L,IACxBxI,EAAYrD,oBAAqB,EAAK,IAC8B4Q,EAD9BC,EAAAnG,EACRyF,EAAWC,UAAUrQ,UAAUV,SAAO,IAApE,IAAAwR,EAAAlG,MAAAiG,EAAAC,EAAA5T,KAAA2N,OACEkG,EADwBF,EAAAlQ,QAI1B,OAAAkJ,GAAAiH,EAAAhI,EAAAe,EAAA,SAAAiH,EAAAhG,GAAA,CACA,IAAMkG,EAAkB7L,SAASqB,cAAc,mBACzC/D,EAAsB,IAAI3C,IAC9BwD,EAAYtD,UAAUoB,KAAI,SAAAK,GACxB,MAAO,CAACA,EAAa6B,EAAYzD,aAAaV,IAAIsC,GACpD,KAEFuP,EAAgBhR,UAAYyC,EAE5B,IAC8BwO,EADuBC,EAAAvG,EAApCxF,SAASsB,iBAAiB,WACb,IAA9B,IAAAyK,EAAAtG,MAAAqG,EAAAC,EAAAhU,KAAA2N,MAAgC,KAArB4F,EAAOQ,EAAAtQ,MAChBgE,QAAQwM,IAAIV,GACZ,IAAMC,EAAOD,EAAQC,KACfC,EAAUD,EAAKtP,KAAI,SAAAlC,GAAG,OAAIoE,EAAYtD,UAAU+H,QAAQ7I,EAAI,IAClEuR,EAAQE,QAAUA,EAClB,IAAMlB,EAAUiB,EAAKtP,KAAI,SAAAlC,GAAG,OAAIoE,EAAYzD,aAAaV,IAAID,EAAI,IACjEuR,EAAQhB,QAAUA,CACpB,CAAC,OAAA5F,GAAAqH,EAAApI,EAAAe,EAAA,SAAAqH,EAAApG,GAAA,CACH,EAEAsG,iBAAgB,SAACtB,GACfM,EAAWE,UAAUM,iBAAiBd,EACxC,EAEAuB,sBAAqB,SAACvB,GACpB,IAAMkB,EAAkB7L,SAASqB,cAAc,mBAEzC3G,EAAeiQ,EAAME,OAE3B1M,EAAYzD,aAAeA,EAC3ByD,EAAYvD,oBAAqB,EAAK,IACiCuR,EADjCC,EAAA5G,EACRyF,EAAWC,UAAUxQ,aAAaP,SAAO,IAAvE,IAAAiS,EAAA3G,MAAA0G,EAAAC,EAAArU,KAAA2N,OACEkG,EADwBO,EAAA3Q,QAI1B,OAAAkJ,GAAA0H,EAAAzI,EAAAe,EAAA,SAAA0H,EAAAzG,GAAA,CACA,GAAKxH,EAAYrD,mBAUjB,GAAI+Q,EAAgB7K,aAAa,uBAC/BxB,QAAQ6M,MAAM,uDACT,CACL,IAAM/B,EAAU,IAAI3P,IAClBwD,EAAYtD,UAAUoB,KAAI,SAAAK,GACxB,MAAO,CAACA,EAAa6B,EAAYzD,aAAaV,IAAIsC,GACpD,KAEFuP,EAAgBhR,UAAYyP,CAC9B,MAlBEW,EAAWC,UAAUrQ,UAAUgI,MAAK,WAClCoI,EAAWE,UAAUe,sBAAsB,CACzCtP,OAAQ+N,EAAM/N,OACdiO,OAAQF,EAAME,QAElB,GAcJ,EAEAyB,kBAAiB,WAGf,IAAMC,EAAgBvM,SAASqB,cAAc,mBAC7C,GAAIkL,EAAe,CACjB,IAAMC,EAAYxM,SAASsB,iBAAiB,cAC5CiL,EAAcC,UAAYA,CAC5B,CACF,EAEAC,qBAAoB,SAAC9B,GACnB,IAprC2B/N,EAAQsB,EAorC7BsE,EAAOmI,EAAME,OAprCgB3M,EAqrCEsE,GArrCV5F,EAqrCHuB,GAprCrB5D,MAAQ2D,EAAO3D,MAClB2D,EAAOwO,YACLxO,EAAOwO,qBAAqBC,KAC9B/P,EAAOzB,cAAgB+C,EAAOwO,UACrBxO,EAAOwO,UAAUhN,cAAgBkN,SAC1ChQ,EAAOzB,cAAgB,IAAIwR,KAAKzO,EAAOwO,aAGvCxO,EAAO/C,gBACL+C,EAAO/C,yBAAyBwR,KAClC/P,EAAOzB,cAAgB+C,EAAO/C,cACrB+C,EAAO/C,cAAcuE,cAAgBkN,OAC9ChQ,EAAOzB,cAAgB,IAAIwR,KAAKzO,EAAO/C,eAEvCqE,QAAQC,MAAM,8CAAiDvB,EAAO/C,gBAG1EyB,EAAOpC,YAAc0D,EAAO1D,YAC5BoC,EAAOnC,QAAUyD,EAAOzD,QAAQwB,KAAK,SAAC4Q,GAAY,OAAK,IAAI1T,EAAO0T,EAAa,IAC/EjQ,EAAO5B,MAAQkD,EAAOlD,MACtB4B,EAAOkQ,SAAW5O,EAAO4O,SACrB5O,EAAOjD,MACT2B,EAAO3B,IAAMiD,EAAOjD,KAgqClB,IAAM8R,EAAe/M,SAASqB,cAAc,kBAU5C,GATI0L,SACkC,IAAzB5O,EAAY2O,SACrBC,EAAaD,SAAW3O,EAAY2O,SAEpCC,EAAaC,cAAcC,YAAYF,KAIvB/M,SAASiG,KAAKjF,aAAa,wBAC3BmI,IAAoB,EArM9C,SAA4BtC,EAAKrE,GAC/B,IAAMyD,EAAOY,EAAIZ,KACXiH,EAAUjH,EAAK5E,cAAc,aAGnC,GAAK6L,EAAL,CAKA,IAAIC,EAAStG,EAAIxF,cAAc,YAC1B8L,IACC3K,EAAK/H,SACP0S,EAAStG,EAAI5G,cAAc,YAC3BgG,EAAK/E,aAAaiM,EAAQD,IAE1B1N,QAAQqK,KAAK,yEAIjB,IAAItP,EAAQsM,EAAIxF,cAAc,WACzB9G,IACHA,EAAQsM,EAAI5G,cAAc,WAC1BgG,EAAK/E,aAAa3G,EAAO4S,IAG3B,IAAIC,EAAK7S,EAAM8G,cAAc,MACxB+L,KACHA,EAAKvG,EAAI5G,cAAc,OACpBZ,YAAcmD,EAAKjI,MACtBA,EAAM2G,aAAakM,EAAI7S,EAAM4G,aAG/B,IAAMkM,OAAuC,IAAlB7K,EAAKsK,SAC5BC,EAAe9G,EAAK5E,cAAc,kBACtC,GAAIgM,IAAgBN,EAAc,CAChC,IAAMO,EAA8B,oBAAXnN,OACnBoN,EAAcD,GAAanN,OAAOqN,SAASC,SAASC,SAAS,aAC9DJ,GAAcC,KACjBR,EAAelG,EAAI5G,cAAc,mBACpB6M,SAAWtK,EAAKsK,SAC7B7G,EAAK/E,aAAa6L,EAAc9G,EAAK9E,YAEzC,MAAYkM,GAAeN,GACzBA,EAAaC,cAAcC,YAAY1T,MAGzC,IAAIoU,EAAW9G,EAAIxF,cAAc,cAC5BsM,IACHA,EAAW9G,EAAI5G,cAAc,cAC7B4G,EAAIZ,KAAKlF,YAAY4M,IAGvB,IAAIC,EAAe/G,EAAIxF,cAAc,mBAChCuM,IACHA,EAAe/G,EAAI5G,cAAc,mBACjC0N,EAAS5M,YAAY6M,IAGvB,IAAIC,EAAehH,EAAIxF,cAAc,mBAChCwM,IACHA,EAAehH,EAAI5G,cAAc,mBACjC0N,EAAS5M,YAAY8M,GAtDvB,MAFErO,QAAQqK,KAAK,+DA2DjB,CAqIQiE,CAAmB9N,SAAU7B,GAE7B,IAAMwP,EAAW3N,SAASqB,cAAc,oBACpCsM,IACFA,EAASxP,YAAcA,GAGzB,IAAMgP,EAASnN,SAASqB,cAAc,YAClC8L,IACFA,EAAOhP,YAAcA,GAGnBqE,EAAKxH,QACP4J,EAAMG,aAAevC,EAAKxH,MAE9B,CACF,EAEA+S,iBAAgB,WACd,GAAI9C,EAAW+C,OACbxO,QAAQqK,KACN,qEAGG,GAAKV,IAAL,CAQL8B,EAAW+C,QAAS,EACpBxO,QAAQ6M,MAAM,mDAGhB,IAAM4B,EAAiBjO,SAASqB,cAAc,kBAC9C,GAAI4M,EAAgB,CAClB,IAAMzL,EAAO6G,EAAiB4E,GAC9BhD,EAAWE,UAAUsB,qBAAqB,CAAE5B,OAAQrI,GACtD,CAGArE,EAAYtD,UAAY8L,IACxBxI,EAAYrD,oBAAqB,EAAK,IAC8BoT,EAD9BC,EAAA3I,EACRyF,EAAWC,UAAUrQ,UAAUV,SAAO,IAApE,IAAAgU,EAAA1I,MAAAyI,EAAAC,EAAApW,KAAA2N,OACEkG,EADwBsC,EAAA1S,QAEzB,OAAAkJ,GAAAyJ,EAAAxK,EAAAe,EAAA,SAAAyJ,EAAAxI,GAAA,CAED,GAAIxH,EAAYvD,mBAAoB,KACqCwT,EADrCC,EAAA7I,EACJyF,EAAWC,UAAUxQ,aAAaP,SAAO,IAAvE,IAAAkU,EAAA5I,MAAA2I,EAAAC,EAAAtW,KAAA2N,OACEkG,EADwBwC,EAAA5S,QAEzB,OAAAkJ,GAAA2J,EAAA1K,EAAAe,EAAA,SAAA2J,EAAA1I,GAAA,CACH,CAEA,IAAM4G,EAAgBvM,SAASqB,cAAc,mBAC7C,GAAIkL,EAAe,CACjB,IAAMC,EAAYxM,SAASsB,iBAAiB,cAC5CiL,EAAcC,UAAYA,CAC5B,CAzBA,MATEhN,QAAQqK,KACN,gEACE7J,SAASoJ,WACT,IAgCR,IAkBEkF,EAASC,wgcAA2ChN,EAV9C,0hCA0CZ,SAASiN,EAAYC,EAAUC,GAC7BlP,QAAQ6M,MAAM,kCAAoCoC,EAASjV,MAC3D,IAAMmV,EAAS3O,SAASC,cAAc,UACtC0O,EAAOtI,IAAMoI,EAASnT,IACtBqT,EAAOrI,OAAQ,EACXoI,IACFC,EAAOpI,OAAS,WAAamI,EAAuBD,EAAW,GAEjEE,EAAOC,QAAU,WACf,IAAI7S,MAAM,+CAAiD0S,EAASjV,KACtE,EACAwG,SAASkG,KAAKnF,YAAY4N,EAC5B,CAEA,IAAME,EAAY,CAChB,CACErV,KAAM,gBACNsV,QAAS,WACP,MAAO,mBAAoB3O,QACpB,iBAAkB4O,QAAQC,WAC1B,gBAAiBD,QAAQC,WACzB,YAAahP,SAASC,cAAc,aACpC,YAAaE,QACb,SAAUpD,KACnB,EACAzB,IAAK,mEACJ,CACD9B,KAAM,uBACNsV,QAAS,WACP,MAAO,yBAA0B3O,QAC1B,8BAA+BA,MACxC,EACA7E,IAAK,uEAIH2T,EAAS,oBAAAA,IAAA3V,EAAA,KAAA2V,EAAA,QAAA7V,EAAA6V,EAAA,OAAAlV,IAAA,6BAAAyB,MAEb,WACE,OAAOqT,EAAUK,OAAM,SAACC,GAAI,OAAKA,EAAKL,SAAS,GACjD,GAAC,CAAA/U,IAAA,OAAAyB,MAED,SAAY4T,GAEV,IAYgDC,EAZ1CC,EAAiB,SAASb,GAC9BA,EAAST,QAAS,EAClBxO,QAAQ6M,MAAM,8CAAgDoC,EAASjV,MAEnEyV,EAAUM,gBAAgBL,OAAM,SAACC,GAAI,OAAKA,EAAKnB,MAAM,MACvDxO,QAAQ6M,MAAM,6DACd7M,QAAQ6M,MAAM,kBACdlM,OAAOqP,gBAAkB,EACzBJ,IAEJ,EACAK,EAAAjK,EACuByJ,EAAUM,iBAAe,IAAhD,IAAAE,EAAAhK,MAAA4J,EAAAI,EAAA1X,KAAA2N,MACE8I,EADiBa,EAAA7T,MACK8T,EACvB,OAAA5K,GAAA+K,EAAA9L,EAAAe,EAAA,SAAA+K,EAAA9J,GAAA,CACH,GAAC,CAAA5L,IAAA,kBAAAC,IAED,WAIE,OAHKiV,EAAUS,mBACbT,EAAUS,iBAAmBb,EAAUc,QAAO,SAACR,GAAI,OAAMA,EAAKL,SAAS,KAElEG,EAAUS,gBACnB,IAAC,CA9BY,GAqEf,IAoBME,EAAQ,SAAAC,GAAA,SAAAD,IAAA,OAAAtW,EAAA,KAAAsW,GAAAnR,EAAA,KAAAmR,EAAA9P,UAAA,QAAAX,EAAAyQ,EAAAC,GAAAzW,EAAAwW,EAAA,EApBFjQ,EAAS,aAAc,6QAAFzG,OATjC,SAAc4W,GACZ,MAAO,GAAP5W,OAAU4W,EAAQ,iDAIpB,CAkBE7J,CAAK,cAAa,iCAMG8J,CAAIrJ,cAmErBsJ,EAAQ,SAAAC,GAAA,SAAAD,IAAA,OAAA1W,EAAA,KAAA0W,GAAAvR,EAAA,KAAAuR,EAAAlQ,UAAA,QAAAX,EAAA6Q,EAAAC,GAAA7W,EAAA4W,EAAA,EA7DFrQ,EAAS,aAAc,s5BA2DlC,EAEsBuQ,CAAIxJ,cAqBrByJ,EAAmB,QAEnBC,EAAO,SAAAC,GAGX,SAAAD,IAAc,IAAAE,EAoBwB,OApBxBhX,EAAA,KAAA8W,GACZE,EAAA7R,EAAA,KAAA2R,GAEA,IAAIrR,kBAAkB,SAACwR,GAAc,IACHC,EADGC,EAAAjL,EACZ+K,GAAS,IAAhC,IAAAE,EAAAhL,MAAA+K,EAAAC,EAAA1Y,KAAA2N,MAAkC,KACWgL,EAD1BC,EAAAnL,EAAAgL,EAAAhV,MACgBoV,YAAU,IAA3C,IAAAD,EAAAlL,MAAAiL,EAAAC,EAAA5Y,KAAA2N,MAA6C,KAAlCmL,EAASH,EAAAlV,MAClB,GACK,UADGqV,EAAUtM,SAClB,CACE,IAAM7C,EAAOmP,EAAUC,UACvB,IAAKX,EAAiBY,KAAKrP,GAAO,CAChClC,QAAQqK,KAAK,2JAA6JnI,GAC1K,IAAMsP,EAAUhR,SAASC,cAAc,QACvC+Q,EAAQ9Q,UAAY2Q,EAAUC,UAC9BD,EAAUI,WAAW/P,aAAa8P,EAASH,GAC3CA,EAAUI,WAAWhE,YAAY4D,EACnC,CACK,CAET,CAAC,OAAAnM,GAAAiM,EAAAhN,EAAAe,EAAA,SAAAiM,EAAAhL,GAAA,CACH,CAAC,OAAAjB,GAAA+L,EAAA9M,EAAAe,EAAA,SAAA+L,EAAA9K,GAAA,CACH,IAAGzG,QAAOoR,EAAO,CAAC3R,WAAW,IAAO2R,CACtC,CAAC,OAAAnR,EAAAiR,EAAAC,GAAAjX,EAAAgX,EAAA,OAAArW,IAAA,KAAAC,IAvBD,WAAkB,MAAO,WAAa,IAAC,CAD5B,CAC4BgR,EADnBtE,cA4BlBwK,EAAuC,oBAAfC,WAA6BA,WAA+B,oBAAXhR,OAAyBA,YAA2B,IAAXiR,EAAAA,EAAyBA,EAAAA,EAAyB,oBAATC,KAAuBA,KAAO,CAAC,EAE9L,SAASC,EAAqBC,EAAIC,GACjC,OAAiCD,EAA1BC,EAAS,CAAEC,QAAS,CAAC,GAAgBD,EAAOC,SAAUD,EAAOC,OACrE,CAEA,IAAIC,EAAcJ,GAAqB,SAAUE,EAAQC,IAwBzD,SAAUA,GAEN,SAASE,IAELpY,KAAK1B,OAAS,CAAC,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,OAC5F0B,KAAKqY,OAAS,CAAC,IAAI,IAAI,IAAI,IAAI,KAC/BrY,KAAKsY,IAAM,EACXtY,KAAKuY,MAAQ,GACbvY,KAAK+Q,QAAU,IAAIvN,MAEnBxD,KAAKwY,aAAe,GAEpBxY,KAAKyY,SAAW,SAASC,GACrB1Y,KAAKuY,MAAQG,CACjB,EAEA1Y,KAAK2Y,WAAa,WACd,OAAO3Y,KAAK+Q,OAChB,EAEA/Q,KAAK4Y,aAAe,SAAS1M,GACzB,MAAa,KAALA,GAAiB,MAALA,GAAkB,MAALA,GAAkB,MAALA,CAClD,EAEAlM,KAAK6Y,MAAQ,SAAS3M,EAAG4M,GAIrB,GAHqBnX,MAAjBmX,GAA+C,MAAjBA,IAC9BA,GAAgB,GACpB9Y,KAAK+Y,eAAeD,GAChB9Y,KAAKuY,MAAM1Z,UAAUmB,KAAKsY,IAAKtY,KAAKsY,IAAMpM,EAAErL,SAAWqL,EAGvD,KAAM,4BAA8BA,EAAI,WAC9BlM,KAAKuY,MAAM1Z,UAAUmB,KAAKsY,KAHpCtY,KAAKsY,KAAOpM,EAAErL,OAILb,KAAK+Y,eAAeD,EACrC,EAEA9Y,KAAKgZ,SAAW,SAAS9M,EAAG4M,GAIxB,OAHqBnX,MAAjBmX,GAA+C,MAAjBA,IAC9BA,GAAgB,GACpB9Y,KAAK+Y,eAAeD,GAChB9Y,KAAKuY,MAAM1Z,UAAUmB,KAAKsY,IAAKtY,KAAKsY,IAAMpM,EAAErL,SAAWqL,CAIlD,EAGblM,KAAKiZ,QAAU,WACX,KAAOjZ,KAAKuY,MAAM1X,OAASb,KAAKsY,KAA+B,KAAxBtY,KAAKuY,MAAMvY,KAAKsY,MACnDtY,KAAKsY,MAET,MAA4B,KAAxBtY,KAAKuY,MAAMvY,KAAKsY,IAGxB,EAEAtY,KAAK+Y,eAAiB,SAASD,GAC3B,KAAO9Y,KAAK4Y,aAAa5Y,KAAKuY,MAAMvY,KAAKsY,OACrCtY,KAAKsY,MACI,GAA4B,KAAxBtY,KAAKuY,MAAMvY,KAAKsY,MAAgC,GAAjBQ,EAAuB,CACnE,KAA+B,MAAxB9Y,KAAKuY,MAAMvY,KAAKsY,MACnBtY,KAAKsY,MACQtY,KAAK+Y,eAAeD,EACzC,CAAS,EAEb9Y,KAAKkZ,aAAe,WAChB,IAAIC,EAAa,EACjBnZ,KAAK6Y,MAAM,KAAK,GAGhB,IAFA,IAAIO,EAAQpZ,KAAKsY,IACbe,GAAU,IACD,CACT,IAAKA,EACD,GAA4B,KAAxBrZ,KAAKuY,MAAMvY,KAAKsY,KAAa,CAC7B,KAAIa,EAAa,GAEV,CACH,IAAIG,EAAMtZ,KAAKsY,IAEf,OADAtY,KAAK6Y,MAAM,KAAK,GACT7Y,KAAKuY,MAAM1Z,UAAUua,EAAOE,EACvC,CALIH,GAKiB,MAAO,GAA4B,KAAxBnZ,KAAKuY,MAAMvY,KAAKsY,KAChDa,SACG,GAAInZ,KAAKsY,KAAOtY,KAAKuY,MAAM1X,OAAS,EACvC,KAAM,qBAEVwY,EAD8D,MAAxBrZ,KAAKuY,MAAMvY,KAAKsY,MAA2B,GAAXe,EAI1ErZ,KAAKsY,KACT,CAAS,EAEbtY,KAAKuZ,cAAgB,WAGjB,IAFA,IAAIC,EAAM,GACNC,EAAW,GACNzZ,KAAKgZ,SAAS,KAAK,IAAsB,GAAZS,GAAgB,CAMlD,GALAD,GAAYxZ,KAAKuY,MAAMvY,KAAKsY,KACA,KAAxBtY,KAAKuY,MAAMvY,KAAKsY,MAChBmB,IACwB,KAAxBzZ,KAAKuY,MAAMvY,KAAKsY,MAChBmB,IACAzZ,KAAKsY,KAAOtY,KAAKuY,MAAM1X,OAAS,EAChC,KAAM,sBAAwBb,KAAKuY,MAAM1Z,UAAUua,OACtCpZ,KAAKsY,KAC1B,CAAa,OAAOkB,CACxB,EAEAxZ,KAAK0Z,aAAe,WAChB1Z,KAAK6Y,MAAM,KAAK,GAGhB,IAFA,IAAIO,EAAQpZ,KAAKsY,IACbe,GAAU,IACD,CACT,IAAKA,EAAS,CACV,GAA4B,KAAxBrZ,KAAKuY,MAAMvY,KAAKsY,KAAa,CAC7B,IAAIgB,EAAMtZ,KAAKsY,IAEf,OADAtY,KAAK6Y,MAAM,KAAK,GACT7Y,KAAKuY,MAAM1Z,UAAUua,EAAOE,EACvC,CAAO,GAAItZ,KAAKsY,KAAOtY,KAAKuY,MAAM1X,OAAS,EACvC,KAAM,sBAAwBb,KAAKuY,MAAM1Z,UAAUua,EACtC,CAEjBC,EADwB,MAAxBrZ,KAAKuY,MAAMvY,KAAKsY,MAA2B,GAAXe,EAIpCrZ,KAAKsY,KACT,CAAS,EAEbtY,KAAK2Z,aAAe,WAChB,IAAIP,EAAQpZ,KAAKsY,IACjB,GAAItY,KAAKgZ,SAAS,KACd,OAAOhZ,KAAKkZ,eACT,GAAIlZ,KAAKgZ,SAAS,KACrB,OAAOhZ,KAAK0Z,eAEZ,IAAI9L,EAAI5N,KAAKQ,MACb,GAAIoN,EAAEiL,MAAM,YACR,OAAOjL,EACN,GAAI5N,KAAK1B,OAAO+K,QAAQuE,EAAE/K,gBAAkB,EAC7C,OAAO+K,EAAE/K,cAET,KAAM,kBAAoB7C,KAAKuY,MAAM1Z,UAAUua,GAAS,aAAexL,CAEtE,EAEb5N,KAAKiC,MAAQ,WACT,IAAI2X,EAAS,GAEb,IADAA,EAAOtQ,KAAKtJ,KAAK2Z,gBACV3Z,KAAKgZ,SAAS,MACjBhZ,KAAK6Y,MAAM,KACXe,EAAOtQ,KAAKtJ,KAAK2Z,gBACR,OAAOC,EAAO9Y,KAAK,GACpC,EAEAd,KAAKQ,IAAM,WAEP,IADA,IAAI4Y,EAAQpZ,KAAKsY,MACJ,CACT,GAAItY,KAAKsY,KAAOtY,KAAKuY,MAAM1X,OACvB,KAAM,cAGV,GAAIb,KAAKqY,OAAOhP,QAAQrJ,KAAKuY,MAAMvY,KAAKsY,OAAS,EAC7C,OAAOtY,KAAKuY,MAAM1Z,UAAUua,EAAOpZ,KAAKsY,KAExCtY,KAAKsY,KAEI,CAAS,EAE9BtY,KAAK6Z,iBAAmB,WACpB,IAAIrZ,EAAMR,KAAKQ,MACf,GAAIR,KAAKgZ,SAAS,KAGd,OAFAhZ,KAAK6Y,MAAM,KAEJ,CAAErY,EADCR,KAAKiC,SAGf,KAAM,6CACIjC,KAAKuY,MAAM1Z,UAAUmB,KAAKsY,IAC/B,EAEbtY,KAAK8Z,eAAiB,WAClB,IAAIC,EAAK/Z,KAAK6Z,mBAGd,IAFA7Z,KAAKwY,aAAwB,UAAI,CAAC,EAClCxY,KAAKwY,aAAwB,UAAEuB,EAAG,IAAMA,EAAG,GACpC/Z,KAAKgZ,SAAS,OACjBhZ,KAAK6Y,MAAM,MAEP7Y,KAAKgZ,SAAS,OAGlBe,EAAK/Z,KAAK6Z,mBACV7Z,KAAKwY,aAAwB,UAAEuB,EAAG,IAAMA,EAAG,EACtC,EAEb/Z,KAAKga,WAAa,SAASzN,GACvBvM,KAAKwY,aAAe,CAAC,EACrBxY,KAAKwY,aAA0B,YAAIxY,KAAKQ,MACxCR,KAAKwY,aAAwB,UAAIjM,EAAE1N,UAAU,GAC7CmB,KAAK6Y,MAAM,KACX7Y,KAAK8Z,iBACL9Z,KAAK+Q,QAAQzH,KAAKtJ,KAAKwY,aAC3B,EAEAxY,KAAKia,UAAY,WAEb,OADAja,KAAK6Y,MAAM,KACJ,IAAM7Y,KAAKQ,KACtB,EAEAR,KAAKka,SAAW,WACZla,KAAKwY,aAAe,CAAC,EACrBxY,KAAKwY,aAAwB,UAAI,WACjCxY,KAAKwY,aAAoB,MAAIxY,KAAKuZ,gBAClCvZ,KAAK+Q,QAAQzH,KAAKtJ,KAAKwY,aAC3B,EAEAxY,KAAKma,QAAU,WACXna,KAAKwY,aAAe,CAAC,EACrBxY,KAAKwY,aAAwB,UAAI,UACjCxY,KAAKwY,aAAoB,MAAIxY,KAAKuZ,gBAClCvZ,KAAK+Q,QAAQzH,KAAKtJ,KAAKwY,aAC3B,EAEAxY,KAAKkR,MAAQ,SAAS3E,GAClBvM,KAAKga,WAAWzN,EACpB,EAEAvM,KAAKoa,OAAS,WACV,KAAOpa,KAAKiZ,WAAW,CACnB,IAAI1M,EAAIvM,KAAKia,YACbja,KAAK6Y,MAAM,KACF,WAALtM,EACAvM,KAAKqa,SACO,aAAL9N,EACPvM,KAAKka,WACO,YAAL3N,EACPvM,KAAKma,UAELna,KAAKkR,MAAM3E,GAEfvM,KAAK6Y,MAAM,IACf,CAAS,CACjB,CACAX,EAAQoC,OAAS,SAASF,GACtB,IAAIG,EAAI,IAAInC,EAGZ,OAFAmC,EAAE9B,SAAS2B,GACXG,EAAEH,SACKG,EAAExJ,OACb,EAGAmH,EAAQsC,SAAW,SAASC,GACxB,IAAIC,EAAM,GACV,IAAM,IAAI3R,KAAK0R,EAAM,CAOjB,GANAC,GAAO,IAAMD,EAAK1R,GAAG4R,UACrBD,GAAO,IACHD,EAAK1R,GAAGhG,cACR2X,GAAOD,EAAK1R,GAAGhG,YAAc,MAC7B0X,EAAK1R,GAAGmI,QACRwJ,GAAOD,EAAK1R,GAAGmI,OACfuJ,EAAK1R,GAAG6R,UAAW,CACnB,IAAIC,EAAO,GACX,IAAK,IAAIC,KAAOL,EAAK1R,GAAG6R,UACD,GAAfC,EAAKha,SACLga,GAAQ,MACZA,GAAQC,EAAM,MAAQL,EAAK1R,GAAG6R,UAAUE,GAAO,IAEnDJ,GAAOG,CACX,CACAH,GAAO,OACX,CACA,OAAOA,CAEX,CAEH,CA9QD,CA8QIxC,EAGJ,IAIA,SAAS6C,EAAaV,GACpB,OAAOA,EACJ9L,QAAQ,YAAa,KACrBA,QAAQ,qCAAqC,SAACyM,EAAMC,EAAGC,GAAI,OAAKA,CAAI,IACpE3M,QAAQ,mBAAmB,SAACyM,EAAME,GAAI,OAAKA,CAAI,GACpD,CAEA,SAASC,EAAYf,GACnB,IAEiCgB,EAF3Bja,EAAe,IAAIC,IACwBia,EAAApP,EAA3BkM,EAAYmC,OAAOF,IACR,IAAjC,IAAAiB,EAAAnP,MAAAkP,EAAAC,EAAA7c,KAAA2N,MAAmC,CAEjC,IAFiC,IAAxB+E,EAAKkK,EAAAnZ,MAEdqZ,EAAA,EAAAC,EAA2BjY,OAAOyN,QAAQG,EAAM0J,WAAUU,EAAAC,EAAA1a,OAAAya,IAAE,CAAvD,IAAAE,EAAA3X,EAAA0X,EAAAD,GAAA,GAAO9a,EAAGgb,EAAA,GAAEvZ,EAAKuZ,EAAA,GACpBtK,EAAM0J,UAAUpa,EAAIqC,eAAiBkY,EAAa9Y,EACpD,CACAiP,EAAM0J,UAAU5R,KAAOkI,EAAMyJ,UAE7BxZ,EAAaa,IAAIkP,EAAMnO,YAAamO,EAAM0J,UAC5C,CAAC,OAAAzP,GAAAkQ,EAAAjR,EAAAe,EAAA,SAAAkQ,EAAAjP,GAAA,CACD,OAAOjL,CACT,CAaA,IAEMsa,GAAY,SAAAC,GAIhB,SAAAD,IAAc,IAAAE,EAAA5b,EAAA,KAAA0b,GACZE,EAAAzW,EAAA,KAAAuW,GAWgC,OAPf,IAAIjW,kBAAkB,SAACuL,GAAY,IACvB6K,EADuBC,EAAA5P,EAC9B8E,GAAO,IAA3B,IAAA8K,EAAA3P,MAAA0P,EAAAC,EAAArd,KAAA2N,MAA6B,KAAlB+E,EAAK0K,EAAA3Z,MACgB,WAA1BiP,EAAM7N,OAAO2H,UAAwC,kBAAfkG,EAAMlI,MAC9C2S,EAAKG,iBAET,CAAC,OAAA3Q,GAAA0Q,EAAAzR,EAAAe,EAAA,SAAA0Q,EAAAzP,GAAA,CACH,IACSzG,QAAOgW,EARA,CAACvW,WAAW,EAAMC,eAAe,EAAMC,SAAS,IAQhCqW,CAClC,CAAC,OAAA/V,EAAA6V,EAAAC,GAAA7b,EAAA4b,EAAA,EAAAjb,IAAA,oBAAAyB,MAED,WAAoB,IAAA8Z,EAAA,KAClBC,uBAAsB,WACpBD,EAAKD,iBACP,GACF,GAAC,CAAAtb,IAAA,kBAAAyB,MAED,WACE,IAAM4K,EAAY7M,KAAK8H,cAAc,UACrC,GAAK+E,EACL,GAAsB,eAAlBA,EAAU7D,KAAuB,CACnC,IAAMiT,EAAYpP,EAAU/G,YAC5B,GAAI9F,KAAKoa,SAAW6B,EAAW,CAC7Bjc,KAAKoa,OAAS6B,EACd,IAAM9a,EAAega,EAAYnb,KAAKoa,QACtCpa,KAAKmR,OAAOhQ,EACd,CACF,MAAO,GAAsB,aAAlB0L,EAAU7D,KAAqB,CACxC,IAAM7H,EAAe,IAAIC,IAAIqP,KAAKC,MAAM7D,EAAU/G,cAClD9F,KAAKmR,OAAOhQ,EACd,MACE8E,QAAQqK,KAAK,6CAA+CzD,EAAU7D,KAE1E,GAAC,CAAAxI,IAAA,SAAAyB,MAED,SAAOd,GACL,IACMiQ,EAAQ,IAAIC,YAAY,wBADd,CAAEC,OAAQnQ,EAAcoQ,SAAS,IAEjDvR,KAAKwR,cAAcJ,EACrB,GAEA,CAAA5Q,IAAA,iBAAAyB,MAMA,SAAemP,GACb,IAAMjQ,EAAega,EAAY/J,EAAM/N,OAAO6Y,UAC9Clc,KAAKmR,OAAOhQ,EACd,GAAC,CAAAX,IAAA,2BAAAyB,MAED,SAAyBhC,EAAMkc,EAAUC,GAAU,IAAAC,EAAA,KAC7CC,EAAO,IAAIC,eACfD,EAAKtP,OAAS,SAAC5C,GAAC,OAAKiS,EAAKG,eAAepS,EAAE,EAC3CkS,EAAKjH,QAAU,kBAAMpP,QAAQqK,KAAK,iCAAD3Q,OAAkCyc,EAAQ,KAAI,EAC/EE,EAAKG,aAAe,OACpBH,EAAKI,KAAK,MAAON,GAAU,GAC3BE,EAAKK,MACP,IAAC,EAAAnc,IAAA,KAAAC,IAjED,WAAkB,MAAO,gBAAkB,GAAC,CAAAD,IAAA,qBAAAC,IAiD5C,WACE,MAAO,CAAC,MACV,IAAC,CArDe,CAqDfgR,EArDwBtE,cAkH1B,IAEKyP,GAAM,SAAAC,GAAA,SAAAD,IAAA,OAAA7c,EAAA,KAAA6c,GAAA1X,EAAA,KAAA0X,EAAArW,UAAA,QAAAX,EAAAgX,EAAAC,GAAAhd,EAAA+c,EAAA,EAAApc,IAAA,cAAAwB,IAIV,SAAgB4C,GACd5E,KAAK2G,UAjCT,SAAwB/B,GACtB,MAAO,4GAAPjF,OAKYiF,EAAY1D,QAAQwB,KAAI,SAACxC,EAAQ6I,GAAC,wDAAApJ,OAExCO,EAAOC,YAAc,qCAAAR,OACGO,EAAOC,YAAW,MAAAR,OAAKO,EAAOD,OAAU8I,EAAI,EAAInE,EAAY1D,QAAQL,OAAS,IAAH,IAAe,OAAS,kCAAAlB,OACrGO,EAAOD,OAAU8I,EAAI,EAAInE,EAAY1D,QAAQL,OAAS,IAAH,IAAe,UAAS,sCAEzFC,KAAK,IAAG,8RAcvB,CAOqBgc,CAAelY,EAClC,IAAC,EAAApE,IAAA,KAAAC,IAJD,WAAkB,MAAO,UAAY,IAAC,CAF5B,CAE4BgR,EAFnBtE,cAuEf4P,GAAI,SAAAC,GAER,SAAAD,IAAc,IAAAE,EAGO,OAHPld,EAAA,KAAAgd,IACZE,EAAA/X,EAAA,KAAA6X,IACKG,SAAW,GAChBD,EAAKE,SAAW,GAAGF,CACrB,CAAC,OAAArX,EAAAmX,EAAAC,GAAAnd,EAAAkd,EAAA,EAAAvc,IAAA,oBAAAyB,MAED,WAAoB,IAAAmb,EAAA,KAClBpd,KAAKqd,UAAYrd,KAAK+F,KAAK+B,cAAc,cACzC9H,KAAKsd,UAAYtd,KAAK+F,KAAK+B,cAAc,oBACzC9H,KAAKud,SAAWvd,KAAK+F,KAAK+B,cAAc,eACxClB,OAAO4W,eAAeC,YAAY,eAAeC,MAAK,WACpDN,EAAKG,SAASI,OAAOP,EACvB,IAEIpd,KAAKiS,SACPjS,KAAK4d,eAAe5d,KAAKiS,SAEvBjS,KAAK+Q,SACP/Q,KAAK6d,eAAe7d,KAAK+Q,QAE7B,GAUA,CAAAvQ,IAAA,2BAAAyB,MAMA,SAAyBhC,EAAMkc,EAAUC,GACvC,IAAM0B,EAAY3B,EAAW,mBAAqB,mBAC5CnK,EAAOoK,EAASzb,MAAM,KAAK+B,KAAI,SAAAkL,GAAC,OAAIA,EAAEC,MAAM,IAE5CuD,EAAQ,IAAIC,YAAYyM,EADd,CAAExM,OAAQ,CAACtR,KAAMgS,GAAOT,SAAS,IAEjD9K,SAAS+K,cAAcJ,EACzB,GAAC,CAAA5Q,IAAA,MAAAC,IAMD,WACE,OAAOT,KAAK2N,aAAa,QAAU3N,KAAK2N,aAAa,aACvD,EAAC3L,IAND,SAAQC,GACNjC,KAAKmK,aAAa,MAAOlI,EAC3B,GAAC,CAAAzB,IAAA,OAAAC,IAMD,WACE,IAAMsd,EAAS/d,KAAKQ,IAAIG,MAAM,KAE9B,OADAsF,QAAQwM,IAAIsL,GACLA,CACT,GAEA,CAAAvd,IAAA,UAAAC,IAOA,WACE,OAAOT,KAAKkd,QACd,EAAClb,IAPD,SAAYiQ,GACVjS,KAAKkd,SAAWjL,EAChBjS,KAAK4d,eAAe3L,EACtB,GAAC,CAAAzR,IAAA,iBAAAyB,MAMD,SAAegQ,GACb,GAAKjS,KAAKsd,UAAV,CACA,IAGMxX,EAAc,IAHEmM,EAAQvP,KAAI,SAAA2F,GAChC,OAAiB,GAAVA,EAAc,IAAMA,EAAQ,EAAI,EACzC,IACwCvH,KAAK,MAAQ,IACrDd,KAAKsd,UAAUxX,YAAcA,CALF,CAM7B,GAAC,CAAAtF,IAAA,UAAAC,IAOD,WACE,OAAOT,KAAKmd,QACd,EAACnb,IAPD,SAAY+O,GACV/Q,KAAKmd,SAAWpM,EAChB/Q,KAAK6d,eAAe9M,EACtB,GAAC,CAAAvQ,IAAA,iBAAAyB,MAMD,SAAe8O,GACR/Q,KAAKud,WACVvd,KAAKud,SAAS5W,UAAY,eAAHhH,OACrBoR,EACCrO,IAAI6M,GACJ7M,KAAI,SAAAsb,GAAI,aAAAre,OAAWqe,EAAI,YACvBld,KAAK,MAAK,eAEf,IAAC,EAAAN,IAAA,qBAAAC,IA/DD,WACE,MAAO,CAAC,MAAO,aACjB,IAAC,CApCO,CA3DE2F,EACV,SAAQ,k5BA0DS6X,CAAI9Q,cAmJtB,IAEK+Q,GAAY,SAAAC,GAAA,SAAAD,IAAA,OAAAne,EAAA,KAAAme,GAAAhZ,EAAA,KAAAgZ,EAAA3X,UAAA,QAAAX,EAAAsY,EAAAC,GAAAte,EAAAqe,EAAA,EAAA1d,IAAA,oBAAAyB,MAIhB,WACOjC,KAAKyH,aAAa,yBACrBzH,KAAKoe,MAAMvV,QAAU,OAEzB,GAAC,CAAArI,IAAA,YAAAwB,IAED,SAAcV,IA3ChB,SAA4ByO,EAASgB,GAAuB,IAAdzD,EAAG/G,UAAA1F,OAAA,QAAAc,IAAA4E,UAAA,GAAAA,UAAA,GAACE,SAChD,GAAIsK,EAAQsN,KAAO,EAAG,CACpBtO,EAAQqO,MAAMvV,QAAU,GACxB,IAAIyV,EAAOvO,EAAQjI,cAAc,eACjC,GAAIwW,EACFA,EAAK3X,UAAY,OACZ,CACL,IAAM4X,EAAYjR,EAAI5G,cAAc,SACpC6X,EAAU5X,UAtBC,wKAuBXoJ,EAAQvI,YAAY+W,GAEpB,IAAMC,EAAUlR,EAAI5G,cAAc,MAClC8X,EAAQC,GAAK,aACbD,EAAQ1Y,YAAc,aACtBiK,EAAQvI,YAAYgX,IAEpBF,EAAOhR,EAAI5G,cAAc,OACpB+X,GAAK,kBACVH,EAAKI,UAAY,aACjB3O,EAAQvI,YAAY8W,EACtB,CAAC,IAEiCK,EAFjCC,EAAA3S,EAE0B8E,GAAO,IAAlC,IAAA6N,EAAA1S,MAAAyS,EAAAC,EAAApgB,KAAA2N,MAAoC,KAAA0S,EAAAhb,EAAA8a,EAAA1c,MAAA,GAAxBzB,EAAGqe,EAAA,GAAE3N,EAAK2N,EAAA,GACdC,EAAWxR,EAAI5G,cAAc,MACnCoY,EAASL,GAAKje,EACdse,EAASnY,UAAYyI,EAAkB8B,GACvCoN,EAAK9W,YAAYsX,EACnB,CAAC,OAAA3T,GAAAyT,EAAAxU,EAAAe,EAAA,SAAAyT,EAAAxS,GAAA,CACH,MACE2D,EAAQqO,MAAMvV,QAAU,MAE5B,CAaIkW,CAAmB/e,KAAMsB,EAC3B,IAAC,EAAAd,IAAA,KAAAC,IAVD,WAAkB,MAAO,iBAAmB,IAAC,CAF7B,CAE6BgR,EAFpBtE,cAgBvB6R,GAAQjH,GAAqB,SAAUE,GAK3C,IAcIgH,EAAS,SAAUC,GAGvB,IAAIC,EAAO,8BACPC,EAAW,EAGXC,EAAI,CACPC,OAAQJ,EAAMD,OAASC,EAAMD,MAAMK,OACnCC,4BAA6BL,EAAMD,OAASC,EAAMD,MAAMM,4BACxDC,KAAM,CACLC,OAAQ,SAASA,EAAOC,GACvB,OAAIA,aAAkBC,EACd,IAAIA,EAAMD,EAAO1W,KAAMyW,EAAOC,EAAOtY,SAAUsY,EAAOE,OACnDpc,MAAMqc,QAAQH,GACjBA,EAAOhd,IAAI+c,GAEXC,EAAOnR,QAAQ,KAAM,SAASA,QAAQ,KAAM,QAAQA,QAAQ,UAAW,IAEhF,EAEAvF,KAAM,SAAU8W,GACf,OAAOxc,OAAOmS,UAAUrW,SAAS2gB,KAAKD,GAAGlf,MAAM,GAAI,EACpD,EAEAof,MAAO,SAAUC,GAIhB,OAHKA,EAAU,MACd3c,OAAO4c,eAAeD,EAAK,OAAQ,CAAEhe,QAASmd,IAExCa,EAAU,IAClB,EAGA/Y,MAAO,SAASiZ,EAAUL,EAAGM,GAC5B,IAAIlZ,EAAOuX,EAAIzV,EAAOqW,EAAEG,KAAKxW,KAAK8W,GAGlC,OAFAM,EAAUA,GAAW,CAAC,EAEdpX,GACP,IAAK,SAEJ,GADAyV,EAAKY,EAAEG,KAAKQ,MAAMF,GACdM,EAAQ3B,GACX,OAAO2B,EAAQ3B,GAKhB,IAAK,IAAIje,KAHT0G,EAAQ,CAAC,EACTkZ,EAAQ3B,GAAMvX,EAEE4Y,EACXA,EAAE3c,eAAe3C,KACpB0G,EAAM1G,GAAO2f,EAAUL,EAAEtf,GAAM4f,IAIjC,OAAOlZ,EAER,IAAK,QAEJ,OADAuX,EAAKY,EAAEG,KAAKQ,MAAMF,GACdM,EAAQ3B,GACJ2B,EAAQ3B,IAEhBvX,EAAQ,GACRkZ,EAAQ3B,GAAMvX,EAEd4Y,EAAEO,SAAQ,SAAUC,EAAGvX,GACtB7B,EAAM6B,GAAKoX,EAAUG,EAAGF,EACzB,IAEOlZ,GAER,QACC,OAAO4Y,EAEV,EAUAS,YAAa,SAAUxQ,GACtB,KAAOA,IAAYoP,EAAK3H,KAAKzH,EAAQ2O,YACpC3O,EAAUA,EAAQ0D,cAEnB,OAAI1D,GACKA,EAAQ2O,UAAU7F,MAAMsG,IAAS,CAAC,CAAE,SAAS,GAAGtc,cAElD,MACR,EASA2d,cAAe,WACd,GAAwB,oBAAb/Z,SACV,OAAO,KAER,GAAI,kBAAmBA,SACtB,OAAOA,SAAS+Z,cAOjB,IACC,MAAM,IAAIhe,KACX,CAAE,MAAO2I,GAQR,IAAI2B,GAAO,+BAA+BkC,KAAK7D,EAAIsV,QAAU,IAAI,GACjE,GAAI3T,EAAK,CACR,IAAI4T,EAAUja,SAASka,qBAAqB,UAC5C,IAAK,IAAI5X,KAAK2X,EACb,GAAIA,EAAQ3X,GAAG+D,KAAOA,EACrB,OAAO4T,EAAQ3X,EAGlB,CACA,OAAO,IACR,CACD,GAGD6X,UAAW,CACVC,OAAQ,SAAUpC,EAAIqC,GACrB,IAAI3B,EAAOE,EAAEG,KAAKtY,MAAMmY,EAAEuB,UAAUnC,IAEpC,IAAK,IAAIje,KAAOsgB,EACf3B,EAAK3e,GAAOsgB,EAAMtgB,GAGnB,OAAO2e,CACR,EAWAxX,aAAc,SAAUoZ,EAAQC,EAAQC,EAAQlb,GAE/C,IAAImb,GADJnb,EAAOA,GAAQsZ,EAAEuB,WACEG,GACfI,EAAM,CAAC,EAEX,IAAK,IAAIC,KAASF,EACjB,GAAIA,EAAQ/d,eAAeie,GAAQ,CAElC,GAAIA,GAASJ,EACZ,IAAK,IAAIK,KAAYJ,EAChBA,EAAO9d,eAAeke,KACzBF,EAAIE,GAAYJ,EAAOI,IAMrBJ,EAAO9d,eAAeie,KAC1BD,EAAIC,GAASF,EAAQE,GAEvB,CAGD,IAAIE,EAAMvb,EAAKgb,GAUf,OATAhb,EAAKgb,GAAUI,EAGf9B,EAAEuB,UAAUW,IAAIlC,EAAEuB,WAAW,SAASpgB,EAAKyB,GACtCA,IAAUqf,GAAO9gB,GAAOugB,IAC3B/gB,KAAKQ,GAAO2gB,EAEd,IAEOA,CACR,EAGAI,IAAK,SAASA,EAAIzB,EAAGjK,EAAU7M,EAAMoX,GACpCA,EAAUA,GAAW,CAAC,EAEtB,IAAIJ,EAAQX,EAAEG,KAAKQ,MAEnB,IAAK,IAAIjX,KAAK+W,EACb,GAAIA,EAAE3c,eAAe4F,GAAI,CACxB8M,EAASkK,KAAKD,EAAG/W,EAAG+W,EAAE/W,GAAIC,GAAQD,GAElC,IAAI7F,EAAW4c,EAAE/W,GACbyY,EAAenC,EAAEG,KAAKxW,KAAK9F,GAEV,WAAjBse,GAA8BpB,EAAQJ,EAAM9c,IAItB,UAAjBse,GAA6BpB,EAAQJ,EAAM9c,MACnDkd,EAAQJ,EAAM9c,KAAa,EAC3Bqe,EAAIre,EAAU2S,EAAU9M,EAAGqX,KAL3BA,EAAQJ,EAAM9c,KAAa,EAC3Bqe,EAAIre,EAAU2S,EAAU,KAAMuK,GAMhC,CAEF,GAEDqB,QAAS,CAAC,EAEVC,aAAc,SAAS3U,EAAO8I,GAC7BwJ,EAAEsC,kBAAkBlb,SAAUsG,EAAO8I,EACtC,EAEA8L,kBAAmB,SAAShW,EAAWoB,EAAO8I,GAC7C,IAAI+L,EAAM,CACT/L,SAAUA,EACVlK,UAAWA,EACX4K,SAAU,oGAGX8I,EAAEwC,MAAMC,IAAI,sBAAuBF,GAEnCA,EAAIG,SAAWve,MAAMiS,UAAU7U,MAAMohB,MAAMJ,EAAIjW,UAAU5D,iBAAiB6Z,EAAIrL,WAE9E8I,EAAEwC,MAAMC,IAAI,gCAAiCF,GAE7C,IAAK,IAAW7R,EAAPhH,EAAI,EAAYgH,EAAU6R,EAAIG,SAAShZ,MAC/CsW,EAAE4C,iBAAiBlS,GAAmB,IAAVhD,EAAgB6U,EAAI/L,SAElD,EAEAoM,iBAAkB,SAASlS,EAAShD,EAAO8I,GAE1C,IAAIqM,EAAW7C,EAAEG,KAAKe,YAAYxQ,GAC9BmR,EAAU7B,EAAEuB,UAAUsB,GAG1BnS,EAAQ2O,UAAY3O,EAAQ2O,UAAUnQ,QAAQ4Q,EAAM,IAAI5Q,QAAQ,OAAQ,KAAO,aAAe2T,EAG9F,IAAIC,EAASpS,EAAQ2H,WACjByK,GAA4C,QAAlCA,EAAOnX,SAASnI,gBAC7Bsf,EAAOzD,UAAYyD,EAAOzD,UAAUnQ,QAAQ4Q,EAAM,IAAI5Q,QAAQ,OAAQ,KAAO,aAAe2T,GAG7F,IAEIN,EAAM,CACT7R,QAASA,EACTmS,SAAUA,EACVhB,QAASA,EACTkB,KANUrS,EAAQjK,aASnB,SAASuc,EAAsBC,GAC9BV,EAAIU,gBAAkBA,EAEtBjD,EAAEwC,MAAMC,IAAI,gBAAiBF,GAE7BA,EAAI7R,QAAQpJ,UAAYib,EAAIU,gBAE5BjD,EAAEwC,MAAMC,IAAI,kBAAmBF,GAC/BvC,EAAEwC,MAAMC,IAAI,WAAYF,GACxB/L,GAAYA,EAASkK,KAAK6B,EAAI7R,QAC/B,CAIA,GAFAsP,EAAEwC,MAAMC,IAAI,sBAAuBF,IAE9BA,EAAIQ,KAGR,OAFA/C,EAAEwC,MAAMC,IAAI,WAAYF,QACxB/L,GAAYA,EAASkK,KAAK6B,EAAI7R,UAM/B,GAFAsP,EAAEwC,MAAMC,IAAI,mBAAoBF,GAE3BA,EAAIV,QAKT,GAAInU,GAASmS,EAAMqD,OAAQ,CAC1B,IAAIC,EAAS,IAAID,OAAOlD,EAAEoD,UAE1BD,EAAOE,UAAY,SAASC,GAC3BN,EAAsBM,EAAI1Z,KAC3B,EAEAuZ,EAAOI,YAAYnS,KAAKoS,UAAU,CACjCX,SAAUN,EAAIM,SACdE,KAAMR,EAAIQ,KACVU,gBAAgB,IAElB,MAECT,EAAsBhD,EAAE0D,UAAUnB,EAAIQ,KAAMR,EAAIV,QAASU,EAAIM,gBAlB7DG,EAAsBhD,EAAEG,KAAKC,OAAOmC,EAAIQ,MAoB1C,EAEAW,UAAW,SAAU5a,EAAM+Y,EAASgB,GACnC,IAAIN,EAAM,CACTQ,KAAMja,EACN+Y,QAASA,EACTgB,SAAUA,GAKX,OAHA7C,EAAEwC,MAAMC,IAAI,kBAAmBF,GAC/BA,EAAIlC,OAASL,EAAE2D,SAASpB,EAAIQ,KAAMR,EAAIV,SACtC7B,EAAEwC,MAAMC,IAAI,iBAAkBF,GACvBjC,EAAMkD,UAAUxD,EAAEG,KAAKC,OAAOmC,EAAIlC,QAASkC,EAAIM,SACvD,EAEAc,SAAU,SAAS7a,EAAM+Y,GACxB,IAAI+B,EAAO/B,EAAQ+B,KACnB,GAAIA,EAAM,CACT,IAAK,IAAI7B,KAAS6B,EACjB/B,EAAQE,GAAS6B,EAAK7B,UAGhBF,EAAQ+B,IAChB,CAEA,IAAIC,EAAY,IAAIC,EAKpB,OAJAC,EAASF,EAAWA,EAAUvW,KAAMxE,GAEpCkb,EAAalb,EAAM+a,EAAWhC,EAASgC,EAAUvW,KAAM,GAwSzD,SAAiB2R,GAGhB,IAFA,IAAIgF,EAAQ,GACRC,EAAOjF,EAAK3R,KAAK6W,KACdD,IAASjF,EAAKmF,MACpBH,EAAMha,KAAKia,EAAKthB,OAChBshB,EAAOA,EAAKC,KAEb,OAAOF,CACR,CA9SSI,CAAQR,EAChB,EAEArB,MAAO,CACN8B,IAAK,CAAC,EAEN7V,IAAK,SAAU7N,EAAM4V,GACpB,IAAIgM,EAAQxC,EAAEwC,MAAM8B,IAEpB9B,EAAM5hB,GAAQ4hB,EAAM5hB,IAAS,GAE7B4hB,EAAM5hB,GAAMqJ,KAAKuM,EAClB,EAEAiM,IAAK,SAAU7hB,EAAM2hB,GACpB,IAAIgC,EAAYvE,EAAEwC,MAAM8B,IAAI1jB,GAE5B,GAAK2jB,GAAcA,EAAU/iB,OAI7B,IAAK,IAASgV,EAAL9M,EAAE,EAAa8M,EAAW+N,EAAU7a,MAC5C8M,EAAS+L,EAEX,GAGDjC,MAAOA,GAKR,SAASA,EAAM3W,EAAM5B,EAASwY,EAAOiE,EAAYC,GAChD9jB,KAAKgJ,KAAOA,EACZhJ,KAAKoH,QAAUA,EACfpH,KAAK4f,MAAQA,EAEb5f,KAAKa,OAAmC,GAAzBgjB,GAAc,IAAIhjB,OACjCb,KAAK8jB,SAAWA,CACjB,CAmDA,SAAST,EAAalb,EAAM+a,EAAWhC,EAAS6C,EAAWC,EAAUC,EAAS5gB,GAC7E,IAAK,IAAI+d,KAASF,EACjB,GAAKA,EAAQ/d,eAAeie,IAAWF,EAAQE,GAA/C,CAIA,IAAI8C,EAAWhD,EAAQE,GACvB8C,EAAW1gB,MAAMqc,QAAQqE,GAAYA,EAAW,CAACA,GAEjD,IAAK,IAAIC,EAAI,EAAGA,EAAID,EAASrjB,SAAUsjB,EAAG,CACzC,GAAI9gB,GAAUA,GAAU+d,EAAQ,IAAM+C,EACrC,OAGD,IAAIC,EAAUF,EAASC,GACtBpD,EAASqD,EAAQrD,OACjBsD,IAAeD,EAAQC,WACvBP,IAAWM,EAAQN,OACnBQ,EAAmB,EACnB1E,EAAQwE,EAAQxE,MAEjB,GAAIkE,IAAWM,EAAQA,QAAQvM,OAAQ,CAEtC,IAAI0M,EAAQH,EAAQA,QAAQhlB,WAAWyZ,MAAM,aAAa,GAC1DuL,EAAQA,QAAUI,OAAOJ,EAAQA,QAAQzf,OAAQ4f,EAAQ,IAC1D,CAEAH,EAAUA,EAAQA,SAAWA,EAE7B,IACC,IAAIK,EAAcV,EAAUP,KAAMlL,EAAM0L,EACxCS,IAAgBvB,EAAUO,KAC1BnL,GAAOmM,EAAYxiB,MAAMpB,OAAQ4jB,EAAcA,EAAYjB,KAC1D,CAED,IAAIhK,EAAMiL,EAAYxiB,MAEtB,GAAIihB,EAAUriB,OAASsH,EAAKtH,OAE3B,OAGD,KAAI2Y,aAAemG,GAAnB,CAIA,IAAI+E,EAAc,EAElB,GAAIZ,GAAUW,GAAevB,EAAUO,KAAKkB,KAAM,CAGjD,GAFAP,EAAQQ,UAAYtM,IAChBO,EAAQuL,EAAQpV,KAAK7G,IAExB,MAGD,IAAI1E,EAAOoV,EAAMxQ,OAASgc,GAAcxL,EAAM,GAAKA,EAAM,GAAGhY,OAAS,GACjEgkB,EAAKhM,EAAMxQ,MAAQwQ,EAAM,GAAGhY,OAC5BikB,EAAIxM,EAIR,IADAwM,GAAKL,EAAYxiB,MAAMpB,OAChB4C,GAAQqhB,GAEdA,IADAL,EAAcA,EAAYjB,MACTvhB,MAAMpB,OAOxB,GAHAyX,EADAwM,GAAKL,EAAYxiB,MAAMpB,OAInB4jB,EAAYxiB,iBAAiB0d,EAChC,SAID,IACC,IAAI/R,EAAI6W,EACR7W,IAAMsV,EAAUO,OAASqB,EAAID,GAA0B,iBAAZjX,EAAE3L,QAAuB2L,EAAE+W,KAAK1iB,MAAM6hB,QACjFlW,EAAIA,EAAE4V,KAENkB,IACAI,GAAKlX,EAAE3L,MAAMpB,OAEd6jB,IAGAlL,EAAMrR,EAAKvH,MAAM0X,EAAKwM,GACtBjM,EAAMxQ,OAASiQ,CAChB,KAAO,CACN8L,EAAQQ,UAAY,EAEpB,IAAI/L,EAAQuL,EAAQpV,KAAKwK,EAC1B,CAEA,GAAKX,EAAL,CAQIwL,IACHC,EAAmBzL,EAAM,GAAKA,EAAM,GAAGhY,OAAS,GAKhDgkB,GAFGphB,EAAOoV,EAAMxQ,MAAQic,IACxBzL,EAAQA,EAAM,GAAGjY,MAAM0jB,IACLzjB,OAFnB,IAGCmgB,EAASxH,EAAI5Y,MAAM,EAAG6C,GACtBshB,EAAQvL,EAAI5Y,MAAMikB,GAEfG,EAAaP,EAAYE,KAoB7B,GAlBI3D,IACHgE,EAAa5B,EAASF,EAAW8B,EAAYhE,GAC7C1I,GAAO0I,EAAOngB,QAGfokB,EAAY/B,EAAW8B,EAAYN,GAGnCD,EAAcrB,EAASF,EAAW8B,EADpB,IAAIrF,EAAMyB,EAAOL,EAAS1B,EAAE2D,SAASnK,EAAOkI,GAAUlI,EAAO+G,EAAO/G,EAAOiL,IAGrFiB,GACH3B,EAASF,EAAWuB,EAAaM,GAI9BL,EAAc,GACjBrB,EAAalb,EAAM+a,EAAWhC,EAASuD,EAAYE,KAAMrM,GAAK,EAAM8I,EAAQ,IAAM+C,GAE/EF,EACH,KAjCD,MALC,GAAIA,EACH,KApDF,CA0FD,CACD,CAnIA,CAqIF,CAaA,SAASd,IAER,IAAIxW,EAAO,CAAE1K,MAAO,KAAM0iB,KAAM,KAAMnB,KAAM,MAExCC,EAAO,CAAExhB,MAAO,KAAM0iB,KAAMhY,EAAM6W,KAAM,MAC5C7W,EAAK6W,KAAOC,EAGZzjB,KAAK2M,KAAOA,EAEZ3M,KAAKyjB,KAAOA,EACZzjB,KAAKa,OAAS,CACf,CAUA,SAASuiB,EAAS9E,EAAMiF,EAAMthB,GAE7B,IAAIuhB,EAAOD,EAAKC,KAEZ0B,EAAU,CAAEjjB,MAAOA,EAAO0iB,KAAMpB,EAAMC,KAAMA,GAKhD,OAJAD,EAAKC,KAAO0B,EACZ1B,EAAKmB,KAAOO,EACZ5G,EAAKzd,SAEEqkB,CACR,CAQA,SAASD,EAAY3G,EAAMiF,EAAM4B,GAEhC,IADA,IAAI3B,EAAOD,EAAKC,KACPza,EAAI,EAAGA,EAAIoc,GAAS3B,IAASlF,EAAKmF,KAAM1a,IAChDya,EAAOA,EAAKA,KAEbD,EAAKC,KAAOA,EACZA,EAAKmB,KAAOpB,EACZjF,EAAKzd,QAAUkI,CAChB,CAiBA,GAnRAmW,EAAMD,MAAQI,EAWdM,EAAMkD,UAAY,SAASA,EAAU/C,EAAGoC,GACvC,GAAgB,iBAALpC,EACV,OAAOA,EAER,GAAItc,MAAMqc,QAAQC,GAAI,CACrB,IAAI5T,EAAI,GAIR,OAHA4T,EAAEO,SAAQ,SAAUjW,GACnB8B,GAAK2W,EAAUzY,EAAG8X,EACnB,IACOhW,CACR,CAEA,IAAI0V,EAAM,CACT5Y,KAAM8W,EAAE9W,KACR5B,QAASyb,EAAU/C,EAAE1Y,QAAS8a,GAC9BjY,IAAK,OACLmb,QAAS,CAAC,QAAStF,EAAE9W,MACrBqc,WAAY,CAAC,EACbnD,SAAUA,GAGPoD,EAAUxF,EAAEF,MACZ0F,IACC9hB,MAAMqc,QAAQyF,GACjB9hB,MAAMiS,UAAUnM,KAAK0Y,MAAMJ,EAAIwD,QAASE,GAExC1D,EAAIwD,QAAQ9b,KAAKgc,IAInBjG,EAAEwC,MAAMC,IAAI,OAAQF,GAEpB,IAAIyD,EAAa,GACjB,IAAK,IAAIplB,KAAQ2hB,EAAIyD,WACpBA,GAAc,IAAMplB,EAAO,MAAQ2hB,EAAIyD,WAAWplB,IAAS,IAAIsO,QAAQ,KAAM,UAAY,IAG1F,MAAO,IAAMqT,EAAI3X,IAAM,WAAa2X,EAAIwD,QAAQtkB,KAAK,KAAO,IAAMukB,EAAa,IAAMzD,EAAIxa,QAAU,KAAOwa,EAAI3X,IAAM,GACrH,GAkOKiV,EAAMzY,SACV,OAAKyY,EAAMqG,kBAKNlG,EAAEE,6BAENL,EAAMqG,iBAAiB,WAAW,SAAU5C,GAC3C,IAAI6C,EAAU/U,KAAKC,MAAMiS,EAAI1Z,MAC5BkW,EAAOqG,EAAQtD,SACfE,EAAOoD,EAAQpD,KACfU,EAAiB0C,EAAQ1C,eAE1B5D,EAAM0D,YAAYvD,EAAE0D,UAAUX,EAAM/C,EAAEuB,UAAUzB,GAAOA,IACnD2D,GACH5D,EAAMuG,OAER,IAAG,GAGGpG,GAlBCA,EAsBT,IAAIjK,EAASiK,EAAEG,KAAKgB,gBAUpB,SAASkF,IACHrG,EAAEC,QACND,EAAEqC,cAEJ,CAEA,GAdItM,IACHiK,EAAEoD,SAAWrN,EAAOtI,IAEhBsI,EAAO3N,aAAa,iBACvB4X,EAAEC,QAAS,KAURD,EAAEC,OAAQ,CAOd,IAAIzP,EAAapJ,SAASoJ,WACP,YAAfA,GAA2C,gBAAfA,GAAgCuF,GAAUA,EAAOuQ,MAChFlf,SAAS8e,iBAAiB,mBAAoBG,GAE1C9e,OAAOoV,sBACVpV,OAAOoV,sBAAsB0J,GAE7B9e,OAAOgf,WAAWF,EAAgC,GAGrD,CAEA,OAAOrG,CAEP,CA7rBa,CAdkB,oBAAXzY,OACjBA,OAE6B,oBAAtBif,mBAAqC/N,gBAAgB+N,kBAC3D/N,KACA,CAAC,GAwsBAG,EAAOC,UACXD,EAAOC,QAAU+G,QAIY,IAAnBtH,IACVA,EAAesH,MAAQA,GAQxBA,EAAM2B,UAAUkF,OAAS,CACxB,QAAW,kBACX,OAAU,iBACV,QAAW,CACV1B,QAAS,4GACTN,QAAQ,GAET,MAAS,0BACT,IAAO,CACNM,QAAS,wHACTN,QAAQ,EACR/C,OAAQ,CACP,IAAO,CACNqD,QAAS,kBACTrD,OAAQ,CACP,YAAe,QACf,UAAa,iBAGf,aAAc,CACbqD,QAAS,sCACTrD,OAAQ,CACP,YAAe,CACd,KACA,CACCqD,QAAS,mBACTC,YAAY,MAKhB,YAAe,OACf,YAAa,CACZD,QAAS,YACTrD,OAAQ,CACP,UAAa,mBAMjB,OAAU,qBAGX9B,EAAM2B,UAAUkF,OAAY,IAAE/E,OAAO,cAAcA,OAAe,OACjE9B,EAAM2B,UAAUkF,OAAe,OAGhC7G,EAAM4C,MAAM/T,IAAI,QAAQ,SAAS8T,GAEf,WAAbA,EAAI5Y,OACP4Y,EAAIyD,WAAkB,MAAIzD,EAAIxa,QAAQmH,QAAQ,QAAS,KAEzD,IAEAjL,OAAO4c,eAAejB,EAAM2B,UAAUkF,OAAO7b,IAAK,aAAc,CAY/DhI,MAAO,SAAoB8jB,EAAS5G,GACnC,IAAI6G,EAAsB,CAAC,EAC3BA,EAAoB,YAAc7G,GAAQ,CACzCiF,QAAS,oCACTC,YAAY,EACZtD,OAAQ9B,EAAM2B,UAAUzB,IAEzB6G,EAA2B,MAAI,uBAE/B,IAAIjF,EAAS,CACZ,iBAAkB,CACjBqD,QAAS,4BACTrD,OAAQiF,IAGVjF,EAAO,YAAc5B,GAAQ,CAC5BiF,QAAS,UACTrD,OAAQ9B,EAAM2B,UAAUzB,IAGzB,IAAI8G,EAAM,CAAC,EACXA,EAAIF,GAAW,CACd3B,QAASI,OAAO,mEAAmE7f,OAAO4J,QAAQ,OAAO,WAAc,OAAOwX,CAAS,IAAI,KAC3I1B,YAAY,EACZP,QAAQ,EACR/C,OAAQA,GAGT9B,EAAM2B,UAAUjZ,aAAa,SAAU,QAASse,EACjD,IAGDhH,EAAM2B,UAAUsF,IAAMjH,EAAM2B,UAAUC,OAAO,SAAU,CAAC,GACxD5B,EAAM2B,UAAU5C,KAAOiB,EAAM2B,UAAUkF,OACvC7G,EAAM2B,UAAUuF,OAASlH,EAAM2B,UAAUkF,OACzC7G,EAAM2B,UAAUwF,IAAMnH,EAAM2B,UAAUkF,OAOrC,SAAU7G,GAEV,IAAI5E,EAAS,gDAEb4E,EAAM2B,UAAUyF,IAAM,CACrB,QAAW,mBACX,OAAU,CACTjC,QAAS,iCACTrD,OAAQ,CACP,KAAQ,WACR,6BAA8B,CAC7BqD,QAAS,8EACTC,YAAY,EACZzE,MAAO,cAKV,IAAO,CACNwE,QAASI,OAAO,YAAcnK,EAAO1V,OAAS,kBAAmB,KACjEmf,QAAQ,EACR/C,OAAQ,CACP,SAAY,QACZ,YAAe,YAGjB,SAAYyD,OAAO,wBAA0BnK,EAAO1V,OAAS,kBAC7D,OAAU,CACTyf,QAAS/J,EACTyJ,QAAQ,GAET,SAAY,+CACZ,UAAa,gBACb,SAAY,oBACZ,YAAe,aAGhB7E,EAAM2B,UAAUyF,IAAY,OAAEtF,OAAOkC,KAAOhE,EAAM2B,UAAUyF,IAE5D,IAAIP,EAAS7G,EAAM2B,UAAUkF,OACzBA,IACHA,EAAO7b,IAAIqc,WAAW,QAAS,OAE/BrH,EAAM2B,UAAUjZ,aAAa,SAAU,aAAc,CACpD,aAAc,CACbyc,QAAS,6CACTrD,OAAQ,CACP,YAAa,CACZqD,QAAS,aACTrD,OAAQ+E,EAAO7b,IAAI8W,QAEpB,YAAe,wBACf,aAAc,CACbqD,QAAS,MACTrD,OAAQ9B,EAAM2B,UAAUyF,MAG1BzG,MAAO,iBAENkG,EAAO7b,KAGX,CA9DA,CA8DCgV,GAOFA,EAAM2B,UAAU2F,MAAQ,CACvB,QAAW,CACV,CACCnC,QAAS,kCACTC,YAAY,GAEb,CACCD,QAAS,mBACTC,YAAY,EACZP,QAAQ,IAGV,OAAU,CACTM,QAAS,iDACTN,QAAQ,GAET,aAAc,CACbM,QAAS,2FACTC,YAAY,EACZtD,OAAQ,CACP,YAAe,UAGjB,QAAW,6GACX,QAAW,qBACX,SAAY,YACZ,OAAU,wDACV,SAAY,+CACZ,YAAe,iBAQhB9B,EAAM2B,UAAU4F,WAAavH,EAAM2B,UAAUC,OAAO,QAAS,CAC5D,aAAc,CACb5B,EAAM2B,UAAU2F,MAAM,cACtB,CACCnC,QAAS,0FACTC,YAAY,IAGd,QAAW,CACV,CACCD,QAAS,kCACTC,YAAY,GAEb,CACCD,QAAS,uXACTC,YAAY,IAGd,OAAU,gOAEV,SAAY,oFACZ,SAAY,qFAGbpF,EAAM2B,UAAU4F,WAAW,cAAc,GAAGpC,QAAU,uEAEtDnF,EAAM2B,UAAUjZ,aAAa,aAAc,UAAW,CACrD,MAAS,CACRyc,QAAS,0JACTC,YAAY,EACZP,QAAQ,GAGT,oBAAqB,CACpBM,QAAS,gKACTxE,MAAO,YAER,UAAa,CACZ,CACCwE,QAAS,wGACTC,YAAY,EACZtD,OAAQ9B,EAAM2B,UAAU4F,YAEzB,CACCpC,QAAS,gDACTrD,OAAQ9B,EAAM2B,UAAU4F,YAEzB,CACCpC,QAAS,oDACTC,YAAY,EACZtD,OAAQ9B,EAAM2B,UAAU4F,YAEzB,CACCpC,QAAS,qcACTC,YAAY,EACZtD,OAAQ9B,EAAM2B,UAAU4F,aAG1B,SAAY,8BAGbvH,EAAM2B,UAAUjZ,aAAa,aAAc,SAAU,CACpD,kBAAmB,CAClByc,QAAS,oEACTN,QAAQ,EACR/C,OAAQ,CACP,uBAAwB,CACvBqD,QAAS,QACTxE,MAAO,UAER,cAAiB,CAChBwE,QAAS,6DACTC,YAAY,EACZtD,OAAQ,CACP,4BAA6B,CAC5BqD,QAAS,UACTxE,MAAO,eAERqD,KAAMhE,EAAM2B,UAAU4F,aAGxB,OAAU,cAKTvH,EAAM2B,UAAUkF,QACnB7G,EAAM2B,UAAUkF,OAAO7b,IAAIqc,WAAW,SAAU,cAGjDrH,EAAM2B,UAAU6F,GAAKxH,EAAM2B,UAAU4F,WAQhB,oBAAT1O,MAAyBA,KAAKmH,OAAUnH,KAAKrR,UAAaA,SAASqB,gBAO9EgQ,KAAKmH,MAAMyH,cAAgB,SAAS/a,GACnCA,EAAYA,GAAalF,SAEzB,IAAIkgB,EAAa,CAChB,GAAM,aACN,GAAM,SACN,GAAM,OACN,IAAO,aACP,KAAQ,aACR,GAAM,OACN,IAAO,QACP,EAAK,IACL,IAAO,SAGRnjB,MAAMiS,UAAU7U,MAAMmf,KAAKpU,EAAU5D,iBAAiB,kBAAkBsY,SAAQ,SAAUuG,GAEzF,IAAIA,EAAInf,aAAa,mBAArB,CASA,IAJA,IAEIya,EAFApV,EAAM8Z,EAAIjZ,aAAa,YAEbwU,EAASyE,EACnBzH,EAAO,8BACJgD,IAAWhD,EAAK3H,KAAK2K,EAAOzD,YAClCyD,EAASA,EAAOzK,WAOjB,GAJIyK,IACHD,GAAY0E,EAAIlI,UAAU7F,MAAMsG,IAAS,CAAC,CAAE,KAAK,KAG7C+C,EAAU,CACd,IAAI2E,GAAa/Z,EAAI+L,MAAM,aAAe,CAAC,CAAE,KAAK,GAClDqJ,EAAWyE,EAAWE,IAAcA,CACrC,CAEA,IAAIzE,EAAO3b,SAASC,cAAc,QAClC0b,EAAK1D,UAAY,YAAcwD,EAE/B0E,EAAI9gB,YAAc,GAElBsc,EAAKtc,YAAc,WAEnB8gB,EAAIpf,YAAY4a,GAEhB,IAAI0E,EAAM,IAAIvK,eAEduK,EAAIpK,KAAK,MAAO5P,GAAK,GAErBga,EAAIC,mBAAqB,WACF,GAAlBD,EAAIjX,aAEHiX,EAAIE,OAAS,KAAOF,EAAIG,cAC3B7E,EAAKtc,YAAcghB,EAAIG,aAEvBhI,EAAMgD,iBAAiBG,GAEvBwE,EAAIzc,aAAa,kBAAmB,KAE5B2c,EAAIE,QAAU,IACtB5E,EAAKtc,YAAc,WAAaghB,EAAIE,OAAS,yBAA2BF,EAAII,WAG5E9E,EAAKtc,YAAc,2CAGtB,EAEAghB,EAAInK,KAAK,KApDT,CAqDD,GACD,EAEAlW,SAAS8e,iBAAiB,oBAAoB,WAE7CzN,KAAKmH,MAAMyH,eACZ,IAGD,IAEAzH,MAAM2B,UAAUuG,OAAS,CACxB,QAAW,CACV/C,QAAS,eACTC,YAAY,GAEb,uBAAwB,CACvBD,QAAS,sEACTN,QAAQ,EACR/C,OAAQ,CACP,cAAiB,CAEhBqD,QAAS,2EACTC,YAAY,EACZtD,OAAQ,CACP,cAAe,CACdqD,QAAS,qBACTC,YAAY,GAEb,oBAAqB,CACpBD,QAAS,kBACTxE,MAAO,eAERqD,KAAM,OAGR,OAAU,YAGZ,uBAAwB,CACvBmB,QAAS,uCACTN,QAAQ,EACRlE,MAAO,UAER,OAAU,CACTwE,QAAS,mDACTN,QAAQ,GAET,SAAY,CACXM,QAAS,4CACTC,YAAY,GAEb,aAAc,CACbD,QAAS,mBACTC,YAAY,GAEb,UAAa,CACZD,QAAS,yBACTC,YAAY,EACZzE,MAAO,CAAC,aAAc,eACtBmB,OAAQ,CACP,YAAe,OAGjB,QAAW,mMACX,QAAW,shBACX,QAAW,0BACX,OAAU,6FACV,SAAY,oDACZ,YAAe,iBAGhB9B,MAAM2B,UAAUuG,OAAO,wBAAwBpG,OAAsB,cAAEA,OAAOkC,KAAOhE,MAAM2B,UAAUuG,OAErGlI,MAAM2B,UAAUwG,GAAKnI,MAAM2B,UAAUuG,OAErClI,MAAM2B,UAAU2F,MAAQ,CACvB,QAAW,CACV,CACCnC,QAAS,kCACTC,YAAY,GAEb,CACCD,QAAS,mBACTC,YAAY,EACZP,QAAQ,IAGV,OAAU,CACTM,QAAS,iDACTN,QAAQ,GAET,aAAc,CACbM,QAAS,2FACTC,YAAY,EACZtD,OAAQ,CACP,YAAe,UAGjB,QAAW,6GACX,QAAW,qBACX,SAAY,YACZ,OAAU,wDACV,SAAY,+CACZ,YAAe,iBAGhB9B,MAAM2B,UAAUyG,IAAM,CACrB,QAAW,yCAEX,OAAU,CACTjD,QAAS,uFACTN,QAAQ,GAET,OAAU,wGACV,QAAW,0HACX,SAAY,2BACZ,SAAY,CACX,wCACA,CAECM,QAAS,qBACTC,YAAY,IAGd,YAAe,uBAGhB,SAAUpF,GAKT,IAAIqI,EAAU,0oCACVC,EAAe,CAClB,YAAe,CACdnD,QAASI,OAAO,MAAQ8C,GACxB1H,MAAO,YAER,SAAY,CAEX,CACCwE,QAAS,sBACTN,QAAQ,EACR/C,OAAQ,CAEP,SAAY,CACX,CACCqD,QAAS,uBACTC,YAAY,GAEb,WAED,OAAU,0DAEV,SAAY,6FAEZ,YAAe,oBAIjB,CACCD,QAAS,qCACTN,QAAQ,EACR/C,OAAQ,CACP,SAAY,oBAId,CACCqD,QAAS,cACTN,QAAQ,EACR/C,OAAQ,CACP,SAAY,mCACZ,YAAe,SACf,YAAe,CACdqD,QAASI,OAAO,QAAU8C,GAC1BjD,YAAY,EACZzE,MAAO,cAIV,sBAGD,OAAU,wFAGXX,EAAM2B,UAAU4G,KAAO,CACtB,QAAW,CACVpD,QAAS,aACTxE,MAAO,aAER,QAAW,CACVwE,QAAS,kBACTC,YAAY,GAEb,gBAAiB,CAKhB,CAECD,QAAS,+CACTC,YAAY,EACZzE,MAAO,YAER,CAECwE,QAAS,2BACTxE,MAAO,aAIT,gBAAiB,CAChBwE,QAAS,sCACTxE,MAAO,WACPyE,YAAY,GAIb,cAAe,CACdD,QAAS,gCACTrD,OAAQ,CACP,YAAe,CACdqD,QAASI,OAAO,uBAAyB8C,GACzCjD,YAAY,EACZzE,MAAO,aAGTA,MAAO,WACPyE,YAAY,GAEb,OAAU,CAET,CACCD,QAAS,iEACTC,YAAY,EACZP,QAAQ,EACR/C,OAAQwG,GAIT,CACCnD,QAAS,wEACTC,YAAY,EACZP,QAAQ,GAGT,CACCM,QAAS,0EACTC,YAAY,EACZP,QAAQ,EACR/C,OAAQwG,IAGV,YAAe,CACdnD,QAASI,OAAO,OAAS8C,GACzB1H,MAAO,YAER,SAAY2H,EAAaE,SACzB,SAAY,CACXrD,QAAS,2/CACTC,YAAY,GAEb,QAAW,CACVD,QAAS,gHACTC,YAAY,GAGb,QAAW,CACVD,QAAS,6SACTC,YAAY,EAEZzE,MAAO,cAER,QAAW,CACVwE,QAAS,iDACTC,YAAY,GAEb,kBAAmB,CAClBD,QAAS,UACTxE,MAAO,aAER,SAAY,CAEXwE,QAAS,6EACTrD,OAAQ,CACP,kBAAmB,CAClBqD,QAAS,MACTxE,MAAO,eAIV,YAAe,iCACf,OAAU,CACTwE,QAAS,qCACTC,YAAY,IAsBd,IAjBA,IAAIqD,EAAa,CAChB,UACA,gBACA,gBACA,cACA,SACA,cACA,WACA,UACA,UACA,UACA,kBACA,WACA,cACA,UAEG3G,EAASwG,EAAaE,SAAS,GAAG1G,OAC9BhY,EAAI,EAAGA,EAAI2e,EAAW7mB,OAAQkI,IACrCgY,EAAO2G,EAAW3e,IAAMkW,EAAM2B,UAAU4G,KAAKE,EAAW3e,IAGzDkW,EAAM2B,UAAU+G,MAAQ1I,EAAM2B,UAAU4G,IACxC,CArMD,CAqMGvI,OAEHA,MAAM2B,UAAUgH,GAAK3I,MAAM2B,UAAUC,OAAO,QAAS,CACpD,QAAW,sKACX,QAAW,2LACX,QAAW,gCACX,SAAY,wFACZ,OAAU,4DACV,OAAU,CACTuD,QAAS,qCACTN,QAAQ,YAGH7E,MAAM2B,UAAUgH,GAAG,cAEzB,SAAU3I,GAGV,IAAI4I,EAAQ,6CAA6CljB,OAazD,SAASmjB,EAAa1D,EAAS2D,GAK9B,OAJA3D,EAAUA,EAAQ7V,QAAQ,YAAY,WAAc,OAAOsZ,CAAO,IAC9DE,IACH3D,EAAUA,EAAU,IAAMA,EAAQ7V,QAAQ,KAAM,QAE1CiW,OAAO,0BAA0B7f,OAAS,MAAQyf,EAAU,IACpE,CAGA,IAAI4D,EAAY,2CAA2CrjB,OACvDsjB,EAAW,sCAAsCtjB,OAAO4J,QAAQ,OAAO,WAAc,OAAOyZ,CAAW,IACvGE,EAAY,sEAAsEvjB,OAGtFsa,EAAM2B,UAAUuH,SAAWlJ,EAAM2B,UAAUC,OAAO,SAAU,CAAC,GAC7D5B,EAAM2B,UAAUjZ,aAAa,WAAY,SAAU,CAClD,WAAc,CAEbyc,QAAS,kBACTxE,MAAO,eAER,MAAS,CACRwE,QAASI,OAAO,IAAMyD,EAAWC,EAAY,MAAQD,EAAW,KAAM,KACtElH,OAAQ,CACP,kBAAmB,CAClBqD,QAASI,OAAO,KAAOyD,EAAWC,EAAY,OAASD,EAAW,OAClE5D,YAAY,EACZtD,OAAQ,CACP,aAAc,CACbqD,QAASI,OAAOwD,GAChBjH,OAAQ9B,EAAM2B,UAAUuH,UAEzB,YAAe,OAGjB,aAAc,CACb/D,QAASI,OAAO,KAAOyD,EAAW,IAAMC,EAAY,KACpD7D,YAAY,EACZtD,OAAQ,CACP,YAAe,iBAGjB,mBAAoB,CACnBqD,QAASI,OAAO,IAAMyD,EAAW,KACjClH,OAAQ,CACP,eAAgB,CACfqD,QAASI,OAAOwD,GAChBpI,MAAO,YACPmB,OAAQ9B,EAAM2B,UAAUuH,UAEzB,YAAe,SAKnB,KAAQ,CACP,CAEC/D,QAAS,uFACTC,YAAY,EACZzE,MAAO,WAER,CAGCwE,QAAS,sBACTxE,MAAO,WAER,CAICwE,QAAS,qBACTN,QAAQ,EACR/C,OAAQ,CACP,aAAc,CACbqD,QAAS,qDACTC,YAAY,GAEb,gBAAiB,CAChBD,QAAS,WACTC,YAAY,GAEb,YAAe,SAIlB,MAAS,CACR,CAMCD,QAAS,0CACTxE,MAAO,YACPmB,OAAQ,CACPqH,YAAa,cAGf,CAGChE,QAAS,cACTC,YAAY,EACZzE,MAAO,YACPmB,OAAQ,CACPqH,YAAa,aAIhB,GAAM,CAKLhE,QAAS,wCACTC,YAAY,EACZzE,MAAO,eAER,KAAQ,CAKPwE,QAAS,mCACTC,YAAY,EACZzE,MAAO,eAER,gBAAiB,CAKhBwE,QAAS,qHACTrD,OAAQ,CACP,SAAY,CACXqD,QAAS,gBACTC,YAAY,GAEb,OAAU,+DACV,YAAe,kBAEhBzE,MAAO,OAER,KAAQ,CAKPwE,QAAS0D,EAAa,4CAA4CnjB,QAAQ,GAC1E0f,YAAY,EACZP,QAAQ,EACR/C,OAAQ,CACP,QAAW,CACVqD,QAAS,sBACTC,YAAY,EACZtD,OAAQ,CAAC,GAEV,YAAe,YAGjB,OAAU,CAKTqD,QAAS0D,EAAa,4CAA4CnjB,QAAQ,GAC1E0f,YAAY,EACZP,QAAQ,EACR/C,OAAQ,CACP,QAAW,CACVqD,QAAS,oBACTC,YAAY,EACZtD,OAAQ,CAAC,GAEV,YAAe,SAGjB,OAAU,CAGTqD,QAAS0D,EAAa,4BAA4BnjB,QAAQ,GAC1D0f,YAAY,EACZP,QAAQ,EACR/C,OAAQ,CACP,QAAW,CACVqD,QAAS,uBACTC,YAAY,EACZtD,OAAQ,CAAC,GAEV,YAAe,QAGjB,IAAO,CAINqD,QAAS0D,EAAa,+FAA+FnjB,QAAQ,GAC7H0f,YAAY,EACZP,QAAQ,EACR/C,OAAQ,CACP,SAAY,CACXqD,QAAS,oBACTC,YAAY,GAEb,QAAW,CACVD,QAAS,sBACTC,YAAY,EACZtD,OAAQ,CAAC,GAEV,OAAU,CACTqD,QAAS,gCAMb,CAAC,MAAO,OAAQ,SAAU,UAAU/D,SAAQ,SAAUe,GACrD,CAAC,MAAO,OAAQ,SAAU,UAAUf,SAAQ,SAAUU,GACjDK,IAAUL,IACb9B,EAAM2B,UAAUuH,SAAS/G,GAAOL,OAAO3Z,QAAQ2Z,OAAOA,GAAU9B,EAAM2B,UAAUuH,SAASpH,GAE3F,GACD,IAEA9B,EAAM4C,MAAM/T,IAAI,kBAAkB,SAAU8T,GACtB,aAAjBA,EAAIM,UAA4C,OAAjBN,EAAIM,UAIvC,SAASmG,EAAW3I,GACnB,GAAKA,GAA4B,iBAAXA,EAItB,IAAK,IAAI3W,EAAI,EAAGuf,EAAI5I,EAAO7e,OAAQkI,EAAIuf,EAAGvf,IAAK,CAC9C,IAAIqY,EAAQ1B,EAAO3W,GAEnB,GAAmB,SAAfqY,EAAMpY,KAAV,CAmBA,IAAIuf,EAAWnH,EAAMha,QAAQ,GACzBohB,EAAYpH,EAAMha,QAAQ,GAE9B,GAAImhB,GAAYC,GACG,kBAAlBD,EAASvf,MAA+C,eAAnBwf,EAAUxf,MACnB,iBAArBuf,EAASnhB,QAAsB,CAKtC,IAAI+X,EAAOoJ,EAASnhB,QAAQmH,QAAQ,OAAQ,SAASA,QAAQ,UAAW,MAGpEqR,EAAQ,aADZT,GAAQ,eAAenQ,KAAKmQ,IAAS,CAAC,KAAK,GAAGtc,eAIzC2lB,EAAU5I,MAEuB,iBAApB4I,EAAU5I,MAC3B4I,EAAU5I,MAAQ,CAAC4I,EAAU5I,MAAOA,GAEpC4I,EAAU5I,MAAMtW,KAAKsW,GAJrB4I,EAAU5I,MAAQ,CAACA,EAMrB,CAvCA,MAFCyI,EAAWjH,EAAMha,QA0CnB,CACD,CAEAihB,CAAWzG,EAAIlC,OAChB,IAEAT,EAAM4C,MAAM/T,IAAI,QAAQ,SAAU8T,GACjC,GAAiB,eAAbA,EAAI5Y,KAAR,CAKA,IADA,IAAIuf,EAAW,GACNxf,EAAI,EAAGuf,EAAI1G,EAAIwD,QAAQvkB,OAAQkI,EAAIuf,EAAGvf,IAAK,CACnD,IAAI0f,EAAM7G,EAAIwD,QAAQrc,GAClB8P,EAAQ,gBAAgB7J,KAAKyZ,GACjC,GAAI5P,EAAO,CACV0P,EAAW1P,EAAM,GACjB,KACD,CACD,CAEA,IAAIqI,EAAUjC,EAAM2B,UAAU2H,GAE9B,GAAKrH,EAYE,CAEN,IAAIkB,EAAOR,EAAIxa,QAAQmH,QAAQ,QAAS,KAAKA,QAAQ,SAAU,KAE/DqT,EAAIxa,QAAU6X,EAAM8D,UAAUX,EAAMlB,EAASqH,EAC9C,MAhBC,GAAIA,GAAyB,SAAbA,GAAuBtJ,EAAMwC,QAAQiH,WAAY,CAChE,IAAIjK,EAAK,OAAQ,IAAIrL,MAAOuV,UAAY,IAAMjZ,KAAKkZ,MAAsB,KAAhBlZ,KAAKmZ,UAC9DjH,EAAIyD,WAAe,GAAI5G,EAEvBQ,EAAMwC,QAAQiH,WAAWI,cAAcP,GAAU,WAChD,IAAIQ,EAAMtiB,SAASuiB,eAAevK,GAC9BsK,IACHA,EAAIpiB,UAAYsY,EAAM8D,UAAUgG,EAAIjjB,YAAamZ,EAAM2B,UAAU2H,GAAWA,GAE9E,GACD,CAzBD,CAgCD,IAEAtJ,EAAM2B,UAAUqI,GAAKhK,EAAM2B,UAAUuH,QAErC,CAvVA,CAuVClJ,OAEFA,MAAM2B,UAAUsI,MAAO,CACtB,QAAW,CACV9E,QAAS,eACTC,YAAY,GAEb,OAAU,sDACV,QAAY,6PACZ,QAAY,qBACZ,OAAW,gFACX,SAAY,kFACZ,YAAgB,gBAChB,SAAY,oCAGb,IA6BM8E,GAAI,SAAAC,GAAA,SAAAD,IAAA,OAAAppB,EAAA,KAAAopB,GAAAjkB,EAAA,KAAAikB,EAAA5iB,UAAA,QAAAX,EAAAujB,EAAAC,GAAAvpB,EAAAspB,EAAA,EAAA3oB,IAAA,gBAAAyB,MAER,WAIE,GADAjC,KAAKqpB,aAAerpB,KAAK2N,aAAa,YACjC3N,KAAKqpB,aAAV,CAIA,IAAMnH,EAAWlD,GAAM4B,UAAU5gB,KAAKqpB,cACtC,GAAgB1nB,MAAZugB,EAAJ,CAKA,IAAI9a,EAAUpH,KAAK8F,YACbwjB,EAAUtpB,KAAKuH,WAAWO,cAAc,mBAE9C,GAAI9H,KAAKyH,aAAa,SAAU,CAG9B,IAAM8hB,GADNniB,EAAUA,EAAQmH,QAAQ,KAAM,KACXsK,MAAM,OAI3B,GAFAzR,GADAA,EAAUA,EAAQmH,QAAQ,IAAIiW,OAAO,KAAO+E,EAAM,KAAM,OACtC1b,OAEdyb,EAAQ5R,sBAAsB8R,WAAY,CAC5C,IAAMC,EAAShjB,SAASC,cAAc,OACtC1G,KAAKuH,WAAWmM,YAAY4V,GAC5BG,EAAOjiB,YAAY8hB,GACnBtpB,KAAKuH,WAAWC,YAAYiiB,EAC9B,CAEF,CAEAH,EAAQ5K,UAAY,YAAH/e,OAAeK,KAAKqpB,cACrCC,EAAQ3iB,UAAYqY,GAAM+D,UAAU3b,EAAS8a,EAtB7C,MAFEjc,QAAQqK,KAAK,iEAAD3Q,OAAkEK,KAAKqpB,aAAY,MAHjG,MAFEpjB,QAAQqK,KAAK,iLA8BjB,IAAC,CArCO,CAASzL,EAzBPuB,EAAS,SAAU,gSAAFzG,OAJnB,y5EAsBP,uDAOyB+pB,CAAIvc,eAqF1Bwc,GAAQ,SAAAC,GAEZ,SAAAD,IAAc,IAAAE,EAAA9pB,EAAA,KAAA4pB,GACZE,EAAA3kB,EAAA,KAAAykB,GAIgC,OADf,IAAInkB,iBAAiBqkB,EAAK1Y,QAClCxL,QAAOkkB,EAFA,CAACzkB,WAAW,EAAMC,eAAe,EAAMC,SAAS,IAEhCukB,CAClC,CAAC,OAAAjkB,EAAA+jB,EAAAC,GAAA/pB,EAAA8pB,EAAA,EAAAnpB,IAAA,SAAAyB,MAED,WACE,IACMmP,EAAQ,IAAIC,YAAY,oBADd,CAAEC,OAAQtR,KAAMuR,SAAS,IAEzC9K,SAAS+K,cAAcJ,EACzB,GAAC,CAAA5Q,IAAA,oBAAAyB,MAED,WAAoB,IAAA6nB,EAAA,KAKlB9pB,KAAKud,SAAWvd,KAAK+F,KAAK+B,cAAc,eACxClB,OAAO4W,eAAeC,YAAY,eAAeC,MAAK,WACpDoM,EAAKvM,SAASI,OAAOmM,EACvB,IAEAH,EAASI,mBAAqB,EAC9B,IAAMC,EAAWL,EAASI,kBAAkB3qB,WAC5CY,KAAK+F,KAAKkkB,KAAKxL,GAAK,cAAgBuL,EAGpC,IAAMvL,EAAK,mBAAqBuL,EAChChqB,KAAKud,SAASkB,GAAKA,EAGnB,IAAMyL,EAAOlqB,KAAK+F,KAAK+B,cAAc,QACrCoiB,EAAK/f,aAAa,KAAM,MAAQ6f,GAChCE,EAAK/f,aAAa,iBAAkBsU,GACpCyL,EAAKpkB,YAAckkB,CACrB,IAAC,CAvCW,CA1CF5jB,EAAS,aAAc,2eA0CZ+jB,CAAIhd,cA2C3Bwc,GAASI,kBAAoB,EAI7B,IAsBMK,GAAY,SAAAC,GAAA,SAAAD,IAAA,OAAArqB,EAAA,KAAAqqB,GAAAllB,EAAA,KAAAklB,EAAA7jB,UAAA,QAAAX,EAAAwkB,EAAAC,GAAAxqB,EAAAuqB,EAAA,EAAA5pB,IAAA,oBAAAyB,MAEhB,WACE4D,EAAAukB,EAAA,2BAAAvkB,CAAA,IAEA7F,KAAKse,KAAOte,KAAK+F,KAAK+B,cAAc,MAEpC9H,KAAK+F,KAAKqY,MAAMvV,QAAU,MAK5B,GAEA,CAAArI,IAAA,YAAAwB,IACA,SAAciR,GAEZ,GADAjT,KAAKse,KAAK3X,UAAY,GAClBsM,EAAUpS,OAAQ,CAEpBb,KAAK+F,KAAKqY,MAAMvV,QAAU,GAAG,IAEGyhB,EAFHC,EAAAte,EAENgH,GAAS,IAAhC,IAAAsX,EAAAre,MAAAoe,EAAAC,EAAA/rB,KAAA2N,MAAkC,KAAvBqe,EAAQF,EAAAroB,MAEX6c,EAAWrY,SAASC,cAAc,MACxCoY,EAASL,GAAK+L,EAAS/L,GAAK,WAC5BK,EAASnY,UAAY6jB,EAAS7jB,UAE9B,IAAM8jB,EAAWhkB,SAASC,cAAc,KACxC+jB,EAAStgB,aAAa,QAAS,qBAC/BsgB,EAAStgB,aAAa,SAAU,SAChCsgB,EAAS3kB,YAAc,MACvB2kB,EAASC,KAAO,IAAMF,EAAS/L,GAE/BK,EAAStX,YAAYijB,GACrBzqB,KAAKse,KAAK9W,YAAYsX,EACxB,CAAC,OAAA3T,GAAAof,EAAAngB,EAAAe,EAAA,SAAAof,EAAAne,GAAA,CACH,MAEEpM,KAAK+F,KAAKqY,MAAMvV,QAAU,MAE9B,IAAC,CAxCe,CAtBNzC,EAAS,kBAAmB,+PAoBvC,EAE0BukB,CAAIxd,cA2FzByd,GAAQ,SAAAC,GAEZ,SAAAD,IAAc,OAAA7qB,EAAA,KAAA6qB,GAAA1lB,EAAA,KAAA0lB,EAEd,CAAC,OAAAhlB,EAAAglB,EAAAC,GAAAhrB,EAAA+qB,EAAA,EAAApqB,IAAA,oBAAAyB,MAED,WAEA,GAAC,CAAAzB,IAAA,SAAAyB,MAED,SAAO8N,GAEL/P,KAAK8qB,cAAc9qB,MACnBA,KAAK+qB,kBAAkBhb,EAEzB,GAAC,CAAAvP,IAAA,gBAAAyB,MAED,SAAc8N,GAAS,IAAAib,EAAA,KAErBjb,EAAQwV,iBAAiB,aAAa,WAC/ByF,EAAKC,SAASD,EAAKE,WAAWnb,GACnCib,EAAKG,aACP,IACApb,EAAQwV,iBAAiB,YAAY,WACnCyF,EAAKI,cAAc,IACrB,IAEArb,EAAQwV,iBAAiB,cAAc,SAACnU,GACtCA,EAAMia,iBACR,GAAG,CAACC,SAAS,IAEb7kB,SAASiG,KAAK6Y,iBAAiB,cAAc,WAC3CyF,EAAKO,MACP,GAAG,CAACD,SAAS,GACf,GAAC,CAAA9qB,IAAA,oBAAAyB,MAED,SAAkBshB,GAAM,IAAAiI,EAAA,KACtBjI,EAAKgC,iBAAiB,aAAa,WAC5BiG,EAAKP,SACRO,EAAKN,WAAW3H,GAElBiI,EAAKL,aACP,IAEA5H,EAAKgC,iBAAiB,YAAY,WAChCiG,EAAKJ,cAAc,IACrB,IAEA7H,EAAKgC,iBAAiB,cAAc,SAACnU,GAC/Boa,EAAKP,QACPO,EAAKD,OAELC,EAAKN,WAAW3H,GAGlBnS,EAAMia,iBACR,GAAG,CAACC,SAAS,GACf,GAAC,CAAA9qB,IAAA,OAAAyB,MAED,SAAKwpB,GACHzrB,KAAKirB,SAAU,EACfjrB,KAAKoe,MAAMvV,QAAU,QAErB7I,KAAKoe,MAAMsN,IAAMhc,KAAKic,MAAMF,EAAS,GAAK,IAAM,IAClD,GAAC,CAAAjrB,IAAA,aAAAyB,MAED,SAAWshB,GAET,IAAMqI,EAAOrI,EAAKsI,wBAClB7rB,KAAK8rB,KAAK,CAACvI,EAAKwI,WAAaH,EAAKI,MAAOzI,EAAK0I,UAAYL,EAAKM,QACjE,GAAC,CAAA1rB,IAAA,OAAAyB,MAED,WACEjC,KAAKirB,SAAU,EACfjrB,KAAKoe,MAAMvV,QAAU,OACrB7I,KAAKmrB,aACP,GAAC,CAAA3qB,IAAA,cAAAyB,MAED,WACMjC,KAAKmsB,SACPC,aAAapsB,KAAKmsB,QAEtB,GAAC,CAAA3rB,IAAA,gBAAAyB,MAED,SAAcoqB,GAAM,IAAAC,EAAA,KAClBtsB,KAAKmrB,cACLnrB,KAAKmsB,QAAUvG,YAAW,WACxB0G,EAAKf,MACP,GAAGc,EACL,IAAC,CAzFW,CA7CFjmB,EAAS,cAAe,ysBA6CbmmB,CAAIpf,cA2GrBqf,GAAK,SAAAC,GAAA,SAAAD,IAAA,OAAAzsB,EAAA,KAAAysB,GAAAtnB,EAAA,KAAAsnB,EAAAjmB,UAAA,QAAAX,EAAA4mB,EAAAC,GAAA5sB,EAAA2sB,EAAA,OAAAhsB,IAAA,KAAAC,IACT,WAAkB,MAAO,SAAW,IAAC,CAD5B,CAC4BgR,EADnBtE,cAcduf,GAAU,SAAAC,GAAA,SAAAD,IAAA,OAAA3sB,EAAA,KAAA2sB,GAAAxnB,EAAA,KAAAwnB,EAAAnmB,UAAA,QAAAX,EAAA8mB,EAAAC,GAAA9sB,EAAA6sB,EAAA,EARJtmB,EAAS,eAAgB,+DAMpC,EAEwBwmB,CAAIzf,cAkBvB0f,GAAG,SAAAC,GAAA,SAAAD,IAAA,OAAA9sB,EAAA,KAAA8sB,GAAA3nB,EAAA,KAAA2nB,EAAAtmB,UAAA,QAAAX,EAAAinB,EAAAC,GAAAjtB,EAAAgtB,EAAA,EAAArsB,IAAA,oBAAAyB,MAIP,WAAoB,IAAA8qB,EAAA,KACb/sB,KAAK2N,aAAa,iBACrB/G,OAAOoG,OAAS,WACd,IACMggB,EADUvmB,SAASqB,cAAc,aACdC,iBAAiB,WAQlD,SAAmBgI,EAASid,GAE1B,IA0ByBC,EA1BrBC,EAAG,wWAwBHC,EAAAlhB,EAEa+gB,GAAQ,IAAzB,IAAAG,EAAAjhB,MAAA+gB,EAAAE,EAAA3uB,KAAA2N,MAA2B,KAAhBihB,EAAEH,EAAAhrB,MAELorB,EAAwC,WAA5BD,EAAG3Z,cAAcsS,QAC7BuH,EAAcF,EAAGzf,aAAa,UACpC,IAAI0f,IAAaC,EAAjB,CAEA,IAAMtsB,EAAQosB,EAAGtnB,YAGbynB,EAAU,iBAFKH,EAAGzf,aAAa,MAES,KAAO3M,EAArC,YACI,MAAdosB,EAAGrH,QACLwH,EAAU,OAASA,EAAU,QAE7BA,GAAW,OAEbL,GAAOK,CAX+B,CAaxC,CAAC,OAAApiB,GAAAgiB,EAAA/iB,EAAAe,EAAA,SAAAgiB,EAAA/gB,GAAA,CAED8gB,GAAO,cACPnd,EAAQpJ,UAAYumB,CACtB,CAxDQM,CAAUT,EAAMC,EAClB,EAEJ,IAAC,EAAAxsB,IAAA,KAAAC,IAVD,WAAkB,MAAO,OAAS,IAAC,CAF5B,CAE4BgR,EAFnBtE,cA8FlB,IAEMsgB,GAAM,SAAAC,GAiCV,SAAAD,IAAc,IAAAE,EAKW,OALX5tB,EAAA,KAAA0tB,IACZE,EAAAzoB,EAAA,KAAAuoB,IAEKG,QAAS,EACdD,EAAKE,WAAY,EACjBF,EAAKG,YAAa,EAAKH,CACzB,CAAC,OAAA/nB,EAAA6nB,EAAAC,GAAA7tB,EAAA4tB,EAAA,EAAAjtB,IAAA,oBAAAyB,MAED,WACEjC,KAAK+tB,oBAAsB/tB,KAAKyH,aAAa,uBAC7CgmB,EAAOO,eAAeroB,QAAQ3F,MAC9BytB,EAAOQ,eAAetoB,QAAQ3F,KAChC,GAAC,CAAAQ,IAAA,uBAAAyB,MAED,WACEwrB,EAAOO,eAAeE,UAAUluB,MAChCytB,EAAOQ,eAAeC,UAAUluB,KAClC,GAIA,CAAAQ,IAAA,mBAAAyB,MAoDA,SAAiB6b,EAAWjI,GAC1BhQ,EAAA4nB,EAAA,0BAAA5nB,CAAA,CAAuBiY,EAAWjI,IAGhB,UAAdiI,IACuC,IAArC2P,EAAOU,WAAW9kB,QAAQrJ,QAC5BA,KAAK4tB,QAAS,EACdH,EAAOW,iBAGO,aAAdtQ,GACF9d,KAAKquB,UAET,GAEA,CAAA7tB,IAAA,QAAAyB,MAEA,WAEEjC,KAAK4tB,QAAS,EACdH,EAAOO,eAAeE,UAAUluB,MAChC,IAAMoR,EAAQ,IAAIC,YAAY,SAC9BrR,KAAKwR,cAAcJ,EACrB,GAAC,CAAA5Q,IAAA,WAAAyB,MAED,WACEjC,KAAK6tB,WAAY,EACjB7tB,KAAK8tB,YAAa,EAClB,IAAM1c,EAAQ,IAAIC,YAAY,YAC9BrR,KAAKwR,cAAcJ,EACrB,GAAC,CAAA5Q,IAAA,YAAAyB,MAED,WACEjC,KAAK6tB,WAAY,EACjB7tB,KAAK8tB,YAAa,EAClB,IAAM1c,EAAQ,IAAIC,YAAY,aAC9BrR,KAAKwR,cAAcJ,EACrB,IAAC,EAAA5Q,IAAA,KAAAC,IA7ID,WAAkB,MAAO,UAAY,GAAC,CAAAD,IAAA,aAAAC,IAEtC,WAIE,OAHKgtB,EAAOa,cACVb,EAAOa,YAAc,IAEhBb,EAAOa,WAChB,GAAC,CAAA9tB,IAAA,kBAAAyB,MAED,SAAuBssB,IACsB,IAAvCd,EAAOU,WAAW9kB,QAAQklB,KAC5Bd,EAAOU,WAAW7kB,KAAKilB,GACvBd,EAAOW,gBAEX,GAAC,CAAA5tB,IAAA,gBAAAyB,MAED,WAIE,IAAMssB,EAASd,EAAOU,WACnBK,MAAK,SAACC,EAAElU,GAAC,OAAKkU,EAAEC,cAAgBnU,EAAEmU,aAAa,IAC/CtY,QAAO,SAACmY,GAAM,OAAMA,EAAOX,MAAM,IACjCe,MACCJ,IACFA,EAAOK,QACP5S,sBAAsByR,EAAOW,eAGjC,GAAC,CAAA5tB,IAAA,iBAAAC,IAyBD,WACE,IAAKgtB,EAAOoB,gBAAiB,CAI3B,IAAMC,EAAiBloB,OAAOmoB,YACxBC,EAAStf,KAAKkZ,MAAM,EAAIkG,GACxB3pB,EAAU,CAAC8pB,WAAYD,EAAS,UAAYA,EAAS,SAAUE,UAAW,KAC1ErZ,EAAW4X,EAAO0B,6BAClB5pB,EAAW,IAAI6pB,qBAAqBvZ,EAAU1Q,GACpDsoB,EAAOoB,gBAAkBtpB,CAC3B,CACA,OAAOkoB,EAAOoB,eAChB,GAAC,CAAAruB,IAAA,+BAAAyB,MAED,SAAoC8O,GAAS,IAChBse,EADgBC,EAAArjB,EACvB8E,GAAO,IAA3B,IAAAue,EAAApjB,MAAAmjB,EAAAC,EAAA9wB,KAAA2N,MAA6B,KAAlB+E,EAAKme,EAAAptB,MACRssB,EAASrd,EAAM7N,OACjB6N,EAAMqe,iBAAmBhB,EAAOX,QAClCH,EAAO+B,gBAAgBjB,EAE3B,CAAC,OAAApjB,GAAAmkB,EAAAllB,EAAAe,EAAA,SAAAmkB,EAAAljB,GAAA,CACH,GAAC,CAAA5L,IAAA,iBAAAC,IAED,WAQE,OAPKgtB,EAAOgC,kBACVhC,EAAOgC,gBAAkB,IAAIL,qBAC3B3B,EAAOiC,6BAA8B,CACnCT,WAAY,MAAOC,UAAW,CAAC,EAAG,MAIjCzB,EAAOgC,eAChB,GAAC,CAAAjvB,IAAA,+BAAAyB,MAED,SAAoC8O,GAAS,IAChB4e,EADgBC,EAAA3jB,EACvB8E,GAAO,IAA3B,IAAA6e,EAAA1jB,MAAAyjB,EAAAC,EAAApxB,KAAA2N,MAA6B,KAAlB+E,EAAKye,EAAA1tB,MACRssB,EAASrd,EAAM7N,OACjB6N,EAAMqe,gBACRhB,EAAOG,cAAgB,IAAItb,KAEvBmb,EAAOT,YAAcS,EAAOF,YAE5BE,EAAOV,WAAaU,EAAOsB,WAEnC,CAAC,OAAA1kB,GAAAykB,EAAAxlB,EAAAe,EAAA,SAAAykB,EAAAxjB,GAAA,CACH,IAAC,CAtGS,CAsGTqF,EAtGkBtE,cAmJrB,GAAsB,oBAAXvG,OAAwB,CAGjC,IAAIulB,GADJsB,GAAOqC,aAAc,EAUrBlpB,OAAO2e,iBAAiB,UARL,WACjBkI,GAAOqC,aAAc,EACrB1D,aAAaD,IACbA,GAAUvG,YAAW,WACnB6H,GAAOqC,aAAc,EACrBrC,GAAOW,eACT,GAAG,IACL,IAC8C,EAEhD,CAOA,IAwGM2B,GAAY,SAAAC,GAAA,SAAAD,IAAA,OAAAhwB,EAAA,KAAAgwB,GAAA7qB,EAAA,KAAA6qB,EAAAxpB,UAAA,QAAAX,EAAAmqB,EAAAC,GAAAnwB,EAAAkwB,EAAA,EAAAvvB,IAAA,oBAAAyB,MAEhB,WAAoB,IAAAguB,EAAA,KACdjwB,KAAKkwB,mBACPlwB,KAAKyT,cAAcC,YAAY1T,MAETA,KAAK+F,KAAK+B,cAAc,gCAChCqoB,QAAU,SAAC/e,GAAK,OAAK6e,EAAKG,gBAAgBhf,EAAM,CAElE,GAAC,CAAA5Q,IAAA,kBAAAyB,MAED,SAAgBmP,GACEA,EAAM/N,OAAOpB,QACbjC,KAAKuT,WACnBtN,QAAQwM,IAAI,6BACZzS,KAAKyT,cAAcC,YAAY1T,MACP,oBAAbqwB,UACTpqB,QAAQwM,IAAI,4CACZ6d,aAAaC,QAAQvwB,KAAKwwB,yBAA0B,SAG1D,GAAC,CAAAhwB,IAAA,mBAAAyB,MAED,WAEE,OAAI2E,QAjImB,gBAiITA,OAAOqN,SAASC,UAC5BjO,QAAQqK,KAAK,iDACN,GAGe,oBAAb+f,SACmD,SAAxDC,aAAaG,QAAQzwB,KAAKwwB,4BAC5BvqB,QAAQwM,IAAI,4EACL,EAKb,GAAC,CAAAjS,IAAA,yBAAAyB,MAED,WAGE,MAFe,kBAEE2E,OAASA,OAAOqN,SAASyc,SAAW,KADtC,+BAEjB,IAAC,CA5Ce,CAvGNtqB,EAAS,iBAAkB,o4DAuGZuqB,CAAIxjB,cAgD/B,SAASyjB,GAAUnC,EAAGlU,GACpB,OAAOkU,EAAIlU,GAAK,EAAIkU,EAAIlU,EAAI,EAAIkU,GAAKlU,EAAI,EAAIsW,GAC/C,CAkCA,IAhCkBC,GA0BW1kB,GAOzB2kB,IAjCcD,GAgCaF,GA/BN,IAAnBE,GAAQjwB,SAyBeuL,GAzB6B0kB,GAA9BA,GA0BnB,SAASvkB,EAAG0O,GACjB,OAAO2V,GAAUxkB,GAAEG,GAAI0O,EACzB,GA3BO,CACLtR,KAAM,SAAS8kB,EAAGxT,EAAG+V,EAAIC,GAGvB,IAFU,MAAND,IAAYA,EAAK,GACX,MAANC,IAAYA,EAAKxC,EAAE5tB,QAChBmwB,EAAKC,GAAI,CACd,IAAIC,EAAMF,EAAKC,IAAO,EAClBH,GAAQrC,EAAEyC,GAAMjW,GAAK,EAAG+V,EAAKE,EAAM,EAClCD,EAAKC,CACZ,CACA,OAAOF,CACT,EACApnB,MAAO,SAAS6kB,EAAGxT,EAAG+V,EAAIC,GAGxB,IAFU,MAAND,IAAYA,EAAK,GACX,MAANC,IAAYA,EAAKxC,EAAE5tB,QAChBmwB,EAAKC,GAAI,CACd,IAAIC,EAAMF,EAAKC,IAAO,EAClBH,GAAQrC,EAAEyC,GAAMjW,GAAK,EAAGgW,EAAKC,EAC5BF,EAAKE,EAAM,CAClB,CACA,OAAOF,CACT,IAW8BpnB,MAgBlC,IAAIunB,GAAMzhB,KAAK0hB,KAAK,IAChBC,GAAK3hB,KAAK0hB,KAAK,IACfE,GAAK5hB,KAAK0hB,KAAK,GA+BnB,SAASG,GAAcnY,EAAOoY,EAAMrM,GAClC,IAAIsM,GAAQD,EAAOpY,GAAS1J,KAAKgiB,IAAI,EAAGvM,GACpCwM,EAAQjiB,KAAKkZ,MAAMlZ,KAAK+C,IAAIgf,GAAQ/hB,KAAKkiB,MACzC1rB,EAAQurB,EAAO/hB,KAAKmiB,IAAI,GAAIF,GAChC,OAAOA,GAAS,GACTzrB,GAASirB,GAAM,GAAKjrB,GAASmrB,GAAK,EAAInrB,GAASorB,GAAK,EAAI,GAAK5hB,KAAKmiB,IAAI,GAAIF,IAC1EjiB,KAAKmiB,IAAI,IAAKF,IAAUzrB,GAASirB,GAAM,GAAKjrB,GAASmrB,GAAK,EAAInrB,GAASorB,GAAK,EAAI,EACzF,CAYA,SAASQ,GAAUC,EAAQC,GACzB,OAAQzrB,UAAU1F,QAChB,KAAK,EAAG,MACR,KAAK,EAAGb,KAAKgyB,MAAMD,GAAS,MAC5B,QAAS/xB,KAAKgyB,MAAMA,GAAOD,OAAOA,GAEpC,OAAO/xB,IACT,CAEA,SAAS5B,GAAO+H,EAAa8rB,EAASxc,GACpCtP,EAAYsP,UAAYwc,EAAQxc,UAAYA,EAC5CA,EAAUtP,YAAcA,CAC1B,CAEA,SAAS0a,GAAOsB,EAAQ+P,GACtB,IAAIzc,EAAYnS,OAAO6uB,OAAOhQ,EAAO1M,WACrC,IAAK,IAAIjV,KAAO0xB,EAAYzc,EAAUjV,GAAO0xB,EAAW1xB,GACxD,OAAOiV,CACT,CAEA,SAAS2c,KAAS,CAElB,IAAIC,GAAS,GACTC,GAAW,EAAID,GAEfE,GAAM,sBACNC,GAAM,gDACNC,GAAM,iDACNC,GAAQ,qBACRC,GAAe,IAAInO,OAAO,UAAY,CAAC+N,GAAKA,GAAKA,IAAO,QACxDK,GAAe,IAAIpO,OAAO,UAAY,CAACiO,GAAKA,GAAKA,IAAO,QACxDI,GAAgB,IAAIrO,OAAO,WAAa,CAAC+N,GAAKA,GAAKA,GAAKC,IAAO,QAC/DM,GAAgB,IAAItO,OAAO,WAAa,CAACiO,GAAKA,GAAKA,GAAKD,IAAO,QAC/DO,GAAe,IAAIvO,OAAO,UAAY,CAACgO,GAAKC,GAAKA,IAAO,QACxDO,GAAgB,IAAIxO,OAAO,WAAa,CAACgO,GAAKC,GAAKA,GAAKD,IAAO,QAE/DS,GAAQ,CACVC,UAAW,SACXC,aAAc,SACdC,KAAM,MACNC,WAAY,QACZC,MAAO,SACPC,MAAO,SACPC,OAAQ,SACRC,MAAO,EACPC,eAAgB,SAChBC,KAAM,IACNC,WAAY,QACZC,MAAO,SACPC,UAAW,SACXC,UAAW,QACXC,WAAY,QACZC,UAAW,SACXC,MAAO,SACPC,eAAgB,QAChBC,SAAU,SACVC,QAAS,SACTC,KAAM,MACNC,SAAU,IACVC,SAAU,MACVC,cAAe,SACfC,SAAU,SACVC,UAAW,MACXC,SAAU,SACVC,UAAW,SACXC,YAAa,QACbC,eAAgB,QAChBC,WAAY,SACZC,WAAY,SACZC,QAAS,QACTC,WAAY,SACZC,aAAc,QACdC,cAAe,QACfC,cAAe,QACfC,cAAe,QACfC,cAAe,MACfC,WAAY,QACZC,SAAU,SACVC,YAAa,MACbC,QAAS,QACTC,QAAS,QACTC,WAAY,QACZC,UAAW,SACXC,YAAa,SACbC,YAAa,QACbC,QAAS,SACTC,UAAW,SACXC,WAAY,SACZC,KAAM,SACNC,UAAW,SACXC,KAAM,QACNC,MAAO,MACPC,YAAa,SACbC,KAAM,QACNC,SAAU,SACVC,QAAS,SACTC,UAAW,SACXC,OAAQ,QACRC,MAAO,SACPC,MAAO,SACPC,SAAU,SACVC,cAAe,SACfC,UAAW,QACXC,aAAc,SACdC,UAAW,SACXC,WAAY,SACZC,UAAW,SACXC,qBAAsB,SACtBC,UAAW,SACXC,WAAY,QACZC,UAAW,SACXC,UAAW,SACXC,YAAa,SACbC,cAAe,QACfC,aAAc,QACdC,eAAgB,QAChBC,eAAgB,QAChBC,eAAgB,SAChBC,YAAa,SACbC,KAAM,MACNC,UAAW,QACXC,MAAO,SACPC,QAAS,SACTC,OAAQ,QACRC,iBAAkB,QAClBC,WAAY,IACZC,aAAc,SACdC,aAAc,QACdC,eAAgB,QAChBC,gBAAiB,QACjBC,kBAAmB,MACnBC,gBAAiB,QACjBC,gBAAiB,SACjBC,aAAc,QACdC,UAAW,SACXC,UAAW,SACXC,SAAU,SACVC,YAAa,SACbC,KAAM,IACNC,QAAS,SACTC,MAAO,QACPC,UAAW,QACXC,OAAQ,SACRC,UAAW,SACXC,OAAQ,SACRC,cAAe,SACfC,UAAW,SACXC,cAAe,SACfC,cAAe,SACfC,WAAY,SACZC,UAAW,SACXC,KAAM,SACNC,KAAM,SACNC,KAAM,SACNC,WAAY,SACZC,OAAQ,QACRC,cAAe,QACfC,IAAK,SACLC,UAAW,SACXC,UAAW,QACXC,YAAa,QACbC,OAAQ,SACRC,WAAY,SACZC,SAAU,QACVC,SAAU,SACVC,OAAQ,SACRC,OAAQ,SACRC,QAAS,QACTC,UAAW,QACXC,UAAW,QACXC,UAAW,QACXC,KAAM,SACNC,YAAa,MACbC,UAAW,QACXC,IAAK,SACLC,KAAM,MACNC,QAAS,SACTC,OAAQ,SACRC,UAAW,QACXC,OAAQ,SACRC,MAAO,SACPC,MAAO,SACPC,WAAY,SACZC,OAAQ,SACRC,YAAa,UAiBf,SAASC,KACP,OAAOt8B,KAAKu8B,MAAMC,WACpB,CAMA,SAASC,KACP,OAAOz8B,KAAKu8B,MAAMG,WACpB,CAEA,SAASC,GAAMC,GACb,IAAIC,EAAGvU,EAEP,OADAsU,GAAUA,EAAS,IAAI/uB,OAAOhL,eACtBg6B,EAAInK,GAAM1jB,KAAK4tB,KAAYtU,EAAIuU,EAAE,GAAGh8B,OAAQg8B,EAAIC,SAASD,EAAE,GAAI,IAAW,IAANvU,EAAUyU,GAAKF,GAC/E,IAANvU,EAAU,IAAI0U,GAAKH,GAAK,EAAI,GAAQA,GAAK,EAAI,IAAQA,GAAK,EAAI,GAAY,IAAJA,GAAiB,GAAJA,IAAY,EAAU,GAAJA,EAAU,GACzG,IAANvU,EAAU2U,GAAKJ,GAAK,GAAK,IAAMA,GAAK,GAAK,IAAMA,GAAK,EAAI,KAAW,IAAJA,GAAY,KACrE,IAANvU,EAAU2U,GAAMJ,GAAK,GAAK,GAAQA,GAAK,EAAI,IAAQA,GAAK,EAAI,GAAQA,GAAK,EAAI,IAAQA,GAAK,EAAI,GAAY,IAAJA,IAAkB,GAAJA,IAAY,EAAU,GAAJA,GAAY,KAClJ,OACCA,EAAIlK,GAAa3jB,KAAK4tB,IAAW,IAAII,GAAIH,EAAE,GAAIA,EAAE,GAAIA,EAAE,GAAI,IAC3DA,EAAIjK,GAAa5jB,KAAK4tB,IAAW,IAAII,GAAW,IAAPH,EAAE,GAAW,IAAY,IAAPA,EAAE,GAAW,IAAY,IAAPA,EAAE,GAAW,IAAK,IAC/FA,EAAIhK,GAAc7jB,KAAK4tB,IAAWK,GAAKJ,EAAE,GAAIA,EAAE,GAAIA,EAAE,GAAIA,EAAE,KAC3DA,EAAI/J,GAAc9jB,KAAK4tB,IAAWK,GAAY,IAAPJ,EAAE,GAAW,IAAY,IAAPA,EAAE,GAAW,IAAY,IAAPA,EAAE,GAAW,IAAKA,EAAE,KAC/FA,EAAI9J,GAAa/jB,KAAK4tB,IAAWM,GAAKL,EAAE,GAAIA,EAAE,GAAK,IAAKA,EAAE,GAAK,IAAK,IACpEA,EAAI7J,GAAchkB,KAAK4tB,IAAWM,GAAKL,EAAE,GAAIA,EAAE,GAAK,IAAKA,EAAE,GAAK,IAAKA,EAAE,IACxE5J,GAAM9vB,eAAey5B,GAAUG,GAAK9J,GAAM2J,IAC/B,gBAAXA,EAA2B,IAAII,GAAInM,IAAKA,IAAKA,IAAK,GAClD,IACR,CAEA,SAASkM,GAAKv+B,GACZ,OAAO,IAAIw+B,GAAIx+B,GAAK,GAAK,IAAMA,GAAK,EAAI,IAAU,IAAJA,EAAU,EAC1D,CAEA,SAASy+B,GAAKE,EAAGC,EAAG7iB,EAAGkU,GAErB,OADIA,GAAK,IAAG0O,EAAIC,EAAI7iB,EAAIsW,KACjB,IAAImM,GAAIG,EAAGC,EAAG7iB,EAAGkU,EAC1B,CAEA,SAAS4O,GAAWvd,GAElB,OADMA,aAAasS,KAAQtS,EAAI6c,GAAM7c,IAChCA,EAEE,IAAIkd,IADXld,EAAIA,EAAEyc,OACWY,EAAGrd,EAAEsd,EAAGtd,EAAEvF,EAAGuF,EAAEwd,SAFjB,IAAIN,EAGrB,CAEA,SAAST,GAAIY,EAAGC,EAAG7iB,EAAG+iB,GACpB,OAA4B,IAArB/2B,UAAU1F,OAAew8B,GAAWF,GAAK,IAAIH,GAAIG,EAAGC,EAAG7iB,EAAc,MAAX+iB,EAAkB,EAAIA,EACzF,CAEA,SAASN,GAAIG,EAAGC,EAAG7iB,EAAG+iB,GACpBt9B,KAAKm9B,GAAKA,EACVn9B,KAAKo9B,GAAKA,EACVp9B,KAAKua,GAAKA,EACVva,KAAKs9B,SAAWA,CAClB,CA0BA,SAASC,KACP,MAAO,IAAMC,GAAIx9B,KAAKm9B,GAAKK,GAAIx9B,KAAKo9B,GAAKI,GAAIx9B,KAAKua,EACpD,CAEA,SAASkjB,KACP,IAAIhP,EAAIzuB,KAAKs9B,QACb,OAAc,KADQ7O,EAAIiP,MAAMjP,GAAK,EAAI/e,KAAKgiB,IAAI,EAAGhiB,KAAKC,IAAI,EAAG8e,KAC/C,OAAS,SACrB/e,KAAKgiB,IAAI,EAAGhiB,KAAKC,IAAI,IAAKD,KAAKic,MAAM3rB,KAAKm9B,IAAM,IAAM,KACtDztB,KAAKgiB,IAAI,EAAGhiB,KAAKC,IAAI,IAAKD,KAAKic,MAAM3rB,KAAKo9B,IAAM,IAAM,KACtD1tB,KAAKgiB,IAAI,EAAGhiB,KAAKC,IAAI,IAAKD,KAAKic,MAAM3rB,KAAKua,IAAM,KACzC,IAANkU,EAAU,IAAM,KAAOA,EAAI,IACpC,CAEA,SAAS+O,GAAIv7B,GAEX,QADAA,EAAQyN,KAAKgiB,IAAI,EAAGhiB,KAAKC,IAAI,IAAKD,KAAKic,MAAM1pB,IAAU,KACvC,GAAK,IAAM,IAAMA,EAAM7C,SAAS,GAClD,CAEA,SAAS89B,GAAKS,EAAGzxB,EAAGoc,EAAGmG,GAIrB,OAHIA,GAAK,EAAGkP,EAAIzxB,EAAIoc,EAAIuI,IACfvI,GAAK,GAAKA,GAAK,EAAGqV,EAAIzxB,EAAI2kB,IAC1B3kB,GAAK,IAAGyxB,EAAI9M,KACd,IAAI+M,GAAID,EAAGzxB,EAAGoc,EAAGmG,EAC1B,CAEA,SAASoP,GAAW/d,GAClB,GAAIA,aAAa8d,GAAK,OAAO,IAAIA,GAAI9d,EAAE6d,EAAG7d,EAAE5T,EAAG4T,EAAEwI,EAAGxI,EAAEwd,SAEtD,GADMxd,aAAasS,KAAQtS,EAAI6c,GAAM7c,KAChCA,EAAG,OAAO,IAAI8d,GACnB,GAAI9d,aAAa8d,GAAK,OAAO9d,EAE7B,IAAIqd,GADJrd,EAAIA,EAAEyc,OACIY,EAAI,IACVC,EAAItd,EAAEsd,EAAI,IACV7iB,EAAIuF,EAAEvF,EAAI,IACV5K,EAAMD,KAAKC,IAAIwtB,EAAGC,EAAG7iB,GACrBmX,EAAMhiB,KAAKgiB,IAAIyL,EAAGC,EAAG7iB,GACrBojB,EAAI9M,IACJ3kB,EAAIwlB,EAAM/hB,EACV2Y,GAAKoJ,EAAM/hB,GAAO,EAUtB,OATIzD,GACayxB,EAAXR,IAAMzL,GAAU0L,EAAI7iB,GAAKrO,EAAc,GAATkxB,EAAI7iB,GAC7B6iB,IAAM1L,GAAUnX,EAAI4iB,GAAKjxB,EAAI,GAC5BixB,EAAIC,GAAKlxB,EAAI,EACvBA,GAAKoc,EAAI,GAAMoJ,EAAM/hB,EAAM,EAAI+hB,EAAM/hB,EACrCguB,GAAK,IAELzxB,EAAIoc,EAAI,GAAKA,EAAI,EAAI,EAAIqV,EAEpB,IAAIC,GAAID,EAAGzxB,EAAGoc,EAAGxI,EAAEwd,QAC5B,CAMA,SAASM,GAAID,EAAGzxB,EAAGoc,EAAGgV,GACpBt9B,KAAK29B,GAAKA,EACV39B,KAAKkM,GAAKA,EACVlM,KAAKsoB,GAAKA,EACVtoB,KAAKs9B,SAAWA,CAClB,CAwCA,SAASQ,GAAQH,EAAGI,EAAIC,GACtB,OAGY,KAHJL,EAAI,GAAKI,GAAMC,EAAKD,GAAMJ,EAAI,GAChCA,EAAI,IAAMK,EACVL,EAAI,IAAMI,GAAMC,EAAKD,IAAO,IAAMJ,GAAK,GACvCI,EACR,CAzMA3/B,GAAOg0B,GAAOuK,GAAO,CACnBsB,KAAM,SAASC,GACb,OAAO56B,OAAOC,OAAO,IAAIvD,KAAKmG,YAAanG,KAAMk+B,EACnD,EACAC,YAAa,WACX,OAAOn+B,KAAKu8B,MAAM4B,aACpB,EACAX,IAAKlB,GACLE,UAAWF,GACX8B,UASF,WACE,OAAOP,GAAW79B,MAAMo+B,WAC1B,EAVE1B,UAAWD,GACXr9B,SAAUq9B,KA6DZr+B,GAAO4+B,GAAKT,GAAK1b,GAAOuR,GAAO,CAC7BE,SAAU,SAAS1kB,GAEjB,OADAA,EAAS,MAALA,EAAY0kB,GAAW5iB,KAAKmiB,IAAIS,GAAU1kB,GACvC,IAAIovB,GAAIh9B,KAAKm9B,EAAIvvB,EAAG5N,KAAKo9B,EAAIxvB,EAAG5N,KAAKua,EAAI3M,EAAG5N,KAAKs9B,QAC1D,EACAjL,OAAQ,SAASzkB,GAEf,OADAA,EAAS,MAALA,EAAYykB,GAAS3iB,KAAKmiB,IAAIQ,GAAQzkB,GACnC,IAAIovB,GAAIh9B,KAAKm9B,EAAIvvB,EAAG5N,KAAKo9B,EAAIxvB,EAAG5N,KAAKua,EAAI3M,EAAG5N,KAAKs9B,QAC1D,EACAf,IAAK,WACH,OAAOv8B,IACT,EACAm+B,YAAa,WACX,OAAS,IAAOn+B,KAAKm9B,GAAKn9B,KAAKm9B,EAAI,QAC1B,IAAOn9B,KAAKo9B,GAAKp9B,KAAKo9B,EAAI,QAC1B,IAAOp9B,KAAKua,GAAKva,KAAKua,EAAI,OAC3B,GAAKva,KAAKs9B,SAAWt9B,KAAKs9B,SAAW,CAC/C,EACAE,IAAKD,GACLf,UAAWe,GACXb,UAAWe,GACXr+B,SAAUq+B,MAiEZr/B,GAAOw/B,IAXP,SAAaD,EAAGzxB,EAAGoc,EAAGgV,GACpB,OAA4B,IAArB/2B,UAAU1F,OAAeg9B,GAAWF,GAAK,IAAIC,GAAID,EAAGzxB,EAAGoc,EAAc,MAAXgV,EAAkB,EAAIA,EACzF,GASiBzc,GAAOuR,GAAO,CAC7BE,SAAU,SAAS1kB,GAEjB,OADAA,EAAS,MAALA,EAAY0kB,GAAW5iB,KAAKmiB,IAAIS,GAAU1kB,GACvC,IAAIgwB,GAAI59B,KAAK29B,EAAG39B,KAAKkM,EAAGlM,KAAKsoB,EAAI1a,EAAG5N,KAAKs9B,QAClD,EACAjL,OAAQ,SAASzkB,GAEf,OADAA,EAAS,MAALA,EAAYykB,GAAS3iB,KAAKmiB,IAAIQ,GAAQzkB,GACnC,IAAIgwB,GAAI59B,KAAK29B,EAAG39B,KAAKkM,EAAGlM,KAAKsoB,EAAI1a,EAAG5N,KAAKs9B,QAClD,EACAf,IAAK,WACH,IAAIoB,EAAI39B,KAAK29B,EAAI,IAAqB,KAAd39B,KAAK29B,EAAI,GAC7BzxB,EAAIwxB,MAAMC,IAAMD,MAAM19B,KAAKkM,GAAK,EAAIlM,KAAKkM,EACzCoc,EAAItoB,KAAKsoB,EACT0V,EAAK1V,GAAKA,EAAI,GAAMA,EAAI,EAAIA,GAAKpc,EACjC6xB,EAAK,EAAIzV,EAAI0V,EACjB,OAAO,IAAIhB,GACTc,GAAQH,GAAK,IAAMA,EAAI,IAAMA,EAAI,IAAKI,EAAIC,GAC1CF,GAAQH,EAAGI,EAAIC,GACfF,GAAQH,EAAI,IAAMA,EAAI,IAAMA,EAAI,IAAKI,EAAIC,GACzCh+B,KAAKs9B,QAET,EACAa,YAAa,WACX,OAAQ,GAAKn+B,KAAKkM,GAAKlM,KAAKkM,GAAK,GAAKwxB,MAAM19B,KAAKkM,KACzC,GAAKlM,KAAKsoB,GAAKtoB,KAAKsoB,GAAK,GACzB,GAAKtoB,KAAKs9B,SAAWt9B,KAAKs9B,SAAW,CAC/C,EACAc,UAAW,WACT,IAAI3P,EAAIzuB,KAAKs9B,QACb,OAAc,KADQ7O,EAAIiP,MAAMjP,GAAK,EAAI/e,KAAKgiB,IAAI,EAAGhiB,KAAKC,IAAI,EAAG8e,KAC/C,OAAS,UACpBzuB,KAAK29B,GAAK,GAAK,KACA,KAAf39B,KAAKkM,GAAK,GAAW,MACN,KAAflM,KAAKsoB,GAAK,GAAW,KACf,IAANmG,EAAU,IAAM,KAAOA,EAAI,IACpC,KAWF,IAAI4P,GAAU3uB,KAAK4uB,GAAK,IACpBC,GAAU,IAAM7uB,KAAK4uB,GAIrBE,GAAK,OAELC,GAAK,OACLC,GAAK,EAAI,GACTC,GAAK,EAAI,GACTC,GAAK,EAAID,GAAKA,GACdE,GAAKF,GAAKA,GAAKA,GAEnB,SAASG,GAAWhf,GAClB,GAAIA,aAAaif,GAAK,OAAO,IAAIA,GAAIjf,EAAEwI,EAAGxI,EAAE2O,EAAG3O,EAAEvF,EAAGuF,EAAEwd,SACtD,GAAIxd,aAAakf,GAAK,OAAOC,GAAQnf,GAC/BA,aAAakd,KAAMld,EAAIud,GAAWvd,IACxC,IAGuE7E,EAAGikB,EAHtE/B,EAAIgC,GAASrf,EAAEqd,GACfC,EAAI+B,GAASrf,EAAEsd,GACf7iB,EAAI4kB,GAASrf,EAAEvF,GACf6kB,EAAIC,IAAS,SAAYlC,EAAI,SAAYC,EAAI,SAAY7iB,GAdtD,GAmBP,OAJI4iB,IAAMC,GAAKA,IAAM7iB,EAAGU,EAAIikB,EAAIE,GAC9BnkB,EAAIokB,IAAS,SAAYlC,EAAI,SAAYC,EAAI,SAAY7iB,GAAKikB,IAC9DU,EAAIG,IAAS,SAAYlC,EAAI,SAAYC,EAAI,SAAY7iB,GAAKkkB,KAEzD,IAAIM,GAAI,IAAMK,EAAI,GAAI,KAAOnkB,EAAImkB,GAAI,KAAOA,EAAIF,GAAIpf,EAAEwd,QAC/D,CAMA,SAASyB,GAAIzW,EAAGmG,EAAGlU,EAAG+iB,GACpBt9B,KAAKsoB,GAAKA,EACVtoB,KAAKyuB,GAAKA,EACVzuB,KAAKua,GAAKA,EACVva,KAAKs9B,SAAWA,CAClB,CAyBA,SAAS+B,GAAQ3mB,GACf,OAAOA,EAAImmB,GAAKnvB,KAAKmiB,IAAInZ,EAAG,EAAI,GAAKA,EAAIkmB,GAAKF,EAChD,CAEA,SAASY,GAAQ5mB,GACf,OAAOA,EAAIimB,GAAKjmB,EAAIA,EAAIA,EAAIkmB,IAAMlmB,EAAIgmB,GACxC,CAEA,SAASa,GAAStkB,GAChB,OAAO,KAAOA,GAAK,SAAY,MAAQA,EAAI,MAAQvL,KAAKmiB,IAAI5W,EAAG,EAAI,KAAO,KAC5E,CAEA,SAASkkB,GAASlkB,GAChB,OAAQA,GAAK,MAAQ,OAAUA,EAAI,MAAQvL,KAAKmiB,KAAK5W,EAAI,MAAS,MAAO,IAC3E,CAcA,SAAS+jB,GAAIrB,EAAG6B,EAAGlX,EAAGgV,GACpBt9B,KAAK29B,GAAKA,EACV39B,KAAKw/B,GAAKA,EACVx/B,KAAKsoB,GAAKA,EACVtoB,KAAKs9B,SAAWA,CAClB,CAEA,SAAS2B,GAAQnf,GACf,GAAI4d,MAAM5d,EAAE6d,GAAI,OAAO,IAAIoB,GAAIjf,EAAEwI,EAAG,EAAG,EAAGxI,EAAEwd,SAC5C,IAAIK,EAAI7d,EAAE6d,EAAIU,GACd,OAAO,IAAIU,GAAIjf,EAAEwI,EAAG5Y,KAAK+vB,IAAI9B,GAAK7d,EAAE0f,EAAG9vB,KAAKgwB,IAAI/B,GAAK7d,EAAE0f,EAAG1f,EAAEwd,QAC9D,CA9DAl/B,GAAO2gC,IAXP,SAAazW,EAAGmG,EAAGlU,EAAG+iB,GACpB,OAA4B,IAArB/2B,UAAU1F,OAAei+B,GAAWxW,GAAK,IAAIyW,GAAIzW,EAAGmG,EAAGlU,EAAc,MAAX+iB,EAAkB,EAAIA,EACzF,GASiBzc,GAAOuR,GAAO,CAC7BE,SAAU,SAAS1kB,GACjB,OAAO,IAAImxB,GAAI/+B,KAAKsoB,EArChB,IAqC8B,MAAL1a,EAAY,EAAIA,GAAI5N,KAAKyuB,EAAGzuB,KAAKua,EAAGva,KAAKs9B,QACxE,EACAjL,OAAQ,SAASzkB,GACf,OAAO,IAAImxB,GAAI/+B,KAAKsoB,EAxChB,IAwC8B,MAAL1a,EAAY,EAAIA,GAAI5N,KAAKyuB,EAAGzuB,KAAKua,EAAGva,KAAKs9B,QACxE,EACAf,IAAK,WACH,IAAI6C,GAAKp/B,KAAKsoB,EAAI,IAAM,IACpBrN,EAAIyiB,MAAM19B,KAAKyuB,GAAK2Q,EAAIA,EAAIp/B,KAAKyuB,EAAI,IACrCyQ,EAAIxB,MAAM19B,KAAKua,GAAK6kB,EAAIA,EAAIp/B,KAAKua,EAAI,IAIzC,OAAO,IAAIyiB,GACTuC,GAAU,WAJZtkB,EAAIujB,GAAKc,GAAQrkB,IAIW,WAH5BmkB,EA7CK,EA6CIE,GAAQF,IAG2B,UAF5CF,EAAIT,GAAKa,GAAQJ,KAGfK,IAAU,SAAYtkB,EAAI,UAAYmkB,EAAI,QAAYF,GACtDK,GAAU,SAAYtkB,EAAI,SAAYmkB,EAAI,UAAYF,GACtDl/B,KAAKs9B,QAET,KA4CFl/B,GAAO4gC,IAjBP,SAAarB,EAAG6B,EAAGlX,EAAGgV,GACpB,OAA4B,IAArB/2B,UAAU1F,OATnB,SAAoBif,GAClB,GAAIA,aAAakf,GAAK,OAAO,IAAIA,GAAIlf,EAAE6d,EAAG7d,EAAE0f,EAAG1f,EAAEwI,EAAGxI,EAAEwd,SAEtD,GADMxd,aAAaif,KAAMjf,EAAIgf,GAAWhf,IAC5B,IAARA,EAAE2O,GAAmB,IAAR3O,EAAEvF,EAAS,OAAO,IAAIykB,GAAInO,IAAK,EAAI/Q,EAAEwI,GAAKxI,EAAEwI,EAAI,IAAM,EAAIuI,IAAK/Q,EAAEwI,EAAGxI,EAAEwd,SACvF,IAAIK,EAAIjuB,KAAKiwB,MAAM7f,EAAEvF,EAAGuF,EAAE2O,GAAK8P,GAC/B,OAAO,IAAIS,GAAIrB,EAAI,EAAIA,EAAI,IAAMA,EAAGjuB,KAAK0hB,KAAKtR,EAAE2O,EAAI3O,EAAE2O,EAAI3O,EAAEvF,EAAIuF,EAAEvF,GAAIuF,EAAEwI,EAAGxI,EAAEwd,QAC/E,CAGkCsC,CAAWjC,GAAK,IAAIqB,GAAIrB,EAAG6B,EAAGlX,EAAc,MAAXgV,EAAkB,EAAIA,EACzF,GAeiBzc,GAAOuR,GAAO,CAC7BE,SAAU,SAAS1kB,GACjB,OAAO,IAAIoxB,GAAIh/B,KAAK29B,EAAG39B,KAAKw/B,EAAGx/B,KAAKsoB,EArGhC,IAqG8C,MAAL1a,EAAY,EAAIA,GAAI5N,KAAKs9B,QACxE,EACAjL,OAAQ,SAASzkB,GACf,OAAO,IAAIoxB,GAAIh/B,KAAK29B,EAAG39B,KAAKw/B,EAAGx/B,KAAKsoB,EAxGhC,IAwG8C,MAAL1a,EAAY,EAAIA,GAAI5N,KAAKs9B,QACxE,EACAf,IAAK,WACH,OAAO0C,GAAQj/B,MAAMu8B,KACvB,KAGF,IAAIsD,IAAK,OACLC,GAAI,QACJC,IAAK,OACLC,IAAK,OACLC,GAAI,QACJC,GAAKD,GAAID,GACTG,GAAKF,GAAIH,GACTM,GAAQN,GAAIC,GAAIC,GAAIH,GAoBxB,SAASQ,GAAU1C,EAAGzxB,EAAGoc,EAAGgV,GAC1Bt9B,KAAK29B,GAAKA,EACV39B,KAAKkM,GAAKA,EACVlM,KAAKsoB,GAAKA,EACVtoB,KAAKs9B,SAAWA,CAClB,CA0BA,SAASgD,GAASrlB,GAChB,OAAO,WACL,OAAOA,CACT,CACF,CAcA,SAASslB,GAAMnB,GACb,OAAoB,IAAZA,GAAKA,GAAWoB,GAAU,SAAS/R,EAAGlU,GAC5C,OAAOA,EAAIkU,EARf,SAAqBA,EAAGlU,EAAG6kB,GACzB,OAAO3Q,EAAI/e,KAAKmiB,IAAIpD,EAAG2Q,GAAI7kB,EAAI7K,KAAKmiB,IAAItX,EAAG6kB,GAAK3Q,EAAG2Q,EAAI,EAAIA,EAAG,SAAS1mB,GACrE,OAAOhJ,KAAKmiB,IAAIpD,EAAI/V,EAAI6B,EAAG6kB,EAC7B,CACF,CAImBqB,CAAYhS,EAAGlU,EAAG6kB,GAAKkB,GAAS5C,MAAMjP,GAAKlU,EAAIkU,EAChE,CACF,CAEA,SAAS+R,GAAQ/R,EAAGlU,GAClB,IAAIhO,EAAIgO,EAAIkU,EACZ,OAAOliB,EApBT,SAAgBkiB,EAAGliB,GACjB,OAAO,SAASmM,GACd,OAAO+V,EAAI/V,EAAInM,CACjB,CACF,CAgBam0B,CAAOjS,EAAGliB,GAAK+zB,GAAS5C,MAAMjP,GAAKlU,EAAIkU,EACpD,CAnDArwB,GAAOiiC,IAXP,SAAmB1C,EAAGzxB,EAAGoc,EAAGgV,GAC1B,OAA4B,IAArB/2B,UAAU1F,OAfnB,SAA0Bif,GACxB,GAAIA,aAAaugB,GAAW,OAAO,IAAIA,GAAUvgB,EAAE6d,EAAG7d,EAAE5T,EAAG4T,EAAEwI,EAAGxI,EAAEwd,SAC5Dxd,aAAakd,KAAMld,EAAIud,GAAWvd,IACxC,IAAIqd,EAAIrd,EAAEqd,EAAI,IACVC,EAAItd,EAAEsd,EAAI,IACV7iB,EAAIuF,EAAEvF,EAAI,IACV+N,GAAK8X,GAAQ7lB,EAAI2lB,GAAK/C,EAAIgD,GAAK/C,IAAMgD,GAAQF,GAAKC,IAClDQ,EAAKpmB,EAAI+N,EACT1a,GAAKqyB,IAAK7C,EAAI9U,GAAKyX,GAAIY,GAAMX,GAC7B9zB,EAAIwD,KAAK0hB,KAAKxjB,EAAIA,EAAI+yB,EAAKA,IAAOV,GAAI3X,GAAK,EAAIA,IAC/CqV,EAAIzxB,EAAIwD,KAAKiwB,MAAM/xB,EAAG+yB,GAAMpC,GAAU,IAAM1N,IAChD,OAAO,IAAIwP,GAAU1C,EAAI,EAAIA,EAAI,IAAMA,EAAGzxB,EAAGoc,EAAGxI,EAAEwd,QACpD,CAGkCsD,CAAiBjD,GAAK,IAAI0C,GAAU1C,EAAGzxB,EAAGoc,EAAc,MAAXgV,EAAkB,EAAIA,EACrG,GAS6Bzc,GAAOuR,GAAO,CACzCE,SAAU,SAAS1kB,GAEjB,OADAA,EAAS,MAALA,EAAY0kB,GAAW5iB,KAAKmiB,IAAIS,GAAU1kB,GACvC,IAAIyyB,GAAUrgC,KAAK29B,EAAG39B,KAAKkM,EAAGlM,KAAKsoB,EAAI1a,EAAG5N,KAAKs9B,QACxD,EACAjL,OAAQ,SAASzkB,GAEf,OADAA,EAAS,MAALA,EAAYykB,GAAS3iB,KAAKmiB,IAAIQ,GAAQzkB,GACnC,IAAIyyB,GAAUrgC,KAAK29B,EAAG39B,KAAKkM,EAAGlM,KAAKsoB,EAAI1a,EAAG5N,KAAKs9B,QACxD,EACAf,IAAK,WACH,IAAIoB,EAAID,MAAM19B,KAAK29B,GAAK,GAAK39B,KAAK29B,EAAI,KAAOU,GACzC/V,GAAKtoB,KAAKsoB,EACVmG,EAAIiP,MAAM19B,KAAKkM,GAAK,EAAIlM,KAAKkM,EAAIoc,GAAK,EAAIA,GAC1CuY,EAAOnxB,KAAK+vB,IAAI9B,GAChBmD,EAAOpxB,KAAKgwB,IAAI/B,GACpB,OAAO,IAAIX,GACT,KAAO1U,EAAImG,GAAKoR,GAAIgB,EAAOf,GAAIgB,IAC/B,KAAOxY,EAAImG,GAAKsR,GAAIc,EAAOb,GAAIc,IAC/B,KAAOxY,EAAImG,GAAKwR,GAAIY,IACpB7gC,KAAKs9B,QAET,KAgCF,IAAIyD,GAAS,SAASC,EAAS5B,GAC7B,IAAIzC,EAAQ4D,GAAMnB,GAElB,SAAS2B,EAAM3nB,EAAOE,GACpB,IAAI6jB,EAAIR,GAAOvjB,EAAQmjB,GAAInjB,IAAQ+jB,GAAI7jB,EAAMijB,GAAIjjB,IAAM6jB,GACnDC,EAAIT,EAAMvjB,EAAMgkB,EAAG9jB,EAAI8jB,GACvB7iB,EAAIoiB,EAAMvjB,EAAMmB,EAAGjB,EAAIiB,GACvB+iB,EAAUkD,GAAQpnB,EAAMkkB,QAAShkB,EAAIgkB,SACzC,OAAO,SAAS5kB,GAKd,OAJAU,EAAM+jB,EAAIA,EAAEzkB,GACZU,EAAMgkB,EAAIA,EAAE1kB,GACZU,EAAMmB,EAAIA,EAAE7B,GACZU,EAAMkkB,QAAUA,EAAQ5kB,GACjBU,EAAQ,EACjB,CACF,CAIA,OAFA2nB,EAAMR,MAAQS,EAEPD,CACT,CApBa,CAoBV,GAEH,SAASE,GAAYxS,EAAGlU,GACjBA,IAAGA,EAAI,IACZ,IAEIxR,EAFAvK,EAAIiwB,EAAI/e,KAAKC,IAAI4K,EAAE1Z,OAAQ4tB,EAAE5tB,QAAU,EACvC2+B,EAAIjlB,EAAE3Z,QAEV,OAAO,SAAS8X,GACd,IAAK3P,EAAI,EAAGA,EAAIvK,IAAKuK,EAAGy2B,EAAEz2B,GAAK0lB,EAAE1lB,IAAM,EAAI2P,GAAK6B,EAAExR,GAAK2P,EACvD,OAAO8mB,CACT,CACF,CAMA,SAAS0B,GAAazS,EAAGlU,GACvB,IAIIxR,EAJAo4B,EAAK5mB,EAAIA,EAAE1Z,OAAS,EACpBugC,EAAK3S,EAAI/e,KAAKC,IAAIwxB,EAAI1S,EAAE5tB,QAAU,EAClCoa,EAAI,IAAIzX,MAAM49B,GACd5B,EAAI,IAAIh8B,MAAM29B,GAGlB,IAAKp4B,EAAI,EAAGA,EAAIq4B,IAAMr4B,EAAGkS,EAAElS,GAAKs4B,GAAY5S,EAAE1lB,GAAIwR,EAAExR,IACpD,KAAOA,EAAIo4B,IAAMp4B,EAAGy2B,EAAEz2B,GAAKwR,EAAExR,GAE7B,OAAO,SAAS2P,GACd,IAAK3P,EAAI,EAAGA,EAAIq4B,IAAMr4B,EAAGy2B,EAAEz2B,GAAKkS,EAAElS,GAAG2P,GACrC,OAAO8mB,CACT,CACF,CAEA,SAAS9gC,GAAK+vB,EAAGlU,GACf,IAAIhO,EAAI,IAAI6G,KACZ,OAAOqb,GAAKA,EAAGlU,GAAKA,EAAG,SAAS7B,GAC9B,OAAOnM,EAAE+0B,QAAQ7S,GAAK,EAAI/V,GAAK6B,EAAI7B,GAAInM,CACzC,CACF,CAEA,SAASg1B,GAAkB9S,EAAGlU,GAC5B,OAAOkU,GAAKA,EAAGlU,GAAKA,EAAG,SAAS7B,GAC9B,OAAO+V,GAAK,EAAI/V,GAAK6B,EAAI7B,CAC3B,CACF,CAEA,SAAS5Y,GAAO2uB,EAAGlU,GACjB,IAEI3M,EAFA7E,EAAI,CAAC,EACLy2B,EAAI,CAAC,EAMT,IAAK5xB,KAHK,OAAN6gB,GAA2B,WAAbxrB,EAAOwrB,KAAgBA,EAAI,CAAC,GACpC,OAANlU,GAA2B,WAAbtX,EAAOsX,KAAgBA,EAAI,CAAC,GAEpCA,EACJ3M,KAAK6gB,EACP1lB,EAAE6E,GAAKyzB,GAAY5S,EAAE7gB,GAAI2M,EAAE3M,IAE3B4xB,EAAE5xB,GAAK2M,EAAE3M,GAIb,OAAO,SAAS8K,GACd,IAAK9K,KAAK7E,EAAGy2B,EAAE5xB,GAAK7E,EAAE6E,GAAG8K,GACzB,OAAO8mB,CACT,CACF,CAEA,IAAIgC,GAAM,8CACNC,GAAM,IAAIjd,OAAOgd,GAAI78B,OAAQ,KAcjC,SAAS0V,GAAOoU,EAAGlU,GACjB,IACImnB,EACAC,EACAC,EAHAC,EAAKL,GAAI5c,UAAY6c,GAAI7c,UAAY,EAIrC7b,GAAK,EACLmD,EAAI,GACJ41B,EAAI,GAMR,IAHArT,GAAQ,GAAIlU,GAAQ,IAGZmnB,EAAKF,GAAIxyB,KAAKyf,MACdkT,EAAKF,GAAIzyB,KAAKuL,MACfqnB,EAAKD,EAAGt5B,OAASw5B,IACpBD,EAAKrnB,EAAE3Z,MAAMihC,EAAID,GACb11B,EAAEnD,GAAImD,EAAEnD,IAAM64B,EACb11B,IAAInD,GAAK64B,IAEXF,EAAKA,EAAG,OAASC,EAAKA,EAAG,IACxBz1B,EAAEnD,GAAImD,EAAEnD,IAAM44B,EACbz1B,IAAInD,GAAK44B,GAEdz1B,IAAInD,GAAK,KACT+4B,EAAEx4B,KAAK,CAACP,EAAGA,EAAGkS,EAAGsmB,GAAkBG,EAAIC,MAEzCE,EAAKJ,GAAI7c,UAYX,OARIid,EAAKtnB,EAAE1Z,SACT+gC,EAAKrnB,EAAE3Z,MAAMihC,GACT31B,EAAEnD,GAAImD,EAAEnD,IAAM64B,EACb11B,IAAInD,GAAK64B,GAKT11B,EAAErL,OAAS,EAAKihC,EAAE,GA7C3B,SAAavnB,GACX,OAAO,SAAS7B,GACd,OAAO6B,EAAE7B,GAAK,EAChB,CACF,CA0CQqpB,CAAID,EAAE,GAAG7mB,GApDjB,SAAcV,GACZ,OAAO,WACL,OAAOA,CACT,CACF,CAiDQynB,CAAKznB,IACJA,EAAIunB,EAAEjhC,OAAQ,SAAS6X,GACtB,IAAK,IAAWoH,EAAP/W,EAAI,EAAMA,EAAIwR,IAAKxR,EAAGmD,GAAG4T,EAAIgiB,EAAE/4B,IAAIA,GAAK+W,EAAE7E,EAAEvC,GACrD,OAAOxM,EAAEpL,KAAK,GAChB,EACR,CAEA,SAASugC,GAAY5S,EAAGlU,GACtB,IAAkBilB,EAvHGvkB,EAuHjBvC,EAACzV,EAAUsX,GACf,OAAY,MAALA,GAAmB,YAAN7B,EAAkB4nB,GAAS/lB,IAClC,WAAN7B,EAAiB6oB,GACZ,WAAN7oB,GAAmB8mB,EAAI7C,GAAMpiB,KAAOA,EAAIilB,EAAGuB,IAAS1mB,GACpDE,aAAaoiB,GAAQoE,GACrBxmB,aAAanH,KAAO1U,IA5HLuc,EA6HDV,GA5Hb0nB,YAAYC,OAAOjnB,IAAQA,aAAaknB,SA6HzC3+B,MAAMqc,QAAQtF,GAAK2mB,GACE,mBAAd3mB,EAAEoO,SAAgD,mBAAfpO,EAAEnb,UAA2Bs+B,MAAMnjB,GAAKza,GAClFyhC,GAHmBN,KAGAxS,EAAGlU,EAC9B,CAEA,SAAS6nB,GAAiB3T,EAAGlU,GAC3B,OAAOkU,GAAKA,EAAGlU,GAAKA,EAAG,SAAS7B,GAC9B,OAAOhJ,KAAKic,MAAM8C,GAAK,EAAI/V,GAAK6B,EAAI7B,EACtC,CACF,CAQA,SAAS/J,GAAOsM,GACd,OAAQA,CACV,CAEA,IAAIonB,GAAO,CAAC,EAAG,GAEf,SAASC,GAASrnB,GAChB,OAAOA,CACT,CAEA,SAASsnB,GAAU9T,EAAGlU,GACpB,OAAQA,GAAMkU,GAAKA,GACb,SAASxT,GAAK,OAAQA,EAAIwT,GAAKlU,CAAG,GAlBtBU,EAmBDyiB,MAAMnjB,GAAKsW,IAAM,GAlB3B,WACL,OAAO5V,CACT,GAHF,IAAoBA,CAoBpB,CAUA,SAASunB,GAAMzQ,EAAQC,EAAOqP,GAC5B,IAAIoB,EAAK1Q,EAAO,GAAI2Q,EAAK3Q,EAAO,GAAI4Q,EAAK3Q,EAAM,GAAI4Q,EAAK5Q,EAAM,GAG9D,OAFI0Q,EAAKD,GAAIA,EAAKF,GAAUG,EAAID,GAAKE,EAAKtB,EAAYuB,EAAID,KACrDF,EAAKF,GAAUE,EAAIC,GAAKC,EAAKtB,EAAYsB,EAAIC,IAC3C,SAAS3nB,GAAK,OAAO0nB,EAAGF,EAAGxnB,GAAK,CACzC,CAEA,SAAS4nB,GAAQ9Q,EAAQC,EAAOqP,GAC9B,IAAIld,EAAIzU,KAAKC,IAAIoiB,EAAOlxB,OAAQmxB,EAAMnxB,QAAU,EAC5C0L,EAAI,IAAI/I,MAAM2gB,GACdgZ,EAAI,IAAI35B,MAAM2gB,GACdpb,GAAK,EAQT,IALIgpB,EAAO5N,GAAK4N,EAAO,KACrBA,EAASA,EAAOnxB,QAAQkiC,UACxB9Q,EAAQA,EAAMpxB,QAAQkiC,aAGf/5B,EAAIob,GACX5X,EAAExD,GAAKw5B,GAAUxQ,EAAOhpB,GAAIgpB,EAAOhpB,EAAI,IACvCo0B,EAAEp0B,GAAKs4B,EAAYrP,EAAMjpB,GAAIipB,EAAMjpB,EAAI,IAGzC,OAAO,SAASkS,GACd,IAAIlS,EAAIgoB,GAAYgB,EAAQ9W,EAAG,EAAGkJ,GAAK,EACvC,OAAOgZ,EAAEp0B,GAAGwD,EAAExD,GAAGkS,GACnB,CACF,CAWA,SAAS8nB,KACP,IAGIC,EACAC,EACAC,EAEAC,EACAC,EACA7qB,EATAwZ,EAASsQ,GACTrQ,EAAQqQ,GACRgB,EAAgBhC,GAIhBiC,EAAQhB,GAKZ,SAASiB,IACP,IA5Da9U,EAAGlU,EACd7B,EA2DEla,EAAIkR,KAAKC,IAAIoiB,EAAOlxB,OAAQmxB,EAAMnxB,QAItC,OAHIyiC,IAAUhB,KA7DD7T,EA6D2BsD,EAAO,GA7D/BxX,EA6DmCwX,EAAOvzB,EAAI,GA3D5DiwB,EAAIlU,IAAG7B,EAAI+V,EAAGA,EAAIlU,EAAGA,EAAI7B,GA2DH4qB,EA1DnB,SAASroB,GAAK,OAAOvL,KAAKgiB,IAAIjD,EAAG/e,KAAKC,IAAI4K,EAAGU,GAAK,GA2DvDkoB,EAAY3kC,EAAI,EAAIqkC,GAAUL,GAC9BY,EAAS7qB,EAAQ,KACVirB,CACT,CAEA,SAASA,EAAMvoB,GACb,OAAOyiB,MAAMziB,GAAKA,GAAKioB,GAAWE,IAAWA,EAASD,EAAUpR,EAAOrvB,IAAIsgC,GAAYhR,EAAOqR,KAAiBL,EAAUM,EAAMroB,IACjI,CA8BA,OA5BAuoB,EAAMC,OAAS,SAASrE,GACtB,OAAOkE,EAAML,GAAa1qB,IAAUA,EAAQ4qB,EAAUnR,EAAOD,EAAOrvB,IAAIsgC,GAAYzB,MAAqBnC,IAC3G,EAEAoE,EAAMzR,OAAS,SAAS1S,GACtB,OAAO9Y,UAAU1F,QAAUkxB,EAASvuB,MAAMC,KAAK4b,EAAG1Q,IAAS40B,KAAaxR,EAAOnxB,OACjF,EAEA4iC,EAAMxR,MAAQ,SAAS3S,GACrB,OAAO9Y,UAAU1F,QAAUmxB,EAAQxuB,MAAMC,KAAK4b,GAAIkkB,KAAavR,EAAMpxB,OACvE,EAEA4iC,EAAME,WAAa,SAASrkB,GAC1B,OAAO2S,EAAQxuB,MAAMC,KAAK4b,GAAIgkB,EAAgBjB,GAAkBmB,GAClE,EAEAC,EAAMF,MAAQ,SAASjkB,GACrB,OAAO9Y,UAAU1F,QAAUyiC,IAAQjkB,GAAWijB,GAAUiB,KAAaD,IAAUhB,EACjF,EAEAkB,EAAMnC,YAAc,SAAShiB,GAC3B,OAAO9Y,UAAU1F,QAAUwiC,EAAgBhkB,EAAGkkB,KAAaF,CAC7D,EAEAG,EAAMN,QAAU,SAAS7jB,GACvB,OAAO9Y,UAAU1F,QAAUqiC,EAAU7jB,EAAGmkB,GAASN,CACnD,EAEO,SAASxqB,EAAGirB,GAEjB,OADAX,EAAYtqB,EAAGuqB,EAAcU,EACtBJ,GACT,CACF,CASA,SAASK,GAAc3oB,EAAG6J,GACxB,IAAK/b,GAAKkS,EAAI6J,EAAI7J,EAAE4oB,cAAc/e,EAAI,GAAK7J,EAAE4oB,iBAAiBx6B,QAAQ,MAAQ,EAAG,OAAO,KACxF,IAAIN,EAAG+6B,EAAc7oB,EAAEra,MAAM,EAAGmI,GAIhC,MAAO,CACL+6B,EAAYjjC,OAAS,EAAIijC,EAAY,GAAKA,EAAYljC,MAAM,GAAKkjC,GAChE7oB,EAAEra,MAAMmI,EAAI,GAEjB,CAEA,SAASg7B,GAAS9oB,GAChB,OAAOA,EAAI2oB,GAAcl0B,KAAKs0B,IAAI/oB,KAASA,EAAE,GAAK4V,GACpD,CA8BA,IA2DIoT,GA3DAC,GAAK,2EAET,SAASC,GAAgBC,GACvB,KAAMvrB,EAAQqrB,GAAGl1B,KAAKo1B,IAAa,MAAM,IAAI5hC,MAAM,mBAAqB4hC,GACxE,IAAIvrB,EACJ,OAAO,IAAIwrB,GAAgB,CACzBC,KAAMzrB,EAAM,GACZ0rB,MAAO1rB,EAAM,GACb2rB,KAAM3rB,EAAM,GACZ4rB,OAAQ5rB,EAAM,GACdmpB,KAAMnpB,EAAM,GACZmT,MAAOnT,EAAM,GACb6rB,MAAO7rB,EAAM,GACb8rB,UAAW9rB,EAAM,IAAMA,EAAM,GAAGjY,MAAM,GACtCiN,KAAMgL,EAAM,GACZ7P,KAAM6P,EAAM,KAEhB,CAIA,SAASwrB,GAAgBD,GACvBpkC,KAAKskC,UAA0B3iC,IAAnByiC,EAAUE,KAAqB,IAAMF,EAAUE,KAAO,GAClEtkC,KAAKukC,WAA4B5iC,IAApByiC,EAAUG,MAAsB,IAAMH,EAAUG,MAAQ,GACrEvkC,KAAKwkC,UAA0B7iC,IAAnByiC,EAAUI,KAAqB,IAAMJ,EAAUI,KAAO,GAClExkC,KAAKykC,YAA8B9iC,IAArByiC,EAAUK,OAAuB,GAAKL,EAAUK,OAAS,GACvEzkC,KAAKgiC,OAASoC,EAAUpC,KACxBhiC,KAAKgsB,WAA4BrqB,IAApByiC,EAAUpY,WAAsBrqB,GAAayiC,EAAUpY,MACpEhsB,KAAK0kC,QAAUN,EAAUM,MACzB1kC,KAAK2kC,eAAoChjC,IAAxByiC,EAAUO,eAA0BhjC,GAAayiC,EAAUO,UAC5E3kC,KAAK6N,OAASu2B,EAAUv2B,KACxB7N,KAAKgJ,UAA0BrH,IAAnByiC,EAAUp7B,KAAqB,GAAKo7B,EAAUp7B,KAAO,EACnE,CA0CA,SAAS47B,GAAc3pB,EAAG6J,GACxB,IAAIvY,EAAIq3B,GAAc3oB,EAAG6J,GACzB,IAAKvY,EAAG,OAAO0O,EAAI,GACnB,IAAI6oB,EAAcv3B,EAAE,GAChBw3B,EAAWx3B,EAAE,GACjB,OAAOw3B,EAAW,EAAI,KAAO,IAAIvgC,OAAOugC,GAAUjjC,KAAK,KAAOgjC,EACxDA,EAAYjjC,OAASkjC,EAAW,EAAID,EAAYljC,MAAM,EAAGmjC,EAAW,GAAK,IAAMD,EAAYljC,MAAMmjC,EAAW,GAC5GD,EAAc,IAAItgC,MAAMugC,EAAWD,EAAYjjC,OAAS,GAAGC,KAAK,IACxE,CA/DAqjC,GAAgB1uB,UAAY4uB,GAAgB5uB,UAe5C4uB,GAAgB5uB,UAAUrW,SAAW,WACnC,OAAOY,KAAKskC,KACNtkC,KAAKukC,MACLvkC,KAAKwkC,KACLxkC,KAAKykC,QACJzkC,KAAKgiC,KAAO,IAAM,UACHrgC,IAAf3B,KAAKgsB,MAAsB,GAAKtc,KAAKgiB,IAAI,EAAgB,EAAb1xB,KAAKgsB,SACjDhsB,KAAK0kC,MAAQ,IAAM,UACA/iC,IAAnB3B,KAAK2kC,UAA0B,GAAK,IAAMj1B,KAAKgiB,IAAI,EAAoB,EAAjB1xB,KAAK2kC,aAC3D3kC,KAAK6N,KAAO,IAAM,IACnB7N,KAAKgJ,IACb,EAuCA,IAAI67B,GAAc,CAChB,IAAK,SAAS5pB,EAAG6J,GAAK,OAAY,IAAJ7J,GAAS6pB,QAAQhgB,EAAI,EACnD,EAAK,SAAS7J,GAAK,OAAOvL,KAAKic,MAAM1Q,GAAG7b,SAAS,EAAI,EACrD,EAAK,SAAS6b,GAAK,OAAOA,EAAI,EAAI,EAClC,EAAK,SAASA,GAAK,OAAOvL,KAAKic,MAAM1Q,GAAG7b,SAAS,GAAK,EACtD,EAAK,SAAS6b,EAAG6J,GAAK,OAAO7J,EAAE4oB,cAAc/e,EAAI,EACjD,EAAK,SAAS7J,EAAG6J,GAAK,OAAO7J,EAAE6pB,QAAQhgB,EAAI,EAC3C,EAAK,SAAS7J,EAAG6J,GAAK,OAAO7J,EAAE8pB,YAAYjgB,EAAI,EAC/C,EAAK,SAAS7J,GAAK,OAAOvL,KAAKic,MAAM1Q,GAAG7b,SAAS,EAAI,EACrD,EAAK,SAAS6b,EAAG6J,GAAK,OAAO8f,GAAkB,IAAJ3pB,EAAS6J,EAAI,EACxD,EAAK8f,GACL,EAlCF,SAA0B3pB,EAAG6J,GAC3B,IAAIvY,EAAIq3B,GAAc3oB,EAAG6J,GACzB,IAAKvY,EAAG,OAAO0O,EAAI,GACnB,IAAI6oB,EAAcv3B,EAAE,GAChBw3B,EAAWx3B,EAAE,GACbxD,EAAIg7B,GAAYE,GAAuE,EAAtDv0B,KAAKgiB,KAAK,EAAGhiB,KAAKC,IAAI,EAAGD,KAAKkZ,MAAMmb,EAAW,MAAY,EAC5FvlC,EAAIslC,EAAYjjC,OACpB,OAAOkI,IAAMvK,EAAIslC,EACX/6B,EAAIvK,EAAIslC,EAAc,IAAItgC,MAAMuF,EAAIvK,EAAI,GAAGsC,KAAK,KAChDiI,EAAI,EAAI+6B,EAAYljC,MAAM,EAAGmI,GAAK,IAAM+6B,EAAYljC,MAAMmI,GAC1D,KAAO,IAAIvF,MAAM,EAAIuF,GAAGjI,KAAK,KAAO8iC,GAAc3oB,EAAGvL,KAAKgiB,IAAI,EAAG5M,EAAI/b,EAAI,IAAI,EACrF,EAwBE,EAAK,SAASkS,GAAK,OAAOvL,KAAKic,MAAM1Q,GAAG7b,SAAS,IAAI4lC,aAAe,EACpE,EAAK,SAAS/pB,GAAK,OAAOvL,KAAKic,MAAM1Q,GAAG7b,SAAS,GAAK,GAGxD,SAAS6lC,GAAWhqB,GAClB,OAAOA,CACT,CAEA,IA4IIiqB,GACAtI,GACAuI,GA9IAziC,GAAMc,MAAMiS,UAAU/S,IACtB0iC,GAAW,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAE/E,SAASC,GAAaH,GACpB,IAxImBI,EAAUC,EAwIzBC,OAA4B7jC,IAApBujC,EAAOI,eAA+C3jC,IAArBujC,EAAOK,UAA0BN,IAxI3DK,EAwIoF5iC,GAAIqd,KAAKmlB,EAAOI,SAAUG,QAxIpGF,EAwI6GL,EAAOK,UAAY,GAvItJ,SAAStjC,EAAO+pB,GAOrB,IANA,IAAIjjB,EAAI9G,EAAMpB,OACV6X,EAAI,GACJyL,EAAI,EACJiZ,EAAIkI,EAAS,GACbzkC,EAAS,EAENkI,EAAI,GAAKq0B,EAAI,IACdv8B,EAASu8B,EAAI,EAAIpR,IAAOoR,EAAI1tB,KAAKgiB,IAAI,EAAG1F,EAAQnrB,IACpD6X,EAAEpP,KAAKrH,EAAMpD,UAAUkK,GAAKq0B,EAAGr0B,EAAIq0B,OAC9Bv8B,GAAUu8B,EAAI,GAAKpR,KACxBoR,EAAIkI,EAASnhB,GAAKA,EAAI,GAAKmhB,EAASzkC,QAGtC,OAAO6X,EAAEoqB,UAAUhiC,KAAKykC,EAC1B,GAyHIG,OAAqC/jC,IAApBujC,EAAOS,SAAyB,GAAKT,EAAOS,SAAS,GAAK,GAC3EC,OAAqCjkC,IAApBujC,EAAOS,SAAyB,GAAKT,EAAOS,SAAS,GAAK,GAC3EE,OAA6BlkC,IAAnBujC,EAAOW,QAAwB,IAAMX,EAAOW,QAAU,GAChEC,OAA+BnkC,IAApBujC,EAAOY,SAAyBb,GAzHjD,SAAwBa,GACtB,OAAO,SAAS7jC,GACd,OAAOA,EAAMsM,QAAQ,UAAU,SAASxF,GACtC,OAAO+8B,GAAU/8B,EACnB,GACF,CACF,CAmH8Dg9B,CAAerjC,GAAIqd,KAAKmlB,EAAOY,SAAUzyB,SACjG2yB,OAA6BrkC,IAAnBujC,EAAOc,QAAwB,IAAMd,EAAOc,QAAU,GAChEC,OAAyBtkC,IAAjBujC,EAAOe,MAAsB,IAAMf,EAAOe,MAAQ,GAC1DC,OAAqBvkC,IAAfujC,EAAOgB,IAAoB,MAAQhB,EAAOgB,IAAM,GAE1D,SAASC,EAAU/B,GAGjB,IAAIE,GAFJF,EAAYD,GAAgBC,IAEPE,KACjBC,EAAQH,EAAUG,MAClBC,EAAOJ,EAAUI,KACjBC,EAASL,EAAUK,OACnBzC,EAAOoC,EAAUpC,KACjBhW,EAAQoY,EAAUpY,MAClB0Y,EAAQN,EAAUM,MAClBC,EAAYP,EAAUO,UACtB92B,EAAOu2B,EAAUv2B,KACjB7E,EAAOo7B,EAAUp7B,KAGR,MAATA,GAAc07B,GAAQ,EAAM17B,EAAO,KAG7B67B,GAAY77B,UAAqBrH,IAAdgjC,IAA4BA,EAAY,IAAK92B,GAAO,EAAM7E,EAAO,MAG1Fg5B,GAAkB,MAATsC,GAA0B,MAAVC,KAAgBvC,GAAO,EAAMsC,EAAO,IAAKC,EAAQ,KAI9E,IAAI6B,EAAoB,MAAX3B,EAAiBiB,EAA4B,MAAXjB,GAAkB,SAASjtB,KAAKxO,GAAQ,IAAMA,EAAKnG,cAAgB,GAC9GwjC,EAAoB,MAAX5B,EAAiBmB,EAAiB,OAAOpuB,KAAKxO,GAAQg9B,EAAU,GAKzEM,EAAazB,GAAY77B,GACzBu9B,EAAc,aAAa/uB,KAAKxO,GAUpC,SAAS4zB,EAAO36B,GACd,IAEI8G,EAAGvK,EAAGghC,EAFNgH,EAAcJ,EACdK,EAAcJ,EAGlB,GAAa,MAATr9B,EACFy9B,EAAcH,EAAWrkC,GAASwkC,EAClCxkC,EAAQ,OACH,CAIL,IAAIykC,GAHJzkC,GAASA,GAGmB,GAAK,EAAIA,EAAQ,EAiB7C,GAdAA,EAAQy7B,MAAMz7B,GAASikC,EAAMI,EAAW52B,KAAKs0B,IAAI/hC,GAAQ0iC,GAGrD92B,IAAM5L,EAjIlB,SAAoBiK,GAClBwO,EAAK,IAAK,IAAkCisB,EAA9BnoC,EAAI0N,EAAErL,OAAQkI,EAAI,EAAG69B,GAAM,EAAO79B,EAAIvK,IAAKuK,EACvD,OAAQmD,EAAEnD,IACR,IAAK,IAAK69B,EAAKD,EAAK59B,EAAG,MACvB,IAAK,IAAgB,IAAP69B,IAAUA,EAAK79B,GAAG49B,EAAK59B,EAAG,MACxC,QAAS,KAAMmD,EAAEnD,GAAI,MAAM2R,EAASksB,EAAK,IAAGA,EAAK,GAGrD,OAAOA,EAAK,EAAI16B,EAAEtL,MAAM,EAAGgmC,GAAM16B,EAAEtL,MAAM+lC,EAAK,GAAKz6B,CACrD,CAwH0B26B,CAAW5kC,IAGzBykC,GAA4B,IAAVzkC,GAAwB,MAATuiC,IAAckC,GAAgB,GAGnEF,GAAeE,EAA0B,MAATlC,EAAeA,EAAOyB,EAAkB,MAATzB,GAAyB,MAATA,EAAe,GAAKA,GAAQgC,EAC3GC,GAAwB,MAATz9B,EAAeo8B,GAAS,EAAInB,GAAiB,GAAK,IAAMwC,GAAeC,GAA0B,MAATlC,EAAe,IAAM,IAIxH+B,EAEF,IADAx9B,GAAK,EAAGvK,EAAIyD,EAAMpB,SACTkI,EAAIvK,GACX,GAA6B,IAAzBghC,EAAIv9B,EAAM6kC,WAAW/9B,KAAcy2B,EAAI,GAAI,CAC7CiH,GAAqB,KAANjH,EAAWqG,EAAU5jC,EAAMrB,MAAMmI,EAAI,GAAK9G,EAAMrB,MAAMmI,IAAM09B,EAC3ExkC,EAAQA,EAAMrB,MAAM,EAAGmI,GACvB,KACF,CAGN,CAGI27B,IAAU1C,IAAM//B,EAAQujC,EAAMvjC,EAAO8kC,MAGzC,IAAIlmC,EAAS2lC,EAAY3lC,OAASoB,EAAMpB,OAAS4lC,EAAY5lC,OACzDmmC,EAAUnmC,EAASmrB,EAAQ,IAAIxoB,MAAMwoB,EAAQnrB,EAAS,GAAGC,KAAKwjC,GAAQ,GAM1E,OAHII,GAAS1C,IAAM//B,EAAQujC,EAAMwB,EAAU/kC,EAAO+kC,EAAQnmC,OAASmrB,EAAQya,EAAY5lC,OAASkmC,KAAWC,EAAU,IAG7GzC,GACN,IAAK,IAAKtiC,EAAQukC,EAAcvkC,EAAQwkC,EAAcO,EAAS,MAC/D,IAAK,IAAK/kC,EAAQukC,EAAcQ,EAAU/kC,EAAQwkC,EAAa,MAC/D,IAAK,IAAKxkC,EAAQ+kC,EAAQpmC,MAAM,EAAGC,EAASmmC,EAAQnmC,QAAU,GAAK2lC,EAAcvkC,EAAQwkC,EAAcO,EAAQpmC,MAAMC,GAAS,MAC9H,QAASoB,EAAQ+kC,EAAUR,EAAcvkC,EAAQwkC,EAGnD,OAAOX,EAAS7jC,EAClB,CAMA,OAtEA0iC,OAA0BhjC,IAAdgjC,EAA0B,EAChC,SAASntB,KAAKxO,GAAQ0G,KAAKgiB,IAAI,EAAGhiB,KAAKC,IAAI,GAAIg1B,IAC/Cj1B,KAAKgiB,IAAI,EAAGhiB,KAAKC,IAAI,GAAIg1B,IAgE/B/H,EAAOx9B,SAAW,WAChB,OAAOglC,EAAY,EACrB,EAEOxH,CACT,CAYA,MAAO,CACLA,OAAQuJ,EACRhB,aAZF,SAAsBf,EAAWniC,GAC/B,IAAImK,EAAI+5B,IAAW/B,EAAYD,GAAgBC,IAAsBp7B,KAAO,IAAKo7B,IAC7Eh6B,EAAiE,EAA7DsF,KAAKgiB,KAAK,EAAGhiB,KAAKC,IAAI,EAAGD,KAAKkZ,MAAMmb,GAAS9hC,GAAS,KAC1D2L,EAAI8B,KAAKmiB,IAAI,IAAKznB,GAClBg8B,EAAShB,GAAS,EAAIh7B,EAAI,GAC9B,OAAO,SAASnI,GACd,OAAOmK,EAAEwB,EAAI3L,GAASmkC,CACxB,CACF,EAMF,CAkCA,SAASa,GAAW7tB,EAAOoY,EAAMrM,EAAOif,GACtC,IACIO,EADAlT,EA3sCN,SAAkBrY,EAAOoY,EAAMrM,GAC7B,IAAI+hB,EAAQx3B,KAAKs0B,IAAIxS,EAAOpY,GAAS1J,KAAKgiB,IAAI,EAAGvM,GAC7CgiB,EAAQz3B,KAAKmiB,IAAI,GAAIniB,KAAKkZ,MAAMlZ,KAAK+C,IAAIy0B,GAASx3B,KAAKkiB,OACvD1rB,EAAQghC,EAAQC,EAIpB,OAHIjhC,GAASirB,GAAKgW,GAAS,GAClBjhC,GAASmrB,GAAI8V,GAAS,EACtBjhC,GAASorB,KAAI6V,GAAS,GACxB3V,EAAOpY,GAAS+tB,EAAQA,CACjC,CAmsCaC,CAAShuB,EAAOoY,EAAMrM,GAGjC,QADAif,EAAYD,GAA6B,MAAbC,EAAoB,KAAOA,IACrCp7B,MAChB,IAAK,IACH,IAAI/G,EAAQyN,KAAKgiB,IAAIhiB,KAAKs0B,IAAI5qB,GAAQ1J,KAAKs0B,IAAIxS,IAE/C,OAD2B,MAAvB4S,EAAUO,WAAsBjH,MAAMiH,EAhBhD,SAAyBlT,EAAMxvB,GAC7B,OAAOyN,KAAKgiB,IAAI,EAAgE,EAA7DhiB,KAAKgiB,KAAK,EAAGhiB,KAAKC,IAAI,EAAGD,KAAKkZ,MAAMmb,GAAS9hC,GAAS,KAAW8hC,GAASr0B,KAAKs0B,IAAIvS,IACxG,CAc4D4V,CAAgB5V,EAAMxvB,MAASmiC,EAAUO,UAAYA,GACpGQ,GAAaf,EAAWniC,GAEjC,IAAK,GACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACwB,MAAvBmiC,EAAUO,WAAsBjH,MAAMiH,EApBhD,SAAwBlT,EAAMC,GAE5B,OADAD,EAAO/hB,KAAKs0B,IAAIvS,GAAOC,EAAMhiB,KAAKs0B,IAAItS,GAAOD,EACtC/hB,KAAKgiB,IAAI,EAAGqS,GAASrS,GAAOqS,GAAStS,IAAS,CACvD,CAiB4D6V,CAAe7V,EAAM/hB,KAAKgiB,IAAIhiB,KAAKs0B,IAAI5qB,GAAQ1J,KAAKs0B,IAAIxS,QAAU4S,EAAUO,UAAYA,GAAgC,MAAnBP,EAAUp7B,OACrK,MAEF,IAAK,IACL,IAAK,IACwB,MAAvBo7B,EAAUO,WAAsBjH,MAAMiH,EAjChD,SAAwBlT,GACtB,OAAO/hB,KAAKgiB,IAAI,GAAIqS,GAASr0B,KAAKs0B,IAAIvS,IACxC,CA+B4D8V,CAAe9V,MAAQ2S,EAAUO,UAAYA,EAAuC,GAAP,MAAnBP,EAAUp7B,OAI9H,OAAO4zB,GAAOwH,EAChB,CAEA,SAASoD,GAAUhE,GACjB,IAAIzR,EAASyR,EAAMzR,OAoDnB,OAlDAyR,EAAMiE,MAAQ,SAAStiB,GACrB,IAAI5Y,EAAIwlB,IACR,OAhxCJ,SAAe3Y,EAAOoY,EAAMrM,GAC1B,IAAI2d,EAEAtkC,EACAipC,EACAhW,EAHA1oB,GAAK,EAMT,GAD8Boc,GAASA,GAAzB/L,GAASA,KAAvBoY,GAAQA,IACcrM,EAAQ,EAAG,MAAO,CAAC/L,GAEzC,IADI0pB,EAAUtR,EAAOpY,KAAO5a,EAAI4a,EAAOA,EAAQoY,EAAMA,EAAOhzB,GACT,KAA9CizB,EAAOF,GAAcnY,EAAOoY,EAAMrM,MAAkBuiB,SAASjW,GAAO,MAAO,GAEhF,GAAIA,EAAO,EAIT,IAHArY,EAAQ1J,KAAKi4B,KAAKvuB,EAAQqY,GAC1BD,EAAO9hB,KAAKkZ,MAAM4I,EAAOC,GACzBgW,EAAQ,IAAIjkC,MAAMhF,EAAIkR,KAAKi4B,KAAKnW,EAAOpY,EAAQ,MACtCrQ,EAAIvK,GAAGipC,EAAM1+B,IAAMqQ,EAAQrQ,GAAK0oB,OAKzC,IAHArY,EAAQ1J,KAAKkZ,MAAMxP,EAAQqY,GAC3BD,EAAO9hB,KAAKi4B,KAAKnW,EAAOC,GACxBgW,EAAQ,IAAIjkC,MAAMhF,EAAIkR,KAAKi4B,KAAKvuB,EAAQoY,EAAO,MACtCzoB,EAAIvK,GAAGipC,EAAM1+B,IAAMqQ,EAAQrQ,GAAK0oB,EAK3C,OAFIqR,GAAS2E,EAAM3E,UAEZ2E,CACT,CAqvCWA,CAAMl7B,EAAE,GAAIA,EAAEA,EAAE1L,OAAS,GAAa,MAATskB,EAAgB,GAAKA,EAC3D,EAEAqe,EAAMyD,WAAa,SAAS9hB,EAAOif,GACjC,IAAI73B,EAAIwlB,IACR,OAAOkV,GAAW16B,EAAE,GAAIA,EAAEA,EAAE1L,OAAS,GAAa,MAATskB,EAAgB,GAAKA,EAAOif,EACvE,EAEAZ,EAAMoE,KAAO,SAASziB,GACP,MAATA,IAAeA,EAAQ,IAE3B,IAKIsM,EALAllB,EAAIwlB,IACJ6U,EAAK,EACLD,EAAKp6B,EAAE1L,OAAS,EAChBuY,EAAQ7M,EAAEq6B,GACVpV,EAAOjlB,EAAEo6B,GA8Bb,OA3BInV,EAAOpY,IACTqY,EAAOrY,EAAOA,EAAQoY,EAAMA,EAAOC,EACnCA,EAAOmV,EAAIA,EAAKD,EAAIA,EAAKlV,IAG3BA,EAAOF,GAAcnY,EAAOoY,EAAMrM,IAEvB,EAGTsM,EAAOF,GAFPnY,EAAQ1J,KAAKkZ,MAAMxP,EAAQqY,GAAQA,EACnCD,EAAO9hB,KAAKi4B,KAAKnW,EAAOC,GAAQA,EACEtM,GACzBsM,EAAO,IAGhBA,EAAOF,GAFPnY,EAAQ1J,KAAKi4B,KAAKvuB,EAAQqY,GAAQA,EAClCD,EAAO9hB,KAAKkZ,MAAM4I,EAAOC,GAAQA,EACCtM,IAGhCsM,EAAO,GACTllB,EAAEq6B,GAAMl3B,KAAKkZ,MAAMxP,EAAQqY,GAAQA,EACnCllB,EAAEo6B,GAAMj3B,KAAKi4B,KAAKnW,EAAOC,GAAQA,EACjCM,EAAOxlB,IACEklB,EAAO,IAChBllB,EAAEq6B,GAAMl3B,KAAKi4B,KAAKvuB,EAAQqY,GAAQA,EAClCllB,EAAEo6B,GAAMj3B,KAAKkZ,MAAM4I,EAAOC,GAAQA,EAClCM,EAAOxlB,IAGFi3B,CACT,EAEOA,CACT,CAEA,SAASqE,KACP,IAAIrE,EA1ZGT,KAAcT,GAAUA,IAka/B,OANAkB,EAAMvF,KAAO,WACX,OAjeUt5B,EAieE6+B,EAAOqE,KA/dhB9V,OAAOptB,EAAOotB,UACdC,MAAMrtB,EAAOqtB,SACbqP,YAAY18B,EAAO08B,eACnBiC,MAAM3+B,EAAO2+B,SACbJ,QAAQv+B,EAAOu+B,WANtB,IAAcv+B,CAkeZ,EAEAmtB,GAAU9P,MAAMwhB,EAAOj9B,WAEhBihC,GAAUhE,EACnB,CAhHE0B,GAASG,GATG,CACZQ,QAAS,IACTN,UAAW,IACXD,SAAU,CAAC,GACXK,SAAU,CAAC,IAAK,IAChBM,MAAO,MAKPrJ,GAASsI,GAAOtI,OAChBuI,GAAeD,GAAOC,aAgHxB,IAAI2C,GAAO,IAAI10B,KACX20B,GAAO,IAAI30B,KAEf,SAAS40B,GAAYC,EAAQC,EAAS/iB,EAAOgjB,GAE3C,SAASC,EAAS1pC,GAChB,OAAOupC,EAAOvpC,EAA4B,IAArB6H,UAAU1F,OAAe,IAAIuS,KAAO,IAAIA,MAAM1U,IAAQA,CAC7E,CA6DA,OA3DA0pC,EAASxf,MAAQ,SAASlqB,GACxB,OAAOupC,EAAOvpC,EAAO,IAAI0U,MAAM1U,IAAQA,CACzC,EAEA0pC,EAAST,KAAO,SAASjpC,GACvB,OAAOupC,EAAOvpC,EAAO,IAAI0U,KAAK1U,EAAO,IAAKwpC,EAAQxpC,EAAM,GAAIupC,EAAOvpC,GAAOA,CAC5E,EAEA0pC,EAASzc,MAAQ,SAASjtB,GACxB,IAAI+jC,EAAK2F,EAAS1pC,GACdgkC,EAAK0F,EAAST,KAAKjpC,GACvB,OAAOA,EAAO+jC,EAAKC,EAAKhkC,EAAO+jC,EAAKC,CACtC,EAEA0F,EAASC,OAAS,SAAS3pC,EAAM+yB,GAC/B,OAAOyW,EAAQxpC,EAAO,IAAI0U,MAAM1U,GAAe,MAAR+yB,EAAe,EAAI/hB,KAAKkZ,MAAM6I,IAAQ/yB,CAC/E,EAEA0pC,EAASpW,MAAQ,SAAS5Y,EAAOoY,EAAMC,GACrC,IAAgB6W,EAAZtW,EAAQ,GAGZ,GAFA5Y,EAAQgvB,EAAST,KAAKvuB,GACtBqY,EAAe,MAARA,EAAe,EAAI/hB,KAAKkZ,MAAM6I,KAC/BrY,EAAQoY,GAAWC,EAAO,GAAI,OAAOO,EAC3C,GAAGA,EAAM1oB,KAAKg/B,EAAW,IAAIl1B,MAAMgG,IAAS8uB,EAAQ9uB,EAAOqY,GAAOwW,EAAO7uB,SAClEkvB,EAAWlvB,GAASA,EAAQoY,GACnC,OAAOQ,CACT,EAEAoW,EAAShyB,OAAS,SAASoB,GACzB,OAAOwwB,IAAY,SAAStpC,GAC1B,GAAIA,GAAQA,EAAM,KAAOupC,EAAOvpC,IAAQ8Y,EAAK9Y,IAAOA,EAAK4iC,QAAQ5iC,EAAO,EAC1E,IAAG,SAASA,EAAM+yB,GAChB,GAAI/yB,GAAQA,EACV,GAAI+yB,EAAO,EAAG,OAASA,GAAQ,GAC7B,KAAOyW,EAAQxpC,GAAO,IAAK8Y,EAAK9Y,UAC3B,OAAS+yB,GAAQ,GACtB,KAAOyW,EAAQxpC,EAAM,IAAM8Y,EAAK9Y,KAGtC,GACF,EAEIymB,IACFijB,EAASjjB,MAAQ,SAAS/L,EAAOE,GAG/B,OAFAwuB,GAAKxG,SAASloB,GAAQ2uB,GAAKzG,SAAShoB,GACpC2uB,EAAOH,IAAOG,EAAOF,IACdr4B,KAAKkZ,MAAMzD,EAAM2iB,GAAMC,IAChC,EAEAK,EAASzyB,MAAQ,SAAS8b,GAExB,OADAA,EAAO/hB,KAAKkZ,MAAM6I,GACViW,SAASjW,IAAWA,EAAO,EAC3BA,EAAO,EACT2W,EAAShyB,OAAO+xB,EACZ,SAAS57B,GAAK,OAAO47B,EAAM57B,GAAKklB,GAAS,CAAG,EAC5C,SAASllB,GAAK,OAAO67B,EAASjjB,MAAM,EAAG5Y,GAAKklB,GAAS,CAAG,GAH9C2W,EADoB,IAK1C,GAGKA,CACT,CAEA,IAAIG,GAAcP,IAAY,WAC5B,IACC,SAAStpC,EAAM+yB,GAChB/yB,EAAK4iC,SAAS5iC,EAAO+yB,EACvB,IAAG,SAASrY,EAAOE,GACjB,OAAOA,EAAMF,CACf,IAGAmvB,GAAY5yB,MAAQ,SAAS/H,GAE3B,OADAA,EAAI8B,KAAKkZ,MAAMhb,GACV85B,SAAS95B,IAAQA,EAAI,EACpBA,EAAI,EACHo6B,IAAY,SAAStpC,GAC1BA,EAAK4iC,QAAQ5xB,KAAKkZ,MAAMlqB,EAAOkP,GAAKA,EACtC,IAAG,SAASlP,EAAM+yB,GAChB/yB,EAAK4iC,SAAS5iC,EAAO+yB,EAAO7jB,EAC9B,IAAG,SAASwL,EAAOE,GACjB,OAAQA,EAAMF,GAASxL,CACzB,IAPqB26B,GADgB,IASvC,EAEA,IAAIC,GAAiB,IACjBC,GAAiB,IACjBC,GAAe,KACfC,GAAc,MACdC,GAAe,OAgCfjqC,IA9BSqpC,IAAY,SAAStpC,GAChCA,EAAK4iC,QAAQ5iC,EAAOA,EAAKmqC,kBAC3B,IAAG,SAASnqC,EAAM+yB,GAChB/yB,EAAK4iC,SAAS5iC,EAAO+yB,EAAO+W,GAC9B,IAAG,SAASpvB,EAAOE,GACjB,OAAQA,EAAMF,GAASovB,EACzB,IAAG,SAAS9pC,GACV,OAAOA,EAAKgB,eACd,IAEasoC,IAAY,SAAStpC,GAChCA,EAAK4iC,QAAQ5iC,EAAOA,EAAKmqC,kBAAoBnqC,EAAKoqC,aAAeN,GACnE,IAAG,SAAS9pC,EAAM+yB,GAChB/yB,EAAK4iC,SAAS5iC,EAAO+yB,EAAOgX,GAC9B,IAAG,SAASrvB,EAAOE,GACjB,OAAQA,EAAMF,GAASqvB,EACzB,IAAG,SAAS/pC,GACV,OAAOA,EAAKqqC,YACd,IAEWf,IAAY,SAAStpC,GAC9BA,EAAK4iC,QAAQ5iC,EAAOA,EAAKmqC,kBAAoBnqC,EAAKoqC,aAAeN,GAAiB9pC,EAAKqqC,aAAeN,GACxG,IAAG,SAAS/pC,EAAM+yB,GAChB/yB,EAAK4iC,SAAS5iC,EAAO+yB,EAAOiX,GAC9B,IAAG,SAAStvB,EAAOE,GACjB,OAAQA,EAAMF,GAASsvB,EACzB,IAAG,SAAShqC,GACV,OAAOA,EAAKsqC,UACd,IAEUhB,IAAY,SAAStpC,GAC7BA,EAAKuqC,SAAS,EAAG,EAAG,EAAG,EACzB,IAAG,SAASvqC,EAAM+yB,GAChB/yB,EAAKwqC,QAAQxqC,EAAKK,UAAY0yB,EAChC,IAAG,SAASrY,EAAOE,GACjB,OAAQA,EAAMF,GAASE,EAAI6vB,oBAAsB/vB,EAAM+vB,qBAAuBV,IAAkBE,EAClG,IAAG,SAASjqC,GACV,OAAOA,EAAKK,UAAY,CAC1B,KAEA,SAASqqC,GAAQrgC,GACf,OAAOi/B,IAAY,SAAStpC,GAC1BA,EAAKwqC,QAAQxqC,EAAKK,WAAaL,EAAKE,SAAW,EAAImK,GAAK,GACxDrK,EAAKuqC,SAAS,EAAG,EAAG,EAAG,EACzB,IAAG,SAASvqC,EAAM+yB,GAChB/yB,EAAKwqC,QAAQxqC,EAAKK,UAAmB,EAAP0yB,EAChC,IAAG,SAASrY,EAAOE,GACjB,OAAQA,EAAMF,GAASE,EAAI6vB,oBAAsB/vB,EAAM+vB,qBAAuBV,IAAkBG,EAClG,GACF,CAEA,IAAIS,GAASD,GAAQ,GACjBE,GAASF,GAAQ,GAGjBG,IAFUH,GAAQ,GACNA,GAAQ,GACTA,GAAQ,IAenBlqC,IAdSkqC,GAAQ,GACNA,GAAQ,GAEXpB,IAAY,SAAStpC,GAC/BA,EAAKwqC,QAAQ,GACbxqC,EAAKuqC,SAAS,EAAG,EAAG,EAAG,EACzB,IAAG,SAASvqC,EAAM+yB,GAChB/yB,EAAK8qC,SAAS9qC,EAAKO,WAAawyB,EAClC,IAAG,SAASrY,EAAOE,GACjB,OAAOA,EAAIra,WAAama,EAAMna,WAAyD,IAA3Cqa,EAAIna,cAAgBia,EAAMja,cACxE,IAAG,SAAST,GACV,OAAOA,EAAKO,UACd,IAEW+oC,IAAY,SAAStpC,GAC9BA,EAAK8qC,SAAS,EAAG,GACjB9qC,EAAKuqC,SAAS,EAAG,EAAG,EAAG,EACzB,IAAG,SAASvqC,EAAM+yB,GAChB/yB,EAAK+qC,YAAY/qC,EAAKS,cAAgBsyB,EACxC,IAAG,SAASrY,EAAOE,GACjB,OAAOA,EAAIna,cAAgBia,EAAMja,aACnC,IAAG,SAAST,GACV,OAAOA,EAAKS,aACd,KAGAD,GAAKyW,MAAQ,SAAS/H,GACpB,OAAQ85B,SAAS95B,EAAI8B,KAAKkZ,MAAMhb,KAASA,EAAI,EAAYo6B,IAAY,SAAStpC,GAC5EA,EAAK+qC,YAAY/5B,KAAKkZ,MAAMlqB,EAAKS,cAAgByO,GAAKA,GACtDlP,EAAK8qC,SAAS,EAAG,GACjB9qC,EAAKuqC,SAAS,EAAG,EAAG,EAAG,EACzB,IAAG,SAASvqC,EAAM+yB,GAChB/yB,EAAK+qC,YAAY/qC,EAAKS,cAAgBsyB,EAAO7jB,EAC/C,IANkD,IAOpD,EAEgBo6B,IAAY,SAAStpC,GACnCA,EAAKgrC,cAAc,EAAG,EACxB,IAAG,SAAShrC,EAAM+yB,GAChB/yB,EAAK4iC,SAAS5iC,EAAO+yB,EAAOgX,GAC9B,IAAG,SAASrvB,EAAOE,GACjB,OAAQA,EAAMF,GAASqvB,EACzB,IAAG,SAAS/pC,GACV,OAAOA,EAAKc,eACd,IAEcwoC,IAAY,SAAStpC,GACjCA,EAAKirC,cAAc,EAAG,EAAG,EAC3B,IAAG,SAASjrC,EAAM+yB,GAChB/yB,EAAK4iC,SAAS5iC,EAAO+yB,EAAOiX,GAC9B,IAAG,SAAStvB,EAAOE,GACjB,OAAQA,EAAMF,GAASsvB,EACzB,IAAG,SAAShqC,GACV,OAAOA,EAAKY,aACd,IAlBA,IAoBIsqC,GAAS5B,IAAY,SAAStpC,GAChCA,EAAKmrC,YAAY,EAAG,EAAG,EAAG,EAC5B,IAAG,SAASnrC,EAAM+yB,GAChB/yB,EAAKorC,WAAWprC,EAAKqrC,aAAetY,EACtC,IAAG,SAASrY,EAAOE,GACjB,OAAQA,EAAMF,GAASuvB,EACzB,IAAG,SAASjqC,GACV,OAAOA,EAAKqrC,aAAe,CAC7B,IAEA,SAASC,GAAWjhC,GAClB,OAAOi/B,IAAY,SAAStpC,GAC1BA,EAAKorC,WAAWprC,EAAKqrC,cAAgBrrC,EAAKurC,YAAc,EAAIlhC,GAAK,GACjErK,EAAKmrC,YAAY,EAAG,EAAG,EAAG,EAC5B,IAAG,SAASnrC,EAAM+yB,GAChB/yB,EAAKorC,WAAWprC,EAAKqrC,aAAsB,EAAPtY,EACtC,IAAG,SAASrY,EAAOE,GACjB,OAAQA,EAAMF,GAASwvB,EACzB,GACF,CAEA,IAAIsB,GAAYF,GAAW,GACvBG,GAAYH,GAAW,GAGvBI,IAFaJ,GAAW,GACTA,GAAW,GACZA,GAAW,IAezBK,IAdYL,GAAW,GACTA,GAAW,GAEdhC,IAAY,SAAStpC,GAClCA,EAAKorC,WAAW,GAChBprC,EAAKmrC,YAAY,EAAG,EAAG,EAAG,EAC5B,IAAG,SAASnrC,EAAM+yB,GAChB/yB,EAAK4rC,YAAY5rC,EAAK6rC,cAAgB9Y,EACxC,IAAG,SAASrY,EAAOE,GACjB,OAAOA,EAAIixB,cAAgBnxB,EAAMmxB,cAAkE,IAAjDjxB,EAAIkxB,iBAAmBpxB,EAAMoxB,iBACjF,IAAG,SAAS9rC,GACV,OAAOA,EAAK6rC,aACd,IAEcvC,IAAY,SAAStpC,GACjCA,EAAK4rC,YAAY,EAAG,GACpB5rC,EAAKmrC,YAAY,EAAG,EAAG,EAAG,EAC5B,IAAG,SAASnrC,EAAM+yB,GAChB/yB,EAAK+rC,eAAe/rC,EAAK8rC,iBAAmB/Y,EAC9C,IAAG,SAASrY,EAAOE,GACjB,OAAOA,EAAIkxB,iBAAmBpxB,EAAMoxB,gBACtC,IAAG,SAAS9rC,GACV,OAAOA,EAAK8rC,gBACd,KAaA,SAASE,GAAUn+B,GACjB,GAAI,GAAKA,EAAE6yB,GAAK7yB,EAAE6yB,EAAI,IAAK,CACzB,IAAI1gC,EAAO,IAAI0U,MAAM,EAAG7G,EAAEswB,EAAGtwB,EAAEA,EAAGA,EAAEo+B,EAAGp+B,EAAEq+B,EAAGr+B,EAAEs+B,EAAGt+B,EAAEu+B,GAEnD,OADApsC,EAAK+qC,YAAYl9B,EAAE6yB,GACZ1gC,CACT,CACA,OAAO,IAAI0U,KAAK7G,EAAE6yB,EAAG7yB,EAAEswB,EAAGtwB,EAAEA,EAAGA,EAAEo+B,EAAGp+B,EAAEq+B,EAAGr+B,EAAEs+B,EAAGt+B,EAAEu+B,EAClD,CAEA,SAASC,GAAQx+B,GACf,GAAI,GAAKA,EAAE6yB,GAAK7yB,EAAE6yB,EAAI,IAAK,CACzB,IAAI1gC,EAAO,IAAI0U,KAAKA,KAAK43B,KAAK,EAAGz+B,EAAEswB,EAAGtwB,EAAEA,EAAGA,EAAEo+B,EAAGp+B,EAAEq+B,EAAGr+B,EAAEs+B,EAAGt+B,EAAEu+B,IAE5D,OADApsC,EAAK+rC,eAAel+B,EAAE6yB,GACf1gC,CACT,CACA,OAAO,IAAI0U,KAAKA,KAAK43B,IAAIz+B,EAAE6yB,EAAG7yB,EAAEswB,EAAGtwB,EAAEA,EAAGA,EAAEo+B,EAAGp+B,EAAEq+B,EAAGr+B,EAAEs+B,EAAGt+B,EAAEu+B,GAC3D,CAEA,SAASG,GAAQ7L,EAAGvC,EAAGtwB,GACrB,MAAO,CAAC6yB,EAAGA,EAAGvC,EAAGA,EAAGtwB,EAAGA,EAAGo+B,EAAG,EAAGC,EAAG,EAAGC,EAAG,EAAGC,EAAG,EACjD,CA9BAT,GAAQ10B,MAAQ,SAAS/H,GACvB,OAAQ85B,SAAS95B,EAAI8B,KAAKkZ,MAAMhb,KAASA,EAAI,EAAYo6B,IAAY,SAAStpC,GAC5EA,EAAK+rC,eAAe/6B,KAAKkZ,MAAMlqB,EAAK8rC,iBAAmB58B,GAAKA,GAC5DlP,EAAK4rC,YAAY,EAAG,GACpB5rC,EAAKmrC,YAAY,EAAG,EAAG,EAAG,EAC5B,IAAG,SAASnrC,EAAM+yB,GAChB/yB,EAAK+rC,eAAe/rC,EAAK8rC,iBAAmB/Y,EAAO7jB,EACrD,IANkD,IAOpD,EAkXA,IA2RIs9B,GAGAC,GACAC,GA/RAC,GAAO,CAAC,IAAK,GAAI,EAAK,IAAK,EAAK,KAChCC,GAAW,UACXC,GAAY,KACZC,GAAY,sBAEhB,SAASC,GAAIxpC,EAAOqiC,EAAMtY,GACxB,IAAIwY,EAAOviC,EAAQ,EAAI,IAAM,GACzBoY,GAAUmqB,GAAQviC,EAAQA,GAAS,GACnCpB,EAASwZ,EAAOxZ,OACpB,OAAO2jC,GAAQ3jC,EAASmrB,EAAQ,IAAIxoB,MAAMwoB,EAAQnrB,EAAS,GAAGC,KAAKwjC,GAAQjqB,EAASA,EACtF,CAEA,SAASqxB,GAAQx/B,GACf,OAAOA,EAAEqC,QAAQi9B,GAAW,OAC9B,CAEA,SAASG,GAASjrC,GAChB,OAAO,IAAI8jB,OAAO,OAAS9jB,EAAMgC,IAAIgpC,IAAS5qC,KAAK,KAAO,IAAK,IACjE,CAEA,SAAS8qC,GAAalrC,GAEpB,IADA,IAAIgC,EAAM,CAAC,EAAGqG,GAAK,EAAGvK,EAAIkC,EAAMG,SACvBkI,EAAIvK,GAAGkE,EAAIhC,EAAMqI,GAAGlG,eAAiBkG,EAC9C,OAAOrG,CACT,CAEA,SAASmpC,GAAyBt/B,EAAG8N,EAAQtR,GAC3C,IAAIvK,EAAI8sC,GAASt8B,KAAKqL,EAAOzZ,MAAMmI,EAAGA,EAAI,IAC1C,OAAOvK,GAAK+N,EAAEu/B,GAAKttC,EAAE,GAAIuK,EAAIvK,EAAE,GAAGqC,SAAW,CAC/C,CAEA,SAASkrC,GAAyBx/B,EAAG8N,EAAQtR,GAC3C,IAAIvK,EAAI8sC,GAASt8B,KAAKqL,EAAOzZ,MAAMmI,EAAGA,EAAI,IAC1C,OAAOvK,GAAK+N,EAAEo3B,GAAKnlC,EAAE,GAAIuK,EAAIvK,EAAE,GAAGqC,SAAW,CAC/C,CAEA,SAASmrC,GAAsBz/B,EAAG8N,EAAQtR,GACxC,IAAIvK,EAAI8sC,GAASt8B,KAAKqL,EAAOzZ,MAAMmI,EAAGA,EAAI,IAC1C,OAAOvK,GAAK+N,EAAE0/B,GAAKztC,EAAE,GAAIuK,EAAIvK,EAAE,GAAGqC,SAAW,CAC/C,CAEA,SAASqrC,GAAmB3/B,EAAG8N,EAAQtR,GACrC,IAAIvK,EAAI8sC,GAASt8B,KAAKqL,EAAOzZ,MAAMmI,EAAGA,EAAI,IAC1C,OAAOvK,GAAK+N,EAAE4/B,GAAK3tC,EAAE,GAAIuK,EAAIvK,EAAE,GAAGqC,SAAW,CAC/C,CAEA,SAASurC,GAAsB7/B,EAAG8N,EAAQtR,GACxC,IAAIvK,EAAI8sC,GAASt8B,KAAKqL,EAAOzZ,MAAMmI,EAAGA,EAAI,IAC1C,OAAOvK,GAAK+N,EAAE8/B,GAAK7tC,EAAE,GAAIuK,EAAIvK,EAAE,GAAGqC,SAAW,CAC/C,CAEA,SAASyrC,GAAc//B,EAAG8N,EAAQtR,GAChC,IAAIvK,EAAI8sC,GAASt8B,KAAKqL,EAAOzZ,MAAMmI,EAAGA,EAAI,IAC1C,OAAOvK,GAAK+N,EAAE6yB,GAAK5gC,EAAE,GAAIuK,EAAIvK,EAAE,GAAGqC,SAAW,CAC/C,CAEA,SAAS0rC,GAAUhgC,EAAG8N,EAAQtR,GAC5B,IAAIvK,EAAI8sC,GAASt8B,KAAKqL,EAAOzZ,MAAMmI,EAAGA,EAAI,IAC1C,OAAOvK,GAAK+N,EAAE6yB,GAAK5gC,EAAE,KAAOA,EAAE,GAAK,GAAK,KAAO,KAAOuK,EAAIvK,EAAE,GAAGqC,SAAW,CAC5E,CAEA,SAAS2rC,GAAUjgC,EAAG8N,EAAQtR,GAC5B,IAAIvK,EAAI,+BAA+BwQ,KAAKqL,EAAOzZ,MAAMmI,EAAGA,EAAI,IAChE,OAAOvK,GAAK+N,EAAEkgC,EAAIjuC,EAAE,GAAK,IAAMA,EAAE,IAAMA,EAAE,IAAM,OAAQuK,EAAIvK,EAAE,GAAGqC,SAAW,CAC7E,CAEA,SAAS6rC,GAAangC,EAAG8N,EAAQtR,GAC/B,IAAIvK,EAAI8sC,GAASt8B,KAAKqL,EAAOzZ,MAAMmI,EAAGA,EAAI,IAC1C,OAAOvK,GAAK+N,EAAEu1B,EAAW,EAAPtjC,EAAE,GAAS,EAAGuK,EAAIvK,EAAE,GAAGqC,SAAW,CACtD,CAEA,SAAS8rC,GAAiBpgC,EAAG8N,EAAQtR,GACnC,IAAIvK,EAAI8sC,GAASt8B,KAAKqL,EAAOzZ,MAAMmI,EAAGA,EAAI,IAC1C,OAAOvK,GAAK+N,EAAEswB,EAAIr+B,EAAE,GAAK,EAAGuK,EAAIvK,EAAE,GAAGqC,SAAW,CAClD,CAEA,SAAS+rC,GAAgBrgC,EAAG8N,EAAQtR,GAClC,IAAIvK,EAAI8sC,GAASt8B,KAAKqL,EAAOzZ,MAAMmI,EAAGA,EAAI,IAC1C,OAAOvK,GAAK+N,EAAEA,GAAK/N,EAAE,GAAIuK,EAAIvK,EAAE,GAAGqC,SAAW,CAC/C,CAEA,SAASgsC,GAAetgC,EAAG8N,EAAQtR,GACjC,IAAIvK,EAAI8sC,GAASt8B,KAAKqL,EAAOzZ,MAAMmI,EAAGA,EAAI,IAC1C,OAAOvK,GAAK+N,EAAEswB,EAAI,EAAGtwB,EAAEA,GAAK/N,EAAE,GAAIuK,EAAIvK,EAAE,GAAGqC,SAAW,CACxD,CAEA,SAASisC,GAAYvgC,EAAG8N,EAAQtR,GAC9B,IAAIvK,EAAI8sC,GAASt8B,KAAKqL,EAAOzZ,MAAMmI,EAAGA,EAAI,IAC1C,OAAOvK,GAAK+N,EAAEo+B,GAAKnsC,EAAE,GAAIuK,EAAIvK,EAAE,GAAGqC,SAAW,CAC/C,CAEA,SAASksC,GAAaxgC,EAAG8N,EAAQtR,GAC/B,IAAIvK,EAAI8sC,GAASt8B,KAAKqL,EAAOzZ,MAAMmI,EAAGA,EAAI,IAC1C,OAAOvK,GAAK+N,EAAEq+B,GAAKpsC,EAAE,GAAIuK,EAAIvK,EAAE,GAAGqC,SAAW,CAC/C,CAEA,SAASmsC,GAAazgC,EAAG8N,EAAQtR,GAC/B,IAAIvK,EAAI8sC,GAASt8B,KAAKqL,EAAOzZ,MAAMmI,EAAGA,EAAI,IAC1C,OAAOvK,GAAK+N,EAAEs+B,GAAKrsC,EAAE,GAAIuK,EAAIvK,EAAE,GAAGqC,SAAW,CAC/C,CAEA,SAASosC,GAAkB1gC,EAAG8N,EAAQtR,GACpC,IAAIvK,EAAI8sC,GAASt8B,KAAKqL,EAAOzZ,MAAMmI,EAAGA,EAAI,IAC1C,OAAOvK,GAAK+N,EAAEu+B,GAAKtsC,EAAE,GAAIuK,EAAIvK,EAAE,GAAGqC,SAAW,CAC/C,CAEA,SAASqsC,GAAkB3gC,EAAG8N,EAAQtR,GACpC,IAAIvK,EAAI8sC,GAASt8B,KAAKqL,EAAOzZ,MAAMmI,EAAGA,EAAI,IAC1C,OAAOvK,GAAK+N,EAAEu+B,EAAIp7B,KAAKkZ,MAAMpqB,EAAE,GAAK,KAAOuK,EAAIvK,EAAE,GAAGqC,SAAW,CACjE,CAEA,SAASssC,GAAoB5gC,EAAG8N,EAAQtR,GACtC,IAAIvK,EAAI+sC,GAAUv8B,KAAKqL,EAAOzZ,MAAMmI,EAAGA,EAAI,IAC3C,OAAOvK,EAAIuK,EAAIvK,EAAE,GAAGqC,QAAU,CAChC,CAEA,SAASusC,GAAmB7gC,EAAG8N,EAAQtR,GACrC,IAAIvK,EAAI8sC,GAASt8B,KAAKqL,EAAOzZ,MAAMmI,IACnC,OAAOvK,GAAK+N,EAAE8gC,GAAK7uC,EAAE,GAAIuK,EAAIvK,EAAE,GAAGqC,SAAW,CAC/C,CAEA,SAASysC,GAA0B/gC,EAAG8N,EAAQtR,GAC5C,IAAIvK,EAAI8sC,GAASt8B,KAAKqL,EAAOzZ,MAAMmI,IACnC,OAAOvK,GAAK+N,EAAEL,GAAK1N,EAAE,GAAIuK,EAAIvK,EAAE,GAAGqC,SAAW,CAC/C,CAEA,SAAS0sC,GAAiBhhC,EAAGuY,GAC3B,OAAO2mB,GAAIl/B,EAAExN,UAAW+lB,EAAG,EAC7B,CAEA,SAAS0oB,GAAajhC,EAAGuY,GACvB,OAAO2mB,GAAIl/B,EAAEy8B,WAAYlkB,EAAG,EAC9B,CAEA,SAAS2oB,GAAalhC,EAAGuY,GACvB,OAAO2mB,GAAIl/B,EAAEy8B,WAAa,IAAM,GAAIlkB,EAAG,EACzC,CAEA,SAAS4oB,GAAgBnhC,EAAGuY,GAC1B,OAAO2mB,GAAI,EAAI9sC,GAAIwmB,MAAMjmB,GAAKqN,GAAIA,GAAIuY,EAAG,EAC3C,CAEA,SAAS6oB,GAAmBphC,EAAGuY,GAC7B,OAAO2mB,GAAIl/B,EAAEs8B,kBAAmB/jB,EAAG,EACrC,CAEA,SAAS8oB,GAAmBrhC,EAAGuY,GAC7B,OAAO6oB,GAAmBphC,EAAGuY,GAAK,KACpC,CAEA,SAAS+oB,GAAkBthC,EAAGuY,GAC5B,OAAO2mB,GAAIl/B,EAAEtN,WAAa,EAAG6lB,EAAG,EAClC,CAEA,SAASgpB,GAAcvhC,EAAGuY,GACxB,OAAO2mB,GAAIl/B,EAAEw8B,aAAcjkB,EAAG,EAChC,CAEA,SAASipB,GAAcxhC,EAAGuY,GACxB,OAAO2mB,GAAIl/B,EAAEu8B,aAAchkB,EAAG,EAChC,CAEA,SAASkpB,GAA0BzhC,GACjC,IAAI5N,EAAM4N,EAAE3N,SACZ,OAAe,IAARD,EAAY,EAAIA,CACzB,CAEA,SAASsvC,GAAuB1hC,EAAGuY,GACjC,OAAO2mB,GAAIpC,GAAOlkB,MAAMjmB,GAAKqN,GAAK,EAAGA,GAAIuY,EAAG,EAC9C,CAEA,SAASopB,GAAoB3hC,EAAGuY,GAC9B,IAAInmB,EAAM4N,EAAE3N,SAEZ,OADA2N,EAAK5N,GAAO,GAAa,IAARA,EAAa4qC,GAASh9B,GAAKg9B,GAAS5B,KAAKp7B,GACnDk/B,GAAIlC,GAASpkB,MAAMjmB,GAAKqN,GAAIA,IAA2B,IAArBrN,GAAKqN,GAAG3N,UAAiBkmB,EAAG,EACvE,CAEA,SAASqpB,GAA0B5hC,GACjC,OAAOA,EAAE3N,QACX,CAEA,SAASwvC,GAAuB7hC,EAAGuY,GACjC,OAAO2mB,GAAInC,GAAOnkB,MAAMjmB,GAAKqN,GAAK,EAAGA,GAAIuY,EAAG,EAC9C,CAEA,SAASupB,GAAW9hC,EAAGuY,GACrB,OAAO2mB,GAAIl/B,EAAEpN,cAAgB,IAAK2lB,EAAG,EACvC,CAEA,SAASwpB,GAAe/hC,EAAGuY,GACzB,OAAO2mB,GAAIl/B,EAAEpN,cAAgB,IAAO2lB,EAAG,EACzC,CAEA,SAASypB,GAAWhiC,GAClB,IAAI2yB,EAAI3yB,EAAE48B,oBACV,OAAQjK,EAAI,EAAI,KAAOA,IAAM,EAAG,MAC1BuM,GAAIvM,EAAI,GAAK,EAAG,IAAK,GACrBuM,GAAIvM,EAAI,GAAI,IAAK,EACzB,CAEA,SAASsP,GAAoBjiC,EAAGuY,GAC9B,OAAO2mB,GAAIl/B,EAAEw9B,aAAcjlB,EAAG,EAChC,CAEA,SAAS2pB,GAAgBliC,EAAGuY,GAC1B,OAAO2mB,GAAIl/B,EAAEjN,cAAewlB,EAAG,EACjC,CAEA,SAAS4pB,GAAgBniC,EAAGuY,GAC1B,OAAO2mB,GAAIl/B,EAAEjN,cAAgB,IAAM,GAAIwlB,EAAG,EAC5C,CAEA,SAAS6pB,GAAmBpiC,EAAGuY,GAC7B,OAAO2mB,GAAI,EAAI7B,GAAOzkB,MAAMklB,GAAQ99B,GAAIA,GAAIuY,EAAG,EACjD,CAEA,SAAS8pB,GAAsBriC,EAAGuY,GAChC,OAAO2mB,GAAIl/B,EAAEsiC,qBAAsB/pB,EAAG,EACxC,CAEA,SAASgqB,GAAsBviC,EAAGuY,GAChC,OAAO8pB,GAAsBriC,EAAGuY,GAAK,KACvC,CAEA,SAASiqB,GAAqBxiC,EAAGuY,GAC/B,OAAO2mB,GAAIl/B,EAAEg+B,cAAgB,EAAGzlB,EAAG,EACrC,CAEA,SAASkqB,GAAiBziC,EAAGuY,GAC3B,OAAO2mB,GAAIl/B,EAAE/M,gBAAiBslB,EAAG,EACnC,CAEA,SAASmqB,GAAiB1iC,EAAGuY,GAC3B,OAAO2mB,GAAIl/B,EAAE7M,gBAAiBolB,EAAG,EACnC,CAEA,SAASoqB,GAA6B3iC,GACpC,IAAI4iC,EAAM5iC,EAAE09B,YACZ,OAAe,IAARkF,EAAY,EAAIA,CACzB,CAEA,SAASC,GAA0B7iC,EAAGuY,GACpC,OAAO2mB,GAAIvB,GAAU/kB,MAAMklB,GAAQ99B,GAAK,EAAGA,GAAIuY,EAAG,EACpD,CAEA,SAASuqB,GAAuB9iC,EAAGuY,GACjC,IAAInmB,EAAM4N,EAAE09B,YAEZ,OADA19B,EAAK5N,GAAO,GAAa,IAARA,EAAayrC,GAAY79B,GAAK69B,GAAYzC,KAAKp7B,GACzDk/B,GAAIrB,GAAYjlB,MAAMklB,GAAQ99B,GAAIA,IAAiC,IAA3B89B,GAAQ99B,GAAG09B,aAAoBnlB,EAAG,EACnF,CAEA,SAASwqB,GAA6B/iC,GACpC,OAAOA,EAAE09B,WACX,CAEA,SAASsF,GAA0BhjC,EAAGuY,GACpC,OAAO2mB,GAAItB,GAAUhlB,MAAMklB,GAAQ99B,GAAK,EAAGA,GAAIuY,EAAG,EACpD,CAEA,SAAS0qB,GAAcjjC,EAAGuY,GACxB,OAAO2mB,GAAIl/B,EAAEi+B,iBAAmB,IAAK1lB,EAAG,EAC1C,CAEA,SAAS2qB,GAAkBljC,EAAGuY,GAC5B,OAAO2mB,GAAIl/B,EAAEi+B,iBAAmB,IAAO1lB,EAAG,EAC5C,CAEA,SAAS4qB,KACP,MAAO,OACT,CAEA,SAASC,KACP,MAAO,GACT,CAEA,SAASC,GAAoBrjC,GAC3B,OAAQA,CACV,CAEA,SAASsjC,GAA2BtjC,GAClC,OAAOmD,KAAKkZ,OAAOrc,EAAI,IACzB,EAmBA,SAAyB2lB,IACvBgZ,GAvoBF,SAAwBhG,GACtB,IAAI4K,EAAkB5K,EAAO6K,SACzBC,EAAc9K,EAAOxmC,KACrBuxC,EAAc/K,EAAO7Y,KACrB6jB,EAAiBhL,EAAOiL,QACxBC,EAAkBlL,EAAO7mC,KACzBgyC,EAAuBnL,EAAOoL,UAC9BC,EAAgBrL,EAAO5mC,OACvBkyC,EAAqBtL,EAAOuL,YAE5BC,EAAW/E,GAASuE,GACpBS,EAAe/E,GAAasE,GAC5BU,EAAYjF,GAASyE,GACrBS,EAAgBjF,GAAawE,GAC7BU,EAAiBnF,GAAS0E,GAC1BU,EAAqBnF,GAAayE,GAClCW,EAAUrF,GAAS4E,GACnBU,EAAcrF,GAAa2E,GAC3BW,EAAevF,GAAS6E,GACxBW,EAAmBvF,GAAa4E,GAEhCY,EAAU,CACZ,EA4PF,SAA4B7kC,GAC1B,OAAO8jC,EAAqB9jC,EAAE3N,SAChC,EA7PE,EA+PF,SAAuB2N,GACrB,OAAO6jC,EAAgB7jC,EAAE3N,SAC3B,EAhQE,EAkQF,SAA0B2N,GACxB,OAAOikC,EAAmBjkC,EAAEtN,WAC9B,EAnQE,EAqQF,SAAqBsN,GACnB,OAAOgkC,EAAchkC,EAAEtN,WACzB,EAtQE,EAAK,KACL,EAAKsuC,GACL,EAAKA,GACL,EAAKK,GACL,EAAKJ,GACL,EAAKC,GACL,EAAKC,GACL,EAAKC,GACL,EAAKE,GACL,EAAKC,GACL,EA8PF,SAAsBvhC,GACpB,OAAO2jC,IAAiB3jC,EAAEy8B,YAAc,IAC1C,EA/PE,EAiQF,SAAuBz8B,GACrB,OAAO,KAAOA,EAAEtN,WAAa,EAC/B,EAlQE,EAAK2wC,GACL,EAAKC,GACL,EAAK9B,GACL,EAAKC,GACL,EAAKC,GACL,EAAKC,GACL,EAAKC,GACL,EAAKC,GACL,EAAK,KACL,EAAK,KACL,EAAKC,GACL,EAAKC,GACL,EAAKC,GACL,IAAKoB,IAGH0B,EAAa,CACf,EAmPF,SAA+B9kC,GAC7B,OAAO8jC,EAAqB9jC,EAAE09B,YAChC,EApPE,EAsPF,SAA0B19B,GACxB,OAAO6jC,EAAgB7jC,EAAE09B,YAC3B,EAvPE,EAyPF,SAA6B19B,GAC3B,OAAOikC,EAAmBjkC,EAAEg+B,cAC9B,EA1PE,EA4PF,SAAwBh+B,GACtB,OAAOgkC,EAAchkC,EAAEg+B,cACzB,EA7PE,EAAK,KACL,EAAKiE,GACL,EAAKA,GACL,EAAKM,GACL,EAAKL,GACL,EAAKC,GACL,EAAKC,GACL,EAAKC,GACL,EAAKG,GACL,EAAKC,GACL,EAqPF,SAAyBziC,GACvB,OAAO2jC,IAAiB3jC,EAAEjN,eAAiB,IAC7C,EAtPE,EAwPF,SAA0BiN,GACxB,OAAO,KAAOA,EAAEg+B,cAAgB,EAClC,EAzPE,EAAKqF,GACL,EAAKC,GACL,EAAKZ,GACL,EAAKC,GACL,EAAKE,GACL,EAAKC,GACL,EAAKC,GACL,EAAKC,GACL,EAAK,KACL,EAAK,KACL,EAAKC,GACL,EAAKC,GACL,EAAKC,GACL,IAAKC,IAGH2B,EAAS,CACX,EA0JF,SAA2B/kC,EAAG8N,EAAQtR,GACpC,IAAIvK,EAAIsyC,EAAe9hC,KAAKqL,EAAOzZ,MAAMmI,IACzC,OAAOvK,GAAK+N,EAAEu/B,EAAIiF,EAAmBvyC,EAAE,GAAGqE,eAAgBkG,EAAIvK,EAAE,GAAGqC,SAAW,CAChF,EA5JE,EA8JF,SAAsB0L,EAAG8N,EAAQtR,GAC/B,IAAIvK,EAAIoyC,EAAU5hC,KAAKqL,EAAOzZ,MAAMmI,IACpC,OAAOvK,GAAK+N,EAAEu/B,EAAI+E,EAAcryC,EAAE,GAAGqE,eAAgBkG,EAAIvK,EAAE,GAAGqC,SAAW,CAC3E,EAhKE,EAkKF,SAAyB0L,EAAG8N,EAAQtR,GAClC,IAAIvK,EAAI0yC,EAAaliC,KAAKqL,EAAOzZ,MAAMmI,IACvC,OAAOvK,GAAK+N,EAAEswB,EAAIsU,EAAiB3yC,EAAE,GAAGqE,eAAgBkG,EAAIvK,EAAE,GAAGqC,SAAW,CAC9E,EApKE,EAsKF,SAAoB0L,EAAG8N,EAAQtR,GAC7B,IAAIvK,EAAIwyC,EAAQhiC,KAAKqL,EAAOzZ,MAAMmI,IAClC,OAAOvK,GAAK+N,EAAEswB,EAAIoU,EAAYzyC,EAAE,GAAGqE,eAAgBkG,EAAIvK,EAAE,GAAGqC,SAAW,CACzE,EAxKE,EA0KF,SAA6B0L,EAAG8N,EAAQtR,GACtC,OAAOwoC,EAAehlC,EAAGujC,EAAiBz1B,EAAQtR,EACpD,EA3KE,EAAK6jC,GACL,EAAKA,GACL,EAAKM,GACL,EAAKJ,GACL,EAAKA,GACL,EAAKD,GACL,EAAKI,GACL,EAAKN,GACL,EAAKI,GACL,EAuIF,SAAqBxgC,EAAG8N,EAAQtR,GAC9B,IAAIvK,EAAIkyC,EAAS1hC,KAAKqL,EAAOzZ,MAAMmI,IACnC,OAAOvK,GAAK+N,EAAEuY,EAAI6rB,EAAanyC,EAAE,GAAGqE,eAAgBkG,EAAIvK,EAAE,GAAGqC,SAAW,CAC1E,EAzIE,EAAK6rC,GACL,EAAKU,GACL,EAAKE,GACL,EAAKN,GACL,EAAKjB,GACL,EAAKC,GACL,EAAKE,GACL,EAAKL,GACL,EAAKO,GACL,EA0JF,SAAyB7/B,EAAG8N,EAAQtR,GAClC,OAAOwoC,EAAehlC,EAAGyjC,EAAa31B,EAAQtR,EAChD,EA3JE,EA6JF,SAAyBwD,EAAG8N,EAAQtR,GAClC,OAAOwoC,EAAehlC,EAAG0jC,EAAa51B,EAAQtR,EAChD,EA9JE,EAAKwjC,GACL,EAAKD,GACL,EAAKE,GACL,IAAKW,IAWP,SAAShH,EAAU/B,EAAWgN,GAC5B,OAAO,SAAS1yC,GACd,IAII8gC,EACAiM,EACA7O,EANAviB,EAAS,GACTtR,GAAK,EACLob,EAAI,EACJ3lB,EAAI4lC,EAAUvjC,OAOlB,IAFMnC,aAAgB0U,OAAO1U,EAAO,IAAI0U,MAAM1U,MAErCqK,EAAIvK,GACqB,KAA5B4lC,EAAU0C,WAAW/9B,KACvBsR,EAAO/Q,KAAK86B,EAAUxjC,MAAMujB,EAAGpb,IACgB,OAA1C0iC,EAAMJ,GAAK7L,EAAI4E,EAAUoN,SAASzoC,KAAcy2B,EAAI4E,EAAUoN,SAASzoC,GACvE0iC,EAAY,MAANjM,EAAY,IAAM,KACzB5C,EAASwU,EAAQ5R,MAAIA,EAAI5C,EAAOl+B,EAAM+sC,IAC1CpxB,EAAO/Q,KAAKk2B,GACZrb,EAAIpb,EAAI,GAKZ,OADAsR,EAAO/Q,KAAK86B,EAAUxjC,MAAMujB,EAAGpb,IACxBsR,EAAOvZ,KAAK,GACrB,CACF,CAEA,SAAS2wC,EAASrN,EAAWqI,GAC3B,OAAO,SAASpyB,GACd,IAEIq3B,EAAMC,EAFNplC,EAAI0+B,GAAQ,UAAMtpC,EAAW,GAGjC,GAFQ4vC,EAAehlC,EAAG63B,EAAW/pB,GAAU,GAAI,IAE1CA,EAAOxZ,OAAQ,OAAO,KAG/B,GAAI,MAAO0L,EAAG,OAAO,IAAI6G,KAAK7G,EAAE8gC,GAChC,GAAI,MAAO9gC,EAAG,OAAO,IAAI6G,KAAW,IAAN7G,EAAEL,GAAY,MAAOK,EAAIA,EAAEu+B,EAAI,IAY7D,GATI2B,KAAO,MAAOlgC,KAAIA,EAAEkgC,EAAI,GAGxB,MAAOlgC,IAAGA,EAAEo+B,EAAIp+B,EAAEo+B,EAAI,GAAW,GAANp+B,EAAEuY,QAGrBnjB,IAAR4K,EAAEswB,IAAiBtwB,EAAEswB,EAAI,MAAOtwB,EAAIA,EAAEu1B,EAAI,GAG1C,MAAOv1B,EAAG,CACZ,GAAIA,EAAE4/B,EAAI,GAAK5/B,EAAE4/B,EAAI,GAAI,OAAO,KAC1B,MAAO5/B,IAAIA,EAAEu/B,EAAI,GACnB,MAAOv/B,GAC2BolC,GAApCD,EAAO3G,GAAQE,GAAQ1+B,EAAE6yB,EAAG,EAAG,KAAkB6K,YACjDyH,EAAOC,EAAQ,GAAe,IAAVA,EAAcxH,GAAUxC,KAAK+J,GAAQvH,GAAUuH,GACnEA,EAAO9H,GAAOvB,OAAOqJ,EAAkB,GAAXnlC,EAAE4/B,EAAI,IAClC5/B,EAAE6yB,EAAIsS,EAAKlH,iBACXj+B,EAAEswB,EAAI6U,EAAKnH,cACXh+B,EAAEA,EAAImlC,EAAK3H,cAAgBx9B,EAAEu/B,EAAI,GAAK,IAEA6F,GAAtCD,EAAOhH,GAAUO,GAAQ1+B,EAAE6yB,EAAG,EAAG,KAAkBxgC,SACnD8yC,EAAOC,EAAQ,GAAe,IAAVA,EAAcrI,GAAO3B,KAAK+J,GAAQpI,GAAOoI,GAC7DA,EAAO/yC,GAAI0pC,OAAOqJ,EAAkB,GAAXnlC,EAAE4/B,EAAI,IAC/B5/B,EAAE6yB,EAAIsS,EAAKvyC,cACXoN,EAAEswB,EAAI6U,EAAKzyC,WACXsN,EAAEA,EAAImlC,EAAK3yC,WAAawN,EAAEu/B,EAAI,GAAK,EAEvC,MAAW,MAAOv/B,GAAK,MAAOA,KACtB,MAAOA,IAAIA,EAAEu/B,EAAI,MAAOv/B,EAAIA,EAAEo3B,EAAI,EAAI,MAAOp3B,EAAI,EAAI,GAC3DolC,EAAQ,MAAOplC,EAAIw+B,GAAQE,GAAQ1+B,EAAE6yB,EAAG,EAAG,IAAI6K,YAAcS,GAAUO,GAAQ1+B,EAAE6yB,EAAG,EAAG,IAAIxgC,SAC3F2N,EAAEswB,EAAI,EACNtwB,EAAEA,EAAI,MAAOA,GAAKA,EAAEu/B,EAAI,GAAK,EAAU,EAANv/B,EAAE8/B,GAASsF,EAAQ,GAAK,EAAIplC,EAAEu/B,EAAU,EAANv/B,EAAE0/B,GAAS0F,EAAQ,GAAK,GAK7F,MAAI,MAAOplC,GACTA,EAAEo+B,GAAKp+B,EAAEkgC,EAAI,IAAM,EACnBlgC,EAAEq+B,GAAKr+B,EAAEkgC,EAAI,IACN1B,GAAQx+B,IAIVm+B,GAAUn+B,EACnB,CACF,CAEA,SAASglC,EAAehlC,EAAG63B,EAAW/pB,EAAQ8J,GAO5C,IANA,IAGIqb,EACA9uB,EAJA3H,EAAI,EACJvK,EAAI4lC,EAAUvjC,OACdg8B,EAAIxiB,EAAOxZ,OAIRkI,EAAIvK,GAAG,CACZ,GAAI2lB,GAAK0Y,EAAG,OAAQ,EAEpB,GAAU,MADV2C,EAAI4E,EAAU0C,WAAW/9B,OAIvB,GAFAy2B,EAAI4E,EAAUoN,OAAOzoC,OACrB2H,EAAQ4gC,EAAO9R,KAAK6L,GAAOjH,EAAUoN,OAAOzoC,KAAOy2B,MACnCrb,EAAIzT,EAAMnE,EAAG8N,EAAQ8J,IAAM,EAAI,OAAQ,OAClD,GAAIqb,GAAKnlB,EAAOysB,WAAW3iB,KAChC,OAAQ,CAEZ,CAEA,OAAOA,CACT,CAuFA,OAzMAitB,EAAQn2B,EAAIkrB,EAAU6J,EAAaoB,GACnCA,EAAQQ,EAAIzL,EAAU8J,EAAamB,GACnCA,EAAQ5R,EAAI2G,EAAU2J,EAAiBsB,GACvCC,EAAWp2B,EAAIkrB,EAAU6J,EAAaqB,GACtCA,EAAWO,EAAIzL,EAAU8J,EAAaoB,GACtCA,EAAW7R,EAAI2G,EAAU2J,EAAiBuB,GAoMnC,CACLzU,OAAQ,SAASwH,GACf,IAAIh4B,EAAI+5B,EAAU/B,GAAa,GAAIgN,GAEnC,OADAhlC,EAAEhN,SAAW,WAAa,OAAOglC,CAAW,EACrCh4B,CACT,EACAsE,MAAO,SAAS0zB,GACd,IAAItf,EAAI2sB,EAASrN,GAAa,IAAI,GAElC,OADAtf,EAAE1lB,SAAW,WAAa,OAAOglC,CAAW,EACrCtf,CACT,EACAqmB,UAAW,SAAS/G,GAClB,IAAIh4B,EAAI+5B,EAAU/B,GAAa,GAAIiN,GAEnC,OADAjlC,EAAEhN,SAAW,WAAa,OAAOglC,CAAW,EACrCh4B,CACT,EACAg/B,SAAU,SAAShH,GACjB,IAAItf,EAAI2sB,EAASrN,GAAa,IAAI,GAElC,OADAtf,EAAE1lB,SAAW,WAAa,OAAOglC,CAAW,EACrCtf,CACT,EAEJ,CA+Sa+sB,CAAe3f,IACJ0K,OACVsO,GAASx6B,MACrBy6B,GAAYD,GAASC,UACrBC,GAAWF,GAASE,QAEtB,CAlBA0G,CAAgB,CACd/B,SAAU,SACVrxC,KAAM,aACN2tB,KAAM,eACN8jB,QAAS,CAAC,KAAM,MAChB9xC,KAAM,CAAC,SAAU,SAAU,UAAW,YAAa,WAAY,SAAU,YACzEiyC,UAAW,CAAC,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,OACtDhyC,OAAQ,CAAC,UAAW,WAAY,QAAS,QAAS,MAAO,OAAQ,OAAQ,SAAU,YAAa,UAAW,WAAY,YACvHmyC,YAAa,CAAC,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,SAY7F,IAAIsB,GAAe,wBAMH3+B,KAAKqC,UAAUpT,aAEzB8oC,GAAU4G,KAOA,IAAI3+B,KAAK,6BAEnBg4B,GAAS2G,IAFf,IAIIC,GAAO,CAAC/vC,MAAO,WAAY,GAE/B,SAASgwC,KACP,IAAK,IAAyCv5B,EAArC3P,EAAI,EAAGvK,EAAI+H,UAAU1F,OAAQwe,EAAI,CAAC,EAAMtW,EAAIvK,IAAKuK,EAAG,CAC3D,KAAM2P,EAAInS,UAAUwC,GAAK,KAAQ2P,KAAK2G,GAAM,QAAQ7H,KAAKkB,GAAI,MAAM,IAAIlW,MAAM,iBAAmBkW,GAChG2G,EAAE3G,GAAK,EACT,CACA,OAAO,IAAIw5B,GAAS7yB,EACtB,CAEA,SAAS6yB,GAAS7yB,GAChBrf,KAAKqf,EAAIA,CACX,CAoDA,SAAS5e,GAAIuI,EAAM/I,GACjB,IAAK,IAA4Bu/B,EAAxBz2B,EAAI,EAAGvK,EAAIwK,EAAKnI,OAAWkI,EAAIvK,IAAKuK,EAC3C,IAAKy2B,EAAIx2B,EAAKD,IAAI9I,OAASA,EACzB,OAAOu/B,EAAEv9B,KAGf,CAEA,SAASD,GAAIgH,EAAM/I,EAAM4V,GACvB,IAAK,IAAI9M,EAAI,EAAGvK,EAAIwK,EAAKnI,OAAQkI,EAAIvK,IAAKuK,EACxC,GAAIC,EAAKD,GAAG9I,OAASA,EAAM,CACzB+I,EAAKD,GAAKipC,GAAMhpC,EAAOA,EAAKpI,MAAM,EAAGmI,GAAGpJ,OAAOqJ,EAAKpI,MAAMmI,EAAI,IAC9D,KACF,CAGF,OADgB,MAAZ8M,GAAkB7M,EAAKM,KAAK,CAACrJ,KAAMA,EAAMgC,MAAO4T,IAC7C7M,CACT,CA1DAkpC,GAASz8B,UAAYw8B,GAASx8B,UAAY,CACxCtP,YAAa+rC,GACbC,GAAI,SAASC,EAAUv8B,GACrB,IAEI6C,EAd2B25B,EAY3BhzB,EAAIrf,KAAKqf,EACTnS,GAb2BmlC,EAaOhzB,GAAf+yB,EAAW,IAZnBvkC,OAAOlN,MAAM,SAAS+B,KAAI,SAASgW,GAClD,IAAIzY,EAAO,GAAI8I,EAAI2P,EAAErP,QAAQ,KAE7B,GADIN,GAAK,IAAG9I,EAAOyY,EAAE9X,MAAMmI,EAAI,GAAI2P,EAAIA,EAAE9X,MAAM,EAAGmI,IAC9C2P,IAAM25B,EAAMlvC,eAAeuV,GAAI,MAAM,IAAIlW,MAAM,iBAAmBkW,GACtE,MAAO,CAAC1P,KAAM0P,EAAGzY,KAAMA,EACzB,KASM8I,GAAK,EACLvK,EAAI0O,EAAErM,OAGV,KAAI0F,UAAU1F,OAAS,GAAvB,CAOA,GAAgB,MAAZgV,GAAwC,mBAAbA,EAAyB,MAAM,IAAIrT,MAAM,qBAAuBqT,GAC/F,OAAS9M,EAAIvK,GACX,GAAIka,GAAK05B,EAAWllC,EAAEnE,IAAIC,KAAMqW,EAAE3G,GAAK1W,GAAIqd,EAAE3G,GAAI05B,EAASnyC,KAAM4V,QAC3D,GAAgB,MAAZA,EAAkB,IAAK6C,KAAK2G,EAAGA,EAAE3G,GAAK1W,GAAIqd,EAAE3G,GAAI05B,EAASnyC,KAAM,MAG1E,OAAOD,IAVP,CAFE,OAAS+I,EAAIvK,OAAQka,GAAK05B,EAAWllC,EAAEnE,IAAIC,QAAU0P,EAAIjY,GAAI4e,EAAE3G,GAAI05B,EAASnyC,OAAQ,OAAOyY,CAa/F,EACAulB,KAAM,WACJ,IAAIA,EAAO,CAAC,EAAG5e,EAAIrf,KAAKqf,EACxB,IAAK,IAAI3G,KAAK2G,EAAG4e,EAAKvlB,GAAK2G,EAAE3G,GAAG9X,QAChC,OAAO,IAAIsxC,GAASjU,EACtB,EACAle,KAAM,SAAS/W,EAAMspC,GACnB,IAAK9zC,EAAI+H,UAAU1F,OAAS,GAAK,EAAG,IAAK,IAAgCrC,EAAGka,EAA/B65B,EAAO,IAAI/uC,MAAMhF,GAAIuK,EAAI,EAASA,EAAIvK,IAAKuK,EAAGwpC,EAAKxpC,GAAKxC,UAAUwC,EAAI,GACnH,IAAK/I,KAAKqf,EAAElc,eAAe6F,GAAO,MAAM,IAAIxG,MAAM,iBAAmBwG,GACrE,IAAuBD,EAAI,EAAGvK,GAAzBka,EAAI1Y,KAAKqf,EAAErW,IAAoBnI,OAAQkI,EAAIvK,IAAKuK,EAAG2P,EAAE3P,GAAG9G,MAAM+f,MAAMswB,EAAMC,EACjF,EACAvwB,MAAO,SAAShZ,EAAMspC,EAAMC,GAC1B,IAAKvyC,KAAKqf,EAAElc,eAAe6F,GAAO,MAAM,IAAIxG,MAAM,iBAAmBwG,GACrE,IAAK,IAAI0P,EAAI1Y,KAAKqf,EAAErW,GAAOD,EAAI,EAAGvK,EAAIka,EAAE7X,OAAQkI,EAAIvK,IAAKuK,EAAG2P,EAAE3P,GAAG9G,MAAM+f,MAAMswB,EAAMC,EACrF,GAsBF,IAAIC,GAAQ,+BAERC,GAAa,CACfrsB,IAAK,6BACLosB,MAAOA,GACPE,MAAO,+BACPxsB,IAAK,uCACLysB,MAAO,iCAGT,SAASC,GAAU3yC,GACjB,IAAImmC,EAASnmC,GAAQ,GAAI8I,EAAIq9B,EAAO/8B,QAAQ,KAE5C,OADIN,GAAK,GAAqC,WAA/Bq9B,EAASnmC,EAAKW,MAAM,EAAGmI,MAAiB9I,EAAOA,EAAKW,MAAMmI,EAAI,IACtE0pC,GAAWtvC,eAAeijC,GAAU,CAACyM,MAAOJ,GAAWrM,GAAS0M,MAAO7yC,GAAQA,CACxF,CAEA,SAAS8yC,GAAe9yC,GACtB,OAAO,WACL,IAAIwG,EAAWzG,KAAKgzC,cAChBC,EAAMjzC,KAAKkzC,aACf,OAAOD,IAAQT,IAAS/rC,EAAS0sC,gBAAgBD,eAAiBV,GAC5D/rC,EAASC,cAAczG,GACvBwG,EAAS2sC,gBAAgBH,EAAKhzC,EACtC,CACF,CAEA,SAASozC,GAAaC,GACpB,OAAO,WACL,OAAOtzC,KAAKgzC,cAAcI,gBAAgBE,EAAST,MAAOS,EAASR,MACrE,CACF,CAEA,SAASS,GAAQtzC,GACf,IAAIqzC,EAAWV,GAAU3yC,GACzB,OAAQqzC,EAASR,MACXO,GACAN,IAAgBO,EACxB,CAEA,SAASE,KAAQ,CAEjB,SAASj9B,GAASA,GAChB,OAAmB,MAAZA,EAAmBi9B,GAAO,WAC/B,OAAOxzC,KAAK8H,cAAcyO,EAC5B,CACF,CAiBA,SAASk9B,KACP,MAAO,EACT,CA2CA,SAASC,GAAOC,GACd,OAAO,IAAInwC,MAAMmwC,EAAO9yC,OAC1B,CAMA,SAAS+yC,GAAUzxB,EAAQ0xB,GACzB7zC,KAAKgzC,cAAgB7wB,EAAO6wB,cAC5BhzC,KAAKkzC,aAAe/wB,EAAO+wB,aAC3BlzC,KAAK8zC,MAAQ,KACb9zC,KAAK+zC,QAAU5xB,EACfniB,KAAKg0C,SAAWH,CAClB,CAEAD,GAAUn+B,UAAY,CACpBtP,YAAaytC,GACbpsC,YAAa,SAASysC,GAAS,OAAOj0C,KAAK+zC,QAAQpsC,aAAassC,EAAOj0C,KAAK8zC,MAAQ,EACpFnsC,aAAc,SAASssC,EAAOzwB,GAAQ,OAAOxjB,KAAK+zC,QAAQpsC,aAAassC,EAAOzwB,EAAO,EACrF1b,cAAe,SAASyO,GAAY,OAAOvW,KAAK+zC,QAAQjsC,cAAcyO,EAAW,EACjFxO,iBAAkB,SAASwO,GAAY,OAAOvW,KAAK+zC,QAAQhsC,iBAAiBwO,EAAW,GAWzF,SAAS29B,GAAU/xB,EAAQqjB,EAAO2O,EAAOR,EAAQS,EAAMnrC,GASrD,IARA,IACIsa,EADAxa,EAAI,EAEJsrC,EAAc7O,EAAM3kC,OACpByzC,EAAarrC,EAAKpI,OAKfkI,EAAIurC,IAAcvrC,GACnBwa,EAAOiiB,EAAMz8B,KACfwa,EAAKywB,SAAW/qC,EAAKF,GACrB4qC,EAAO5qC,GAAKwa,GAEZ4wB,EAAMprC,GAAK,IAAI6qC,GAAUzxB,EAAQlZ,EAAKF,IAK1C,KAAOA,EAAIsrC,IAAetrC,GACpBwa,EAAOiiB,EAAMz8B,MACfqrC,EAAKrrC,GAAKwa,EAGhB,CAEA,SAASgxB,GAAQpyB,EAAQqjB,EAAO2O,EAAOR,EAAQS,EAAMnrC,EAAMzI,GACzD,IAAIuI,EACAwa,EAKAixB,EAJAC,EAAiB,CAAC,EAClBJ,EAAc7O,EAAM3kC,OACpByzC,EAAarrC,EAAKpI,OAClB6zC,EAAY,IAAIlxC,MAAM6wC,GAK1B,IAAKtrC,EAAI,EAAGA,EAAIsrC,IAAetrC,GACzBwa,EAAOiiB,EAAMz8B,MACf2rC,EAAU3rC,GAAKyrC,EAzCL,IAyC4Bh0C,EAAIuf,KAAKwD,EAAMA,EAAKywB,SAAUjrC,EAAGy8B,GACnEgP,KAAYC,EACdL,EAAKrrC,GAAKwa,EAEVkxB,EAAeD,GAAYjxB,GAQjC,IAAKxa,EAAI,EAAGA,EAAIurC,IAAcvrC,GAExBwa,EAAOkxB,EADXD,EAtDY,IAsDWh0C,EAAIuf,KAAKoC,EAAQlZ,EAAKF,GAAIA,EAAGE,MAElD0qC,EAAO5qC,GAAKwa,EACZA,EAAKywB,SAAW/qC,EAAKF,GACrB0rC,EAAeD,GAAY,MAE3BL,EAAMprC,GAAK,IAAI6qC,GAAUzxB,EAAQlZ,EAAKF,IAK1C,IAAKA,EAAI,EAAGA,EAAIsrC,IAAetrC,GACxBwa,EAAOiiB,EAAMz8B,KAAQ0rC,EAAeC,EAAU3rC,MAAQwa,IACzD6wB,EAAKrrC,GAAKwa,EAGhB,CA2GA,SAASoxB,GAAYlmB,EAAGlU,GACtB,OAAOkU,EAAIlU,GAAK,EAAIkU,EAAIlU,EAAI,EAAIkU,GAAKlU,EAAI,EAAIsW,GAC/C,CAgDA,SAAS+jB,GAAW30C,GAClB,OAAO,WACLD,KAAK60C,gBAAgB50C,EACvB,CACF,CAEA,SAAS60C,GAAaxB,GACpB,OAAO,WACLtzC,KAAK+0C,kBAAkBzB,EAAST,MAAOS,EAASR,MAClD,CACF,CAEA,SAASkC,GAAa/0C,EAAMgC,GAC1B,OAAO,WACLjC,KAAKmK,aAAalK,EAAMgC,EAC1B,CACF,CAEA,SAASgzC,GAAe3B,EAAUrxC,GAChC,OAAO,WACLjC,KAAKk1C,eAAe5B,EAAST,MAAOS,EAASR,MAAO7wC,EACtD,CACF,CAEA,SAASkzC,GAAal1C,EAAMgC,GAC1B,OAAO,WACL,IAAIqe,EAAIre,EAAM+f,MAAMhiB,KAAMuG,WACjB,MAAL+Z,EAAWtgB,KAAK60C,gBAAgB50C,GAC/BD,KAAKmK,aAAalK,EAAMqgB,EAC/B,CACF,CAEA,SAAS80B,GAAe9B,EAAUrxC,GAChC,OAAO,WACL,IAAIqe,EAAIre,EAAM+f,MAAMhiB,KAAMuG,WACjB,MAAL+Z,EAAWtgB,KAAK+0C,kBAAkBzB,EAAST,MAAOS,EAASR,OAC1D9yC,KAAKk1C,eAAe5B,EAAST,MAAOS,EAASR,MAAOxyB,EAC3D,CACF,CAkBA,SAAS+0B,GAAY9xB,GACnB,OAAQA,EAAKyvB,eAAiBzvB,EAAKyvB,cAAcqC,aACzC9xB,EAAK9c,UAAY8c,GAClBA,EAAK8xB,WACd,CAEA,SAASC,GAAYr1C,GACnB,OAAO,WACLD,KAAKoe,MAAMm3B,eAAet1C,EAC5B,CACF,CAEA,SAASu1C,GAAcv1C,EAAMgC,EAAOwzC,GAClC,OAAO,WACLz1C,KAAKoe,MAAMs3B,YAAYz1C,EAAMgC,EAAOwzC,EACtC,CACF,CAEA,SAASE,GAAc11C,EAAMgC,EAAOwzC,GAClC,OAAO,WACL,IAAIn1B,EAAIre,EAAM+f,MAAMhiB,KAAMuG,WACjB,MAAL+Z,EAAWtgB,KAAKoe,MAAMm3B,eAAet1C,GACpCD,KAAKoe,MAAMs3B,YAAYz1C,EAAMqgB,EAAGm1B,EACvC,CACF,CAgBA,SAASG,GAAe31C,GACtB,OAAO,kBACED,KAAKC,EACd,CACF,CAEA,SAAS41C,GAAiB51C,EAAMgC,GAC9B,OAAO,WACLjC,KAAKC,GAAQgC,CACf,CACF,CAEA,SAAS6zC,GAAiB71C,EAAMgC,GAC9B,OAAO,WACL,IAAIqe,EAAIre,EAAM+f,MAAMhiB,KAAMuG,WACjB,MAAL+Z,SAAkBtgB,KAAKC,GACtBD,KAAKC,GAAQqgB,CACpB,CACF,CAWA,SAASy1B,GAAW17B,GAClB,OAAOA,EAAOxM,OAAOlN,MAAM,QAC7B,CAEA,SAASq1C,GAAUzyB,GACjB,OAAOA,EAAKyyB,WAAa,IAAIC,GAAU1yB,EACzC,CAEA,SAAS0yB,GAAU1yB,GACjBvjB,KAAKk2C,MAAQ3yB,EACbvjB,KAAKm2C,OAASJ,GAAWxyB,EAAK5V,aAAa,UAAY,GACzD,CAsBA,SAASyoC,GAAW7yB,EAAM7iB,GAExB,IADA,IAAI4d,EAAO03B,GAAUzyB,GAAOxa,GAAK,EAAGvK,EAAIkC,EAAMG,SACrCkI,EAAIvK,GAAG8f,EAAKxQ,IAAIpN,EAAMqI,GACjC,CAEA,SAASstC,GAAc9yB,EAAM7iB,GAE3B,IADA,IAAI4d,EAAO03B,GAAUzyB,GAAOxa,GAAK,EAAGvK,EAAIkC,EAAMG,SACrCkI,EAAIvK,GAAG8f,EAAKg4B,OAAO51C,EAAMqI,GACpC,CAEA,SAASwtC,GAAY71C,GACnB,OAAO,WACL01C,GAAWp2C,KAAMU,EACnB,CACF,CAEA,SAAS81C,GAAa91C,GACpB,OAAO,WACL21C,GAAcr2C,KAAMU,EACtB,CACF,CAEA,SAAS+1C,GAAgB/1C,EAAOuB,GAC9B,OAAO,YACJA,EAAM+f,MAAMhiB,KAAMuG,WAAa6vC,GAAaC,IAAer2C,KAAMU,EACpE,CACF,CAiBA,SAASg2C,KACP12C,KAAK8F,YAAc,EACrB,CAEA,SAAS6wC,GAAa10C,GACpB,OAAO,WACLjC,KAAK8F,YAAc7D,CACrB,CACF,CAEA,SAAS20C,GAAa30C,GACpB,OAAO,WACL,IAAIqe,EAAIre,EAAM+f,MAAMhiB,KAAMuG,WAC1BvG,KAAK8F,YAAmB,MAALwa,EAAY,GAAKA,CACtC,CACF,CAWA,SAASu2B,KACP72C,KAAK2G,UAAY,EACnB,CAEA,SAASmwC,GAAa70C,GACpB,OAAO,WACLjC,KAAK2G,UAAY1E,CACnB,CACF,CAEA,SAAS80C,GAAa90C,GACpB,OAAO,WACL,IAAIqe,EAAIre,EAAM+f,MAAMhiB,KAAMuG,WAC1BvG,KAAK2G,UAAiB,MAAL2Z,EAAY,GAAKA,CACpC,CACF,CAWA,SAAS02B,KACHh3C,KAAKi3C,aAAaj3C,KAAK0X,WAAWlQ,YAAYxH,KACpD,CAMA,SAASk3C,KACHl3C,KAAKm3C,iBAAiBn3C,KAAK0X,WAAW/P,aAAa3H,KAAMA,KAAK0X,WAAW9P,WAC/E,CAaA,SAASwvC,KACP,OAAO,IACT,CAUA,SAASd,KACP,IAAIn0B,EAASniB,KAAK0X,WACdyK,GAAQA,EAAOzO,YAAY1T,KACjC,CAMA,SAASq3C,KACP,IAAInwC,EAAQlH,KAAKs3C,WAAU,GAAQn1B,EAASniB,KAAK0X,WACjD,OAAOyK,EAASA,EAAOxa,aAAaT,EAAOlH,KAAKi3C,aAAe/vC,CACjE,CAEA,SAASqwC,KACP,IAAIrwC,EAAQlH,KAAKs3C,WAAU,GAAOn1B,EAASniB,KAAK0X,WAChD,OAAOyK,EAASA,EAAOxa,aAAaT,EAAOlH,KAAKi3C,aAAe/vC,CACjE,CAvKA+uC,GAAUxgC,UAAY,CACpB3H,IAAK,SAAS7N,GACJD,KAAKm2C,OAAO9sC,QAAQpJ,GACpB,IACND,KAAKm2C,OAAO7sC,KAAKrJ,GACjBD,KAAKk2C,MAAM/rC,aAAa,QAASnK,KAAKm2C,OAAOr1C,KAAK,MAEtD,EACAw1C,OAAQ,SAASr2C,GACf,IAAI8I,EAAI/I,KAAKm2C,OAAO9sC,QAAQpJ,GACxB8I,GAAK,IACP/I,KAAKm2C,OAAOqB,OAAOzuC,EAAG,GACtB/I,KAAKk2C,MAAM/rC,aAAa,QAASnK,KAAKm2C,OAAOr1C,KAAK,MAEtD,EACA22C,SAAU,SAASx3C,GACjB,OAAOD,KAAKm2C,OAAO9sC,QAAQpJ,IAAS,CACtC,GAkKF,IAAIy3C,GAAe,CAAC,EAEhBtmC,GAAQ,KASZ,SAASumC,GAAsBC,EAAUvvC,EAAOm9B,GAE9C,OADAoS,EAAWC,GAAgBD,EAAUvvC,EAAOm9B,GACrC,SAASp0B,GACd,IAAI0mC,EAAU1mC,EAAM2mC,cACfD,IAAYA,IAAY93C,MAAkD,EAAxC83C,EAAQE,wBAAwBh4C,QACrE43C,EAAS73B,KAAK/f,KAAMoR,EAExB,CACF,CAEA,SAASymC,GAAgBD,EAAUvvC,EAAOm9B,GACxC,OAAO,SAASyS,GACd,IAAIC,EAAS9mC,GACbA,GAAQ6mC,EACR,IACEL,EAAS73B,KAAK/f,KAAMA,KAAKg0C,SAAU3rC,EAAOm9B,EAC5C,CAAE,QACAp0B,GAAQ8mC,CACV,CACF,CACF,CAUA,SAASC,GAAS/F,GAChB,OAAO,WACL,IAAID,EAAKnyC,KAAKo4C,KACd,GAAKjG,EAAL,CACA,IAAK,IAAkCryB,EAA9BqE,EAAI,EAAGpb,GAAK,EAAG8zB,EAAIsV,EAAGtxC,OAAWsjB,EAAI0Y,IAAK1Y,EAC7CrE,EAAIqyB,EAAGhuB,GAAMiuB,EAASppC,MAAQ8W,EAAE9W,OAASopC,EAASppC,MAAS8W,EAAE7f,OAASmyC,EAASnyC,KAGjFkyC,IAAKppC,GAAK+W,EAFV9f,KAAKq4C,oBAAoBv4B,EAAE9W,KAAM8W,EAAE83B,SAAU93B,EAAEw4B,WAK7CvvC,EAAGopC,EAAGtxC,OAASkI,SACT/I,KAAKo4C,IATF,CAUjB,CACF,CAEA,SAASG,GAAMnG,EAAUnwC,EAAOq2C,GAC9B,IAAIE,EAAOd,GAAav0C,eAAeivC,EAASppC,MAAQ2uC,GAAwBE,GAChF,OAAO,SAAStrC,EAAGxD,EAAGy8B,GACpB,IAAoB1lB,EAAhBqyB,EAAKnyC,KAAKo4C,KAASR,EAAWY,EAAKv2C,EAAO8G,EAAGy8B,GACjD,GAAI2M,EAAI,IAAK,IAAIhuB,EAAI,EAAG0Y,EAAIsV,EAAGtxC,OAAQsjB,EAAI0Y,IAAK1Y,EAC9C,IAAKrE,EAAIqyB,EAAGhuB,IAAInb,OAASopC,EAASppC,MAAQ8W,EAAE7f,OAASmyC,EAASnyC,KAI5D,OAHAD,KAAKq4C,oBAAoBv4B,EAAE9W,KAAM8W,EAAE83B,SAAU93B,EAAEw4B,SAC/Ct4C,KAAKulB,iBAAiBzF,EAAE9W,KAAM8W,EAAE83B,SAAWA,EAAU93B,EAAEw4B,QAAUA,QACjEx4B,EAAE7d,MAAQA,GAIdjC,KAAKulB,iBAAiB6sB,EAASppC,KAAM4uC,EAAUU,GAC/Cx4B,EAAI,CAAC9W,KAAMopC,EAASppC,KAAM/I,KAAMmyC,EAASnyC,KAAMgC,MAAOA,EAAO21C,SAAUA,EAAUU,QAASA,GACrFnG,EACAA,EAAG7oC,KAAKwW,GADJ9f,KAAKo4C,KAAO,CAACt4B,EAExB,CACF,CAuBA,SAAS24B,GAAYR,EAAQL,EAAUtF,EAAMC,GAC3C,IAAI2F,EAAS9mC,GACb6mC,EAAOS,YAActnC,GACrBA,GAAQ6mC,EACR,IACE,OAAOL,EAAS51B,MAAMswB,EAAMC,EAC9B,CAAE,QACAnhC,GAAQ8mC,CACV,CACF,CAEA,SAAS1mC,GAAc+R,EAAMva,EAAM2vC,GACjC,IAAI/xC,EAASyuC,GAAY9xB,GACrBnS,EAAQxK,EAAOyK,YAEE,mBAAVD,EACTA,EAAQ,IAAIA,EAAMpI,EAAM2vC,IAExBvnC,EAAQxK,EAAOH,SAASmyC,YAAY,SAChCD,GAAQvnC,EAAMynC,UAAU7vC,EAAM2vC,EAAOpnC,QAASonC,EAAOG,YAAa1nC,EAAME,OAASqnC,EAAOrnC,QACvFF,EAAMynC,UAAU7vC,GAAM,GAAO,IAGpCua,EAAK/R,cAAcJ,EACrB,CAEA,SAAS2nC,GAAiB/vC,EAAM2vC,GAC9B,OAAO,WACL,OAAOnnC,GAAcxR,KAAMgJ,EAAM2vC,EACnC,CACF,CAEA,SAASK,GAAiBhwC,EAAM2vC,GAC9B,OAAO,WACL,OAAOnnC,GAAcxR,KAAMgJ,EAAM2vC,EAAO32B,MAAMhiB,KAAMuG,WACtD,CACF,CAjIwB,oBAAbE,WAEH,iBADQA,SAAS0sC,kBAErBuE,GAAe,CAACuB,WAAY,YAAaC,WAAY,cAsIzD,IAAInzC,GAAO,CAAC,MAEZ,SAASozC,GAAUC,EAAQC,GACzBr5C,KAAKs5C,QAAUF,EACfp5C,KAAKu5C,SAAWF,CAClB,CAyCA,SAASG,GAAOjjC,GACd,MAA2B,iBAAbA,EACR,IAAI4iC,GAAU,CAAC,CAAC1yC,SAASqB,cAAcyO,KAAa,CAAC9P,SAAS0sC,kBAC9D,IAAIgG,GAAU,CAAC,CAAC5iC,IAAYxQ,GACpC,CAEA,SAAS2yC,KAEP,IADA,IAAqB/zC,EAAjB80C,EAAUroC,GACPzM,EAAS80C,EAAQf,aAAae,EAAU90C,EAC/C,OAAO80C,CACT,CAEA,SAASC,GAAMn2B,EAAMnS,GACnB,IAAIgV,EAAM7C,EAAKo2B,iBAAmBp2B,EAElC,GAAI6C,EAAIwzB,eAAgB,CACtB,IAAIF,EAAQtzB,EAAIwzB,iBAGhB,OAFAF,EAAMz+B,EAAI7J,EAAMyoC,QAASH,EAAMta,EAAIhuB,EAAM0oC,QAElC,EADPJ,EAAQA,EAAMK,gBAAgBx2B,EAAKy2B,eAAeC,YACpCh/B,EAAGy+B,EAAMta,EACzB,CAEA,IAAI8a,EAAO32B,EAAKsI,wBAChB,MAAO,CAACza,EAAMyoC,QAAUK,EAAKvwC,KAAO4Z,EAAK42B,WAAY/oC,EAAM0oC,QAAUI,EAAKxuB,IAAMnI,EAAK62B,UACvF,CAEA,SAASC,GAAM92B,GACb,IAAInS,EAAQsnC,KAEZ,OADItnC,EAAMkpC,iBAAgBlpC,EAAQA,EAAMkpC,eAAe,IAChDZ,GAAMn2B,EAAMnS,EACrB,CAEA,SAASmpC,GAAMh3B,EAAMi3B,EAASC,GACxBl0C,UAAU1F,OAAS,IAAG45C,EAAaD,EAASA,EAAU9B,KAAc4B,gBAExE,IAAK,IAA6CC,EAAzCxxC,EAAI,EAAGvK,EAAIg8C,EAAUA,EAAQ35C,OAAS,EAAUkI,EAAIvK,IAAKuK,EAChE,IAAKwxC,EAAQC,EAAQzxC,IAAI0xC,aAAeA,EACtC,OAAOf,GAAMn2B,EAAMg3B,GAIvB,OAAO,IACT,CAEA,SAASG,KACPtpC,GAAMupC,0BACR,CAEA,SAASC,KACPxpC,GAAMypC,iBACNzpC,GAAMupC,0BACR,CA4BA,SAASG,GAAW7/B,GAClB,OAAO,WACL,OAAOA,CACT,CACF,CAEA,SAAS8/B,GAAU13C,EAAQ2F,EAAMgyC,EAASv8B,EAAIw8B,EAAQhgC,EAAGmkB,EAAG8b,EAAIC,EAAIlJ,GAClEjyC,KAAKqD,OAASA,EACdrD,KAAKgJ,KAAOA,EACZhJ,KAAKg7C,QAAUA,EACfh7C,KAAKy6C,WAAah8B,EAClBze,KAAKi7C,OAASA,EACdj7C,KAAKib,EAAIA,EACTjb,KAAKo/B,EAAIA,EACTp/B,KAAKk7C,GAAKA,EACVl7C,KAAKm7C,GAAKA,EACVn7C,KAAKqf,EAAI4yB,CACX,CAQA,SAASmJ,KACP,OAAQhqC,GAAMiqC,UAAYjqC,GAAMkqC,MAClC,CAEA,SAASC,KACP,OAAOv7C,KAAK0X,UACd,CAEA,SAAS8jC,GAAejvC,GACtB,OAAY,MAALA,EAAY,CAAC0O,EAAG7J,GAAM6J,EAAGmkB,EAAGhuB,GAAMguB,GAAK7yB,CAChD,CAEA,SAASkvC,KACP,OAAOC,UAAUC,gBAAmB,iBAAkB37C,IACxD,CAEA,SAAS47C,KACP,IAOIC,EACAC,EACAC,EACAC,EAVA5lC,EAASglC,GACTzvC,EAAY4vC,GACZP,EAAUQ,GACVS,EAAYR,GACZS,EAAW,CAAC,EACZtqC,EAAYqgC,GAAS,QAAS,OAAQ,OACtCgJ,EAAS,EAKTkB,EAAiB,EAErB,SAASP,EAAKQ,GACZA,EACKjK,GAAG,iBAAkBkK,GACvBjmC,OAAO6lC,GACL9J,GAAG,kBAAmBmK,GACtBnK,GAAG,iBAAkBoK,GACrBpK,GAAG,iCAAkCqK,GACrCp+B,MAAM,eAAgB,QACtBA,MAAM,8BAA+B,gBAC5C,CAEA,SAASi+B,IACP,IAAIL,GAAgB5lC,EAAO4L,MAAMhiB,KAAMuG,WAAvC,CACA,IAAIk2C,EAAUC,EAAY,QAAS/wC,EAAUqW,MAAMhiB,KAAMuG,WAAY8zC,GAAOr6C,KAAMuG,WAC7Ek2C,IACLjD,GAAOpoC,GAAMurC,MAAMxK,GAAG,iBAAkByK,GAAY,GAAMzK,GAAG,eAAgB0K,GAAY,GAhG7F,SAAgBF,GACd,IAAI52C,EAAO42C,EAAKl2C,SAAS0sC,gBACrBiJ,EAAY5C,GAAOmD,GAAMxK,GAAG,iBAAkByI,IAAS,GACvD,kBAAmB70C,EACrBq2C,EAAUjK,GAAG,mBAAoByI,IAAS,IAE1C70C,EAAK+2C,WAAa/2C,EAAKqY,MAAM2+B,cAC7Bh3C,EAAKqY,MAAM2+B,cAAgB,OAE/B,CAwFIC,CAAO5rC,GAAMurC,MACbjC,KACAqB,GAAc,EACdF,EAAazqC,GAAMyoC,QACnBiC,EAAa1qC,GAAM0oC,QACnB2C,EAAQ,SATiD,CAU3D,CAEA,SAASG,IAEP,GADAhC,MACKmB,EAAa,CAChB,IAAIb,EAAK9pC,GAAMyoC,QAAUgC,EAAYV,EAAK/pC,GAAM0oC,QAAUgC,EAC1DC,EAAcb,EAAKA,EAAKC,EAAKA,EAAKgB,CACpC,CACAD,EAAS7B,MAAM,OACjB,CAEA,SAASwC,IACPrD,GAAOpoC,GAAMurC,MAAMxK,GAAG,8BAA+B,MAxGzD,SAAiBwK,EAAMM,GACrB,IAAIl3C,EAAO42C,EAAKl2C,SAAS0sC,gBACrBiJ,EAAY5C,GAAOmD,GAAMxK,GAAG,iBAAkB,MAC9C8K,IACFb,EAAUjK,GAAG,aAAcyI,IAAS,GACpCh1B,YAAW,WAAaw2B,EAAUjK,GAAG,aAAc,KAAO,GAAG,IAE3D,kBAAmBpsC,EACrBq2C,EAAUjK,GAAG,mBAAoB,OAEjCpsC,EAAKqY,MAAM2+B,cAAgBh3C,EAAK+2C,kBACzB/2C,EAAK+2C,WAEhB,CA4FII,CAAQ9rC,GAAMurC,KAAMZ,GACpBnB,KACAsB,EAAS7B,MAAM,MACjB,CAEA,SAASiC,IACP,GAAKlmC,EAAO4L,MAAMhiB,KAAMuG,WAAxB,CACA,IAEwBwC,EAAG0zC,EAFvBjC,EAAUppC,GAAMkpC,eAChB9a,EAAI7zB,EAAUqW,MAAMhiB,KAAMuG,WAC1B/H,EAAIg8C,EAAQ35C,OAEhB,IAAKkI,EAAI,EAAGA,EAAIvK,IAAKuK,GACf0zC,EAAUC,EAAYlC,EAAQzxC,GAAG0xC,WAAYjb,EAAG+a,GAAOv6C,KAAMuG,cAC/Dm0C,KACA+B,EAAQ,SAR8B,CAW5C,CAEA,SAASF,IACP,IACwBxzC,EAAG0zC,EADvBjC,EAAUppC,GAAMkpC,eAChB97C,EAAIg8C,EAAQ35C,OAEhB,IAAKkI,EAAI,EAAGA,EAAIvK,IAAKuK,GACf0zC,EAAUP,EAAS1B,EAAQzxC,GAAG0xC,eAChCG,KACA6B,EAAQ,QAGd,CAEA,SAASD,IACP,IACwBzzC,EAAG0zC,EADvBjC,EAAUppC,GAAMkpC,eAChB97C,EAAIg8C,EAAQ35C,OAIhB,IAFIm7C,GAAa5vB,aAAa4vB,GAC9BA,EAAcp2B,YAAW,WAAao2B,EAAc,IAAM,GAAG,KACxDjzC,EAAI,EAAGA,EAAIvK,IAAKuK,GACf0zC,EAAUP,EAAS1B,EAAQzxC,GAAG0xC,eAChCC,KACA+B,EAAQ,OAGd,CAEA,SAASC,EAAYj+B,EAAI9S,EAAW+tC,EAAOpH,EAAMC,GAC/C,IAA8BrmC,EAAGgvC,EAAIC,EAAjCr2B,EAAI40B,EAAM/tC,EAAW8S,GACrB0+B,EAAevrC,EAAUqsB,OAE7B,GAAKwa,GAAY,IAAIsC,GAAUa,EAAM,cAAe1vC,EAAGuS,EAAIw8B,EAAQn2B,EAAE,GAAIA,EAAE,GAAI,EAAG,EAAGq4B,IAAe,WAClG,OAAuD,OAAlD/rC,GAAM4pC,QAAU9uC,EAAI8uC,EAAQh5B,MAAMswB,EAAMC,MAC7C2I,EAAKhvC,EAAE+O,EAAI6J,EAAE,IAAM,EACnBq2B,EAAKjvC,EAAEkzB,EAAIta,EAAE,IAAM,GACZ,EACT,IAEA,OAAO,SAAS23B,EAAQzzC,GACtB,IAAYxK,EAAR4+C,EAAKt4B,EACT,OAAQ9b,GACN,IAAK,QAASkzC,EAASz9B,GAAMg+B,EAASj+C,EAAIy8C,IAAU,MACpD,IAAK,aAAciB,EAASz9B,KAAOw8B,EACnC,IAAK,OAAQn2B,EAAI40B,EAAM/tC,EAAW8S,GAAKjgB,EAAIy8C,EAE7CxC,GAAY,IAAIsC,GAAUa,EAAM5yC,EAAMkD,EAAGuS,EAAIjgB,EAAGsmB,EAAE,GAAKo2B,EAAIp2B,EAAE,GAAKq2B,EAAIr2B,EAAE,GAAKs4B,EAAG,GAAIt4B,EAAE,GAAKs4B,EAAG,GAAID,GAAeA,EAAan7B,MAAOm7B,EAAc,CAACn0C,EAAMspC,EAAMC,GAClK,CACF,CA2BA,OAzBAqJ,EAAKxlC,OAAS,SAASiJ,GACrB,OAAO9Y,UAAU1F,QAAUuV,EAAsB,mBAANiJ,EAAmBA,EAAIy7B,KAAaz7B,GAAIu8B,GAAQxlC,CAC7F,EAEAwlC,EAAKjwC,UAAY,SAAS0T,GACxB,OAAO9Y,UAAU1F,QAAU8K,EAAyB,mBAAN0T,EAAmBA,EAAIy7B,GAAWz7B,GAAIu8B,GAAQjwC,CAC9F,EAEAiwC,EAAKZ,QAAU,SAAS37B,GACtB,OAAO9Y,UAAU1F,QAAUm6C,EAAuB,mBAAN37B,EAAmBA,EAAIy7B,GAAWz7B,GAAIu8B,GAAQZ,CAC5F,EAEAY,EAAKK,UAAY,SAAS58B,GACxB,OAAO9Y,UAAU1F,QAAUo7C,EAAyB,mBAAN58B,EAAmBA,EAAIy7B,KAAaz7B,GAAIu8B,GAAQK,CAChG,EAEAL,EAAKzJ,GAAK,WACR,IAAIlwC,EAAQ2P,EAAUugC,GAAGnwB,MAAMpQ,EAAWrL,WAC1C,OAAOtE,IAAU2P,EAAYgqC,EAAO35C,CACtC,EAEA25C,EAAKyB,cAAgB,SAASh+B,GAC5B,OAAO9Y,UAAU1F,QAAUs7C,GAAkB98B,GAAKA,GAAKA,EAAGu8B,GAAQlsC,KAAK0hB,KAAK+qB,EAC9E,EAEOP,CACT,CAzSAzC,GAAU1jC,UAJV,WACE,OAAO,IAAI0jC,GAAU,CAAC,CAAC1yC,SAAS0sC,kBAAmBptC,GACrD,EAEgC0P,UAAY,CAC1CtP,YAAagzC,GACbK,OApxBF,SAA0BA,GACF,mBAAXA,IAAuBA,EAASjjC,GAASijC,IAEpD,IAAK,IAAIJ,EAASp5C,KAAKs5C,QAASzc,EAAIuc,EAAOv4C,OAAQy8C,EAAY,IAAI95C,MAAMq5B,GAAI1Y,EAAI,EAAGA,EAAI0Y,IAAK1Y,EAC3F,IAAK,IAAiFZ,EAAMg6B,EAAnF/X,EAAQ4T,EAAOj1B,GAAI3lB,EAAIgnC,EAAM3kC,OAAQ28C,EAAWF,EAAUn5B,GAAK,IAAI3gB,MAAMhF,GAAmBuK,EAAI,EAAGA,EAAIvK,IAAKuK,GAC9Gwa,EAAOiiB,EAAMz8B,MAAQw0C,EAAU/D,EAAOz5B,KAAKwD,EAAMA,EAAKywB,SAAUjrC,EAAGy8B,MAClE,aAAcjiB,IAAMg6B,EAAQvJ,SAAWzwB,EAAKywB,UAChDwJ,EAASz0C,GAAKw0C,GAKpB,OAAO,IAAIpE,GAAUmE,EAAWt9C,KAAKu5C,SACvC,EAwwBEkE,UA5vBF,SAA6BjE,GACL,mBAAXA,IAAuBA,EAPpC,SAAqBjjC,GACnB,OAAmB,MAAZA,EAAmBk9B,GAAQ,WAChC,OAAOzzC,KAAK+H,iBAAiBwO,EAC/B,CACF,CAG6CmnC,CAAYlE,IAEvD,IAAK,IAAIJ,EAASp5C,KAAKs5C,QAASzc,EAAIuc,EAAOv4C,OAAQy8C,EAAY,GAAIjE,EAAU,GAAIl1B,EAAI,EAAGA,EAAI0Y,IAAK1Y,EAC/F,IAAK,IAAyCZ,EAArCiiB,EAAQ4T,EAAOj1B,GAAI3lB,EAAIgnC,EAAM3kC,OAAckI,EAAI,EAAGA,EAAIvK,IAAKuK,GAC9Dwa,EAAOiiB,EAAMz8B,MACfu0C,EAAUh0C,KAAKkwC,EAAOz5B,KAAKwD,EAAMA,EAAKywB,SAAUjrC,EAAGy8B,IACnD6T,EAAQ/vC,KAAKia,IAKnB,OAAO,IAAI41B,GAAUmE,EAAWjE,EAClC,EAgvBEjjC,OAxuBF,SAA0ByC,GACH,mBAAVA,IAAsBA,EAPnC,SAAiBtC,GACf,OAAO,WACL,OAAOvW,KAAK29C,QAAQpnC,EACtB,CACF,CAG2CqnC,CAAQ/kC,IAEjD,IAAK,IAAIugC,EAASp5C,KAAKs5C,QAASzc,EAAIuc,EAAOv4C,OAAQy8C,EAAY,IAAI95C,MAAMq5B,GAAI1Y,EAAI,EAAGA,EAAI0Y,IAAK1Y,EAC3F,IAAK,IAAuEZ,EAAnEiiB,EAAQ4T,EAAOj1B,GAAI3lB,EAAIgnC,EAAM3kC,OAAQ28C,EAAWF,EAAUn5B,GAAK,GAAUpb,EAAI,EAAGA,EAAIvK,IAAKuK,GAC3Fwa,EAAOiiB,EAAMz8B,KAAO8P,EAAMkH,KAAKwD,EAAMA,EAAKywB,SAAUjrC,EAAGy8B,IAC1DgY,EAASl0C,KAAKia,GAKpB,OAAO,IAAI41B,GAAUmE,EAAWt9C,KAAKu5C,SACvC,EA6tBEtwC,KArnBF,SAAwBhH,EAAOzB,GAC7B,IAAKyB,EAGH,OAFAgH,EAAO,IAAIzF,MAAMxD,KAAKqe,QAAS8F,GAAK,EACpCnkB,KAAK69C,MAAK,SAAStxC,GAAKtD,IAAOkb,GAAK5X,CAAG,IAChCtD,EAGT,IArFkBgS,EAqFd6iC,EAAOt9C,EAAM+zC,GAAUL,GACvBmF,EAAUr5C,KAAKu5C,SACfH,EAASp5C,KAAKs5C,QAEG,mBAAVr3C,IAzFOgZ,EAyFkChZ,EAAnBA,EAxF1B,WACL,OAAOgZ,CACT,GAwFA,IAAK,IAAI4hB,EAAIuc,EAAOv4C,OAAQ8yC,EAAS,IAAInwC,MAAMq5B,GAAIsX,EAAQ,IAAI3wC,MAAMq5B,GAAIuX,EAAO,IAAI5wC,MAAMq5B,GAAI1Y,EAAI,EAAGA,EAAI0Y,IAAK1Y,EAAG,CAC/G,IAAIhC,EAASk3B,EAAQl1B,GACjBqhB,EAAQ4T,EAAOj1B,GACfkwB,EAAc7O,EAAM3kC,OACpBoI,EAAOhH,EAAM8d,KAAKoC,EAAQA,GAAUA,EAAO6xB,SAAU7vB,EAAGk1B,GACxD/E,EAAarrC,EAAKpI,OAClBk9C,EAAa5J,EAAMhwB,GAAK,IAAI3gB,MAAM8wC,GAClC0J,EAAcrK,EAAOxvB,GAAK,IAAI3gB,MAAM8wC,GAGxCwJ,EAAK37B,EAAQqjB,EAAOuY,EAAYC,EAFhB5J,EAAKjwB,GAAK,IAAI3gB,MAAM6wC,GAEoBprC,EAAMzI,GAK9D,IAAK,IAAoB8nC,EAAU9kB,EAA1BojB,EAAK,EAAGD,EAAK,EAAmBC,EAAK0N,IAAc1N,EAC1D,GAAI0B,EAAWyV,EAAWnX,GAAK,CAE7B,IADIA,GAAMD,IAAIA,EAAKC,EAAK,KACfpjB,EAAOw6B,EAAYrX,OAAUA,EAAK2N,IAC3ChM,EAASwL,MAAQtwB,GAAQ,IAC3B,CAEJ,CAKA,OAHAmwB,EAAS,IAAIwF,GAAUxF,EAAQ0F,IACxB4E,OAAS9J,EAChBR,EAAOuK,MAAQ9J,EACRT,CACT,EA6kBEQ,MAxtBF,WACE,OAAO,IAAIgF,GAAUn5C,KAAKi+C,QAAUj+C,KAAKs5C,QAAQ52C,IAAIgxC,IAAS1zC,KAAKu5C,SACrE,EAutBEnF,KA5kBF,WACE,OAAO,IAAI+E,GAAUn5C,KAAKk+C,OAASl+C,KAAKs5C,QAAQ52C,IAAIgxC,IAAS1zC,KAAKu5C,SACpE,EA2kBEz4C,KAzkBF,SAAwBq9C,EAASC,EAAUC,GACzC,IAAIlK,EAAQn0C,KAAKm0C,QAASR,EAAS3zC,KAAMo0C,EAAOp0C,KAAKo0C,OAIrD,OAHAD,EAA2B,mBAAZgK,EAAyBA,EAAQhK,GAASA,EAAMmK,OAAOH,EAAU,IAChE,MAAZC,IAAkBzK,EAASyK,EAASzK,IAC1B,MAAV0K,EAAgBjK,EAAKkC,SAAe+H,EAAOjK,GACxCD,GAASR,EAASQ,EAAMoK,MAAM5K,GAAQ6K,QAAU7K,CACzD,EAokBE4K,MAlkBF,SAAyBnC,GAEvB,IAAK,IAAIqC,EAAUz+C,KAAKs5C,QAASoF,EAAUtC,EAAU9C,QAASqF,EAAKF,EAAQ59C,OAAQk9B,EAAK2gB,EAAQ79C,OAAQg8B,EAAIntB,KAAKC,IAAIgvC,EAAI5gB,GAAK6gB,EAAS,IAAIp7C,MAAMm7C,GAAKx6B,EAAI,EAAGA,EAAI0Y,IAAK1Y,EACpK,IAAK,IAAmGZ,EAA/Fs7B,EAASJ,EAAQt6B,GAAI26B,EAASJ,EAAQv6B,GAAI3lB,EAAIqgD,EAAOh+C,OAAQ09C,EAAQK,EAAOz6B,GAAK,IAAI3gB,MAAMhF,GAAUuK,EAAI,EAAGA,EAAIvK,IAAKuK,GACxHwa,EAAOs7B,EAAO91C,IAAM+1C,EAAO/1C,MAC7Bw1C,EAAMx1C,GAAKwa,GAKjB,KAAOY,EAAIw6B,IAAMx6B,EACfy6B,EAAOz6B,GAAKs6B,EAAQt6B,GAGtB,OAAO,IAAIg1B,GAAUyF,EAAQ5+C,KAAKu5C,SACpC,EAojBEiF,MAljBF,WAEE,IAAK,IAAIpF,EAASp5C,KAAKs5C,QAASn1B,GAAK,EAAG0Y,EAAIuc,EAAOv4C,SAAUsjB,EAAI0Y,GAC/D,IAAK,IAA8DtZ,EAA1DiiB,EAAQ4T,EAAOj1B,GAAIpb,EAAIy8B,EAAM3kC,OAAS,EAAG2iB,EAAOgiB,EAAMz8B,KAAYA,GAAK,IAC1Ewa,EAAOiiB,EAAMz8B,MACXya,GAA6C,EAArCD,EAAKy0B,wBAAwBx0B,IAAWA,EAAK9L,WAAW/P,aAAa4b,EAAMC,GACvFA,EAAOD,GAKb,OAAOvjB,IACT,EAuiBEwuB,KAriBF,SAAwBsC,GAGtB,SAASiuB,EAAYtwB,EAAGlU,GACtB,OAAOkU,GAAKlU,EAAIuW,EAAQrC,EAAEulB,SAAUz5B,EAAEy5B,WAAavlB,GAAKlU,CAC1D,CAJKuW,IAASA,EAAU6jB,IAMxB,IAAK,IAAIyE,EAASp5C,KAAKs5C,QAASzc,EAAIuc,EAAOv4C,OAAQm+C,EAAa,IAAIx7C,MAAMq5B,GAAI1Y,EAAI,EAAGA,EAAI0Y,IAAK1Y,EAAG,CAC/F,IAAK,IAAmFZ,EAA/EiiB,EAAQ4T,EAAOj1B,GAAI3lB,EAAIgnC,EAAM3kC,OAAQo+C,EAAYD,EAAW76B,GAAK,IAAI3gB,MAAMhF,GAAUuK,EAAI,EAAGA,EAAIvK,IAAKuK,GACxGwa,EAAOiiB,EAAMz8B,MACfk2C,EAAUl2C,GAAKwa,GAGnB07B,EAAUzwB,KAAKuwB,EACjB,CAEA,OAAO,IAAI5F,GAAU6F,EAAYh/C,KAAKu5C,UAAUiF,OAClD,EAqhBEz+B,KA/gBF,WACE,IAAIlK,EAAWtP,UAAU,GAGzB,OAFAA,UAAU,GAAKvG,KACf6V,EAASmM,MAAM,KAAMzb,WACdvG,IACT,EA2gBEk/C,MAzgBF,WACE,IAAIA,EAAQ,IAAI17C,MAAMxD,KAAKqe,QAAStV,GAAK,EAEzC,OADA/I,KAAK69C,MAAK,WAAaqB,IAAQn2C,GAAK/I,IAAM,IACnCk/C,CACT,EAsgBE37B,KApgBF,WAEE,IAAK,IAAI61B,EAASp5C,KAAKs5C,QAASn1B,EAAI,EAAG0Y,EAAIuc,EAAOv4C,OAAQsjB,EAAI0Y,IAAK1Y,EACjE,IAAK,IAAIqhB,EAAQ4T,EAAOj1B,GAAIpb,EAAI,EAAGvK,EAAIgnC,EAAM3kC,OAAQkI,EAAIvK,IAAKuK,EAAG,CAC/D,IAAIwa,EAAOiiB,EAAMz8B,GACjB,GAAIwa,EAAM,OAAOA,CACnB,CAGF,OAAO,IACT,EA2fElF,KAzfF,WACE,IAAIA,EAAO,EAEX,OADAre,KAAK69C,MAAK,aAAex/B,CAAM,IACxBA,CACT,EAsfEo1B,MApfF,WACE,OAAQzzC,KAAKujB,MACf,EAmfEs6B,KAjfF,SAAwBhoC,GAEtB,IAAK,IAAIujC,EAASp5C,KAAKs5C,QAASn1B,EAAI,EAAG0Y,EAAIuc,EAAOv4C,OAAQsjB,EAAI0Y,IAAK1Y,EACjE,IAAK,IAAgDZ,EAA5CiiB,EAAQ4T,EAAOj1B,GAAIpb,EAAI,EAAGvK,EAAIgnC,EAAM3kC,OAAckI,EAAIvK,IAAKuK,GAC9Dwa,EAAOiiB,EAAMz8B,KAAI8M,EAASkK,KAAKwD,EAAMA,EAAKywB,SAAUjrC,EAAGy8B,GAI/D,OAAOxlC,IACT,EAyeEm/C,KA/bF,SAAwBl/C,EAAMgC,GAC5B,IAAIqxC,EAAWV,GAAU3yC,GAEzB,GAAIsG,UAAU1F,OAAS,EAAG,CACxB,IAAI0iB,EAAOvjB,KAAKujB,OAChB,OAAO+vB,EAASR,MACVvvB,EAAK67B,eAAe9L,EAAST,MAAOS,EAASR,OAC7CvvB,EAAK5V,aAAa2lC,EAC1B,CAEA,OAAOtzC,KAAK69C,MAAe,MAAT57C,EACXqxC,EAASR,MAAQgC,GAAeF,GAAgC,mBAAV3yC,EACtDqxC,EAASR,MAAQsC,GAAiBD,GAClC7B,EAASR,MAAQmC,GAAiBD,IAAgB1B,EAAUrxC,GACrE,EAkbEmc,MAtZF,SAAyBne,EAAMgC,EAAOwzC,GACpC,OAAOlvC,UAAU1F,OAAS,EACpBb,KAAK69C,MAAe,MAAT57C,EACLqzC,GAA+B,mBAAVrzC,EACrB0zC,GACAH,IAAev1C,EAAMgC,EAAmB,MAAZwzC,EAAmB,GAAKA,IAIlE,SAAoBlyB,EAAMtjB,GACxB,OAAOsjB,EAAKnF,MAAMihC,iBAAiBp/C,IAC5Bo1C,GAAY9xB,GAAM+7B,iBAAiB/7B,EAAM,MAAM87B,iBAAiBp/C,EACzE,CANQs/C,CAAWv/C,KAAKujB,OAAQtjB,EAChC,EAgZEiD,SArXF,SAA4BjD,EAAMgC,GAChC,OAAOsE,UAAU1F,OAAS,EACpBb,KAAK69C,MAAe,MAAT57C,EACP2zC,GAAkC,mBAAV3zC,EACxB6zC,GACAD,IAAkB51C,EAAMgC,IAC5BjC,KAAKujB,OAAOtjB,EACpB,EA+WEu/C,QAhTF,SAA2Bv/C,EAAMgC,GAC/B,IAAIvB,EAAQq1C,GAAW91C,EAAO,IAE9B,GAAIsG,UAAU1F,OAAS,EAAG,CAExB,IADA,IAAIyd,EAAO03B,GAAUh2C,KAAKujB,QAASxa,GAAK,EAAGvK,EAAIkC,EAAMG,SAC5CkI,EAAIvK,OAAQ8f,EAAKm5B,SAAS/2C,EAAMqI,IAAK,OAAO,EACrD,OAAO,CACT,CAEA,OAAO/I,KAAK69C,MAAuB,mBAAV57C,EACnBw0C,GAAkBx0C,EAClBs0C,GACAC,IAAc91C,EAAOuB,GAC7B,EAoSEkG,KAjRF,SAAwBlG,GACtB,OAAOsE,UAAU1F,OACXb,KAAK69C,KAAc,MAAT57C,EACNy0C,IAA+B,mBAAVz0C,EACrB20C,GACAD,IAAc10C,IAClBjC,KAAKujB,OAAOzd,WACpB,EA2QEkY,KAxPF,SAAwB/b,GACtB,OAAOsE,UAAU1F,OACXb,KAAK69C,KAAc,MAAT57C,EACN40C,IAA+B,mBAAV50C,EACrB80C,GACAD,IAAc70C,IAClBjC,KAAKujB,OAAO5c,SACpB,EAkPEqwC,MA5OF,WACE,OAAOh3C,KAAK69C,KAAK7G,GACnB,EA2OEE,MArOF,WACE,OAAOl3C,KAAK69C,KAAK3G,GACnB,EAoOEoH,OAlOF,SAA0Br+C,GACxB,IAAIkyB,EAAyB,mBAATlyB,EAAsBA,EAAOszC,GAAQtzC,GACzD,OAAOD,KAAKw5C,QAAO,WACjB,OAAOx5C,KAAKwH,YAAY2qB,EAAOnQ,MAAMhiB,KAAMuG,WAC7C,GACF,EA8NE0a,OAxNF,SAA0BhhB,EAAM+gB,GAC9B,IAAImR,EAAyB,mBAATlyB,EAAsBA,EAAOszC,GAAQtzC,GACrDu5C,EAAmB,MAAVx4B,EAAiBo2B,GAAiC,mBAAXp2B,EAAwBA,EAASzK,GAASyK,GAC9F,OAAOhhB,KAAKw5C,QAAO,WACjB,OAAOx5C,KAAK2H,aAAawqB,EAAOnQ,MAAMhiB,KAAMuG,WAAYizC,EAAOx3B,MAAMhiB,KAAMuG,YAAc,KAC3F,GACF,EAmNE+vC,OA5MF,WACE,OAAOt2C,KAAK69C,KAAKvH,GACnB,EA2MEpvC,MA/LF,SAAyBu4C,GACvB,OAAOz/C,KAAKw5C,OAAOiG,EAAOlI,GAAsBF,GAClD,EA8LExD,MA5LF,SAAyB5xC,GACvB,OAAOsE,UAAU1F,OACXb,KAAKkD,SAAS,WAAYjB,GAC1BjC,KAAKujB,OAAOywB,QACpB,EAyLE7B,GA3GF,SAAsBC,EAAUnwC,EAAOq2C,GACrC,IAAiDvvC,EAAyB2P,EAAtEgnC,EA5CN,SAA0BA,GACxB,OAAOA,EAAU7xC,OAAOlN,MAAM,SAAS+B,KAAI,SAASgW,GAClD,IAAIzY,EAAO,GAAI8I,EAAI2P,EAAErP,QAAQ,KAE7B,OADIN,GAAK,IAAG9I,EAAOyY,EAAE9X,MAAMmI,EAAI,GAAI2P,EAAIA,EAAE9X,MAAM,EAAGmI,IAC3C,CAACC,KAAM0P,EAAGzY,KAAMA,EACzB,GACF,CAsCkB0/C,CAAiBvN,EAAW,IAAQ5zC,EAAIkhD,EAAU7+C,OAElE,KAAI0F,UAAU1F,OAAS,GAAvB,CAcA,IAFAsxC,EAAKlwC,EAAQs2C,GAAQJ,GACN,MAAXG,IAAiBA,GAAU,GAC1BvvC,EAAI,EAAGA,EAAIvK,IAAKuK,EAAG/I,KAAK69C,KAAK1L,EAAGuN,EAAU32C,GAAI9G,EAAOq2C,IAC1D,OAAOt4C,IALP,CATE,IAAImyC,EAAKnyC,KAAKujB,OAAO60B,KACrB,GAAIjG,EAAI,IAAK,IAA0BryB,EAAtBqE,EAAI,EAAG0Y,EAAIsV,EAAGtxC,OAAWsjB,EAAI0Y,IAAK1Y,EACjD,IAAKpb,EAAI,EAAG+W,EAAIqyB,EAAGhuB,GAAIpb,EAAIvK,IAAKuK,EAC9B,IAAK2P,EAAIgnC,EAAU32C,IAAIC,OAAS8W,EAAE9W,MAAQ0P,EAAEzY,OAAS6f,EAAE7f,KACrD,OAAO6f,EAAE7d,KAWnB,EAyFEgwC,SAjDF,SAA4BjpC,EAAM2vC,GAChC,OAAO34C,KAAK69C,MAAwB,mBAAXlF,EACnBK,GACAD,IAAkB/vC,EAAM2vC,GAChC,GAkJAoC,GAAUtlC,UAAU08B,GAAK,WACvB,IAAIlwC,EAAQjC,KAAKqf,EAAE8yB,GAAGnwB,MAAMhiB,KAAKqf,EAAG9Y,WACpC,OAAOtE,IAAUjC,KAAKqf,EAAIrf,KAAOiC,CACnC,EAqKA,IAAM29C,GAAMx5C,EAAS,WAAY,8uDAqG3By5C,GACE,GADFA,GAEA,GAFAA,GAGG,GAHHA,GAIE,GAJFA,GAKI,GALJA,GAMM,GANNA,GAOC,GAPDA,GAQE,GAGFC,GAAM,SAAAC,GAAA,SAAAD,IAAA,OAAA//C,EAAA,KAAA+/C,GAAA56C,EAAA,KAAA46C,EAAAv5C,UAAA,QAAAX,EAAAk6C,EAAAC,GAAAlgD,EAAAigD,EAAA,EAAAt/C,IAAA,oBAAAyB,MAGV,WAAoB,IAAA+9C,EAAA,KAClBhgD,KAAKigD,WAAY,EACjBjgD,KAAKmK,aAAa,OAAQ,UAErBnK,KAAKyH,aAAa,aAAezH,KAAKmK,aAAa,WAAY,GAGpEnK,KAAKkgD,YAAa,EAGlBlgD,KAAKmgD,KAAOngD,KAAK+F,KAAK+B,cAAc,mBACpC9H,KAAKogD,WAAapgD,KAAK+F,KAAK+B,cAAc,eAC1C9H,KAAKqgD,UAAYrgD,KAAK+F,KAAK+B,cAAc,eACzC9H,KAAKsgD,MAAQtgD,KAAK+F,KAAK+B,cAAc,UAGrC9H,KAAK2P,IAAM3P,KAAK2P,IAAM3P,KAAK2P,IAAM,EACjC3P,KAAK0xB,IAAM1xB,KAAK0xB,IAAM1xB,KAAK0xB,IAAM,IACjC1xB,KAAKwjC,MAAQqE,KAAW9V,OAAO,CAAC/xB,KAAK2P,IAAK3P,KAAK0xB,MAAMM,MAAM,CAAC,EAAG,IAAIsR,OAAM,GAEzEtjC,KAAKugD,YAAyB5+C,IAAhB3B,KAAKugD,OAAuBvgD,KAAKugD,OAASvgD,KAAK2P,IAC7D3P,KAAKyxB,KAAOzxB,KAAKyxB,KAAOzxB,KAAKyxB,KAAO,EACpCzxB,KAAK2zC,OAAO3zC,KAAKiC,MAAQjC,KAAKiC,MAAQ,GAEtCjC,KAAKynC,QAAQznC,KAAKynC,OAAQznC,KAAKynC,MAC/BznC,KAAKwgD,cAELxgD,KAAK47C,KAAOA,KACTjwC,UAAU3L,KAAKogD,YACfjO,GAAG,SAAS,WACX6N,EAAKE,YAAa,EAClBF,EAAKI,WAAWpK,UAAUloC,IAAI,aAC9BkyC,EAAKS,YAAcT,EAAK/9C,MACxB+9C,EAAKU,YACP,IACCvO,GAAG,QAAQ,WACV6N,EAAKU,YACP,IACCvO,GAAG,OAAO,WACT6N,EAAKE,YAAa,EAClBF,EAAKI,WAAWpK,UAAUM,OAAO,aACjC0J,EAAKU,aACDV,EAAKS,cAAgBT,EAAK/9C,OAAO+9C,EAAKW,iBAC1CX,EAAKS,YAAcT,EAAK/9C,KAC1B,IACFjC,KAAK47C,KAAKpC,GAAOx5C,KAAKogD,aAEtBpgD,KAAKulB,iBAAiB,WAAW,WAC3By6B,EAAKE,YACPF,EAAKI,WAAWpK,UAAUloC,IAAI,QAElC,IACA9N,KAAKulB,iBAAiB,YAAY,WAChCy6B,EAAKI,WAAWpK,UAAUM,OAAO,QACnC,IACAt2C,KAAKulB,iBAAiB,UAAWvlB,KAAK4gD,UAExC,GAAC,CAAApgD,IAAA,2BAAAyB,MAID,SAAyBk9C,EAAMhjC,EAAUC,GACnCshB,MAAMthB,IAANshB,MAAmBthB,IACX,OAAR+iC,IACFn/C,KAAK2P,KAAOyM,EACZpc,KAAKmK,aAAa,gBAAiBnK,KAAK2P,MAE9B,OAARwvC,IACFn/C,KAAK0xB,KAAOtV,EACZpc,KAAKmK,aAAa,gBAAiBnK,KAAK0xB,MAE9B,SAARytB,GACFn/C,KAAK2zC,QAAQv3B,GAEH,UAAR+iC,IACFn/C,KAAKugD,QAAUnkC,GAGL,QAAR+iC,GACE/iC,EAAW,IACbpc,KAAKyxB,MAAQrV,GAGL,SAAR+iC,IACFn/C,KAAKynC,MAAsB,KAAbrrB,GAAyBA,GAE3C,GAAC,CAAA5b,IAAA,YAAAyB,MAED,SAAUmP,GACRpR,KAAKygD,YAAczgD,KAAKiC,MACxB,IAAIopB,GAAkB,EACtB,OAAQja,EAAMyvC,SACd,KAAKhB,GACL,KAAKA,GACH7/C,KAAK2zC,OAAO3zC,KAAKiC,MAAQjC,KAAKyxB,MAC9BpG,GAAkB,EAClB,MACF,KAAKw0B,GACL,KAAKA,GACH7/C,KAAK2zC,OAAO3zC,KAAKiC,MAAQjC,KAAKyxB,MAC9BpG,GAAkB,EAClB,MACF,KAAKw0B,GAKL,KAAKA,GACH7/C,KAAK2zC,OAAO3zC,KAAKiC,MAAoB,GAAZjC,KAAKyxB,MAC9BpG,GAAkB,EAClB,MACF,KAAKw0B,GACH7/C,KAAK2zC,OAAO3zC,KAAK2P,KACjB0b,GAAkB,EAClB,MACF,KAAKw0B,GACH7/C,KAAK2zC,OAAO3zC,KAAK0xB,KACjBrG,GAAkB,EAGhBA,IACFrrB,KAAKogD,WAAWpK,UAAUloC,IAAI,SAC9BsD,EAAMypC,iBACNzpC,EAAMia,kBACFrrB,KAAKygD,cAAgBzgD,KAAKiC,OAAOjC,KAAK2gD,iBAE9C,GAAC,CAAAngD,IAAA,qBAAAyB,MAED,SAAmB0N,EAAK+hB,EAAKzvB,GAC3B,OAAOyN,KAAKgiB,IAAIhiB,KAAKC,IAAI+hB,EAAKzvB,GAAQ0N,EACxC,GAAC,CAAAnP,IAAA,gBAAAyB,MAED,SAAcA,EAAOwvB,GACnB,OAAO/hB,KAAKic,MAAM1pB,EAAQwvB,GAAQA,CACpC,GAAC,CAAAjxB,IAAA,aAAAyB,MAED,WACE,IAAM2pB,EAAO5rB,KAAKogD,WAAWv0B,wBACvB5Q,EAAI7J,GAAM6J,EACV+Q,EAAQJ,EAAKI,MACnBhsB,KAAK2zC,OAAO3zC,KAAKwjC,MAAMC,OAAOxoB,EAAI+Q,GACpC,GAAC,CAAAxrB,IAAA,SAAAyB,MAED,SAAOA,GACL,IAAIqe,EAAIre,EACU,QAAdjC,KAAKyxB,OACPnR,EAAItgB,KAAK8gD,cAAc7+C,EAAOjC,KAAKyxB,OAErCnR,EAAItgB,KAAK+gD,mBAAmB/gD,KAAK2P,IAAK3P,KAAK0xB,IAAKpR,GAC5CtgB,KAAKigD,YACPjgD,KAAKmgD,KAAK/hC,MAAMzU,KAAuB,IAAhB3J,KAAKwjC,MAAMljB,GAAW,IAC7CtgB,KAAKqgD,UAAUjiC,MAAM4N,MAA2D,IAAnDhsB,KAAKwjC,MAAMxjC,KAAK2P,IAAMD,KAAKs0B,IAAI1jB,EAAItgB,KAAKugD,SAAiB,IACtFvgD,KAAKqgD,UAAUjiC,MAAMzU,KAA8C,IAAvC3J,KAAKwjC,MAAM9zB,KAAKC,IAAI2Q,EAAGtgB,KAAKugD,SAAiB,KAEvEvgD,KAAKiC,QAAUqe,IACjBtgB,KAAKiC,MAAQqe,EACbtgB,KAAKmK,aAAa,gBAAiBnK,KAAKiC,OACxCjC,KAAKghD,gBAET,GAEA,CAAAxgD,IAAA,iBAAAyB,MACA,WACE,IAAMmI,EAAI,IAAI62C,MAAM,UACpBjhD,KAAKwR,cAAcpH,EAAG,CAAC,EACzB,GAEA,CAAA5J,IAAA,gBAAAyB,MACA,WACE,IAAMmI,EAAI,IAAI62C,MAAM,SACpBjhD,KAAKwR,cAAcpH,EAAG,CAAC,EACzB,GAAC,CAAA5J,IAAA,cAAAyB,MAED,WAAc,IAAAi/C,EAAA,KACNC,EAAiBnhD,KAAK+F,KAAK+B,cAAc,WAC5B,IAAf9H,KAAKynC,OAEHznC,KAAKynC,MAAQ,EACJznC,KAAKwjC,MAAMiE,MAAMznC,KAAKynC,OACV,QAAdznC,KAAKyxB,KACHzxB,KAAKwjC,MAAMiE,QAlxH9B,SAAeruB,EAAOoY,EAAMC,GAC1BrY,GAASA,EAAOoY,GAAQA,EAAMC,GAAQjzB,EAAI+H,UAAU1F,QAAU,GAAK2wB,EAAOpY,EAAOA,EAAQ,EAAG,GAAK5a,EAAI,EAAI,GAAKizB,EAM9G,IAJA,IAAI1oB,GAAK,EACLvK,EAAoD,EAAhDkR,KAAKgiB,IAAI,EAAGhiB,KAAKi4B,MAAMnW,EAAOpY,GAASqY,IAC3CO,EAAQ,IAAIxuB,MAAMhF,KAEbuK,EAAIvK,GACXwzB,EAAMjpB,GAAKqQ,EAAQrQ,EAAI0oB,EAGzB,OAAOO,CACT,CAwwHmBA,CAAMhyB,KAAK2P,IAAK3P,KAAK0xB,IAAM,KAAM1xB,KAAKyxB,OAE1CpR,SAAQ,SAAA9T,GACf,IAAM60C,EAAO36C,SAASC,cAAc,OACpC06C,EAAKpL,UAAUloC,IAAI,QACnBszC,EAAKhjC,MAAMzU,KAAuB,IAAhBu3C,EAAK1d,MAAMj3B,GAAW,IACxC40C,EAAe35C,YAAY45C,EAC7B,IAEAD,EAAe/iC,MAAMvV,QAAU,MAEnC,IAAC,EAAArI,IAAA,qBAAAC,IAtID,WAAiC,MAAO,CAAC,MAAO,MAAO,QAAS,OAAQ,QAAS,SAAU,aAAc,aAAe,IAAC,CA9D/G,CAASm/C,GAAIzyC,cAuMrBk0C,GAAO,yKAoFLC,GAAa,SAAAC,GAAA,SAAAD,IAAA,OAAAvhD,EAAA,KAAAuhD,GAAAp8C,EAAA,KAAAo8C,EAAA/6C,UAAA,QAAAX,EAAA07C,EAAAC,GAAA1hD,EAAAyhD,EAAA,EAFPl7C,EAAS,iBAhFE,+wCAAHzG,OAmEhB0hD,GAAI,yKAa+C,EAE3BG,CAAIr0C,cAoE/B,IAEKs0C,GAAe,SAAAC,GAAA,SAAAD,IAAA,OAAA1hD,EAAA,KAAA0hD,GAAAv8C,EAAA,KAAAu8C,EAAAl7C,UAAA,QAAAX,EAAA67C,EAAAC,GAAA7hD,EAAA4hD,EAAA,EAAAjhD,IAAA,cAAAwB,IAInB,SAAgB4C,GACd5E,KAAK2G,UAzCT,SAA0B/B,GACxB,IAAIoZ,EA7BW,sjBA+BsB,IAA1BpZ,EAAYZ,YACrBga,GAAQ,+EAGJpZ,EAAY+8C,0BACd3jC,GAAQ,YAAJre,OAAgBiF,EAAY+8C,wBAAuB,yEAEzD3jC,GAAQ,yEAAJre,OAC4DiF,EAAYZ,UAAY,cAAa,gDAIvG,IAAMxC,EAAUoD,EAAYpD,QAkB5B,YAjBuB,IAAZA,GAA6C,YAAlBA,EAAQR,QAC5Cgd,GAAQ,mNAAJre,OAEuKiF,EAAYZ,UAAS,mOAIzJ,IAA9BY,EAAYhD,gBACrBoc,GAAQ,qJAAJre,OAGwBiF,EAAYH,oBAAmB,OAAA9E,OAAMiF,EAAY5D,MAAK,gBAAArB,OAAeiF,EAAYrC,cAAa,wEAAA5C,OAt6N9H,SAAsCiF,GACpC,MAAO,YAAPjF,OAAmBiF,EAAYhC,KAAI,mBAAAjD,OACzBiF,EAAYF,cAAa,mBAAA/E,OAC1BiF,EAAY5D,MAAK,qBAAArB,OACfiF,EAAYpD,QAAQR,MAAK,kBAAArB,OAC5BiF,EAAYrC,cAAa,kBAAA5C,OACzBiF,EAAY7C,IAAG,iBAAApC,OAChBiF,EAAYlD,IAAG,OAExB,CA+5N+BkgD,CAA6Bh9C,GAAY,iBAI/DoZ,CACT,CAOqB6jC,CAAiBj9C,EACpC,IAAC,EAAApE,IAAA,KAAAC,IAJD,WAAkB,MAAO,kBAAoB,IAAC,CAF3B,CAE2BgR,EAFlBtE,cAuFxB20C,GAAa,SAAAC,GAAA,SAAAD,IAAA,OAAA/hD,EAAA,KAAA+hD,GAAA58C,EAAA,KAAA48C,EAAAv7C,UAAA,QAAAX,EAAAk8C,EAAAC,GAAAliD,EAAAiiD,EAAA,EAFP17C,EAAS,iBA3EE,g8BAAHzG,OAsDhB0hD,GAAI,wiBAuBoBW,CAAI70C,cA6EhCvG,OAAOq7C,QAAU,CAAEC,SAtEJ,EAsEcC,WArEV,WACjB,GAAIv7C,OAAOq7C,QAAQC,SAAW,EAC5B,MAAM,IAAI1/C,MAAM,+CAIlB,GAAI,YAAaoE,QAAUA,OAAOq7C,QAAQG,kBACxC,MAAM,IAAI5/C,MACR,4EAGFoE,OAAOq7C,QAAQG,mBAAoB,EACnCn8C,QAAQ6M,MAAM,qDApnPlB,SAAsBxF,GAEpB,IAAM+0C,EAAa,6BAEnB,IADuB/0C,EAAI0b,eAAeq5B,GACrB,CACnB,IAAMC,EAAWh1C,EAAI5G,cAAc,SACnC47C,EAAS7jC,GAAK4jC,EACdC,EAASt5C,KAAO,WAChB,IAAMu5C,EAAaj1C,EAAItD,eAAe+K,GACtCutC,EAAS96C,YAAY+6C,GACrB,IAAMC,EAAiBl1C,EAAIX,KAAK7E,cAAc,UAC9CwF,EAAIX,KAAKhF,aAAa26C,EAAUE,EAClC,CAEF,CA0mPEC,CAAah8C,UACbR,QAAQ6M,MAAM,sDACd7M,QAAQ6M,MAAM,kBACdlM,OAAOq7C,QAAQC,UAAY,EAI3B,IAAK,IAALQ,EAAA,EAAAC,EAAuCr/C,OAAOyN,QAAQW,EAAWE,WAAU8wC,EAAAC,EAAA9hD,OAAA6hD,IAAE,CAAxE,IAAAE,EAAA/+C,EAAA8+C,EAAAD,GAAA,GAAOG,EAAYD,EAAA,GAAE/sC,EAAQ+sC,EAAA,GACR,mBAAb/sC,EACTpP,SAAS8e,iBAAiBs9B,EAAchtC,GAExC5P,QAAQC,MAAM,yDAElB,CACAD,QAAQ6M,MAAM,uDACd7M,QAAQ6M,MAAM,kBACdlM,OAAOq7C,QAAQC,UAAY,EAG3B,IAAMY,EAAa,CACjBzsC,EAAUI,EAAUI,EAAS4E,GAAcmB,GAAQG,GAAMmB,GAAciL,GACvEQ,GAAUS,GAAcxZ,EAAega,GAAU4B,GAAOnhB,EAAOqhB,GAAYG,GAAKY,GAChFqyB,GAAQ/vB,IAGJgzB,EAAoB,CAACzB,GAAeG,GAAiBK,IAE3D,GAAIl7C,OAAOq7C,QAAQC,SAAW,EAC5B,MAAM,IAAI1/C,MAAM,qDAElB,IACqCwgD,EADsBC,EAAAh3C,EAArC62C,EAAWnjD,OAAOojD,IACH,IAArC,IAAAE,EAAA/2C,MAAA82C,EAAAC,EAAAzkD,KAAA2N,MAAuC,KAA5B+2C,EAASF,EAAA/gD,MAClBgE,QAAQ6M,MAAM,2CAA6CowC,EAAUC,IACrE3lC,eAAepf,OAAO8kD,EAAUC,GAAID,EACtC,CAAC,OAAA/3C,GAAA83C,EAAA74C,EAAAe,EAAA,SAAA83C,EAAA72C,GAAA,CAEDnG,QAAQ6M,MACN,sEAEF7M,QAAQ6M,MAAM,kBACdlM,OAAOq7C,QAAQC,UAAY,EAIvBtyC,KACF8B,EAAWE,UAAU4C,mBAGvBvO,QAAQ6M,MAAM,yDACdlM,OAAOq7C,QAAQG,mBAAoB,EACnCx7C,OAAOq7C,QAAQmB,mBAAoB,CACrC,EAEyChB,mBAvEjB,GA0EpB1sC,EAAU2tC,8BACZp9C,QAAQ6M,MAAM,sCACd7M,QAAQ6M,MAAM,kBACdlM,OAAOq7C,QAAQC,UAAY,EAC3Bt7C,OAAOq7C,QAAQE,eAEfl8C,QAAQ6M,MAAM,sDACd4C,EAAU4tC,KAAK18C,OAAOq7C,QAAQE,YAGlC,OA5hS6D,sC,GCAzDoB,EAA2B,CAAC,EAGhC,SAASC,EAAoBC,GAE5B,IAAIC,EAAeH,EAAyBE,GAC5C,QAAqB9hD,IAAjB+hD,EACH,OAAOA,EAAaxrC,QAGrB,IAAID,EAASsrC,EAAyBE,GAAY,CAGjDvrC,QAAS,CAAC,GAOX,OAHAyrC,EAAoBF,GAAUxrC,EAAQA,EAAOC,QAASsrC,GAG/CvrC,EAAOC,OACf,CCtBAsrC,EAAoBpmB,EAAI,WACvB,GAA0B,iBAAfxlB,WAAyB,OAAOA,WAC3C,IACC,OAAO5X,MAAQ,IAAI4jD,SAAS,cAAb,EAChB,CAAE,MAAOx5C,GACR,GAAsB,iBAAXxD,OAAqB,OAAOA,MACxC,CACA,CAPuB,GCGE48C,EAAoB,I","sources":["webpack://blogpost/./src/distill.js","webpack://blogpost/webpack/bootstrap","webpack://blogpost/webpack/runtime/global","webpack://blogpost/webpack/startup"],"sourcesContent":["(function (factory) {\n typeof define === 'function' && define.amd ? define(factory) :\n factory();\n}((function () { 'use strict';\n\n // Copyright 2018 The Distill Template Authors\n //\n // Licensed under the Apache License, Version 2.0 (the \"License\");\n // you may not use this file except in compliance with the License.\n // You may obtain a copy of the License at\n //\n // http://www.apache.org/licenses/LICENSE-2.0\n //\n // Unless required by applicable law or agreed to in writing, software\n // distributed under the License is distributed on an \"AS IS\" BASIS,\n // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n // See the License for the specific language governing permissions and\n // limitations under the License.\n\n const days = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];\n const months = ['Jan.', 'Feb.', 'March', 'April', 'May', 'June', 'July', 'Aug.', 'Sept.', 'Oct.', 'Nov.', 'Dec.'];\n const zeroPad = n => n < 10 ? '0' + n : n;\n\n const RFC = function(date) {\n const day = days[date.getDay()].substring(0, 3);\n const paddedDate = zeroPad(date.getDate());\n const month = months[date.getMonth()].substring(0,3);\n const year = date.getFullYear().toString();\n const hours = date.getUTCHours().toString();\n const minutes = date.getUTCMinutes().toString();\n const seconds = date.getUTCSeconds().toString();\n return `${day}, ${paddedDate} ${month} ${year} ${hours}:${minutes}:${seconds} Z`;\n };\n\n const objectFromMap = function(map) {\n const object = Array.from(map).reduce((object, [key, value]) => (\n Object.assign(object, { [key]: value }) // Be careful! Maps can have non-String keys; object literals can't.\n ), {});\n return object;\n };\n\n const mapFromObject = function(object) {\n const map = new Map();\n for (var property in object) {\n if (object.hasOwnProperty(property)) {\n map.set(property, object[property]);\n }\n }\n return map;\n };\n\n class Author {\n\n // constructor(name='', personalURL='', affiliation='', affiliationURL='') {\n // this.name = name; // 'Chris Olah'\n // this.personalURL = personalURL; // 'https://colah.github.io'\n // this.affiliation = affiliation; // 'Google Brain'\n // this.affiliationURL = affiliationURL; // 'https://g.co/brain'\n // }\n\n constructor(object) {\n this.name = object.author; // 'Chris Olah'\n this.personalURL = object.authorURL; // 'https://colah.github.io'\n this.affiliation = object.affiliation; // 'Google Brain'\n this.affiliationURL = object.affiliationURL; // 'https://g.co/brain'\n this.affiliations = object.affiliations || []; // new-style affiliations\n }\n\n // 'Chris'\n get firstName() {\n const names = this.name.split(' ');\n return names.slice(0, names.length - 1).join(' ');\n }\n\n // 'Olah'\n get lastName() {\n const names = this.name.split(' ');\n return names[names.length -1];\n }\n }\n\n function mergeFromYMLFrontmatter(target, source) {\n target.title = source.title;\n if (source.published) {\n if (source.published instanceof Date) {\n target.publishedDate = source.published;\n } else if (source.published.constructor === String) {\n target.publishedDate = new Date(source.published);\n }\n }\n if (source.publishedDate) {\n if (source.publishedDate instanceof Date) {\n target.publishedDate = source.publishedDate;\n } else if (source.publishedDate.constructor === String) {\n target.publishedDate = new Date(source.publishedDate);\n } else {\n console.error('Don\\'t know what to do with published date: ' + source.publishedDate);\n }\n }\n target.description = source.description;\n target.authors = source.authors.map( (authorObject) => new Author(authorObject));\n target.katex = source.katex;\n target.password = source.password;\n if (source.doi) {\n target.doi = source.doi;\n }\n }\n\n class FrontMatter {\n constructor() {\n this.title = 'unnamed article'; // 'Attention and Augmented Recurrent Neural Networks'\n this.description = ''; // 'A visual overview of neural attention...'\n this.authors = []; // Array of Author(s)\n\n this.bibliography = new Map();\n this.bibliographyParsed = false;\n // {\n // 'gregor2015draw': {\n // 'title': 'DRAW: A recurrent neural network for image generation',\n // 'author': 'Gregor, Karol and Danihelka, Ivo and Graves, Alex and Rezende, Danilo Jimenez and Wierstra, Daan',\n // 'journal': 'arXiv preprint arXiv:1502.04623',\n // 'year': '2015',\n // 'url': 'https://arxiv.org/pdf/1502.04623.pdf',\n // 'type': 'article'\n // },\n // }\n\n // Citation keys should be listed in the order that they are appear in the document.\n // Each key refers to a key in the bibliography dictionary.\n this.citations = []; // [ 'gregor2015draw', 'mercier2011humans' ]\n this.citationsCollected = false;\n\n //\n // Assigned from posts.csv\n //\n\n // publishedDate: 2016-09-08T07:00:00.000Z,\n // tags: [ 'rnn' ],\n // distillPath: '2016/augmented-rnns',\n // githubPath: 'distillpub/post--augmented-rnns',\n // doiSuffix: 1,\n\n //\n // Assigned from journal\n //\n this.journal = {};\n // journal: {\n // 'title': 'Distill',\n // 'full_title': 'Distill',\n // 'abbrev_title': 'Distill',\n // 'url': 'http://distill.pub',\n // 'doi': '10.23915/distill',\n // 'publisherName': 'Distill Working Group',\n // 'publisherEmail': 'admin@distill.pub',\n // 'issn': '2476-0757',\n // 'editors': [...],\n // 'committee': [...]\n // }\n // volume: 1,\n // issue: 9,\n\n this.katex = {};\n\n //\n // Assigned from publishing process\n //\n\n // githubCompareUpdatesUrl: 'https://github.com/distillpub/post--augmented-rnns/compare/1596e094d8943d2dc0ea445d92071129c6419c59...3bd9209e0c24d020f87cf6152dcecc6017cbc193',\n // updatedDate: 2017-03-21T07:13:16.000Z,\n // doi: '10.23915/distill.00001',\n this.doi = undefined;\n this.publishedDate = undefined;\n }\n\n // Example:\n // title: Demo Title Attention and Augmented Recurrent Neural Networks\n // published: Jan 10, 2017\n // authors:\n // - Chris Olah:\n // - Shan Carter: http://shancarter.com\n // affiliations:\n // - Google Brain:\n // - Google Brain: http://g.co/brain\n\n //\n // Computed Properties\n //\n\n // 'http://distill.pub/2016/augmented-rnns',\n set url(value) {\n this._url = value;\n }\n get url() {\n if (this._url) {\n return this._url;\n } else if (this.distillPath && this.journal.url) {\n return this.journal.url + '/' + this.distillPath;\n } else if (this.journal.url) {\n return this.journal.url;\n }\n }\n\n // 'https://github.com/distillpub/post--augmented-rnns',\n get githubUrl() {\n if (this.githubPath) {\n return 'https://github.com/' + this.githubPath;\n } else {\n return undefined;\n }\n }\n\n // TODO resolve differences in naming of URL/Url/url.\n // 'http://distill.pub/2016/augmented-rnns/thumbnail.jpg',\n set previewURL(value) {\n this._previewURL = value;\n }\n get previewURL() {\n return this._previewURL ? this._previewURL : this.url + '/thumbnail.jpg';\n }\n\n // 'Thu, 08 Sep 2016 00:00:00 -0700',\n get publishedDateRFC() {\n return RFC(this.publishedDate);\n }\n\n // 'Thu, 08 Sep 2016 00:00:00 -0700',\n get updatedDateRFC() {\n return RFC(this.updatedDate);\n }\n\n // 2016,\n get publishedYear() {\n return this.publishedDate.getFullYear();\n }\n\n // 'Sept',\n get publishedMonth() {\n return months[this.publishedDate.getMonth()];\n }\n\n // 8,\n get publishedDay() {\n return this.publishedDate.getDate();\n }\n\n // '09',\n get publishedMonthPadded() {\n return zeroPad(this.publishedDate.getMonth() + 1);\n }\n\n // '08',\n get publishedDayPadded() {\n return zeroPad(this.publishedDate.getDate());\n }\n\n get publishedISODateOnly() {\n return this.publishedDate.toISOString().split('T')[0];\n }\n\n get volume() {\n const volume = this.publishedYear - 2015;\n if (volume < 1) {\n throw new Error('Invalid publish date detected during computing volume');\n }\n return volume;\n }\n\n get issue() {\n return this.publishedDate.getMonth() + 1;\n }\n\n // 'Olah & Carter',\n get concatenatedAuthors() {\n if (this.authors.length > 2) {\n return this.authors[0].lastName + ', et al.';\n } else if (this.authors.length === 2) {\n return this.authors[0].lastName + ' & ' + this.authors[1].lastName;\n } else if (this.authors.length === 1) {\n return this.authors[0].lastName;\n }\n }\n\n // 'Olah, Chris and Carter, Shan',\n get bibtexAuthors() {\n return this.authors.map(author => {\n return author.lastName + ', ' + author.firstName;\n }).join(' and ');\n }\n\n // 'olah2016attention'\n get slug() {\n let slug = '';\n if (this.authors.length) {\n slug += this.authors[0].lastName.toLowerCase();\n slug += this.publishedYear;\n slug += this.title.split(' ')[0].toLowerCase();\n }\n return slug || 'Untitled';\n }\n\n get bibliographyEntries() {\n return new Map(this.citations.map( citationKey => {\n const entry = this.bibliography.get(citationKey);\n return [citationKey, entry];\n }));\n }\n\n set bibliography(bibliography) {\n if (bibliography instanceof Map) {\n this._bibliography = bibliography;\n } else if (typeof bibliography === 'object') {\n this._bibliography = mapFromObject(bibliography);\n }\n }\n\n get bibliography() {\n return this._bibliography;\n }\n\n static fromObject(source) {\n const frontMatter = new FrontMatter();\n Object.assign(frontMatter, source);\n return frontMatter;\n }\n\n assignToObject(target) {\n Object.assign(target, this);\n target.bibliography = objectFromMap(this.bibliographyEntries);\n target.url = this.url;\n target.doi = this.doi;\n target.githubUrl = this.githubUrl;\n target.previewURL = this.previewURL;\n if (this.publishedDate) {\n target.volume = this.volume;\n target.issue = this.issue;\n target.publishedDateRFC = this.publishedDateRFC;\n target.publishedYear = this.publishedYear;\n target.publishedMonth = this.publishedMonth;\n target.publishedDay = this.publishedDay;\n target.publishedMonthPadded = this.publishedMonthPadded;\n target.publishedDayPadded = this.publishedDayPadded;\n }\n if (this.updatedDate) {\n target.updatedDateRFC = this.updatedDateRFC;\n }\n target.concatenatedAuthors = this.concatenatedAuthors;\n target.bibtexAuthors = this.bibtexAuthors;\n target.slug = this.slug;\n }\n\n }\n\n // Copyright 2018 The Distill Template Authors\n //\n // Licensed under the Apache License, Version 2.0 (the \"License\");\n // you may not use this file except in compliance with the License.\n // You may obtain a copy of the License at\n //\n // http://www.apache.org/licenses/LICENSE-2.0\n //\n // Unless required by applicable law or agreed to in writing, software\n // distributed under the License is distributed on an \"AS IS\" BASIS,\n // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n // See the License for the specific language governing permissions and\n // limitations under the License.\n\n const Mutating = (superclass) => {\n return class extends superclass {\n\n constructor() {\n super();\n\n // set up mutation observer\n const options = {childList: true, characterData: true, subtree: true};\n const observer = new MutationObserver( () => {\n observer.disconnect();\n this.renderIfPossible();\n observer.observe(this, options);\n });\n\n // ...and listen for changes\n observer.observe(this, options);\n }\n\n connectedCallback() {\n super.connectedCallback();\n\n this.renderIfPossible();\n }\n\n // potential TODO: check if this is enough for all our usecases\n // maybe provide a custom function to tell if we have enough information to render\n renderIfPossible() {\n if (this.textContent && this.root) {\n this.renderContent();\n }\n }\n\n renderContent() {\n console.error(`Your class ${this.constructor.name} must provide a custom renderContent() method!` );\n }\n\n }; // end class\n }; // end mixin function\n\n // Copyright 2018 The Distill Template Authors\n //\n // Licensed under the Apache License, Version 2.0 (the \"License\");\n // you may not use this file except in compliance with the License.\n // You may obtain a copy of the License at\n //\n // http://www.apache.org/licenses/LICENSE-2.0\n //\n // Unless required by applicable law or agreed to in writing, software\n // distributed under the License is distributed on an \"AS IS\" BASIS,\n // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n // See the License for the specific language governing permissions and\n // limitations under the License.\n\n /*global ShadyCSS*/\n\n const Template = (name, templateString, useShadow = true) => {\n\n return (superclass) => {\n\n const template = document.createElement('template');\n template.innerHTML = templateString;\n\n if (useShadow && 'ShadyCSS' in window) {\n ShadyCSS.prepareTemplate(template, name);\n }\n\n return class extends superclass {\n\n static get is() { return name; }\n\n constructor() {\n super();\n\n this.clone = document.importNode(template.content, true);\n if (useShadow) {\n this.attachShadow({mode: 'open'});\n this.shadowRoot.appendChild(this.clone);\n }\n }\n\n connectedCallback() {\n if (this.hasAttribute('distill-prerendered')) {\n return;\n }\n if (useShadow) {\n if ('ShadyCSS' in window) {\n ShadyCSS.styleElement(this);\n }\n } else {\n this.insertBefore(this.clone, this.firstChild);\n }\n }\n\n get root() {\n if (useShadow) {\n return this.shadowRoot;\n } else {\n return this;\n }\n }\n\n /* TODO: Are we using these? Should we even? */\n $(query) {\n return this.root.querySelector(query);\n }\n\n $$(query) {\n return this.root.querySelectorAll(query);\n }\n };\n };\n };\n\n var math = \"/*\\n * Copyright 2018 The Distill Template Authors\\n *\\n * Licensed under the Apache License, Version 2.0 (the \\\"License\\\");\\n * you may not use this file except in compliance with the License.\\n * You may obtain a copy of the License at\\n *\\n * http://www.apache.org/licenses/LICENSE-2.0\\n *\\n * Unless required by applicable law or agreed to in writing, software\\n * distributed under the License is distributed on an \\\"AS IS\\\" BASIS,\\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\n * See the License for the specific language governing permissions and\\n * limitations under the License.\\n */\\n\\nspan.katex-display {\\n text-align: left;\\n padding: 8px 0 8px 0;\\n margin: 0.5em 0 0.5em 1em;\\n}\\n\\nspan.katex {\\n -webkit-font-smoothing: antialiased;\\n color: rgba(0, 0, 0, 0.8);\\n font-size: 1.18em;\\n}\\n\";\n\n // Copyright 2018 The Distill Template Authors\n //\n // Licensed under the Apache License, Version 2.0 (the \"License\");\n // you may not use this file except in compliance with the License.\n // You may obtain a copy of the License at\n //\n // http://www.apache.org/licenses/LICENSE-2.0\n //\n // Unless required by applicable law or agreed to in writing, software\n // distributed under the License is distributed on an \"AS IS\" BASIS,\n // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n // See the License for the specific language governing permissions and\n // limitations under the License.\n\n // This is a straight concatenation of code from KaTeX's contrib folder,\n // but we aren't using some of their helpers that don't work well outside a browser environment.\n\n /*global katex */\n\n const findEndOfMath = function(delimiter, text, startIndex) {\n // Adapted from\n // https://github.com/Khan/perseus/blob/master/src/perseus-markdown.jsx\n let index = startIndex;\n let braceLevel = 0;\n\n const delimLength = delimiter.length;\n\n while (index < text.length) {\n const character = text[index];\n\n if (\n braceLevel <= 0 &&\n text.slice(index, index + delimLength) === delimiter\n ) {\n return index;\n } else if (character === \"\\\\\") {\n index++;\n } else if (character === \"{\") {\n braceLevel++;\n } else if (character === \"}\") {\n braceLevel--;\n }\n\n index++;\n }\n\n return -1;\n };\n\n const splitAtDelimiters = function(startData, leftDelim, rightDelim, display) {\n const finalData = [];\n\n for (let i = 0; i < startData.length; i++) {\n if (startData[i].type === \"text\") {\n const text = startData[i].data;\n\n let lookingForLeft = true;\n let currIndex = 0;\n let nextIndex;\n\n nextIndex = text.indexOf(leftDelim);\n if (nextIndex !== -1) {\n currIndex = nextIndex;\n finalData.push({\n type: \"text\",\n data: text.slice(0, currIndex)\n });\n lookingForLeft = false;\n }\n\n while (true) {\n // eslint-disable-line no-constant-condition\n if (lookingForLeft) {\n nextIndex = text.indexOf(leftDelim, currIndex);\n if (nextIndex === -1) {\n break;\n }\n\n finalData.push({\n type: \"text\",\n data: text.slice(currIndex, nextIndex)\n });\n\n currIndex = nextIndex;\n } else {\n nextIndex = findEndOfMath(\n rightDelim,\n text,\n currIndex + leftDelim.length\n );\n if (nextIndex === -1) {\n break;\n }\n\n finalData.push({\n type: \"math\",\n data: text.slice(currIndex + leftDelim.length, nextIndex),\n rawData: text.slice(currIndex, nextIndex + rightDelim.length),\n display: display\n });\n\n currIndex = nextIndex + rightDelim.length;\n }\n\n lookingForLeft = !lookingForLeft;\n }\n\n finalData.push({\n type: \"text\",\n data: text.slice(currIndex)\n });\n } else {\n finalData.push(startData[i]);\n }\n }\n\n return finalData;\n };\n\n const splitWithDelimiters = function(text, delimiters) {\n let data = [{ type: \"text\", data: text }];\n for (let i = 0; i < delimiters.length; i++) {\n const delimiter = delimiters[i];\n data = splitAtDelimiters(\n data,\n delimiter.left,\n delimiter.right,\n delimiter.display || false\n );\n }\n return data;\n };\n\n /* Note: optionsCopy is mutated by this method. If it is ever exposed in the\n * API, we should copy it before mutating.\n */\n const renderMathInText = function(text, optionsCopy) {\n const data = splitWithDelimiters(text, optionsCopy.delimiters);\n const fragment = document.createDocumentFragment();\n\n for (let i = 0; i < data.length; i++) {\n if (data[i].type === \"text\") {\n fragment.appendChild(document.createTextNode(data[i].data));\n } else {\n const tag = document.createElement(\"d-math\");\n const math = data[i].data;\n // Override any display mode defined in the settings with that\n // defined by the text itself\n optionsCopy.displayMode = data[i].display;\n try {\n tag.textContent = math;\n if (optionsCopy.displayMode) {\n tag.setAttribute(\"block\", \"\");\n }\n } catch (e) {\n if (!(e instanceof katex.ParseError)) {\n throw e;\n }\n optionsCopy.errorCallback(\n \"KaTeX auto-render: Failed to parse `\" + data[i].data + \"` with \",\n e\n );\n fragment.appendChild(document.createTextNode(data[i].rawData));\n continue;\n }\n fragment.appendChild(tag);\n }\n }\n\n return fragment;\n };\n\n const renderElem = function(elem, optionsCopy) {\n for (let i = 0; i < elem.childNodes.length; i++) {\n const childNode = elem.childNodes[i];\n if (childNode.nodeType === 3) {\n // Text node\n const text = childNode.textContent;\n if (optionsCopy.mightHaveMath(text)) {\n const frag = renderMathInText(text, optionsCopy);\n i += frag.childNodes.length - 1;\n elem.replaceChild(frag, childNode);\n }\n } else if (childNode.nodeType === 1) {\n // Element node\n const shouldRender =\n optionsCopy.ignoredTags.indexOf(childNode.nodeName.toLowerCase()) ===\n -1;\n\n if (shouldRender) {\n renderElem(childNode, optionsCopy);\n }\n }\n // Otherwise, it's something else, and ignore it.\n }\n };\n\n const defaultAutoRenderOptions = {\n delimiters: [\n { left: \"$$\", right: \"$$\", display: true },\n { left: \"\\\\[\", right: \"\\\\]\", display: true },\n { left: \"\\\\(\", right: \"\\\\)\", display: false }\n // LaTeX uses this, but it ruins the display of normal `$` in text:\n // {left: '$', right: '$', display: false},\n ],\n\n ignoredTags: [\n \"script\",\n \"noscript\",\n \"style\",\n \"textarea\",\n \"pre\",\n \"code\",\n \"svg\"\n ],\n\n errorCallback: function(msg, err) {\n console.error(msg, err);\n }\n };\n\n const renderMathInElement = function(elem, options) {\n if (!elem) {\n throw new Error(\"No element provided to render\");\n }\n\n const optionsCopy = Object.assign({}, defaultAutoRenderOptions, options);\n const delimiterStrings = optionsCopy.delimiters.flatMap(d => [\n d.left,\n d.right\n ]);\n const mightHaveMath = text =>\n delimiterStrings.some(d => text.indexOf(d) !== -1);\n optionsCopy.mightHaveMath = mightHaveMath;\n renderElem(elem, optionsCopy);\n };\n\n // Copyright 2018 The Distill Template Authors\n\n const katexJSURL = 'https://distill.pub/third-party/katex/katex.min.js';\n const katexCSSTag = '<link rel=\"stylesheet\" href=\"https://distill.pub/third-party/katex/katex.min.css\" crossorigin=\"anonymous\">';\n\n const T = Template('d-math', `\n${katexCSSTag}\n<style>\n\n:host {\n display: inline-block;\n contain: style;\n}\n\n:host([block]) {\n display: block;\n}\n\n${math}\n</style>\n<span id='katex-container'></span>\n`);\n\n // DMath, not Math, because that would conflict with the JS built-in\n class DMath extends Mutating(T(HTMLElement)) {\n\n static set katexOptions(options) {\n DMath._katexOptions = options;\n if (DMath.katexOptions.delimiters) {\n if (!DMath.katexAdded) {\n DMath.addKatex();\n } else {\n DMath.katexLoadedCallback();\n }\n }\n }\n\n static get katexOptions() {\n if (!DMath._katexOptions) {\n DMath._katexOptions = {\n delimiters: [ { 'left':'$$', 'right':'$$', 'display': false } ]\n };\n }\n return DMath._katexOptions;\n }\n\n static katexLoadedCallback() {\n // render all d-math tags\n const mathTags = document.querySelectorAll('d-math');\n for (const mathTag of mathTags) {\n mathTag.renderContent();\n }\n // transform inline delimited math to d-math tags\n if (DMath.katexOptions.delimiters) {\n renderMathInElement(document.body, DMath.katexOptions);\n }\n }\n\n static addKatex() {\n // css tag can use this convenience function\n document.head.insertAdjacentHTML('beforeend', katexCSSTag);\n // script tag has to be created to work properly\n const scriptTag = document.createElement('script');\n scriptTag.src = katexJSURL;\n scriptTag.async = true;\n scriptTag.onload = DMath.katexLoadedCallback;\n scriptTag.crossorigin = 'anonymous';\n document.head.appendChild(scriptTag);\n\n DMath.katexAdded = true;\n }\n\n get options() {\n const localOptions = { displayMode: this.hasAttribute('block') };\n return Object.assign(localOptions, DMath.katexOptions);\n }\n\n connectedCallback() {\n super.connectedCallback();\n if (!DMath.katexAdded) {\n DMath.addKatex();\n }\n }\n\n renderContent() {\n if (typeof katex !== 'undefined') {\n const container = this.root.querySelector('#katex-container');\n katex.render(this.textContent, container, this.options);\n }\n }\n\n }\n\n DMath.katexAdded = false;\n DMath.inlineMathRendered = false;\n window.DMath = DMath; // TODO: check if this can be removed, or if we should expose a distill global\n\n // Copyright 2018 The Distill Template Authors\n //\n // Licensed under the Apache License, Version 2.0 (the \"License\");\n // you may not use this file except in compliance with the License.\n // You may obtain a copy of the License at\n //\n // http://www.apache.org/licenses/LICENSE-2.0\n //\n // Unless required by applicable law or agreed to in writing, software\n // distributed under the License is distributed on an \"AS IS\" BASIS,\n // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n // See the License for the specific language governing permissions and\n // limitations under the License.\n\n function collect_citations(dom = document) {\n const citations = new Set();\n const citeTags = dom.querySelectorAll(\"d-cite\");\n for (const tag of citeTags) {\n const keyString = tag.getAttribute(\"key\") || tag.getAttribute(\"bibtex-key\");\n const keys = keyString.split(\",\").map(k => k.trim());\n for (const key of keys) {\n citations.add(key);\n }\n }\n return [...citations];\n }\n\n function author_string(ent, template, sep, finalSep) {\n if (ent.author == null) {\n return \"\";\n }\n var names = ent.author.split(\" and \");\n let name_strings = names.map(name => {\n name = name.trim();\n if (name.indexOf(\",\") != -1) {\n var last = name.split(\",\")[0].trim();\n var firsts = name.split(\",\")[1];\n } else if (name.indexOf(\" \") != -1) {\n var last = name\n .split(\" \")\n .slice(-1)[0]\n .trim();\n var firsts = name\n .split(\" \")\n .slice(0, -1)\n .join(\" \");\n } else {\n var last = name.trim();\n }\n var initials = \"\";\n if (firsts != undefined) {\n initials = firsts\n .trim()\n .split(\" \")\n .map(s => s.trim()[0]);\n initials = initials.join(\".\") + \".\";\n }\n return template\n .replace(\"${F}\", firsts)\n .replace(\"${L}\", last)\n .replace(\"${I}\", initials)\n .trim(); // in case one of first or last was empty\n });\n if (names.length > 1) {\n var str = name_strings.slice(0, names.length - 1).join(sep);\n str += (finalSep || sep) + name_strings[names.length - 1];\n return str;\n } else {\n return name_strings[0];\n }\n }\n\n function venue_string(ent) {\n var cite = ent.journal || ent.booktitle || \"\";\n if (\"volume\" in ent) {\n var issue = ent.issue || ent.number;\n issue = issue != undefined ? \"(\" + issue + \")\" : \"\";\n cite += \", Vol \" + ent.volume + issue;\n }\n if (\"pages\" in ent) {\n cite += \", pp. \" + ent.pages;\n }\n if (cite != \"\") cite += \". \";\n if (\"publisher\" in ent) {\n cite += ent.publisher;\n if (cite[cite.length - 1] != \".\") cite += \".\";\n }\n return cite;\n }\n\n function link_string(ent) {\n if (\"url\" in ent) {\n var url = ent.url;\n var arxiv_match = /arxiv\\.org\\/abs\\/([0-9\\.]*)/.exec(url);\n if (arxiv_match != null) {\n url = `http://arxiv.org/pdf/${arxiv_match[1]}.pdf`;\n }\n\n if (url.slice(-4) == \".pdf\") {\n var label = \"PDF\";\n } else if (url.slice(-5) == \".html\") {\n var label = \"HTML\";\n }\n return `  <a href=\"${url}\">[${label || \"link\"}]</a>`;\n } /* else if (\"doi\" in ent){\n return `  <a href=\"https://doi.org/${ent.doi}\" >[DOI]</a>`;\n }*/ else {\n return \"\";\n }\n }\n function doi_string(ent, new_line) {\n if (\"doi\" in ent) {\n return `${new_line ? \"<br>\" : \"\"} <a href=\"https://doi.org/${\n ent.doi\n }\" style=\"text-decoration:inherit;\">DOI: ${ent.doi}</a>`;\n } else {\n return \"\";\n }\n }\n\n function title_string(ent) {\n return '<span class=\"title\">' + ent.title + \"</span> \";\n }\n\n function bibliography_cite(ent, fancy) {\n if (ent) {\n var cite = title_string(ent);\n cite += link_string(ent) + \"<br>\";\n if (ent.author) {\n cite += author_string(ent, \"${L}, ${I}\", \", \", \" and \");\n if (ent.year || ent.date) {\n cite += \", \";\n }\n }\n if (ent.year || ent.date) {\n cite += (ent.year || ent.date) + \". \";\n } else {\n cite += \". \";\n }\n cite += venue_string(ent);\n cite += doi_string(ent);\n return cite;\n /*var cite = author_string(ent, \"${L}, ${I}\", \", \", \" and \");\n if (ent.year || ent.date){\n cite += \", \" + (ent.year || ent.date) + \". \"\n } else {\n cite += \". \"\n }\n cite += \"<b>\" + ent.title + \"</b>. \";\n cite += venue_string(ent);\n cite += doi_string(ent);\n cite += link_string(ent);\n return cite*/\n } else {\n return \"?\";\n }\n }\n\n function hover_cite(ent) {\n if (ent) {\n var cite = \"\";\n cite += \"<strong>\" + ent.title + \"</strong>\";\n cite += link_string(ent);\n cite += \"<br>\";\n\n var a_str = author_string(ent, \"${I} ${L}\", \", \") + \".\";\n var v_str =\n venue_string(ent).trim() + \" \" + ent.year + \". \" + doi_string(ent, true);\n\n if ((a_str + v_str).length < Math.min(40, ent.title.length)) {\n cite += a_str + \" \" + v_str;\n } else {\n cite += a_str + \"<br>\" + v_str;\n }\n return cite;\n } else {\n return \"?\";\n }\n }\n\n function domContentLoaded() {\n return ['interactive', 'complete'].indexOf(document.readyState) !== -1;\n }\n\n // Copyright 2018 The Distill Template Authors\n //\n // Licensed under the Apache License, Version 2.0 (the \"License\");\n // you may not use this file except in compliance with the License.\n // You may obtain a copy of the License at\n //\n // http://www.apache.org/licenses/LICENSE-2.0\n //\n // Unless required by applicable law or agreed to in writing, software\n // distributed under the License is distributed on an \"AS IS\" BASIS,\n // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n // See the License for the specific language governing permissions and\n // limitations under the License.\n\n function _moveLegacyAffiliationFormatIntoArray(frontMatter) {\n // authors used to have propoerties \"affiliation\" and \"affiliationURL\".\n // We now encourage using an array for affiliations containing objects with\n // properties \"name\" and \"url\".\n for (let author of frontMatter.authors) {\n const hasOldStyle = Boolean(author.affiliation);\n const hasNewStyle = Boolean(author.affiliations);\n if (!hasOldStyle) continue;\n if (hasNewStyle) {\n console.warn(`Author ${author.author} has both old-style (\"affiliation\" & \"affiliationURL\") and new style (\"affiliations\") affiliation information!`);\n } else {\n let newAffiliation = {\n \"name\": author.affiliation\n };\n if (author.affiliationURL) newAffiliation.url = author.affiliationURL;\n author.affiliations = [newAffiliation];\n }\n }\n return frontMatter\n }\n\n function parseFrontmatter(element) {\n const scriptTag = element.firstElementChild;\n if (scriptTag) {\n const type = scriptTag.getAttribute('type');\n if (type.split('/')[1] == 'json') {\n const content = scriptTag.textContent;\n const parsed = JSON.parse(content);\n return _moveLegacyAffiliationFormatIntoArray(parsed);\n } else {\n console.error('Distill only supports JSON frontmatter tags anymore; no more YAML.');\n }\n } else {\n console.error('You added a frontmatter tag but did not provide a script tag with front matter data in it. Please take a look at our templates.');\n }\n return {};\n }\n\n class FrontMatter$1 extends HTMLElement {\n\n static get is() { return 'd-front-matter'; }\n\n constructor() {\n super();\n\n const options = {childList: true, characterData: true, subtree: true};\n const observer = new MutationObserver( (entries) => {\n for (const entry of entries) {\n if (entry.target.nodeName === 'SCRIPT' || entry.type === 'characterData') {\n const data = parseFrontmatter(this);\n this.notify(data);\n }\n }\n });\n observer.observe(this, options);\n }\n\n notify(data) {\n const options = { detail: data, bubbles: true };\n const event = new CustomEvent('onFrontMatterChanged', options);\n document.dispatchEvent(event);\n }\n\n }\n\n // Copyright 2018 The Distill Template Authors\n //\n // Licensed under the Apache License, Version 2.0 (the \"License\");\n // you may not use this file except in compliance with the License.\n // You may obtain a copy of the License at\n //\n // http://www.apache.org/licenses/LICENSE-2.0\n //\n // Unless required by applicable law or agreed to in writing, software\n // distributed under the License is distributed on an \"AS IS\" BASIS,\n // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n // See the License for the specific language governing permissions and\n // limitations under the License.\n\n // no appendix -> add appendix\n // title in front, no h1 -> add it\n // no title in front, h1 -> read and put into frontMatter\n // footnote -> footnote list\n // break up bib\n // if citation, no bib-list -> add citation-list\n\n // if authors, no byline -> add byline\n\n function optionalComponents(dom, data) {\n const body = dom.body;\n const article = body.querySelector('d-article');\n\n // If we don't have an article tag, something weird is going on—giving up.\n if (!article) {\n console.warn('No d-article tag found; skipping adding optional components!');\n return;\n }\n\n let byline = dom.querySelector('d-byline');\n if (!byline) {\n if (data.authors) {\n byline = dom.createElement('d-byline');\n body.insertBefore(byline, article);\n } else {\n console.warn('No authors found in front matter; please add them before submission!');\n }\n }\n\n let title = dom.querySelector('d-title');\n if (!title) {\n title = dom.createElement('d-title');\n body.insertBefore(title, byline);\n }\n\n let h1 = title.querySelector('h1');\n if (!h1) {\n h1 = dom.createElement('h1');\n h1.textContent = data.title;\n title.insertBefore(h1, title.firstChild);\n }\n\n const hasPassword = typeof data.password !== 'undefined';\n let interstitial = body.querySelector('d-interstitial');\n if (hasPassword && !interstitial) {\n const inBrowser = typeof window !== 'undefined';\n const onLocalhost = inBrowser && window.location.hostname.includes('localhost');\n if (!inBrowser || !onLocalhost) {\n interstitial = dom.createElement('d-interstitial');\n interstitial.password = data.password;\n body.insertBefore(interstitial, body.firstChild);\n }\n } else if (!hasPassword && interstitial) {\n interstitial.parentElement.removeChild(this);\n }\n\n let appendix = dom.querySelector('d-appendix');\n if (!appendix) {\n appendix = dom.createElement('d-appendix');\n dom.body.appendChild(appendix);\n }\n\n let footnoteList = dom.querySelector('d-footnote-list');\n if (!footnoteList) {\n footnoteList = dom.createElement('d-footnote-list');\n appendix.appendChild(footnoteList);\n }\n\n let citationList = dom.querySelector('d-citation-list');\n if (!citationList) {\n citationList = dom.createElement('d-citation-list');\n appendix.appendChild(citationList);\n }\n\n }\n\n // Copyright 2018 The Distill Template Authors\n\n const frontMatter = new FrontMatter();\n\n const Controller = {\n frontMatter: frontMatter,\n waitingOn: {\n bibliography: [],\n citations: []\n },\n listeners: {\n onCiteKeyCreated(event) {\n const [citeTag, keys] = event.detail;\n\n // ensure we have citations\n if (!frontMatter.citationsCollected) {\n // console.debug('onCiteKeyCreated, but unresolved dependency (\"citations\"). Enqueing.');\n Controller.waitingOn.citations.push(() =>\n Controller.listeners.onCiteKeyCreated(event)\n );\n return;\n }\n\n // ensure we have a loaded bibliography\n if (!frontMatter.bibliographyParsed) {\n // console.debug('onCiteKeyCreated, but unresolved dependency (\"bibliography\"). Enqueing.');\n Controller.waitingOn.bibliography.push(() =>\n Controller.listeners.onCiteKeyCreated(event)\n );\n return;\n }\n\n const numbers = keys.map(key => frontMatter.citations.indexOf(key));\n citeTag.numbers = numbers;\n const entries = keys.map(key => frontMatter.bibliography.get(key));\n citeTag.entries = entries;\n },\n\n onCiteKeyChanged() {\n // const [citeTag, keys] = event.detail;\n\n // update citations\n frontMatter.citations = collect_citations();\n frontMatter.citationsCollected = true;\n for (const waitingCallback of Controller.waitingOn.citations.slice()) {\n waitingCallback();\n }\n\n // update bibliography\n const citationListTag = document.querySelector(\"d-citation-list\");\n const bibliographyEntries = new Map(\n frontMatter.citations.map(citationKey => {\n return [citationKey, frontMatter.bibliography.get(citationKey)];\n })\n );\n citationListTag.citations = bibliographyEntries;\n\n const citeTags = document.querySelectorAll(\"d-cite\");\n for (const citeTag of citeTags) {\n console.log(citeTag);\n const keys = citeTag.keys;\n const numbers = keys.map(key => frontMatter.citations.indexOf(key));\n citeTag.numbers = numbers;\n const entries = keys.map(key => frontMatter.bibliography.get(key));\n citeTag.entries = entries;\n }\n },\n\n onCiteKeyRemoved(event) {\n Controller.listeners.onCiteKeyChanged(event);\n },\n\n onBibliographyChanged(event) {\n const citationListTag = document.querySelector(\"d-citation-list\");\n\n const bibliography = event.detail;\n\n frontMatter.bibliography = bibliography;\n frontMatter.bibliographyParsed = true;\n for (const waitingCallback of Controller.waitingOn.bibliography.slice()) {\n waitingCallback();\n }\n\n // ensure we have citations\n if (!frontMatter.citationsCollected) {\n Controller.waitingOn.citations.push(function() {\n Controller.listeners.onBibliographyChanged({\n target: event.target,\n detail: event.detail\n });\n });\n return;\n }\n\n if (citationListTag.hasAttribute(\"distill-prerendered\")) {\n console.debug(\"Citation list was prerendered; not updating it.\");\n } else {\n const entries = new Map(\n frontMatter.citations.map(citationKey => {\n return [citationKey, frontMatter.bibliography.get(citationKey)];\n })\n );\n citationListTag.citations = entries;\n }\n },\n\n onFootnoteChanged() {\n // const footnote = event.detail;\n //TODO: optimize to only update current footnote\n const footnotesList = document.querySelector(\"d-footnote-list\");\n if (footnotesList) {\n const footnotes = document.querySelectorAll(\"d-footnote\");\n footnotesList.footnotes = footnotes;\n }\n },\n\n onFrontMatterChanged(event) {\n const data = event.detail;\n mergeFromYMLFrontmatter(frontMatter, data);\n\n const interstitial = document.querySelector(\"d-interstitial\");\n if (interstitial) {\n if (typeof frontMatter.password !== \"undefined\") {\n interstitial.password = frontMatter.password;\n } else {\n interstitial.parentElement.removeChild(interstitial);\n }\n }\n\n const prerendered = document.body.hasAttribute(\"distill-prerendered\");\n if (!prerendered && domContentLoaded()) {\n optionalComponents(document, frontMatter);\n\n const appendix = document.querySelector(\"distill-appendix\");\n if (appendix) {\n appendix.frontMatter = frontMatter;\n }\n\n const byline = document.querySelector(\"d-byline\");\n if (byline) {\n byline.frontMatter = frontMatter;\n }\n\n if (data.katex) {\n DMath.katexOptions = data.katex;\n }\n }\n },\n\n DOMContentLoaded() {\n if (Controller.loaded) {\n console.warn(\n \"Controller received DOMContentLoaded but was already loaded!\"\n );\n return;\n } else if (!domContentLoaded()) {\n console.warn(\n \"Controller received DOMContentLoaded at document.readyState: \" +\n document.readyState +\n \"!\"\n );\n return;\n } else {\n Controller.loaded = true;\n console.debug(\"Runlevel 4: Controller running DOMContentLoaded\");\n }\n\n const frontMatterTag = document.querySelector(\"d-front-matter\");\n if (frontMatterTag) {\n const data = parseFrontmatter(frontMatterTag);\n Controller.listeners.onFrontMatterChanged({ detail: data });\n }\n\n // Resolving \"citations\" dependency due to initial DOM load\n frontMatter.citations = collect_citations();\n frontMatter.citationsCollected = true;\n for (const waitingCallback of Controller.waitingOn.citations.slice()) {\n waitingCallback();\n }\n\n if (frontMatter.bibliographyParsed) {\n for (const waitingCallback of Controller.waitingOn.bibliography.slice()) {\n waitingCallback();\n }\n }\n\n const footnotesList = document.querySelector(\"d-footnote-list\");\n if (footnotesList) {\n const footnotes = document.querySelectorAll(\"d-footnote\");\n footnotesList.footnotes = footnotes;\n }\n }\n } // listeners\n }; // Controller\n\n var base = \"/*\\n * Copyright 2018 The Distill Template Authors\\n *\\n * Licensed under the Apache License, Version 2.0 (the \\\"License\\\");\\n * you may not use this file except in compliance with the License.\\n * You may obtain a copy of the License at\\n *\\n * http://www.apache.org/licenses/LICENSE-2.0\\n *\\n * Unless required by applicable law or agreed to in writing, software\\n * distributed under the License is distributed on an \\\"AS IS\\\" BASIS,\\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\n * See the License for the specific language governing permissions and\\n * limitations under the License.\\n */\\n\\nhtml {\\n font-size: 14px;\\n\\tline-height: 1.6em;\\n /* font-family: \\\"Libre Franklin\\\", \\\"Helvetica Neue\\\", sans-serif; */\\n font-family: -apple-system, BlinkMacSystemFont, \\\"Segoe UI\\\", Roboto, Oxygen, Ubuntu, Cantarell, \\\"Fira Sans\\\", \\\"Droid Sans\\\", \\\"Helvetica Neue\\\", Arial, sans-serif;\\n /*, \\\"Apple Color Emoji\\\", \\\"Segoe UI Emoji\\\", \\\"Segoe UI Symbol\\\";*/\\n text-size-adjust: 100%;\\n -ms-text-size-adjust: 100%;\\n -webkit-text-size-adjust: 100%;\\n}\\n\\n@media(min-width: 768px) {\\n html {\\n font-size: 16px;\\n }\\n}\\n\\nbody {\\n margin: 0;\\n}\\n\\na {\\n color: #004276;\\n}\\n\\nfigure {\\n margin: 0;\\n}\\n\\ntable {\\n\\tborder-collapse: collapse;\\n\\tborder-spacing: 0;\\n}\\n\\ntable th {\\n\\ttext-align: left;\\n}\\n\\ntable thead {\\n border-bottom: 1px solid rgba(0, 0, 0, 0.05);\\n}\\n\\ntable thead th {\\n padding-bottom: 0.5em;\\n}\\n\\ntable tbody :first-child td {\\n padding-top: 0.5em;\\n}\\n\\npre {\\n overflow: auto;\\n max-width: 100%;\\n}\\n\\np {\\n margin-top: 0;\\n margin-bottom: 1em;\\n}\\n\\nsup, sub {\\n vertical-align: baseline;\\n position: relative;\\n top: -0.4em;\\n line-height: 1em;\\n}\\n\\nsub {\\n top: 0.4em;\\n}\\n\\n.kicker,\\n.marker {\\n font-size: 15px;\\n font-weight: 600;\\n color: rgba(0, 0, 0, 0.5);\\n}\\n\\n\\n/* Headline */\\n\\n@media(min-width: 1024px) {\\n d-title h1 span {\\n display: block;\\n }\\n}\\n\\n/* Figure */\\n\\nfigure {\\n position: relative;\\n margin-bottom: 2.5em;\\n margin-top: 1.5em;\\n}\\n\\nfigcaption+figure {\\n\\n}\\n\\nfigure img {\\n width: 100%;\\n}\\n\\nfigure svg text,\\nfigure svg tspan {\\n}\\n\\nfigcaption,\\n.figcaption {\\n color: rgba(0, 0, 0, 0.6);\\n font-size: 12px;\\n line-height: 1.5em;\\n}\\n\\n@media(min-width: 1024px) {\\nfigcaption,\\n.figcaption {\\n font-size: 13px;\\n }\\n}\\n\\nfigure.external img {\\n background: white;\\n border: 1px solid rgba(0, 0, 0, 0.1);\\n box-shadow: 0 1px 8px rgba(0, 0, 0, 0.1);\\n padding: 18px;\\n box-sizing: border-box;\\n}\\n\\nfigcaption a {\\n color: rgba(0, 0, 0, 0.6);\\n}\\n\\nfigcaption b,\\nfigcaption strong, {\\n font-weight: 600;\\n color: rgba(0, 0, 0, 1.0);\\n}\\n\";\n\n var layout = \"/*\\n * Copyright 2018 The Distill Template Authors\\n *\\n * Licensed under the Apache License, Version 2.0 (the \\\"License\\\");\\n * you may not use this file except in compliance with the License.\\n * You may obtain a copy of the License at\\n *\\n * http://www.apache.org/licenses/LICENSE-2.0\\n *\\n * Unless required by applicable law or agreed to in writing, software\\n * distributed under the License is distributed on an \\\"AS IS\\\" BASIS,\\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\n * See the License for the specific language governing permissions and\\n * limitations under the License.\\n */\\n\\n@supports not (display: grid) {\\n .base-grid,\\n distill-header,\\n d-title,\\n d-abstract,\\n d-article,\\n d-appendix,\\n distill-appendix,\\n d-byline,\\n d-footnote-list,\\n d-citation-list,\\n distill-footer {\\n display: block;\\n padding: 8px;\\n }\\n}\\n\\n.base-grid,\\ndistill-header,\\nd-title,\\nd-abstract,\\nd-article,\\nd-appendix,\\ndistill-appendix,\\nd-byline,\\nd-footnote-list,\\nd-citation-list,\\ndistill-footer {\\n display: grid;\\n justify-items: stretch;\\n grid-template-columns: [screen-start] 8px [page-start kicker-start text-start gutter-start middle-start] 1fr 1fr 1fr 1fr 1fr 1fr 1fr 1fr [text-end page-end gutter-end kicker-end middle-end] 8px [screen-end];\\n grid-column-gap: 8px;\\n}\\n\\n.grid {\\n display: grid;\\n grid-column-gap: 8px;\\n}\\n\\n@media(min-width: 768px) {\\n .base-grid,\\n distill-header,\\n d-title,\\n d-abstract,\\n d-article,\\n d-appendix,\\n distill-appendix,\\n d-byline,\\n d-footnote-list,\\n d-citation-list,\\n distill-footer {\\n grid-template-columns: [screen-start] 1fr [page-start kicker-start middle-start text-start] 45px 45px 45px 45px 45px 45px 45px 45px [ kicker-end text-end gutter-start] 45px [middle-end] 45px [page-end gutter-end] 1fr [screen-end];\\n grid-column-gap: 16px;\\n }\\n\\n .grid {\\n grid-column-gap: 16px;\\n }\\n}\\n\\n@media(min-width: 1000px) {\\n .base-grid,\\n distill-header,\\n d-title,\\n d-abstract,\\n d-article,\\n d-appendix,\\n distill-appendix,\\n d-byline,\\n d-footnote-list,\\n d-citation-list,\\n distill-footer {\\n grid-template-columns: [screen-start] 1fr [page-start kicker-start] 50px [middle-start] 50px [text-start kicker-end] 50px 50px 50px 50px 50px 50px 50px 50px [text-end gutter-start] 50px [middle-end] 50px [page-end gutter-end] 1fr [screen-end];\\n grid-column-gap: 16px;\\n }\\n\\n .grid {\\n grid-column-gap: 16px;\\n }\\n}\\n\\n@media(min-width: 1180px) {\\n .base-grid,\\n distill-header,\\n d-title,\\n d-abstract,\\n d-article,\\n d-appendix,\\n distill-appendix,\\n d-byline,\\n d-footnote-list,\\n d-citation-list,\\n distill-footer {\\n grid-template-columns: [screen-start] 1fr [page-start kicker-start] 60px [middle-start] 60px [text-start kicker-end] 60px 60px 60px 60px 60px 60px 60px 60px [text-end gutter-start] 60px [middle-end] 60px [page-end gutter-end] 1fr [screen-end];\\n grid-column-gap: 32px;\\n }\\n\\n .grid {\\n grid-column-gap: 32px;\\n }\\n}\\n\\n\\n\\n\\n.base-grid {\\n grid-column: screen;\\n}\\n\\n/* .l-body,\\nd-article > * {\\n grid-column: text;\\n}\\n\\n.l-page,\\nd-title > *,\\nd-figure {\\n grid-column: page;\\n} */\\n\\n.l-gutter {\\n grid-column: gutter;\\n}\\n\\n.l-text,\\n.l-body {\\n grid-column: text;\\n}\\n\\n.l-page {\\n grid-column: page;\\n}\\n\\n.l-body-outset {\\n grid-column: middle;\\n}\\n\\n.l-page-outset {\\n grid-column: page;\\n}\\n\\n.l-screen {\\n grid-column: screen;\\n}\\n\\n.l-screen-inset {\\n grid-column: screen;\\n padding-left: 16px;\\n padding-left: 16px;\\n}\\n\\n\\n/* Aside */\\n\\nd-article aside {\\n grid-column: gutter;\\n font-size: 12px;\\n line-height: 1.6em;\\n color: rgba(0, 0, 0, 0.6)\\n}\\n\\n@media(min-width: 768px) {\\n aside {\\n grid-column: gutter;\\n }\\n\\n .side {\\n grid-column: gutter;\\n }\\n}\\n\";\n\n var print = \"/*\\n * Copyright 2018 The Distill Template Authors\\n *\\n * Licensed under the Apache License, Version 2.0 (the \\\"License\\\");\\n * you may not use this file except in compliance with the License.\\n * You may obtain a copy of the License at\\n *\\n * http://www.apache.org/licenses/LICENSE-2.0\\n *\\n * Unless required by applicable law or agreed to in writing, software\\n * distributed under the License is distributed on an \\\"AS IS\\\" BASIS,\\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\n * See the License for the specific language governing permissions and\\n * limitations under the License.\\n */\\n\\n@media print {\\n\\n @page {\\n size: 8in 11in;\\n @bottom-right {\\n content: counter(page) \\\" of \\\" counter(pages);\\n }\\n }\\n\\n html {\\n /* no general margins -- CSS Grid takes care of those */\\n }\\n\\n p, code {\\n page-break-inside: avoid;\\n }\\n\\n h2, h3 {\\n page-break-after: avoid;\\n }\\n\\n d-header {\\n visibility: hidden;\\n }\\n\\n d-footer {\\n display: none!important;\\n }\\n\\n}\\n\";\n\n var byline = \"/*\\n * Copyright 2018 The Distill Template Authors\\n *\\n * Licensed under the Apache License, Version 2.0 (the \\\"License\\\");\\n * you may not use this file except in compliance with the License.\\n * You may obtain a copy of the License at\\n *\\n * http://www.apache.org/licenses/LICENSE-2.0\\n *\\n * Unless required by applicable law or agreed to in writing, software\\n * distributed under the License is distributed on an \\\"AS IS\\\" BASIS,\\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\n * See the License for the specific language governing permissions and\\n * limitations under the License.\\n */\\n\\nd-byline {\\n contain: style;\\n overflow: hidden;\\n border-top: 1px solid rgba(0, 0, 0, 0.1);\\n font-size: 0.8rem;\\n line-height: 1.8em;\\n padding: 1.5rem 0;\\n min-height: 1.8em;\\n}\\n\\n\\nd-byline .byline {\\n grid-template-columns: 1fr 1fr;\\n grid-column: text;\\n}\\n\\n@media(min-width: 768px) {\\n d-byline .byline {\\n grid-template-columns: 1fr 1fr 1fr 1fr;\\n }\\n}\\n\\nd-byline .authors-affiliations {\\n grid-column-end: span 2;\\n grid-template-columns: 1fr 1fr;\\n margin-bottom: 1em;\\n}\\n\\n@media(min-width: 768px) {\\n d-byline .authors-affiliations {\\n margin-bottom: 0;\\n }\\n}\\n\\nd-byline h3 {\\n font-size: 0.6rem;\\n font-weight: 400;\\n color: rgba(0, 0, 0, 0.5);\\n margin: 0;\\n text-transform: uppercase;\\n}\\n\\nd-byline p {\\n margin: 0;\\n}\\n\\nd-byline a,\\nd-article d-byline a {\\n color: rgba(0, 0, 0, 0.8);\\n text-decoration: none;\\n border-bottom: none;\\n}\\n\\nd-article d-byline a:hover {\\n text-decoration: underline;\\n border-bottom: none;\\n}\\n\\nd-byline p.author {\\n font-weight: 500;\\n}\\n\\nd-byline .affiliations {\\n\\n}\\n\";\n\n var article = \"/*\\n * Copyright 2018 The Distill Template Authors\\n *\\n * Licensed under the Apache License, Version 2.0 (the \\\"License\\\");\\n * you may not use this file except in compliance with the License.\\n * You may obtain a copy of the License at\\n *\\n * http://www.apache.org/licenses/LICENSE-2.0\\n *\\n * Unless required by applicable law or agreed to in writing, software\\n * distributed under the License is distributed on an \\\"AS IS\\\" BASIS,\\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\n * See the License for the specific language governing permissions and\\n * limitations under the License.\\n */\\n\\nd-article {\\n contain: layout style;\\n overflow-x: hidden;\\n border-top: 1px solid rgba(0, 0, 0, 0.1);\\n padding-top: 2rem;\\n color: rgba(0, 0, 0, 0.8);\\n}\\n\\nd-article > * {\\n grid-column: text;\\n}\\n\\n@media(min-width: 768px) {\\n d-article {\\n font-size: 16px;\\n }\\n}\\n\\n@media(min-width: 1024px) {\\n d-article {\\n font-size: 1.06rem;\\n line-height: 1.7em;\\n }\\n}\\n\\n\\n/* H2 */\\n\\n\\nd-article .marker {\\n text-decoration: none;\\n border: none;\\n counter-reset: section;\\n grid-column: kicker;\\n line-height: 1.7em;\\n}\\n\\nd-article .marker:hover {\\n border: none;\\n}\\n\\nd-article .marker span {\\n padding: 0 3px 4px;\\n border-bottom: 1px solid rgba(0, 0, 0, 0.2);\\n position: relative;\\n top: 4px;\\n}\\n\\nd-article .marker:hover span {\\n color: rgba(0, 0, 0, 0.7);\\n border-bottom: 1px solid rgba(0, 0, 0, 0.7);\\n}\\n\\nd-article h2 {\\n font-weight: 600;\\n font-size: 24px;\\n line-height: 1.25em;\\n margin: 2rem 0 1.5rem 0;\\n border-bottom: 1px solid rgba(0, 0, 0, 0.1);\\n padding-bottom: 1rem;\\n}\\n\\n@media(min-width: 1024px) {\\n d-article h2 {\\n font-size: 36px;\\n }\\n}\\n\\n/* H3 */\\n\\nd-article h3 {\\n font-weight: 700;\\n font-size: 18px;\\n line-height: 1.4em;\\n margin-bottom: 1em;\\n margin-top: 2em;\\n}\\n\\n@media(min-width: 1024px) {\\n d-article h3 {\\n font-size: 20px;\\n }\\n}\\n\\n/* H4 */\\n\\nd-article h4 {\\n font-weight: 600;\\n text-transform: uppercase;\\n font-size: 14px;\\n line-height: 1.4em;\\n}\\n\\nd-article a {\\n color: inherit;\\n}\\n\\nd-article p,\\nd-article ul,\\nd-article ol,\\nd-article blockquote {\\n margin-top: 0;\\n margin-bottom: 1em;\\n margin-left: 0;\\n margin-right: 0;\\n}\\n\\nd-article blockquote {\\n border-left: 2px solid rgba(0, 0, 0, 0.2);\\n padding-left: 2em;\\n font-style: italic;\\n color: rgba(0, 0, 0, 0.6);\\n}\\n\\nd-article a {\\n border-bottom: 1px solid rgba(0, 0, 0, 0.4);\\n text-decoration: none;\\n}\\n\\nd-article a:hover {\\n border-bottom: 1px solid rgba(0, 0, 0, 0.8);\\n}\\n\\nd-article .link {\\n text-decoration: underline;\\n cursor: pointer;\\n}\\n\\nd-article ul,\\nd-article ol {\\n padding-left: 24px;\\n}\\n\\nd-article li {\\n margin-bottom: 0.2em;\\n margin-left: 0;\\n padding-left: 0;\\n}\\n\\nd-article li:last-child {\\n margin-bottom: 0;\\n}\\n\\nd-article pre {\\n font-size: 14px;\\n margin-bottom: 20px;\\n}\\n\\nd-article hr {\\n grid-column: screen;\\n width: 100%;\\n border: none;\\n border-bottom: 1px solid rgba(0, 0, 0, 0.1);\\n margin-top: 60px;\\n margin-bottom: 60px;\\n}\\n\\nd-article section {\\n margin-top: 60px;\\n margin-bottom: 60px;\\n}\\n\\nd-article span.equation-mimic {\\n font-family: georgia;\\n font-size: 115%;\\n font-style: italic;\\n}\\n\\nd-article > d-code,\\nd-article section > d-code {\\n display: block;\\n}\\n\\nd-article > d-math[block],\\nd-article section > d-math[block] {\\n display: block;\\n}\\n\\n@media (max-width: 768px) {\\n d-article > d-code,\\n d-article section > d-code,\\n d-article > d-math[block],\\n d-article section > d-math[block] {\\n overflow-x: scroll;\\n -ms-overflow-style: none; // IE 10+\\n overflow: -moz-scrollbars-none; // Firefox\\n }\\n\\n d-article > d-code::-webkit-scrollbar,\\n d-article section > d-code::-webkit-scrollbar,\\n d-article > d-math[block]::-webkit-scrollbar,\\n d-article section > d-math[block]::-webkit-scrollbar {\\n display: none; // Safari and Chrome\\n }\\n}\\n\\nd-article .citation {\\n color: #668;\\n cursor: pointer;\\n}\\n\\nd-include {\\n width: auto;\\n display: block;\\n}\\n\\nd-figure {\\n contain: layout style;\\n}\\n\\n/* KaTeX */\\n\\n.katex, .katex-prerendered {\\n contain: style;\\n display: inline-block;\\n}\\n\\n/* Tables */\\n\\nd-article table {\\n border-collapse: collapse;\\n margin-bottom: 1.5rem;\\n border-bottom: 1px solid rgba(0, 0, 0, 0.2);\\n}\\n\\nd-article table th {\\n border-bottom: 1px solid rgba(0, 0, 0, 0.2);\\n}\\n\\nd-article table td {\\n border-bottom: 1px solid rgba(0, 0, 0, 0.05);\\n}\\n\\nd-article table tr:last-of-type td {\\n border-bottom: none;\\n}\\n\\nd-article table th,\\nd-article table td {\\n font-size: 15px;\\n padding: 2px 8px;\\n}\\n\\nd-article table tbody :first-child td {\\n padding-top: 2px;\\n}\\n\";\n\n var title = \"/*\\n * Copyright 2018 The Distill Template Authors\\n *\\n * Licensed under the Apache License, Version 2.0 (the \\\"License\\\");\\n * you may not use this file except in compliance with the License.\\n * You may obtain a copy of the License at\\n *\\n * http://www.apache.org/licenses/LICENSE-2.0\\n *\\n * Unless required by applicable law or agreed to in writing, software\\n * distributed under the License is distributed on an \\\"AS IS\\\" BASIS,\\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\n * See the License for the specific language governing permissions and\\n * limitations under the License.\\n */\\n\\nd-title {\\n padding: 2rem 0 1.5rem;\\n contain: layout style;\\n overflow-x: hidden;\\n}\\n\\n@media(min-width: 768px) {\\n d-title {\\n padding: 4rem 0 1.5rem;\\n }\\n}\\n\\nd-title h1 {\\n grid-column: text;\\n font-size: 40px;\\n font-weight: 700;\\n line-height: 1.1em;\\n margin: 0 0 0.5rem;\\n}\\n\\n@media(min-width: 768px) {\\n d-title h1 {\\n font-size: 50px;\\n }\\n}\\n\\nd-title p {\\n font-weight: 300;\\n font-size: 1.2rem;\\n line-height: 1.55em;\\n grid-column: text;\\n}\\n\\nd-title .status {\\n margin-top: 0px;\\n font-size: 12px;\\n color: #009688;\\n opacity: 0.8;\\n grid-column: kicker;\\n}\\n\\nd-title .status span {\\n line-height: 1;\\n display: inline-block;\\n padding: 6px 0;\\n border-bottom: 1px solid #80cbc4;\\n font-size: 11px;\\n text-transform: uppercase;\\n}\\n\";\n\n // Copyright 2018 The Distill Template Authors\n\n const styles = base + layout + title + byline + article + math + print;\n\n function makeStyleTag(dom) {\n\n const styleTagId = 'distill-prerendered-styles';\n const prerenderedTag = dom.getElementById(styleTagId);\n if (!prerenderedTag) {\n const styleTag = dom.createElement('style');\n styleTag.id = styleTagId;\n styleTag.type = 'text/css';\n const cssTextTag = dom.createTextNode(styles);\n styleTag.appendChild(cssTextTag);\n const firstScriptTag = dom.head.querySelector('script');\n dom.head.insertBefore(styleTag, firstScriptTag);\n }\n\n }\n\n // Copyright 2018 The Distill Template Authors\n //\n // Licensed under the Apache License, Version 2.0 (the \"License\");\n // you may not use this file except in compliance with the License.\n // You may obtain a copy of the License at\n //\n // http://www.apache.org/licenses/LICENSE-2.0\n //\n // Unless required by applicable law or agreed to in writing, software\n // distributed under the License is distributed on an \"AS IS\" BASIS,\n // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n // See the License for the specific language governing permissions and\n // limitations under the License.\n\n function addPolyfill(polyfill, polyfillLoadedCallback) {\n console.debug('Runlevel 0: Polyfill required: ' + polyfill.name);\n const script = document.createElement('script');\n script.src = polyfill.url;\n script.async = false;\n if (polyfillLoadedCallback) {\n script.onload = function() { polyfillLoadedCallback(polyfill); };\n }\n script.onerror = function() {\n new Error('Runlevel 0: Polyfills failed to load script ' + polyfill.name);\n };\n document.head.appendChild(script);\n }\n\n const polyfills = [\n {\n name: 'WebComponents',\n support: function() {\n return 'customElements' in window &&\n 'attachShadow' in Element.prototype &&\n 'getRootNode' in Element.prototype &&\n 'content' in document.createElement('template') &&\n 'Promise' in window &&\n 'from' in Array;\n },\n url: 'https://distill.pub/third-party/polyfills/webcomponents-lite.js'\n }, {\n name: 'IntersectionObserver',\n support: function() {\n return 'IntersectionObserver' in window &&\n 'IntersectionObserverEntry' in window;\n },\n url: 'https://distill.pub/third-party/polyfills/intersection-observer.js'\n },\n ];\n\n class Polyfills {\n\n static browserSupportsAllFeatures() {\n return polyfills.every((poly) => poly.support());\n }\n\n static load(callback) {\n // Define an intermediate callback that checks if all is loaded.\n const polyfillLoaded = function(polyfill) {\n polyfill.loaded = true;\n console.debug('Runlevel 0: Polyfill has finished loading: ' + polyfill.name);\n // console.debug(window[polyfill.name]);\n if (Polyfills.neededPolyfills.every((poly) => poly.loaded)) {\n console.debug('Runlevel 0: All required polyfills have finished loading.');\n console.debug('Runlevel 0->1.');\n window.distillRunlevel = 1;\n callback();\n }\n };\n // Add polyfill script tags\n for (const polyfill of Polyfills.neededPolyfills) {\n addPolyfill(polyfill, polyfillLoaded);\n }\n }\n\n static get neededPolyfills() {\n if (!Polyfills._neededPolyfills) {\n Polyfills._neededPolyfills = polyfills.filter((poly) => !poly.support());\n }\n return Polyfills._neededPolyfills;\n }\n }\n\n // Copyright 2018 The Distill Template Authors\n //\n // Licensed under the Apache License, Version 2.0 (the \"License\");\n // you may not use this file except in compliance with the License.\n // You may obtain a copy of the License at\n //\n // http://www.apache.org/licenses/LICENSE-2.0\n //\n // Unless required by applicable law or agreed to in writing, software\n // distributed under the License is distributed on an \"AS IS\" BASIS,\n // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n // See the License for the specific language governing permissions and\n // limitations under the License.\n\n // const marginSmall = 16;\n // const marginLarge = 3 * marginSmall;\n // const margin = marginSmall + marginLarge;\n // const gutter = marginSmall;\n // const outsetAmount = margin / 2;\n // const numCols = 4;\n // const numGutters = numCols - 1;\n // const columnWidth = (768 - 2 * marginLarge - numGutters * gutter) / numCols;\n //\n // const screenwidth = 768;\n // const pageWidth = screenwidth - 2 * marginLarge;\n // const bodyWidth = pageWidth - columnWidth - gutter;\n\n function body(selector) {\n return `${selector} {\n grid-column: left / text;\n }\n `;\n }\n\n // Copyright 2018 The Distill Template Authors\n\n const T$1 = Template('d-abstract', `\n<style>\n :host {\n font-size: 1.25rem;\n line-height: 1.6em;\n color: rgba(0, 0, 0, 0.7);\n -webkit-font-smoothing: antialiased;\n }\n\n ::slotted(p) {\n margin-top: 0;\n margin-bottom: 1em;\n grid-column: text-start / middle-end;\n }\n ${body('d-abstract')}\n</style>\n\n<slot></slot>\n`);\n\n class Abstract extends T$1(HTMLElement) {\n\n }\n\n // Copyright 2018 The Distill Template Authors\n\n const T$2 = Template('d-appendix', `\n<style>\n\nd-appendix {\n contain: layout style;\n font-size: 0.8em;\n line-height: 1.7em;\n margin-top: 60px;\n margin-bottom: 0;\n border-top: 1px solid rgba(0, 0, 0, 0.1);\n color: rgba(0,0,0,0.5);\n padding-top: 60px;\n padding-bottom: 48px;\n}\n\nd-appendix h3 {\n grid-column: page-start / text-start;\n font-size: 15px;\n font-weight: 500;\n margin-top: 1em;\n margin-bottom: 0;\n color: rgba(0,0,0,0.65);\n}\n\nd-appendix h3 + * {\n margin-top: 1em;\n}\n\nd-appendix ol {\n padding: 0 0 0 15px;\n}\n\n@media (min-width: 768px) {\n d-appendix ol {\n padding: 0 0 0 30px;\n margin-left: -30px;\n }\n}\n\nd-appendix li {\n margin-bottom: 1em;\n}\n\nd-appendix a {\n color: rgba(0, 0, 0, 0.6);\n}\n\nd-appendix > * {\n grid-column: text;\n}\n\nd-appendix > d-footnote-list,\nd-appendix > d-citation-list,\nd-appendix > distill-appendix {\n grid-column: screen;\n}\n\n</style>\n\n`, false);\n\n class Appendix extends T$2(HTMLElement) {\n\n }\n\n // Copyright 2018 The Distill Template Authors\n //\n // Licensed under the Apache License, Version 2.0 (the \"License\");\n // you may not use this file except in compliance with the License.\n // You may obtain a copy of the License at\n //\n // http://www.apache.org/licenses/LICENSE-2.0\n //\n // Unless required by applicable law or agreed to in writing, software\n // distributed under the License is distributed on an \"AS IS\" BASIS,\n // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n // See the License for the specific language governing permissions and\n // limitations under the License.\n\n // import { Template } from '../mixins/template';\n // import { Controller } from '../controller';\n\n const isOnlyWhitespace = /^\\s*$/;\n\n class Article extends HTMLElement {\n static get is() { return 'd-article'; }\n\n constructor() {\n super();\n\n new MutationObserver( (mutations) => {\n for (const mutation of mutations) {\n for (const addedNode of mutation.addedNodes) {\n switch (addedNode.nodeName) {\n case '#text': { // usually text nodes are only linebreaks.\n const text = addedNode.nodeValue;\n if (!isOnlyWhitespace.test(text)) {\n console.warn('Use of unwrapped text in distill articles is discouraged as it breaks layout! Please wrap any text in a <span> or <p> tag. We found the following text: ' + text);\n const wrapper = document.createElement('span');\n wrapper.innerHTML = addedNode.nodeValue;\n addedNode.parentNode.insertBefore(wrapper, addedNode);\n addedNode.parentNode.removeChild(addedNode);\n }\n } break;\n }\n }\n }\n }).observe(this, {childList: true});\n }\n\n }\n\n var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};\n\n function createCommonjsModule(fn, module) {\n \treturn module = { exports: {} }, fn(module, module.exports), module.exports;\n }\n\n var bibtexParse = createCommonjsModule(function (module, exports) {\n /* start bibtexParse 0.0.22 */\n\n //Original work by Henrik Muehe (c) 2010\n //\n //CommonJS port by Mikola Lysenko 2013\n //\n //Port to Browser lib by ORCID / RCPETERS\n //\n //Issues:\n //no comment handling within strings\n //no string concatenation\n //no variable values yet\n //Grammar implemented here:\n //bibtex -> (string | preamble | comment | entry)*;\n //string -> '@STRING' '{' key_equals_value '}';\n //preamble -> '@PREAMBLE' '{' value '}';\n //comment -> '@COMMENT' '{' value '}';\n //entry -> '@' key '{' key ',' key_value_list '}';\n //key_value_list -> key_equals_value (',' key_equals_value)*;\n //key_equals_value -> key '=' value;\n //value -> value_quotes | value_braces | key;\n //value_quotes -> '\"' .*? '\"'; // not quite\n //value_braces -> '{' .*? '\"'; // not quite\n (function(exports) {\n\n function BibtexParser() {\n\n this.months = [\"jan\", \"feb\", \"mar\", \"apr\", \"may\", \"jun\", \"jul\", \"aug\", \"sep\", \"oct\", \"nov\", \"dec\"];\n this.notKey = [',','{','}',' ','='];\n this.pos = 0;\n this.input = \"\";\n this.entries = new Array();\n\n this.currentEntry = \"\";\n\n this.setInput = function(t) {\n this.input = t;\n };\n\n this.getEntries = function() {\n return this.entries;\n };\n\n this.isWhitespace = function(s) {\n return (s == ' ' || s == '\\r' || s == '\\t' || s == '\\n');\n };\n\n this.match = function(s, canCommentOut) {\n if (canCommentOut == undefined || canCommentOut == null)\n canCommentOut = true;\n this.skipWhitespace(canCommentOut);\n if (this.input.substring(this.pos, this.pos + s.length) == s) {\n this.pos += s.length;\n } else {\n throw \"Token mismatch, expected \" + s + \", found \"\n + this.input.substring(this.pos);\n } this.skipWhitespace(canCommentOut);\n };\n\n this.tryMatch = function(s, canCommentOut) {\n if (canCommentOut == undefined || canCommentOut == null)\n canCommentOut = true;\n this.skipWhitespace(canCommentOut);\n if (this.input.substring(this.pos, this.pos + s.length) == s) {\n return true;\n } else {\n return false;\n } };\n\n /* when search for a match all text can be ignored, not just white space */\n this.matchAt = function() {\n while (this.input.length > this.pos && this.input[this.pos] != '@') {\n this.pos++;\n }\n if (this.input[this.pos] == '@') {\n return true;\n } return false;\n };\n\n this.skipWhitespace = function(canCommentOut) {\n while (this.isWhitespace(this.input[this.pos])) {\n this.pos++;\n } if (this.input[this.pos] == \"%\" && canCommentOut == true) {\n while (this.input[this.pos] != \"\\n\") {\n this.pos++;\n } this.skipWhitespace(canCommentOut);\n } };\n\n this.value_braces = function() {\n var bracecount = 0;\n this.match(\"{\", false);\n var start = this.pos;\n var escaped = false;\n while (true) {\n if (!escaped) {\n if (this.input[this.pos] == '}') {\n if (bracecount > 0) {\n bracecount--;\n } else {\n var end = this.pos;\n this.match(\"}\", false);\n return this.input.substring(start, end);\n } } else if (this.input[this.pos] == '{') {\n bracecount++;\n } else if (this.pos >= this.input.length - 1) {\n throw \"Unterminated value\";\n } } if (this.input[this.pos] == '\\\\' && escaped == false)\n escaped = true;\n else\n escaped = false;\n this.pos++;\n } };\n\n this.value_comment = function() {\n var str = '';\n var brcktCnt = 0;\n while (!(this.tryMatch(\"}\", false) && brcktCnt == 0)) {\n str = str + this.input[this.pos];\n if (this.input[this.pos] == '{')\n brcktCnt++;\n if (this.input[this.pos] == '}')\n brcktCnt--;\n if (this.pos >= this.input.length - 1) {\n throw \"Unterminated value:\" + this.input.substring(start);\n } this.pos++;\n } return str;\n };\n\n this.value_quotes = function() {\n this.match('\"', false);\n var start = this.pos;\n var escaped = false;\n while (true) {\n if (!escaped) {\n if (this.input[this.pos] == '\"') {\n var end = this.pos;\n this.match('\"', false);\n return this.input.substring(start, end);\n } else if (this.pos >= this.input.length - 1) {\n throw \"Unterminated value:\" + this.input.substring(start);\n } }\n if (this.input[this.pos] == '\\\\' && escaped == false)\n escaped = true;\n else\n escaped = false;\n this.pos++;\n } };\n\n this.single_value = function() {\n var start = this.pos;\n if (this.tryMatch(\"{\")) {\n return this.value_braces();\n } else if (this.tryMatch('\"')) {\n return this.value_quotes();\n } else {\n var k = this.key();\n if (k.match(\"^[0-9]+$\"))\n return k;\n else if (this.months.indexOf(k.toLowerCase()) >= 0)\n return k.toLowerCase();\n else\n throw \"Value expected:\" + this.input.substring(start) + ' for key: ' + k;\n\n } };\n\n this.value = function() {\n var values = [];\n values.push(this.single_value());\n while (this.tryMatch(\"#\")) {\n this.match(\"#\");\n values.push(this.single_value());\n } return values.join(\"\");\n };\n\n this.key = function() {\n var start = this.pos;\n while (true) {\n if (this.pos >= this.input.length) {\n throw \"Runaway key\";\n } // а-яА-Я is Cyrillic\n //console.log(this.input[this.pos]);\n if (this.notKey.indexOf(this.input[this.pos]) >= 0) {\n return this.input.substring(start, this.pos);\n } else {\n this.pos++;\n\n } } };\n\n this.key_equals_value = function() {\n var key = this.key();\n if (this.tryMatch(\"=\")) {\n this.match(\"=\");\n var val = this.value();\n return [ key, val ];\n } else {\n throw \"... = value expected, equals sign missing:\"\n + this.input.substring(this.pos);\n } };\n\n this.key_value_list = function() {\n var kv = this.key_equals_value();\n this.currentEntry['entryTags'] = {};\n this.currentEntry['entryTags'][kv[0]] = kv[1];\n while (this.tryMatch(\",\")) {\n this.match(\",\");\n // fixes problems with commas at the end of a list\n if (this.tryMatch(\"}\")) {\n break;\n }\n kv = this.key_equals_value();\n this.currentEntry['entryTags'][kv[0]] = kv[1];\n } };\n\n this.entry_body = function(d) {\n this.currentEntry = {};\n this.currentEntry['citationKey'] = this.key();\n this.currentEntry['entryType'] = d.substring(1);\n this.match(\",\");\n this.key_value_list();\n this.entries.push(this.currentEntry);\n };\n\n this.directive = function() {\n this.match(\"@\");\n return \"@\" + this.key();\n };\n\n this.preamble = function() {\n this.currentEntry = {};\n this.currentEntry['entryType'] = 'PREAMBLE';\n this.currentEntry['entry'] = this.value_comment();\n this.entries.push(this.currentEntry);\n };\n\n this.comment = function() {\n this.currentEntry = {};\n this.currentEntry['entryType'] = 'COMMENT';\n this.currentEntry['entry'] = this.value_comment();\n this.entries.push(this.currentEntry);\n };\n\n this.entry = function(d) {\n this.entry_body(d);\n };\n\n this.bibtex = function() {\n while (this.matchAt()) {\n var d = this.directive();\n this.match(\"{\");\n if (d == \"@STRING\") {\n this.string();\n } else if (d == \"@PREAMBLE\") {\n this.preamble();\n } else if (d == \"@COMMENT\") {\n this.comment();\n } else {\n this.entry(d);\n }\n this.match(\"}\");\n } };\n }\n exports.toJSON = function(bibtex) {\n var b = new BibtexParser();\n b.setInput(bibtex);\n b.bibtex();\n return b.entries;\n };\n\n /* added during hackathon don't hate on me */\n exports.toBibtex = function(json) {\n var out = '';\n for ( var i in json) {\n out += \"@\" + json[i].entryType;\n out += '{';\n if (json[i].citationKey)\n out += json[i].citationKey + ', ';\n if (json[i].entry)\n out += json[i].entry ;\n if (json[i].entryTags) {\n var tags = '';\n for (var jdx in json[i].entryTags) {\n if (tags.length != 0)\n tags += ', ';\n tags += jdx + '= {' + json[i].entryTags[jdx] + '}';\n }\n out += tags;\n }\n out += '}\\n\\n';\n }\n return out;\n\n };\n\n })( exports);\n\n /* end bibtexParse */\n });\n\n // Copyright 2018 The Distill Template Authors\n\n function normalizeTag(string) {\n return string\n .replace(/[\\t\\n ]+/g, ' ')\n .replace(/{\\\\[\"^`.'acu~Hvs]( )?([a-zA-Z])}/g, (full, x, char) => char)\n .replace(/{\\\\([a-zA-Z])}/g, (full, char) => char);\n }\n\n function parseBibtex(bibtex) {\n const bibliography = new Map();\n const parsedEntries = bibtexParse.toJSON(bibtex);\n for (const entry of parsedEntries) {\n // normalize tags; note entryTags is an object, not Map\n for (const [key, value] of Object.entries(entry.entryTags)) {\n entry.entryTags[key.toLowerCase()] = normalizeTag(value);\n }\n entry.entryTags.type = entry.entryType;\n // add to bibliography\n bibliography.set(entry.citationKey, entry.entryTags);\n }\n return bibliography;\n }\n\n function serializeFrontmatterToBibtex(frontMatter) {\n return `@article{${frontMatter.slug},\n author = {${frontMatter.bibtexAuthors}},\n title = {${frontMatter.title}},\n journal = {${frontMatter.journal.title}},\n year = {${frontMatter.publishedYear}},\n note = {${frontMatter.url}},\n doi = {${frontMatter.doi}}\n}`;\n }\n\n // Copyright 2018 The Distill Template Authors\n\n class Bibliography extends HTMLElement {\n\n static get is() { return 'd-bibliography'; }\n\n constructor() {\n super();\n\n // set up mutation observer\n const options = {childList: true, characterData: true, subtree: true};\n const observer = new MutationObserver( (entries) => {\n for (const entry of entries) {\n if (entry.target.nodeName === 'SCRIPT' || entry.type === 'characterData') {\n this.parseIfPossible();\n }\n }\n });\n observer.observe(this, options);\n }\n\n connectedCallback() {\n requestAnimationFrame(() => {\n this.parseIfPossible();\n });\n }\n\n parseIfPossible() {\n const scriptTag = this.querySelector('script');\n if (!scriptTag) return;\n if (scriptTag.type == 'text/bibtex') {\n const newBibtex = scriptTag.textContent;\n if (this.bibtex !== newBibtex) {\n this.bibtex = newBibtex;\n const bibliography = parseBibtex(this.bibtex);\n this.notify(bibliography);\n }\n } else if (scriptTag.type == 'text/json') {\n const bibliography = new Map(JSON.parse(scriptTag.textContent));\n this.notify(bibliography);\n } else {\n console.warn('Unsupported bibliography script tag type: ' + scriptTag.type);\n }\n }\n\n notify(bibliography) {\n const options = { detail: bibliography, bubbles: true };\n const event = new CustomEvent('onBibliographyChanged', options);\n this.dispatchEvent(event);\n }\n\n /* observe 'src' attribute */\n\n static get observedAttributes() {\n return ['src'];\n }\n\n receivedBibtex(event) {\n const bibliography = parseBibtex(event.target.response);\n this.notify(bibliography);\n }\n\n attributeChangedCallback(name, oldValue, newValue) {\n var oReq = new XMLHttpRequest();\n oReq.onload = (e) => this.receivedBibtex(e);\n oReq.onerror = () => console.warn(`Could not load Bibtex! (tried ${newValue})`);\n oReq.responseType = 'text';\n oReq.open('GET', newValue, true);\n oReq.send();\n }\n\n\n }\n\n // Copyright 2018 The Distill Template Authors\n //\n // Licensed under the Apache License, Version 2.0 (the \"License\");\n // you may not use this file except in compliance with the License.\n // You may obtain a copy of the License at\n //\n // http://www.apache.org/licenses/LICENSE-2.0\n //\n // Unless required by applicable law or agreed to in writing, software\n // distributed under the License is distributed on an \"AS IS\" BASIS,\n // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n // See the License for the specific language governing permissions and\n // limitations under the License.\n\n // import style from '../styles/d-byline.css';\n\n function bylineTemplate(frontMatter) {\n return `\n <div class=\"byline grid\">\n <div>\n <h3>Authors</h3>\n <div>\n ${frontMatter.authors.map((author, i) => `\n <span class=\"author\">\n ${author.personalURL ? `\n <a class=\"name\" href=\"${author.personalURL}\">${author.name}` + (i + 1 < frontMatter.authors.length ? `,` : ``) + `</a>` : `\n <span class=\"name\">${author.name}` + (i + 1 < frontMatter.authors.length ? `,` : ``) + `</span>`}\n </span>\n `).join('')}\n </div>\n </div>\n <div >\n <h3>Affiliation</h3>\n <div><a href=\"https://huggingface.co/\">HuggingFace</a>\n </div>\n </div>\n <div >\n <h3>Published</h3>\n <div>May 31, 2024</div>\n </div>\n </div>\n`;\n }\n\n class Byline extends HTMLElement {\n\n static get is() { return 'd-byline'; }\n\n set frontMatter(frontMatter) {\n this.innerHTML = bylineTemplate(frontMatter);\n }\n\n }\n\n // Copyright 2018 The Distill Template Authors\n\n const T$3 = Template(\n \"d-cite\",\n `\n<style>\n\n:host {\n display: inline-block;\n}\n\n.citation {\n color: hsla(206, 90%, 20%, 0.7);\n}\n\n.citation-number {\n cursor: default;\n white-space: nowrap;\n font-family: -apple-system, BlinkMacSystemFont, \"Roboto\", Helvetica, sans-serif;\n font-size: 75%;\n color: hsla(206, 90%, 20%, 0.7);\n display: inline-block;\n line-height: 1.1em;\n text-align: center;\n position: relative;\n top: -2px;\n margin: 0 2px;\n}\n\nfigcaption .citation-number {\n font-size: 11px;\n font-weight: normal;\n top: -2px;\n line-height: 1em;\n}\n\nul {\n margin: 0;\n padding: 0;\n list-style-type: none;\n}\n\nul li {\n padding: 15px 10px 15px 10px;\n border-bottom: 1px solid rgba(0,0,0,0.1)\n}\n\nul li:last-of-type {\n border-bottom: none;\n}\n\n</style>\n\n<d-hover-box id=\"hover-box\"></d-hover-box>\n\n<div id=\"citation-\" class=\"citation\">\n <span class=\"citation-number\"></span>\n</div>\n`\n );\n\n class Cite extends T$3(HTMLElement) {\n /* Lifecycle */\n constructor() {\n super();\n this._numbers = [];\n this._entries = [];\n }\n\n connectedCallback() {\n this.outerSpan = this.root.querySelector(\"#citation-\");\n this.innerSpan = this.root.querySelector(\".citation-number\");\n this.hoverBox = this.root.querySelector(\"d-hover-box\");\n window.customElements.whenDefined(\"d-hover-box\").then(() => {\n this.hoverBox.listen(this);\n });\n // in case this component got connected after values were set\n if (this.numbers) {\n this.displayNumbers(this.numbers);\n }\n if (this.entries) {\n this.displayEntries(this.entries);\n }\n }\n\n //TODO This causes an infinite loop on firefox with polyfills.\n // This is only needed for interactive editing so no priority.\n // disconnectedCallback() {\n // const options = { detail: [this, this.keys], bubbles: true };\n // const event = new CustomEvent('onCiteKeyRemoved', options);\n // document.dispatchEvent(event);\n // }\n\n /* observe 'key' attribute */\n\n static get observedAttributes() {\n return [\"key\", \"bibtex-key\"];\n }\n\n attributeChangedCallback(name, oldValue, newValue) {\n const eventName = oldValue ? \"onCiteKeyChanged\" : \"onCiteKeyCreated\";\n const keys = newValue.split(\",\").map(k => k.trim());\n const options = { detail: [this, keys], bubbles: true };\n const event = new CustomEvent(eventName, options);\n document.dispatchEvent(event);\n }\n\n set key(value) {\n this.setAttribute(\"key\", value);\n }\n\n get key() {\n return this.getAttribute(\"key\") || this.getAttribute(\"bibtex-key\");\n }\n\n get keys() {\n const result = this.key.split(\",\");\n console.log(result);\n return result;\n }\n\n /* Setters & Rendering */\n\n set numbers(numbers) {\n this._numbers = numbers;\n this.displayNumbers(numbers);\n }\n\n get numbers() {\n return this._numbers;\n }\n\n displayNumbers(numbers) {\n if (!this.innerSpan) return;\n const numberStrings = numbers.map(index => {\n return index == -1 ? \"?\" : index + 1 + \"\";\n });\n const textContent = \"[\" + numberStrings.join(\", \") + \"]\";\n this.innerSpan.textContent = textContent;\n }\n\n set entries(entries) {\n this._entries = entries;\n this.displayEntries(entries);\n }\n\n get entries() {\n return this._entries;\n }\n\n displayEntries(entries) {\n if (!this.hoverBox) return;\n this.hoverBox.innerHTML = `<ul>\n ${entries\n .map(hover_cite)\n .map(html => `<li>${html}</li>`)\n .join(\"\\n\")}\n </ul>`;\n }\n }\n\n // Copyright 2018 The Distill Template Authors\n\n const styles$1 = `\nd-citation-list {\n contain: style;\n}\n\nd-citation-list .references {\n grid-column: text;\n}\n\nd-citation-list .references .title {\n font-weight: 500;\n}\n`;\n\n function renderCitationList(element, entries, dom=document) {\n if (entries.size > 0) {\n element.style.display = '';\n let list = element.querySelector('.references');\n if (list) {\n list.innerHTML = '';\n } else {\n const stylesTag = dom.createElement('style');\n stylesTag.innerHTML = styles$1;\n element.appendChild(stylesTag);\n\n const heading = dom.createElement('h3');\n heading.id = 'references';\n heading.textContent = 'References';\n element.appendChild(heading);\n\n list = dom.createElement('ol');\n list.id = 'references-list';\n list.className = 'references';\n element.appendChild(list);\n }\n\n for (const [key, entry] of entries) {\n const listItem = dom.createElement('li');\n listItem.id = key;\n listItem.innerHTML = bibliography_cite(entry);\n list.appendChild(listItem);\n }\n } else {\n element.style.display = 'none';\n }\n }\n\n class CitationList extends HTMLElement {\n\n static get is() { return 'd-citation-list'; }\n\n connectedCallback() {\n if (!this.hasAttribute('distill-prerendered')) {\n this.style.display = 'none';\n }\n }\n\n set citations(citations) {\n renderCitationList(this, citations);\n }\n\n }\n\n var prism = createCommonjsModule(function (module) {\n /* **********************************************\n Begin prism-core.js\n ********************************************** */\n\n var _self = (typeof window !== 'undefined')\n \t? window // if in browser\n \t: (\n \t\t(typeof WorkerGlobalScope !== 'undefined' && self instanceof WorkerGlobalScope)\n \t\t? self // if in worker\n \t\t: {} // if in node js\n \t);\n\n /**\n * Prism: Lightweight, robust, elegant syntax highlighting\n * MIT license http://www.opensource.org/licenses/mit-license.php/\n * @author Lea Verou http://lea.verou.me\n */\n\n var Prism = (function (_self){\n\n // Private helper vars\n var lang = /\\blang(?:uage)?-([\\w-]+)\\b/i;\n var uniqueId = 0;\n\n\n var _ = {\n \tmanual: _self.Prism && _self.Prism.manual,\n \tdisableWorkerMessageHandler: _self.Prism && _self.Prism.disableWorkerMessageHandler,\n \tutil: {\n \t\tencode: function encode(tokens) {\n \t\t\tif (tokens instanceof Token) {\n \t\t\t\treturn new Token(tokens.type, encode(tokens.content), tokens.alias);\n \t\t\t} else if (Array.isArray(tokens)) {\n \t\t\t\treturn tokens.map(encode);\n \t\t\t} else {\n \t\t\t\treturn tokens.replace(/&/g, '&').replace(/</g, '<').replace(/\\u00a0/g, ' ');\n \t\t\t}\n \t\t},\n\n \t\ttype: function (o) {\n \t\t\treturn Object.prototype.toString.call(o).slice(8, -1);\n \t\t},\n\n \t\tobjId: function (obj) {\n \t\t\tif (!obj['__id']) {\n \t\t\t\tObject.defineProperty(obj, '__id', { value: ++uniqueId });\n \t\t\t}\n \t\t\treturn obj['__id'];\n \t\t},\n\n \t\t// Deep clone a language definition (e.g. to extend it)\n \t\tclone: function deepClone(o, visited) {\n \t\t\tvar clone, id, type = _.util.type(o);\n \t\t\tvisited = visited || {};\n\n \t\t\tswitch (type) {\n \t\t\t\tcase 'Object':\n \t\t\t\t\tid = _.util.objId(o);\n \t\t\t\t\tif (visited[id]) {\n \t\t\t\t\t\treturn visited[id];\n \t\t\t\t\t}\n \t\t\t\t\tclone = {};\n \t\t\t\t\tvisited[id] = clone;\n\n \t\t\t\t\tfor (var key in o) {\n \t\t\t\t\t\tif (o.hasOwnProperty(key)) {\n \t\t\t\t\t\t\tclone[key] = deepClone(o[key], visited);\n \t\t\t\t\t\t}\n \t\t\t\t\t}\n\n \t\t\t\t\treturn clone;\n\n \t\t\t\tcase 'Array':\n \t\t\t\t\tid = _.util.objId(o);\n \t\t\t\t\tif (visited[id]) {\n \t\t\t\t\t\treturn visited[id];\n \t\t\t\t\t}\n \t\t\t\t\tclone = [];\n \t\t\t\t\tvisited[id] = clone;\n\n \t\t\t\t\to.forEach(function (v, i) {\n \t\t\t\t\t\tclone[i] = deepClone(v, visited);\n \t\t\t\t\t});\n\n \t\t\t\t\treturn clone;\n\n \t\t\t\tdefault:\n \t\t\t\t\treturn o;\n \t\t\t}\n \t\t},\n\n \t\t/**\n \t\t * Returns the Prism language of the given element set by a `language-xxxx` or `lang-xxxx` class.\n \t\t *\n \t\t * If no language is set for the element or the element is `null` or `undefined`, `none` will be returned.\n \t\t *\n \t\t * @param {Element} element\n \t\t * @returns {string}\n \t\t */\n \t\tgetLanguage: function (element) {\n \t\t\twhile (element && !lang.test(element.className)) {\n \t\t\t\telement = element.parentElement;\n \t\t\t}\n \t\t\tif (element) {\n \t\t\t\treturn (element.className.match(lang) || [, 'none'])[1].toLowerCase();\n \t\t\t}\n \t\t\treturn 'none';\n \t\t},\n\n \t\t/**\n \t\t * Returns the script element that is currently executing.\n \t\t *\n \t\t * This does __not__ work for line script element.\n \t\t *\n \t\t * @returns {HTMLScriptElement | null}\n \t\t */\n \t\tcurrentScript: function () {\n \t\t\tif (typeof document === 'undefined') {\n \t\t\t\treturn null;\n \t\t\t}\n \t\t\tif ('currentScript' in document) {\n \t\t\t\treturn document.currentScript;\n \t\t\t}\n\n \t\t\t// IE11 workaround\n \t\t\t// we'll get the src of the current script by parsing IE11's error stack trace\n \t\t\t// this will not work for inline scripts\n\n \t\t\ttry {\n \t\t\t\tthrow new Error();\n \t\t\t} catch (err) {\n \t\t\t\t// Get file src url from stack. Specifically works with the format of stack traces in IE.\n \t\t\t\t// A stack will look like this:\n \t\t\t\t//\n \t\t\t\t// Error\n \t\t\t\t// at _.util.currentScript (http://localhost/components/prism-core.js:119:5)\n \t\t\t\t// at Global code (http://localhost/components/prism-core.js:606:1)\n\n \t\t\t\tvar src = (/at [^(\\r\\n]*\\((.*):.+:.+\\)$/i.exec(err.stack) || [])[1];\n \t\t\t\tif (src) {\n \t\t\t\t\tvar scripts = document.getElementsByTagName('script');\n \t\t\t\t\tfor (var i in scripts) {\n \t\t\t\t\t\tif (scripts[i].src == src) {\n \t\t\t\t\t\t\treturn scripts[i];\n \t\t\t\t\t\t}\n \t\t\t\t\t}\n \t\t\t\t}\n \t\t\t\treturn null;\n \t\t\t}\n \t\t}\n \t},\n\n \tlanguages: {\n \t\textend: function (id, redef) {\n \t\t\tvar lang = _.util.clone(_.languages[id]);\n\n \t\t\tfor (var key in redef) {\n \t\t\t\tlang[key] = redef[key];\n \t\t\t}\n\n \t\t\treturn lang;\n \t\t},\n\n \t\t/**\n \t\t * Insert a token before another token in a language literal\n \t\t * As this needs to recreate the object (we cannot actually insert before keys in object literals),\n \t\t * we cannot just provide an object, we need an object and a key.\n \t\t * @param inside The key (or language id) of the parent\n \t\t * @param before The key to insert before.\n \t\t * @param insert Object with the key/value pairs to insert\n \t\t * @param root The object that contains `inside`. If equal to Prism.languages, it can be omitted.\n \t\t */\n \t\tinsertBefore: function (inside, before, insert, root) {\n \t\t\troot = root || _.languages;\n \t\t\tvar grammar = root[inside];\n \t\t\tvar ret = {};\n\n \t\t\tfor (var token in grammar) {\n \t\t\t\tif (grammar.hasOwnProperty(token)) {\n\n \t\t\t\t\tif (token == before) {\n \t\t\t\t\t\tfor (var newToken in insert) {\n \t\t\t\t\t\t\tif (insert.hasOwnProperty(newToken)) {\n \t\t\t\t\t\t\t\tret[newToken] = insert[newToken];\n \t\t\t\t\t\t\t}\n \t\t\t\t\t\t}\n \t\t\t\t\t}\n\n \t\t\t\t\t// Do not insert token which also occur in insert. See #1525\n \t\t\t\t\tif (!insert.hasOwnProperty(token)) {\n \t\t\t\t\t\tret[token] = grammar[token];\n \t\t\t\t\t}\n \t\t\t\t}\n \t\t\t}\n\n \t\t\tvar old = root[inside];\n \t\t\troot[inside] = ret;\n\n \t\t\t// Update references in other language definitions\n \t\t\t_.languages.DFS(_.languages, function(key, value) {\n \t\t\t\tif (value === old && key != inside) {\n \t\t\t\t\tthis[key] = ret;\n \t\t\t\t}\n \t\t\t});\n\n \t\t\treturn ret;\n \t\t},\n\n \t\t// Traverse a language definition with Depth First Search\n \t\tDFS: function DFS(o, callback, type, visited) {\n \t\t\tvisited = visited || {};\n\n \t\t\tvar objId = _.util.objId;\n\n \t\t\tfor (var i in o) {\n \t\t\t\tif (o.hasOwnProperty(i)) {\n \t\t\t\t\tcallback.call(o, i, o[i], type || i);\n\n \t\t\t\t\tvar property = o[i],\n \t\t\t\t\t propertyType = _.util.type(property);\n\n \t\t\t\t\tif (propertyType === 'Object' && !visited[objId(property)]) {\n \t\t\t\t\t\tvisited[objId(property)] = true;\n \t\t\t\t\t\tDFS(property, callback, null, visited);\n \t\t\t\t\t}\n \t\t\t\t\telse if (propertyType === 'Array' && !visited[objId(property)]) {\n \t\t\t\t\t\tvisited[objId(property)] = true;\n \t\t\t\t\t\tDFS(property, callback, i, visited);\n \t\t\t\t\t}\n \t\t\t\t}\n \t\t\t}\n \t\t}\n \t},\n \tplugins: {},\n\n \thighlightAll: function(async, callback) {\n \t\t_.highlightAllUnder(document, async, callback);\n \t},\n\n \thighlightAllUnder: function(container, async, callback) {\n \t\tvar env = {\n \t\t\tcallback: callback,\n \t\t\tcontainer: container,\n \t\t\tselector: 'code[class*=\"language-\"], [class*=\"language-\"] code, code[class*=\"lang-\"], [class*=\"lang-\"] code'\n \t\t};\n\n \t\t_.hooks.run('before-highlightall', env);\n\n \t\tenv.elements = Array.prototype.slice.apply(env.container.querySelectorAll(env.selector));\n\n \t\t_.hooks.run('before-all-elements-highlight', env);\n\n \t\tfor (var i = 0, element; element = env.elements[i++];) {\n \t\t\t_.highlightElement(element, async === true, env.callback);\n \t\t}\n \t},\n\n \thighlightElement: function(element, async, callback) {\n \t\t// Find language\n \t\tvar language = _.util.getLanguage(element);\n \t\tvar grammar = _.languages[language];\n\n \t\t// Set language on the element, if not present\n \t\telement.className = element.className.replace(lang, '').replace(/\\s+/g, ' ') + ' language-' + language;\n\n \t\t// Set language on the parent, for styling\n \t\tvar parent = element.parentNode;\n \t\tif (parent && parent.nodeName.toLowerCase() === 'pre') {\n \t\t\tparent.className = parent.className.replace(lang, '').replace(/\\s+/g, ' ') + ' language-' + language;\n \t\t}\n\n \t\tvar code = element.textContent;\n\n \t\tvar env = {\n \t\t\telement: element,\n \t\t\tlanguage: language,\n \t\t\tgrammar: grammar,\n \t\t\tcode: code\n \t\t};\n\n \t\tfunction insertHighlightedCode(highlightedCode) {\n \t\t\tenv.highlightedCode = highlightedCode;\n\n \t\t\t_.hooks.run('before-insert', env);\n\n \t\t\tenv.element.innerHTML = env.highlightedCode;\n\n \t\t\t_.hooks.run('after-highlight', env);\n \t\t\t_.hooks.run('complete', env);\n \t\t\tcallback && callback.call(env.element);\n \t\t}\n\n \t\t_.hooks.run('before-sanity-check', env);\n\n \t\tif (!env.code) {\n \t\t\t_.hooks.run('complete', env);\n \t\t\tcallback && callback.call(env.element);\n \t\t\treturn;\n \t\t}\n\n \t\t_.hooks.run('before-highlight', env);\n\n \t\tif (!env.grammar) {\n \t\t\tinsertHighlightedCode(_.util.encode(env.code));\n \t\t\treturn;\n \t\t}\n\n \t\tif (async && _self.Worker) {\n \t\t\tvar worker = new Worker(_.filename);\n\n \t\t\tworker.onmessage = function(evt) {\n \t\t\t\tinsertHighlightedCode(evt.data);\n \t\t\t};\n\n \t\t\tworker.postMessage(JSON.stringify({\n \t\t\t\tlanguage: env.language,\n \t\t\t\tcode: env.code,\n \t\t\t\timmediateClose: true\n \t\t\t}));\n \t\t}\n \t\telse {\n \t\t\tinsertHighlightedCode(_.highlight(env.code, env.grammar, env.language));\n \t\t}\n \t},\n\n \thighlight: function (text, grammar, language) {\n \t\tvar env = {\n \t\t\tcode: text,\n \t\t\tgrammar: grammar,\n \t\t\tlanguage: language\n \t\t};\n \t\t_.hooks.run('before-tokenize', env);\n \t\tenv.tokens = _.tokenize(env.code, env.grammar);\n \t\t_.hooks.run('after-tokenize', env);\n \t\treturn Token.stringify(_.util.encode(env.tokens), env.language);\n \t},\n\n \ttokenize: function(text, grammar) {\n \t\tvar rest = grammar.rest;\n \t\tif (rest) {\n \t\t\tfor (var token in rest) {\n \t\t\t\tgrammar[token] = rest[token];\n \t\t\t}\n\n \t\t\tdelete grammar.rest;\n \t\t}\n\n \t\tvar tokenList = new LinkedList();\n \t\taddAfter(tokenList, tokenList.head, text);\n\n \t\tmatchGrammar(text, tokenList, grammar, tokenList.head, 0);\n\n \t\treturn toArray(tokenList);\n \t},\n\n \thooks: {\n \t\tall: {},\n\n \t\tadd: function (name, callback) {\n \t\t\tvar hooks = _.hooks.all;\n\n \t\t\thooks[name] = hooks[name] || [];\n\n \t\t\thooks[name].push(callback);\n \t\t},\n\n \t\trun: function (name, env) {\n \t\t\tvar callbacks = _.hooks.all[name];\n\n \t\t\tif (!callbacks || !callbacks.length) {\n \t\t\t\treturn;\n \t\t\t}\n\n \t\t\tfor (var i=0, callback; callback = callbacks[i++];) {\n \t\t\t\tcallback(env);\n \t\t\t}\n \t\t}\n \t},\n\n \tToken: Token\n };\n\n _self.Prism = _;\n\n function Token(type, content, alias, matchedStr, greedy) {\n \tthis.type = type;\n \tthis.content = content;\n \tthis.alias = alias;\n \t// Copy of the full string this token was created from\n \tthis.length = (matchedStr || '').length|0;\n \tthis.greedy = !!greedy;\n }\n\n Token.stringify = function stringify(o, language) {\n \tif (typeof o == 'string') {\n \t\treturn o;\n \t}\n \tif (Array.isArray(o)) {\n \t\tvar s = '';\n \t\to.forEach(function (e) {\n \t\t\ts += stringify(e, language);\n \t\t});\n \t\treturn s;\n \t}\n\n \tvar env = {\n \t\ttype: o.type,\n \t\tcontent: stringify(o.content, language),\n \t\ttag: 'span',\n \t\tclasses: ['token', o.type],\n \t\tattributes: {},\n \t\tlanguage: language\n \t};\n\n \tvar aliases = o.alias;\n \tif (aliases) {\n \t\tif (Array.isArray(aliases)) {\n \t\t\tArray.prototype.push.apply(env.classes, aliases);\n \t\t} else {\n \t\t\tenv.classes.push(aliases);\n \t\t}\n \t}\n\n \t_.hooks.run('wrap', env);\n\n \tvar attributes = '';\n \tfor (var name in env.attributes) {\n \t\tattributes += ' ' + name + '=\"' + (env.attributes[name] || '').replace(/\"/g, '"') + '\"';\n \t}\n\n \treturn '<' + env.tag + ' class=\"' + env.classes.join(' ') + '\"' + attributes + '>' + env.content + '</' + env.tag + '>';\n };\n\n /**\n * @param {string} text\n * @param {LinkedList<string | Token>} tokenList\n * @param {any} grammar\n * @param {LinkedListNode<string | Token>} startNode\n * @param {number} startPos\n * @param {boolean} [oneshot=false]\n * @param {string} [target]\n */\n function matchGrammar(text, tokenList, grammar, startNode, startPos, oneshot, target) {\n \tfor (var token in grammar) {\n \t\tif (!grammar.hasOwnProperty(token) || !grammar[token]) {\n \t\t\tcontinue;\n \t\t}\n\n \t\tvar patterns = grammar[token];\n \t\tpatterns = Array.isArray(patterns) ? patterns : [patterns];\n\n \t\tfor (var j = 0; j < patterns.length; ++j) {\n \t\t\tif (target && target == token + ',' + j) {\n \t\t\t\treturn;\n \t\t\t}\n\n \t\t\tvar pattern = patterns[j],\n \t\t\t\tinside = pattern.inside,\n \t\t\t\tlookbehind = !!pattern.lookbehind,\n \t\t\t\tgreedy = !!pattern.greedy,\n \t\t\t\tlookbehindLength = 0,\n \t\t\t\talias = pattern.alias;\n\n \t\t\tif (greedy && !pattern.pattern.global) {\n \t\t\t\t// Without the global flag, lastIndex won't work\n \t\t\t\tvar flags = pattern.pattern.toString().match(/[imsuy]*$/)[0];\n \t\t\t\tpattern.pattern = RegExp(pattern.pattern.source, flags + 'g');\n \t\t\t}\n\n \t\t\tpattern = pattern.pattern || pattern;\n\n \t\t\tfor ( // iterate the token list and keep track of the current token/string position\n \t\t\t\tvar currentNode = startNode.next, pos = startPos;\n \t\t\t\tcurrentNode !== tokenList.tail;\n \t\t\t\tpos += currentNode.value.length, currentNode = currentNode.next\n \t\t\t) {\n\n \t\t\t\tvar str = currentNode.value;\n\n \t\t\t\tif (tokenList.length > text.length) {\n \t\t\t\t\t// Something went terribly wrong, ABORT, ABORT!\n \t\t\t\t\treturn;\n \t\t\t\t}\n\n \t\t\t\tif (str instanceof Token) {\n \t\t\t\t\tcontinue;\n \t\t\t\t}\n\n \t\t\t\tvar removeCount = 1; // this is the to parameter of removeBetween\n\n \t\t\t\tif (greedy && currentNode != tokenList.tail.prev) {\n \t\t\t\t\tpattern.lastIndex = pos;\n \t\t\t\t\tvar match = pattern.exec(text);\n \t\t\t\t\tif (!match) {\n \t\t\t\t\t\tbreak;\n \t\t\t\t\t}\n\n \t\t\t\t\tvar from = match.index + (lookbehind && match[1] ? match[1].length : 0);\n \t\t\t\t\tvar to = match.index + match[0].length;\n \t\t\t\t\tvar p = pos;\n\n \t\t\t\t\t// find the node that contains the match\n \t\t\t\t\tp += currentNode.value.length;\n \t\t\t\t\twhile (from >= p) {\n \t\t\t\t\t\tcurrentNode = currentNode.next;\n \t\t\t\t\t\tp += currentNode.value.length;\n \t\t\t\t\t}\n \t\t\t\t\t// adjust pos (and p)\n \t\t\t\t\tp -= currentNode.value.length;\n \t\t\t\t\tpos = p;\n\n \t\t\t\t\t// the current node is a Token, then the match starts inside another Token, which is invalid\n \t\t\t\t\tif (currentNode.value instanceof Token) {\n \t\t\t\t\t\tcontinue;\n \t\t\t\t\t}\n\n \t\t\t\t\t// find the last node which is affected by this match\n \t\t\t\t\tfor (\n \t\t\t\t\t\tvar k = currentNode;\n \t\t\t\t\t\tk !== tokenList.tail && (p < to || (typeof k.value === 'string' && !k.prev.value.greedy));\n \t\t\t\t\t\tk = k.next\n \t\t\t\t\t) {\n \t\t\t\t\t\tremoveCount++;\n \t\t\t\t\t\tp += k.value.length;\n \t\t\t\t\t}\n \t\t\t\t\tremoveCount--;\n\n \t\t\t\t\t// replace with the new match\n \t\t\t\t\tstr = text.slice(pos, p);\n \t\t\t\t\tmatch.index -= pos;\n \t\t\t\t} else {\n \t\t\t\t\tpattern.lastIndex = 0;\n\n \t\t\t\t\tvar match = pattern.exec(str);\n \t\t\t\t}\n\n \t\t\t\tif (!match) {\n \t\t\t\t\tif (oneshot) {\n \t\t\t\t\t\tbreak;\n \t\t\t\t\t}\n\n \t\t\t\t\tcontinue;\n \t\t\t\t}\n\n \t\t\t\tif (lookbehind) {\n \t\t\t\t\tlookbehindLength = match[1] ? match[1].length : 0;\n \t\t\t\t}\n\n \t\t\t\tvar from = match.index + lookbehindLength,\n \t\t\t\t\tmatch = match[0].slice(lookbehindLength),\n \t\t\t\t\tto = from + match.length,\n \t\t\t\t\tbefore = str.slice(0, from),\n \t\t\t\t\tafter = str.slice(to);\n\n \t\t\t\tvar removeFrom = currentNode.prev;\n\n \t\t\t\tif (before) {\n \t\t\t\t\tremoveFrom = addAfter(tokenList, removeFrom, before);\n \t\t\t\t\tpos += before.length;\n \t\t\t\t}\n\n \t\t\t\tremoveRange(tokenList, removeFrom, removeCount);\n\n \t\t\t\tvar wrapped = new Token(token, inside ? _.tokenize(match, inside) : match, alias, match, greedy);\n \t\t\t\tcurrentNode = addAfter(tokenList, removeFrom, wrapped);\n\n \t\t\t\tif (after) {\n \t\t\t\t\taddAfter(tokenList, currentNode, after);\n \t\t\t\t}\n\n\n \t\t\t\tif (removeCount > 1)\n \t\t\t\t\tmatchGrammar(text, tokenList, grammar, currentNode.prev, pos, true, token + ',' + j);\n\n \t\t\t\tif (oneshot)\n \t\t\t\t\tbreak;\n \t\t\t}\n \t\t}\n \t}\n }\n\n /**\n * @typedef LinkedListNode\n * @property {T} value\n * @property {LinkedListNode<T> | null} prev The previous node.\n * @property {LinkedListNode<T> | null} next The next node.\n * @template T\n */\n\n /**\n * @template T\n */\n function LinkedList() {\n \t/** @type {LinkedListNode<T>} */\n \tvar head = { value: null, prev: null, next: null };\n \t/** @type {LinkedListNode<T>} */\n \tvar tail = { value: null, prev: head, next: null };\n \thead.next = tail;\n\n \t/** @type {LinkedListNode<T>} */\n \tthis.head = head;\n \t/** @type {LinkedListNode<T>} */\n \tthis.tail = tail;\n \tthis.length = 0;\n }\n\n /**\n * Adds a new node with the given value to the list.\n * @param {LinkedList<T>} list\n * @param {LinkedListNode<T>} node\n * @param {T} value\n * @returns {LinkedListNode<T>} The added node.\n * @template T\n */\n function addAfter(list, node, value) {\n \t// assumes that node != list.tail && values.length >= 0\n \tvar next = node.next;\n\n \tvar newNode = { value: value, prev: node, next: next };\n \tnode.next = newNode;\n \tnext.prev = newNode;\n \tlist.length++;\n\n \treturn newNode;\n }\n /**\n * Removes `count` nodes after the given node. The given node will not be removed.\n * @param {LinkedList<T>} list\n * @param {LinkedListNode<T>} node\n * @param {number} count\n * @template T\n */\n function removeRange(list, node, count) {\n \tvar next = node.next;\n \tfor (var i = 0; i < count && next !== list.tail; i++) {\n \t\tnext = next.next;\n \t}\n \tnode.next = next;\n \tnext.prev = node;\n \tlist.length -= i;\n }\n /**\n * @param {LinkedList<T>} list\n * @returns {T[]}\n * @template T\n */\n function toArray(list) {\n \tvar array = [];\n \tvar node = list.head.next;\n \twhile (node !== list.tail) {\n \t\tarray.push(node.value);\n \t\tnode = node.next;\n \t}\n \treturn array;\n }\n\n\n if (!_self.document) {\n \tif (!_self.addEventListener) {\n \t\t// in Node.js\n \t\treturn _;\n \t}\n\n \tif (!_.disableWorkerMessageHandler) {\n \t\t// In worker\n \t\t_self.addEventListener('message', function (evt) {\n \t\t\tvar message = JSON.parse(evt.data),\n \t\t\t\tlang = message.language,\n \t\t\t\tcode = message.code,\n \t\t\t\timmediateClose = message.immediateClose;\n\n \t\t\t_self.postMessage(_.highlight(code, _.languages[lang], lang));\n \t\t\tif (immediateClose) {\n \t\t\t\t_self.close();\n \t\t\t}\n \t\t}, false);\n \t}\n\n \treturn _;\n }\n\n //Get current script and highlight\n var script = _.util.currentScript();\n\n if (script) {\n \t_.filename = script.src;\n\n \tif (script.hasAttribute('data-manual')) {\n \t\t_.manual = true;\n \t}\n }\n\n function highlightAutomaticallyCallback() {\n \tif (!_.manual) {\n \t\t_.highlightAll();\n \t}\n }\n\n if (!_.manual) {\n \t// If the document state is \"loading\", then we'll use DOMContentLoaded.\n \t// If the document state is \"interactive\" and the prism.js script is deferred, then we'll also use the\n \t// DOMContentLoaded event because there might be some plugins or languages which have also been deferred and they\n \t// might take longer one animation frame to execute which can create a race condition where only some plugins have\n \t// been loaded when Prism.highlightAll() is executed, depending on how fast resources are loaded.\n \t// See https://github.com/PrismJS/prism/issues/2102\n \tvar readyState = document.readyState;\n \tif (readyState === 'loading' || readyState === 'interactive' && script && script.defer) {\n \t\tdocument.addEventListener('DOMContentLoaded', highlightAutomaticallyCallback);\n \t} else {\n \t\tif (window.requestAnimationFrame) {\n \t\t\twindow.requestAnimationFrame(highlightAutomaticallyCallback);\n \t\t} else {\n \t\t\twindow.setTimeout(highlightAutomaticallyCallback, 16);\n \t\t}\n \t}\n }\n\n return _;\n\n })(_self);\n\n if ( module.exports) {\n \tmodule.exports = Prism;\n }\n\n // hack for components to work correctly in node.js\n if (typeof commonjsGlobal !== 'undefined') {\n \tcommonjsGlobal.Prism = Prism;\n }\n\n\n /* **********************************************\n Begin prism-markup.js\n ********************************************** */\n\n Prism.languages.markup = {\n \t'comment': /<!--[\\s\\S]*?-->/,\n \t'prolog': /<\\?[\\s\\S]+?\\?>/,\n \t'doctype': {\n \t\tpattern: /<!DOCTYPE(?:[^>\"'[\\]]|\"[^\"]*\"|'[^']*')+(?:\\[(?:(?!<!--)[^\"'\\]]|\"[^\"]*\"|'[^']*'|<!--[\\s\\S]*?-->)*\\]\\s*)?>/i,\n \t\tgreedy: true\n \t},\n \t'cdata': /<!\\[CDATA\\[[\\s\\S]*?]]>/i,\n \t'tag': {\n \t\tpattern: /<\\/?(?!\\d)[^\\s>\\/=$<%]+(?:\\s(?:\\s*[^\\s>\\/=]+(?:\\s*=\\s*(?:\"[^\"]*\"|'[^']*'|[^\\s'\">=]+(?=[\\s>]))|(?=[\\s/>])))+)?\\s*\\/?>/i,\n \t\tgreedy: true,\n \t\tinside: {\n \t\t\t'tag': {\n \t\t\t\tpattern: /^<\\/?[^\\s>\\/]+/i,\n \t\t\t\tinside: {\n \t\t\t\t\t'punctuation': /^<\\/?/,\n \t\t\t\t\t'namespace': /^[^\\s>\\/:]+:/\n \t\t\t\t}\n \t\t\t},\n \t\t\t'attr-value': {\n \t\t\t\tpattern: /=\\s*(?:\"[^\"]*\"|'[^']*'|[^\\s'\">=]+)/i,\n \t\t\t\tinside: {\n \t\t\t\t\t'punctuation': [\n \t\t\t\t\t\t/^=/,\n \t\t\t\t\t\t{\n \t\t\t\t\t\t\tpattern: /^(\\s*)[\"']|[\"']$/,\n \t\t\t\t\t\t\tlookbehind: true\n \t\t\t\t\t\t}\n \t\t\t\t\t]\n \t\t\t\t}\n \t\t\t},\n \t\t\t'punctuation': /\\/?>/,\n \t\t\t'attr-name': {\n \t\t\t\tpattern: /[^\\s>\\/]+/,\n \t\t\t\tinside: {\n \t\t\t\t\t'namespace': /^[^\\s>\\/:]+:/\n \t\t\t\t}\n \t\t\t}\n\n \t\t}\n \t},\n \t'entity': /&#?[\\da-z]{1,8};/i\n };\n\n Prism.languages.markup['tag'].inside['attr-value'].inside['entity'] =\n \tPrism.languages.markup['entity'];\n\n // Plugin to make entity title show the real entity, idea by Roman Komarov\n Prism.hooks.add('wrap', function(env) {\n\n \tif (env.type === 'entity') {\n \t\tenv.attributes['title'] = env.content.replace(/&/, '&');\n \t}\n });\n\n Object.defineProperty(Prism.languages.markup.tag, 'addInlined', {\n \t/**\n \t * Adds an inlined language to markup.\n \t *\n \t * An example of an inlined language is CSS with `<style>` tags.\n \t *\n \t * @param {string} tagName The name of the tag that contains the inlined language. This name will be treated as\n \t * case insensitive.\n \t * @param {string} lang The language key.\n \t * @example\n \t * addInlined('style', 'css');\n \t */\n \tvalue: function addInlined(tagName, lang) {\n \t\tvar includedCdataInside = {};\n \t\tincludedCdataInside['language-' + lang] = {\n \t\t\tpattern: /(^<!\\[CDATA\\[)[\\s\\S]+?(?=\\]\\]>$)/i,\n \t\t\tlookbehind: true,\n \t\t\tinside: Prism.languages[lang]\n \t\t};\n \t\tincludedCdataInside['cdata'] = /^<!\\[CDATA\\[|\\]\\]>$/i;\n\n \t\tvar inside = {\n \t\t\t'included-cdata': {\n \t\t\t\tpattern: /<!\\[CDATA\\[[\\s\\S]*?\\]\\]>/i,\n \t\t\t\tinside: includedCdataInside\n \t\t\t}\n \t\t};\n \t\tinside['language-' + lang] = {\n \t\t\tpattern: /[\\s\\S]+/,\n \t\t\tinside: Prism.languages[lang]\n \t\t};\n\n \t\tvar def = {};\n \t\tdef[tagName] = {\n \t\t\tpattern: RegExp(/(<__[\\s\\S]*?>)(?:<!\\[CDATA\\[[\\s\\S]*?\\]\\]>\\s*|[\\s\\S])*?(?=<\\/__>)/.source.replace(/__/g, function () { return tagName; }), 'i'),\n \t\t\tlookbehind: true,\n \t\t\tgreedy: true,\n \t\t\tinside: inside\n \t\t};\n\n \t\tPrism.languages.insertBefore('markup', 'cdata', def);\n \t}\n });\n\n Prism.languages.xml = Prism.languages.extend('markup', {});\n Prism.languages.html = Prism.languages.markup;\n Prism.languages.mathml = Prism.languages.markup;\n Prism.languages.svg = Prism.languages.markup;\n\n\n /* **********************************************\n Begin prism-css.js\n ********************************************** */\n\n (function (Prism) {\n\n \tvar string = /(\"|')(?:\\\\(?:\\r\\n|[\\s\\S])|(?!\\1)[^\\\\\\r\\n])*\\1/;\n\n \tPrism.languages.css = {\n \t\t'comment': /\\/\\*[\\s\\S]*?\\*\\//,\n \t\t'atrule': {\n \t\t\tpattern: /@[\\w-]+[\\s\\S]*?(?:;|(?=\\s*\\{))/,\n \t\t\tinside: {\n \t\t\t\t'rule': /^@[\\w-]+/,\n \t\t\t\t'selector-function-argument': {\n \t\t\t\t\tpattern: /(\\bselector\\s*\\((?!\\s*\\))\\s*)(?:[^()]|\\((?:[^()]|\\([^()]*\\))*\\))+?(?=\\s*\\))/,\n \t\t\t\t\tlookbehind: true,\n \t\t\t\t\talias: 'selector'\n \t\t\t\t}\n \t\t\t\t// See rest below\n \t\t\t}\n \t\t},\n \t\t'url': {\n \t\t\tpattern: RegExp('url\\\\((?:' + string.source + '|[^\\n\\r()]*)\\\\)', 'i'),\n \t\t\tgreedy: true,\n \t\t\tinside: {\n \t\t\t\t'function': /^url/i,\n \t\t\t\t'punctuation': /^\\(|\\)$/\n \t\t\t}\n \t\t},\n \t\t'selector': RegExp('[^{}\\\\s](?:[^{};\"\\']|' + string.source + ')*?(?=\\\\s*\\\\{)'),\n \t\t'string': {\n \t\t\tpattern: string,\n \t\t\tgreedy: true\n \t\t},\n \t\t'property': /[-_a-z\\xA0-\\uFFFF][-\\w\\xA0-\\uFFFF]*(?=\\s*:)/i,\n \t\t'important': /!important\\b/i,\n \t\t'function': /[-a-z0-9]+(?=\\()/i,\n \t\t'punctuation': /[(){};:,]/\n \t};\n\n \tPrism.languages.css['atrule'].inside.rest = Prism.languages.css;\n\n \tvar markup = Prism.languages.markup;\n \tif (markup) {\n \t\tmarkup.tag.addInlined('style', 'css');\n\n \t\tPrism.languages.insertBefore('inside', 'attr-value', {\n \t\t\t'style-attr': {\n \t\t\t\tpattern: /\\s*style=(\"|')(?:\\\\[\\s\\S]|(?!\\1)[^\\\\])*\\1/i,\n \t\t\t\tinside: {\n \t\t\t\t\t'attr-name': {\n \t\t\t\t\t\tpattern: /^\\s*style/i,\n \t\t\t\t\t\tinside: markup.tag.inside\n \t\t\t\t\t},\n \t\t\t\t\t'punctuation': /^\\s*=\\s*['\"]|['\"]\\s*$/,\n \t\t\t\t\t'attr-value': {\n \t\t\t\t\t\tpattern: /.+/i,\n \t\t\t\t\t\tinside: Prism.languages.css\n \t\t\t\t\t}\n \t\t\t\t},\n \t\t\t\talias: 'language-css'\n \t\t\t}\n \t\t}, markup.tag);\n \t}\n\n }(Prism));\n\n\n /* **********************************************\n Begin prism-clike.js\n ********************************************** */\n\n Prism.languages.clike = {\n \t'comment': [\n \t\t{\n \t\t\tpattern: /(^|[^\\\\])\\/\\*[\\s\\S]*?(?:\\*\\/|$)/,\n \t\t\tlookbehind: true\n \t\t},\n \t\t{\n \t\t\tpattern: /(^|[^\\\\:])\\/\\/.*/,\n \t\t\tlookbehind: true,\n \t\t\tgreedy: true\n \t\t}\n \t],\n \t'string': {\n \t\tpattern: /([\"'])(?:\\\\(?:\\r\\n|[\\s\\S])|(?!\\1)[^\\\\\\r\\n])*\\1/,\n \t\tgreedy: true\n \t},\n \t'class-name': {\n \t\tpattern: /(\\b(?:class|interface|extends|implements|trait|instanceof|new)\\s+|\\bcatch\\s+\\()[\\w.\\\\]+/i,\n \t\tlookbehind: true,\n \t\tinside: {\n \t\t\t'punctuation': /[.\\\\]/\n \t\t}\n \t},\n \t'keyword': /\\b(?:if|else|while|do|for|return|in|instanceof|function|new|try|throw|catch|finally|null|break|continue)\\b/,\n \t'boolean': /\\b(?:true|false)\\b/,\n \t'function': /\\w+(?=\\()/,\n \t'number': /\\b0x[\\da-f]+\\b|(?:\\b\\d+\\.?\\d*|\\B\\.\\d+)(?:e[+-]?\\d+)?/i,\n \t'operator': /[<>]=?|[!=]=?=?|--?|\\+\\+?|&&?|\\|\\|?|[?*/~^%]/,\n \t'punctuation': /[{}[\\];(),.:]/\n };\n\n\n /* **********************************************\n Begin prism-javascript.js\n ********************************************** */\n\n Prism.languages.javascript = Prism.languages.extend('clike', {\n \t'class-name': [\n \t\tPrism.languages.clike['class-name'],\n \t\t{\n \t\t\tpattern: /(^|[^$\\w\\xA0-\\uFFFF])[_$A-Z\\xA0-\\uFFFF][$\\w\\xA0-\\uFFFF]*(?=\\.(?:prototype|constructor))/,\n \t\t\tlookbehind: true\n \t\t}\n \t],\n \t'keyword': [\n \t\t{\n \t\t\tpattern: /((?:^|})\\s*)(?:catch|finally)\\b/,\n \t\t\tlookbehind: true\n \t\t},\n \t\t{\n \t\t\tpattern: /(^|[^.]|\\.\\.\\.\\s*)\\b(?:as|async(?=\\s*(?:function\\b|\\(|[$\\w\\xA0-\\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\\b/,\n \t\t\tlookbehind: true\n \t\t},\n \t],\n \t'number': /\\b(?:(?:0[xX](?:[\\dA-Fa-f](?:_[\\dA-Fa-f])?)+|0[bB](?:[01](?:_[01])?)+|0[oO](?:[0-7](?:_[0-7])?)+)n?|(?:\\d(?:_\\d)?)+n|NaN|Infinity)\\b|(?:\\b(?:\\d(?:_\\d)?)+\\.?(?:\\d(?:_\\d)?)*|\\B\\.(?:\\d(?:_\\d)?)+)(?:[Ee][+-]?(?:\\d(?:_\\d)?)+)?/,\n \t// Allow for all non-ASCII characters (See http://stackoverflow.com/a/2008444)\n \t'function': /#?[_$a-zA-Z\\xA0-\\uFFFF][$\\w\\xA0-\\uFFFF]*(?=\\s*(?:\\.\\s*(?:apply|bind|call)\\s*)?\\()/,\n \t'operator': /--|\\+\\+|\\*\\*=?|=>|&&|\\|\\||[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\\.{3}|\\?[.?]?|[~:]/\n });\n\n Prism.languages.javascript['class-name'][0].pattern = /(\\b(?:class|interface|extends|implements|instanceof|new)\\s+)[\\w.\\\\]+/;\n\n Prism.languages.insertBefore('javascript', 'keyword', {\n \t'regex': {\n \t\tpattern: /((?:^|[^$\\w\\xA0-\\uFFFF.\"'\\])\\s])\\s*)\\/(?:\\[(?:[^\\]\\\\\\r\\n]|\\\\.)*]|\\\\.|[^/\\\\\\[\\r\\n])+\\/[gimyus]{0,6}(?=(?:\\s|\\/\\*[\\s\\S]*?\\*\\/)*(?:$|[\\r\\n,.;:})\\]]|\\/\\/))/,\n \t\tlookbehind: true,\n \t\tgreedy: true\n \t},\n \t// This must be declared before keyword because we use \"function\" inside the look-forward\n \t'function-variable': {\n \t\tpattern: /#?[_$a-zA-Z\\xA0-\\uFFFF][$\\w\\xA0-\\uFFFF]*(?=\\s*[=:]\\s*(?:async\\s*)?(?:\\bfunction\\b|(?:\\((?:[^()]|\\([^()]*\\))*\\)|[_$a-zA-Z\\xA0-\\uFFFF][$\\w\\xA0-\\uFFFF]*)\\s*=>))/,\n \t\talias: 'function'\n \t},\n \t'parameter': [\n \t\t{\n \t\t\tpattern: /(function(?:\\s+[_$A-Za-z\\xA0-\\uFFFF][$\\w\\xA0-\\uFFFF]*)?\\s*\\(\\s*)(?!\\s)(?:[^()]|\\([^()]*\\))+?(?=\\s*\\))/,\n \t\t\tlookbehind: true,\n \t\t\tinside: Prism.languages.javascript\n \t\t},\n \t\t{\n \t\t\tpattern: /[_$a-z\\xA0-\\uFFFF][$\\w\\xA0-\\uFFFF]*(?=\\s*=>)/i,\n \t\t\tinside: Prism.languages.javascript\n \t\t},\n \t\t{\n \t\t\tpattern: /(\\(\\s*)(?!\\s)(?:[^()]|\\([^()]*\\))+?(?=\\s*\\)\\s*=>)/,\n \t\t\tlookbehind: true,\n \t\t\tinside: Prism.languages.javascript\n \t\t},\n \t\t{\n \t\t\tpattern: /((?:\\b|\\s|^)(?!(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)(?![$\\w\\xA0-\\uFFFF]))(?:[_$A-Za-z\\xA0-\\uFFFF][$\\w\\xA0-\\uFFFF]*\\s*)\\(\\s*)(?!\\s)(?:[^()]|\\([^()]*\\))+?(?=\\s*\\)\\s*\\{)/,\n \t\t\tlookbehind: true,\n \t\t\tinside: Prism.languages.javascript\n \t\t}\n \t],\n \t'constant': /\\b[A-Z](?:[A-Z_]|\\dx?)*\\b/\n });\n\n Prism.languages.insertBefore('javascript', 'string', {\n \t'template-string': {\n \t\tpattern: /`(?:\\\\[\\s\\S]|\\${(?:[^{}]|{(?:[^{}]|{[^}]*})*})+}|(?!\\${)[^\\\\`])*`/,\n \t\tgreedy: true,\n \t\tinside: {\n \t\t\t'template-punctuation': {\n \t\t\t\tpattern: /^`|`$/,\n \t\t\t\talias: 'string'\n \t\t\t},\n \t\t\t'interpolation': {\n \t\t\t\tpattern: /((?:^|[^\\\\])(?:\\\\{2})*)\\${(?:[^{}]|{(?:[^{}]|{[^}]*})*})+}/,\n \t\t\t\tlookbehind: true,\n \t\t\t\tinside: {\n \t\t\t\t\t'interpolation-punctuation': {\n \t\t\t\t\t\tpattern: /^\\${|}$/,\n \t\t\t\t\t\talias: 'punctuation'\n \t\t\t\t\t},\n \t\t\t\t\trest: Prism.languages.javascript\n \t\t\t\t}\n \t\t\t},\n \t\t\t'string': /[\\s\\S]+/\n \t\t}\n \t}\n });\n\n if (Prism.languages.markup) {\n \tPrism.languages.markup.tag.addInlined('script', 'javascript');\n }\n\n Prism.languages.js = Prism.languages.javascript;\n\n\n /* **********************************************\n Begin prism-file-highlight.js\n ********************************************** */\n\n (function () {\n \tif (typeof self === 'undefined' || !self.Prism || !self.document || !document.querySelector) {\n \t\treturn;\n \t}\n\n \t/**\n \t * @param {Element} [container=document]\n \t */\n \tself.Prism.fileHighlight = function(container) {\n \t\tcontainer = container || document;\n\n \t\tvar Extensions = {\n \t\t\t'js': 'javascript',\n \t\t\t'py': 'python',\n \t\t\t'rb': 'ruby',\n \t\t\t'ps1': 'powershell',\n \t\t\t'psm1': 'powershell',\n \t\t\t'sh': 'bash',\n \t\t\t'bat': 'batch',\n \t\t\t'h': 'c',\n \t\t\t'tex': 'latex'\n \t\t};\n\n \t\tArray.prototype.slice.call(container.querySelectorAll('pre[data-src]')).forEach(function (pre) {\n \t\t\t// ignore if already loaded\n \t\t\tif (pre.hasAttribute('data-src-loaded')) {\n \t\t\t\treturn;\n \t\t\t}\n\n \t\t\t// load current\n \t\t\tvar src = pre.getAttribute('data-src');\n\n \t\t\tvar language, parent = pre;\n \t\t\tvar lang = /\\blang(?:uage)?-([\\w-]+)\\b/i;\n \t\t\twhile (parent && !lang.test(parent.className)) {\n \t\t\t\tparent = parent.parentNode;\n \t\t\t}\n\n \t\t\tif (parent) {\n \t\t\t\tlanguage = (pre.className.match(lang) || [, ''])[1];\n \t\t\t}\n\n \t\t\tif (!language) {\n \t\t\t\tvar extension = (src.match(/\\.(\\w+)$/) || [, ''])[1];\n \t\t\t\tlanguage = Extensions[extension] || extension;\n \t\t\t}\n\n \t\t\tvar code = document.createElement('code');\n \t\t\tcode.className = 'language-' + language;\n\n \t\t\tpre.textContent = '';\n\n \t\t\tcode.textContent = 'Loading…';\n\n \t\t\tpre.appendChild(code);\n\n \t\t\tvar xhr = new XMLHttpRequest();\n\n \t\t\txhr.open('GET', src, true);\n\n \t\t\txhr.onreadystatechange = function () {\n \t\t\t\tif (xhr.readyState == 4) {\n\n \t\t\t\t\tif (xhr.status < 400 && xhr.responseText) {\n \t\t\t\t\t\tcode.textContent = xhr.responseText;\n\n \t\t\t\t\t\tPrism.highlightElement(code);\n \t\t\t\t\t\t// mark as loaded\n \t\t\t\t\t\tpre.setAttribute('data-src-loaded', '');\n \t\t\t\t\t}\n \t\t\t\t\telse if (xhr.status >= 400) {\n \t\t\t\t\t\tcode.textContent = '✖ Error ' + xhr.status + ' while fetching file: ' + xhr.statusText;\n \t\t\t\t\t}\n \t\t\t\t\telse {\n \t\t\t\t\t\tcode.textContent = '✖ Error: File does not exist or is empty';\n \t\t\t\t\t}\n \t\t\t\t}\n \t\t\t};\n\n \t\t\txhr.send(null);\n \t\t});\n \t};\n\n \tdocument.addEventListener('DOMContentLoaded', function () {\n \t\t// execute inside handler, for dropping Event as argument\n \t\tself.Prism.fileHighlight();\n \t});\n\n })();\n });\n\n Prism.languages.python = {\n \t'comment': {\n \t\tpattern: /(^|[^\\\\])#.*/,\n \t\tlookbehind: true\n \t},\n \t'string-interpolation': {\n \t\tpattern: /(?:f|rf|fr)(?:(\"\"\"|''')[\\s\\S]+?\\1|(\"|')(?:\\\\.|(?!\\2)[^\\\\\\r\\n])*\\2)/i,\n \t\tgreedy: true,\n \t\tinside: {\n \t\t\t'interpolation': {\n \t\t\t\t// \"{\" <expression> <optional \"!s\", \"!r\", or \"!a\"> <optional \":\" format specifier> \"}\"\n \t\t\t\tpattern: /((?:^|[^{])(?:{{)*){(?!{)(?:[^{}]|{(?!{)(?:[^{}]|{(?!{)(?:[^{}])+})+})+}/,\n \t\t\t\tlookbehind: true,\n \t\t\t\tinside: {\n \t\t\t\t\t'format-spec': {\n \t\t\t\t\t\tpattern: /(:)[^:(){}]+(?=}$)/,\n \t\t\t\t\t\tlookbehind: true\n \t\t\t\t\t},\n \t\t\t\t\t'conversion-option': {\n \t\t\t\t\t\tpattern: //,\n \t\t\t\t\t\talias: 'punctuation'\n \t\t\t\t\t},\n \t\t\t\t\trest: null\n \t\t\t\t}\n \t\t\t},\n \t\t\t'string': /[\\s\\S]+/\n \t\t}\n \t},\n \t'triple-quoted-string': {\n \t\tpattern: /(?:[rub]|rb|br)?(\"\"\"|''')[\\s\\S]+?\\1/i,\n \t\tgreedy: true,\n \t\talias: 'string'\n \t},\n \t'string': {\n \t\tpattern: /(?:[rub]|rb|br)?(\"|')(?:\\\\.|(?!\\1)[^\\\\\\r\\n])*\\1/i,\n \t\tgreedy: true\n \t},\n \t'function': {\n \t\tpattern: /((?:^|\\s)def[ \\t]+)[a-zA-Z_]\\w*(?=\\s*\\()/g,\n \t\tlookbehind: true\n \t},\n \t'class-name': {\n \t\tpattern: /(\\bclass\\s+)\\w+/i,\n \t\tlookbehind: true\n \t},\n \t'decorator': {\n \t\tpattern: /(^\\s*)@\\w+(?:\\.\\w+)*/im,\n \t\tlookbehind: true,\n \t\talias: ['annotation', 'punctuation'],\n \t\tinside: {\n \t\t\t'punctuation': /\\./\n \t\t}\n \t},\n \t'keyword': /\\b(?:and|as|assert|async|await|break|class|continue|def|del|elif|else|except|exec|finally|for|from|global|if|import|in|is|lambda|nonlocal|not|or|pass|print|raise|return|try|while|with|yield)\\b/,\n \t'builtin': /\\b(?:__import__|abs|all|any|apply|ascii|basestring|bin|bool|buffer|bytearray|bytes|callable|chr|classmethod|cmp|coerce|compile|complex|delattr|dict|dir|divmod|enumerate|eval|execfile|file|filter|float|format|frozenset|getattr|globals|hasattr|hash|help|hex|id|input|int|intern|isinstance|issubclass|iter|len|list|locals|long|map|max|memoryview|min|next|object|oct|open|ord|pow|property|range|raw_input|reduce|reload|repr|reversed|round|set|setattr|slice|sorted|staticmethod|str|sum|super|tuple|type|unichr|unicode|vars|xrange|zip)\\b/,\n \t'boolean': /\\b(?:True|False|None)\\b/,\n \t'number': /(?:\\b(?=\\d)|\\B(?=\\.))(?:0[bo])?(?:(?:\\d|0x[\\da-f])[\\da-f]*\\.?\\d*|\\.\\d+)(?:e[+-]?\\d+)?j?\\b/i,\n \t'operator': /[-+%=]=?|!=|\\*\\*?=?|\\/\\/?=?|<[<=>]?|>[=>]?|[&|^~]/,\n \t'punctuation': /[{}[\\];(),.:]/\n };\n\n Prism.languages.python['string-interpolation'].inside['interpolation'].inside.rest = Prism.languages.python;\n\n Prism.languages.py = Prism.languages.python;\n\n Prism.languages.clike = {\n \t'comment': [\n \t\t{\n \t\t\tpattern: /(^|[^\\\\])\\/\\*[\\s\\S]*?(?:\\*\\/|$)/,\n \t\t\tlookbehind: true\n \t\t},\n \t\t{\n \t\t\tpattern: /(^|[^\\\\:])\\/\\/.*/,\n \t\t\tlookbehind: true,\n \t\t\tgreedy: true\n \t\t}\n \t],\n \t'string': {\n \t\tpattern: /([\"'])(?:\\\\(?:\\r\\n|[\\s\\S])|(?!\\1)[^\\\\\\r\\n])*\\1/,\n \t\tgreedy: true\n \t},\n \t'class-name': {\n \t\tpattern: /(\\b(?:class|interface|extends|implements|trait|instanceof|new)\\s+|\\bcatch\\s+\\()[\\w.\\\\]+/i,\n \t\tlookbehind: true,\n \t\tinside: {\n \t\t\t'punctuation': /[.\\\\]/\n \t\t}\n \t},\n \t'keyword': /\\b(?:if|else|while|do|for|return|in|instanceof|function|new|try|throw|catch|finally|null|break|continue)\\b/,\n \t'boolean': /\\b(?:true|false)\\b/,\n \t'function': /\\w+(?=\\()/,\n \t'number': /\\b0x[\\da-f]+\\b|(?:\\b\\d+\\.?\\d*|\\B\\.\\d+)(?:e[+-]?\\d+)?/i,\n \t'operator': /[<>]=?|[!=]=?=?|--?|\\+\\+?|&&?|\\|\\|?|[?*/~^%]/,\n \t'punctuation': /[{}[\\];(),.:]/\n };\n\n Prism.languages.lua = {\n \t'comment': /^#!.+|--(?:\\[(=*)\\[[\\s\\S]*?\\]\\1\\]|.*)/m,\n \t// \\z may be used to skip the following space\n \t'string': {\n \t\tpattern: /([\"'])(?:(?!\\1)[^\\\\\\r\\n]|\\\\z(?:\\r\\n|\\s)|\\\\(?:\\r\\n|[\\s\\S]))*\\1|\\[(=*)\\[[\\s\\S]*?\\]\\2\\]/,\n \t\tgreedy: true\n \t},\n \t'number': /\\b0x[a-f\\d]+\\.?[a-f\\d]*(?:p[+-]?\\d+)?\\b|\\b\\d+(?:\\.\\B|\\.?\\d*(?:e[+-]?\\d+)?\\b)|\\B\\.\\d+(?:e[+-]?\\d+)?\\b/i,\n \t'keyword': /\\b(?:and|break|do|else|elseif|end|false|for|function|goto|if|in|local|nil|not|or|repeat|return|then|true|until|while)\\b/,\n \t'function': /(?!\\d)\\w+(?=\\s*(?:[({]))/,\n \t'operator': [\n \t\t/[-+*%^&|#]|\\/\\/?|<[<=]?|>[>=]?|[=~]=?/,\n \t\t{\n \t\t\t// Match \"..\" but don't break \"...\"\n \t\t\tpattern: /(^|[^.])\\.\\.(?!\\.)/,\n \t\t\tlookbehind: true\n \t\t}\n \t],\n \t'punctuation': /[\\[\\](){},;]|\\.+|:+/\n };\n\n (function(Prism) {\n \t// $ set | grep '^[A-Z][^[:space:]]*=' | cut -d= -f1 | tr '\\n' '|'\n \t// + LC_ALL, RANDOM, REPLY, SECONDS.\n \t// + make sure PS1..4 are here as they are not always set,\n \t// - some useless things.\n \tvar envVars = '\\\\b(?:BASH|BASHOPTS|BASH_ALIASES|BASH_ARGC|BASH_ARGV|BASH_CMDS|BASH_COMPLETION_COMPAT_DIR|BASH_LINENO|BASH_REMATCH|BASH_SOURCE|BASH_VERSINFO|BASH_VERSION|COLORTERM|COLUMNS|COMP_WORDBREAKS|DBUS_SESSION_BUS_ADDRESS|DEFAULTS_PATH|DESKTOP_SESSION|DIRSTACK|DISPLAY|EUID|GDMSESSION|GDM_LANG|GNOME_KEYRING_CONTROL|GNOME_KEYRING_PID|GPG_AGENT_INFO|GROUPS|HISTCONTROL|HISTFILE|HISTFILESIZE|HISTSIZE|HOME|HOSTNAME|HOSTTYPE|IFS|INSTANCE|JOB|LANG|LANGUAGE|LC_ADDRESS|LC_ALL|LC_IDENTIFICATION|LC_MEASUREMENT|LC_MONETARY|LC_NAME|LC_NUMERIC|LC_PAPER|LC_TELEPHONE|LC_TIME|LESSCLOSE|LESSOPEN|LINES|LOGNAME|LS_COLORS|MACHTYPE|MAILCHECK|MANDATORY_PATH|NO_AT_BRIDGE|OLDPWD|OPTERR|OPTIND|ORBIT_SOCKETDIR|OSTYPE|PAPERSIZE|PATH|PIPESTATUS|PPID|PS1|PS2|PS3|PS4|PWD|RANDOM|REPLY|SECONDS|SELINUX_INIT|SESSION|SESSIONTYPE|SESSION_MANAGER|SHELL|SHELLOPTS|SHLVL|SSH_AUTH_SOCK|TERM|UID|UPSTART_EVENTS|UPSTART_INSTANCE|UPSTART_JOB|UPSTART_SESSION|USER|WINDOWID|XAUTHORITY|XDG_CONFIG_DIRS|XDG_CURRENT_DESKTOP|XDG_DATA_DIRS|XDG_GREETER_DATA_DIR|XDG_MENU_PREFIX|XDG_RUNTIME_DIR|XDG_SEAT|XDG_SEAT_PATH|XDG_SESSION_DESKTOP|XDG_SESSION_ID|XDG_SESSION_PATH|XDG_SESSION_TYPE|XDG_VTNR|XMODIFIERS)\\\\b';\n \tvar insideString = {\n \t\t'environment': {\n \t\t\tpattern: RegExp(\"\\\\$\" + envVars),\n \t\t\talias: 'constant'\n \t\t},\n \t\t'variable': [\n \t\t\t// [0]: Arithmetic Environment\n \t\t\t{\n \t\t\t\tpattern: /\\$?\\(\\([\\s\\S]+?\\)\\)/,\n \t\t\t\tgreedy: true,\n \t\t\t\tinside: {\n \t\t\t\t\t// If there is a $ sign at the beginning highlight $(( and )) as variable\n \t\t\t\t\t'variable': [\n \t\t\t\t\t\t{\n \t\t\t\t\t\t\tpattern: /(^\\$\\(\\([\\s\\S]+)\\)\\)/,\n \t\t\t\t\t\t\tlookbehind: true\n \t\t\t\t\t\t},\n \t\t\t\t\t\t/^\\$\\(\\(/\n \t\t\t\t\t],\n \t\t\t\t\t'number': /\\b0x[\\dA-Fa-f]+\\b|(?:\\b\\d+\\.?\\d*|\\B\\.\\d+)(?:[Ee]-?\\d+)?/,\n \t\t\t\t\t// Operators according to https://www.gnu.org/software/bash/manual/bashref.html#Shell-Arithmetic\n \t\t\t\t\t'operator': /--?|-=|\\+\\+?|\\+=|!=?|~|\\*\\*?|\\*=|\\/=?|%=?|<<=?|>>=?|<=?|>=?|==?|&&?|&=|\\^=?|\\|\\|?|\\|=|\\?|:/,\n \t\t\t\t\t// If there is no $ sign at the beginning highlight (( and )) as punctuation\n \t\t\t\t\t'punctuation': /\\(\\(?|\\)\\)?|,|;/\n \t\t\t\t}\n \t\t\t},\n \t\t\t// [1]: Command Substitution\n \t\t\t{\n \t\t\t\tpattern: /\\$\\((?:\\([^)]+\\)|[^()])+\\)|`[^`]+`/,\n \t\t\t\tgreedy: true,\n \t\t\t\tinside: {\n \t\t\t\t\t'variable': /^\\$\\(|^`|\\)$|`$/\n \t\t\t\t}\n \t\t\t},\n \t\t\t// [2]: Brace expansion\n \t\t\t{\n \t\t\t\tpattern: /\\$\\{[^}]+\\}/,\n \t\t\t\tgreedy: true,\n \t\t\t\tinside: {\n \t\t\t\t\t'operator': /:[-=?+]?|[!\\/]|##?|%%?|\\^\\^?|,,?/,\n \t\t\t\t\t'punctuation': /[\\[\\]]/,\n \t\t\t\t\t'environment': {\n \t\t\t\t\t\tpattern: RegExp(\"(\\\\{)\" + envVars),\n \t\t\t\t\t\tlookbehind: true,\n \t\t\t\t\t\talias: 'constant'\n \t\t\t\t\t}\n \t\t\t\t}\n \t\t\t},\n \t\t\t/\\$(?:\\w+|[#?*!@$])/\n \t\t],\n \t\t// Escape sequences from echo and printf's manuals, and escaped quotes.\n \t\t'entity': /\\\\(?:[abceEfnrtv\\\\\"]|O?[0-7]{1,3}|x[0-9a-fA-F]{1,2}|u[0-9a-fA-F]{4}|U[0-9a-fA-F]{8})/\n \t};\n\n \tPrism.languages.bash = {\n \t\t'shebang': {\n \t\t\tpattern: /^#!\\s*\\/.*/,\n \t\t\talias: 'important'\n \t\t},\n \t\t'comment': {\n \t\t\tpattern: /(^|[^\"{\\\\$])#.*/,\n \t\t\tlookbehind: true\n \t\t},\n \t\t'function-name': [\n \t\t\t// a) function foo {\n \t\t\t// b) foo() {\n \t\t\t// c) function foo() {\n \t\t\t// but not “foo {”\n \t\t\t{\n \t\t\t\t// a) and c)\n \t\t\t\tpattern: /(\\bfunction\\s+)\\w+(?=(?:\\s*\\(?:\\s*\\))?\\s*\\{)/,\n \t\t\t\tlookbehind: true,\n \t\t\t\talias: 'function'\n \t\t\t},\n \t\t\t{\n \t\t\t\t// b)\n \t\t\t\tpattern: /\\b\\w+(?=\\s*\\(\\s*\\)\\s*\\{)/,\n \t\t\t\talias: 'function'\n \t\t\t}\n \t\t],\n \t\t// Highlight variable names as variables in for and select beginnings.\n \t\t'for-or-select': {\n \t\t\tpattern: /(\\b(?:for|select)\\s+)\\w+(?=\\s+in\\s)/,\n \t\t\talias: 'variable',\n \t\t\tlookbehind: true\n \t\t},\n \t\t// Highlight variable names as variables in the left-hand part\n \t\t// of assignments (“=” and “+=”).\n \t\t'assign-left': {\n \t\t\tpattern: /(^|[\\s;|&]|[<>]\\()\\w+(?=\\+?=)/,\n \t\t\tinside: {\n \t\t\t\t'environment': {\n \t\t\t\t\tpattern: RegExp(\"(^|[\\\\s;|&]|[<>]\\\\()\" + envVars),\n \t\t\t\t\tlookbehind: true,\n \t\t\t\t\talias: 'constant'\n \t\t\t\t}\n \t\t\t},\n \t\t\talias: 'variable',\n \t\t\tlookbehind: true\n \t\t},\n \t\t'string': [\n \t\t\t// Support for Here-documents https://en.wikipedia.org/wiki/Here_document\n \t\t\t{\n \t\t\t\tpattern: /((?:^|[^<])<<-?\\s*)(\\w+?)\\s*(?:\\r?\\n|\\r)[\\s\\S]*?(?:\\r?\\n|\\r)\\2/,\n \t\t\t\tlookbehind: true,\n \t\t\t\tgreedy: true,\n \t\t\t\tinside: insideString\n \t\t\t},\n \t\t\t// Here-document with quotes around the tag\n \t\t\t// → No expansion (so no “inside”).\n \t\t\t{\n \t\t\t\tpattern: /((?:^|[^<])<<-?\\s*)([\"'])(\\w+)\\2\\s*(?:\\r?\\n|\\r)[\\s\\S]*?(?:\\r?\\n|\\r)\\3/,\n \t\t\t\tlookbehind: true,\n \t\t\t\tgreedy: true\n \t\t\t},\n \t\t\t// “Normal” string\n \t\t\t{\n \t\t\t\tpattern: /(^|[^\\\\](?:\\\\\\\\)*)([\"'])(?:\\\\[\\s\\S]|\\$\\([^)]+\\)|`[^`]+`|(?!\\2)[^\\\\])*\\2/,\n \t\t\t\tlookbehind: true,\n \t\t\t\tgreedy: true,\n \t\t\t\tinside: insideString\n \t\t\t}\n \t\t],\n \t\t'environment': {\n \t\t\tpattern: RegExp(\"\\\\$?\" + envVars),\n \t\t\talias: 'constant'\n \t\t},\n \t\t'variable': insideString.variable,\n \t\t'function': {\n \t\t\tpattern: /(^|[\\s;|&]|[<>]\\()(?:add|apropos|apt|aptitude|apt-cache|apt-get|aspell|automysqlbackup|awk|basename|bash|bc|bconsole|bg|bzip2|cal|cat|cfdisk|chgrp|chkconfig|chmod|chown|chroot|cksum|clear|cmp|column|comm|cp|cron|crontab|csplit|curl|cut|date|dc|dd|ddrescue|debootstrap|df|diff|diff3|dig|dir|dircolors|dirname|dirs|dmesg|du|egrep|eject|env|ethtool|expand|expect|expr|fdformat|fdisk|fg|fgrep|file|find|fmt|fold|format|free|fsck|ftp|fuser|gawk|git|gparted|grep|groupadd|groupdel|groupmod|groups|grub-mkconfig|gzip|halt|head|hg|history|host|hostname|htop|iconv|id|ifconfig|ifdown|ifup|import|install|ip|jobs|join|kill|killall|less|link|ln|locate|logname|logrotate|look|lpc|lpr|lprint|lprintd|lprintq|lprm|ls|lsof|lynx|make|man|mc|mdadm|mkconfig|mkdir|mke2fs|mkfifo|mkfs|mkisofs|mknod|mkswap|mmv|more|most|mount|mtools|mtr|mutt|mv|nano|nc|netstat|nice|nl|nohup|notify-send|npm|nslookup|op|open|parted|passwd|paste|pathchk|ping|pkill|pnpm|popd|pr|printcap|printenv|ps|pushd|pv|quota|quotacheck|quotactl|ram|rar|rcp|reboot|remsync|rename|renice|rev|rm|rmdir|rpm|rsync|scp|screen|sdiff|sed|sendmail|seq|service|sftp|sh|shellcheck|shuf|shutdown|sleep|slocate|sort|split|ssh|stat|strace|su|sudo|sum|suspend|swapon|sync|tac|tail|tar|tee|time|timeout|top|touch|tr|traceroute|tsort|tty|umount|uname|unexpand|uniq|units|unrar|unshar|unzip|update-grub|uptime|useradd|userdel|usermod|users|uudecode|uuencode|v|vdir|vi|vim|virsh|vmstat|wait|watch|wc|wget|whereis|which|who|whoami|write|xargs|xdg-open|yarn|yes|zenity|zip|zsh|zypper)(?=$|[)\\s;|&])/,\n \t\t\tlookbehind: true\n \t\t},\n \t\t'keyword': {\n \t\t\tpattern: /(^|[\\s;|&]|[<>]\\()(?:if|then|else|elif|fi|for|while|in|case|esac|function|select|do|done|until)(?=$|[)\\s;|&])/,\n \t\t\tlookbehind: true\n \t\t},\n \t\t// https://www.gnu.org/software/bash/manual/html_node/Shell-Builtin-Commands.html\n \t\t'builtin': {\n \t\t\tpattern: /(^|[\\s;|&]|[<>]\\()(?:\\.|:|break|cd|continue|eval|exec|exit|export|getopts|hash|pwd|readonly|return|shift|test|times|trap|umask|unset|alias|bind|builtin|caller|command|declare|echo|enable|help|let|local|logout|mapfile|printf|read|readarray|source|type|typeset|ulimit|unalias|set|shopt)(?=$|[)\\s;|&])/,\n \t\t\tlookbehind: true,\n \t\t\t// Alias added to make those easier to distinguish from strings.\n \t\t\talias: 'class-name'\n \t\t},\n \t\t'boolean': {\n \t\t\tpattern: /(^|[\\s;|&]|[<>]\\()(?:true|false)(?=$|[)\\s;|&])/,\n \t\t\tlookbehind: true\n \t\t},\n \t\t'file-descriptor': {\n \t\t\tpattern: /\\B&\\d\\b/,\n \t\t\talias: 'important'\n \t\t},\n \t\t'operator': {\n \t\t\t// Lots of redirections here, but not just that.\n \t\t\tpattern: /\\d?<>|>\\||\\+=|==?|!=?|=~|<<[<-]?|[&\\d]?>>|\\d?[<>]&?|&[>&]?|\\|[&|]?|<=?|>=?/,\n \t\t\tinside: {\n \t\t\t\t'file-descriptor': {\n \t\t\t\t\tpattern: /^\\d/,\n \t\t\t\t\talias: 'important'\n \t\t\t\t}\n \t\t\t}\n \t\t},\n \t\t'punctuation': /\\$?\\(\\(?|\\)\\)?|\\.\\.|[{}[\\];\\\\]/,\n \t\t'number': {\n \t\t\tpattern: /(^|\\s)(?:[1-9]\\d*|0)(?:[.,]\\d+)?\\b/,\n \t\t\tlookbehind: true\n \t\t}\n \t};\n\n \t/* Patterns in command substitution. */\n \tvar toBeCopied = [\n \t\t'comment',\n \t\t'function-name',\n \t\t'for-or-select',\n \t\t'assign-left',\n \t\t'string',\n \t\t'environment',\n \t\t'function',\n \t\t'keyword',\n \t\t'builtin',\n \t\t'boolean',\n \t\t'file-descriptor',\n \t\t'operator',\n \t\t'punctuation',\n \t\t'number'\n \t];\n \tvar inside = insideString.variable[1].inside;\n \tfor(var i = 0; i < toBeCopied.length; i++) {\n \t\tinside[toBeCopied[i]] = Prism.languages.bash[toBeCopied[i]];\n \t}\n\n \tPrism.languages.shell = Prism.languages.bash;\n })(Prism);\n\n Prism.languages.go = Prism.languages.extend('clike', {\n \t'keyword': /\\b(?:break|case|chan|const|continue|default|defer|else|fallthrough|for|func|go(?:to)?|if|import|interface|map|package|range|return|select|struct|switch|type|var)\\b/,\n \t'builtin': /\\b(?:bool|byte|complex(?:64|128)|error|float(?:32|64)|rune|string|u?int(?:8|16|32|64)?|uintptr|append|cap|close|complex|copy|delete|imag|len|make|new|panic|print(?:ln)?|real|recover)\\b/,\n \t'boolean': /\\b(?:_|iota|nil|true|false)\\b/,\n \t'operator': /[*\\/%^!=]=?|\\+[=+]?|-[=-]?|\\|[=|]?|&(?:=|&|\\^=?)?|>(?:>=?|=)?|<(?:<=?|=|-)?|:=|\\.\\.\\./,\n \t'number': /(?:\\b0x[a-f\\d]+|(?:\\b\\d+\\.?\\d*|\\B\\.\\d+)(?:e[-+]?\\d+)?)i?/i,\n \t'string': {\n \t\tpattern: /([\"'`])(?:\\\\[\\s\\S]|(?!\\1)[^\\\\])*\\1/,\n \t\tgreedy: true\n \t}\n });\n delete Prism.languages.go['class-name'];\n\n (function (Prism) {\n\n \t// Allow only one line break\n \tvar inner = /(?:\\\\.|[^\\\\\\n\\r]|(?:\\n|\\r\\n?)(?!\\n|\\r\\n?))/.source;\n\n \t/**\n \t * This function is intended for the creation of the bold or italic pattern.\n \t *\n \t * This also adds a lookbehind group to the given pattern to ensure that the pattern is not backslash-escaped.\n \t *\n \t * _Note:_ Keep in mind that this adds a capturing group.\n \t *\n \t * @param {string} pattern\n \t * @param {boolean} starAlternative Whether to also add an alternative where all `_`s are replaced with `*`s.\n \t * @returns {RegExp}\n \t */\n \tfunction createInline(pattern, starAlternative) {\n \t\tpattern = pattern.replace(/<inner>/g, function () { return inner; });\n \t\tif (starAlternative) {\n \t\t\tpattern = pattern + '|' + pattern.replace(/_/g, '\\\\*');\n \t\t}\n \t\treturn RegExp(/((?:^|[^\\\\])(?:\\\\{2})*)/.source + '(?:' + pattern + ')');\n \t}\n\n\n \tvar tableCell = /(?:\\\\.|``.+?``|`[^`\\r\\n]+`|[^\\\\|\\r\\n`])+/.source;\n \tvar tableRow = /\\|?__(?:\\|__)+\\|?(?:(?:\\n|\\r\\n?)|$)/.source.replace(/__/g, function () { return tableCell; });\n \tvar tableLine = /\\|?[ \\t]*:?-{3,}:?[ \\t]*(?:\\|[ \\t]*:?-{3,}:?[ \\t]*)+\\|?(?:\\n|\\r\\n?)/.source;\n\n\n \tPrism.languages.markdown = Prism.languages.extend('markup', {});\n \tPrism.languages.insertBefore('markdown', 'prolog', {\n \t\t'blockquote': {\n \t\t\t// > ...\n \t\t\tpattern: /^>(?:[\\t ]*>)*/m,\n \t\t\talias: 'punctuation'\n \t\t},\n \t\t'table': {\n \t\t\tpattern: RegExp('^' + tableRow + tableLine + '(?:' + tableRow + ')*', 'm'),\n \t\t\tinside: {\n \t\t\t\t'table-data-rows': {\n \t\t\t\t\tpattern: RegExp('^(' + tableRow + tableLine + ')(?:' + tableRow + ')*$'),\n \t\t\t\t\tlookbehind: true,\n \t\t\t\t\tinside: {\n \t\t\t\t\t\t'table-data': {\n \t\t\t\t\t\t\tpattern: RegExp(tableCell),\n \t\t\t\t\t\t\tinside: Prism.languages.markdown\n \t\t\t\t\t\t},\n \t\t\t\t\t\t'punctuation': /\\|/\n \t\t\t\t\t}\n \t\t\t\t},\n \t\t\t\t'table-line': {\n \t\t\t\t\tpattern: RegExp('^(' + tableRow + ')' + tableLine + '$'),\n \t\t\t\t\tlookbehind: true,\n \t\t\t\t\tinside: {\n \t\t\t\t\t\t'punctuation': /\\||:?-{3,}:?/\n \t\t\t\t\t}\n \t\t\t\t},\n \t\t\t\t'table-header-row': {\n \t\t\t\t\tpattern: RegExp('^' + tableRow + '$'),\n \t\t\t\t\tinside: {\n \t\t\t\t\t\t'table-header': {\n \t\t\t\t\t\t\tpattern: RegExp(tableCell),\n \t\t\t\t\t\t\talias: 'important',\n \t\t\t\t\t\t\tinside: Prism.languages.markdown\n \t\t\t\t\t\t},\n \t\t\t\t\t\t'punctuation': /\\|/\n \t\t\t\t\t}\n \t\t\t\t}\n \t\t\t}\n \t\t},\n \t\t'code': [\n \t\t\t{\n \t\t\t\t// Prefixed by 4 spaces or 1 tab and preceded by an empty line\n \t\t\t\tpattern: /((?:^|\\n)[ \\t]*\\n|(?:^|\\r\\n?)[ \\t]*\\r\\n?)(?: {4}|\\t).+(?:(?:\\n|\\r\\n?)(?: {4}|\\t).+)*/,\n \t\t\t\tlookbehind: true,\n \t\t\t\talias: 'keyword'\n \t\t\t},\n \t\t\t{\n \t\t\t\t// `code`\n \t\t\t\t// ``code``\n \t\t\t\tpattern: /``.+?``|`[^`\\r\\n]+`/,\n \t\t\t\talias: 'keyword'\n \t\t\t},\n \t\t\t{\n \t\t\t\t// ```optional language\n \t\t\t\t// code block\n \t\t\t\t// ```\n \t\t\t\tpattern: /^```[\\s\\S]*?^```$/m,\n \t\t\t\tgreedy: true,\n \t\t\t\tinside: {\n \t\t\t\t\t'code-block': {\n \t\t\t\t\t\tpattern: /^(```.*(?:\\n|\\r\\n?))[\\s\\S]+?(?=(?:\\n|\\r\\n?)^```$)/m,\n \t\t\t\t\t\tlookbehind: true\n \t\t\t\t\t},\n \t\t\t\t\t'code-language': {\n \t\t\t\t\t\tpattern: /^(```).+/,\n \t\t\t\t\t\tlookbehind: true\n \t\t\t\t\t},\n \t\t\t\t\t'punctuation': /```/\n \t\t\t\t}\n \t\t\t}\n \t\t],\n \t\t'title': [\n \t\t\t{\n \t\t\t\t// title 1\n \t\t\t\t// =======\n\n \t\t\t\t// title 2\n \t\t\t\t// -------\n \t\t\t\tpattern: /\\S.*(?:\\n|\\r\\n?)(?:==+|--+)(?=[ \\t]*$)/m,\n \t\t\t\talias: 'important',\n \t\t\t\tinside: {\n \t\t\t\t\tpunctuation: /==+$|--+$/\n \t\t\t\t}\n \t\t\t},\n \t\t\t{\n \t\t\t\t// # title 1\n \t\t\t\t// ###### title 6\n \t\t\t\tpattern: /(^\\s*)#+.+/m,\n \t\t\t\tlookbehind: true,\n \t\t\t\talias: 'important',\n \t\t\t\tinside: {\n \t\t\t\t\tpunctuation: /^#+|#+$/\n \t\t\t\t}\n \t\t\t}\n \t\t],\n \t\t'hr': {\n \t\t\t// ***\n \t\t\t// ---\n \t\t\t// * * *\n \t\t\t// -----------\n \t\t\tpattern: /(^\\s*)([*-])(?:[\\t ]*\\2){2,}(?=\\s*$)/m,\n \t\t\tlookbehind: true,\n \t\t\talias: 'punctuation'\n \t\t},\n \t\t'list': {\n \t\t\t// * item\n \t\t\t// + item\n \t\t\t// - item\n \t\t\t// 1. item\n \t\t\tpattern: /(^\\s*)(?:[*+-]|\\d+\\.)(?=[\\t ].)/m,\n \t\t\tlookbehind: true,\n \t\t\talias: 'punctuation'\n \t\t},\n \t\t'url-reference': {\n \t\t\t// [id]: http://example.com \"Optional title\"\n \t\t\t// [id]: http://example.com 'Optional title'\n \t\t\t// [id]: http://example.com (Optional title)\n \t\t\t// [id]: <http://example.com> \"Optional title\"\n \t\t\tpattern: /!?\\[[^\\]]+\\]:[\\t ]+(?:\\S+|<(?:\\\\.|[^>\\\\])+>)(?:[\\t ]+(?:\"(?:\\\\.|[^\"\\\\])*\"|'(?:\\\\.|[^'\\\\])*'|\\((?:\\\\.|[^)\\\\])*\\)))?/,\n \t\t\tinside: {\n \t\t\t\t'variable': {\n \t\t\t\t\tpattern: /^(!?\\[)[^\\]]+/,\n \t\t\t\t\tlookbehind: true\n \t\t\t\t},\n \t\t\t\t'string': /(?:\"(?:\\\\.|[^\"\\\\])*\"|'(?:\\\\.|[^'\\\\])*'|\\((?:\\\\.|[^)\\\\])*\\))$/,\n \t\t\t\t'punctuation': /^[\\[\\]!:]|[<>]/\n \t\t\t},\n \t\t\talias: 'url'\n \t\t},\n \t\t'bold': {\n \t\t\t// **strong**\n \t\t\t// __strong__\n\n \t\t\t// allow one nested instance of italic text using the same delimiter\n \t\t\tpattern: createInline(/__(?:(?!_)<inner>|_(?:(?!_)<inner>)+_)+__/.source, true),\n \t\t\tlookbehind: true,\n \t\t\tgreedy: true,\n \t\t\tinside: {\n \t\t\t\t'content': {\n \t\t\t\t\tpattern: /(^..)[\\s\\S]+(?=..$)/,\n \t\t\t\t\tlookbehind: true,\n \t\t\t\t\tinside: {} // see below\n \t\t\t\t},\n \t\t\t\t'punctuation': /\\*\\*|__/\n \t\t\t}\n \t\t},\n \t\t'italic': {\n \t\t\t// *em*\n \t\t\t// _em_\n\n \t\t\t// allow one nested instance of bold text using the same delimiter\n \t\t\tpattern: createInline(/_(?:(?!_)<inner>|__(?:(?!_)<inner>)+__)+_/.source, true),\n \t\t\tlookbehind: true,\n \t\t\tgreedy: true,\n \t\t\tinside: {\n \t\t\t\t'content': {\n \t\t\t\t\tpattern: /(^.)[\\s\\S]+(?=.$)/,\n \t\t\t\t\tlookbehind: true,\n \t\t\t\t\tinside: {} // see below\n \t\t\t\t},\n \t\t\t\t'punctuation': /[*_]/\n \t\t\t}\n \t\t},\n \t\t'strike': {\n \t\t\t// ~~strike through~~\n \t\t\t// ~strike~\n \t\t\tpattern: createInline(/(~~?)(?:(?!~)<inner>)+?\\2/.source, false),\n \t\t\tlookbehind: true,\n \t\t\tgreedy: true,\n \t\t\tinside: {\n \t\t\t\t'content': {\n \t\t\t\t\tpattern: /(^~~?)[\\s\\S]+(?=\\1$)/,\n \t\t\t\t\tlookbehind: true,\n \t\t\t\t\tinside: {} // see below\n \t\t\t\t},\n \t\t\t\t'punctuation': /~~?/\n \t\t\t}\n \t\t},\n \t\t'url': {\n \t\t\t// [example](http://example.com \"Optional title\")\n \t\t\t// [example][id]\n \t\t\t// [example] [id]\n \t\t\tpattern: createInline(/!?\\[(?:(?!\\])<inner>)+\\](?:\\([^\\s)]+(?:[\\t ]+\"(?:\\\\.|[^\"\\\\])*\")?\\)| ?\\[(?:(?!\\])<inner>)+\\])/.source, false),\n \t\t\tlookbehind: true,\n \t\t\tgreedy: true,\n \t\t\tinside: {\n \t\t\t\t'variable': {\n \t\t\t\t\tpattern: /(\\[)[^\\]]+(?=\\]$)/,\n \t\t\t\t\tlookbehind: true\n \t\t\t\t},\n \t\t\t\t'content': {\n \t\t\t\t\tpattern: /(^!?\\[)[^\\]]+(?=\\])/,\n \t\t\t\t\tlookbehind: true,\n \t\t\t\t\tinside: {} // see below\n \t\t\t\t},\n \t\t\t\t'string': {\n \t\t\t\t\tpattern: /\"(?:\\\\.|[^\"\\\\])*\"(?=\\)$)/\n \t\t\t\t}\n \t\t\t}\n \t\t}\n \t});\n\n \t['url', 'bold', 'italic', 'strike'].forEach(function (token) {\n \t\t['url', 'bold', 'italic', 'strike'].forEach(function (inside) {\n \t\t\tif (token !== inside) {\n \t\t\t\tPrism.languages.markdown[token].inside.content.inside[inside] = Prism.languages.markdown[inside];\n \t\t\t}\n \t\t});\n \t});\n\n \tPrism.hooks.add('after-tokenize', function (env) {\n \t\tif (env.language !== 'markdown' && env.language !== 'md') {\n \t\t\treturn;\n \t\t}\n\n \t\tfunction walkTokens(tokens) {\n \t\t\tif (!tokens || typeof tokens === 'string') {\n \t\t\t\treturn;\n \t\t\t}\n\n \t\t\tfor (var i = 0, l = tokens.length; i < l; i++) {\n \t\t\t\tvar token = tokens[i];\n\n \t\t\t\tif (token.type !== 'code') {\n \t\t\t\t\twalkTokens(token.content);\n \t\t\t\t\tcontinue;\n \t\t\t\t}\n\n \t\t\t\t/*\n \t\t\t\t * Add the correct `language-xxxx` class to this code block. Keep in mind that the `code-language` token\n \t\t\t\t * is optional. But the grammar is defined so that there is only one case we have to handle:\n \t\t\t\t *\n \t\t\t\t * token.content = [\n \t\t\t\t * <span class=\"punctuation\">```</span>,\n \t\t\t\t * <span class=\"code-language\">xxxx</span>,\n \t\t\t\t * '\\n', // exactly one new lines (\\r or \\n or \\r\\n)\n \t\t\t\t * <span class=\"code-block\">...</span>,\n \t\t\t\t * '\\n', // exactly one new lines again\n \t\t\t\t * <span class=\"punctuation\">```</span>\n \t\t\t\t * ];\n \t\t\t\t */\n\n \t\t\t\tvar codeLang = token.content[1];\n \t\t\t\tvar codeBlock = token.content[3];\n\n \t\t\t\tif (codeLang && codeBlock &&\n \t\t\t\t\tcodeLang.type === 'code-language' && codeBlock.type === 'code-block' &&\n \t\t\t\t\ttypeof codeLang.content === 'string') {\n\n \t\t\t\t\t// this might be a language that Prism does not support\n\n \t\t\t\t\t// do some replacements to support C++, C#, and F#\n \t\t\t\t\tvar lang = codeLang.content.replace(/\\b#/g, 'sharp').replace(/\\b\\+\\+/g, 'pp');\n \t\t\t\t\t// only use the first word\n \t\t\t\t\tlang = (/[a-z][\\w-]*/i.exec(lang) || [''])[0].toLowerCase();\n \t\t\t\t\tvar alias = 'language-' + lang;\n\n \t\t\t\t\t// add alias\n \t\t\t\t\tif (!codeBlock.alias) {\n \t\t\t\t\t\tcodeBlock.alias = [alias];\n \t\t\t\t\t} else if (typeof codeBlock.alias === 'string') {\n \t\t\t\t\t\tcodeBlock.alias = [codeBlock.alias, alias];\n \t\t\t\t\t} else {\n \t\t\t\t\t\tcodeBlock.alias.push(alias);\n \t\t\t\t\t}\n \t\t\t\t}\n \t\t\t}\n \t\t}\n\n \t\twalkTokens(env.tokens);\n \t});\n\n \tPrism.hooks.add('wrap', function (env) {\n \t\tif (env.type !== 'code-block') {\n \t\t\treturn;\n \t\t}\n\n \t\tvar codeLang = '';\n \t\tfor (var i = 0, l = env.classes.length; i < l; i++) {\n \t\t\tvar cls = env.classes[i];\n \t\t\tvar match = /language-(.+)/.exec(cls);\n \t\t\tif (match) {\n \t\t\t\tcodeLang = match[1];\n \t\t\t\tbreak;\n \t\t\t}\n \t\t}\n\n \t\tvar grammar = Prism.languages[codeLang];\n\n \t\tif (!grammar) {\n \t\t\tif (codeLang && codeLang !== 'none' && Prism.plugins.autoloader) {\n \t\t\t\tvar id = 'md-' + new Date().valueOf() + '-' + Math.floor(Math.random() * 1e16);\n \t\t\t\tenv.attributes['id'] = id;\n\n \t\t\t\tPrism.plugins.autoloader.loadLanguages(codeLang, function () {\n \t\t\t\t\tvar ele = document.getElementById(id);\n \t\t\t\t\tif (ele) {\n \t\t\t\t\t\tele.innerHTML = Prism.highlight(ele.textContent, Prism.languages[codeLang], codeLang);\n \t\t\t\t\t}\n \t\t\t\t});\n \t\t\t}\n \t\t} else {\n \t\t\t// reverse Prism.util.encode\n \t\t\tvar code = env.content.replace(/</g, '<').replace(/&/g, '&');\n\n \t\t\tenv.content = Prism.highlight(code, grammar, codeLang);\n \t\t}\n \t});\n\n \tPrism.languages.md = Prism.languages.markdown;\n\n }(Prism));\n\n Prism.languages.julia= {\n \t'comment': {\n \t\tpattern: /(^|[^\\\\])#.*/,\n \t\tlookbehind: true\n \t},\n \t'string': /(\"\"\"|''')[\\s\\S]+?\\1|(\"|')(?:\\\\.|(?!\\2)[^\\\\\\r\\n])*\\2/,\n \t'keyword' : /\\b(?:abstract|baremodule|begin|bitstype|break|catch|ccall|const|continue|do|else|elseif|end|export|finally|for|function|global|if|immutable|import|importall|in|let|local|macro|module|print|println|quote|return|struct|try|type|typealias|using|while)\\b/,\n \t'boolean' : /\\b(?:true|false)\\b/,\n \t'number' : /(?:\\b(?=\\d)|\\B(?=\\.))(?:0[box])?(?:[\\da-f]+\\.?\\d*|\\.\\d+)(?:[efp][+-]?\\d+)?j?/i,\n \t'operator': /[-+*^%÷&$\\\\]=?|\\/[\\/=]?|!=?=?|\\|[=>]?|<(?:<=?|[=:])?|>(?:=|>>?=?)?|==?=?|[~≠≤≥]/,\n \t'punctuation' : /[{}[\\];(),.:]/,\n \t'constant': /\\b(?:(?:NaN|Inf)(?:16|32|64)?)\\b/\n };\n\n var css = \"/**\\n * prism.js default theme for JavaScript, CSS and HTML\\n * Based on dabblet (http://dabblet.com)\\n * @author Lea Verou\\n */\\n\\ncode[class*=\\\"language-\\\"],\\npre[class*=\\\"language-\\\"] {\\n\\tcolor: black;\\n\\tbackground: none;\\n\\ttext-shadow: 0 1px white;\\n\\tfont-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;\\n\\tfont-size: 1em;\\n\\ttext-align: left;\\n\\twhite-space: pre;\\n\\tword-spacing: normal;\\n\\tword-break: normal;\\n\\tword-wrap: normal;\\n\\tline-height: 1.5;\\n\\n\\t-moz-tab-size: 4;\\n\\t-o-tab-size: 4;\\n\\ttab-size: 4;\\n\\n\\t-webkit-hyphens: none;\\n\\t-moz-hyphens: none;\\n\\t-ms-hyphens: none;\\n\\thyphens: none;\\n}\\n\\npre[class*=\\\"language-\\\"]::-moz-selection, pre[class*=\\\"language-\\\"] ::-moz-selection,\\ncode[class*=\\\"language-\\\"]::-moz-selection, code[class*=\\\"language-\\\"] ::-moz-selection {\\n\\ttext-shadow: none;\\n\\tbackground: #b3d4fc;\\n}\\n\\npre[class*=\\\"language-\\\"]::selection, pre[class*=\\\"language-\\\"] ::selection,\\ncode[class*=\\\"language-\\\"]::selection, code[class*=\\\"language-\\\"] ::selection {\\n\\ttext-shadow: none;\\n\\tbackground: #b3d4fc;\\n}\\n\\n@media print {\\n\\tcode[class*=\\\"language-\\\"],\\n\\tpre[class*=\\\"language-\\\"] {\\n\\t\\ttext-shadow: none;\\n\\t}\\n}\\n\\n/* Code blocks */\\npre[class*=\\\"language-\\\"] {\\n\\tpadding: 1em;\\n\\tmargin: .5em 0;\\n\\toverflow: auto;\\n}\\n\\n:not(pre) > code[class*=\\\"language-\\\"],\\npre[class*=\\\"language-\\\"] {\\n\\tbackground: #f5f2f0;\\n}\\n\\n/* Inline code */\\n:not(pre) > code[class*=\\\"language-\\\"] {\\n\\tpadding: .1em;\\n\\tborder-radius: .3em;\\n\\twhite-space: normal;\\n}\\n\\n.token.comment,\\n.token.prolog,\\n.token.doctype,\\n.token.cdata {\\n\\tcolor: slategray;\\n}\\n\\n.token.punctuation {\\n\\tcolor: #999;\\n}\\n\\n.token.namespace {\\n\\topacity: .7;\\n}\\n\\n.token.property,\\n.token.tag,\\n.token.boolean,\\n.token.number,\\n.token.constant,\\n.token.symbol,\\n.token.deleted {\\n\\tcolor: #905;\\n}\\n\\n.token.selector,\\n.token.attr-name,\\n.token.string,\\n.token.char,\\n.token.builtin,\\n.token.inserted {\\n\\tcolor: #690;\\n}\\n\\n.token.operator,\\n.token.entity,\\n.token.url,\\n.language-css .token.string,\\n.style .token.string {\\n\\tcolor: #9a6e3a;\\n\\tbackground: hsla(0, 0%, 100%, .5);\\n}\\n\\n.token.atrule,\\n.token.attr-value,\\n.token.keyword {\\n\\tcolor: #07a;\\n}\\n\\n.token.function,\\n.token.class-name {\\n\\tcolor: #DD4A68;\\n}\\n\\n.token.regex,\\n.token.important,\\n.token.variable {\\n\\tcolor: #e90;\\n}\\n\\n.token.important,\\n.token.bold {\\n\\tfont-weight: bold;\\n}\\n.token.italic {\\n\\tfont-style: italic;\\n}\\n\\n.token.entity {\\n\\tcursor: help;\\n}\\n\";\n\n // Copyright 2018 The Distill Template Authors\n\n const T$4 = Template('d-code', `\n<style>\n\ncode {\n white-space: nowrap;\n background: rgba(0, 0, 0, 0.04);\n border-radius: 2px;\n padding: 4px 7px;\n font-size: 15px;\n color: rgba(0, 0, 0, 0.6);\n}\n\npre code {\n display: block;\n border-left: 2px solid rgba(0, 0, 0, .1);\n padding: 0 0 0 36px;\n}\n\n${css}\n</style>\n\n<code id=\"code-container\"></code>\n\n`);\n\n class Code extends Mutating(T$4(HTMLElement)) {\n\n renderContent() {\n\n // check if language can be highlighted\n this.languageName = this.getAttribute('language');\n if (!this.languageName) {\n console.warn('You need to provide a language attribute to your <d-code> block to let us know how to highlight your code; e.g.:\\n <d-code language=\"python\">zeros = np.zeros(shape)</d-code>.');\n return;\n }\n const language = prism.languages[this.languageName];\n if (language == undefined) {\n console.warn(`Distill does not yet support highlighting your code block in \"${this.languageName}'.`);\n return;\n }\n\n let content = this.textContent;\n const codeTag = this.shadowRoot.querySelector('#code-container');\n\n if (this.hasAttribute('block')) {\n // normalize the tab indents\n content = content.replace(/\\n/, '');\n const tabs = content.match(/\\s*/);\n content = content.replace(new RegExp('\\n' + tabs, 'g'), '\\n');\n content = content.trim();\n // wrap code block in pre tag if needed\n if (codeTag.parentNode instanceof ShadowRoot) {\n const preTag = document.createElement('pre');\n this.shadowRoot.removeChild(codeTag);\n preTag.appendChild(codeTag);\n this.shadowRoot.appendChild(preTag);\n }\n\n }\n\n codeTag.className = `language-${this.languageName}`;\n codeTag.innerHTML = prism.highlight(content, language);\n }\n\n }\n\n // Copyright 2018 The Distill Template Authors\n\n const T$5 = Template('d-footnote', `\n<style>\n\nd-math[block] {\n display: block;\n}\n\n:host {\n\n}\n\nsup {\n line-height: 1em;\n font-size: 0.75em;\n position: relative;\n top: -.5em;\n vertical-align: baseline;\n}\n\nspan {\n color: hsla(206, 90%, 20%, 0.7);\n cursor: default;\n}\n\n.footnote-container {\n padding: 10px;\n}\n\n</style>\n\n<d-hover-box>\n <div class=\"footnote-container\">\n <slot id=\"slot\"></slot>\n </div>\n</d-hover-box>\n\n<sup>\n <span id=\"fn-\" data-hover-ref=\"\"></span>\n</sup>\n\n`);\n\n class Footnote extends T$5(HTMLElement) {\n\n constructor() {\n super();\n\n const options = {childList: true, characterData: true, subtree: true};\n const observer = new MutationObserver(this.notify);\n observer.observe(this, options);\n }\n\n notify() {\n const options = { detail: this, bubbles: true };\n const event = new CustomEvent('onFootnoteChanged', options);\n document.dispatchEvent(event);\n }\n\n connectedCallback() {\n // listen and notify about changes to slotted content\n // const slot = this.shadowRoot.querySelector('#slot');\n // console.warn(slot.textContent);\n // slot.addEventListener('slotchange', this.notify);\n this.hoverBox = this.root.querySelector('d-hover-box');\n window.customElements.whenDefined('d-hover-box').then(() => {\n this.hoverBox.listen(this);\n });\n // create numeric ID\n Footnote.currentFootnoteId += 1;\n const IdString = Footnote.currentFootnoteId.toString();\n this.root.host.id = 'd-footnote-' + IdString;\n\n // set up hidden hover box\n const id = 'dt-fn-hover-box-' + IdString;\n this.hoverBox.id = id;\n\n // set up visible footnote marker\n const span = this.root.querySelector('#fn-');\n span.setAttribute('id', 'fn-' + IdString);\n span.setAttribute('data-hover-ref', id);\n span.textContent = IdString;\n }\n\n }\n\n Footnote.currentFootnoteId = 0;\n\n // Copyright 2018 The Distill Template Authors\n\n const T$6 = Template('d-footnote-list', `\n<style>\n\nd-footnote-list {\n contain: layout style;\n}\n\nd-footnote-list > * {\n grid-column: text;\n}\n\nd-footnote-list a.footnote-backlink {\n color: rgba(0,0,0,0.3);\n padding-left: 0.5em;\n}\n\n</style>\n\n<h3>Footnotes</h3>\n<ol></ol>\n`, false);\n\n class FootnoteList extends T$6(HTMLElement) {\n\n connectedCallback() {\n super.connectedCallback();\n\n this.list = this.root.querySelector('ol');\n // footnotes list is initially hidden\n this.root.style.display = 'none';\n // look through document and register existing footnotes\n // Store.subscribeTo('footnotes', (footnote) => {\n // this.renderFootnote(footnote);\n // });\n }\n\n // TODO: could optimize this to accept individual footnotes?\n set footnotes(footnotes) {\n this.list.innerHTML = '';\n if (footnotes.length) {\n // ensure footnote list is visible\n this.root.style.display = '';\n\n for (const footnote of footnotes) {\n // construct and append list item to show footnote\n const listItem = document.createElement('li');\n listItem.id = footnote.id + '-listing';\n listItem.innerHTML = footnote.innerHTML;\n\n const backlink = document.createElement('a');\n backlink.setAttribute('class', 'footnote-backlink');\n backlink.setAttribute('target', '_self');\n backlink.textContent = '[↩]';\n backlink.href = '#' + footnote.id;\n\n listItem.appendChild(backlink);\n this.list.appendChild(listItem);\n }\n } else {\n // ensure footnote list is invisible\n this.root.style.display = 'none';\n }\n }\n\n }\n\n // Copyright 2018 The Distill Template Authors\n\n const T$7 = Template('d-hover-box', `\n<style>\n\n:host {\n position: absolute;\n width: 100%;\n left: 0px;\n z-index: 10000;\n display: none;\n white-space: normal\n}\n\n.container {\n position: relative;\n width: 704px;\n max-width: 100vw;\n margin: 0 auto;\n}\n\n.panel {\n position: absolute;\n font-size: 1rem;\n line-height: 1.5em;\n top: 0;\n left: 0;\n width: 100%;\n border: 1px solid rgba(0, 0, 0, 0.1);\n background-color: rgba(250, 250, 250, 0.95);\n box-shadow: 0 0 7px rgba(0, 0, 0, 0.1);\n border-radius: 4px;\n box-sizing: border-box;\n\n backdrop-filter: blur(2px);\n -webkit-backdrop-filter: blur(2px);\n}\n\n</style>\n\n<div class=\"container\">\n <div class=\"panel\">\n <slot></slot>\n </div>\n</div>\n`);\n\n class HoverBox extends T$7(HTMLElement) {\n\n constructor() {\n super();\n }\n\n connectedCallback() {\n\n }\n\n listen(element) {\n // console.log(element)\n this.bindDivEvents(this);\n this.bindTriggerEvents(element);\n // this.style.display = \"block\";\n }\n\n bindDivEvents(element) {\n // For mice, same behavior as hovering on links\n element.addEventListener('mouseover', () => {\n if (!this.visible) this.showAtNode(element);\n this.stopTimeout();\n });\n element.addEventListener('mouseout', () => {\n this.extendTimeout(500);\n });\n // Don't trigger body touchstart event when touching within box\n element.addEventListener('touchstart', (event) => {\n event.stopPropagation();\n }, {passive: true});\n // Close box when touching outside box\n document.body.addEventListener('touchstart', () => {\n this.hide();\n }, {passive: true});\n }\n\n bindTriggerEvents(node) {\n node.addEventListener('mouseover', () => {\n if (!this.visible) {\n this.showAtNode(node);\n }\n this.stopTimeout();\n });\n\n node.addEventListener('mouseout', () => {\n this.extendTimeout(300);\n });\n\n node.addEventListener('touchstart', (event) => {\n if (this.visible) {\n this.hide();\n } else {\n this.showAtNode(node);\n }\n // Don't trigger body touchstart event when touching link\n event.stopPropagation();\n }, {passive: true});\n }\n\n show(position) {\n this.visible = true;\n this.style.display = 'block';\n // 10px extra offset from element\n this.style.top = Math.round(position[1] + 10) + 'px';\n }\n\n showAtNode(node) {\n // https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/offsetTop\n const bbox = node.getBoundingClientRect();\n this.show([node.offsetLeft + bbox.width, node.offsetTop + bbox.height]);\n }\n\n hide() {\n this.visible = false;\n this.style.display = 'none';\n this.stopTimeout();\n }\n\n stopTimeout() {\n if (this.timeout) {\n clearTimeout(this.timeout);\n }\n }\n\n extendTimeout(time) {\n this.stopTimeout();\n this.timeout = setTimeout(() => {\n this.hide();\n }, time);\n }\n\n }\n\n // Copyright 2018 The Distill Template Authors\n //\n // Licensed under the Apache License, Version 2.0 (the \"License\");\n // you may not use this file except in compliance with the License.\n // You may obtain a copy of the License at\n //\n // http://www.apache.org/licenses/LICENSE-2.0\n //\n // Unless required by applicable law or agreed to in writing, software\n // distributed under the License is distributed on an \"AS IS\" BASIS,\n // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n // See the License for the specific language governing permissions and\n // limitations under the License.\n\n class Title extends HTMLElement {\n static get is() { return 'd-title'; }\n }\n\n // Copyright 2018 The Distill Template Authors\n\n const T$8 = Template('d-references', `\n<style>\nd-references {\n display: block;\n}\n</style>\n`, false);\n\n class References extends T$8(HTMLElement) {\n\n }\n\n // Copyright 2018 The Distill Template Authors\n //\n // Licensed under the Apache License, Version 2.0 (the \"License\");\n // you may not use this file except in compliance with the License.\n // You may obtain a copy of the License at\n //\n // http://www.apache.org/licenses/LICENSE-2.0\n //\n // Unless required by applicable law or agreed to in writing, software\n // distributed under the License is distributed on an \"AS IS\" BASIS,\n // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n // See the License for the specific language governing permissions and\n // limitations under the License.\n\n class TOC extends HTMLElement {\n\n static get is() { return 'd-toc'; }\n\n connectedCallback() {\n if (!this.getAttribute('prerendered')) {\n window.onload = () => {\n const article = document.querySelector('d-article');\n const headings = article.querySelectorAll('h2, h3');\n renderTOC(this, headings);\n };\n }\n }\n\n }\n\n function renderTOC(element, headings) {\n\n let ToC =`\n <style>\n\n d-toc {\n contain: layout style;\n display: block;\n }\n\n d-toc ul {\n padding-left: 0;\n }\n\n d-toc ul > ul {\n padding-left: 24px;\n }\n\n d-toc a {\n border-bottom: none;\n text-decoration: none;\n }\n\n </style>\n <nav role=\"navigation\" class=\"table-of-contents\"></nav>\n <h2>Table of contents</h2>\n <ul>`;\n\n for (const el of headings) {\n // should element be included in TOC?\n const isInTitle = el.parentElement.tagName == 'D-TITLE';\n const isException = el.getAttribute('no-toc');\n if (isInTitle || isException) continue;\n // create TOC entry\n const title = el.textContent;\n const link = '#' + el.getAttribute('id');\n\n let newLine = '<li>' + '<a href=\"' + link + '\">' + title + '</a>' + '</li>';\n if (el.tagName == 'H3') {\n newLine = '<ul>' + newLine + '</ul>';\n } else {\n newLine += '<br>';\n }\n ToC += newLine;\n\n }\n\n ToC += '</ul></nav>';\n element.innerHTML = ToC;\n }\n\n // Copyright 2018 The Distill Template Authors\n //\n // Licensed under the Apache License, Version 2.0 (the \"License\");\n // you may not use this file except in compliance with the License.\n // You may obtain a copy of the License at\n //\n // http://www.apache.org/licenses/LICENSE-2.0\n //\n // Unless required by applicable law or agreed to in writing, software\n // distributed under the License is distributed on an \"AS IS\" BASIS,\n // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n // See the License for the specific language governing permissions and\n // limitations under the License.\n\n // Figure\n //\n // d-figure provides a state-machine of visibility events:\n //\n // scroll out of view\n // +----------------+\n // *do work here* | |\n // +----------------+ +-+---------+ +-v---------+\n // | ready +----> onscreen | | offscreen |\n // +----------------+ +---------^-+ +---------+-+\n // | |\n // +----------------+\n // scroll into view\n //\n\n class Figure extends HTMLElement {\n\n static get is() { return 'd-figure'; }\n\n static get readyQueue() {\n if (!Figure._readyQueue) {\n Figure._readyQueue = [];\n }\n return Figure._readyQueue;\n }\n\n static addToReadyQueue(figure) {\n if (Figure.readyQueue.indexOf(figure) === -1) {\n Figure.readyQueue.push(figure);\n Figure.runReadyQueue();\n }\n }\n\n static runReadyQueue() {\n // console.log(\"Checking to run readyQueue, length: \" + Figure.readyQueue.length + \", scrolling: \" + Figure.isScrolling);\n // if (Figure.isScrolling) return;\n // console.log(\"Running ready Queue\");\n const figure = Figure.readyQueue\n .sort((a,b) => a._seenOnScreen - b._seenOnScreen )\n .filter((figure) => !figure._ready)\n .pop();\n if (figure) {\n figure.ready();\n requestAnimationFrame(Figure.runReadyQueue);\n }\n\n }\n\n constructor() {\n super();\n // debugger\n this._ready = false;\n this._onscreen = false;\n this._offscreen = true;\n }\n\n connectedCallback() {\n this.loadsWhileScrolling = this.hasAttribute('loadsWhileScrolling');\n Figure.marginObserver.observe(this);\n Figure.directObserver.observe(this);\n }\n\n disconnectedCallback() {\n Figure.marginObserver.unobserve(this);\n Figure.directObserver.unobserve(this);\n }\n\n // We use two separate observers:\n // One with an extra 1000px margin to warn if the viewpoint gets close,\n // And one for the actual on/off screen events\n\n static get marginObserver() {\n if (!Figure._marginObserver) {\n // if (!('IntersectionObserver' in window)) {\n // throw new Error('no interscetionobbserver!');\n // }\n const viewportHeight = window.innerHeight;\n const margin = Math.floor(2 * viewportHeight);\n const options = {rootMargin: margin + 'px 0px ' + margin + 'px 0px', threshold: 0.01};\n const callback = Figure.didObserveMarginIntersection;\n const observer = new IntersectionObserver(callback, options);\n Figure._marginObserver = observer;\n }\n return Figure._marginObserver;\n }\n\n static didObserveMarginIntersection(entries) {\n for (const entry of entries) {\n const figure = entry.target;\n if (entry.isIntersecting && !figure._ready) {\n Figure.addToReadyQueue(figure);\n }\n }\n }\n\n static get directObserver() {\n if (!Figure._directObserver) {\n Figure._directObserver = new IntersectionObserver(\n Figure.didObserveDirectIntersection, {\n rootMargin: '0px', threshold: [0, 1.0],\n }\n );\n }\n return Figure._directObserver;\n }\n\n static didObserveDirectIntersection(entries) {\n for (const entry of entries) {\n const figure = entry.target;\n if (entry.isIntersecting) {\n figure._seenOnScreen = new Date();\n // if (!figure._ready) { figure.ready(); }\n if (figure._offscreen) { figure.onscreen(); }\n } else {\n if (figure._onscreen) { figure.offscreen(); }\n }\n }\n }\n\n // Notify listeners that registered late, too:\n\n addEventListener(eventName, callback) {\n super.addEventListener(eventName, callback);\n // if we had already dispatched something while presumingly no one was listening, we do so again\n // debugger\n if (eventName === 'ready') {\n if (Figure.readyQueue.indexOf(this) !== -1) {\n this._ready = false;\n Figure.runReadyQueue();\n }\n }\n if (eventName === 'onscreen') {\n this.onscreen();\n }\n }\n\n // Custom Events\n\n ready() {\n // debugger\n this._ready = true;\n Figure.marginObserver.unobserve(this);\n const event = new CustomEvent('ready');\n this.dispatchEvent(event);\n }\n\n onscreen() {\n this._onscreen = true;\n this._offscreen = false;\n const event = new CustomEvent('onscreen');\n this.dispatchEvent(event);\n }\n\n offscreen() {\n this._onscreen = false;\n this._offscreen = true;\n const event = new CustomEvent('offscreen');\n this.dispatchEvent(event);\n }\n\n }\n\n if (typeof window !== 'undefined') {\n\n Figure.isScrolling = false;\n let timeout;\n const resetTimer = () => {\n Figure.isScrolling = true;\n clearTimeout(timeout);\n timeout = setTimeout(() => {\n Figure.isScrolling = false;\n Figure.runReadyQueue();\n }, 500);\n };\n window.addEventListener('scroll', resetTimer, true);\n\n }\n\n // Copyright 2018 The Distill Template Authors\n\n // This overlay is not secure.\n // It is only meant as a social deterrent.\n\n const productionHostname = 'distill.pub';\n const T$9 = Template('d-interstitial', `\n<style>\n\n.overlay {\n position: fixed;\n width: 100%;\n height: 100%;\n top: 0;\n left: 0;\n background: white;\n\n opacity: 1;\n visibility: visible;\n\n display: flex;\n flex-flow: column;\n justify-content: center;\n z-index: 2147483647 /* MaxInt32 */\n\n}\n\n.container {\n position: relative;\n margin-left: auto;\n margin-right: auto;\n max-width: 420px;\n padding: 2em;\n}\n\nh1 {\n text-decoration: underline;\n text-decoration-color: hsl(0,100%,40%);\n -webkit-text-decoration-color: hsl(0,100%,40%);\n margin-bottom: 1em;\n line-height: 1.5em;\n}\n\ninput[type=\"password\"] {\n -webkit-appearance: none;\n -moz-appearance: none;\n appearance: none;\n -webkit-box-shadow: none;\n -moz-box-shadow: none;\n box-shadow: none;\n -webkit-border-radius: none;\n -moz-border-radius: none;\n -ms-border-radius: none;\n -o-border-radius: none;\n border-radius: none;\n outline: none;\n\n font-size: 18px;\n background: none;\n width: 25%;\n padding: 10px;\n border: none;\n border-bottom: solid 2px #999;\n transition: border .3s;\n}\n\ninput[type=\"password\"]:focus {\n border-bottom: solid 2px #333;\n}\n\ninput[type=\"password\"].wrong {\n border-bottom: solid 2px hsl(0,100%,40%);\n}\n\np small {\n color: #888;\n}\n\n.logo {\n position: relative;\n font-size: 1.5em;\n margin-bottom: 3em;\n}\n\n.logo svg {\n width: 36px;\n position: relative;\n top: 6px;\n margin-right: 2px;\n}\n\n.logo svg path {\n fill: none;\n stroke: black;\n stroke-width: 2px;\n}\n\n</style>\n\n<div class=\"overlay\">\n <div class=\"container\">\n <h1>This article is in review.</h1>\n <p>Do not share this URL or the contents of this article. Thank you!</p>\n <input id=\"interstitial-password-input\" type=\"password\" name=\"password\" autofocus/>\n <p><small>Enter the password we shared with you as part of the review process to view the article.</small></p>\n </div>\n</div>\n`);\n\n class Interstitial extends T$9(HTMLElement) {\n\n connectedCallback() {\n if (this.shouldRemoveSelf()) {\n this.parentElement.removeChild(this);\n } else {\n const passwordInput = this.root.querySelector('#interstitial-password-input');\n passwordInput.oninput = (event) => this.passwordChanged(event);\n }\n }\n\n passwordChanged(event) {\n const entered = event.target.value;\n if (entered === this.password) {\n console.log('Correct password entered.');\n this.parentElement.removeChild(this);\n if (typeof(Storage) !== 'undefined') {\n console.log('Saved that correct password was entered.');\n localStorage.setItem(this.localStorageIdentifier(), 'true');\n }\n }\n }\n\n shouldRemoveSelf() {\n // should never be visible in production\n if (window && window.location.hostname === productionHostname) {\n console.warn('Interstitial found on production, hiding it.');\n return true\n }\n // should only have to enter password once\n if (typeof(Storage) !== 'undefined') {\n if (localStorage.getItem(this.localStorageIdentifier()) === 'true') {\n console.log('Loaded that correct password was entered before; skipping interstitial.');\n return true;\n }\n }\n // otherwise, leave visible\n return false;\n }\n\n localStorageIdentifier() {\n const prefix = 'distill-drafts';\n const suffix = 'interstitial-password-correct';\n return prefix + (window ? window.location.pathname : '-') + suffix\n }\n\n }\n\n function ascending(a, b) {\n return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n }\n\n function bisector(compare) {\n if (compare.length === 1) compare = ascendingComparator(compare);\n return {\n left: function(a, x, lo, hi) {\n if (lo == null) lo = 0;\n if (hi == null) hi = a.length;\n while (lo < hi) {\n var mid = lo + hi >>> 1;\n if (compare(a[mid], x) < 0) lo = mid + 1;\n else hi = mid;\n }\n return lo;\n },\n right: function(a, x, lo, hi) {\n if (lo == null) lo = 0;\n if (hi == null) hi = a.length;\n while (lo < hi) {\n var mid = lo + hi >>> 1;\n if (compare(a[mid], x) > 0) hi = mid;\n else lo = mid + 1;\n }\n return lo;\n }\n };\n }\n\n function ascendingComparator(f) {\n return function(d, x) {\n return ascending(f(d), x);\n };\n }\n\n var ascendingBisect = bisector(ascending);\n var bisectRight = ascendingBisect.right;\n\n function range(start, stop, step) {\n start = +start, stop = +stop, step = (n = arguments.length) < 2 ? (stop = start, start = 0, 1) : n < 3 ? 1 : +step;\n\n var i = -1,\n n = Math.max(0, Math.ceil((stop - start) / step)) | 0,\n range = new Array(n);\n\n while (++i < n) {\n range[i] = start + i * step;\n }\n\n return range;\n }\n\n var e10 = Math.sqrt(50),\n e5 = Math.sqrt(10),\n e2 = Math.sqrt(2);\n\n function ticks(start, stop, count) {\n var reverse,\n i = -1,\n n,\n ticks,\n step;\n\n stop = +stop, start = +start, count = +count;\n if (start === stop && count > 0) return [start];\n if (reverse = stop < start) n = start, start = stop, stop = n;\n if ((step = tickIncrement(start, stop, count)) === 0 || !isFinite(step)) return [];\n\n if (step > 0) {\n start = Math.ceil(start / step);\n stop = Math.floor(stop / step);\n ticks = new Array(n = Math.ceil(stop - start + 1));\n while (++i < n) ticks[i] = (start + i) * step;\n } else {\n start = Math.floor(start * step);\n stop = Math.ceil(stop * step);\n ticks = new Array(n = Math.ceil(start - stop + 1));\n while (++i < n) ticks[i] = (start - i) / step;\n }\n\n if (reverse) ticks.reverse();\n\n return ticks;\n }\n\n function tickIncrement(start, stop, count) {\n var step = (stop - start) / Math.max(0, count),\n power = Math.floor(Math.log(step) / Math.LN10),\n error = step / Math.pow(10, power);\n return power >= 0\n ? (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1) * Math.pow(10, power)\n : -Math.pow(10, -power) / (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1);\n }\n\n function tickStep(start, stop, count) {\n var step0 = Math.abs(stop - start) / Math.max(0, count),\n step1 = Math.pow(10, Math.floor(Math.log(step0) / Math.LN10)),\n error = step0 / step1;\n if (error >= e10) step1 *= 10;\n else if (error >= e5) step1 *= 5;\n else if (error >= e2) step1 *= 2;\n return stop < start ? -step1 : step1;\n }\n\n function initRange(domain, range) {\n switch (arguments.length) {\n case 0: break;\n case 1: this.range(domain); break;\n default: this.range(range).domain(domain); break;\n }\n return this;\n }\n\n function define(constructor, factory, prototype) {\n constructor.prototype = factory.prototype = prototype;\n prototype.constructor = constructor;\n }\n\n function extend(parent, definition) {\n var prototype = Object.create(parent.prototype);\n for (var key in definition) prototype[key] = definition[key];\n return prototype;\n }\n\n function Color() {}\n\n var darker = 0.7;\n var brighter = 1 / darker;\n\n var reI = \"\\\\s*([+-]?\\\\d+)\\\\s*\",\n reN = \"\\\\s*([+-]?\\\\d*\\\\.?\\\\d+(?:[eE][+-]?\\\\d+)?)\\\\s*\",\n reP = \"\\\\s*([+-]?\\\\d*\\\\.?\\\\d+(?:[eE][+-]?\\\\d+)?)%\\\\s*\",\n reHex = /^#([0-9a-f]{3,8})$/,\n reRgbInteger = new RegExp(\"^rgb\\\\(\" + [reI, reI, reI] + \"\\\\)$\"),\n reRgbPercent = new RegExp(\"^rgb\\\\(\" + [reP, reP, reP] + \"\\\\)$\"),\n reRgbaInteger = new RegExp(\"^rgba\\\\(\" + [reI, reI, reI, reN] + \"\\\\)$\"),\n reRgbaPercent = new RegExp(\"^rgba\\\\(\" + [reP, reP, reP, reN] + \"\\\\)$\"),\n reHslPercent = new RegExp(\"^hsl\\\\(\" + [reN, reP, reP] + \"\\\\)$\"),\n reHslaPercent = new RegExp(\"^hsla\\\\(\" + [reN, reP, reP, reN] + \"\\\\)$\");\n\n var named = {\n aliceblue: 0xf0f8ff,\n antiquewhite: 0xfaebd7,\n aqua: 0x00ffff,\n aquamarine: 0x7fffd4,\n azure: 0xf0ffff,\n beige: 0xf5f5dc,\n bisque: 0xffe4c4,\n black: 0x000000,\n blanchedalmond: 0xffebcd,\n blue: 0x0000ff,\n blueviolet: 0x8a2be2,\n brown: 0xa52a2a,\n burlywood: 0xdeb887,\n cadetblue: 0x5f9ea0,\n chartreuse: 0x7fff00,\n chocolate: 0xd2691e,\n coral: 0xff7f50,\n cornflowerblue: 0x6495ed,\n cornsilk: 0xfff8dc,\n crimson: 0xdc143c,\n cyan: 0x00ffff,\n darkblue: 0x00008b,\n darkcyan: 0x008b8b,\n darkgoldenrod: 0xb8860b,\n darkgray: 0xa9a9a9,\n darkgreen: 0x006400,\n darkgrey: 0xa9a9a9,\n darkkhaki: 0xbdb76b,\n darkmagenta: 0x8b008b,\n darkolivegreen: 0x556b2f,\n darkorange: 0xff8c00,\n darkorchid: 0x9932cc,\n darkred: 0x8b0000,\n darksalmon: 0xe9967a,\n darkseagreen: 0x8fbc8f,\n darkslateblue: 0x483d8b,\n darkslategray: 0x2f4f4f,\n darkslategrey: 0x2f4f4f,\n darkturquoise: 0x00ced1,\n darkviolet: 0x9400d3,\n deeppink: 0xff1493,\n deepskyblue: 0x00bfff,\n dimgray: 0x696969,\n dimgrey: 0x696969,\n dodgerblue: 0x1e90ff,\n firebrick: 0xb22222,\n floralwhite: 0xfffaf0,\n forestgreen: 0x228b22,\n fuchsia: 0xff00ff,\n gainsboro: 0xdcdcdc,\n ghostwhite: 0xf8f8ff,\n gold: 0xffd700,\n goldenrod: 0xdaa520,\n gray: 0x808080,\n green: 0x008000,\n greenyellow: 0xadff2f,\n grey: 0x808080,\n honeydew: 0xf0fff0,\n hotpink: 0xff69b4,\n indianred: 0xcd5c5c,\n indigo: 0x4b0082,\n ivory: 0xfffff0,\n khaki: 0xf0e68c,\n lavender: 0xe6e6fa,\n lavenderblush: 0xfff0f5,\n lawngreen: 0x7cfc00,\n lemonchiffon: 0xfffacd,\n lightblue: 0xadd8e6,\n lightcoral: 0xf08080,\n lightcyan: 0xe0ffff,\n lightgoldenrodyellow: 0xfafad2,\n lightgray: 0xd3d3d3,\n lightgreen: 0x90ee90,\n lightgrey: 0xd3d3d3,\n lightpink: 0xffb6c1,\n lightsalmon: 0xffa07a,\n lightseagreen: 0x20b2aa,\n lightskyblue: 0x87cefa,\n lightslategray: 0x778899,\n lightslategrey: 0x778899,\n lightsteelblue: 0xb0c4de,\n lightyellow: 0xffffe0,\n lime: 0x00ff00,\n limegreen: 0x32cd32,\n linen: 0xfaf0e6,\n magenta: 0xff00ff,\n maroon: 0x800000,\n mediumaquamarine: 0x66cdaa,\n mediumblue: 0x0000cd,\n mediumorchid: 0xba55d3,\n mediumpurple: 0x9370db,\n mediumseagreen: 0x3cb371,\n mediumslateblue: 0x7b68ee,\n mediumspringgreen: 0x00fa9a,\n mediumturquoise: 0x48d1cc,\n mediumvioletred: 0xc71585,\n midnightblue: 0x191970,\n mintcream: 0xf5fffa,\n mistyrose: 0xffe4e1,\n moccasin: 0xffe4b5,\n navajowhite: 0xffdead,\n navy: 0x000080,\n oldlace: 0xfdf5e6,\n olive: 0x808000,\n olivedrab: 0x6b8e23,\n orange: 0xffa500,\n orangered: 0xff4500,\n orchid: 0xda70d6,\n palegoldenrod: 0xeee8aa,\n palegreen: 0x98fb98,\n paleturquoise: 0xafeeee,\n palevioletred: 0xdb7093,\n papayawhip: 0xffefd5,\n peachpuff: 0xffdab9,\n peru: 0xcd853f,\n pink: 0xffc0cb,\n plum: 0xdda0dd,\n powderblue: 0xb0e0e6,\n purple: 0x800080,\n rebeccapurple: 0x663399,\n red: 0xff0000,\n rosybrown: 0xbc8f8f,\n royalblue: 0x4169e1,\n saddlebrown: 0x8b4513,\n salmon: 0xfa8072,\n sandybrown: 0xf4a460,\n seagreen: 0x2e8b57,\n seashell: 0xfff5ee,\n sienna: 0xa0522d,\n silver: 0xc0c0c0,\n skyblue: 0x87ceeb,\n slateblue: 0x6a5acd,\n slategray: 0x708090,\n slategrey: 0x708090,\n snow: 0xfffafa,\n springgreen: 0x00ff7f,\n steelblue: 0x4682b4,\n tan: 0xd2b48c,\n teal: 0x008080,\n thistle: 0xd8bfd8,\n tomato: 0xff6347,\n turquoise: 0x40e0d0,\n violet: 0xee82ee,\n wheat: 0xf5deb3,\n white: 0xffffff,\n whitesmoke: 0xf5f5f5,\n yellow: 0xffff00,\n yellowgreen: 0x9acd32\n };\n\n define(Color, color, {\n copy: function(channels) {\n return Object.assign(new this.constructor, this, channels);\n },\n displayable: function() {\n return this.rgb().displayable();\n },\n hex: color_formatHex, // Deprecated! Use color.formatHex.\n formatHex: color_formatHex,\n formatHsl: color_formatHsl,\n formatRgb: color_formatRgb,\n toString: color_formatRgb\n });\n\n function color_formatHex() {\n return this.rgb().formatHex();\n }\n\n function color_formatHsl() {\n return hslConvert(this).formatHsl();\n }\n\n function color_formatRgb() {\n return this.rgb().formatRgb();\n }\n\n function color(format) {\n var m, l;\n format = (format + \"\").trim().toLowerCase();\n return (m = reHex.exec(format)) ? (l = m[1].length, m = parseInt(m[1], 16), l === 6 ? rgbn(m) // #ff0000\n : l === 3 ? new Rgb((m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), ((m & 0xf) << 4) | (m & 0xf), 1) // #f00\n : l === 8 ? rgba(m >> 24 & 0xff, m >> 16 & 0xff, m >> 8 & 0xff, (m & 0xff) / 0xff) // #ff000000\n : l === 4 ? rgba((m >> 12 & 0xf) | (m >> 8 & 0xf0), (m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), (((m & 0xf) << 4) | (m & 0xf)) / 0xff) // #f000\n : null) // invalid hex\n : (m = reRgbInteger.exec(format)) ? new Rgb(m[1], m[2], m[3], 1) // rgb(255, 0, 0)\n : (m = reRgbPercent.exec(format)) ? new Rgb(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, 1) // rgb(100%, 0%, 0%)\n : (m = reRgbaInteger.exec(format)) ? rgba(m[1], m[2], m[3], m[4]) // rgba(255, 0, 0, 1)\n : (m = reRgbaPercent.exec(format)) ? rgba(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, m[4]) // rgb(100%, 0%, 0%, 1)\n : (m = reHslPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, 1) // hsl(120, 50%, 50%)\n : (m = reHslaPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, m[4]) // hsla(120, 50%, 50%, 1)\n : named.hasOwnProperty(format) ? rgbn(named[format]) // eslint-disable-line no-prototype-builtins\n : format === \"transparent\" ? new Rgb(NaN, NaN, NaN, 0)\n : null;\n }\n\n function rgbn(n) {\n return new Rgb(n >> 16 & 0xff, n >> 8 & 0xff, n & 0xff, 1);\n }\n\n function rgba(r, g, b, a) {\n if (a <= 0) r = g = b = NaN;\n return new Rgb(r, g, b, a);\n }\n\n function rgbConvert(o) {\n if (!(o instanceof Color)) o = color(o);\n if (!o) return new Rgb;\n o = o.rgb();\n return new Rgb(o.r, o.g, o.b, o.opacity);\n }\n\n function rgb(r, g, b, opacity) {\n return arguments.length === 1 ? rgbConvert(r) : new Rgb(r, g, b, opacity == null ? 1 : opacity);\n }\n\n function Rgb(r, g, b, opacity) {\n this.r = +r;\n this.g = +g;\n this.b = +b;\n this.opacity = +opacity;\n }\n\n define(Rgb, rgb, extend(Color, {\n brighter: function(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n },\n darker: function(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n },\n rgb: function() {\n return this;\n },\n displayable: function() {\n return (-0.5 <= this.r && this.r < 255.5)\n && (-0.5 <= this.g && this.g < 255.5)\n && (-0.5 <= this.b && this.b < 255.5)\n && (0 <= this.opacity && this.opacity <= 1);\n },\n hex: rgb_formatHex, // Deprecated! Use color.formatHex.\n formatHex: rgb_formatHex,\n formatRgb: rgb_formatRgb,\n toString: rgb_formatRgb\n }));\n\n function rgb_formatHex() {\n return \"#\" + hex(this.r) + hex(this.g) + hex(this.b);\n }\n\n function rgb_formatRgb() {\n var a = this.opacity; a = isNaN(a) ? 1 : Math.max(0, Math.min(1, a));\n return (a === 1 ? \"rgb(\" : \"rgba(\")\n + Math.max(0, Math.min(255, Math.round(this.r) || 0)) + \", \"\n + Math.max(0, Math.min(255, Math.round(this.g) || 0)) + \", \"\n + Math.max(0, Math.min(255, Math.round(this.b) || 0))\n + (a === 1 ? \")\" : \", \" + a + \")\");\n }\n\n function hex(value) {\n value = Math.max(0, Math.min(255, Math.round(value) || 0));\n return (value < 16 ? \"0\" : \"\") + value.toString(16);\n }\n\n function hsla(h, s, l, a) {\n if (a <= 0) h = s = l = NaN;\n else if (l <= 0 || l >= 1) h = s = NaN;\n else if (s <= 0) h = NaN;\n return new Hsl(h, s, l, a);\n }\n\n function hslConvert(o) {\n if (o instanceof Hsl) return new Hsl(o.h, o.s, o.l, o.opacity);\n if (!(o instanceof Color)) o = color(o);\n if (!o) return new Hsl;\n if (o instanceof Hsl) return o;\n o = o.rgb();\n var r = o.r / 255,\n g = o.g / 255,\n b = o.b / 255,\n min = Math.min(r, g, b),\n max = Math.max(r, g, b),\n h = NaN,\n s = max - min,\n l = (max + min) / 2;\n if (s) {\n if (r === max) h = (g - b) / s + (g < b) * 6;\n else if (g === max) h = (b - r) / s + 2;\n else h = (r - g) / s + 4;\n s /= l < 0.5 ? max + min : 2 - max - min;\n h *= 60;\n } else {\n s = l > 0 && l < 1 ? 0 : h;\n }\n return new Hsl(h, s, l, o.opacity);\n }\n\n function hsl(h, s, l, opacity) {\n return arguments.length === 1 ? hslConvert(h) : new Hsl(h, s, l, opacity == null ? 1 : opacity);\n }\n\n function Hsl(h, s, l, opacity) {\n this.h = +h;\n this.s = +s;\n this.l = +l;\n this.opacity = +opacity;\n }\n\n define(Hsl, hsl, extend(Color, {\n brighter: function(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Hsl(this.h, this.s, this.l * k, this.opacity);\n },\n darker: function(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Hsl(this.h, this.s, this.l * k, this.opacity);\n },\n rgb: function() {\n var h = this.h % 360 + (this.h < 0) * 360,\n s = isNaN(h) || isNaN(this.s) ? 0 : this.s,\n l = this.l,\n m2 = l + (l < 0.5 ? l : 1 - l) * s,\n m1 = 2 * l - m2;\n return new Rgb(\n hsl2rgb(h >= 240 ? h - 240 : h + 120, m1, m2),\n hsl2rgb(h, m1, m2),\n hsl2rgb(h < 120 ? h + 240 : h - 120, m1, m2),\n this.opacity\n );\n },\n displayable: function() {\n return (0 <= this.s && this.s <= 1 || isNaN(this.s))\n && (0 <= this.l && this.l <= 1)\n && (0 <= this.opacity && this.opacity <= 1);\n },\n formatHsl: function() {\n var a = this.opacity; a = isNaN(a) ? 1 : Math.max(0, Math.min(1, a));\n return (a === 1 ? \"hsl(\" : \"hsla(\")\n + (this.h || 0) + \", \"\n + (this.s || 0) * 100 + \"%, \"\n + (this.l || 0) * 100 + \"%\"\n + (a === 1 ? \")\" : \", \" + a + \")\");\n }\n }));\n\n /* From FvD 13.37, CSS Color Module Level 3 */\n function hsl2rgb(h, m1, m2) {\n return (h < 60 ? m1 + (m2 - m1) * h / 60\n : h < 180 ? m2\n : h < 240 ? m1 + (m2 - m1) * (240 - h) / 60\n : m1) * 255;\n }\n\n var deg2rad = Math.PI / 180;\n var rad2deg = 180 / Math.PI;\n\n // https://observablehq.com/@mbostock/lab-and-rgb\n var K = 18,\n Xn = 0.96422,\n Yn = 1,\n Zn = 0.82521,\n t0 = 4 / 29,\n t1 = 6 / 29,\n t2 = 3 * t1 * t1,\n t3 = t1 * t1 * t1;\n\n function labConvert(o) {\n if (o instanceof Lab) return new Lab(o.l, o.a, o.b, o.opacity);\n if (o instanceof Hcl) return hcl2lab(o);\n if (!(o instanceof Rgb)) o = rgbConvert(o);\n var r = rgb2lrgb(o.r),\n g = rgb2lrgb(o.g),\n b = rgb2lrgb(o.b),\n y = xyz2lab((0.2225045 * r + 0.7168786 * g + 0.0606169 * b) / Yn), x, z;\n if (r === g && g === b) x = z = y; else {\n x = xyz2lab((0.4360747 * r + 0.3850649 * g + 0.1430804 * b) / Xn);\n z = xyz2lab((0.0139322 * r + 0.0971045 * g + 0.7141733 * b) / Zn);\n }\n return new Lab(116 * y - 16, 500 * (x - y), 200 * (y - z), o.opacity);\n }\n\n function lab(l, a, b, opacity) {\n return arguments.length === 1 ? labConvert(l) : new Lab(l, a, b, opacity == null ? 1 : opacity);\n }\n\n function Lab(l, a, b, opacity) {\n this.l = +l;\n this.a = +a;\n this.b = +b;\n this.opacity = +opacity;\n }\n\n define(Lab, lab, extend(Color, {\n brighter: function(k) {\n return new Lab(this.l + K * (k == null ? 1 : k), this.a, this.b, this.opacity);\n },\n darker: function(k) {\n return new Lab(this.l - K * (k == null ? 1 : k), this.a, this.b, this.opacity);\n },\n rgb: function() {\n var y = (this.l + 16) / 116,\n x = isNaN(this.a) ? y : y + this.a / 500,\n z = isNaN(this.b) ? y : y - this.b / 200;\n x = Xn * lab2xyz(x);\n y = Yn * lab2xyz(y);\n z = Zn * lab2xyz(z);\n return new Rgb(\n lrgb2rgb( 3.1338561 * x - 1.6168667 * y - 0.4906146 * z),\n lrgb2rgb(-0.9787684 * x + 1.9161415 * y + 0.0334540 * z),\n lrgb2rgb( 0.0719453 * x - 0.2289914 * y + 1.4052427 * z),\n this.opacity\n );\n }\n }));\n\n function xyz2lab(t) {\n return t > t3 ? Math.pow(t, 1 / 3) : t / t2 + t0;\n }\n\n function lab2xyz(t) {\n return t > t1 ? t * t * t : t2 * (t - t0);\n }\n\n function lrgb2rgb(x) {\n return 255 * (x <= 0.0031308 ? 12.92 * x : 1.055 * Math.pow(x, 1 / 2.4) - 0.055);\n }\n\n function rgb2lrgb(x) {\n return (x /= 255) <= 0.04045 ? x / 12.92 : Math.pow((x + 0.055) / 1.055, 2.4);\n }\n\n function hclConvert(o) {\n if (o instanceof Hcl) return new Hcl(o.h, o.c, o.l, o.opacity);\n if (!(o instanceof Lab)) o = labConvert(o);\n if (o.a === 0 && o.b === 0) return new Hcl(NaN, 0 < o.l && o.l < 100 ? 0 : NaN, o.l, o.opacity);\n var h = Math.atan2(o.b, o.a) * rad2deg;\n return new Hcl(h < 0 ? h + 360 : h, Math.sqrt(o.a * o.a + o.b * o.b), o.l, o.opacity);\n }\n\n function hcl(h, c, l, opacity) {\n return arguments.length === 1 ? hclConvert(h) : new Hcl(h, c, l, opacity == null ? 1 : opacity);\n }\n\n function Hcl(h, c, l, opacity) {\n this.h = +h;\n this.c = +c;\n this.l = +l;\n this.opacity = +opacity;\n }\n\n function hcl2lab(o) {\n if (isNaN(o.h)) return new Lab(o.l, 0, 0, o.opacity);\n var h = o.h * deg2rad;\n return new Lab(o.l, Math.cos(h) * o.c, Math.sin(h) * o.c, o.opacity);\n }\n\n define(Hcl, hcl, extend(Color, {\n brighter: function(k) {\n return new Hcl(this.h, this.c, this.l + K * (k == null ? 1 : k), this.opacity);\n },\n darker: function(k) {\n return new Hcl(this.h, this.c, this.l - K * (k == null ? 1 : k), this.opacity);\n },\n rgb: function() {\n return hcl2lab(this).rgb();\n }\n }));\n\n var A = -0.14861,\n B = +1.78277,\n C = -0.29227,\n D = -0.90649,\n E = +1.97294,\n ED = E * D,\n EB = E * B,\n BC_DA = B * C - D * A;\n\n function cubehelixConvert(o) {\n if (o instanceof Cubehelix) return new Cubehelix(o.h, o.s, o.l, o.opacity);\n if (!(o instanceof Rgb)) o = rgbConvert(o);\n var r = o.r / 255,\n g = o.g / 255,\n b = o.b / 255,\n l = (BC_DA * b + ED * r - EB * g) / (BC_DA + ED - EB),\n bl = b - l,\n k = (E * (g - l) - C * bl) / D,\n s = Math.sqrt(k * k + bl * bl) / (E * l * (1 - l)), // NaN if l=0 or l=1\n h = s ? Math.atan2(k, bl) * rad2deg - 120 : NaN;\n return new Cubehelix(h < 0 ? h + 360 : h, s, l, o.opacity);\n }\n\n function cubehelix(h, s, l, opacity) {\n return arguments.length === 1 ? cubehelixConvert(h) : new Cubehelix(h, s, l, opacity == null ? 1 : opacity);\n }\n\n function Cubehelix(h, s, l, opacity) {\n this.h = +h;\n this.s = +s;\n this.l = +l;\n this.opacity = +opacity;\n }\n\n define(Cubehelix, cubehelix, extend(Color, {\n brighter: function(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Cubehelix(this.h, this.s, this.l * k, this.opacity);\n },\n darker: function(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Cubehelix(this.h, this.s, this.l * k, this.opacity);\n },\n rgb: function() {\n var h = isNaN(this.h) ? 0 : (this.h + 120) * deg2rad,\n l = +this.l,\n a = isNaN(this.s) ? 0 : this.s * l * (1 - l),\n cosh = Math.cos(h),\n sinh = Math.sin(h);\n return new Rgb(\n 255 * (l + a * (A * cosh + B * sinh)),\n 255 * (l + a * (C * cosh + D * sinh)),\n 255 * (l + a * (E * cosh)),\n this.opacity\n );\n }\n }));\n\n function constant(x) {\n return function() {\n return x;\n };\n }\n\n function linear(a, d) {\n return function(t) {\n return a + t * d;\n };\n }\n\n function exponential(a, b, y) {\n return a = Math.pow(a, y), b = Math.pow(b, y) - a, y = 1 / y, function(t) {\n return Math.pow(a + t * b, y);\n };\n }\n\n function gamma(y) {\n return (y = +y) === 1 ? nogamma : function(a, b) {\n return b - a ? exponential(a, b, y) : constant(isNaN(a) ? b : a);\n };\n }\n\n function nogamma(a, b) {\n var d = b - a;\n return d ? linear(a, d) : constant(isNaN(a) ? b : a);\n }\n\n var rgb$1 = (function rgbGamma(y) {\n var color = gamma(y);\n\n function rgb$1(start, end) {\n var r = color((start = rgb(start)).r, (end = rgb(end)).r),\n g = color(start.g, end.g),\n b = color(start.b, end.b),\n opacity = nogamma(start.opacity, end.opacity);\n return function(t) {\n start.r = r(t);\n start.g = g(t);\n start.b = b(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n\n rgb$1.gamma = rgbGamma;\n\n return rgb$1;\n })(1);\n\n function numberArray(a, b) {\n if (!b) b = [];\n var n = a ? Math.min(b.length, a.length) : 0,\n c = b.slice(),\n i;\n return function(t) {\n for (i = 0; i < n; ++i) c[i] = a[i] * (1 - t) + b[i] * t;\n return c;\n };\n }\n\n function isNumberArray(x) {\n return ArrayBuffer.isView(x) && !(x instanceof DataView);\n }\n\n function genericArray(a, b) {\n var nb = b ? b.length : 0,\n na = a ? Math.min(nb, a.length) : 0,\n x = new Array(na),\n c = new Array(nb),\n i;\n\n for (i = 0; i < na; ++i) x[i] = interpolate(a[i], b[i]);\n for (; i < nb; ++i) c[i] = b[i];\n\n return function(t) {\n for (i = 0; i < na; ++i) c[i] = x[i](t);\n return c;\n };\n }\n\n function date(a, b) {\n var d = new Date;\n return a = +a, b = +b, function(t) {\n return d.setTime(a * (1 - t) + b * t), d;\n };\n }\n\n function interpolateNumber(a, b) {\n return a = +a, b = +b, function(t) {\n return a * (1 - t) + b * t;\n };\n }\n\n function object(a, b) {\n var i = {},\n c = {},\n k;\n\n if (a === null || typeof a !== \"object\") a = {};\n if (b === null || typeof b !== \"object\") b = {};\n\n for (k in b) {\n if (k in a) {\n i[k] = interpolate(a[k], b[k]);\n } else {\n c[k] = b[k];\n }\n }\n\n return function(t) {\n for (k in i) c[k] = i[k](t);\n return c;\n };\n }\n\n var reA = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n reB = new RegExp(reA.source, \"g\");\n\n function zero(b) {\n return function() {\n return b;\n };\n }\n\n function one(b) {\n return function(t) {\n return b(t) + \"\";\n };\n }\n\n function string(a, b) {\n var bi = reA.lastIndex = reB.lastIndex = 0, // scan index for next number in b\n am, // current match in a\n bm, // current match in b\n bs, // string preceding current number in b, if any\n i = -1, // index in s\n s = [], // string constants and placeholders\n q = []; // number interpolators\n\n // Coerce inputs to strings.\n a = a + \"\", b = b + \"\";\n\n // Interpolate pairs of numbers in a & b.\n while ((am = reA.exec(a))\n && (bm = reB.exec(b))) {\n if ((bs = bm.index) > bi) { // a string precedes the next number in b\n bs = b.slice(bi, bs);\n if (s[i]) s[i] += bs; // coalesce with previous string\n else s[++i] = bs;\n }\n if ((am = am[0]) === (bm = bm[0])) { // numbers in a & b match\n if (s[i]) s[i] += bm; // coalesce with previous string\n else s[++i] = bm;\n } else { // interpolate non-matching numbers\n s[++i] = null;\n q.push({i: i, x: interpolateNumber(am, bm)});\n }\n bi = reB.lastIndex;\n }\n\n // Add remains of b.\n if (bi < b.length) {\n bs = b.slice(bi);\n if (s[i]) s[i] += bs; // coalesce with previous string\n else s[++i] = bs;\n }\n\n // Special optimization for only a single match.\n // Otherwise, interpolate each of the numbers and rejoin the string.\n return s.length < 2 ? (q[0]\n ? one(q[0].x)\n : zero(b))\n : (b = q.length, function(t) {\n for (var i = 0, o; i < b; ++i) s[(o = q[i]).i] = o.x(t);\n return s.join(\"\");\n });\n }\n\n function interpolate(a, b) {\n var t = typeof b, c;\n return b == null || t === \"boolean\" ? constant(b)\n : (t === \"number\" ? interpolateNumber\n : t === \"string\" ? ((c = color(b)) ? (b = c, rgb$1) : string)\n : b instanceof color ? rgb$1\n : b instanceof Date ? date\n : isNumberArray(b) ? numberArray\n : Array.isArray(b) ? genericArray\n : typeof b.valueOf !== \"function\" && typeof b.toString !== \"function\" || isNaN(b) ? object\n : interpolateNumber)(a, b);\n }\n\n function interpolateRound(a, b) {\n return a = +a, b = +b, function(t) {\n return Math.round(a * (1 - t) + b * t);\n };\n }\n\n function constant$1(x) {\n return function() {\n return x;\n };\n }\n\n function number(x) {\n return +x;\n }\n\n var unit = [0, 1];\n\n function identity(x) {\n return x;\n }\n\n function normalize(a, b) {\n return (b -= (a = +a))\n ? function(x) { return (x - a) / b; }\n : constant$1(isNaN(b) ? NaN : 0.5);\n }\n\n function clamper(a, b) {\n var t;\n if (a > b) t = a, a = b, b = t;\n return function(x) { return Math.max(a, Math.min(b, x)); };\n }\n\n // normalize(a, b)(x) takes a domain value x in [a,b] and returns the corresponding parameter t in [0,1].\n // interpolate(a, b)(t) takes a parameter t in [0,1] and returns the corresponding range value x in [a,b].\n function bimap(domain, range, interpolate) {\n var d0 = domain[0], d1 = domain[1], r0 = range[0], r1 = range[1];\n if (d1 < d0) d0 = normalize(d1, d0), r0 = interpolate(r1, r0);\n else d0 = normalize(d0, d1), r0 = interpolate(r0, r1);\n return function(x) { return r0(d0(x)); };\n }\n\n function polymap(domain, range, interpolate) {\n var j = Math.min(domain.length, range.length) - 1,\n d = new Array(j),\n r = new Array(j),\n i = -1;\n\n // Reverse descending domains.\n if (domain[j] < domain[0]) {\n domain = domain.slice().reverse();\n range = range.slice().reverse();\n }\n\n while (++i < j) {\n d[i] = normalize(domain[i], domain[i + 1]);\n r[i] = interpolate(range[i], range[i + 1]);\n }\n\n return function(x) {\n var i = bisectRight(domain, x, 1, j) - 1;\n return r[i](d[i](x));\n };\n }\n\n function copy(source, target) {\n return target\n .domain(source.domain())\n .range(source.range())\n .interpolate(source.interpolate())\n .clamp(source.clamp())\n .unknown(source.unknown());\n }\n\n function transformer() {\n var domain = unit,\n range = unit,\n interpolate$1 = interpolate,\n transform,\n untransform,\n unknown,\n clamp = identity,\n piecewise,\n output,\n input;\n\n function rescale() {\n var n = Math.min(domain.length, range.length);\n if (clamp !== identity) clamp = clamper(domain[0], domain[n - 1]);\n piecewise = n > 2 ? polymap : bimap;\n output = input = null;\n return scale;\n }\n\n function scale(x) {\n return isNaN(x = +x) ? unknown : (output || (output = piecewise(domain.map(transform), range, interpolate$1)))(transform(clamp(x)));\n }\n\n scale.invert = function(y) {\n return clamp(untransform((input || (input = piecewise(range, domain.map(transform), interpolateNumber)))(y)));\n };\n\n scale.domain = function(_) {\n return arguments.length ? (domain = Array.from(_, number), rescale()) : domain.slice();\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = Array.from(_), rescale()) : range.slice();\n };\n\n scale.rangeRound = function(_) {\n return range = Array.from(_), interpolate$1 = interpolateRound, rescale();\n };\n\n scale.clamp = function(_) {\n return arguments.length ? (clamp = _ ? true : identity, rescale()) : clamp !== identity;\n };\n\n scale.interpolate = function(_) {\n return arguments.length ? (interpolate$1 = _, rescale()) : interpolate$1;\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n return function(t, u) {\n transform = t, untransform = u;\n return rescale();\n };\n }\n\n function continuous() {\n return transformer()(identity, identity);\n }\n\n // Computes the decimal coefficient and exponent of the specified number x with\n // significant digits p, where x is positive and p is in [1, 21] or undefined.\n // For example, formatDecimal(1.23) returns [\"123\", 0].\n function formatDecimal(x, p) {\n if ((i = (x = p ? x.toExponential(p - 1) : x.toExponential()).indexOf(\"e\")) < 0) return null; // NaN, ±Infinity\n var i, coefficient = x.slice(0, i);\n\n // The string returned by toExponential either has the form \\d\\.\\d+e[-+]\\d+\n // (e.g., 1.2e+3) or the form \\de[-+]\\d+ (e.g., 1e+3).\n return [\n coefficient.length > 1 ? coefficient[0] + coefficient.slice(2) : coefficient,\n +x.slice(i + 1)\n ];\n }\n\n function exponent(x) {\n return x = formatDecimal(Math.abs(x)), x ? x[1] : NaN;\n }\n\n function formatGroup(grouping, thousands) {\n return function(value, width) {\n var i = value.length,\n t = [],\n j = 0,\n g = grouping[0],\n length = 0;\n\n while (i > 0 && g > 0) {\n if (length + g + 1 > width) g = Math.max(1, width - length);\n t.push(value.substring(i -= g, i + g));\n if ((length += g + 1) > width) break;\n g = grouping[j = (j + 1) % grouping.length];\n }\n\n return t.reverse().join(thousands);\n };\n }\n\n function formatNumerals(numerals) {\n return function(value) {\n return value.replace(/[0-9]/g, function(i) {\n return numerals[+i];\n });\n };\n }\n\n // [[fill]align][sign][symbol][0][width][,][.precision][~][type]\n var re = /^(?:(.)?([<>=^]))?([+\\-( ])?([$#])?(0)?(\\d+)?(,)?(\\.\\d+)?(~)?([a-z%])?$/i;\n\n function formatSpecifier(specifier) {\n if (!(match = re.exec(specifier))) throw new Error(\"invalid format: \" + specifier);\n var match;\n return new FormatSpecifier({\n fill: match[1],\n align: match[2],\n sign: match[3],\n symbol: match[4],\n zero: match[5],\n width: match[6],\n comma: match[7],\n precision: match[8] && match[8].slice(1),\n trim: match[9],\n type: match[10]\n });\n }\n\n formatSpecifier.prototype = FormatSpecifier.prototype; // instanceof\n\n function FormatSpecifier(specifier) {\n this.fill = specifier.fill === undefined ? \" \" : specifier.fill + \"\";\n this.align = specifier.align === undefined ? \">\" : specifier.align + \"\";\n this.sign = specifier.sign === undefined ? \"-\" : specifier.sign + \"\";\n this.symbol = specifier.symbol === undefined ? \"\" : specifier.symbol + \"\";\n this.zero = !!specifier.zero;\n this.width = specifier.width === undefined ? undefined : +specifier.width;\n this.comma = !!specifier.comma;\n this.precision = specifier.precision === undefined ? undefined : +specifier.precision;\n this.trim = !!specifier.trim;\n this.type = specifier.type === undefined ? \"\" : specifier.type + \"\";\n }\n\n FormatSpecifier.prototype.toString = function() {\n return this.fill\n + this.align\n + this.sign\n + this.symbol\n + (this.zero ? \"0\" : \"\")\n + (this.width === undefined ? \"\" : Math.max(1, this.width | 0))\n + (this.comma ? \",\" : \"\")\n + (this.precision === undefined ? \"\" : \".\" + Math.max(0, this.precision | 0))\n + (this.trim ? \"~\" : \"\")\n + this.type;\n };\n\n // Trims insignificant zeros, e.g., replaces 1.2000k with 1.2k.\n function formatTrim(s) {\n out: for (var n = s.length, i = 1, i0 = -1, i1; i < n; ++i) {\n switch (s[i]) {\n case \".\": i0 = i1 = i; break;\n case \"0\": if (i0 === 0) i0 = i; i1 = i; break;\n default: if (!+s[i]) break out; if (i0 > 0) i0 = 0; break;\n }\n }\n return i0 > 0 ? s.slice(0, i0) + s.slice(i1 + 1) : s;\n }\n\n var prefixExponent;\n\n function formatPrefixAuto(x, p) {\n var d = formatDecimal(x, p);\n if (!d) return x + \"\";\n var coefficient = d[0],\n exponent = d[1],\n i = exponent - (prefixExponent = Math.max(-8, Math.min(8, Math.floor(exponent / 3))) * 3) + 1,\n n = coefficient.length;\n return i === n ? coefficient\n : i > n ? coefficient + new Array(i - n + 1).join(\"0\")\n : i > 0 ? coefficient.slice(0, i) + \".\" + coefficient.slice(i)\n : \"0.\" + new Array(1 - i).join(\"0\") + formatDecimal(x, Math.max(0, p + i - 1))[0]; // less than 1y!\n }\n\n function formatRounded(x, p) {\n var d = formatDecimal(x, p);\n if (!d) return x + \"\";\n var coefficient = d[0],\n exponent = d[1];\n return exponent < 0 ? \"0.\" + new Array(-exponent).join(\"0\") + coefficient\n : coefficient.length > exponent + 1 ? coefficient.slice(0, exponent + 1) + \".\" + coefficient.slice(exponent + 1)\n : coefficient + new Array(exponent - coefficient.length + 2).join(\"0\");\n }\n\n var formatTypes = {\n \"%\": function(x, p) { return (x * 100).toFixed(p); },\n \"b\": function(x) { return Math.round(x).toString(2); },\n \"c\": function(x) { return x + \"\"; },\n \"d\": function(x) { return Math.round(x).toString(10); },\n \"e\": function(x, p) { return x.toExponential(p); },\n \"f\": function(x, p) { return x.toFixed(p); },\n \"g\": function(x, p) { return x.toPrecision(p); },\n \"o\": function(x) { return Math.round(x).toString(8); },\n \"p\": function(x, p) { return formatRounded(x * 100, p); },\n \"r\": formatRounded,\n \"s\": formatPrefixAuto,\n \"X\": function(x) { return Math.round(x).toString(16).toUpperCase(); },\n \"x\": function(x) { return Math.round(x).toString(16); }\n };\n\n function identity$1(x) {\n return x;\n }\n\n var map = Array.prototype.map,\n prefixes = [\"y\",\"z\",\"a\",\"f\",\"p\",\"n\",\"µ\",\"m\",\"\",\"k\",\"M\",\"G\",\"T\",\"P\",\"E\",\"Z\",\"Y\"];\n\n function formatLocale(locale) {\n var group = locale.grouping === undefined || locale.thousands === undefined ? identity$1 : formatGroup(map.call(locale.grouping, Number), locale.thousands + \"\"),\n currencyPrefix = locale.currency === undefined ? \"\" : locale.currency[0] + \"\",\n currencySuffix = locale.currency === undefined ? \"\" : locale.currency[1] + \"\",\n decimal = locale.decimal === undefined ? \".\" : locale.decimal + \"\",\n numerals = locale.numerals === undefined ? identity$1 : formatNumerals(map.call(locale.numerals, String)),\n percent = locale.percent === undefined ? \"%\" : locale.percent + \"\",\n minus = locale.minus === undefined ? \"-\" : locale.minus + \"\",\n nan = locale.nan === undefined ? \"NaN\" : locale.nan + \"\";\n\n function newFormat(specifier) {\n specifier = formatSpecifier(specifier);\n\n var fill = specifier.fill,\n align = specifier.align,\n sign = specifier.sign,\n symbol = specifier.symbol,\n zero = specifier.zero,\n width = specifier.width,\n comma = specifier.comma,\n precision = specifier.precision,\n trim = specifier.trim,\n type = specifier.type;\n\n // The \"n\" type is an alias for \",g\".\n if (type === \"n\") comma = true, type = \"g\";\n\n // The \"\" type, and any invalid type, is an alias for \".12~g\".\n else if (!formatTypes[type]) precision === undefined && (precision = 12), trim = true, type = \"g\";\n\n // If zero fill is specified, padding goes after sign and before digits.\n if (zero || (fill === \"0\" && align === \"=\")) zero = true, fill = \"0\", align = \"=\";\n\n // Compute the prefix and suffix.\n // For SI-prefix, the suffix is lazily computed.\n var prefix = symbol === \"$\" ? currencyPrefix : symbol === \"#\" && /[boxX]/.test(type) ? \"0\" + type.toLowerCase() : \"\",\n suffix = symbol === \"$\" ? currencySuffix : /[%p]/.test(type) ? percent : \"\";\n\n // What format function should we use?\n // Is this an integer type?\n // Can this type generate exponential notation?\n var formatType = formatTypes[type],\n maybeSuffix = /[defgprs%]/.test(type);\n\n // Set the default precision if not specified,\n // or clamp the specified precision to the supported range.\n // For significant precision, it must be in [1, 21].\n // For fixed precision, it must be in [0, 20].\n precision = precision === undefined ? 6\n : /[gprs]/.test(type) ? Math.max(1, Math.min(21, precision))\n : Math.max(0, Math.min(20, precision));\n\n function format(value) {\n var valuePrefix = prefix,\n valueSuffix = suffix,\n i, n, c;\n\n if (type === \"c\") {\n valueSuffix = formatType(value) + valueSuffix;\n value = \"\";\n } else {\n value = +value;\n\n // Determine the sign. -0 is not less than 0, but 1 / -0 is!\n var valueNegative = value < 0 || 1 / value < 0;\n\n // Perform the initial formatting.\n value = isNaN(value) ? nan : formatType(Math.abs(value), precision);\n\n // Trim insignificant zeros.\n if (trim) value = formatTrim(value);\n\n // If a negative value rounds to zero after formatting, and no explicit positive sign is requested, hide the sign.\n if (valueNegative && +value === 0 && sign !== \"+\") valueNegative = false;\n\n // Compute the prefix and suffix.\n valuePrefix = (valueNegative ? (sign === \"(\" ? sign : minus) : sign === \"-\" || sign === \"(\" ? \"\" : sign) + valuePrefix;\n valueSuffix = (type === \"s\" ? prefixes[8 + prefixExponent / 3] : \"\") + valueSuffix + (valueNegative && sign === \"(\" ? \")\" : \"\");\n\n // Break the formatted value into the integer “value” part that can be\n // grouped, and fractional or exponential “suffix” part that is not.\n if (maybeSuffix) {\n i = -1, n = value.length;\n while (++i < n) {\n if (c = value.charCodeAt(i), 48 > c || c > 57) {\n valueSuffix = (c === 46 ? decimal + value.slice(i + 1) : value.slice(i)) + valueSuffix;\n value = value.slice(0, i);\n break;\n }\n }\n }\n }\n\n // If the fill character is not \"0\", grouping is applied before padding.\n if (comma && !zero) value = group(value, Infinity);\n\n // Compute the padding.\n var length = valuePrefix.length + value.length + valueSuffix.length,\n padding = length < width ? new Array(width - length + 1).join(fill) : \"\";\n\n // If the fill character is \"0\", grouping is applied after padding.\n if (comma && zero) value = group(padding + value, padding.length ? width - valueSuffix.length : Infinity), padding = \"\";\n\n // Reconstruct the final output based on the desired alignment.\n switch (align) {\n case \"<\": value = valuePrefix + value + valueSuffix + padding; break;\n case \"=\": value = valuePrefix + padding + value + valueSuffix; break;\n case \"^\": value = padding.slice(0, length = padding.length >> 1) + valuePrefix + value + valueSuffix + padding.slice(length); break;\n default: value = padding + valuePrefix + value + valueSuffix; break;\n }\n\n return numerals(value);\n }\n\n format.toString = function() {\n return specifier + \"\";\n };\n\n return format;\n }\n\n function formatPrefix(specifier, value) {\n var f = newFormat((specifier = formatSpecifier(specifier), specifier.type = \"f\", specifier)),\n e = Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3,\n k = Math.pow(10, -e),\n prefix = prefixes[8 + e / 3];\n return function(value) {\n return f(k * value) + prefix;\n };\n }\n\n return {\n format: newFormat,\n formatPrefix: formatPrefix\n };\n }\n\n var locale;\n var format;\n var formatPrefix;\n\n defaultLocale({\n decimal: \".\",\n thousands: \",\",\n grouping: [3],\n currency: [\"$\", \"\"],\n minus: \"-\"\n });\n\n function defaultLocale(definition) {\n locale = formatLocale(definition);\n format = locale.format;\n formatPrefix = locale.formatPrefix;\n return locale;\n }\n\n function precisionFixed(step) {\n return Math.max(0, -exponent(Math.abs(step)));\n }\n\n function precisionPrefix(step, value) {\n return Math.max(0, Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3 - exponent(Math.abs(step)));\n }\n\n function precisionRound(step, max) {\n step = Math.abs(step), max = Math.abs(max) - step;\n return Math.max(0, exponent(max) - exponent(step)) + 1;\n }\n\n function tickFormat(start, stop, count, specifier) {\n var step = tickStep(start, stop, count),\n precision;\n specifier = formatSpecifier(specifier == null ? \",f\" : specifier);\n switch (specifier.type) {\n case \"s\": {\n var value = Math.max(Math.abs(start), Math.abs(stop));\n if (specifier.precision == null && !isNaN(precision = precisionPrefix(step, value))) specifier.precision = precision;\n return formatPrefix(specifier, value);\n }\n case \"\":\n case \"e\":\n case \"g\":\n case \"p\":\n case \"r\": {\n if (specifier.precision == null && !isNaN(precision = precisionRound(step, Math.max(Math.abs(start), Math.abs(stop))))) specifier.precision = precision - (specifier.type === \"e\");\n break;\n }\n case \"f\":\n case \"%\": {\n if (specifier.precision == null && !isNaN(precision = precisionFixed(step))) specifier.precision = precision - (specifier.type === \"%\") * 2;\n break;\n }\n }\n return format(specifier);\n }\n\n function linearish(scale) {\n var domain = scale.domain;\n\n scale.ticks = function(count) {\n var d = domain();\n return ticks(d[0], d[d.length - 1], count == null ? 10 : count);\n };\n\n scale.tickFormat = function(count, specifier) {\n var d = domain();\n return tickFormat(d[0], d[d.length - 1], count == null ? 10 : count, specifier);\n };\n\n scale.nice = function(count) {\n if (count == null) count = 10;\n\n var d = domain(),\n i0 = 0,\n i1 = d.length - 1,\n start = d[i0],\n stop = d[i1],\n step;\n\n if (stop < start) {\n step = start, start = stop, stop = step;\n step = i0, i0 = i1, i1 = step;\n }\n\n step = tickIncrement(start, stop, count);\n\n if (step > 0) {\n start = Math.floor(start / step) * step;\n stop = Math.ceil(stop / step) * step;\n step = tickIncrement(start, stop, count);\n } else if (step < 0) {\n start = Math.ceil(start * step) / step;\n stop = Math.floor(stop * step) / step;\n step = tickIncrement(start, stop, count);\n }\n\n if (step > 0) {\n d[i0] = Math.floor(start / step) * step;\n d[i1] = Math.ceil(stop / step) * step;\n domain(d);\n } else if (step < 0) {\n d[i0] = Math.ceil(start * step) / step;\n d[i1] = Math.floor(stop * step) / step;\n domain(d);\n }\n\n return scale;\n };\n\n return scale;\n }\n\n function linear$1() {\n var scale = continuous();\n\n scale.copy = function() {\n return copy(scale, linear$1());\n };\n\n initRange.apply(scale, arguments);\n\n return linearish(scale);\n }\n\n var t0$1 = new Date,\n t1$1 = new Date;\n\n function newInterval(floori, offseti, count, field) {\n\n function interval(date) {\n return floori(date = arguments.length === 0 ? new Date : new Date(+date)), date;\n }\n\n interval.floor = function(date) {\n return floori(date = new Date(+date)), date;\n };\n\n interval.ceil = function(date) {\n return floori(date = new Date(date - 1)), offseti(date, 1), floori(date), date;\n };\n\n interval.round = function(date) {\n var d0 = interval(date),\n d1 = interval.ceil(date);\n return date - d0 < d1 - date ? d0 : d1;\n };\n\n interval.offset = function(date, step) {\n return offseti(date = new Date(+date), step == null ? 1 : Math.floor(step)), date;\n };\n\n interval.range = function(start, stop, step) {\n var range = [], previous;\n start = interval.ceil(start);\n step = step == null ? 1 : Math.floor(step);\n if (!(start < stop) || !(step > 0)) return range; // also handles Invalid Date\n do range.push(previous = new Date(+start)), offseti(start, step), floori(start);\n while (previous < start && start < stop);\n return range;\n };\n\n interval.filter = function(test) {\n return newInterval(function(date) {\n if (date >= date) while (floori(date), !test(date)) date.setTime(date - 1);\n }, function(date, step) {\n if (date >= date) {\n if (step < 0) while (++step <= 0) {\n while (offseti(date, -1), !test(date)) {} // eslint-disable-line no-empty\n } else while (--step >= 0) {\n while (offseti(date, +1), !test(date)) {} // eslint-disable-line no-empty\n }\n }\n });\n };\n\n if (count) {\n interval.count = function(start, end) {\n t0$1.setTime(+start), t1$1.setTime(+end);\n floori(t0$1), floori(t1$1);\n return Math.floor(count(t0$1, t1$1));\n };\n\n interval.every = function(step) {\n step = Math.floor(step);\n return !isFinite(step) || !(step > 0) ? null\n : !(step > 1) ? interval\n : interval.filter(field\n ? function(d) { return field(d) % step === 0; }\n : function(d) { return interval.count(0, d) % step === 0; });\n };\n }\n\n return interval;\n }\n\n var millisecond = newInterval(function() {\n // noop\n }, function(date, step) {\n date.setTime(+date + step);\n }, function(start, end) {\n return end - start;\n });\n\n // An optimized implementation for this simple case.\n millisecond.every = function(k) {\n k = Math.floor(k);\n if (!isFinite(k) || !(k > 0)) return null;\n if (!(k > 1)) return millisecond;\n return newInterval(function(date) {\n date.setTime(Math.floor(date / k) * k);\n }, function(date, step) {\n date.setTime(+date + step * k);\n }, function(start, end) {\n return (end - start) / k;\n });\n };\n\n var durationSecond = 1e3;\n var durationMinute = 6e4;\n var durationHour = 36e5;\n var durationDay = 864e5;\n var durationWeek = 6048e5;\n\n var second = newInterval(function(date) {\n date.setTime(date - date.getMilliseconds());\n }, function(date, step) {\n date.setTime(+date + step * durationSecond);\n }, function(start, end) {\n return (end - start) / durationSecond;\n }, function(date) {\n return date.getUTCSeconds();\n });\n\n var minute = newInterval(function(date) {\n date.setTime(date - date.getMilliseconds() - date.getSeconds() * durationSecond);\n }, function(date, step) {\n date.setTime(+date + step * durationMinute);\n }, function(start, end) {\n return (end - start) / durationMinute;\n }, function(date) {\n return date.getMinutes();\n });\n\n var hour = newInterval(function(date) {\n date.setTime(date - date.getMilliseconds() - date.getSeconds() * durationSecond - date.getMinutes() * durationMinute);\n }, function(date, step) {\n date.setTime(+date + step * durationHour);\n }, function(start, end) {\n return (end - start) / durationHour;\n }, function(date) {\n return date.getHours();\n });\n\n var day = newInterval(function(date) {\n date.setHours(0, 0, 0, 0);\n }, function(date, step) {\n date.setDate(date.getDate() + step);\n }, function(start, end) {\n return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationDay;\n }, function(date) {\n return date.getDate() - 1;\n });\n\n function weekday(i) {\n return newInterval(function(date) {\n date.setDate(date.getDate() - (date.getDay() + 7 - i) % 7);\n date.setHours(0, 0, 0, 0);\n }, function(date, step) {\n date.setDate(date.getDate() + step * 7);\n }, function(start, end) {\n return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationWeek;\n });\n }\n\n var sunday = weekday(0);\n var monday = weekday(1);\n var tuesday = weekday(2);\n var wednesday = weekday(3);\n var thursday = weekday(4);\n var friday = weekday(5);\n var saturday = weekday(6);\n\n var month = newInterval(function(date) {\n date.setDate(1);\n date.setHours(0, 0, 0, 0);\n }, function(date, step) {\n date.setMonth(date.getMonth() + step);\n }, function(start, end) {\n return end.getMonth() - start.getMonth() + (end.getFullYear() - start.getFullYear()) * 12;\n }, function(date) {\n return date.getMonth();\n });\n\n var year = newInterval(function(date) {\n date.setMonth(0, 1);\n date.setHours(0, 0, 0, 0);\n }, function(date, step) {\n date.setFullYear(date.getFullYear() + step);\n }, function(start, end) {\n return end.getFullYear() - start.getFullYear();\n }, function(date) {\n return date.getFullYear();\n });\n\n // An optimized implementation for this simple case.\n year.every = function(k) {\n return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : newInterval(function(date) {\n date.setFullYear(Math.floor(date.getFullYear() / k) * k);\n date.setMonth(0, 1);\n date.setHours(0, 0, 0, 0);\n }, function(date, step) {\n date.setFullYear(date.getFullYear() + step * k);\n });\n };\n\n var utcMinute = newInterval(function(date) {\n date.setUTCSeconds(0, 0);\n }, function(date, step) {\n date.setTime(+date + step * durationMinute);\n }, function(start, end) {\n return (end - start) / durationMinute;\n }, function(date) {\n return date.getUTCMinutes();\n });\n\n var utcHour = newInterval(function(date) {\n date.setUTCMinutes(0, 0, 0);\n }, function(date, step) {\n date.setTime(+date + step * durationHour);\n }, function(start, end) {\n return (end - start) / durationHour;\n }, function(date) {\n return date.getUTCHours();\n });\n\n var utcDay = newInterval(function(date) {\n date.setUTCHours(0, 0, 0, 0);\n }, function(date, step) {\n date.setUTCDate(date.getUTCDate() + step);\n }, function(start, end) {\n return (end - start) / durationDay;\n }, function(date) {\n return date.getUTCDate() - 1;\n });\n\n function utcWeekday(i) {\n return newInterval(function(date) {\n date.setUTCDate(date.getUTCDate() - (date.getUTCDay() + 7 - i) % 7);\n date.setUTCHours(0, 0, 0, 0);\n }, function(date, step) {\n date.setUTCDate(date.getUTCDate() + step * 7);\n }, function(start, end) {\n return (end - start) / durationWeek;\n });\n }\n\n var utcSunday = utcWeekday(0);\n var utcMonday = utcWeekday(1);\n var utcTuesday = utcWeekday(2);\n var utcWednesday = utcWeekday(3);\n var utcThursday = utcWeekday(4);\n var utcFriday = utcWeekday(5);\n var utcSaturday = utcWeekday(6);\n\n var utcMonth = newInterval(function(date) {\n date.setUTCDate(1);\n date.setUTCHours(0, 0, 0, 0);\n }, function(date, step) {\n date.setUTCMonth(date.getUTCMonth() + step);\n }, function(start, end) {\n return end.getUTCMonth() - start.getUTCMonth() + (end.getUTCFullYear() - start.getUTCFullYear()) * 12;\n }, function(date) {\n return date.getUTCMonth();\n });\n\n var utcYear = newInterval(function(date) {\n date.setUTCMonth(0, 1);\n date.setUTCHours(0, 0, 0, 0);\n }, function(date, step) {\n date.setUTCFullYear(date.getUTCFullYear() + step);\n }, function(start, end) {\n return end.getUTCFullYear() - start.getUTCFullYear();\n }, function(date) {\n return date.getUTCFullYear();\n });\n\n // An optimized implementation for this simple case.\n utcYear.every = function(k) {\n return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : newInterval(function(date) {\n date.setUTCFullYear(Math.floor(date.getUTCFullYear() / k) * k);\n date.setUTCMonth(0, 1);\n date.setUTCHours(0, 0, 0, 0);\n }, function(date, step) {\n date.setUTCFullYear(date.getUTCFullYear() + step * k);\n });\n };\n\n function localDate(d) {\n if (0 <= d.y && d.y < 100) {\n var date = new Date(-1, d.m, d.d, d.H, d.M, d.S, d.L);\n date.setFullYear(d.y);\n return date;\n }\n return new Date(d.y, d.m, d.d, d.H, d.M, d.S, d.L);\n }\n\n function utcDate(d) {\n if (0 <= d.y && d.y < 100) {\n var date = new Date(Date.UTC(-1, d.m, d.d, d.H, d.M, d.S, d.L));\n date.setUTCFullYear(d.y);\n return date;\n }\n return new Date(Date.UTC(d.y, d.m, d.d, d.H, d.M, d.S, d.L));\n }\n\n function newDate(y, m, d) {\n return {y: y, m: m, d: d, H: 0, M: 0, S: 0, L: 0};\n }\n\n function formatLocale$1(locale) {\n var locale_dateTime = locale.dateTime,\n locale_date = locale.date,\n locale_time = locale.time,\n locale_periods = locale.periods,\n locale_weekdays = locale.days,\n locale_shortWeekdays = locale.shortDays,\n locale_months = locale.months,\n locale_shortMonths = locale.shortMonths;\n\n var periodRe = formatRe(locale_periods),\n periodLookup = formatLookup(locale_periods),\n weekdayRe = formatRe(locale_weekdays),\n weekdayLookup = formatLookup(locale_weekdays),\n shortWeekdayRe = formatRe(locale_shortWeekdays),\n shortWeekdayLookup = formatLookup(locale_shortWeekdays),\n monthRe = formatRe(locale_months),\n monthLookup = formatLookup(locale_months),\n shortMonthRe = formatRe(locale_shortMonths),\n shortMonthLookup = formatLookup(locale_shortMonths);\n\n var formats = {\n \"a\": formatShortWeekday,\n \"A\": formatWeekday,\n \"b\": formatShortMonth,\n \"B\": formatMonth,\n \"c\": null,\n \"d\": formatDayOfMonth,\n \"e\": formatDayOfMonth,\n \"f\": formatMicroseconds,\n \"H\": formatHour24,\n \"I\": formatHour12,\n \"j\": formatDayOfYear,\n \"L\": formatMilliseconds,\n \"m\": formatMonthNumber,\n \"M\": formatMinutes,\n \"p\": formatPeriod,\n \"q\": formatQuarter,\n \"Q\": formatUnixTimestamp,\n \"s\": formatUnixTimestampSeconds,\n \"S\": formatSeconds,\n \"u\": formatWeekdayNumberMonday,\n \"U\": formatWeekNumberSunday,\n \"V\": formatWeekNumberISO,\n \"w\": formatWeekdayNumberSunday,\n \"W\": formatWeekNumberMonday,\n \"x\": null,\n \"X\": null,\n \"y\": formatYear,\n \"Y\": formatFullYear,\n \"Z\": formatZone,\n \"%\": formatLiteralPercent\n };\n\n var utcFormats = {\n \"a\": formatUTCShortWeekday,\n \"A\": formatUTCWeekday,\n \"b\": formatUTCShortMonth,\n \"B\": formatUTCMonth,\n \"c\": null,\n \"d\": formatUTCDayOfMonth,\n \"e\": formatUTCDayOfMonth,\n \"f\": formatUTCMicroseconds,\n \"H\": formatUTCHour24,\n \"I\": formatUTCHour12,\n \"j\": formatUTCDayOfYear,\n \"L\": formatUTCMilliseconds,\n \"m\": formatUTCMonthNumber,\n \"M\": formatUTCMinutes,\n \"p\": formatUTCPeriod,\n \"q\": formatUTCQuarter,\n \"Q\": formatUnixTimestamp,\n \"s\": formatUnixTimestampSeconds,\n \"S\": formatUTCSeconds,\n \"u\": formatUTCWeekdayNumberMonday,\n \"U\": formatUTCWeekNumberSunday,\n \"V\": formatUTCWeekNumberISO,\n \"w\": formatUTCWeekdayNumberSunday,\n \"W\": formatUTCWeekNumberMonday,\n \"x\": null,\n \"X\": null,\n \"y\": formatUTCYear,\n \"Y\": formatUTCFullYear,\n \"Z\": formatUTCZone,\n \"%\": formatLiteralPercent\n };\n\n var parses = {\n \"a\": parseShortWeekday,\n \"A\": parseWeekday,\n \"b\": parseShortMonth,\n \"B\": parseMonth,\n \"c\": parseLocaleDateTime,\n \"d\": parseDayOfMonth,\n \"e\": parseDayOfMonth,\n \"f\": parseMicroseconds,\n \"H\": parseHour24,\n \"I\": parseHour24,\n \"j\": parseDayOfYear,\n \"L\": parseMilliseconds,\n \"m\": parseMonthNumber,\n \"M\": parseMinutes,\n \"p\": parsePeriod,\n \"q\": parseQuarter,\n \"Q\": parseUnixTimestamp,\n \"s\": parseUnixTimestampSeconds,\n \"S\": parseSeconds,\n \"u\": parseWeekdayNumberMonday,\n \"U\": parseWeekNumberSunday,\n \"V\": parseWeekNumberISO,\n \"w\": parseWeekdayNumberSunday,\n \"W\": parseWeekNumberMonday,\n \"x\": parseLocaleDate,\n \"X\": parseLocaleTime,\n \"y\": parseYear,\n \"Y\": parseFullYear,\n \"Z\": parseZone,\n \"%\": parseLiteralPercent\n };\n\n // These recursive directive definitions must be deferred.\n formats.x = newFormat(locale_date, formats);\n formats.X = newFormat(locale_time, formats);\n formats.c = newFormat(locale_dateTime, formats);\n utcFormats.x = newFormat(locale_date, utcFormats);\n utcFormats.X = newFormat(locale_time, utcFormats);\n utcFormats.c = newFormat(locale_dateTime, utcFormats);\n\n function newFormat(specifier, formats) {\n return function(date) {\n var string = [],\n i = -1,\n j = 0,\n n = specifier.length,\n c,\n pad,\n format;\n\n if (!(date instanceof Date)) date = new Date(+date);\n\n while (++i < n) {\n if (specifier.charCodeAt(i) === 37) {\n string.push(specifier.slice(j, i));\n if ((pad = pads[c = specifier.charAt(++i)]) != null) c = specifier.charAt(++i);\n else pad = c === \"e\" ? \" \" : \"0\";\n if (format = formats[c]) c = format(date, pad);\n string.push(c);\n j = i + 1;\n }\n }\n\n string.push(specifier.slice(j, i));\n return string.join(\"\");\n };\n }\n\n function newParse(specifier, Z) {\n return function(string) {\n var d = newDate(1900, undefined, 1),\n i = parseSpecifier(d, specifier, string += \"\", 0),\n week, day$1;\n if (i != string.length) return null;\n\n // If a UNIX timestamp is specified, return it.\n if (\"Q\" in d) return new Date(d.Q);\n if (\"s\" in d) return new Date(d.s * 1000 + (\"L\" in d ? d.L : 0));\n\n // If this is utcParse, never use the local timezone.\n if (Z && !(\"Z\" in d)) d.Z = 0;\n\n // The am-pm flag is 0 for AM, and 1 for PM.\n if (\"p\" in d) d.H = d.H % 12 + d.p * 12;\n\n // If the month was not specified, inherit from the quarter.\n if (d.m === undefined) d.m = \"q\" in d ? d.q : 0;\n\n // Convert day-of-week and week-of-year to day-of-year.\n if (\"V\" in d) {\n if (d.V < 1 || d.V > 53) return null;\n if (!(\"w\" in d)) d.w = 1;\n if (\"Z\" in d) {\n week = utcDate(newDate(d.y, 0, 1)), day$1 = week.getUTCDay();\n week = day$1 > 4 || day$1 === 0 ? utcMonday.ceil(week) : utcMonday(week);\n week = utcDay.offset(week, (d.V - 1) * 7);\n d.y = week.getUTCFullYear();\n d.m = week.getUTCMonth();\n d.d = week.getUTCDate() + (d.w + 6) % 7;\n } else {\n week = localDate(newDate(d.y, 0, 1)), day$1 = week.getDay();\n week = day$1 > 4 || day$1 === 0 ? monday.ceil(week) : monday(week);\n week = day.offset(week, (d.V - 1) * 7);\n d.y = week.getFullYear();\n d.m = week.getMonth();\n d.d = week.getDate() + (d.w + 6) % 7;\n }\n } else if (\"W\" in d || \"U\" in d) {\n if (!(\"w\" in d)) d.w = \"u\" in d ? d.u % 7 : \"W\" in d ? 1 : 0;\n day$1 = \"Z\" in d ? utcDate(newDate(d.y, 0, 1)).getUTCDay() : localDate(newDate(d.y, 0, 1)).getDay();\n d.m = 0;\n d.d = \"W\" in d ? (d.w + 6) % 7 + d.W * 7 - (day$1 + 5) % 7 : d.w + d.U * 7 - (day$1 + 6) % 7;\n }\n\n // If a time zone is specified, all fields are interpreted as UTC and then\n // offset according to the specified time zone.\n if (\"Z\" in d) {\n d.H += d.Z / 100 | 0;\n d.M += d.Z % 100;\n return utcDate(d);\n }\n\n // Otherwise, all fields are in local time.\n return localDate(d);\n };\n }\n\n function parseSpecifier(d, specifier, string, j) {\n var i = 0,\n n = specifier.length,\n m = string.length,\n c,\n parse;\n\n while (i < n) {\n if (j >= m) return -1;\n c = specifier.charCodeAt(i++);\n if (c === 37) {\n c = specifier.charAt(i++);\n parse = parses[c in pads ? specifier.charAt(i++) : c];\n if (!parse || ((j = parse(d, string, j)) < 0)) return -1;\n } else if (c != string.charCodeAt(j++)) {\n return -1;\n }\n }\n\n return j;\n }\n\n function parsePeriod(d, string, i) {\n var n = periodRe.exec(string.slice(i));\n return n ? (d.p = periodLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n }\n\n function parseShortWeekday(d, string, i) {\n var n = shortWeekdayRe.exec(string.slice(i));\n return n ? (d.w = shortWeekdayLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n }\n\n function parseWeekday(d, string, i) {\n var n = weekdayRe.exec(string.slice(i));\n return n ? (d.w = weekdayLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n }\n\n function parseShortMonth(d, string, i) {\n var n = shortMonthRe.exec(string.slice(i));\n return n ? (d.m = shortMonthLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n }\n\n function parseMonth(d, string, i) {\n var n = monthRe.exec(string.slice(i));\n return n ? (d.m = monthLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n }\n\n function parseLocaleDateTime(d, string, i) {\n return parseSpecifier(d, locale_dateTime, string, i);\n }\n\n function parseLocaleDate(d, string, i) {\n return parseSpecifier(d, locale_date, string, i);\n }\n\n function parseLocaleTime(d, string, i) {\n return parseSpecifier(d, locale_time, string, i);\n }\n\n function formatShortWeekday(d) {\n return locale_shortWeekdays[d.getDay()];\n }\n\n function formatWeekday(d) {\n return locale_weekdays[d.getDay()];\n }\n\n function formatShortMonth(d) {\n return locale_shortMonths[d.getMonth()];\n }\n\n function formatMonth(d) {\n return locale_months[d.getMonth()];\n }\n\n function formatPeriod(d) {\n return locale_periods[+(d.getHours() >= 12)];\n }\n\n function formatQuarter(d) {\n return 1 + ~~(d.getMonth() / 3);\n }\n\n function formatUTCShortWeekday(d) {\n return locale_shortWeekdays[d.getUTCDay()];\n }\n\n function formatUTCWeekday(d) {\n return locale_weekdays[d.getUTCDay()];\n }\n\n function formatUTCShortMonth(d) {\n return locale_shortMonths[d.getUTCMonth()];\n }\n\n function formatUTCMonth(d) {\n return locale_months[d.getUTCMonth()];\n }\n\n function formatUTCPeriod(d) {\n return locale_periods[+(d.getUTCHours() >= 12)];\n }\n\n function formatUTCQuarter(d) {\n return 1 + ~~(d.getUTCMonth() / 3);\n }\n\n return {\n format: function(specifier) {\n var f = newFormat(specifier += \"\", formats);\n f.toString = function() { return specifier; };\n return f;\n },\n parse: function(specifier) {\n var p = newParse(specifier += \"\", false);\n p.toString = function() { return specifier; };\n return p;\n },\n utcFormat: function(specifier) {\n var f = newFormat(specifier += \"\", utcFormats);\n f.toString = function() { return specifier; };\n return f;\n },\n utcParse: function(specifier) {\n var p = newParse(specifier += \"\", true);\n p.toString = function() { return specifier; };\n return p;\n }\n };\n }\n\n var pads = {\"-\": \"\", \"_\": \" \", \"0\": \"0\"},\n numberRe = /^\\s*\\d+/, // note: ignores next directive\n percentRe = /^%/,\n requoteRe = /[\\\\^$*+?|[\\]().{}]/g;\n\n function pad(value, fill, width) {\n var sign = value < 0 ? \"-\" : \"\",\n string = (sign ? -value : value) + \"\",\n length = string.length;\n return sign + (length < width ? new Array(width - length + 1).join(fill) + string : string);\n }\n\n function requote(s) {\n return s.replace(requoteRe, \"\\\\$&\");\n }\n\n function formatRe(names) {\n return new RegExp(\"^(?:\" + names.map(requote).join(\"|\") + \")\", \"i\");\n }\n\n function formatLookup(names) {\n var map = {}, i = -1, n = names.length;\n while (++i < n) map[names[i].toLowerCase()] = i;\n return map;\n }\n\n function parseWeekdayNumberSunday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 1));\n return n ? (d.w = +n[0], i + n[0].length) : -1;\n }\n\n function parseWeekdayNumberMonday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 1));\n return n ? (d.u = +n[0], i + n[0].length) : -1;\n }\n\n function parseWeekNumberSunday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.U = +n[0], i + n[0].length) : -1;\n }\n\n function parseWeekNumberISO(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.V = +n[0], i + n[0].length) : -1;\n }\n\n function parseWeekNumberMonday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.W = +n[0], i + n[0].length) : -1;\n }\n\n function parseFullYear(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 4));\n return n ? (d.y = +n[0], i + n[0].length) : -1;\n }\n\n function parseYear(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.y = +n[0] + (+n[0] > 68 ? 1900 : 2000), i + n[0].length) : -1;\n }\n\n function parseZone(d, string, i) {\n var n = /^(Z)|([+-]\\d\\d)(?::?(\\d\\d))?/.exec(string.slice(i, i + 6));\n return n ? (d.Z = n[1] ? 0 : -(n[2] + (n[3] || \"00\")), i + n[0].length) : -1;\n }\n\n function parseQuarter(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 1));\n return n ? (d.q = n[0] * 3 - 3, i + n[0].length) : -1;\n }\n\n function parseMonthNumber(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.m = n[0] - 1, i + n[0].length) : -1;\n }\n\n function parseDayOfMonth(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.d = +n[0], i + n[0].length) : -1;\n }\n\n function parseDayOfYear(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 3));\n return n ? (d.m = 0, d.d = +n[0], i + n[0].length) : -1;\n }\n\n function parseHour24(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.H = +n[0], i + n[0].length) : -1;\n }\n\n function parseMinutes(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.M = +n[0], i + n[0].length) : -1;\n }\n\n function parseSeconds(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.S = +n[0], i + n[0].length) : -1;\n }\n\n function parseMilliseconds(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 3));\n return n ? (d.L = +n[0], i + n[0].length) : -1;\n }\n\n function parseMicroseconds(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 6));\n return n ? (d.L = Math.floor(n[0] / 1000), i + n[0].length) : -1;\n }\n\n function parseLiteralPercent(d, string, i) {\n var n = percentRe.exec(string.slice(i, i + 1));\n return n ? i + n[0].length : -1;\n }\n\n function parseUnixTimestamp(d, string, i) {\n var n = numberRe.exec(string.slice(i));\n return n ? (d.Q = +n[0], i + n[0].length) : -1;\n }\n\n function parseUnixTimestampSeconds(d, string, i) {\n var n = numberRe.exec(string.slice(i));\n return n ? (d.s = +n[0], i + n[0].length) : -1;\n }\n\n function formatDayOfMonth(d, p) {\n return pad(d.getDate(), p, 2);\n }\n\n function formatHour24(d, p) {\n return pad(d.getHours(), p, 2);\n }\n\n function formatHour12(d, p) {\n return pad(d.getHours() % 12 || 12, p, 2);\n }\n\n function formatDayOfYear(d, p) {\n return pad(1 + day.count(year(d), d), p, 3);\n }\n\n function formatMilliseconds(d, p) {\n return pad(d.getMilliseconds(), p, 3);\n }\n\n function formatMicroseconds(d, p) {\n return formatMilliseconds(d, p) + \"000\";\n }\n\n function formatMonthNumber(d, p) {\n return pad(d.getMonth() + 1, p, 2);\n }\n\n function formatMinutes(d, p) {\n return pad(d.getMinutes(), p, 2);\n }\n\n function formatSeconds(d, p) {\n return pad(d.getSeconds(), p, 2);\n }\n\n function formatWeekdayNumberMonday(d) {\n var day = d.getDay();\n return day === 0 ? 7 : day;\n }\n\n function formatWeekNumberSunday(d, p) {\n return pad(sunday.count(year(d) - 1, d), p, 2);\n }\n\n function formatWeekNumberISO(d, p) {\n var day = d.getDay();\n d = (day >= 4 || day === 0) ? thursday(d) : thursday.ceil(d);\n return pad(thursday.count(year(d), d) + (year(d).getDay() === 4), p, 2);\n }\n\n function formatWeekdayNumberSunday(d) {\n return d.getDay();\n }\n\n function formatWeekNumberMonday(d, p) {\n return pad(monday.count(year(d) - 1, d), p, 2);\n }\n\n function formatYear(d, p) {\n return pad(d.getFullYear() % 100, p, 2);\n }\n\n function formatFullYear(d, p) {\n return pad(d.getFullYear() % 10000, p, 4);\n }\n\n function formatZone(d) {\n var z = d.getTimezoneOffset();\n return (z > 0 ? \"-\" : (z *= -1, \"+\"))\n + pad(z / 60 | 0, \"0\", 2)\n + pad(z % 60, \"0\", 2);\n }\n\n function formatUTCDayOfMonth(d, p) {\n return pad(d.getUTCDate(), p, 2);\n }\n\n function formatUTCHour24(d, p) {\n return pad(d.getUTCHours(), p, 2);\n }\n\n function formatUTCHour12(d, p) {\n return pad(d.getUTCHours() % 12 || 12, p, 2);\n }\n\n function formatUTCDayOfYear(d, p) {\n return pad(1 + utcDay.count(utcYear(d), d), p, 3);\n }\n\n function formatUTCMilliseconds(d, p) {\n return pad(d.getUTCMilliseconds(), p, 3);\n }\n\n function formatUTCMicroseconds(d, p) {\n return formatUTCMilliseconds(d, p) + \"000\";\n }\n\n function formatUTCMonthNumber(d, p) {\n return pad(d.getUTCMonth() + 1, p, 2);\n }\n\n function formatUTCMinutes(d, p) {\n return pad(d.getUTCMinutes(), p, 2);\n }\n\n function formatUTCSeconds(d, p) {\n return pad(d.getUTCSeconds(), p, 2);\n }\n\n function formatUTCWeekdayNumberMonday(d) {\n var dow = d.getUTCDay();\n return dow === 0 ? 7 : dow;\n }\n\n function formatUTCWeekNumberSunday(d, p) {\n return pad(utcSunday.count(utcYear(d) - 1, d), p, 2);\n }\n\n function formatUTCWeekNumberISO(d, p) {\n var day = d.getUTCDay();\n d = (day >= 4 || day === 0) ? utcThursday(d) : utcThursday.ceil(d);\n return pad(utcThursday.count(utcYear(d), d) + (utcYear(d).getUTCDay() === 4), p, 2);\n }\n\n function formatUTCWeekdayNumberSunday(d) {\n return d.getUTCDay();\n }\n\n function formatUTCWeekNumberMonday(d, p) {\n return pad(utcMonday.count(utcYear(d) - 1, d), p, 2);\n }\n\n function formatUTCYear(d, p) {\n return pad(d.getUTCFullYear() % 100, p, 2);\n }\n\n function formatUTCFullYear(d, p) {\n return pad(d.getUTCFullYear() % 10000, p, 4);\n }\n\n function formatUTCZone() {\n return \"+0000\";\n }\n\n function formatLiteralPercent() {\n return \"%\";\n }\n\n function formatUnixTimestamp(d) {\n return +d;\n }\n\n function formatUnixTimestampSeconds(d) {\n return Math.floor(+d / 1000);\n }\n\n var locale$1;\n var timeFormat;\n var timeParse;\n var utcFormat;\n var utcParse;\n\n defaultLocale$1({\n dateTime: \"%x, %X\",\n date: \"%-m/%-d/%Y\",\n time: \"%-I:%M:%S %p\",\n periods: [\"AM\", \"PM\"],\n days: [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"],\n shortDays: [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"],\n months: [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"],\n shortMonths: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"]\n });\n\n function defaultLocale$1(definition) {\n locale$1 = formatLocale$1(definition);\n timeFormat = locale$1.format;\n timeParse = locale$1.parse;\n utcFormat = locale$1.utcFormat;\n utcParse = locale$1.utcParse;\n return locale$1;\n }\n\n var isoSpecifier = \"%Y-%m-%dT%H:%M:%S.%LZ\";\n\n function formatIsoNative(date) {\n return date.toISOString();\n }\n\n var formatIso = Date.prototype.toISOString\n ? formatIsoNative\n : utcFormat(isoSpecifier);\n\n function parseIsoNative(string) {\n var date = new Date(string);\n return isNaN(date) ? null : date;\n }\n\n var parseIso = +new Date(\"2000-01-01T00:00:00.000Z\")\n ? parseIsoNative\n : utcParse(isoSpecifier);\n\n var noop = {value: function() {}};\n\n function dispatch() {\n for (var i = 0, n = arguments.length, _ = {}, t; i < n; ++i) {\n if (!(t = arguments[i] + \"\") || (t in _) || /[\\s.]/.test(t)) throw new Error(\"illegal type: \" + t);\n _[t] = [];\n }\n return new Dispatch(_);\n }\n\n function Dispatch(_) {\n this._ = _;\n }\n\n function parseTypenames(typenames, types) {\n return typenames.trim().split(/^|\\s+/).map(function(t) {\n var name = \"\", i = t.indexOf(\".\");\n if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\n if (t && !types.hasOwnProperty(t)) throw new Error(\"unknown type: \" + t);\n return {type: t, name: name};\n });\n }\n\n Dispatch.prototype = dispatch.prototype = {\n constructor: Dispatch,\n on: function(typename, callback) {\n var _ = this._,\n T = parseTypenames(typename + \"\", _),\n t,\n i = -1,\n n = T.length;\n\n // If no callback was specified, return the callback of the given type and name.\n if (arguments.length < 2) {\n while (++i < n) if ((t = (typename = T[i]).type) && (t = get(_[t], typename.name))) return t;\n return;\n }\n\n // If a type was specified, set the callback for the given type and name.\n // Otherwise, if a null callback was specified, remove callbacks of the given name.\n if (callback != null && typeof callback !== \"function\") throw new Error(\"invalid callback: \" + callback);\n while (++i < n) {\n if (t = (typename = T[i]).type) _[t] = set(_[t], typename.name, callback);\n else if (callback == null) for (t in _) _[t] = set(_[t], typename.name, null);\n }\n\n return this;\n },\n copy: function() {\n var copy = {}, _ = this._;\n for (var t in _) copy[t] = _[t].slice();\n return new Dispatch(copy);\n },\n call: function(type, that) {\n if ((n = arguments.length - 2) > 0) for (var args = new Array(n), i = 0, n, t; i < n; ++i) args[i] = arguments[i + 2];\n if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n for (t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n },\n apply: function(type, that, args) {\n if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n for (var t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n }\n };\n\n function get(type, name) {\n for (var i = 0, n = type.length, c; i < n; ++i) {\n if ((c = type[i]).name === name) {\n return c.value;\n }\n }\n }\n\n function set(type, name, callback) {\n for (var i = 0, n = type.length; i < n; ++i) {\n if (type[i].name === name) {\n type[i] = noop, type = type.slice(0, i).concat(type.slice(i + 1));\n break;\n }\n }\n if (callback != null) type.push({name: name, value: callback});\n return type;\n }\n\n var xhtml = \"http://www.w3.org/1999/xhtml\";\n\n var namespaces = {\n svg: \"http://www.w3.org/2000/svg\",\n xhtml: xhtml,\n xlink: \"http://www.w3.org/1999/xlink\",\n xml: \"http://www.w3.org/XML/1998/namespace\",\n xmlns: \"http://www.w3.org/2000/xmlns/\"\n };\n\n function namespace(name) {\n var prefix = name += \"\", i = prefix.indexOf(\":\");\n if (i >= 0 && (prefix = name.slice(0, i)) !== \"xmlns\") name = name.slice(i + 1);\n return namespaces.hasOwnProperty(prefix) ? {space: namespaces[prefix], local: name} : name;\n }\n\n function creatorInherit(name) {\n return function() {\n var document = this.ownerDocument,\n uri = this.namespaceURI;\n return uri === xhtml && document.documentElement.namespaceURI === xhtml\n ? document.createElement(name)\n : document.createElementNS(uri, name);\n };\n }\n\n function creatorFixed(fullname) {\n return function() {\n return this.ownerDocument.createElementNS(fullname.space, fullname.local);\n };\n }\n\n function creator(name) {\n var fullname = namespace(name);\n return (fullname.local\n ? creatorFixed\n : creatorInherit)(fullname);\n }\n\n function none() {}\n\n function selector(selector) {\n return selector == null ? none : function() {\n return this.querySelector(selector);\n };\n }\n\n function selection_select(select) {\n if (typeof select !== \"function\") select = selector(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {\n if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) {\n if (\"__data__\" in node) subnode.__data__ = node.__data__;\n subgroup[i] = subnode;\n }\n }\n }\n\n return new Selection(subgroups, this._parents);\n }\n\n function empty() {\n return [];\n }\n\n function selectorAll(selector) {\n return selector == null ? empty : function() {\n return this.querySelectorAll(selector);\n };\n }\n\n function selection_selectAll(select) {\n if (typeof select !== \"function\") select = selectorAll(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n subgroups.push(select.call(node, node.__data__, i, group));\n parents.push(node);\n }\n }\n }\n\n return new Selection(subgroups, parents);\n }\n\n function matcher(selector) {\n return function() {\n return this.matches(selector);\n };\n }\n\n function selection_filter(match) {\n if (typeof match !== \"function\") match = matcher(match);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {\n if ((node = group[i]) && match.call(node, node.__data__, i, group)) {\n subgroup.push(node);\n }\n }\n }\n\n return new Selection(subgroups, this._parents);\n }\n\n function sparse(update) {\n return new Array(update.length);\n }\n\n function selection_enter() {\n return new Selection(this._enter || this._groups.map(sparse), this._parents);\n }\n\n function EnterNode(parent, datum) {\n this.ownerDocument = parent.ownerDocument;\n this.namespaceURI = parent.namespaceURI;\n this._next = null;\n this._parent = parent;\n this.__data__ = datum;\n }\n\n EnterNode.prototype = {\n constructor: EnterNode,\n appendChild: function(child) { return this._parent.insertBefore(child, this._next); },\n insertBefore: function(child, next) { return this._parent.insertBefore(child, next); },\n querySelector: function(selector) { return this._parent.querySelector(selector); },\n querySelectorAll: function(selector) { return this._parent.querySelectorAll(selector); }\n };\n\n function constant$2(x) {\n return function() {\n return x;\n };\n }\n\n var keyPrefix = \"$\"; // Protect against keys like “__proto__”.\n\n function bindIndex(parent, group, enter, update, exit, data) {\n var i = 0,\n node,\n groupLength = group.length,\n dataLength = data.length;\n\n // Put any non-null nodes that fit into update.\n // Put any null nodes into enter.\n // Put any remaining data into enter.\n for (; i < dataLength; ++i) {\n if (node = group[i]) {\n node.__data__ = data[i];\n update[i] = node;\n } else {\n enter[i] = new EnterNode(parent, data[i]);\n }\n }\n\n // Put any non-null nodes that don’t fit into exit.\n for (; i < groupLength; ++i) {\n if (node = group[i]) {\n exit[i] = node;\n }\n }\n }\n\n function bindKey(parent, group, enter, update, exit, data, key) {\n var i,\n node,\n nodeByKeyValue = {},\n groupLength = group.length,\n dataLength = data.length,\n keyValues = new Array(groupLength),\n keyValue;\n\n // Compute the key for each node.\n // If multiple nodes have the same key, the duplicates are added to exit.\n for (i = 0; i < groupLength; ++i) {\n if (node = group[i]) {\n keyValues[i] = keyValue = keyPrefix + key.call(node, node.__data__, i, group);\n if (keyValue in nodeByKeyValue) {\n exit[i] = node;\n } else {\n nodeByKeyValue[keyValue] = node;\n }\n }\n }\n\n // Compute the key for each datum.\n // If there a node associated with this key, join and add it to update.\n // If there is not (or the key is a duplicate), add it to enter.\n for (i = 0; i < dataLength; ++i) {\n keyValue = keyPrefix + key.call(parent, data[i], i, data);\n if (node = nodeByKeyValue[keyValue]) {\n update[i] = node;\n node.__data__ = data[i];\n nodeByKeyValue[keyValue] = null;\n } else {\n enter[i] = new EnterNode(parent, data[i]);\n }\n }\n\n // Add any remaining nodes that were not bound to data to exit.\n for (i = 0; i < groupLength; ++i) {\n if ((node = group[i]) && (nodeByKeyValue[keyValues[i]] === node)) {\n exit[i] = node;\n }\n }\n }\n\n function selection_data(value, key) {\n if (!value) {\n data = new Array(this.size()), j = -1;\n this.each(function(d) { data[++j] = d; });\n return data;\n }\n\n var bind = key ? bindKey : bindIndex,\n parents = this._parents,\n groups = this._groups;\n\n if (typeof value !== \"function\") value = constant$2(value);\n\n for (var m = groups.length, update = new Array(m), enter = new Array(m), exit = new Array(m), j = 0; j < m; ++j) {\n var parent = parents[j],\n group = groups[j],\n groupLength = group.length,\n data = value.call(parent, parent && parent.__data__, j, parents),\n dataLength = data.length,\n enterGroup = enter[j] = new Array(dataLength),\n updateGroup = update[j] = new Array(dataLength),\n exitGroup = exit[j] = new Array(groupLength);\n\n bind(parent, group, enterGroup, updateGroup, exitGroup, data, key);\n\n // Now connect the enter nodes to their following update node, such that\n // appendChild can insert the materialized enter node before this node,\n // rather than at the end of the parent node.\n for (var i0 = 0, i1 = 0, previous, next; i0 < dataLength; ++i0) {\n if (previous = enterGroup[i0]) {\n if (i0 >= i1) i1 = i0 + 1;\n while (!(next = updateGroup[i1]) && ++i1 < dataLength);\n previous._next = next || null;\n }\n }\n }\n\n update = new Selection(update, parents);\n update._enter = enter;\n update._exit = exit;\n return update;\n }\n\n function selection_exit() {\n return new Selection(this._exit || this._groups.map(sparse), this._parents);\n }\n\n function selection_join(onenter, onupdate, onexit) {\n var enter = this.enter(), update = this, exit = this.exit();\n enter = typeof onenter === \"function\" ? onenter(enter) : enter.append(onenter + \"\");\n if (onupdate != null) update = onupdate(update);\n if (onexit == null) exit.remove(); else onexit(exit);\n return enter && update ? enter.merge(update).order() : update;\n }\n\n function selection_merge(selection) {\n\n for (var groups0 = this._groups, groups1 = selection._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) {\n for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {\n if (node = group0[i] || group1[i]) {\n merge[i] = node;\n }\n }\n }\n\n for (; j < m0; ++j) {\n merges[j] = groups0[j];\n }\n\n return new Selection(merges, this._parents);\n }\n\n function selection_order() {\n\n for (var groups = this._groups, j = -1, m = groups.length; ++j < m;) {\n for (var group = groups[j], i = group.length - 1, next = group[i], node; --i >= 0;) {\n if (node = group[i]) {\n if (next && node.compareDocumentPosition(next) ^ 4) next.parentNode.insertBefore(node, next);\n next = node;\n }\n }\n }\n\n return this;\n }\n\n function selection_sort(compare) {\n if (!compare) compare = ascending$1;\n\n function compareNode(a, b) {\n return a && b ? compare(a.__data__, b.__data__) : !a - !b;\n }\n\n for (var groups = this._groups, m = groups.length, sortgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, sortgroup = sortgroups[j] = new Array(n), node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n sortgroup[i] = node;\n }\n }\n sortgroup.sort(compareNode);\n }\n\n return new Selection(sortgroups, this._parents).order();\n }\n\n function ascending$1(a, b) {\n return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n }\n\n function selection_call() {\n var callback = arguments[0];\n arguments[0] = this;\n callback.apply(null, arguments);\n return this;\n }\n\n function selection_nodes() {\n var nodes = new Array(this.size()), i = -1;\n this.each(function() { nodes[++i] = this; });\n return nodes;\n }\n\n function selection_node() {\n\n for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n for (var group = groups[j], i = 0, n = group.length; i < n; ++i) {\n var node = group[i];\n if (node) return node;\n }\n }\n\n return null;\n }\n\n function selection_size() {\n var size = 0;\n this.each(function() { ++size; });\n return size;\n }\n\n function selection_empty() {\n return !this.node();\n }\n\n function selection_each(callback) {\n\n for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n for (var group = groups[j], i = 0, n = group.length, node; i < n; ++i) {\n if (node = group[i]) callback.call(node, node.__data__, i, group);\n }\n }\n\n return this;\n }\n\n function attrRemove(name) {\n return function() {\n this.removeAttribute(name);\n };\n }\n\n function attrRemoveNS(fullname) {\n return function() {\n this.removeAttributeNS(fullname.space, fullname.local);\n };\n }\n\n function attrConstant(name, value) {\n return function() {\n this.setAttribute(name, value);\n };\n }\n\n function attrConstantNS(fullname, value) {\n return function() {\n this.setAttributeNS(fullname.space, fullname.local, value);\n };\n }\n\n function attrFunction(name, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) this.removeAttribute(name);\n else this.setAttribute(name, v);\n };\n }\n\n function attrFunctionNS(fullname, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) this.removeAttributeNS(fullname.space, fullname.local);\n else this.setAttributeNS(fullname.space, fullname.local, v);\n };\n }\n\n function selection_attr(name, value) {\n var fullname = namespace(name);\n\n if (arguments.length < 2) {\n var node = this.node();\n return fullname.local\n ? node.getAttributeNS(fullname.space, fullname.local)\n : node.getAttribute(fullname);\n }\n\n return this.each((value == null\n ? (fullname.local ? attrRemoveNS : attrRemove) : (typeof value === \"function\"\n ? (fullname.local ? attrFunctionNS : attrFunction)\n : (fullname.local ? attrConstantNS : attrConstant)))(fullname, value));\n }\n\n function defaultView(node) {\n return (node.ownerDocument && node.ownerDocument.defaultView) // node is a Node\n || (node.document && node) // node is a Window\n || node.defaultView; // node is a Document\n }\n\n function styleRemove(name) {\n return function() {\n this.style.removeProperty(name);\n };\n }\n\n function styleConstant(name, value, priority) {\n return function() {\n this.style.setProperty(name, value, priority);\n };\n }\n\n function styleFunction(name, value, priority) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) this.style.removeProperty(name);\n else this.style.setProperty(name, v, priority);\n };\n }\n\n function selection_style(name, value, priority) {\n return arguments.length > 1\n ? this.each((value == null\n ? styleRemove : typeof value === \"function\"\n ? styleFunction\n : styleConstant)(name, value, priority == null ? \"\" : priority))\n : styleValue(this.node(), name);\n }\n\n function styleValue(node, name) {\n return node.style.getPropertyValue(name)\n || defaultView(node).getComputedStyle(node, null).getPropertyValue(name);\n }\n\n function propertyRemove(name) {\n return function() {\n delete this[name];\n };\n }\n\n function propertyConstant(name, value) {\n return function() {\n this[name] = value;\n };\n }\n\n function propertyFunction(name, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) delete this[name];\n else this[name] = v;\n };\n }\n\n function selection_property(name, value) {\n return arguments.length > 1\n ? this.each((value == null\n ? propertyRemove : typeof value === \"function\"\n ? propertyFunction\n : propertyConstant)(name, value))\n : this.node()[name];\n }\n\n function classArray(string) {\n return string.trim().split(/^|\\s+/);\n }\n\n function classList(node) {\n return node.classList || new ClassList(node);\n }\n\n function ClassList(node) {\n this._node = node;\n this._names = classArray(node.getAttribute(\"class\") || \"\");\n }\n\n ClassList.prototype = {\n add: function(name) {\n var i = this._names.indexOf(name);\n if (i < 0) {\n this._names.push(name);\n this._node.setAttribute(\"class\", this._names.join(\" \"));\n }\n },\n remove: function(name) {\n var i = this._names.indexOf(name);\n if (i >= 0) {\n this._names.splice(i, 1);\n this._node.setAttribute(\"class\", this._names.join(\" \"));\n }\n },\n contains: function(name) {\n return this._names.indexOf(name) >= 0;\n }\n };\n\n function classedAdd(node, names) {\n var list = classList(node), i = -1, n = names.length;\n while (++i < n) list.add(names[i]);\n }\n\n function classedRemove(node, names) {\n var list = classList(node), i = -1, n = names.length;\n while (++i < n) list.remove(names[i]);\n }\n\n function classedTrue(names) {\n return function() {\n classedAdd(this, names);\n };\n }\n\n function classedFalse(names) {\n return function() {\n classedRemove(this, names);\n };\n }\n\n function classedFunction(names, value) {\n return function() {\n (value.apply(this, arguments) ? classedAdd : classedRemove)(this, names);\n };\n }\n\n function selection_classed(name, value) {\n var names = classArray(name + \"\");\n\n if (arguments.length < 2) {\n var list = classList(this.node()), i = -1, n = names.length;\n while (++i < n) if (!list.contains(names[i])) return false;\n return true;\n }\n\n return this.each((typeof value === \"function\"\n ? classedFunction : value\n ? classedTrue\n : classedFalse)(names, value));\n }\n\n function textRemove() {\n this.textContent = \"\";\n }\n\n function textConstant(value) {\n return function() {\n this.textContent = value;\n };\n }\n\n function textFunction(value) {\n return function() {\n var v = value.apply(this, arguments);\n this.textContent = v == null ? \"\" : v;\n };\n }\n\n function selection_text(value) {\n return arguments.length\n ? this.each(value == null\n ? textRemove : (typeof value === \"function\"\n ? textFunction\n : textConstant)(value))\n : this.node().textContent;\n }\n\n function htmlRemove() {\n this.innerHTML = \"\";\n }\n\n function htmlConstant(value) {\n return function() {\n this.innerHTML = value;\n };\n }\n\n function htmlFunction(value) {\n return function() {\n var v = value.apply(this, arguments);\n this.innerHTML = v == null ? \"\" : v;\n };\n }\n\n function selection_html(value) {\n return arguments.length\n ? this.each(value == null\n ? htmlRemove : (typeof value === \"function\"\n ? htmlFunction\n : htmlConstant)(value))\n : this.node().innerHTML;\n }\n\n function raise() {\n if (this.nextSibling) this.parentNode.appendChild(this);\n }\n\n function selection_raise() {\n return this.each(raise);\n }\n\n function lower() {\n if (this.previousSibling) this.parentNode.insertBefore(this, this.parentNode.firstChild);\n }\n\n function selection_lower() {\n return this.each(lower);\n }\n\n function selection_append(name) {\n var create = typeof name === \"function\" ? name : creator(name);\n return this.select(function() {\n return this.appendChild(create.apply(this, arguments));\n });\n }\n\n function constantNull() {\n return null;\n }\n\n function selection_insert(name, before) {\n var create = typeof name === \"function\" ? name : creator(name),\n select = before == null ? constantNull : typeof before === \"function\" ? before : selector(before);\n return this.select(function() {\n return this.insertBefore(create.apply(this, arguments), select.apply(this, arguments) || null);\n });\n }\n\n function remove() {\n var parent = this.parentNode;\n if (parent) parent.removeChild(this);\n }\n\n function selection_remove() {\n return this.each(remove);\n }\n\n function selection_cloneShallow() {\n var clone = this.cloneNode(false), parent = this.parentNode;\n return parent ? parent.insertBefore(clone, this.nextSibling) : clone;\n }\n\n function selection_cloneDeep() {\n var clone = this.cloneNode(true), parent = this.parentNode;\n return parent ? parent.insertBefore(clone, this.nextSibling) : clone;\n }\n\n function selection_clone(deep) {\n return this.select(deep ? selection_cloneDeep : selection_cloneShallow);\n }\n\n function selection_datum(value) {\n return arguments.length\n ? this.property(\"__data__\", value)\n : this.node().__data__;\n }\n\n var filterEvents = {};\n\n var event = null;\n\n if (typeof document !== \"undefined\") {\n var element = document.documentElement;\n if (!(\"onmouseenter\" in element)) {\n filterEvents = {mouseenter: \"mouseover\", mouseleave: \"mouseout\"};\n }\n }\n\n function filterContextListener(listener, index, group) {\n listener = contextListener(listener, index, group);\n return function(event) {\n var related = event.relatedTarget;\n if (!related || (related !== this && !(related.compareDocumentPosition(this) & 8))) {\n listener.call(this, event);\n }\n };\n }\n\n function contextListener(listener, index, group) {\n return function(event1) {\n var event0 = event; // Events can be reentrant (e.g., focus).\n event = event1;\n try {\n listener.call(this, this.__data__, index, group);\n } finally {\n event = event0;\n }\n };\n }\n\n function parseTypenames$1(typenames) {\n return typenames.trim().split(/^|\\s+/).map(function(t) {\n var name = \"\", i = t.indexOf(\".\");\n if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\n return {type: t, name: name};\n });\n }\n\n function onRemove(typename) {\n return function() {\n var on = this.__on;\n if (!on) return;\n for (var j = 0, i = -1, m = on.length, o; j < m; ++j) {\n if (o = on[j], (!typename.type || o.type === typename.type) && o.name === typename.name) {\n this.removeEventListener(o.type, o.listener, o.capture);\n } else {\n on[++i] = o;\n }\n }\n if (++i) on.length = i;\n else delete this.__on;\n };\n }\n\n function onAdd(typename, value, capture) {\n var wrap = filterEvents.hasOwnProperty(typename.type) ? filterContextListener : contextListener;\n return function(d, i, group) {\n var on = this.__on, o, listener = wrap(value, i, group);\n if (on) for (var j = 0, m = on.length; j < m; ++j) {\n if ((o = on[j]).type === typename.type && o.name === typename.name) {\n this.removeEventListener(o.type, o.listener, o.capture);\n this.addEventListener(o.type, o.listener = listener, o.capture = capture);\n o.value = value;\n return;\n }\n }\n this.addEventListener(typename.type, listener, capture);\n o = {type: typename.type, name: typename.name, value: value, listener: listener, capture: capture};\n if (!on) this.__on = [o];\n else on.push(o);\n };\n }\n\n function selection_on(typename, value, capture) {\n var typenames = parseTypenames$1(typename + \"\"), i, n = typenames.length, t;\n\n if (arguments.length < 2) {\n var on = this.node().__on;\n if (on) for (var j = 0, m = on.length, o; j < m; ++j) {\n for (i = 0, o = on[j]; i < n; ++i) {\n if ((t = typenames[i]).type === o.type && t.name === o.name) {\n return o.value;\n }\n }\n }\n return;\n }\n\n on = value ? onAdd : onRemove;\n if (capture == null) capture = false;\n for (i = 0; i < n; ++i) this.each(on(typenames[i], value, capture));\n return this;\n }\n\n function customEvent(event1, listener, that, args) {\n var event0 = event;\n event1.sourceEvent = event;\n event = event1;\n try {\n return listener.apply(that, args);\n } finally {\n event = event0;\n }\n }\n\n function dispatchEvent(node, type, params) {\n var window = defaultView(node),\n event = window.CustomEvent;\n\n if (typeof event === \"function\") {\n event = new event(type, params);\n } else {\n event = window.document.createEvent(\"Event\");\n if (params) event.initEvent(type, params.bubbles, params.cancelable), event.detail = params.detail;\n else event.initEvent(type, false, false);\n }\n\n node.dispatchEvent(event);\n }\n\n function dispatchConstant(type, params) {\n return function() {\n return dispatchEvent(this, type, params);\n };\n }\n\n function dispatchFunction(type, params) {\n return function() {\n return dispatchEvent(this, type, params.apply(this, arguments));\n };\n }\n\n function selection_dispatch(type, params) {\n return this.each((typeof params === \"function\"\n ? dispatchFunction\n : dispatchConstant)(type, params));\n }\n\n var root = [null];\n\n function Selection(groups, parents) {\n this._groups = groups;\n this._parents = parents;\n }\n\n function selection() {\n return new Selection([[document.documentElement]], root);\n }\n\n Selection.prototype = selection.prototype = {\n constructor: Selection,\n select: selection_select,\n selectAll: selection_selectAll,\n filter: selection_filter,\n data: selection_data,\n enter: selection_enter,\n exit: selection_exit,\n join: selection_join,\n merge: selection_merge,\n order: selection_order,\n sort: selection_sort,\n call: selection_call,\n nodes: selection_nodes,\n node: selection_node,\n size: selection_size,\n empty: selection_empty,\n each: selection_each,\n attr: selection_attr,\n style: selection_style,\n property: selection_property,\n classed: selection_classed,\n text: selection_text,\n html: selection_html,\n raise: selection_raise,\n lower: selection_lower,\n append: selection_append,\n insert: selection_insert,\n remove: selection_remove,\n clone: selection_clone,\n datum: selection_datum,\n on: selection_on,\n dispatch: selection_dispatch\n };\n\n function select(selector) {\n return typeof selector === \"string\"\n ? new Selection([[document.querySelector(selector)]], [document.documentElement])\n : new Selection([[selector]], root);\n }\n\n function sourceEvent() {\n var current = event, source;\n while (source = current.sourceEvent) current = source;\n return current;\n }\n\n function point(node, event) {\n var svg = node.ownerSVGElement || node;\n\n if (svg.createSVGPoint) {\n var point = svg.createSVGPoint();\n point.x = event.clientX, point.y = event.clientY;\n point = point.matrixTransform(node.getScreenCTM().inverse());\n return [point.x, point.y];\n }\n\n var rect = node.getBoundingClientRect();\n return [event.clientX - rect.left - node.clientLeft, event.clientY - rect.top - node.clientTop];\n }\n\n function mouse(node) {\n var event = sourceEvent();\n if (event.changedTouches) event = event.changedTouches[0];\n return point(node, event);\n }\n\n function touch(node, touches, identifier) {\n if (arguments.length < 3) identifier = touches, touches = sourceEvent().changedTouches;\n\n for (var i = 0, n = touches ? touches.length : 0, touch; i < n; ++i) {\n if ((touch = touches[i]).identifier === identifier) {\n return point(node, touch);\n }\n }\n\n return null;\n }\n\n function nopropagation() {\n event.stopImmediatePropagation();\n }\n\n function noevent() {\n event.preventDefault();\n event.stopImmediatePropagation();\n }\n\n function nodrag(view) {\n var root = view.document.documentElement,\n selection = select(view).on(\"dragstart.drag\", noevent, true);\n if (\"onselectstart\" in root) {\n selection.on(\"selectstart.drag\", noevent, true);\n } else {\n root.__noselect = root.style.MozUserSelect;\n root.style.MozUserSelect = \"none\";\n }\n }\n\n function yesdrag(view, noclick) {\n var root = view.document.documentElement,\n selection = select(view).on(\"dragstart.drag\", null);\n if (noclick) {\n selection.on(\"click.drag\", noevent, true);\n setTimeout(function() { selection.on(\"click.drag\", null); }, 0);\n }\n if (\"onselectstart\" in root) {\n selection.on(\"selectstart.drag\", null);\n } else {\n root.style.MozUserSelect = root.__noselect;\n delete root.__noselect;\n }\n }\n\n function constant$3(x) {\n return function() {\n return x;\n };\n }\n\n function DragEvent(target, type, subject, id, active, x, y, dx, dy, dispatch) {\n this.target = target;\n this.type = type;\n this.subject = subject;\n this.identifier = id;\n this.active = active;\n this.x = x;\n this.y = y;\n this.dx = dx;\n this.dy = dy;\n this._ = dispatch;\n }\n\n DragEvent.prototype.on = function() {\n var value = this._.on.apply(this._, arguments);\n return value === this._ ? this : value;\n };\n\n // Ignore right-click, since that should open the context menu.\n function defaultFilter() {\n return !event.ctrlKey && !event.button;\n }\n\n function defaultContainer() {\n return this.parentNode;\n }\n\n function defaultSubject(d) {\n return d == null ? {x: event.x, y: event.y} : d;\n }\n\n function defaultTouchable() {\n return navigator.maxTouchPoints || (\"ontouchstart\" in this);\n }\n\n function drag() {\n var filter = defaultFilter,\n container = defaultContainer,\n subject = defaultSubject,\n touchable = defaultTouchable,\n gestures = {},\n listeners = dispatch(\"start\", \"drag\", \"end\"),\n active = 0,\n mousedownx,\n mousedowny,\n mousemoving,\n touchending,\n clickDistance2 = 0;\n\n function drag(selection) {\n selection\n .on(\"mousedown.drag\", mousedowned)\n .filter(touchable)\n .on(\"touchstart.drag\", touchstarted)\n .on(\"touchmove.drag\", touchmoved)\n .on(\"touchend.drag touchcancel.drag\", touchended)\n .style(\"touch-action\", \"none\")\n .style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\");\n }\n\n function mousedowned() {\n if (touchending || !filter.apply(this, arguments)) return;\n var gesture = beforestart(\"mouse\", container.apply(this, arguments), mouse, this, arguments);\n if (!gesture) return;\n select(event.view).on(\"mousemove.drag\", mousemoved, true).on(\"mouseup.drag\", mouseupped, true);\n nodrag(event.view);\n nopropagation();\n mousemoving = false;\n mousedownx = event.clientX;\n mousedowny = event.clientY;\n gesture(\"start\");\n }\n\n function mousemoved() {\n noevent();\n if (!mousemoving) {\n var dx = event.clientX - mousedownx, dy = event.clientY - mousedowny;\n mousemoving = dx * dx + dy * dy > clickDistance2;\n }\n gestures.mouse(\"drag\");\n }\n\n function mouseupped() {\n select(event.view).on(\"mousemove.drag mouseup.drag\", null);\n yesdrag(event.view, mousemoving);\n noevent();\n gestures.mouse(\"end\");\n }\n\n function touchstarted() {\n if (!filter.apply(this, arguments)) return;\n var touches = event.changedTouches,\n c = container.apply(this, arguments),\n n = touches.length, i, gesture;\n\n for (i = 0; i < n; ++i) {\n if (gesture = beforestart(touches[i].identifier, c, touch, this, arguments)) {\n nopropagation();\n gesture(\"start\");\n }\n }\n }\n\n function touchmoved() {\n var touches = event.changedTouches,\n n = touches.length, i, gesture;\n\n for (i = 0; i < n; ++i) {\n if (gesture = gestures[touches[i].identifier]) {\n noevent();\n gesture(\"drag\");\n }\n }\n }\n\n function touchended() {\n var touches = event.changedTouches,\n n = touches.length, i, gesture;\n\n if (touchending) clearTimeout(touchending);\n touchending = setTimeout(function() { touchending = null; }, 500); // Ghost clicks are delayed!\n for (i = 0; i < n; ++i) {\n if (gesture = gestures[touches[i].identifier]) {\n nopropagation();\n gesture(\"end\");\n }\n }\n }\n\n function beforestart(id, container, point, that, args) {\n var p = point(container, id), s, dx, dy,\n sublisteners = listeners.copy();\n\n if (!customEvent(new DragEvent(drag, \"beforestart\", s, id, active, p[0], p[1], 0, 0, sublisteners), function() {\n if ((event.subject = s = subject.apply(that, args)) == null) return false;\n dx = s.x - p[0] || 0;\n dy = s.y - p[1] || 0;\n return true;\n })) return;\n\n return function gesture(type) {\n var p0 = p, n;\n switch (type) {\n case \"start\": gestures[id] = gesture, n = active++; break;\n case \"end\": delete gestures[id], --active; // nobreak\n case \"drag\": p = point(container, id), n = active; break;\n }\n customEvent(new DragEvent(drag, type, s, id, n, p[0] + dx, p[1] + dy, p[0] - p0[0], p[1] - p0[1], sublisteners), sublisteners.apply, sublisteners, [type, that, args]);\n };\n }\n\n drag.filter = function(_) {\n return arguments.length ? (filter = typeof _ === \"function\" ? _ : constant$3(!!_), drag) : filter;\n };\n\n drag.container = function(_) {\n return arguments.length ? (container = typeof _ === \"function\" ? _ : constant$3(_), drag) : container;\n };\n\n drag.subject = function(_) {\n return arguments.length ? (subject = typeof _ === \"function\" ? _ : constant$3(_), drag) : subject;\n };\n\n drag.touchable = function(_) {\n return arguments.length ? (touchable = typeof _ === \"function\" ? _ : constant$3(!!_), drag) : touchable;\n };\n\n drag.on = function() {\n var value = listeners.on.apply(listeners, arguments);\n return value === listeners ? drag : value;\n };\n\n drag.clickDistance = function(_) {\n return arguments.length ? (clickDistance2 = (_ = +_) * _, drag) : Math.sqrt(clickDistance2);\n };\n\n return drag;\n }\n\n // Copyright 2018 The Distill Template Authors\n\n const T$a = Template('d-slider', `\n<style>\n :host {\n position: relative;\n display: inline-block;\n }\n\n :host(:focus) {\n outline: none;\n }\n\n .background {\n padding: 9px 0;\n color: white;\n position: relative;\n }\n\n .track {\n height: 3px;\n width: 100%;\n border-radius: 2px;\n background-color: hsla(0, 0%, 0%, 0.2);\n }\n\n .track-fill {\n position: absolute;\n top: 9px;\n height: 3px;\n border-radius: 4px;\n background-color: hsl(24, 100%, 50%);\n }\n\n .knob-container {\n position: absolute;\n top: 10px;\n }\n\n .knob {\n position: absolute;\n top: -6px;\n left: -6px;\n width: 13px;\n height: 13px;\n background-color: hsl(24, 100%, 50%);\n border-radius: 50%;\n transition-property: transform;\n transition-duration: 0.18s;\n transition-timing-function: ease;\n }\n .mousedown .knob {\n transform: scale(1.5);\n }\n\n .knob-highlight {\n position: absolute;\n top: -6px;\n left: -6px;\n width: 13px;\n height: 13px;\n background-color: hsla(0, 0%, 0%, 0.1);\n border-radius: 50%;\n transition-property: transform;\n transition-duration: 0.18s;\n transition-timing-function: ease;\n }\n\n .focus .knob-highlight {\n transform: scale(2);\n }\n\n .ticks {\n position: absolute;\n top: 16px;\n height: 4px;\n width: 100%;\n z-index: -1;\n }\n\n .ticks .tick {\n position: absolute;\n height: 100%;\n border-left: 1px solid hsla(0, 0%, 0%, 0.2);\n }\n\n</style>\n\n <div class='background'>\n <div class='track'></div>\n <div class='track-fill'></div>\n <div class='knob-container'>\n <div class='knob-highlight'></div>\n <div class='knob'></div>\n </div>\n <div class='ticks'></div>\n </div>\n`);\n\n // ARIA\n // If the slider has a visible label, it is referenced by aria-labelledby on the slider element. Otherwise, the slider element has a label provided by aria-label.\n // If the slider is vertically oriented, it has aria-orientation set to vertical. The default value of aria-orientation for a slider is horizontal.\n\n const keyCodes = {\n left: 37,\n up: 38,\n right: 39,\n down: 40,\n pageUp: 33,\n pageDown: 34,\n end: 35,\n home: 36\n };\n\n class Slider extends T$a(HTMLElement) {\n\n\n connectedCallback() {\n this.connected = true;\n this.setAttribute('role', 'slider');\n // Makes the element tab-able.\n if (!this.hasAttribute('tabindex')) { this.setAttribute('tabindex', 0); }\n\n // Keeps track of keyboard vs. mouse interactions for focus rings\n this.mouseEvent = false;\n\n // Handles to shadow DOM elements\n this.knob = this.root.querySelector('.knob-container');\n this.background = this.root.querySelector('.background');\n this.trackFill = this.root.querySelector('.track-fill');\n this.track = this.root.querySelector('.track');\n\n // Default values for attributes\n this.min = this.min ? this.min : 0;\n this.max = this.max ? this.max : 100;\n this.scale = linear$1().domain([this.min, this.max]).range([0, 1]).clamp(true);\n\n this.origin = this.origin !== undefined ? this.origin : this.min;\n this.step = this.step ? this.step : 1;\n this.update(this.value ? this.value : 0);\n\n this.ticks = this.ticks ? this.ticks : false;\n this.renderTicks();\n\n this.drag = drag()\n .container(this.background)\n .on('start', () => {\n this.mouseEvent = true;\n this.background.classList.add('mousedown');\n this.changeValue = this.value;\n this.dragUpdate();\n })\n .on('drag', () => {\n this.dragUpdate();\n })\n .on('end', () => {\n this.mouseEvent = false;\n this.background.classList.remove('mousedown');\n this.dragUpdate();\n if (this.changeValue !== this.value) this.dispatchChange();\n this.changeValue = this.value;\n });\n this.drag(select(this.background));\n\n this.addEventListener('focusin', () => {\n if(!this.mouseEvent) {\n this.background.classList.add('focus');\n }\n });\n this.addEventListener('focusout', () => {\n this.background.classList.remove('focus');\n });\n this.addEventListener('keydown', this.onKeyDown);\n\n }\n\n static get observedAttributes() {return ['min', 'max', 'value', 'step', 'ticks', 'origin', 'tickValues', 'tickLabels']; }\n\n attributeChangedCallback(attr, oldValue, newValue) {\n if (isNaN(newValue) || newValue === undefined || newValue === null) return;\n if (attr == 'min') {\n this.min = +newValue;\n this.setAttribute('aria-valuemin', this.min);\n }\n if (attr == 'max') {\n this.max = +newValue;\n this.setAttribute('aria-valuemax', this.max);\n }\n if (attr == 'value') {\n this.update(+newValue);\n }\n if (attr == 'origin') {\n this.origin = +newValue;\n // this.update(this.value);\n }\n if (attr == 'step') {\n if (newValue > 0) {\n this.step = +newValue;\n }\n }\n if (attr == 'ticks') {\n this.ticks = (newValue === '' ? true : newValue);\n }\n }\n\n onKeyDown(event) {\n this.changeValue = this.value;\n let stopPropagation = false;\n switch (event.keyCode) {\n case keyCodes.left:\n case keyCodes.down:\n this.update(this.value - this.step);\n stopPropagation = true;\n break;\n case keyCodes.right:\n case keyCodes.up:\n this.update(this.value + this.step);\n stopPropagation = true;\n break;\n case keyCodes.pageUp:\n this.update(this.value + this.step * 10);\n stopPropagation = true;\n break;\n\n case keyCodes.pageDown:\n this.update(this.value + this.step * 10);\n stopPropagation = true;\n break;\n case keyCodes.home:\n this.update(this.min);\n stopPropagation = true;\n break;\n case keyCodes.end:\n this.update(this.max);\n stopPropagation = true;\n break;\n }\n if (stopPropagation) {\n this.background.classList.add('focus');\n event.preventDefault();\n event.stopPropagation();\n if (this.changeValue !== this.value) this.dispatchChange();\n }\n }\n\n validateValueRange(min, max, value) {\n return Math.max(Math.min(max, value), min);\n }\n\n quantizeValue(value, step) {\n return Math.round(value / step) * step;\n }\n\n dragUpdate() {\n const bbox = this.background.getBoundingClientRect();\n const x = event.x;\n const width = bbox.width;\n this.update(this.scale.invert(x / width));\n }\n\n update(value) {\n let v = value;\n if (this.step !== 'any') {\n v = this.quantizeValue(value, this.step);\n }\n v = this.validateValueRange(this.min, this.max, v);\n if (this.connected) {\n this.knob.style.left = this.scale(v) * 100 + '%';\n this.trackFill.style.width = this.scale(this.min + Math.abs(v - this.origin)) * 100 + '%';\n this.trackFill.style.left = this.scale(Math.min(v, this.origin)) * 100 + '%';\n }\n if (this.value !== v) {\n this.value = v;\n this.setAttribute('aria-valuenow', this.value);\n this.dispatchInput();\n }\n }\n\n // Dispatches only on a committed change (basically only on mouseup).\n dispatchChange() {\n const e = new Event('change');\n this.dispatchEvent(e, {});\n }\n\n // Dispatches on each value change.\n dispatchInput() {\n const e = new Event('input');\n this.dispatchEvent(e, {});\n }\n\n renderTicks() {\n const ticksContainer = this.root.querySelector('.ticks');\n if (this.ticks !== false) {\n let tickData = [];\n if (this.ticks > 0) {\n tickData = this.scale.ticks(this.ticks);\n } else if (this.step === 'any') {\n tickData = this.scale.ticks();\n } else {\n tickData = range(this.min, this.max + 1e-6, this.step);\n }\n tickData.forEach(d => {\n const tick = document.createElement('div');\n tick.classList.add('tick');\n tick.style.left = this.scale(d) * 100 + '%';\n ticksContainer.appendChild(tick);\n });\n } else {\n ticksContainer.style.display = 'none';\n }\n }\n }\n\n var logo = \"<svg viewBox=\\\"-607 419 64 64\\\">\\n <path d=\\\"M-573.4,478.9c-8,0-14.6-6.4-14.6-14.5s14.6-25.9,14.6-40.8c0,14.9,14.6,32.8,14.6,40.8S-565.4,478.9-573.4,478.9z\\\"/>\\n</svg>\\n\";\n\n const headerTemplate = `\n<style>\ndistill-header {\n position: relative;\n height: 60px;\n background-color: hsl(200, 60%, 15%);\n width: 100%;\n box-sizing: border-box;\n z-index: 2;\n color: rgba(0, 0, 0, 0.8);\n border-bottom: 1px solid rgba(0, 0, 0, 0.08);\n box-shadow: 0 1px 6px rgba(0, 0, 0, 0.05);\n}\ndistill-header .content {\n height: 70px;\n grid-column: page;\n}\ndistill-header a {\n font-size: 16px;\n height: 60px;\n line-height: 60px;\n text-decoration: none;\n color: rgba(255, 255, 255, 0.8);\n padding: 22px 0;\n}\ndistill-header a:hover {\n color: rgba(255, 255, 255, 1);\n}\ndistill-header svg {\n width: 24px;\n position: relative;\n top: 4px;\n margin-right: 2px;\n}\n@media(min-width: 1080px) {\n distill-header {\n height: 70px;\n }\n distill-header a {\n height: 70px;\n line-height: 70px;\n padding: 28px 0;\n }\n distill-header .logo {\n }\n}\ndistill-header svg path {\n fill: none;\n stroke: rgba(255, 255, 255, 0.8);\n stroke-width: 3px;\n}\ndistill-header .logo {\n font-size: 17px;\n font-weight: 200;\n}\ndistill-header .nav {\n float: right;\n font-weight: 300;\n}\ndistill-header .nav a {\n font-size: 12px;\n margin-left: 24px;\n text-transform: uppercase;\n}\n</style>\n<div class=\"content\">\n <a href=\"/\" class=\"logo\">\n ${logo}\n Distill\n </a>\n <nav class=\"nav\">\n <a href=\"/about/\">About</a>\n <a href=\"/prize/\">Prize</a>\n <a href=\"/journal/\">Submit</a>\n </nav>\n</div>\n`;\n\n // Copyright 2018 The Distill Template Authors\n\n const T$b = Template('distill-header', headerTemplate, false);\n\n class DistillHeader extends T$b(HTMLElement) {\n\n }\n\n // Copyright 2018 The Distill Template Authors\n\n const styles$2 = `\n<style>\n distill-appendix {\n contain: layout style;\n }\n\n distill-appendix .citation {\n font-size: 11px;\n line-height: 15px;\n border-left: 1px solid rgba(0, 0, 0, 0.1);\n padding-left: 18px;\n border: 1px solid rgba(0,0,0,0.1);\n background: rgba(0, 0, 0, 0.02);\n padding: 10px 18px;\n border-radius: 3px;\n color: rgba(150, 150, 150, 1);\n overflow: hidden;\n margin-top: -12px;\n white-space: pre-wrap;\n word-wrap: break-word;\n }\n\n distill-appendix > * {\n grid-column: text;\n }\n</style>\n`;\n\n function appendixTemplate(frontMatter) {\n let html = styles$2;\n\n if (typeof frontMatter.githubUrl !== 'undefined') {\n html += `\n <h3 id=\"updates-and-corrections\">Updates and Corrections</h3>\n <p>`;\n if (frontMatter.githubCompareUpdatesUrl) {\n html += `<a href=\"${frontMatter.githubCompareUpdatesUrl}\">View all changes</a> to this article since it was first published.`;\n }\n html += `\n If you see mistakes or want to suggest changes, please <a href=\"${frontMatter.githubUrl + '/issues/new'}\">create an issue on GitHub</a>. </p>\n `;\n }\n\n const journal = frontMatter.journal;\n if (typeof journal !== 'undefined' && journal.title === 'Distill') {\n html += `\n <h3 id=\"reuse\">Reuse</h3>\n <p>Diagrams and text are licensed under Creative Commons Attribution <a href=\"https://creativecommons.org/licenses/by/4.0/\">CC-BY 4.0</a> with the <a class=\"github\" href=\"${frontMatter.githubUrl}\">source available on GitHub</a>, unless noted otherwise. The figures that have been reused from other sources don���t fall under this license and can be recognized by a note in their caption: “Figure from …”.</p>\n `;\n }\n\n if (typeof frontMatter.publishedDate !== 'undefined') {\n html += `\n <h3 id=\"citation\">Citation</h3>\n <p>For attribution in academic contexts, please cite this work as</p>\n <pre class=\"citation short\">${frontMatter.concatenatedAuthors}, \"${frontMatter.title}\", Distill, ${frontMatter.publishedYear}.</pre>\n <p>BibTeX citation</p>\n <pre class=\"citation long\">${serializeFrontmatterToBibtex(frontMatter)}</pre>\n `;\n }\n\n return html;\n }\n\n class DistillAppendix extends HTMLElement {\n\n static get is() { return 'distill-appendix'; }\n\n set frontMatter(frontMatter) {\n this.innerHTML = appendixTemplate(frontMatter);\n }\n\n }\n\n const footerTemplate = `\n<style>\n\n:host {\n color: rgba(255, 255, 255, 0.5);\n font-weight: 300;\n padding: 2rem 0;\n border-top: 1px solid rgba(0, 0, 0, 0.1);\n background-color: hsl(180, 5%, 15%); /*hsl(200, 60%, 15%);*/\n text-align: left;\n contain: content;\n}\n\n.footer-container .logo svg {\n width: 24px;\n position: relative;\n top: 4px;\n margin-right: 2px;\n}\n\n.footer-container .logo svg path {\n fill: none;\n stroke: rgba(255, 255, 255, 0.8);\n stroke-width: 3px;\n}\n\n.footer-container .logo {\n font-size: 17px;\n font-weight: 200;\n color: rgba(255, 255, 255, 0.8);\n text-decoration: none;\n margin-right: 6px;\n}\n\n.footer-container {\n grid-column: text;\n}\n\n.footer-container .nav {\n font-size: 0.9em;\n margin-top: 1.5em;\n}\n\n.footer-container .nav a {\n color: rgba(255, 255, 255, 0.8);\n margin-right: 6px;\n text-decoration: none;\n}\n\n</style>\n\n<div class='footer-container'>\n\n <a href=\"/\" class=\"logo\">\n ${logo}\n Distill\n </a> is dedicated to clear explanations of machine learning\n\n <div class=\"nav\">\n <a href=\"https://distill.pub/about/\">About</a>\n <a href=\"https://distill.pub/journal/\">Submit</a>\n <a href=\"https://distill.pub/prize/\">Prize</a>\n <a href=\"https://distill.pub/archive/\">Archive</a>\n <a href=\"https://distill.pub/rss.xml\">RSS</a>\n <a href=\"https://github.com/distillpub\">GitHub</a>\n <a href=\"https://twitter.com/distillpub\">Twitter</a>\n ISSN 2476-0757\n </div>\n\n</div>\n\n`;\n\n // Copyright 2018 The Distill Template Authors\n\n const T$c = Template('distill-footer', footerTemplate);\n\n class DistillFooter extends T$c(HTMLElement) {\n\n }\n\n // Copyright 2018 The Distill Template Authors\n\n let templateIsLoading = false;\n let runlevel = 0;\n const initialize = function() {\n if (window.distill.runlevel < 1) {\n throw new Error(\"Insufficient Runlevel for Distill Template!\");\n }\n\n /* 1. Flag that we're being loaded */\n if (\"distill\" in window && window.distill.templateIsLoading) {\n throw new Error(\n \"Runlevel 1: Distill Template is getting loaded more than once, aborting!\"\n );\n } else {\n window.distill.templateIsLoading = true;\n console.debug(\"Runlevel 1: Distill Template has started loading.\");\n }\n\n /* 2. Add styles if they weren't added during prerendering */\n makeStyleTag(document);\n console.debug(\"Runlevel 1: Static Distill styles have been added.\");\n console.debug(\"Runlevel 1->2.\");\n window.distill.runlevel += 1;\n\n /* 3. Register Controller listener functions */\n /* Needs to happen before components to their connected callbacks have a controller to talk to. */\n for (const [functionName, callback] of Object.entries(Controller.listeners)) {\n if (typeof callback === \"function\") {\n document.addEventListener(functionName, callback);\n } else {\n console.error(\"Runlevel 2: Controller listeners need to be functions!\");\n }\n }\n console.debug(\"Runlevel 2: We can now listen to controller events.\");\n console.debug(\"Runlevel 2->3.\");\n window.distill.runlevel += 1;\n\n /* 4. Register components */\n const components = [\n Abstract, Appendix, Article, Bibliography, Byline, Cite, CitationList, Code,\n Footnote, FootnoteList, FrontMatter$1, HoverBox, Title, DMath, References, TOC, Figure,\n Slider, Interstitial\n ];\n\n const distillComponents = [DistillHeader, DistillAppendix, DistillFooter];\n\n if (window.distill.runlevel < 2) {\n throw new Error(\"Insufficient Runlevel for adding custom elements!\");\n }\n const allComponents = components.concat(distillComponents);\n for (const component of allComponents) {\n console.debug(\"Runlevel 2: Registering custom element: \" + component.is);\n customElements.define(component.is, component);\n }\n\n console.debug(\n \"Runlevel 3: Distill Template finished registering custom elements.\"\n );\n console.debug(\"Runlevel 3->4.\");\n window.distill.runlevel += 1;\n\n // If template was added after DOMContentLoaded we may have missed that event.\n // Controller will check for that case, so trigger the event explicitly:\n if (domContentLoaded()) {\n Controller.listeners.DOMContentLoaded();\n }\n\n console.debug(\"Runlevel 4: Distill Template initialisation complete.\");\n window.distill.templateIsLoading = false;\n window.distill.templateHasLoaded = true;\n };\n\n window.distill = { runlevel, initialize, templateIsLoading };\n\n /* 0. Check browser feature support; synchronously polyfill if needed */\n if (Polyfills.browserSupportsAllFeatures()) {\n console.debug(\"Runlevel 0: No need for polyfills.\");\n console.debug(\"Runlevel 0->1.\");\n window.distill.runlevel += 1;\n window.distill.initialize();\n } else {\n console.debug(\"Runlevel 0: Distill Template is loading polyfills.\");\n Polyfills.load(window.distill.initialize);\n }\n\n})));\n//# sourceMappingURL=template.v2.js.map\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","// startup\n// Load entry module and return exports\n// This entry module used 'module' so it can't be inlined\nvar __webpack_exports__ = __webpack_require__(792);\n"],"names":["define","days","months","zeroPad","n","RFC","date","day","getDay","substring","paddedDate","getDate","month","getMonth","year","getFullYear","toString","hours","getUTCHours","minutes","getUTCMinutes","seconds","getUTCSeconds","concat","Author","_createClass","object","_classCallCheck","this","name","author","personalURL","authorURL","affiliation","affiliationURL","affiliations","key","get","names","split","slice","length","join","FrontMatter","title","description","authors","bibliography","Map","bibliographyParsed","citations","citationsCollected","journal","katex","doi","undefined","publishedDate","_url","distillPath","url","set","value","githubPath","_previewURL","updatedDate","toISOString","volume","publishedYear","Error","lastName","map","firstName","slug","toLowerCase","_this","citationKey","_bibliography","_typeof","property","hasOwnProperty","mapFromObject","target","Object","assign","Array","from","reduce","_ref","_ref2","_slicedToArray","objectFromMap","bibliographyEntries","githubUrl","previewURL","issue","publishedDateRFC","publishedMonth","publishedDay","publishedMonthPadded","publishedDayPadded","updatedDateRFC","concatenatedAuthors","bibtexAuthors","source","frontMatter","Mutating","superclass","_superclass","_class","_this2","_callSuper","options","childList","characterData","subtree","observer","MutationObserver","disconnect","renderIfPossible","observe","_inherits","_superPropGet","textContent","root","renderContent","console","error","constructor","Template","templateString","useShadow","arguments","template","document","createElement","innerHTML","window","ShadyCSS","prepareTemplate","_superclass2","_class2","_this3","clone","importNode","content","attachShadow","mode","shadowRoot","appendChild","hasAttribute","styleElement","insertBefore","firstChild","query","querySelector","querySelectorAll","math","findEndOfMath","delimiter","text","startIndex","index","braceLevel","delimLength","character","splitAtDelimiters","startData","leftDelim","rightDelim","display","finalData","i","type","data","lookingForLeft","currIndex","nextIndex","indexOf","push","rawData","renderMathInText","optionsCopy","delimiters","left","right","splitWithDelimiters","fragment","createDocumentFragment","createTextNode","tag","displayMode","setAttribute","e","ParseError","errorCallback","renderElem","elem","childNodes","childNode","nodeType","mightHaveMath","frag","replaceChild","ignoredTags","nodeName","defaultAutoRenderOptions","msg","err","katexCSSTag","DMath","_Mutating","localOptions","katexOptions","katexAdded","addKatex","container","render","_katexOptions","katexLoadedCallback","_step","_iterator","_createForOfIteratorHelper","s","done","f","delimiterStrings","flatMap","d","some","renderMathInElement","body","head","insertAdjacentHTML","scriptTag","src","async","onload","crossorigin","T","HTMLElement","collect_citations","_step2","dom","Set","_iterator2","_step3","_iterator3","getAttribute","k","trim","add","author_string","ent","sep","finalSep","name_strings","last","firsts","initials","replace","venue_string","cite","booktitle","number","pages","publisher","link_string","arxiv_match","exec","label","doi_string","new_line","bibliography_cite","fancy","title_string","hover_cite","a_str","v_str","Math","min","domContentLoaded","readyState","parseFrontmatter","element","firstElementChild","_step4","_iterator4","hasOldStyle","Boolean","hasNewStyle","warn","newAffiliation","_moveLegacyAffiliationFormatIntoArray","JSON","parse","inlineMathRendered","FrontMatter$1","_HTMLElement","_this4","entries","_step5","_iterator5","entry","notify","event","CustomEvent","detail","bubbles","dispatchEvent","_wrapNativeSuper","Controller","waitingOn","listeners","onCiteKeyCreated","_event$detail","citeTag","keys","numbers","onCiteKeyChanged","_step6","_iterator6","waitingCallback","citationListTag","_step7","_iterator7","log","onCiteKeyRemoved","onBibliographyChanged","_step8","_iterator8","debug","onFootnoteChanged","footnotesList","footnotes","onFrontMatterChanged","published","Date","String","authorObject","password","interstitial","parentElement","removeChild","article","byline","h1","hasPassword","inBrowser","onLocalhost","location","hostname","includes","appendix","footnoteList","citationList","optionalComponents","DOMContentLoaded","loaded","frontMatterTag","_step9","_iterator9","_step10","_iterator10","styles","base","addPolyfill","polyfill","polyfillLoadedCallback","script","onerror","polyfills","support","Element","prototype","Polyfills","every","poly","callback","_step11","polyfillLoaded","neededPolyfills","distillRunlevel","_iterator11","_neededPolyfills","filter","Abstract","_T$","selector","T$1","Appendix","_T$2","T$2","isOnlyWhitespace","Article","_HTMLElement2","_this5","mutations","_step12","_iterator12","_step13","_iterator13","addedNodes","addedNode","nodeValue","test","wrapper","parentNode","commonjsGlobal","globalThis","global","self","createCommonjsModule","fn","module","exports","bibtexParse","BibtexParser","notKey","pos","input","currentEntry","setInput","t","getEntries","isWhitespace","match","canCommentOut","skipWhitespace","tryMatch","matchAt","value_braces","bracecount","start","escaped","end","value_comment","str","brcktCnt","value_quotes","single_value","values","key_equals_value","key_value_list","kv","entry_body","directive","preamble","comment","bibtex","string","toJSON","b","toBibtex","json","out","entryType","entryTags","tags","jdx","normalizeTag","full","x","char","parseBibtex","_step14","_iterator14","_i","_Object$entries","_Object$entries$_i","Bibliography","_HTMLElement3","_this6","_step15","_iterator15","parseIfPossible","_this7","requestAnimationFrame","newBibtex","response","oldValue","newValue","_this8","oReq","XMLHttpRequest","receivedBibtex","responseType","open","send","Byline","_HTMLElement4","bylineTemplate","Cite","_T$3","_this9","_numbers","_entries","_this10","outerSpan","innerSpan","hoverBox","customElements","whenDefined","then","listen","displayNumbers","displayEntries","eventName","result","html","T$3","CitationList","_HTMLElement5","style","size","list","stylesTag","heading","id","className","_step16","_iterator16","_step16$value","listItem","renderCitationList","prism","Prism","_self","lang","uniqueId","_","manual","disableWorkerMessageHandler","util","encode","tokens","Token","alias","isArray","o","call","objId","obj","defineProperty","deepClone","visited","forEach","v","getLanguage","currentScript","stack","scripts","getElementsByTagName","languages","extend","redef","inside","before","insert","grammar","ret","token","newToken","old","DFS","propertyType","plugins","highlightAll","highlightAllUnder","env","hooks","run","elements","apply","highlightElement","language","parent","code","insertHighlightedCode","highlightedCode","Worker","worker","filename","onmessage","evt","postMessage","stringify","immediateClose","highlight","tokenize","rest","tokenList","LinkedList","addAfter","matchGrammar","array","node","next","tail","toArray","all","callbacks","matchedStr","greedy","startNode","startPos","oneshot","patterns","j","pattern","lookbehind","lookbehindLength","flags","RegExp","currentNode","removeCount","prev","lastIndex","to","p","after","removeFrom","removeRange","newNode","count","classes","attributes","aliases","addEventListener","message","close","highlightAutomaticallyCallback","defer","setTimeout","WorkerGlobalScope","markup","tagName","includedCdataInside","def","xml","mathml","svg","css","addInlined","clike","javascript","js","fileHighlight","Extensions","pre","extension","xhr","onreadystatechange","status","responseText","statusText","python","py","lua","envVars","insideString","bash","variable","toBeCopied","shell","go","inner","createInline","starAlternative","tableCell","tableRow","tableLine","markdown","punctuation","walkTokens","l","codeLang","codeBlock","cls","autoloader","valueOf","floor","random","loadLanguages","ele","getElementById","md","julia","Code","_Mutating2","languageName","codeTag","tabs","ShadowRoot","preTag","T$4","Footnote","_T$4","_this11","_this12","currentFootnoteId","IdString","host","span","T$5","FootnoteList","_T$5","_step17","_iterator17","footnote","backlink","href","T$6","HoverBox","_T$6","bindDivEvents","bindTriggerEvents","_this13","visible","showAtNode","stopTimeout","extendTimeout","stopPropagation","passive","hide","_this14","position","top","round","bbox","getBoundingClientRect","show","offsetLeft","width","offsetTop","height","timeout","clearTimeout","time","_this15","T$7","Title","_HTMLElement6","References","_T$7","T$8","TOC","_HTMLElement7","_this16","headings","_step18","ToC","_iterator18","el","isInTitle","isException","newLine","renderTOC","Figure","_HTMLElement8","_this17","_ready","_onscreen","_offscreen","loadsWhileScrolling","marginObserver","directObserver","unobserve","readyQueue","runReadyQueue","onscreen","_readyQueue","figure","sort","a","_seenOnScreen","pop","ready","_marginObserver","viewportHeight","innerHeight","margin","rootMargin","threshold","didObserveMarginIntersection","IntersectionObserver","_step19","_iterator19","isIntersecting","addToReadyQueue","_directObserver","didObserveDirectIntersection","_step20","_iterator20","offscreen","isScrolling","Interstitial","_T$8","_this18","shouldRemoveSelf","oninput","passwordChanged","Storage","localStorage","setItem","localStorageIdentifier","getItem","pathname","T$9","ascending","NaN","compare","bisectRight","lo","hi","mid","e10","sqrt","e5","e2","tickIncrement","stop","step","max","power","LN10","pow","initRange","domain","range","factory","definition","create","Color","darker","brighter","reI","reN","reP","reHex","reRgbInteger","reRgbPercent","reRgbaInteger","reRgbaPercent","reHslPercent","reHslaPercent","named","aliceblue","antiquewhite","aqua","aquamarine","azure","beige","bisque","black","blanchedalmond","blue","blueviolet","brown","burlywood","cadetblue","chartreuse","chocolate","coral","cornflowerblue","cornsilk","crimson","cyan","darkblue","darkcyan","darkgoldenrod","darkgray","darkgreen","darkgrey","darkkhaki","darkmagenta","darkolivegreen","darkorange","darkorchid","darkred","darksalmon","darkseagreen","darkslateblue","darkslategray","darkslategrey","darkturquoise","darkviolet","deeppink","deepskyblue","dimgray","dimgrey","dodgerblue","firebrick","floralwhite","forestgreen","fuchsia","gainsboro","ghostwhite","gold","goldenrod","gray","green","greenyellow","grey","honeydew","hotpink","indianred","indigo","ivory","khaki","lavender","lavenderblush","lawngreen","lemonchiffon","lightblue","lightcoral","lightcyan","lightgoldenrodyellow","lightgray","lightgreen","lightgrey","lightpink","lightsalmon","lightseagreen","lightskyblue","lightslategray","lightslategrey","lightsteelblue","lightyellow","lime","limegreen","linen","magenta","maroon","mediumaquamarine","mediumblue","mediumorchid","mediumpurple","mediumseagreen","mediumslateblue","mediumspringgreen","mediumturquoise","mediumvioletred","midnightblue","mintcream","mistyrose","moccasin","navajowhite","navy","oldlace","olive","olivedrab","orange","orangered","orchid","palegoldenrod","palegreen","paleturquoise","palevioletred","papayawhip","peachpuff","peru","pink","plum","powderblue","purple","rebeccapurple","red","rosybrown","royalblue","saddlebrown","salmon","sandybrown","seagreen","seashell","sienna","silver","skyblue","slateblue","slategray","slategrey","snow","springgreen","steelblue","tan","teal","thistle","tomato","turquoise","violet","wheat","white","whitesmoke","yellow","yellowgreen","color_formatHex","rgb","formatHex","color_formatRgb","formatRgb","color","format","m","parseInt","rgbn","Rgb","rgba","hsla","r","g","rgbConvert","opacity","rgb_formatHex","hex","rgb_formatRgb","isNaN","h","Hsl","hslConvert","hsl2rgb","m1","m2","copy","channels","displayable","formatHsl","deg2rad","PI","rad2deg","Xn","Zn","t0","t1","t2","t3","labConvert","Lab","Hcl","hcl2lab","z","rgb2lrgb","y","xyz2lab","lab2xyz","lrgb2rgb","c","cos","sin","atan2","hclConvert","A","B","C","D","E","ED","EB","BC_DA","Cubehelix","constant","gamma","nogamma","exponential","linear","bl","cubehelixConvert","cosh","sinh","rgb$1","rgbGamma","numberArray","genericArray","nb","na","interpolate","setTime","interpolateNumber","reA","reB","am","bm","bs","bi","q","one","zero","ArrayBuffer","isView","DataView","interpolateRound","unit","identity","normalize","bimap","d0","d1","r0","r1","polymap","reverse","transformer","transform","untransform","unknown","piecewise","output","interpolate$1","clamp","rescale","scale","invert","rangeRound","u","formatDecimal","toExponential","coefficient","exponent","abs","prefixExponent","re","formatSpecifier","specifier","FormatSpecifier","fill","align","sign","symbol","comma","precision","formatRounded","formatTypes","toFixed","toPrecision","toUpperCase","identity$1","locale","formatPrefix","prefixes","formatLocale","grouping","thousands","group","Number","currencyPrefix","currency","currencySuffix","decimal","numerals","formatNumerals","percent","minus","nan","newFormat","prefix","suffix","formatType","maybeSuffix","valuePrefix","valueSuffix","valueNegative","i1","i0","formatTrim","charCodeAt","Infinity","padding","tickFormat","step0","step1","tickStep","precisionPrefix","precisionRound","precisionFixed","linearish","ticks","isFinite","ceil","nice","linear$1","t0$1","t1$1","newInterval","floori","offseti","field","interval","offset","previous","millisecond","durationSecond","durationMinute","durationHour","durationDay","durationWeek","getMilliseconds","getSeconds","getMinutes","getHours","setHours","setDate","getTimezoneOffset","weekday","sunday","monday","thursday","setMonth","setFullYear","setUTCSeconds","setUTCMinutes","utcDay","setUTCHours","setUTCDate","getUTCDate","utcWeekday","getUTCDay","utcSunday","utcMonday","utcThursday","utcYear","setUTCMonth","getUTCMonth","getUTCFullYear","setUTCFullYear","localDate","H","M","S","L","utcDate","UTC","newDate","locale$1","utcFormat","utcParse","pads","numberRe","percentRe","requoteRe","pad","requote","formatRe","formatLookup","parseWeekdayNumberSunday","w","parseWeekdayNumberMonday","parseWeekNumberSunday","U","parseWeekNumberISO","V","parseWeekNumberMonday","W","parseFullYear","parseYear","parseZone","Z","parseQuarter","parseMonthNumber","parseDayOfMonth","parseDayOfYear","parseHour24","parseMinutes","parseSeconds","parseMilliseconds","parseMicroseconds","parseLiteralPercent","parseUnixTimestamp","Q","parseUnixTimestampSeconds","formatDayOfMonth","formatHour24","formatHour12","formatDayOfYear","formatMilliseconds","formatMicroseconds","formatMonthNumber","formatMinutes","formatSeconds","formatWeekdayNumberMonday","formatWeekNumberSunday","formatWeekNumberISO","formatWeekdayNumberSunday","formatWeekNumberMonday","formatYear","formatFullYear","formatZone","formatUTCDayOfMonth","formatUTCHour24","formatUTCHour12","formatUTCDayOfYear","formatUTCMilliseconds","getUTCMilliseconds","formatUTCMicroseconds","formatUTCMonthNumber","formatUTCMinutes","formatUTCSeconds","formatUTCWeekdayNumberMonday","dow","formatUTCWeekNumberSunday","formatUTCWeekNumberISO","formatUTCWeekdayNumberSunday","formatUTCWeekNumberMonday","formatUTCYear","formatUTCFullYear","formatUTCZone","formatLiteralPercent","formatUnixTimestamp","formatUnixTimestampSeconds","locale_dateTime","dateTime","locale_date","locale_time","locale_periods","periods","locale_weekdays","locale_shortWeekdays","shortDays","locale_months","locale_shortMonths","shortMonths","periodRe","periodLookup","weekdayRe","weekdayLookup","shortWeekdayRe","shortWeekdayLookup","monthRe","monthLookup","shortMonthRe","shortMonthLookup","formats","utcFormats","parses","parseSpecifier","charAt","newParse","week","day$1","X","formatLocale$1","defaultLocale$1","isoSpecifier","noop","dispatch","Dispatch","on","typename","types","that","args","xhtml","namespaces","xlink","xmlns","namespace","space","local","creatorInherit","ownerDocument","uri","namespaceURI","documentElement","createElementNS","creatorFixed","fullname","creator","none","empty","sparse","update","EnterNode","datum","_next","_parent","__data__","child","bindIndex","enter","exit","groupLength","dataLength","bindKey","keyValue","nodeByKeyValue","keyValues","ascending$1","attrRemove","removeAttribute","attrRemoveNS","removeAttributeNS","attrConstant","attrConstantNS","setAttributeNS","attrFunction","attrFunctionNS","defaultView","styleRemove","removeProperty","styleConstant","priority","setProperty","styleFunction","propertyRemove","propertyConstant","propertyFunction","classArray","classList","ClassList","_node","_names","classedAdd","classedRemove","remove","classedTrue","classedFalse","classedFunction","textRemove","textConstant","textFunction","htmlRemove","htmlConstant","htmlFunction","raise","nextSibling","lower","previousSibling","constantNull","selection_cloneShallow","cloneNode","selection_cloneDeep","splice","contains","filterEvents","filterContextListener","listener","contextListener","related","relatedTarget","compareDocumentPosition","event1","event0","onRemove","__on","removeEventListener","capture","onAdd","wrap","customEvent","sourceEvent","params","createEvent","initEvent","cancelable","dispatchConstant","dispatchFunction","mouseenter","mouseleave","Selection","groups","parents","_groups","_parents","select","current","point","ownerSVGElement","createSVGPoint","clientX","clientY","matrixTransform","getScreenCTM","inverse","rect","clientLeft","clientTop","mouse","changedTouches","touch","touches","identifier","nopropagation","stopImmediatePropagation","noevent","preventDefault","constant$3","DragEvent","subject","active","dx","dy","defaultFilter","ctrlKey","button","defaultContainer","defaultSubject","defaultTouchable","navigator","maxTouchPoints","drag","mousedownx","mousedowny","mousemoving","touchending","touchable","gestures","clickDistance2","selection","mousedowned","touchstarted","touchmoved","touchended","gesture","beforestart","view","mousemoved","mouseupped","__noselect","MozUserSelect","nodrag","noclick","yesdrag","sublisteners","p0","clickDistance","subgroups","subnode","subgroup","selectAll","selectorAll","matches","matcher","each","bind","enterGroup","updateGroup","_enter","_exit","onenter","onupdate","onexit","append","merge","order","groups0","groups1","m0","merges","group0","group1","compareNode","sortgroups","sortgroup","nodes","attr","getAttributeNS","getPropertyValue","getComputedStyle","styleValue","classed","deep","typenames","parseTypenames$1","T$a","keyCodes","Slider","_T$a","_this19","connected","mouseEvent","knob","background","trackFill","track","origin","renderTicks","changeValue","dragUpdate","dispatchChange","onKeyDown","keyCode","quantizeValue","validateValueRange","dispatchInput","Event","_this20","ticksContainer","tick","logo","DistillHeader","_T$b","T$b","DistillAppendix","_HTMLElement9","githubCompareUpdatesUrl","serializeFrontmatterToBibtex","appendixTemplate","DistillFooter","_T$c","T$c","distill","runlevel","initialize","templateIsLoading","styleTagId","styleTag","cssTextTag","firstScriptTag","makeStyleTag","_i2","_Object$entries2","_Object$entries2$_i","functionName","components","distillComponents","_step21","_iterator21","component","is","templateHasLoaded","browserSupportsAllFeatures","load","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__","Function"],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"distill.bundle.js","mappings":"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","sources":["webpack://blogpost/./src/distill.js","webpack://blogpost/webpack/bootstrap","webpack://blogpost/webpack/runtime/global","webpack://blogpost/webpack/startup"],"sourcesContent":["(function (factory) {\n typeof define === 'function' && define.amd ? define(factory) :\n factory();\n}((function () { 'use strict';\n\n // Copyright 2018 The Distill Template Authors\n //\n // Licensed under the Apache License, Version 2.0 (the \"License\");\n // you may not use this file except in compliance with the License.\n // You may obtain a copy of the License at\n //\n // http://www.apache.org/licenses/LICENSE-2.0\n //\n // Unless required by applicable law or agreed to in writing, software\n // distributed under the License is distributed on an \"AS IS\" BASIS,\n // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n // See the License for the specific language governing permissions and\n // limitations under the License.\n\n const days = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];\n const months = ['Jan.', 'Feb.', 'March', 'April', 'May', 'June', 'July', 'Aug.', 'Sept.', 'Oct.', 'Nov.', 'Dec.'];\n const zeroPad = n => n < 10 ? '0' + n : n;\n\n const RFC = function(date) {\n const day = days[date.getDay()].substring(0, 3);\n const paddedDate = zeroPad(date.getDate());\n const month = months[date.getMonth()].substring(0,3);\n const year = date.getFullYear().toString();\n const hours = date.getUTCHours().toString();\n const minutes = date.getUTCMinutes().toString();\n const seconds = date.getUTCSeconds().toString();\n return `${day}, ${paddedDate} ${month} ${year} ${hours}:${minutes}:${seconds} Z`;\n };\n\n const objectFromMap = function(map) {\n const object = Array.from(map).reduce((object, [key, value]) => (\n Object.assign(object, { [key]: value }) // Be careful! Maps can have non-String keys; object literals can't.\n ), {});\n return object;\n };\n\n const mapFromObject = function(object) {\n const map = new Map();\n for (var property in object) {\n if (object.hasOwnProperty(property)) {\n map.set(property, object[property]);\n }\n }\n return map;\n };\n\n class Author {\n\n // constructor(name='', personalURL='', affiliation='', affiliationURL='') {\n // this.name = name; // 'Chris Olah'\n // this.personalURL = personalURL; // 'https://colah.github.io'\n // this.affiliation = affiliation; // 'Google Brain'\n // this.affiliationURL = affiliationURL; // 'https://g.co/brain'\n // }\n\n constructor(object) {\n this.name = object.author; // 'Chris Olah'\n this.personalURL = object.authorURL; // 'https://colah.github.io'\n this.affiliation = object.affiliation; // 'Google Brain'\n this.affiliationURL = object.affiliationURL; // 'https://g.co/brain'\n this.affiliations = object.affiliations || []; // new-style affiliations\n }\n\n // 'Chris'\n get firstName() {\n const names = this.name.split(' ');\n return names.slice(0, names.length - 1).join(' ');\n }\n\n // 'Olah'\n get lastName() {\n const names = this.name.split(' ');\n return names[names.length -1];\n }\n }\n\n function mergeFromYMLFrontmatter(target, source) {\n target.title = source.title;\n if (source.published) {\n if (source.published instanceof Date) {\n target.publishedDate = source.published;\n } else if (source.published.constructor === String) {\n target.publishedDate = new Date(source.published);\n }\n }\n if (source.publishedDate) {\n if (source.publishedDate instanceof Date) {\n target.publishedDate = source.publishedDate;\n } else if (source.publishedDate.constructor === String) {\n target.publishedDate = new Date(source.publishedDate);\n } else {\n console.error('Don\\'t know what to do with published date: ' + source.publishedDate);\n }\n }\n target.description = source.description;\n target.authors = source.authors.map( (authorObject) => new Author(authorObject));\n target.katex = source.katex;\n target.password = source.password;\n if (source.doi) {\n target.doi = source.doi;\n }\n }\n\n class FrontMatter {\n constructor() {\n this.title = 'unnamed article'; // 'Attention and Augmented Recurrent Neural Networks'\n this.description = ''; // 'A visual overview of neural attention...'\n this.authors = []; // Array of Author(s)\n\n this.bibliography = new Map();\n this.bibliographyParsed = false;\n // {\n // 'gregor2015draw': {\n // 'title': 'DRAW: A recurrent neural network for image generation',\n // 'author': 'Gregor, Karol and Danihelka, Ivo and Graves, Alex and Rezende, Danilo Jimenez and Wierstra, Daan',\n // 'journal': 'arXiv preprint arXiv:1502.04623',\n // 'year': '2015',\n // 'url': 'https://arxiv.org/pdf/1502.04623.pdf',\n // 'type': 'article'\n // },\n // }\n\n // Citation keys should be listed in the order that they are appear in the document.\n // Each key refers to a key in the bibliography dictionary.\n this.citations = []; // [ 'gregor2015draw', 'mercier2011humans' ]\n this.citationsCollected = false;\n\n //\n // Assigned from posts.csv\n //\n\n // publishedDate: 2016-09-08T07:00:00.000Z,\n // tags: [ 'rnn' ],\n // distillPath: '2016/augmented-rnns',\n // githubPath: 'distillpub/post--augmented-rnns',\n // doiSuffix: 1,\n\n //\n // Assigned from journal\n //\n this.journal = {};\n // journal: {\n // 'title': 'Distill',\n // 'full_title': 'Distill',\n // 'abbrev_title': 'Distill',\n // 'url': 'http://distill.pub',\n // 'doi': '10.23915/distill',\n // 'publisherName': 'Distill Working Group',\n // 'publisherEmail': 'admin@distill.pub',\n // 'issn': '2476-0757',\n // 'editors': [...],\n // 'committee': [...]\n // }\n // volume: 1,\n // issue: 9,\n\n this.katex = {};\n\n //\n // Assigned from publishing process\n //\n\n // githubCompareUpdatesUrl: 'https://github.com/distillpub/post--augmented-rnns/compare/1596e094d8943d2dc0ea445d92071129c6419c59...3bd9209e0c24d020f87cf6152dcecc6017cbc193',\n // updatedDate: 2017-03-21T07:13:16.000Z,\n // doi: '10.23915/distill.00001',\n this.doi = undefined;\n this.publishedDate = undefined;\n }\n\n // Example:\n // title: Demo Title Attention and Augmented Recurrent Neural Networks\n // published: Jan 10, 2017\n // authors:\n // - Chris Olah:\n // - Shan Carter: http://shancarter.com\n // affiliations:\n // - Google Brain:\n // - Google Brain: http://g.co/brain\n\n //\n // Computed Properties\n //\n\n // 'http://distill.pub/2016/augmented-rnns',\n set url(value) {\n this._url = value;\n }\n get url() {\n if (this._url) {\n return this._url;\n } else if (this.distillPath && this.journal.url) {\n return this.journal.url + '/' + this.distillPath;\n } else if (this.journal.url) {\n return this.journal.url;\n }\n }\n\n // 'https://github.com/distillpub/post--augmented-rnns',\n get githubUrl() {\n if (this.githubPath) {\n return 'https://github.com/' + this.githubPath;\n } else {\n return undefined;\n }\n }\n\n // TODO resolve differences in naming of URL/Url/url.\n // 'http://distill.pub/2016/augmented-rnns/thumbnail.jpg',\n set previewURL(value) {\n this._previewURL = value;\n }\n get previewURL() {\n return this._previewURL ? this._previewURL : this.url + '/thumbnail.jpg';\n }\n\n // 'Thu, 08 Sep 2016 00:00:00 -0700',\n get publishedDateRFC() {\n return RFC(this.publishedDate);\n }\n\n // 'Thu, 08 Sep 2016 00:00:00 -0700',\n get updatedDateRFC() {\n return RFC(this.updatedDate);\n }\n\n // 2016,\n get publishedYear() {\n return this.publishedDate.getFullYear();\n }\n\n // 'Sept',\n get publishedMonth() {\n return months[this.publishedDate.getMonth()];\n }\n\n // 8,\n get publishedDay() {\n return this.publishedDate.getDate();\n }\n\n // '09',\n get publishedMonthPadded() {\n return zeroPad(this.publishedDate.getMonth() + 1);\n }\n\n // '08',\n get publishedDayPadded() {\n return zeroPad(this.publishedDate.getDate());\n }\n\n get publishedISODateOnly() {\n return this.publishedDate.toISOString().split('T')[0];\n }\n\n get volume() {\n const volume = this.publishedYear - 2015;\n if (volume < 1) {\n throw new Error('Invalid publish date detected during computing volume');\n }\n return volume;\n }\n\n get issue() {\n return this.publishedDate.getMonth() + 1;\n }\n\n // 'Olah & Carter',\n get concatenatedAuthors() {\n if (this.authors.length > 2) {\n return this.authors[0].lastName + ', et al.';\n } else if (this.authors.length === 2) {\n return this.authors[0].lastName + ' & ' + this.authors[1].lastName;\n } else if (this.authors.length === 1) {\n return this.authors[0].lastName;\n }\n }\n\n // 'Olah, Chris and Carter, Shan',\n get bibtexAuthors() {\n return this.authors.map(author => {\n return author.lastName + ', ' + author.firstName;\n }).join(' and ');\n }\n\n // 'olah2016attention'\n get slug() {\n let slug = '';\n if (this.authors.length) {\n slug += this.authors[0].lastName.toLowerCase();\n slug += this.publishedYear;\n slug += this.title.split(' ')[0].toLowerCase();\n }\n return slug || 'Untitled';\n }\n\n get bibliographyEntries() {\n return new Map(this.citations.map( citationKey => {\n const entry = this.bibliography.get(citationKey);\n return [citationKey, entry];\n }));\n }\n\n set bibliography(bibliography) {\n if (bibliography instanceof Map) {\n this._bibliography = bibliography;\n } else if (typeof bibliography === 'object') {\n this._bibliography = mapFromObject(bibliography);\n }\n }\n\n get bibliography() {\n return this._bibliography;\n }\n\n static fromObject(source) {\n const frontMatter = new FrontMatter();\n Object.assign(frontMatter, source);\n return frontMatter;\n }\n\n assignToObject(target) {\n Object.assign(target, this);\n target.bibliography = objectFromMap(this.bibliographyEntries);\n target.url = this.url;\n target.doi = this.doi;\n target.githubUrl = this.githubUrl;\n target.previewURL = this.previewURL;\n if (this.publishedDate) {\n target.volume = this.volume;\n target.issue = this.issue;\n target.publishedDateRFC = this.publishedDateRFC;\n target.publishedYear = this.publishedYear;\n target.publishedMonth = this.publishedMonth;\n target.publishedDay = this.publishedDay;\n target.publishedMonthPadded = this.publishedMonthPadded;\n target.publishedDayPadded = this.publishedDayPadded;\n }\n if (this.updatedDate) {\n target.updatedDateRFC = this.updatedDateRFC;\n }\n target.concatenatedAuthors = this.concatenatedAuthors;\n target.bibtexAuthors = this.bibtexAuthors;\n target.slug = this.slug;\n }\n\n }\n\n // Copyright 2018 The Distill Template Authors\n //\n // Licensed under the Apache License, Version 2.0 (the \"License\");\n // you may not use this file except in compliance with the License.\n // You may obtain a copy of the License at\n //\n // http://www.apache.org/licenses/LICENSE-2.0\n //\n // Unless required by applicable law or agreed to in writing, software\n // distributed under the License is distributed on an \"AS IS\" BASIS,\n // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n // See the License for the specific language governing permissions and\n // limitations under the License.\n\n const Mutating = (superclass) => {\n return class extends superclass {\n\n constructor() {\n super();\n\n // set up mutation observer\n const options = {childList: true, characterData: true, subtree: true};\n const observer = new MutationObserver( () => {\n observer.disconnect();\n this.renderIfPossible();\n observer.observe(this, options);\n });\n\n // ...and listen for changes\n observer.observe(this, options);\n }\n\n connectedCallback() {\n super.connectedCallback();\n\n this.renderIfPossible();\n }\n\n // potential TODO: check if this is enough for all our usecases\n // maybe provide a custom function to tell if we have enough information to render\n renderIfPossible() {\n if (this.textContent && this.root) {\n this.renderContent();\n }\n }\n\n renderContent() {\n console.error(`Your class ${this.constructor.name} must provide a custom renderContent() method!` );\n }\n\n }; // end class\n }; // end mixin function\n\n // Copyright 2018 The Distill Template Authors\n //\n // Licensed under the Apache License, Version 2.0 (the \"License\");\n // you may not use this file except in compliance with the License.\n // You may obtain a copy of the License at\n //\n // http://www.apache.org/licenses/LICENSE-2.0\n //\n // Unless required by applicable law or agreed to in writing, software\n // distributed under the License is distributed on an \"AS IS\" BASIS,\n // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n // See the License for the specific language governing permissions and\n // limitations under the License.\n\n /*global ShadyCSS*/\n\n const Template = (name, templateString, useShadow = true) => {\n\n return (superclass) => {\n\n const template = document.createElement('template');\n template.innerHTML = templateString;\n\n if (useShadow && 'ShadyCSS' in window) {\n ShadyCSS.prepareTemplate(template, name);\n }\n\n return class extends superclass {\n\n static get is() { return name; }\n\n constructor() {\n super();\n\n this.clone = document.importNode(template.content, true);\n if (useShadow) {\n this.attachShadow({mode: 'open'});\n this.shadowRoot.appendChild(this.clone);\n }\n }\n\n connectedCallback() {\n if (this.hasAttribute('distill-prerendered')) {\n return;\n }\n if (useShadow) {\n if ('ShadyCSS' in window) {\n ShadyCSS.styleElement(this);\n }\n } else {\n this.insertBefore(this.clone, this.firstChild);\n }\n }\n\n get root() {\n if (useShadow) {\n return this.shadowRoot;\n } else {\n return this;\n }\n }\n\n /* TODO: Are we using these? Should we even? */\n $(query) {\n return this.root.querySelector(query);\n }\n\n $$(query) {\n return this.root.querySelectorAll(query);\n }\n };\n };\n };\n\n var math = \"/*\\n * Copyright 2018 The Distill Template Authors\\n *\\n * Licensed under the Apache License, Version 2.0 (the \\\"License\\\");\\n * you may not use this file except in compliance with the License.\\n * You may obtain a copy of the License at\\n *\\n * http://www.apache.org/licenses/LICENSE-2.0\\n *\\n * Unless required by applicable law or agreed to in writing, software\\n * distributed under the License is distributed on an \\\"AS IS\\\" BASIS,\\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\n * See the License for the specific language governing permissions and\\n * limitations under the License.\\n */\\n\\nspan.katex-display {\\n text-align: left;\\n padding: 8px 0 8px 0;\\n margin: 0.5em 0 0.5em 1em;\\n}\\n\\nspan.katex {\\n -webkit-font-smoothing: antialiased;\\n color: rgba(0, 0, 0, 0.8);\\n font-size: 1.18em;\\n}\\n\";\n\n // Copyright 2018 The Distill Template Authors\n //\n // Licensed under the Apache License, Version 2.0 (the \"License\");\n // you may not use this file except in compliance with the License.\n // You may obtain a copy of the License at\n //\n // http://www.apache.org/licenses/LICENSE-2.0\n //\n // Unless required by applicable law or agreed to in writing, software\n // distributed under the License is distributed on an \"AS IS\" BASIS,\n // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n // See the License for the specific language governing permissions and\n // limitations under the License.\n\n // This is a straight concatenation of code from KaTeX's contrib folder,\n // but we aren't using some of their helpers that don't work well outside a browser environment.\n\n /*global katex */\n\n const findEndOfMath = function(delimiter, text, startIndex) {\n // Adapted from\n // https://github.com/Khan/perseus/blob/master/src/perseus-markdown.jsx\n let index = startIndex;\n let braceLevel = 0;\n\n const delimLength = delimiter.length;\n\n while (index < text.length) {\n const character = text[index];\n\n if (\n braceLevel <= 0 &&\n text.slice(index, index + delimLength) === delimiter\n ) {\n return index;\n } else if (character === \"\\\\\") {\n index++;\n } else if (character === \"{\") {\n braceLevel++;\n } else if (character === \"}\") {\n braceLevel--;\n }\n\n index++;\n }\n\n return -1;\n };\n\n const splitAtDelimiters = function(startData, leftDelim, rightDelim, display) {\n const finalData = [];\n\n for (let i = 0; i < startData.length; i++) {\n if (startData[i].type === \"text\") {\n const text = startData[i].data;\n\n let lookingForLeft = true;\n let currIndex = 0;\n let nextIndex;\n\n nextIndex = text.indexOf(leftDelim);\n if (nextIndex !== -1) {\n currIndex = nextIndex;\n finalData.push({\n type: \"text\",\n data: text.slice(0, currIndex)\n });\n lookingForLeft = false;\n }\n\n while (true) {\n // eslint-disable-line no-constant-condition\n if (lookingForLeft) {\n nextIndex = text.indexOf(leftDelim, currIndex);\n if (nextIndex === -1) {\n break;\n }\n\n finalData.push({\n type: \"text\",\n data: text.slice(currIndex, nextIndex)\n });\n\n currIndex = nextIndex;\n } else {\n nextIndex = findEndOfMath(\n rightDelim,\n text,\n currIndex + leftDelim.length\n );\n if (nextIndex === -1) {\n break;\n }\n\n finalData.push({\n type: \"math\",\n data: text.slice(currIndex + leftDelim.length, nextIndex),\n rawData: text.slice(currIndex, nextIndex + rightDelim.length),\n display: display\n });\n\n currIndex = nextIndex + rightDelim.length;\n }\n\n lookingForLeft = !lookingForLeft;\n }\n\n finalData.push({\n type: \"text\",\n data: text.slice(currIndex)\n });\n } else {\n finalData.push(startData[i]);\n }\n }\n\n return finalData;\n };\n\n const splitWithDelimiters = function(text, delimiters) {\n let data = [{ type: \"text\", data: text }];\n for (let i = 0; i < delimiters.length; i++) {\n const delimiter = delimiters[i];\n data = splitAtDelimiters(\n data,\n delimiter.left,\n delimiter.right,\n delimiter.display || false\n );\n }\n return data;\n };\n\n /* Note: optionsCopy is mutated by this method. If it is ever exposed in the\n * API, we should copy it before mutating.\n */\n const renderMathInText = function(text, optionsCopy) {\n const data = splitWithDelimiters(text, optionsCopy.delimiters);\n const fragment = document.createDocumentFragment();\n\n for (let i = 0; i < data.length; i++) {\n if (data[i].type === \"text\") {\n fragment.appendChild(document.createTextNode(data[i].data));\n } else {\n const tag = document.createElement(\"d-math\");\n const math = data[i].data;\n // Override any display mode defined in the settings with that\n // defined by the text itself\n optionsCopy.displayMode = data[i].display;\n try {\n tag.textContent = math;\n if (optionsCopy.displayMode) {\n tag.setAttribute(\"block\", \"\");\n }\n } catch (e) {\n if (!(e instanceof katex.ParseError)) {\n throw e;\n }\n optionsCopy.errorCallback(\n \"KaTeX auto-render: Failed to parse `\" + data[i].data + \"` with \",\n e\n );\n fragment.appendChild(document.createTextNode(data[i].rawData));\n continue;\n }\n fragment.appendChild(tag);\n }\n }\n\n return fragment;\n };\n\n const renderElem = function(elem, optionsCopy) {\n for (let i = 0; i < elem.childNodes.length; i++) {\n const childNode = elem.childNodes[i];\n if (childNode.nodeType === 3) {\n // Text node\n const text = childNode.textContent;\n if (optionsCopy.mightHaveMath(text)) {\n const frag = renderMathInText(text, optionsCopy);\n i += frag.childNodes.length - 1;\n elem.replaceChild(frag, childNode);\n }\n } else if (childNode.nodeType === 1) {\n // Element node\n const shouldRender =\n optionsCopy.ignoredTags.indexOf(childNode.nodeName.toLowerCase()) ===\n -1;\n\n if (shouldRender) {\n renderElem(childNode, optionsCopy);\n }\n }\n // Otherwise, it's something else, and ignore it.\n }\n };\n\n const defaultAutoRenderOptions = {\n delimiters: [\n { left: \"$$\", right: \"$$\", display: true },\n { left: \"\\\\[\", right: \"\\\\]\", display: true },\n { left: \"\\\\(\", right: \"\\\\)\", display: false }\n // LaTeX uses this, but it ruins the display of normal `$` in text:\n // {left: '$', right: '$', display: false},\n ],\n\n ignoredTags: [\n \"script\",\n \"noscript\",\n \"style\",\n \"textarea\",\n \"pre\",\n \"code\",\n \"svg\"\n ],\n\n errorCallback: function(msg, err) {\n console.error(msg, err);\n }\n };\n\n const renderMathInElement = function(elem, options) {\n if (!elem) {\n throw new Error(\"No element provided to render\");\n }\n\n const optionsCopy = Object.assign({}, defaultAutoRenderOptions, options);\n const delimiterStrings = optionsCopy.delimiters.flatMap(d => [\n d.left,\n d.right\n ]);\n const mightHaveMath = text =>\n delimiterStrings.some(d => text.indexOf(d) !== -1);\n optionsCopy.mightHaveMath = mightHaveMath;\n renderElem(elem, optionsCopy);\n };\n\n // Copyright 2018 The Distill Template Authors\n\n const katexJSURL = 'https://distill.pub/third-party/katex/katex.min.js';\n const katexCSSTag = '<link rel=\"stylesheet\" href=\"https://distill.pub/third-party/katex/katex.min.css\" crossorigin=\"anonymous\">';\n\n const T = Template('d-math', `\n${katexCSSTag}\n<style>\n\n:host {\n display: inline-block;\n contain: style;\n}\n\n:host([block]) {\n display: block;\n}\n\n${math}\n</style>\n<span id='katex-container'></span>\n`);\n\n // DMath, not Math, because that would conflict with the JS built-in\n class DMath extends Mutating(T(HTMLElement)) {\n\n static set katexOptions(options) {\n DMath._katexOptions = options;\n if (DMath.katexOptions.delimiters) {\n if (!DMath.katexAdded) {\n DMath.addKatex();\n } else {\n DMath.katexLoadedCallback();\n }\n }\n }\n\n static get katexOptions() {\n if (!DMath._katexOptions) {\n DMath._katexOptions = {\n delimiters: [ { 'left':'$$', 'right':'$$', 'display': false } ]\n };\n }\n return DMath._katexOptions;\n }\n\n static katexLoadedCallback() {\n // render all d-math tags\n const mathTags = document.querySelectorAll('d-math');\n for (const mathTag of mathTags) {\n mathTag.renderContent();\n }\n // transform inline delimited math to d-math tags\n if (DMath.katexOptions.delimiters) {\n renderMathInElement(document.body, DMath.katexOptions);\n }\n }\n\n static addKatex() {\n // css tag can use this convenience function\n document.head.insertAdjacentHTML('beforeend', katexCSSTag);\n // script tag has to be created to work properly\n const scriptTag = document.createElement('script');\n scriptTag.src = katexJSURL;\n scriptTag.async = true;\n scriptTag.onload = DMath.katexLoadedCallback;\n scriptTag.crossorigin = 'anonymous';\n document.head.appendChild(scriptTag);\n\n DMath.katexAdded = true;\n }\n\n get options() {\n const localOptions = { displayMode: this.hasAttribute('block') };\n return Object.assign(localOptions, DMath.katexOptions);\n }\n\n connectedCallback() {\n super.connectedCallback();\n if (!DMath.katexAdded) {\n DMath.addKatex();\n }\n }\n\n renderContent() {\n if (typeof katex !== 'undefined') {\n const container = this.root.querySelector('#katex-container');\n katex.render(this.textContent, container, this.options);\n }\n }\n\n }\n\n DMath.katexAdded = false;\n DMath.inlineMathRendered = false;\n window.DMath = DMath; // TODO: check if this can be removed, or if we should expose a distill global\n\n // Copyright 2018 The Distill Template Authors\n //\n // Licensed under the Apache License, Version 2.0 (the \"License\");\n // you may not use this file except in compliance with the License.\n // You may obtain a copy of the License at\n //\n // http://www.apache.org/licenses/LICENSE-2.0\n //\n // Unless required by applicable law or agreed to in writing, software\n // distributed under the License is distributed on an \"AS IS\" BASIS,\n // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n // See the License for the specific language governing permissions and\n // limitations under the License.\n\n function collect_citations(dom = document) {\n const citations = new Set();\n const citeTags = dom.querySelectorAll(\"d-cite\");\n for (const tag of citeTags) {\n const keyString = tag.getAttribute(\"key\") || tag.getAttribute(\"bibtex-key\");\n const keys = keyString.split(\",\").map(k => k.trim());\n for (const key of keys) {\n citations.add(key);\n }\n }\n return [...citations];\n }\n\n function author_string(ent, template, sep, finalSep) {\n if (ent.author == null) {\n return \"\";\n }\n var names = ent.author.split(\" and \");\n let name_strings = names.map(name => {\n name = name.trim();\n if (name.indexOf(\",\") != -1) {\n var last = name.split(\",\")[0].trim();\n var firsts = name.split(\",\")[1];\n } else if (name.indexOf(\" \") != -1) {\n var last = name\n .split(\" \")\n .slice(-1)[0]\n .trim();\n var firsts = name\n .split(\" \")\n .slice(0, -1)\n .join(\" \");\n } else {\n var last = name.trim();\n }\n var initials = \"\";\n if (firsts != undefined) {\n initials = firsts\n .trim()\n .split(\" \")\n .map(s => s.trim()[0]);\n initials = initials.join(\".\") + \".\";\n }\n return template\n .replace(\"${F}\", firsts)\n .replace(\"${L}\", last)\n .replace(\"${I}\", initials)\n .trim(); // in case one of first or last was empty\n });\n if (names.length > 1) {\n var str = name_strings.slice(0, names.length - 1).join(sep);\n str += (finalSep || sep) + name_strings[names.length - 1];\n return str;\n } else {\n return name_strings[0];\n }\n }\n\n function venue_string(ent) {\n var cite = ent.journal || ent.booktitle || \"\";\n if (\"volume\" in ent) {\n var issue = ent.issue || ent.number;\n issue = issue != undefined ? \"(\" + issue + \")\" : \"\";\n cite += \", Vol \" + ent.volume + issue;\n }\n if (\"pages\" in ent) {\n cite += \", pp. \" + ent.pages;\n }\n if (cite != \"\") cite += \". \";\n if (\"publisher\" in ent) {\n cite += ent.publisher;\n if (cite[cite.length - 1] != \".\") cite += \".\";\n }\n return cite;\n }\n\n function link_string(ent) {\n if (\"url\" in ent) {\n var url = ent.url;\n var arxiv_match = /arxiv\\.org\\/abs\\/([0-9\\.]*)/.exec(url);\n if (arxiv_match != null) {\n url = `http://arxiv.org/pdf/${arxiv_match[1]}.pdf`;\n }\n\n if (url.slice(-4) == \".pdf\") {\n var label = \"PDF\";\n } else if (url.slice(-5) == \".html\") {\n var label = \"HTML\";\n }\n return `  <a href=\"${url}\">[${label || \"link\"}]</a>`;\n } /* else if (\"doi\" in ent){\n return `  <a href=\"https://doi.org/${ent.doi}\" >[DOI]</a>`;\n }*/ else {\n return \"\";\n }\n }\n function doi_string(ent, new_line) {\n if (\"doi\" in ent) {\n return `${new_line ? \"<br>\" : \"\"} <a href=\"https://doi.org/${\n ent.doi\n }\" style=\"text-decoration:inherit;\">DOI: ${ent.doi}</a>`;\n } else {\n return \"\";\n }\n }\n\n function title_string(ent) {\n return '<span class=\"title\">' + ent.title + \"</span> \";\n }\n\n function bibliography_cite(ent, fancy) {\n if (ent) {\n var cite = title_string(ent);\n cite += link_string(ent) + \"<br>\";\n if (ent.author) {\n cite += author_string(ent, \"${L}, ${I}\", \", \", \" and \");\n if (ent.year || ent.date) {\n cite += \", \";\n }\n }\n if (ent.year || ent.date) {\n cite += (ent.year || ent.date) + \". \";\n } else {\n cite += \". \";\n }\n cite += venue_string(ent);\n cite += doi_string(ent);\n return cite;\n /*var cite = author_string(ent, \"${L}, ${I}\", \", \", \" and \");\n if (ent.year || ent.date){\n cite += \", \" + (ent.year || ent.date) + \". \"\n } else {\n cite += \". \"\n }\n cite += \"<b>\" + ent.title + \"</b>. \";\n cite += venue_string(ent);\n cite += doi_string(ent);\n cite += link_string(ent);\n return cite*/\n } else {\n return \"?\";\n }\n }\n\n function hover_cite(ent) {\n if (ent) {\n var cite = \"\";\n cite += \"<strong>\" + ent.title + \"</strong>\";\n cite += link_string(ent);\n cite += \"<br>\";\n\n var a_str = author_string(ent, \"${I} ${L}\", \", \") + \".\";\n var v_str =\n venue_string(ent).trim() + \" \" + ent.year + \". \" + doi_string(ent, true);\n\n if ((a_str + v_str).length < Math.min(40, ent.title.length)) {\n cite += a_str + \" \" + v_str;\n } else {\n cite += a_str + \"<br>\" + v_str;\n }\n return cite;\n } else {\n return \"?\";\n }\n }\n\n function domContentLoaded() {\n return ['interactive', 'complete'].indexOf(document.readyState) !== -1;\n }\n\n // Copyright 2018 The Distill Template Authors\n //\n // Licensed under the Apache License, Version 2.0 (the \"License\");\n // you may not use this file except in compliance with the License.\n // You may obtain a copy of the License at\n //\n // http://www.apache.org/licenses/LICENSE-2.0\n //\n // Unless required by applicable law or agreed to in writing, software\n // distributed under the License is distributed on an \"AS IS\" BASIS,\n // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n // See the License for the specific language governing permissions and\n // limitations under the License.\n\n function _moveLegacyAffiliationFormatIntoArray(frontMatter) {\n // authors used to have propoerties \"affiliation\" and \"affiliationURL\".\n // We now encourage using an array for affiliations containing objects with\n // properties \"name\" and \"url\".\n for (let author of frontMatter.authors) {\n const hasOldStyle = Boolean(author.affiliation);\n const hasNewStyle = Boolean(author.affiliations);\n if (!hasOldStyle) continue;\n if (hasNewStyle) {\n console.warn(`Author ${author.author} has both old-style (\"affiliation\" & \"affiliationURL\") and new style (\"affiliations\") affiliation information!`);\n } else {\n let newAffiliation = {\n \"name\": author.affiliation\n };\n if (author.affiliationURL) newAffiliation.url = author.affiliationURL;\n author.affiliations = [newAffiliation];\n }\n }\n return frontMatter\n }\n\n function parseFrontmatter(element) {\n const scriptTag = element.firstElementChild;\n if (scriptTag) {\n const type = scriptTag.getAttribute('type');\n if (type.split('/')[1] == 'json') {\n const content = scriptTag.textContent;\n const parsed = JSON.parse(content);\n return _moveLegacyAffiliationFormatIntoArray(parsed);\n } else {\n console.error('Distill only supports JSON frontmatter tags anymore; no more YAML.');\n }\n } else {\n console.error('You added a frontmatter tag but did not provide a script tag with front matter data in it. Please take a look at our templates.');\n }\n return {};\n }\n\n class FrontMatter$1 extends HTMLElement {\n\n static get is() { return 'd-front-matter'; }\n\n constructor() {\n super();\n\n const options = {childList: true, characterData: true, subtree: true};\n const observer = new MutationObserver( (entries) => {\n for (const entry of entries) {\n if (entry.target.nodeName === 'SCRIPT' || entry.type === 'characterData') {\n const data = parseFrontmatter(this);\n this.notify(data);\n }\n }\n });\n observer.observe(this, options);\n }\n\n notify(data) {\n const options = { detail: data, bubbles: true };\n const event = new CustomEvent('onFrontMatterChanged', options);\n document.dispatchEvent(event);\n }\n\n }\n\n // Copyright 2018 The Distill Template Authors\n //\n // Licensed under the Apache License, Version 2.0 (the \"License\");\n // you may not use this file except in compliance with the License.\n // You may obtain a copy of the License at\n //\n // http://www.apache.org/licenses/LICENSE-2.0\n //\n // Unless required by applicable law or agreed to in writing, software\n // distributed under the License is distributed on an \"AS IS\" BASIS,\n // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n // See the License for the specific language governing permissions and\n // limitations under the License.\n\n // no appendix -> add appendix\n // title in front, no h1 -> add it\n // no title in front, h1 -> read and put into frontMatter\n // footnote -> footnote list\n // break up bib\n // if citation, no bib-list -> add citation-list\n\n // if authors, no byline -> add byline\n\n function optionalComponents(dom, data) {\n const body = dom.body;\n const article = body.querySelector('d-article');\n\n // If we don't have an article tag, something weird is going on—giving up.\n if (!article) {\n console.warn('No d-article tag found; skipping adding optional components!');\n return;\n }\n\n let byline = dom.querySelector('d-byline');\n if (!byline) {\n if (data.authors) {\n byline = dom.createElement('d-byline');\n body.insertBefore(byline, article);\n } else {\n console.warn('No authors found in front matter; please add them before submission!');\n }\n }\n\n let title = dom.querySelector('d-title');\n if (!title) {\n title = dom.createElement('d-title');\n body.insertBefore(title, byline);\n }\n\n let h1 = title.querySelector('h1');\n if (!h1) {\n h1 = dom.createElement('h1');\n h1.textContent = data.title;\n title.insertBefore(h1, title.firstChild);\n }\n\n const hasPassword = typeof data.password !== 'undefined';\n let interstitial = body.querySelector('d-interstitial');\n if (hasPassword && !interstitial) {\n const inBrowser = typeof window !== 'undefined';\n const onLocalhost = inBrowser && window.location.hostname.includes('localhost');\n if (!inBrowser || !onLocalhost) {\n interstitial = dom.createElement('d-interstitial');\n interstitial.password = data.password;\n body.insertBefore(interstitial, body.firstChild);\n }\n } else if (!hasPassword && interstitial) {\n interstitial.parentElement.removeChild(this);\n }\n\n let appendix = dom.querySelector('d-appendix');\n if (!appendix) {\n appendix = dom.createElement('d-appendix');\n dom.body.appendChild(appendix);\n }\n\n let footnoteList = dom.querySelector('d-footnote-list');\n if (!footnoteList) {\n footnoteList = dom.createElement('d-footnote-list');\n appendix.appendChild(footnoteList);\n }\n\n let citationList = dom.querySelector('d-citation-list');\n if (!citationList) {\n citationList = dom.createElement('d-citation-list');\n appendix.appendChild(citationList);\n }\n\n }\n\n // Copyright 2018 The Distill Template Authors\n\n const frontMatter = new FrontMatter();\n\n const Controller = {\n frontMatter: frontMatter,\n waitingOn: {\n bibliography: [],\n citations: []\n },\n listeners: {\n onCiteKeyCreated(event) {\n const [citeTag, keys] = event.detail;\n\n // ensure we have citations\n if (!frontMatter.citationsCollected) {\n // console.debug('onCiteKeyCreated, but unresolved dependency (\"citations\"). Enqueing.');\n Controller.waitingOn.citations.push(() =>\n Controller.listeners.onCiteKeyCreated(event)\n );\n return;\n }\n\n // ensure we have a loaded bibliography\n if (!frontMatter.bibliographyParsed) {\n // console.debug('onCiteKeyCreated, but unresolved dependency (\"bibliography\"). Enqueing.');\n Controller.waitingOn.bibliography.push(() =>\n Controller.listeners.onCiteKeyCreated(event)\n );\n return;\n }\n\n const numbers = keys.map(key => frontMatter.citations.indexOf(key));\n citeTag.numbers = numbers;\n const entries = keys.map(key => frontMatter.bibliography.get(key));\n citeTag.entries = entries;\n },\n\n onCiteKeyChanged() {\n // const [citeTag, keys] = event.detail;\n\n // update citations\n frontMatter.citations = collect_citations();\n frontMatter.citationsCollected = true;\n for (const waitingCallback of Controller.waitingOn.citations.slice()) {\n waitingCallback();\n }\n\n // update bibliography\n const citationListTag = document.querySelector(\"d-citation-list\");\n const bibliographyEntries = new Map(\n frontMatter.citations.map(citationKey => {\n return [citationKey, frontMatter.bibliography.get(citationKey)];\n })\n );\n citationListTag.citations = bibliographyEntries;\n\n const citeTags = document.querySelectorAll(\"d-cite\");\n for (const citeTag of citeTags) {\n console.log(citeTag);\n const keys = citeTag.keys;\n const numbers = keys.map(key => frontMatter.citations.indexOf(key));\n citeTag.numbers = numbers;\n const entries = keys.map(key => frontMatter.bibliography.get(key));\n citeTag.entries = entries;\n }\n },\n\n onCiteKeyRemoved(event) {\n Controller.listeners.onCiteKeyChanged(event);\n },\n\n onBibliographyChanged(event) {\n const citationListTag = document.querySelector(\"d-citation-list\");\n\n const bibliography = event.detail;\n\n frontMatter.bibliography = bibliography;\n frontMatter.bibliographyParsed = true;\n for (const waitingCallback of Controller.waitingOn.bibliography.slice()) {\n waitingCallback();\n }\n\n // ensure we have citations\n if (!frontMatter.citationsCollected) {\n Controller.waitingOn.citations.push(function() {\n Controller.listeners.onBibliographyChanged({\n target: event.target,\n detail: event.detail\n });\n });\n return;\n }\n\n if (citationListTag.hasAttribute(\"distill-prerendered\")) {\n console.debug(\"Citation list was prerendered; not updating it.\");\n } else {\n const entries = new Map(\n frontMatter.citations.map(citationKey => {\n return [citationKey, frontMatter.bibliography.get(citationKey)];\n })\n );\n citationListTag.citations = entries;\n }\n },\n\n onFootnoteChanged() {\n // const footnote = event.detail;\n //TODO: optimize to only update current footnote\n const footnotesList = document.querySelector(\"d-footnote-list\");\n if (footnotesList) {\n const footnotes = document.querySelectorAll(\"d-footnote\");\n footnotesList.footnotes = footnotes;\n }\n },\n\n onFrontMatterChanged(event) {\n const data = event.detail;\n mergeFromYMLFrontmatter(frontMatter, data);\n\n const interstitial = document.querySelector(\"d-interstitial\");\n if (interstitial) {\n if (typeof frontMatter.password !== \"undefined\") {\n interstitial.password = frontMatter.password;\n } else {\n interstitial.parentElement.removeChild(interstitial);\n }\n }\n\n const prerendered = document.body.hasAttribute(\"distill-prerendered\");\n if (!prerendered && domContentLoaded()) {\n optionalComponents(document, frontMatter);\n\n const appendix = document.querySelector(\"distill-appendix\");\n if (appendix) {\n appendix.frontMatter = frontMatter;\n }\n\n const byline = document.querySelector(\"d-byline\");\n if (byline) {\n byline.frontMatter = frontMatter;\n }\n\n if (data.katex) {\n DMath.katexOptions = data.katex;\n }\n }\n },\n\n DOMContentLoaded() {\n if (Controller.loaded) {\n console.warn(\n \"Controller received DOMContentLoaded but was already loaded!\"\n );\n return;\n } else if (!domContentLoaded()) {\n console.warn(\n \"Controller received DOMContentLoaded at document.readyState: \" +\n document.readyState +\n \"!\"\n );\n return;\n } else {\n Controller.loaded = true;\n console.debug(\"Runlevel 4: Controller running DOMContentLoaded\");\n }\n\n const frontMatterTag = document.querySelector(\"d-front-matter\");\n if (frontMatterTag) {\n const data = parseFrontmatter(frontMatterTag);\n Controller.listeners.onFrontMatterChanged({ detail: data });\n }\n\n // Resolving \"citations\" dependency due to initial DOM load\n frontMatter.citations = collect_citations();\n frontMatter.citationsCollected = true;\n for (const waitingCallback of Controller.waitingOn.citations.slice()) {\n waitingCallback();\n }\n\n if (frontMatter.bibliographyParsed) {\n for (const waitingCallback of Controller.waitingOn.bibliography.slice()) {\n waitingCallback();\n }\n }\n\n const footnotesList = document.querySelector(\"d-footnote-list\");\n if (footnotesList) {\n const footnotes = document.querySelectorAll(\"d-footnote\");\n footnotesList.footnotes = footnotes;\n }\n }\n } // listeners\n }; // Controller\n\n var base = \"/*\\n * Copyright 2018 The Distill Template Authors\\n *\\n * Licensed under the Apache License, Version 2.0 (the \\\"License\\\");\\n * you may not use this file except in compliance with the License.\\n * You may obtain a copy of the License at\\n *\\n * http://www.apache.org/licenses/LICENSE-2.0\\n *\\n * Unless required by applicable law or agreed to in writing, software\\n * distributed under the License is distributed on an \\\"AS IS\\\" BASIS,\\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\n * See the License for the specific language governing permissions and\\n * limitations under the License.\\n */\\n\\nhtml {\\n font-size: 14px;\\n\\tline-height: 1.6em;\\n /* font-family: \\\"Libre Franklin\\\", \\\"Helvetica Neue\\\", sans-serif; */\\n font-family: -apple-system, BlinkMacSystemFont, \\\"Segoe UI\\\", Roboto, Oxygen, Ubuntu, Cantarell, \\\"Fira Sans\\\", \\\"Droid Sans\\\", \\\"Helvetica Neue\\\", Arial, sans-serif;\\n /*, \\\"Apple Color Emoji\\\", \\\"Segoe UI Emoji\\\", \\\"Segoe UI Symbol\\\";*/\\n text-size-adjust: 100%;\\n -ms-text-size-adjust: 100%;\\n -webkit-text-size-adjust: 100%;\\n}\\n\\n@media(min-width: 768px) {\\n html {\\n font-size: 16px;\\n }\\n}\\n\\nbody {\\n margin: 0;\\n}\\n\\na {\\n color: #004276;\\n}\\n\\nfigure {\\n margin: 0;\\n}\\n\\ntable {\\n\\tborder-collapse: collapse;\\n\\tborder-spacing: 0;\\n}\\n\\ntable th {\\n\\ttext-align: left;\\n}\\n\\ntable thead {\\n border-bottom: 1px solid rgba(0, 0, 0, 0.05);\\n}\\n\\ntable thead th {\\n padding-bottom: 0.5em;\\n}\\n\\ntable tbody :first-child td {\\n padding-top: 0.5em;\\n}\\n\\npre {\\n overflow: auto;\\n max-width: 100%;\\n}\\n\\np {\\n margin-top: 0;\\n margin-bottom: 1em;\\n}\\n\\nsup, sub {\\n vertical-align: baseline;\\n position: relative;\\n top: -0.4em;\\n line-height: 1em;\\n}\\n\\nsub {\\n top: 0.4em;\\n}\\n\\n.kicker,\\n.marker {\\n font-size: 15px;\\n font-weight: 600;\\n color: rgba(0, 0, 0, 0.5);\\n}\\n\\n\\n/* Headline */\\n\\n@media(min-width: 1024px) {\\n d-title h1 span {\\n display: block;\\n }\\n}\\n\\n/* Figure */\\n\\nfigure {\\n position: relative;\\n margin-bottom: 2.5em;\\n margin-top: 1.5em;\\n}\\n\\nfigcaption+figure {\\n\\n}\\n\\nfigure img {\\n width: 100%;\\n}\\n\\nfigure svg text,\\nfigure svg tspan {\\n}\\n\\nfigcaption,\\n.figcaption {\\n color: rgba(0, 0, 0, 0.6);\\n font-size: 12px;\\n line-height: 1.5em;\\n}\\n\\n@media(min-width: 1024px) {\\nfigcaption,\\n.figcaption {\\n font-size: 13px;\\n }\\n}\\n\\nfigure.external img {\\n background: white;\\n border: 1px solid rgba(0, 0, 0, 0.1);\\n box-shadow: 0 1px 8px rgba(0, 0, 0, 0.1);\\n padding: 18px;\\n box-sizing: border-box;\\n}\\n\\nfigcaption a {\\n color: rgba(0, 0, 0, 0.6);\\n}\\n\\nfigcaption b,\\nfigcaption strong, {\\n font-weight: 600;\\n color: rgba(0, 0, 0, 1.0);\\n}\\n\";\n\n var layout = \"/*\\n * Copyright 2018 The Distill Template Authors\\n *\\n * Licensed under the Apache License, Version 2.0 (the \\\"License\\\");\\n * you may not use this file except in compliance with the License.\\n * You may obtain a copy of the License at\\n *\\n * http://www.apache.org/licenses/LICENSE-2.0\\n *\\n * Unless required by applicable law or agreed to in writing, software\\n * distributed under the License is distributed on an \\\"AS IS\\\" BASIS,\\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\n * See the License for the specific language governing permissions and\\n * limitations under the License.\\n */\\n\\n@supports not (display: grid) {\\n .base-grid,\\n distill-header,\\n d-title,\\n d-abstract,\\n d-article,\\n d-appendix,\\n distill-appendix,\\n d-byline,\\n d-footnote-list,\\n d-citation-list,\\n distill-footer {\\n display: block;\\n padding: 8px;\\n }\\n}\\n\\n.base-grid,\\ndistill-header,\\nd-title,\\nd-abstract,\\nd-article,\\nd-appendix,\\ndistill-appendix,\\nd-byline,\\nd-footnote-list,\\nd-citation-list,\\ndistill-footer {\\n display: grid;\\n justify-items: stretch;\\n grid-template-columns: [screen-start] 8px [page-start kicker-start text-start gutter-start middle-start] 1fr 1fr 1fr 1fr 1fr 1fr 1fr 1fr [text-end page-end gutter-end kicker-end middle-end] 8px [screen-end];\\n grid-column-gap: 8px;\\n}\\n\\n.grid {\\n display: grid;\\n grid-column-gap: 8px;\\n}\\n\\n@media(min-width: 768px) {\\n .base-grid,\\n distill-header,\\n d-title,\\n d-abstract,\\n d-article,\\n d-appendix,\\n distill-appendix,\\n d-byline,\\n d-footnote-list,\\n d-citation-list,\\n distill-footer {\\n grid-template-columns: [screen-start] 1fr [page-start kicker-start middle-start text-start] 45px 45px 45px 45px 45px 45px 45px 45px [ kicker-end text-end gutter-start] 45px [middle-end] 45px [page-end gutter-end] 1fr [screen-end];\\n grid-column-gap: 16px;\\n }\\n\\n .grid {\\n grid-column-gap: 16px;\\n }\\n}\\n\\n@media(min-width: 1000px) {\\n .base-grid,\\n distill-header,\\n d-title,\\n d-abstract,\\n d-article,\\n d-appendix,\\n distill-appendix,\\n d-byline,\\n d-footnote-list,\\n d-citation-list,\\n distill-footer {\\n grid-template-columns: [screen-start] 1fr [page-start kicker-start] 50px [middle-start] 50px [text-start kicker-end] 50px 50px 50px 50px 50px 50px 50px 50px [text-end gutter-start] 50px [middle-end] 50px [page-end gutter-end] 1fr [screen-end];\\n grid-column-gap: 16px;\\n }\\n\\n .grid {\\n grid-column-gap: 16px;\\n }\\n}\\n\\n@media(min-width: 1180px) {\\n .base-grid,\\n distill-header,\\n d-title,\\n d-abstract,\\n d-article,\\n d-appendix,\\n distill-appendix,\\n d-byline,\\n d-footnote-list,\\n d-citation-list,\\n distill-footer {\\n grid-template-columns: [screen-start] 1fr [page-start kicker-start] 60px [middle-start] 60px [text-start kicker-end] 60px 60px 60px 60px 60px 60px 60px 60px [text-end gutter-start] 60px [middle-end] 60px [page-end gutter-end] 1fr [screen-end];\\n grid-column-gap: 32px;\\n }\\n\\n .grid {\\n grid-column-gap: 32px;\\n }\\n}\\n\\n\\n\\n\\n.base-grid {\\n grid-column: screen;\\n}\\n\\n/* .l-body,\\nd-article > * {\\n grid-column: text;\\n}\\n\\n.l-page,\\nd-title > *,\\nd-figure {\\n grid-column: page;\\n} */\\n\\n.l-gutter {\\n grid-column: gutter;\\n}\\n\\n.l-text,\\n.l-body {\\n grid-column: text;\\n}\\n\\n.l-page {\\n grid-column: page;\\n}\\n\\n.l-body-outset {\\n grid-column: middle;\\n}\\n\\n.l-page-outset {\\n grid-column: page;\\n}\\n\\n.l-screen {\\n grid-column: screen;\\n}\\n\\n.l-screen-inset {\\n grid-column: screen;\\n padding-left: 16px;\\n padding-left: 16px;\\n}\\n\\n\\n/* Aside */\\n\\nd-article aside {\\n grid-column: gutter;\\n font-size: 12px;\\n line-height: 1.6em;\\n color: rgba(0, 0, 0, 0.6)\\n}\\n\\n@media(min-width: 768px) {\\n aside {\\n grid-column: gutter;\\n }\\n\\n .side {\\n grid-column: gutter;\\n }\\n}\\n\";\n\n var print = \"/*\\n * Copyright 2018 The Distill Template Authors\\n *\\n * Licensed under the Apache License, Version 2.0 (the \\\"License\\\");\\n * you may not use this file except in compliance with the License.\\n * You may obtain a copy of the License at\\n *\\n * http://www.apache.org/licenses/LICENSE-2.0\\n *\\n * Unless required by applicable law or agreed to in writing, software\\n * distributed under the License is distributed on an \\\"AS IS\\\" BASIS,\\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\n * See the License for the specific language governing permissions and\\n * limitations under the License.\\n */\\n\\n@media print {\\n\\n @page {\\n size: 8in 11in;\\n @bottom-right {\\n content: counter(page) \\\" of \\\" counter(pages);\\n }\\n }\\n\\n html {\\n /* no general margins -- CSS Grid takes care of those */\\n }\\n\\n p, code {\\n page-break-inside: avoid;\\n }\\n\\n h2, h3 {\\n page-break-after: avoid;\\n }\\n\\n d-header {\\n visibility: hidden;\\n }\\n\\n d-footer {\\n display: none!important;\\n }\\n\\n}\\n\";\n\n var byline = \"/*\\n * Copyright 2018 The Distill Template Authors\\n *\\n * Licensed under the Apache License, Version 2.0 (the \\\"License\\\");\\n * you may not use this file except in compliance with the License.\\n * You may obtain a copy of the License at\\n *\\n * http://www.apache.org/licenses/LICENSE-2.0\\n *\\n * Unless required by applicable law or agreed to in writing, software\\n * distributed under the License is distributed on an \\\"AS IS\\\" BASIS,\\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\n * See the License for the specific language governing permissions and\\n * limitations under the License.\\n */\\n\\nd-byline {\\n contain: style;\\n overflow: hidden;\\n border-top: 1px solid rgba(0, 0, 0, 0.1);\\n font-size: 0.8rem;\\n line-height: 1.8em;\\n padding: 1.5rem 0;\\n min-height: 1.8em;\\n}\\n\\n\\nd-byline .byline {\\n grid-template-columns: 1fr 1fr;\\n grid-column: text;\\n}\\n\\n@media(min-width: 768px) {\\n d-byline .byline {\\n grid-template-columns: 1fr 1fr 1fr 1fr;\\n }\\n}\\n\\nd-byline .authors-affiliations {\\n grid-column-end: span 2;\\n grid-template-columns: 1fr 1fr;\\n margin-bottom: 1em;\\n}\\n\\n@media(min-width: 768px) {\\n d-byline .authors-affiliations {\\n margin-bottom: 0;\\n }\\n}\\n\\nd-byline h3 {\\n font-size: 0.6rem;\\n font-weight: 400;\\n color: rgba(0, 0, 0, 0.5);\\n margin: 0;\\n text-transform: uppercase;\\n}\\n\\nd-byline p {\\n margin: 0;\\n}\\n\\nd-byline a,\\nd-article d-byline a {\\n color: rgba(0, 0, 0, 0.8);\\n text-decoration: none;\\n border-bottom: none;\\n}\\n\\nd-article d-byline a:hover {\\n text-decoration: underline;\\n border-bottom: none;\\n}\\n\\nd-byline p.author {\\n font-weight: 500;\\n}\\n\\nd-byline .affiliations {\\n\\n}\\n\";\n\n var article = \"/*\\n * Copyright 2018 The Distill Template Authors\\n *\\n * Licensed under the Apache License, Version 2.0 (the \\\"License\\\");\\n * you may not use this file except in compliance with the License.\\n * You may obtain a copy of the License at\\n *\\n * http://www.apache.org/licenses/LICENSE-2.0\\n *\\n * Unless required by applicable law or agreed to in writing, software\\n * distributed under the License is distributed on an \\\"AS IS\\\" BASIS,\\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\n * See the License for the specific language governing permissions and\\n * limitations under the License.\\n */\\n\\nd-article {\\n contain: layout style;\\n overflow-x: hidden;\\n border-top: 1px solid rgba(0, 0, 0, 0.1);\\n padding-top: 2rem;\\n color: rgba(0, 0, 0, 0.8);\\n}\\n\\nd-article > * {\\n grid-column: text;\\n}\\n\\n@media(min-width: 768px) {\\n d-article {\\n font-size: 16px;\\n }\\n}\\n\\n@media(min-width: 1024px) {\\n d-article {\\n font-size: 1.06rem;\\n line-height: 1.7em;\\n }\\n}\\n\\n\\n/* H2 */\\n\\n\\nd-article .marker {\\n text-decoration: none;\\n border: none;\\n counter-reset: section;\\n grid-column: kicker;\\n line-height: 1.7em;\\n}\\n\\nd-article .marker:hover {\\n border: none;\\n}\\n\\nd-article .marker span {\\n padding: 0 3px 4px;\\n border-bottom: 1px solid rgba(0, 0, 0, 0.2);\\n position: relative;\\n top: 4px;\\n}\\n\\nd-article .marker:hover span {\\n color: rgba(0, 0, 0, 0.7);\\n border-bottom: 1px solid rgba(0, 0, 0, 0.7);\\n}\\n\\nd-article h2 {\\n font-weight: 600;\\n font-size: 24px;\\n line-height: 1.25em;\\n margin: 2rem 0 1.5rem 0;\\n border-bottom: 1px solid rgba(0, 0, 0, 0.1);\\n padding-bottom: 1rem;\\n}\\n\\n@media(min-width: 1024px) {\\n d-article h2 {\\n font-size: 36px;\\n }\\n}\\n\\n/* H3 */\\n\\nd-article h3 {\\n font-weight: 700;\\n font-size: 18px;\\n line-height: 1.4em;\\n margin-bottom: 1em;\\n margin-top: 2em;\\n}\\n\\n@media(min-width: 1024px) {\\n d-article h3 {\\n font-size: 20px;\\n }\\n}\\n\\n/* H4 */\\n\\nd-article h4 {\\n font-weight: 600;\\n text-transform: uppercase;\\n font-size: 14px;\\n line-height: 1.4em;\\n}\\n\\nd-article a {\\n color: inherit;\\n}\\n\\nd-article p,\\nd-article ul,\\nd-article ol,\\nd-article blockquote {\\n margin-top: 0;\\n margin-bottom: 1em;\\n margin-left: 0;\\n margin-right: 0;\\n}\\n\\nd-article blockquote {\\n border-left: 2px solid rgba(0, 0, 0, 0.2);\\n padding-left: 2em;\\n font-style: italic;\\n color: rgba(0, 0, 0, 0.6);\\n}\\n\\nd-article a {\\n border-bottom: 1px solid rgba(0, 0, 0, 0.4);\\n text-decoration: none;\\n}\\n\\nd-article a:hover {\\n border-bottom: 1px solid rgba(0, 0, 0, 0.8);\\n}\\n\\nd-article .link {\\n text-decoration: underline;\\n cursor: pointer;\\n}\\n\\nd-article ul,\\nd-article ol {\\n padding-left: 24px;\\n}\\n\\nd-article li {\\n margin-bottom: 0.2em;\\n margin-left: 0;\\n padding-left: 0;\\n}\\n\\nd-article li:last-child {\\n margin-bottom: 0;\\n}\\n\\nd-article pre {\\n font-size: 14px;\\n margin-bottom: 20px;\\n}\\n\\nd-article hr {\\n grid-column: screen;\\n width: 100%;\\n border: none;\\n border-bottom: 1px solid rgba(0, 0, 0, 0.1);\\n margin-top: 60px;\\n margin-bottom: 60px;\\n}\\n\\nd-article section {\\n margin-top: 60px;\\n margin-bottom: 60px;\\n}\\n\\nd-article span.equation-mimic {\\n font-family: georgia;\\n font-size: 115%;\\n font-style: italic;\\n}\\n\\nd-article > d-code,\\nd-article section > d-code {\\n display: block;\\n}\\n\\nd-article > d-math[block],\\nd-article section > d-math[block] {\\n display: block;\\n}\\n\\n@media (max-width: 768px) {\\n d-article > d-code,\\n d-article section > d-code,\\n d-article > d-math[block],\\n d-article section > d-math[block] {\\n overflow-x: scroll;\\n -ms-overflow-style: none; // IE 10+\\n overflow: -moz-scrollbars-none; // Firefox\\n }\\n\\n d-article > d-code::-webkit-scrollbar,\\n d-article section > d-code::-webkit-scrollbar,\\n d-article > d-math[block]::-webkit-scrollbar,\\n d-article section > d-math[block]::-webkit-scrollbar {\\n display: none; // Safari and Chrome\\n }\\n}\\n\\nd-article .citation {\\n color: #668;\\n cursor: pointer;\\n}\\n\\nd-include {\\n width: auto;\\n display: block;\\n}\\n\\nd-figure {\\n contain: layout style;\\n}\\n\\n/* KaTeX */\\n\\n.katex, .katex-prerendered {\\n contain: style;\\n display: inline-block;\\n}\\n\\n/* Tables */\\n\\nd-article table {\\n border-collapse: collapse;\\n margin-bottom: 1.5rem;\\n border-bottom: 1px solid rgba(0, 0, 0, 0.2);\\n}\\n\\nd-article table th {\\n border-bottom: 1px solid rgba(0, 0, 0, 0.2);\\n}\\n\\nd-article table td {\\n border-bottom: 1px solid rgba(0, 0, 0, 0.05);\\n}\\n\\nd-article table tr:last-of-type td {\\n border-bottom: none;\\n}\\n\\nd-article table th,\\nd-article table td {\\n font-size: 15px;\\n padding: 2px 8px;\\n}\\n\\nd-article table tbody :first-child td {\\n padding-top: 2px;\\n}\\n\";\n\n var title = \"/*\\n * Copyright 2018 The Distill Template Authors\\n *\\n * Licensed under the Apache License, Version 2.0 (the \\\"License\\\");\\n * you may not use this file except in compliance with the License.\\n * You may obtain a copy of the License at\\n *\\n * http://www.apache.org/licenses/LICENSE-2.0\\n *\\n * Unless required by applicable law or agreed to in writing, software\\n * distributed under the License is distributed on an \\\"AS IS\\\" BASIS,\\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\n * See the License for the specific language governing permissions and\\n * limitations under the License.\\n */\\n\\nd-title {\\n padding: 2rem 0 1.5rem;\\n contain: layout style;\\n overflow-x: hidden;\\n}\\n\\n@media(min-width: 768px) {\\n d-title {\\n padding: 4rem 0 1.5rem;\\n }\\n}\\n\\nd-title h1 {\\n grid-column: text;\\n font-size: 40px;\\n font-weight: 700;\\n line-height: 1.1em;\\n margin: 0 0 0.5rem;\\n}\\n\\n@media(min-width: 768px) {\\n d-title h1 {\\n font-size: 50px;\\n }\\n}\\n\\nd-title p {\\n font-weight: 300;\\n font-size: 1.2rem;\\n line-height: 1.55em;\\n grid-column: text;\\n}\\n\\nd-title .status {\\n margin-top: 0px;\\n font-size: 12px;\\n color: #009688;\\n opacity: 0.8;\\n grid-column: kicker;\\n}\\n\\nd-title .status span {\\n line-height: 1;\\n display: inline-block;\\n padding: 6px 0;\\n border-bottom: 1px solid #80cbc4;\\n font-size: 11px;\\n text-transform: uppercase;\\n}\\n\";\n\n // Copyright 2018 The Distill Template Authors\n\n const styles = base + layout + title + byline + article + math + print;\n\n function makeStyleTag(dom) {\n\n const styleTagId = 'distill-prerendered-styles';\n const prerenderedTag = dom.getElementById(styleTagId);\n if (!prerenderedTag) {\n const styleTag = dom.createElement('style');\n styleTag.id = styleTagId;\n styleTag.type = 'text/css';\n const cssTextTag = dom.createTextNode(styles);\n styleTag.appendChild(cssTextTag);\n const firstScriptTag = dom.head.querySelector('script');\n dom.head.insertBefore(styleTag, firstScriptTag);\n }\n\n }\n\n // Copyright 2018 The Distill Template Authors\n //\n // Licensed under the Apache License, Version 2.0 (the \"License\");\n // you may not use this file except in compliance with the License.\n // You may obtain a copy of the License at\n //\n // http://www.apache.org/licenses/LICENSE-2.0\n //\n // Unless required by applicable law or agreed to in writing, software\n // distributed under the License is distributed on an \"AS IS\" BASIS,\n // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n // See the License for the specific language governing permissions and\n // limitations under the License.\n\n function addPolyfill(polyfill, polyfillLoadedCallback) {\n console.debug('Runlevel 0: Polyfill required: ' + polyfill.name);\n const script = document.createElement('script');\n script.src = polyfill.url;\n script.async = false;\n if (polyfillLoadedCallback) {\n script.onload = function() { polyfillLoadedCallback(polyfill); };\n }\n script.onerror = function() {\n new Error('Runlevel 0: Polyfills failed to load script ' + polyfill.name);\n };\n document.head.appendChild(script);\n }\n\n const polyfills = [\n {\n name: 'WebComponents',\n support: function() {\n return 'customElements' in window &&\n 'attachShadow' in Element.prototype &&\n 'getRootNode' in Element.prototype &&\n 'content' in document.createElement('template') &&\n 'Promise' in window &&\n 'from' in Array;\n },\n url: 'https://distill.pub/third-party/polyfills/webcomponents-lite.js'\n }, {\n name: 'IntersectionObserver',\n support: function() {\n return 'IntersectionObserver' in window &&\n 'IntersectionObserverEntry' in window;\n },\n url: 'https://distill.pub/third-party/polyfills/intersection-observer.js'\n },\n ];\n\n class Polyfills {\n\n static browserSupportsAllFeatures() {\n return polyfills.every((poly) => poly.support());\n }\n\n static load(callback) {\n // Define an intermediate callback that checks if all is loaded.\n const polyfillLoaded = function(polyfill) {\n polyfill.loaded = true;\n console.debug('Runlevel 0: Polyfill has finished loading: ' + polyfill.name);\n // console.debug(window[polyfill.name]);\n if (Polyfills.neededPolyfills.every((poly) => poly.loaded)) {\n console.debug('Runlevel 0: All required polyfills have finished loading.');\n console.debug('Runlevel 0->1.');\n window.distillRunlevel = 1;\n callback();\n }\n };\n // Add polyfill script tags\n for (const polyfill of Polyfills.neededPolyfills) {\n addPolyfill(polyfill, polyfillLoaded);\n }\n }\n\n static get neededPolyfills() {\n if (!Polyfills._neededPolyfills) {\n Polyfills._neededPolyfills = polyfills.filter((poly) => !poly.support());\n }\n return Polyfills._neededPolyfills;\n }\n }\n\n // Copyright 2018 The Distill Template Authors\n //\n // Licensed under the Apache License, Version 2.0 (the \"License\");\n // you may not use this file except in compliance with the License.\n // You may obtain a copy of the License at\n //\n // http://www.apache.org/licenses/LICENSE-2.0\n //\n // Unless required by applicable law or agreed to in writing, software\n // distributed under the License is distributed on an \"AS IS\" BASIS,\n // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n // See the License for the specific language governing permissions and\n // limitations under the License.\n\n // const marginSmall = 16;\n // const marginLarge = 3 * marginSmall;\n // const margin = marginSmall + marginLarge;\n // const gutter = marginSmall;\n // const outsetAmount = margin / 2;\n // const numCols = 4;\n // const numGutters = numCols - 1;\n // const columnWidth = (768 - 2 * marginLarge - numGutters * gutter) / numCols;\n //\n // const screenwidth = 768;\n // const pageWidth = screenwidth - 2 * marginLarge;\n // const bodyWidth = pageWidth - columnWidth - gutter;\n\n function body(selector) {\n return `${selector} {\n grid-column: left / text;\n }\n `;\n }\n\n // Copyright 2018 The Distill Template Authors\n\n const T$1 = Template('d-abstract', `\n<style>\n :host {\n font-size: 1.25rem;\n line-height: 1.6em;\n color: rgba(0, 0, 0, 0.7);\n -webkit-font-smoothing: antialiased;\n }\n\n ::slotted(p) {\n margin-top: 0;\n margin-bottom: 1em;\n grid-column: text-start / middle-end;\n }\n ${body('d-abstract')}\n</style>\n\n<slot></slot>\n`);\n\n class Abstract extends T$1(HTMLElement) {\n\n }\n\n // Copyright 2018 The Distill Template Authors\n\n const T$2 = Template('d-appendix', `\n<style>\n\nd-appendix {\n contain: layout style;\n font-size: 0.8em;\n line-height: 1.7em;\n margin-top: 60px;\n margin-bottom: 0;\n border-top: 1px solid rgba(0, 0, 0, 0.1);\n color: rgba(0,0,0,0.5);\n padding-top: 60px;\n padding-bottom: 48px;\n}\n\nd-appendix h3 {\n grid-column: page-start / text-start;\n font-size: 15px;\n font-weight: 500;\n margin-top: 1em;\n margin-bottom: 0;\n color: rgba(0,0,0,0.65);\n}\n\nd-appendix h3 + * {\n margin-top: 1em;\n}\n\nd-appendix ol {\n padding: 0 0 0 15px;\n}\n\n@media (min-width: 768px) {\n d-appendix ol {\n padding: 0 0 0 30px;\n margin-left: -30px;\n }\n}\n\nd-appendix li {\n margin-bottom: 1em;\n}\n\nd-appendix a {\n color: rgba(0, 0, 0, 0.6);\n}\n\nd-appendix > * {\n grid-column: text;\n}\n\nd-appendix > d-footnote-list,\nd-appendix > d-citation-list,\nd-appendix > distill-appendix {\n grid-column: screen;\n}\n\n</style>\n\n`, false);\n\n class Appendix extends T$2(HTMLElement) {\n\n }\n\n // Copyright 2018 The Distill Template Authors\n //\n // Licensed under the Apache License, Version 2.0 (the \"License\");\n // you may not use this file except in compliance with the License.\n // You may obtain a copy of the License at\n //\n // http://www.apache.org/licenses/LICENSE-2.0\n //\n // Unless required by applicable law or agreed to in writing, software\n // distributed under the License is distributed on an \"AS IS\" BASIS,\n // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n // See the License for the specific language governing permissions and\n // limitations under the License.\n\n // import { Template } from '../mixins/template';\n // import { Controller } from '../controller';\n\n const isOnlyWhitespace = /^\\s*$/;\n\n class Article extends HTMLElement {\n static get is() { return 'd-article'; }\n\n constructor() {\n super();\n\n new MutationObserver( (mutations) => {\n for (const mutation of mutations) {\n for (const addedNode of mutation.addedNodes) {\n switch (addedNode.nodeName) {\n case '#text': { // usually text nodes are only linebreaks.\n const text = addedNode.nodeValue;\n if (!isOnlyWhitespace.test(text)) {\n console.warn('Use of unwrapped text in distill articles is discouraged as it breaks layout! Please wrap any text in a <span> or <p> tag. We found the following text: ' + text);\n const wrapper = document.createElement('span');\n wrapper.innerHTML = addedNode.nodeValue;\n addedNode.parentNode.insertBefore(wrapper, addedNode);\n addedNode.parentNode.removeChild(addedNode);\n }\n } break;\n }\n }\n }\n }).observe(this, {childList: true});\n }\n\n }\n\n var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};\n\n function createCommonjsModule(fn, module) {\n \treturn module = { exports: {} }, fn(module, module.exports), module.exports;\n }\n\n var bibtexParse = createCommonjsModule(function (module, exports) {\n /* start bibtexParse 0.0.22 */\n\n //Original work by Henrik Muehe (c) 2010\n //\n //CommonJS port by Mikola Lysenko 2013\n //\n //Port to Browser lib by ORCID / RCPETERS\n //\n //Issues:\n //no comment handling within strings\n //no string concatenation\n //no variable values yet\n //Grammar implemented here:\n //bibtex -> (string | preamble | comment | entry)*;\n //string -> '@STRING' '{' key_equals_value '}';\n //preamble -> '@PREAMBLE' '{' value '}';\n //comment -> '@COMMENT' '{' value '}';\n //entry -> '@' key '{' key ',' key_value_list '}';\n //key_value_list -> key_equals_value (',' key_equals_value)*;\n //key_equals_value -> key '=' value;\n //value -> value_quotes | value_braces | key;\n //value_quotes -> '\"' .*? '\"'; // not quite\n //value_braces -> '{' .*? '\"'; // not quite\n (function(exports) {\n\n function BibtexParser() {\n\n this.months = [\"jan\", \"feb\", \"mar\", \"apr\", \"may\", \"jun\", \"jul\", \"aug\", \"sep\", \"oct\", \"nov\", \"dec\"];\n this.notKey = [',','{','}',' ','='];\n this.pos = 0;\n this.input = \"\";\n this.entries = new Array();\n\n this.currentEntry = \"\";\n\n this.setInput = function(t) {\n this.input = t;\n };\n\n this.getEntries = function() {\n return this.entries;\n };\n\n this.isWhitespace = function(s) {\n return (s == ' ' || s == '\\r' || s == '\\t' || s == '\\n');\n };\n\n this.match = function(s, canCommentOut) {\n if (canCommentOut == undefined || canCommentOut == null)\n canCommentOut = true;\n this.skipWhitespace(canCommentOut);\n if (this.input.substring(this.pos, this.pos + s.length) == s) {\n this.pos += s.length;\n } else {\n throw \"Token mismatch, expected \" + s + \", found \"\n + this.input.substring(this.pos);\n } this.skipWhitespace(canCommentOut);\n };\n\n this.tryMatch = function(s, canCommentOut) {\n if (canCommentOut == undefined || canCommentOut == null)\n canCommentOut = true;\n this.skipWhitespace(canCommentOut);\n if (this.input.substring(this.pos, this.pos + s.length) == s) {\n return true;\n } else {\n return false;\n } };\n\n /* when search for a match all text can be ignored, not just white space */\n this.matchAt = function() {\n while (this.input.length > this.pos && this.input[this.pos] != '@') {\n this.pos++;\n }\n if (this.input[this.pos] == '@') {\n return true;\n } return false;\n };\n\n this.skipWhitespace = function(canCommentOut) {\n while (this.isWhitespace(this.input[this.pos])) {\n this.pos++;\n } if (this.input[this.pos] == \"%\" && canCommentOut == true) {\n while (this.input[this.pos] != \"\\n\") {\n this.pos++;\n } this.skipWhitespace(canCommentOut);\n } };\n\n this.value_braces = function() {\n var bracecount = 0;\n this.match(\"{\", false);\n var start = this.pos;\n var escaped = false;\n while (true) {\n if (!escaped) {\n if (this.input[this.pos] == '}') {\n if (bracecount > 0) {\n bracecount--;\n } else {\n var end = this.pos;\n this.match(\"}\", false);\n return this.input.substring(start, end);\n } } else if (this.input[this.pos] == '{') {\n bracecount++;\n } else if (this.pos >= this.input.length - 1) {\n throw \"Unterminated value\";\n } } if (this.input[this.pos] == '\\\\' && escaped == false)\n escaped = true;\n else\n escaped = false;\n this.pos++;\n } };\n\n this.value_comment = function() {\n var str = '';\n var brcktCnt = 0;\n while (!(this.tryMatch(\"}\", false) && brcktCnt == 0)) {\n str = str + this.input[this.pos];\n if (this.input[this.pos] == '{')\n brcktCnt++;\n if (this.input[this.pos] == '}')\n brcktCnt--;\n if (this.pos >= this.input.length - 1) {\n throw \"Unterminated value:\" + this.input.substring(start);\n } this.pos++;\n } return str;\n };\n\n this.value_quotes = function() {\n this.match('\"', false);\n var start = this.pos;\n var escaped = false;\n while (true) {\n if (!escaped) {\n if (this.input[this.pos] == '\"') {\n var end = this.pos;\n this.match('\"', false);\n return this.input.substring(start, end);\n } else if (this.pos >= this.input.length - 1) {\n throw \"Unterminated value:\" + this.input.substring(start);\n } }\n if (this.input[this.pos] == '\\\\' && escaped == false)\n escaped = true;\n else\n escaped = false;\n this.pos++;\n } };\n\n this.single_value = function() {\n var start = this.pos;\n if (this.tryMatch(\"{\")) {\n return this.value_braces();\n } else if (this.tryMatch('\"')) {\n return this.value_quotes();\n } else {\n var k = this.key();\n if (k.match(\"^[0-9]+$\"))\n return k;\n else if (this.months.indexOf(k.toLowerCase()) >= 0)\n return k.toLowerCase();\n else\n throw \"Value expected:\" + this.input.substring(start) + ' for key: ' + k;\n\n } };\n\n this.value = function() {\n var values = [];\n values.push(this.single_value());\n while (this.tryMatch(\"#\")) {\n this.match(\"#\");\n values.push(this.single_value());\n } return values.join(\"\");\n };\n\n this.key = function() {\n var start = this.pos;\n while (true) {\n if (this.pos >= this.input.length) {\n throw \"Runaway key\";\n } // а-яА-Я is Cyrillic\n //console.log(this.input[this.pos]);\n if (this.notKey.indexOf(this.input[this.pos]) >= 0) {\n return this.input.substring(start, this.pos);\n } else {\n this.pos++;\n\n } } };\n\n this.key_equals_value = function() {\n var key = this.key();\n if (this.tryMatch(\"=\")) {\n this.match(\"=\");\n var val = this.value();\n return [ key, val ];\n } else {\n throw \"... = value expected, equals sign missing:\"\n + this.input.substring(this.pos);\n } };\n\n this.key_value_list = function() {\n var kv = this.key_equals_value();\n this.currentEntry['entryTags'] = {};\n this.currentEntry['entryTags'][kv[0]] = kv[1];\n while (this.tryMatch(\",\")) {\n this.match(\",\");\n // fixes problems with commas at the end of a list\n if (this.tryMatch(\"}\")) {\n break;\n }\n kv = this.key_equals_value();\n this.currentEntry['entryTags'][kv[0]] = kv[1];\n } };\n\n this.entry_body = function(d) {\n this.currentEntry = {};\n this.currentEntry['citationKey'] = this.key();\n this.currentEntry['entryType'] = d.substring(1);\n this.match(\",\");\n this.key_value_list();\n this.entries.push(this.currentEntry);\n };\n\n this.directive = function() {\n this.match(\"@\");\n return \"@\" + this.key();\n };\n\n this.preamble = function() {\n this.currentEntry = {};\n this.currentEntry['entryType'] = 'PREAMBLE';\n this.currentEntry['entry'] = this.value_comment();\n this.entries.push(this.currentEntry);\n };\n\n this.comment = function() {\n this.currentEntry = {};\n this.currentEntry['entryType'] = 'COMMENT';\n this.currentEntry['entry'] = this.value_comment();\n this.entries.push(this.currentEntry);\n };\n\n this.entry = function(d) {\n this.entry_body(d);\n };\n\n this.bibtex = function() {\n while (this.matchAt()) {\n var d = this.directive();\n this.match(\"{\");\n if (d == \"@STRING\") {\n this.string();\n } else if (d == \"@PREAMBLE\") {\n this.preamble();\n } else if (d == \"@COMMENT\") {\n this.comment();\n } else {\n this.entry(d);\n }\n this.match(\"}\");\n } };\n }\n exports.toJSON = function(bibtex) {\n var b = new BibtexParser();\n b.setInput(bibtex);\n b.bibtex();\n return b.entries;\n };\n\n /* added during hackathon don't hate on me */\n exports.toBibtex = function(json) {\n var out = '';\n for ( var i in json) {\n out += \"@\" + json[i].entryType;\n out += '{';\n if (json[i].citationKey)\n out += json[i].citationKey + ', ';\n if (json[i].entry)\n out += json[i].entry ;\n if (json[i].entryTags) {\n var tags = '';\n for (var jdx in json[i].entryTags) {\n if (tags.length != 0)\n tags += ', ';\n tags += jdx + '= {' + json[i].entryTags[jdx] + '}';\n }\n out += tags;\n }\n out += '}\\n\\n';\n }\n return out;\n\n };\n\n })( exports);\n\n /* end bibtexParse */\n });\n\n // Copyright 2018 The Distill Template Authors\n\n function normalizeTag(string) {\n return string\n .replace(/[\\t\\n ]+/g, ' ')\n .replace(/{\\\\[\"^`.'acu~Hvs]( )?([a-zA-Z])}/g, (full, x, char) => char)\n .replace(/{\\\\([a-zA-Z])}/g, (full, char) => char);\n }\n\n function parseBibtex(bibtex) {\n const bibliography = new Map();\n const parsedEntries = bibtexParse.toJSON(bibtex);\n for (const entry of parsedEntries) {\n // normalize tags; note entryTags is an object, not Map\n for (const [key, value] of Object.entries(entry.entryTags)) {\n entry.entryTags[key.toLowerCase()] = normalizeTag(value);\n }\n entry.entryTags.type = entry.entryType;\n // add to bibliography\n bibliography.set(entry.citationKey, entry.entryTags);\n }\n return bibliography;\n }\n\n function serializeFrontmatterToBibtex(frontMatter) {\n return `@article{${frontMatter.slug},\n author = {${frontMatter.bibtexAuthors}},\n title = {${frontMatter.title}},\n journal = {${frontMatter.journal.title}},\n year = {${frontMatter.publishedYear}},\n note = {${frontMatter.url}},\n doi = {${frontMatter.doi}}\n}`;\n }\n\n // Copyright 2018 The Distill Template Authors\n\n class Bibliography extends HTMLElement {\n\n static get is() { return 'd-bibliography'; }\n\n constructor() {\n super();\n\n // set up mutation observer\n const options = {childList: true, characterData: true, subtree: true};\n const observer = new MutationObserver( (entries) => {\n for (const entry of entries) {\n if (entry.target.nodeName === 'SCRIPT' || entry.type === 'characterData') {\n this.parseIfPossible();\n }\n }\n });\n observer.observe(this, options);\n }\n\n connectedCallback() {\n requestAnimationFrame(() => {\n this.parseIfPossible();\n });\n }\n\n parseIfPossible() {\n const scriptTag = this.querySelector('script');\n if (!scriptTag) return;\n if (scriptTag.type == 'text/bibtex') {\n const newBibtex = scriptTag.textContent;\n if (this.bibtex !== newBibtex) {\n this.bibtex = newBibtex;\n const bibliography = parseBibtex(this.bibtex);\n this.notify(bibliography);\n }\n } else if (scriptTag.type == 'text/json') {\n const bibliography = new Map(JSON.parse(scriptTag.textContent));\n this.notify(bibliography);\n } else {\n console.warn('Unsupported bibliography script tag type: ' + scriptTag.type);\n }\n }\n\n notify(bibliography) {\n const options = { detail: bibliography, bubbles: true };\n const event = new CustomEvent('onBibliographyChanged', options);\n this.dispatchEvent(event);\n }\n\n /* observe 'src' attribute */\n\n static get observedAttributes() {\n return ['src'];\n }\n\n receivedBibtex(event) {\n const bibliography = parseBibtex(event.target.response);\n this.notify(bibliography);\n }\n\n attributeChangedCallback(name, oldValue, newValue) {\n var oReq = new XMLHttpRequest();\n oReq.onload = (e) => this.receivedBibtex(e);\n oReq.onerror = () => console.warn(`Could not load Bibtex! (tried ${newValue})`);\n oReq.responseType = 'text';\n oReq.open('GET', newValue, true);\n oReq.send();\n }\n\n\n }\n\n // Copyright 2018 The Distill Template Authors\n //\n // Licensed under the Apache License, Version 2.0 (the \"License\");\n // you may not use this file except in compliance with the License.\n // You may obtain a copy of the License at\n //\n // http://www.apache.org/licenses/LICENSE-2.0\n //\n // Unless required by applicable law or agreed to in writing, software\n // distributed under the License is distributed on an \"AS IS\" BASIS,\n // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n // See the License for the specific language governing permissions and\n // limitations under the License.\n\n // import style from '../styles/d-byline.css';\n\n function bylineTemplate(frontMatter) {\n return `\n <div class=\"byline grid\">\n <div>\n <h3>Authors</h3>\n <div>\n ${frontMatter.authors.map((author, i) => `\n <span class=\"author\">\n ${author.personalURL ? `\n <a class=\"name\" href=\"${author.personalURL}\">${author.name}` + (i + 1 < frontMatter.authors.length ? `,` : ``) + `</a>` : `\n <span class=\"name\">${author.name}` + (i + 1 < frontMatter.authors.length ? `,` : ``) + `</span>`}\n </span>\n `).join('')}\n </div>\n </div>\n <div >\n <h3>Affiliation</h3>\n <div><a href=\"https://huggingface.co/\">HuggingFace</a>\n </div>\n </div>\n <div >\n <h3>Published</h3>\n <div>May 31, 2024</div>\n </div>\n </div>\n`;\n }\n\n class Byline extends HTMLElement {\n\n static get is() { return 'd-byline'; }\n\n set frontMatter(frontMatter) {\n this.innerHTML = bylineTemplate(frontMatter);\n }\n\n }\n\n // Copyright 2018 The Distill Template Authors\n\n const T$3 = Template(\n \"d-cite\",\n `\n<style>\n\n:host {\n display: inline-block;\n}\n\n.citation {\n color: hsla(206, 90%, 20%, 0.7);\n}\n\n.citation-number {\n cursor: default;\n white-space: nowrap;\n font-family: -apple-system, BlinkMacSystemFont, \"Roboto\", Helvetica, sans-serif;\n font-size: 75%;\n color: hsla(206, 90%, 20%, 0.7);\n display: inline-block;\n line-height: 1.1em;\n text-align: center;\n position: relative;\n top: -2px;\n margin: 0 2px;\n}\n\nfigcaption .citation-number {\n font-size: 11px;\n font-weight: normal;\n top: -2px;\n line-height: 1em;\n}\n\nul {\n margin: 0;\n padding: 0;\n list-style-type: none;\n}\n\nul li {\n padding: 15px 10px 15px 10px;\n border-bottom: 1px solid rgba(0,0,0,0.1)\n}\n\nul li:last-of-type {\n border-bottom: none;\n}\n\n</style>\n\n<d-hover-box id=\"hover-box\"></d-hover-box>\n\n<div id=\"citation-\" class=\"citation\">\n <span class=\"citation-number\"></span>\n</div>\n`\n );\n\n class Cite extends T$3(HTMLElement) {\n /* Lifecycle */\n constructor() {\n super();\n this._numbers = [];\n this._entries = [];\n }\n\n connectedCallback() {\n this.outerSpan = this.root.querySelector(\"#citation-\");\n this.innerSpan = this.root.querySelector(\".citation-number\");\n this.hoverBox = this.root.querySelector(\"d-hover-box\");\n window.customElements.whenDefined(\"d-hover-box\").then(() => {\n this.hoverBox.listen(this);\n });\n // in case this component got connected after values were set\n if (this.numbers) {\n this.displayNumbers(this.numbers);\n }\n if (this.entries) {\n this.displayEntries(this.entries);\n }\n }\n\n //TODO This causes an infinite loop on firefox with polyfills.\n // This is only needed for interactive editing so no priority.\n // disconnectedCallback() {\n // const options = { detail: [this, this.keys], bubbles: true };\n // const event = new CustomEvent('onCiteKeyRemoved', options);\n // document.dispatchEvent(event);\n // }\n\n /* observe 'key' attribute */\n\n static get observedAttributes() {\n return [\"key\", \"bibtex-key\"];\n }\n\n attributeChangedCallback(name, oldValue, newValue) {\n const eventName = oldValue ? \"onCiteKeyChanged\" : \"onCiteKeyCreated\";\n const keys = newValue.split(\",\").map(k => k.trim());\n const options = { detail: [this, keys], bubbles: true };\n const event = new CustomEvent(eventName, options);\n document.dispatchEvent(event);\n }\n\n set key(value) {\n this.setAttribute(\"key\", value);\n }\n\n get key() {\n return this.getAttribute(\"key\") || this.getAttribute(\"bibtex-key\");\n }\n\n get keys() {\n const result = this.key.split(\",\");\n console.log(result);\n return result;\n }\n\n /* Setters & Rendering */\n\n set numbers(numbers) {\n this._numbers = numbers;\n this.displayNumbers(numbers);\n }\n\n get numbers() {\n return this._numbers;\n }\n\n displayNumbers(numbers) {\n if (!this.innerSpan) return;\n const numberStrings = numbers.map(index => {\n return index == -1 ? \"?\" : index + 1 + \"\";\n });\n const textContent = \"[\" + numberStrings.join(\", \") + \"]\";\n this.innerSpan.textContent = textContent;\n }\n\n set entries(entries) {\n this._entries = entries;\n this.displayEntries(entries);\n }\n\n get entries() {\n return this._entries;\n }\n\n displayEntries(entries) {\n if (!this.hoverBox) return;\n this.hoverBox.innerHTML = `<ul>\n ${entries\n .map(hover_cite)\n .map(html => `<li>${html}</li>`)\n .join(\"\\n\")}\n </ul>`;\n }\n }\n\n // Copyright 2018 The Distill Template Authors\n\n const styles$1 = `\nd-citation-list {\n contain: style;\n}\n\nd-citation-list .references {\n grid-column: text;\n}\n\nd-citation-list .references .title {\n font-weight: 500;\n}\n`;\n\n function renderCitationList(element, entries, dom=document) {\n if (entries.size > 0) {\n element.style.display = '';\n let list = element.querySelector('.references');\n if (list) {\n list.innerHTML = '';\n } else {\n const stylesTag = dom.createElement('style');\n stylesTag.innerHTML = styles$1;\n element.appendChild(stylesTag);\n\n const heading = dom.createElement('h3');\n heading.id = 'references';\n heading.textContent = 'References';\n element.appendChild(heading);\n\n list = dom.createElement('ol');\n list.id = 'references-list';\n list.className = 'references';\n element.appendChild(list);\n }\n\n for (const [key, entry] of entries) {\n const listItem = dom.createElement('li');\n listItem.id = key;\n listItem.innerHTML = bibliography_cite(entry);\n list.appendChild(listItem);\n }\n } else {\n element.style.display = 'none';\n }\n }\n\n class CitationList extends HTMLElement {\n\n static get is() { return 'd-citation-list'; }\n\n connectedCallback() {\n if (!this.hasAttribute('distill-prerendered')) {\n this.style.display = 'none';\n }\n }\n\n set citations(citations) {\n renderCitationList(this, citations);\n }\n\n }\n\n var prism = createCommonjsModule(function (module) {\n /* **********************************************\n Begin prism-core.js\n ********************************************** */\n\n var _self = (typeof window !== 'undefined')\n \t? window // if in browser\n \t: (\n \t\t(typeof WorkerGlobalScope !== 'undefined' && self instanceof WorkerGlobalScope)\n \t\t? self // if in worker\n \t\t: {} // if in node js\n \t);\n\n /**\n * Prism: Lightweight, robust, elegant syntax highlighting\n * MIT license http://www.opensource.org/licenses/mit-license.php/\n * @author Lea Verou http://lea.verou.me\n */\n\n var Prism = (function (_self){\n\n // Private helper vars\n var lang = /\\blang(?:uage)?-([\\w-]+)\\b/i;\n var uniqueId = 0;\n\n\n var _ = {\n \tmanual: _self.Prism && _self.Prism.manual,\n \tdisableWorkerMessageHandler: _self.Prism && _self.Prism.disableWorkerMessageHandler,\n \tutil: {\n \t\tencode: function encode(tokens) {\n \t\t\tif (tokens instanceof Token) {\n \t\t\t\treturn new Token(tokens.type, encode(tokens.content), tokens.alias);\n \t\t\t} else if (Array.isArray(tokens)) {\n \t\t\t\treturn tokens.map(encode);\n \t\t\t} else {\n \t\t\t\treturn tokens.replace(/&/g, '&').replace(/</g, '<').replace(/\\u00a0/g, ' ');\n \t\t\t}\n \t\t},\n\n \t\ttype: function (o) {\n \t\t\treturn Object.prototype.toString.call(o).slice(8, -1);\n \t\t},\n\n \t\tobjId: function (obj) {\n \t\t\tif (!obj['__id']) {\n \t\t\t\tObject.defineProperty(obj, '__id', { value: ++uniqueId });\n \t\t\t}\n \t\t\treturn obj['__id'];\n \t\t},\n\n \t\t// Deep clone a language definition (e.g. to extend it)\n \t\tclone: function deepClone(o, visited) {\n \t\t\tvar clone, id, type = _.util.type(o);\n \t\t\tvisited = visited || {};\n\n \t\t\tswitch (type) {\n \t\t\t\tcase 'Object':\n \t\t\t\t\tid = _.util.objId(o);\n \t\t\t\t\tif (visited[id]) {\n \t\t\t\t\t\treturn visited[id];\n \t\t\t\t\t}\n \t\t\t\t\tclone = {};\n \t\t\t\t\tvisited[id] = clone;\n\n \t\t\t\t\tfor (var key in o) {\n \t\t\t\t\t\tif (o.hasOwnProperty(key)) {\n \t\t\t\t\t\t\tclone[key] = deepClone(o[key], visited);\n \t\t\t\t\t\t}\n \t\t\t\t\t}\n\n \t\t\t\t\treturn clone;\n\n \t\t\t\tcase 'Array':\n \t\t\t\t\tid = _.util.objId(o);\n \t\t\t\t\tif (visited[id]) {\n \t\t\t\t\t\treturn visited[id];\n \t\t\t\t\t}\n \t\t\t\t\tclone = [];\n \t\t\t\t\tvisited[id] = clone;\n\n \t\t\t\t\to.forEach(function (v, i) {\n \t\t\t\t\t\tclone[i] = deepClone(v, visited);\n \t\t\t\t\t});\n\n \t\t\t\t\treturn clone;\n\n \t\t\t\tdefault:\n \t\t\t\t\treturn o;\n \t\t\t}\n \t\t},\n\n \t\t/**\n \t\t * Returns the Prism language of the given element set by a `language-xxxx` or `lang-xxxx` class.\n \t\t *\n \t\t * If no language is set for the element or the element is `null` or `undefined`, `none` will be returned.\n \t\t *\n \t\t * @param {Element} element\n \t\t * @returns {string}\n \t\t */\n \t\tgetLanguage: function (element) {\n \t\t\twhile (element && !lang.test(element.className)) {\n \t\t\t\telement = element.parentElement;\n \t\t\t}\n \t\t\tif (element) {\n \t\t\t\treturn (element.className.match(lang) || [, 'none'])[1].toLowerCase();\n \t\t\t}\n \t\t\treturn 'none';\n \t\t},\n\n \t\t/**\n \t\t * Returns the script element that is currently executing.\n \t\t *\n \t\t * This does __not__ work for line script element.\n \t\t *\n \t\t * @returns {HTMLScriptElement | null}\n \t\t */\n \t\tcurrentScript: function () {\n \t\t\tif (typeof document === 'undefined') {\n \t\t\t\treturn null;\n \t\t\t}\n \t\t\tif ('currentScript' in document) {\n \t\t\t\treturn document.currentScript;\n \t\t\t}\n\n \t\t\t// IE11 workaround\n \t\t\t// we'll get the src of the current script by parsing IE11's error stack trace\n \t\t\t// this will not work for inline scripts\n\n \t\t\ttry {\n \t\t\t\tthrow new Error();\n \t\t\t} catch (err) {\n \t\t\t\t// Get file src url from stack. Specifically works with the format of stack traces in IE.\n \t\t\t\t// A stack will look like this:\n \t\t\t\t//\n \t\t\t\t// Error\n \t\t\t\t// at _.util.currentScript (http://localhost/components/prism-core.js:119:5)\n \t\t\t\t// at Global code (http://localhost/components/prism-core.js:606:1)\n\n \t\t\t\tvar src = (/at [^(\\r\\n]*\\((.*):.+:.+\\)$/i.exec(err.stack) || [])[1];\n \t\t\t\tif (src) {\n \t\t\t\t\tvar scripts = document.getElementsByTagName('script');\n \t\t\t\t\tfor (var i in scripts) {\n \t\t\t\t\t\tif (scripts[i].src == src) {\n \t\t\t\t\t\t\treturn scripts[i];\n \t\t\t\t\t\t}\n \t\t\t\t\t}\n \t\t\t\t}\n \t\t\t\treturn null;\n \t\t\t}\n \t\t}\n \t},\n\n \tlanguages: {\n \t\textend: function (id, redef) {\n \t\t\tvar lang = _.util.clone(_.languages[id]);\n\n \t\t\tfor (var key in redef) {\n \t\t\t\tlang[key] = redef[key];\n \t\t\t}\n\n \t\t\treturn lang;\n \t\t},\n\n \t\t/**\n \t\t * Insert a token before another token in a language literal\n \t\t * As this needs to recreate the object (we cannot actually insert before keys in object literals),\n \t\t * we cannot just provide an object, we need an object and a key.\n \t\t * @param inside The key (or language id) of the parent\n \t\t * @param before The key to insert before.\n \t\t * @param insert Object with the key/value pairs to insert\n \t\t * @param root The object that contains `inside`. If equal to Prism.languages, it can be omitted.\n \t\t */\n \t\tinsertBefore: function (inside, before, insert, root) {\n \t\t\troot = root || _.languages;\n \t\t\tvar grammar = root[inside];\n \t\t\tvar ret = {};\n\n \t\t\tfor (var token in grammar) {\n \t\t\t\tif (grammar.hasOwnProperty(token)) {\n\n \t\t\t\t\tif (token == before) {\n \t\t\t\t\t\tfor (var newToken in insert) {\n \t\t\t\t\t\t\tif (insert.hasOwnProperty(newToken)) {\n \t\t\t\t\t\t\t\tret[newToken] = insert[newToken];\n \t\t\t\t\t\t\t}\n \t\t\t\t\t\t}\n \t\t\t\t\t}\n\n \t\t\t\t\t// Do not insert token which also occur in insert. See #1525\n \t\t\t\t\tif (!insert.hasOwnProperty(token)) {\n \t\t\t\t\t\tret[token] = grammar[token];\n \t\t\t\t\t}\n \t\t\t\t}\n \t\t\t}\n\n \t\t\tvar old = root[inside];\n \t\t\troot[inside] = ret;\n\n \t\t\t// Update references in other language definitions\n \t\t\t_.languages.DFS(_.languages, function(key, value) {\n \t\t\t\tif (value === old && key != inside) {\n \t\t\t\t\tthis[key] = ret;\n \t\t\t\t}\n \t\t\t});\n\n \t\t\treturn ret;\n \t\t},\n\n \t\t// Traverse a language definition with Depth First Search\n \t\tDFS: function DFS(o, callback, type, visited) {\n \t\t\tvisited = visited || {};\n\n \t\t\tvar objId = _.util.objId;\n\n \t\t\tfor (var i in o) {\n \t\t\t\tif (o.hasOwnProperty(i)) {\n \t\t\t\t\tcallback.call(o, i, o[i], type || i);\n\n \t\t\t\t\tvar property = o[i],\n \t\t\t\t\t propertyType = _.util.type(property);\n\n \t\t\t\t\tif (propertyType === 'Object' && !visited[objId(property)]) {\n \t\t\t\t\t\tvisited[objId(property)] = true;\n \t\t\t\t\t\tDFS(property, callback, null, visited);\n \t\t\t\t\t}\n \t\t\t\t\telse if (propertyType === 'Array' && !visited[objId(property)]) {\n \t\t\t\t\t\tvisited[objId(property)] = true;\n \t\t\t\t\t\tDFS(property, callback, i, visited);\n \t\t\t\t\t}\n \t\t\t\t}\n \t\t\t}\n \t\t}\n \t},\n \tplugins: {},\n\n \thighlightAll: function(async, callback) {\n \t\t_.highlightAllUnder(document, async, callback);\n \t},\n\n \thighlightAllUnder: function(container, async, callback) {\n \t\tvar env = {\n \t\t\tcallback: callback,\n \t\t\tcontainer: container,\n \t\t\tselector: 'code[class*=\"language-\"], [class*=\"language-\"] code, code[class*=\"lang-\"], [class*=\"lang-\"] code'\n \t\t};\n\n \t\t_.hooks.run('before-highlightall', env);\n\n \t\tenv.elements = Array.prototype.slice.apply(env.container.querySelectorAll(env.selector));\n\n \t\t_.hooks.run('before-all-elements-highlight', env);\n\n \t\tfor (var i = 0, element; element = env.elements[i++];) {\n \t\t\t_.highlightElement(element, async === true, env.callback);\n \t\t}\n \t},\n\n \thighlightElement: function(element, async, callback) {\n \t\t// Find language\n \t\tvar language = _.util.getLanguage(element);\n \t\tvar grammar = _.languages[language];\n\n \t\t// Set language on the element, if not present\n \t\telement.className = element.className.replace(lang, '').replace(/\\s+/g, ' ') + ' language-' + language;\n\n \t\t// Set language on the parent, for styling\n \t\tvar parent = element.parentNode;\n \t\tif (parent && parent.nodeName.toLowerCase() === 'pre') {\n \t\t\tparent.className = parent.className.replace(lang, '').replace(/\\s+/g, ' ') + ' language-' + language;\n \t\t}\n\n \t\tvar code = element.textContent;\n\n \t\tvar env = {\n \t\t\telement: element,\n \t\t\tlanguage: language,\n \t\t\tgrammar: grammar,\n \t\t\tcode: code\n \t\t};\n\n \t\tfunction insertHighlightedCode(highlightedCode) {\n \t\t\tenv.highlightedCode = highlightedCode;\n\n \t\t\t_.hooks.run('before-insert', env);\n\n \t\t\tenv.element.innerHTML = env.highlightedCode;\n\n \t\t\t_.hooks.run('after-highlight', env);\n \t\t\t_.hooks.run('complete', env);\n \t\t\tcallback && callback.call(env.element);\n \t\t}\n\n \t\t_.hooks.run('before-sanity-check', env);\n\n \t\tif (!env.code) {\n \t\t\t_.hooks.run('complete', env);\n \t\t\tcallback && callback.call(env.element);\n \t\t\treturn;\n \t\t}\n\n \t\t_.hooks.run('before-highlight', env);\n\n \t\tif (!env.grammar) {\n \t\t\tinsertHighlightedCode(_.util.encode(env.code));\n \t\t\treturn;\n \t\t}\n\n \t\tif (async && _self.Worker) {\n \t\t\tvar worker = new Worker(_.filename);\n\n \t\t\tworker.onmessage = function(evt) {\n \t\t\t\tinsertHighlightedCode(evt.data);\n \t\t\t};\n\n \t\t\tworker.postMessage(JSON.stringify({\n \t\t\t\tlanguage: env.language,\n \t\t\t\tcode: env.code,\n \t\t\t\timmediateClose: true\n \t\t\t}));\n \t\t}\n \t\telse {\n \t\t\tinsertHighlightedCode(_.highlight(env.code, env.grammar, env.language));\n \t\t}\n \t},\n\n \thighlight: function (text, grammar, language) {\n \t\tvar env = {\n \t\t\tcode: text,\n \t\t\tgrammar: grammar,\n \t\t\tlanguage: language\n \t\t};\n \t\t_.hooks.run('before-tokenize', env);\n \t\tenv.tokens = _.tokenize(env.code, env.grammar);\n \t\t_.hooks.run('after-tokenize', env);\n \t\treturn Token.stringify(_.util.encode(env.tokens), env.language);\n \t},\n\n \ttokenize: function(text, grammar) {\n \t\tvar rest = grammar.rest;\n \t\tif (rest) {\n \t\t\tfor (var token in rest) {\n \t\t\t\tgrammar[token] = rest[token];\n \t\t\t}\n\n \t\t\tdelete grammar.rest;\n \t\t}\n\n \t\tvar tokenList = new LinkedList();\n \t\taddAfter(tokenList, tokenList.head, text);\n\n \t\tmatchGrammar(text, tokenList, grammar, tokenList.head, 0);\n\n \t\treturn toArray(tokenList);\n \t},\n\n \thooks: {\n \t\tall: {},\n\n \t\tadd: function (name, callback) {\n \t\t\tvar hooks = _.hooks.all;\n\n \t\t\thooks[name] = hooks[name] || [];\n\n \t\t\thooks[name].push(callback);\n \t\t},\n\n \t\trun: function (name, env) {\n \t\t\tvar callbacks = _.hooks.all[name];\n\n \t\t\tif (!callbacks || !callbacks.length) {\n \t\t\t\treturn;\n \t\t\t}\n\n \t\t\tfor (var i=0, callback; callback = callbacks[i++];) {\n \t\t\t\tcallback(env);\n \t\t\t}\n \t\t}\n \t},\n\n \tToken: Token\n };\n\n _self.Prism = _;\n\n function Token(type, content, alias, matchedStr, greedy) {\n \tthis.type = type;\n \tthis.content = content;\n \tthis.alias = alias;\n \t// Copy of the full string this token was created from\n \tthis.length = (matchedStr || '').length|0;\n \tthis.greedy = !!greedy;\n }\n\n Token.stringify = function stringify(o, language) {\n \tif (typeof o == 'string') {\n \t\treturn o;\n \t}\n \tif (Array.isArray(o)) {\n \t\tvar s = '';\n \t\to.forEach(function (e) {\n \t\t\ts += stringify(e, language);\n \t\t});\n \t\treturn s;\n \t}\n\n \tvar env = {\n \t\ttype: o.type,\n \t\tcontent: stringify(o.content, language),\n \t\ttag: 'span',\n \t\tclasses: ['token', o.type],\n \t\tattributes: {},\n \t\tlanguage: language\n \t};\n\n \tvar aliases = o.alias;\n \tif (aliases) {\n \t\tif (Array.isArray(aliases)) {\n \t\t\tArray.prototype.push.apply(env.classes, aliases);\n \t\t} else {\n \t\t\tenv.classes.push(aliases);\n \t\t}\n \t}\n\n \t_.hooks.run('wrap', env);\n\n \tvar attributes = '';\n \tfor (var name in env.attributes) {\n \t\tattributes += ' ' + name + '=\"' + (env.attributes[name] || '').replace(/\"/g, '"') + '\"';\n \t}\n\n \treturn '<' + env.tag + ' class=\"' + env.classes.join(' ') + '\"' + attributes + '>' + env.content + '</' + env.tag + '>';\n };\n\n /**\n * @param {string} text\n * @param {LinkedList<string | Token>} tokenList\n * @param {any} grammar\n * @param {LinkedListNode<string | Token>} startNode\n * @param {number} startPos\n * @param {boolean} [oneshot=false]\n * @param {string} [target]\n */\n function matchGrammar(text, tokenList, grammar, startNode, startPos, oneshot, target) {\n \tfor (var token in grammar) {\n \t\tif (!grammar.hasOwnProperty(token) || !grammar[token]) {\n \t\t\tcontinue;\n \t\t}\n\n \t\tvar patterns = grammar[token];\n \t\tpatterns = Array.isArray(patterns) ? patterns : [patterns];\n\n \t\tfor (var j = 0; j < patterns.length; ++j) {\n \t\t\tif (target && target == token + ',' + j) {\n \t\t\t\treturn;\n \t\t\t}\n\n \t\t\tvar pattern = patterns[j],\n \t\t\t\tinside = pattern.inside,\n \t\t\t\tlookbehind = !!pattern.lookbehind,\n \t\t\t\tgreedy = !!pattern.greedy,\n \t\t\t\tlookbehindLength = 0,\n \t\t\t\talias = pattern.alias;\n\n \t\t\tif (greedy && !pattern.pattern.global) {\n \t\t\t\t// Without the global flag, lastIndex won't work\n \t\t\t\tvar flags = pattern.pattern.toString().match(/[imsuy]*$/)[0];\n \t\t\t\tpattern.pattern = RegExp(pattern.pattern.source, flags + 'g');\n \t\t\t}\n\n \t\t\tpattern = pattern.pattern || pattern;\n\n \t\t\tfor ( // iterate the token list and keep track of the current token/string position\n \t\t\t\tvar currentNode = startNode.next, pos = startPos;\n \t\t\t\tcurrentNode !== tokenList.tail;\n \t\t\t\tpos += currentNode.value.length, currentNode = currentNode.next\n \t\t\t) {\n\n \t\t\t\tvar str = currentNode.value;\n\n \t\t\t\tif (tokenList.length > text.length) {\n \t\t\t\t\t// Something went terribly wrong, ABORT, ABORT!\n \t\t\t\t\treturn;\n \t\t\t\t}\n\n \t\t\t\tif (str instanceof Token) {\n \t\t\t\t\tcontinue;\n \t\t\t\t}\n\n \t\t\t\tvar removeCount = 1; // this is the to parameter of removeBetween\n\n \t\t\t\tif (greedy && currentNode != tokenList.tail.prev) {\n \t\t\t\t\tpattern.lastIndex = pos;\n \t\t\t\t\tvar match = pattern.exec(text);\n \t\t\t\t\tif (!match) {\n \t\t\t\t\t\tbreak;\n \t\t\t\t\t}\n\n \t\t\t\t\tvar from = match.index + (lookbehind && match[1] ? match[1].length : 0);\n \t\t\t\t\tvar to = match.index + match[0].length;\n \t\t\t\t\tvar p = pos;\n\n \t\t\t\t\t// find the node that contains the match\n \t\t\t\t\tp += currentNode.value.length;\n \t\t\t\t\twhile (from >= p) {\n \t\t\t\t\t\tcurrentNode = currentNode.next;\n \t\t\t\t\t\tp += currentNode.value.length;\n \t\t\t\t\t}\n \t\t\t\t\t// adjust pos (and p)\n \t\t\t\t\tp -= currentNode.value.length;\n \t\t\t\t\tpos = p;\n\n \t\t\t\t\t// the current node is a Token, then the match starts inside another Token, which is invalid\n \t\t\t\t\tif (currentNode.value instanceof Token) {\n \t\t\t\t\t\tcontinue;\n \t\t\t\t\t}\n\n \t\t\t\t\t// find the last node which is affected by this match\n \t\t\t\t\tfor (\n \t\t\t\t\t\tvar k = currentNode;\n \t\t\t\t\t\tk !== tokenList.tail && (p < to || (typeof k.value === 'string' && !k.prev.value.greedy));\n \t\t\t\t\t\tk = k.next\n \t\t\t\t\t) {\n \t\t\t\t\t\tremoveCount++;\n \t\t\t\t\t\tp += k.value.length;\n \t\t\t\t\t}\n \t\t\t\t\tremoveCount--;\n\n \t\t\t\t\t// replace with the new match\n \t\t\t\t\tstr = text.slice(pos, p);\n \t\t\t\t\tmatch.index -= pos;\n \t\t\t\t} else {\n \t\t\t\t\tpattern.lastIndex = 0;\n\n \t\t\t\t\tvar match = pattern.exec(str);\n \t\t\t\t}\n\n \t\t\t\tif (!match) {\n \t\t\t\t\tif (oneshot) {\n \t\t\t\t\t\tbreak;\n \t\t\t\t\t}\n\n \t\t\t\t\tcontinue;\n \t\t\t\t}\n\n \t\t\t\tif (lookbehind) {\n \t\t\t\t\tlookbehindLength = match[1] ? match[1].length : 0;\n \t\t\t\t}\n\n \t\t\t\tvar from = match.index + lookbehindLength,\n \t\t\t\t\tmatch = match[0].slice(lookbehindLength),\n \t\t\t\t\tto = from + match.length,\n \t\t\t\t\tbefore = str.slice(0, from),\n \t\t\t\t\tafter = str.slice(to);\n\n \t\t\t\tvar removeFrom = currentNode.prev;\n\n \t\t\t\tif (before) {\n \t\t\t\t\tremoveFrom = addAfter(tokenList, removeFrom, before);\n \t\t\t\t\tpos += before.length;\n \t\t\t\t}\n\n \t\t\t\tremoveRange(tokenList, removeFrom, removeCount);\n\n \t\t\t\tvar wrapped = new Token(token, inside ? _.tokenize(match, inside) : match, alias, match, greedy);\n \t\t\t\tcurrentNode = addAfter(tokenList, removeFrom, wrapped);\n\n \t\t\t\tif (after) {\n \t\t\t\t\taddAfter(tokenList, currentNode, after);\n \t\t\t\t}\n\n\n \t\t\t\tif (removeCount > 1)\n \t\t\t\t\tmatchGrammar(text, tokenList, grammar, currentNode.prev, pos, true, token + ',' + j);\n\n \t\t\t\tif (oneshot)\n \t\t\t\t\tbreak;\n \t\t\t}\n \t\t}\n \t}\n }\n\n /**\n * @typedef LinkedListNode\n * @property {T} value\n * @property {LinkedListNode<T> | null} prev The previous node.\n * @property {LinkedListNode<T> | null} next The next node.\n * @template T\n */\n\n /**\n * @template T\n */\n function LinkedList() {\n \t/** @type {LinkedListNode<T>} */\n \tvar head = { value: null, prev: null, next: null };\n \t/** @type {LinkedListNode<T>} */\n \tvar tail = { value: null, prev: head, next: null };\n \thead.next = tail;\n\n \t/** @type {LinkedListNode<T>} */\n \tthis.head = head;\n \t/** @type {LinkedListNode<T>} */\n \tthis.tail = tail;\n \tthis.length = 0;\n }\n\n /**\n * Adds a new node with the given value to the list.\n * @param {LinkedList<T>} list\n * @param {LinkedListNode<T>} node\n * @param {T} value\n * @returns {LinkedListNode<T>} The added node.\n * @template T\n */\n function addAfter(list, node, value) {\n \t// assumes that node != list.tail && values.length >= 0\n \tvar next = node.next;\n\n \tvar newNode = { value: value, prev: node, next: next };\n \tnode.next = newNode;\n \tnext.prev = newNode;\n \tlist.length++;\n\n \treturn newNode;\n }\n /**\n * Removes `count` nodes after the given node. The given node will not be removed.\n * @param {LinkedList<T>} list\n * @param {LinkedListNode<T>} node\n * @param {number} count\n * @template T\n */\n function removeRange(list, node, count) {\n \tvar next = node.next;\n \tfor (var i = 0; i < count && next !== list.tail; i++) {\n \t\tnext = next.next;\n \t}\n \tnode.next = next;\n \tnext.prev = node;\n \tlist.length -= i;\n }\n /**\n * @param {LinkedList<T>} list\n * @returns {T[]}\n * @template T\n */\n function toArray(list) {\n \tvar array = [];\n \tvar node = list.head.next;\n \twhile (node !== list.tail) {\n \t\tarray.push(node.value);\n \t\tnode = node.next;\n \t}\n \treturn array;\n }\n\n\n if (!_self.document) {\n \tif (!_self.addEventListener) {\n \t\t// in Node.js\n \t\treturn _;\n \t}\n\n \tif (!_.disableWorkerMessageHandler) {\n \t\t// In worker\n \t\t_self.addEventListener('message', function (evt) {\n \t\t\tvar message = JSON.parse(evt.data),\n \t\t\t\tlang = message.language,\n \t\t\t\tcode = message.code,\n \t\t\t\timmediateClose = message.immediateClose;\n\n \t\t\t_self.postMessage(_.highlight(code, _.languages[lang], lang));\n \t\t\tif (immediateClose) {\n \t\t\t\t_self.close();\n \t\t\t}\n \t\t}, false);\n \t}\n\n \treturn _;\n }\n\n //Get current script and highlight\n var script = _.util.currentScript();\n\n if (script) {\n \t_.filename = script.src;\n\n \tif (script.hasAttribute('data-manual')) {\n \t\t_.manual = true;\n \t}\n }\n\n function highlightAutomaticallyCallback() {\n \tif (!_.manual) {\n \t\t_.highlightAll();\n \t}\n }\n\n if (!_.manual) {\n \t// If the document state is \"loading\", then we'll use DOMContentLoaded.\n \t// If the document state is \"interactive\" and the prism.js script is deferred, then we'll also use the\n \t// DOMContentLoaded event because there might be some plugins or languages which have also been deferred and they\n \t// might take longer one animation frame to execute which can create a race condition where only some plugins have\n \t// been loaded when Prism.highlightAll() is executed, depending on how fast resources are loaded.\n \t// See https://github.com/PrismJS/prism/issues/2102\n \tvar readyState = document.readyState;\n \tif (readyState === 'loading' || readyState === 'interactive' && script && script.defer) {\n \t\tdocument.addEventListener('DOMContentLoaded', highlightAutomaticallyCallback);\n \t} else {\n \t\tif (window.requestAnimationFrame) {\n \t\t\twindow.requestAnimationFrame(highlightAutomaticallyCallback);\n \t\t} else {\n \t\t\twindow.setTimeout(highlightAutomaticallyCallback, 16);\n \t\t}\n \t}\n }\n\n return _;\n\n })(_self);\n\n if ( module.exports) {\n \tmodule.exports = Prism;\n }\n\n // hack for components to work correctly in node.js\n if (typeof commonjsGlobal !== 'undefined') {\n \tcommonjsGlobal.Prism = Prism;\n }\n\n\n /* **********************************************\n Begin prism-markup.js\n ********************************************** */\n\n Prism.languages.markup = {\n \t'comment': /<!--[\\s\\S]*?-->/,\n \t'prolog': /<\\?[\\s\\S]+?\\?>/,\n \t'doctype': {\n \t\tpattern: /<!DOCTYPE(?:[^>\"'[\\]]|\"[^\"]*\"|'[^']*')+(?:\\[(?:(?!<!--)[^\"'\\]]|\"[^\"]*\"|'[^']*'|<!--[\\s\\S]*?-->)*\\]\\s*)?>/i,\n \t\tgreedy: true\n \t},\n \t'cdata': /<!\\[CDATA\\[[\\s\\S]*?]]>/i,\n \t'tag': {\n \t\tpattern: /<\\/?(?!\\d)[^\\s>\\/=$<%]+(?:\\s(?:\\s*[^\\s>\\/=]+(?:\\s*=\\s*(?:\"[^\"]*\"|'[^']*'|[^\\s'\">=]+(?=[\\s>]))|(?=[\\s/>])))+)?\\s*\\/?>/i,\n \t\tgreedy: true,\n \t\tinside: {\n \t\t\t'tag': {\n \t\t\t\tpattern: /^<\\/?[^\\s>\\/]+/i,\n \t\t\t\tinside: {\n \t\t\t\t\t'punctuation': /^<\\/?/,\n \t\t\t\t\t'namespace': /^[^\\s>\\/:]+:/\n \t\t\t\t}\n \t\t\t},\n \t\t\t'attr-value': {\n \t\t\t\tpattern: /=\\s*(?:\"[^\"]*\"|'[^']*'|[^\\s'\">=]+)/i,\n \t\t\t\tinside: {\n \t\t\t\t\t'punctuation': [\n \t\t\t\t\t\t/^=/,\n \t\t\t\t\t\t{\n \t\t\t\t\t\t\tpattern: /^(\\s*)[\"']|[\"']$/,\n \t\t\t\t\t\t\tlookbehind: true\n \t\t\t\t\t\t}\n \t\t\t\t\t]\n \t\t\t\t}\n \t\t\t},\n \t\t\t'punctuation': /\\/?>/,\n \t\t\t'attr-name': {\n \t\t\t\tpattern: /[^\\s>\\/]+/,\n \t\t\t\tinside: {\n \t\t\t\t\t'namespace': /^[^\\s>\\/:]+:/\n \t\t\t\t}\n \t\t\t}\n\n \t\t}\n \t},\n \t'entity': /&#?[\\da-z]{1,8};/i\n };\n\n Prism.languages.markup['tag'].inside['attr-value'].inside['entity'] =\n \tPrism.languages.markup['entity'];\n\n // Plugin to make entity title show the real entity, idea by Roman Komarov\n Prism.hooks.add('wrap', function(env) {\n\n \tif (env.type === 'entity') {\n \t\tenv.attributes['title'] = env.content.replace(/&/, '&');\n \t}\n });\n\n Object.defineProperty(Prism.languages.markup.tag, 'addInlined', {\n \t/**\n \t * Adds an inlined language to markup.\n \t *\n \t * An example of an inlined language is CSS with `<style>` tags.\n \t *\n \t * @param {string} tagName The name of the tag that contains the inlined language. This name will be treated as\n \t * case insensitive.\n \t * @param {string} lang The language key.\n \t * @example\n \t * addInlined('style', 'css');\n \t */\n \tvalue: function addInlined(tagName, lang) {\n \t\tvar includedCdataInside = {};\n \t\tincludedCdataInside['language-' + lang] = {\n \t\t\tpattern: /(^<!\\[CDATA\\[)[\\s\\S]+?(?=\\]\\]>$)/i,\n \t\t\tlookbehind: true,\n \t\t\tinside: Prism.languages[lang]\n \t\t};\n \t\tincludedCdataInside['cdata'] = /^<!\\[CDATA\\[|\\]\\]>$/i;\n\n \t\tvar inside = {\n \t\t\t'included-cdata': {\n \t\t\t\tpattern: /<!\\[CDATA\\[[\\s\\S]*?\\]\\]>/i,\n \t\t\t\tinside: includedCdataInside\n \t\t\t}\n \t\t};\n \t\tinside['language-' + lang] = {\n \t\t\tpattern: /[\\s\\S]+/,\n \t\t\tinside: Prism.languages[lang]\n \t\t};\n\n \t\tvar def = {};\n \t\tdef[tagName] = {\n \t\t\tpattern: RegExp(/(<__[\\s\\S]*?>)(?:<!\\[CDATA\\[[\\s\\S]*?\\]\\]>\\s*|[\\s\\S])*?(?=<\\/__>)/.source.replace(/__/g, function () { return tagName; }), 'i'),\n \t\t\tlookbehind: true,\n \t\t\tgreedy: true,\n \t\t\tinside: inside\n \t\t};\n\n \t\tPrism.languages.insertBefore('markup', 'cdata', def);\n \t}\n });\n\n Prism.languages.xml = Prism.languages.extend('markup', {});\n Prism.languages.html = Prism.languages.markup;\n Prism.languages.mathml = Prism.languages.markup;\n Prism.languages.svg = Prism.languages.markup;\n\n\n /* **********************************************\n Begin prism-css.js\n ********************************************** */\n\n (function (Prism) {\n\n \tvar string = /(\"|')(?:\\\\(?:\\r\\n|[\\s\\S])|(?!\\1)[^\\\\\\r\\n])*\\1/;\n\n \tPrism.languages.css = {\n \t\t'comment': /\\/\\*[\\s\\S]*?\\*\\//,\n \t\t'atrule': {\n \t\t\tpattern: /@[\\w-]+[\\s\\S]*?(?:;|(?=\\s*\\{))/,\n \t\t\tinside: {\n \t\t\t\t'rule': /^@[\\w-]+/,\n \t\t\t\t'selector-function-argument': {\n \t\t\t\t\tpattern: /(\\bselector\\s*\\((?!\\s*\\))\\s*)(?:[^()]|\\((?:[^()]|\\([^()]*\\))*\\))+?(?=\\s*\\))/,\n \t\t\t\t\tlookbehind: true,\n \t\t\t\t\talias: 'selector'\n \t\t\t\t}\n \t\t\t\t// See rest below\n \t\t\t}\n \t\t},\n \t\t'url': {\n \t\t\tpattern: RegExp('url\\\\((?:' + string.source + '|[^\\n\\r()]*)\\\\)', 'i'),\n \t\t\tgreedy: true,\n \t\t\tinside: {\n \t\t\t\t'function': /^url/i,\n \t\t\t\t'punctuation': /^\\(|\\)$/\n \t\t\t}\n \t\t},\n \t\t'selector': RegExp('[^{}\\\\s](?:[^{};\"\\']|' + string.source + ')*?(?=\\\\s*\\\\{)'),\n \t\t'string': {\n \t\t\tpattern: string,\n \t\t\tgreedy: true\n \t\t},\n \t\t'property': /[-_a-z\\xA0-\\uFFFF][-\\w\\xA0-\\uFFFF]*(?=\\s*:)/i,\n \t\t'important': /!important\\b/i,\n \t\t'function': /[-a-z0-9]+(?=\\()/i,\n \t\t'punctuation': /[(){};:,]/\n \t};\n\n \tPrism.languages.css['atrule'].inside.rest = Prism.languages.css;\n\n \tvar markup = Prism.languages.markup;\n \tif (markup) {\n \t\tmarkup.tag.addInlined('style', 'css');\n\n \t\tPrism.languages.insertBefore('inside', 'attr-value', {\n \t\t\t'style-attr': {\n \t\t\t\tpattern: /\\s*style=(\"|')(?:\\\\[\\s\\S]|(?!\\1)[^\\\\])*\\1/i,\n \t\t\t\tinside: {\n \t\t\t\t\t'attr-name': {\n \t\t\t\t\t\tpattern: /^\\s*style/i,\n \t\t\t\t\t\tinside: markup.tag.inside\n \t\t\t\t\t},\n \t\t\t\t\t'punctuation': /^\\s*=\\s*['\"]|['\"]\\s*$/,\n \t\t\t\t\t'attr-value': {\n \t\t\t\t\t\tpattern: /.+/i,\n \t\t\t\t\t\tinside: Prism.languages.css\n \t\t\t\t\t}\n \t\t\t\t},\n \t\t\t\talias: 'language-css'\n \t\t\t}\n \t\t}, markup.tag);\n \t}\n\n }(Prism));\n\n\n /* **********************************************\n Begin prism-clike.js\n ********************************************** */\n\n Prism.languages.clike = {\n \t'comment': [\n \t\t{\n \t\t\tpattern: /(^|[^\\\\])\\/\\*[\\s\\S]*?(?:\\*\\/|$)/,\n \t\t\tlookbehind: true\n \t\t},\n \t\t{\n \t\t\tpattern: /(^|[^\\\\:])\\/\\/.*/,\n \t\t\tlookbehind: true,\n \t\t\tgreedy: true\n \t\t}\n \t],\n \t'string': {\n \t\tpattern: /([\"'])(?:\\\\(?:\\r\\n|[\\s\\S])|(?!\\1)[^\\\\\\r\\n])*\\1/,\n \t\tgreedy: true\n \t},\n \t'class-name': {\n \t\tpattern: /(\\b(?:class|interface|extends|implements|trait|instanceof|new)\\s+|\\bcatch\\s+\\()[\\w.\\\\]+/i,\n \t\tlookbehind: true,\n \t\tinside: {\n \t\t\t'punctuation': /[.\\\\]/\n \t\t}\n \t},\n \t'keyword': /\\b(?:if|else|while|do|for|return|in|instanceof|function|new|try|throw|catch|finally|null|break|continue)\\b/,\n \t'boolean': /\\b(?:true|false)\\b/,\n \t'function': /\\w+(?=\\()/,\n \t'number': /\\b0x[\\da-f]+\\b|(?:\\b\\d+\\.?\\d*|\\B\\.\\d+)(?:e[+-]?\\d+)?/i,\n \t'operator': /[<>]=?|[!=]=?=?|--?|\\+\\+?|&&?|\\|\\|?|[?*/~^%]/,\n \t'punctuation': /[{}[\\];(),.:]/\n };\n\n\n /* **********************************************\n Begin prism-javascript.js\n ********************************************** */\n\n Prism.languages.javascript = Prism.languages.extend('clike', {\n \t'class-name': [\n \t\tPrism.languages.clike['class-name'],\n \t\t{\n \t\t\tpattern: /(^|[^$\\w\\xA0-\\uFFFF])[_$A-Z\\xA0-\\uFFFF][$\\w\\xA0-\\uFFFF]*(?=\\.(?:prototype|constructor))/,\n \t\t\tlookbehind: true\n \t\t}\n \t],\n \t'keyword': [\n \t\t{\n \t\t\tpattern: /((?:^|})\\s*)(?:catch|finally)\\b/,\n \t\t\tlookbehind: true\n \t\t},\n \t\t{\n \t\t\tpattern: /(^|[^.]|\\.\\.\\.\\s*)\\b(?:as|async(?=\\s*(?:function\\b|\\(|[$\\w\\xA0-\\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\\b/,\n \t\t\tlookbehind: true\n \t\t},\n \t],\n \t'number': /\\b(?:(?:0[xX](?:[\\dA-Fa-f](?:_[\\dA-Fa-f])?)+|0[bB](?:[01](?:_[01])?)+|0[oO](?:[0-7](?:_[0-7])?)+)n?|(?:\\d(?:_\\d)?)+n|NaN|Infinity)\\b|(?:\\b(?:\\d(?:_\\d)?)+\\.?(?:\\d(?:_\\d)?)*|\\B\\.(?:\\d(?:_\\d)?)+)(?:[Ee][+-]?(?:\\d(?:_\\d)?)+)?/,\n \t// Allow for all non-ASCII characters (See http://stackoverflow.com/a/2008444)\n \t'function': /#?[_$a-zA-Z\\xA0-\\uFFFF][$\\w\\xA0-\\uFFFF]*(?=\\s*(?:\\.\\s*(?:apply|bind|call)\\s*)?\\()/,\n \t'operator': /--|\\+\\+|\\*\\*=?|=>|&&|\\|\\||[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\\.{3}|\\?[.?]?|[~:]/\n });\n\n Prism.languages.javascript['class-name'][0].pattern = /(\\b(?:class|interface|extends|implements|instanceof|new)\\s+)[\\w.\\\\]+/;\n\n Prism.languages.insertBefore('javascript', 'keyword', {\n \t'regex': {\n \t\tpattern: /((?:^|[^$\\w\\xA0-\\uFFFF.\"'\\])\\s])\\s*)\\/(?:\\[(?:[^\\]\\\\\\r\\n]|\\\\.)*]|\\\\.|[^/\\\\\\[\\r\\n])+\\/[gimyus]{0,6}(?=(?:\\s|\\/\\*[\\s\\S]*?\\*\\/)*(?:$|[\\r\\n,.;:})\\]]|\\/\\/))/,\n \t\tlookbehind: true,\n \t\tgreedy: true\n \t},\n \t// This must be declared before keyword because we use \"function\" inside the look-forward\n \t'function-variable': {\n \t\tpattern: /#?[_$a-zA-Z\\xA0-\\uFFFF][$\\w\\xA0-\\uFFFF]*(?=\\s*[=:]\\s*(?:async\\s*)?(?:\\bfunction\\b|(?:\\((?:[^()]|\\([^()]*\\))*\\)|[_$a-zA-Z\\xA0-\\uFFFF][$\\w\\xA0-\\uFFFF]*)\\s*=>))/,\n \t\talias: 'function'\n \t},\n \t'parameter': [\n \t\t{\n \t\t\tpattern: /(function(?:\\s+[_$A-Za-z\\xA0-\\uFFFF][$\\w\\xA0-\\uFFFF]*)?\\s*\\(\\s*)(?!\\s)(?:[^()]|\\([^()]*\\))+?(?=\\s*\\))/,\n \t\t\tlookbehind: true,\n \t\t\tinside: Prism.languages.javascript\n \t\t},\n \t\t{\n \t\t\tpattern: /[_$a-z\\xA0-\\uFFFF][$\\w\\xA0-\\uFFFF]*(?=\\s*=>)/i,\n \t\t\tinside: Prism.languages.javascript\n \t\t},\n \t\t{\n \t\t\tpattern: /(\\(\\s*)(?!\\s)(?:[^()]|\\([^()]*\\))+?(?=\\s*\\)\\s*=>)/,\n \t\t\tlookbehind: true,\n \t\t\tinside: Prism.languages.javascript\n \t\t},\n \t\t{\n \t\t\tpattern: /((?:\\b|\\s|^)(?!(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)(?![$\\w\\xA0-\\uFFFF]))(?:[_$A-Za-z\\xA0-\\uFFFF][$\\w\\xA0-\\uFFFF]*\\s*)\\(\\s*)(?!\\s)(?:[^()]|\\([^()]*\\))+?(?=\\s*\\)\\s*\\{)/,\n \t\t\tlookbehind: true,\n \t\t\tinside: Prism.languages.javascript\n \t\t}\n \t],\n \t'constant': /\\b[A-Z](?:[A-Z_]|\\dx?)*\\b/\n });\n\n Prism.languages.insertBefore('javascript', 'string', {\n \t'template-string': {\n \t\tpattern: /`(?:\\\\[\\s\\S]|\\${(?:[^{}]|{(?:[^{}]|{[^}]*})*})+}|(?!\\${)[^\\\\`])*`/,\n \t\tgreedy: true,\n \t\tinside: {\n \t\t\t'template-punctuation': {\n \t\t\t\tpattern: /^`|`$/,\n \t\t\t\talias: 'string'\n \t\t\t},\n \t\t\t'interpolation': {\n \t\t\t\tpattern: /((?:^|[^\\\\])(?:\\\\{2})*)\\${(?:[^{}]|{(?:[^{}]|{[^}]*})*})+}/,\n \t\t\t\tlookbehind: true,\n \t\t\t\tinside: {\n \t\t\t\t\t'interpolation-punctuation': {\n \t\t\t\t\t\tpattern: /^\\${|}$/,\n \t\t\t\t\t\talias: 'punctuation'\n \t\t\t\t\t},\n \t\t\t\t\trest: Prism.languages.javascript\n \t\t\t\t}\n \t\t\t},\n \t\t\t'string': /[\\s\\S]+/\n \t\t}\n \t}\n });\n\n if (Prism.languages.markup) {\n \tPrism.languages.markup.tag.addInlined('script', 'javascript');\n }\n\n Prism.languages.js = Prism.languages.javascript;\n\n\n /* **********************************************\n Begin prism-file-highlight.js\n ********************************************** */\n\n (function () {\n \tif (typeof self === 'undefined' || !self.Prism || !self.document || !document.querySelector) {\n \t\treturn;\n \t}\n\n \t/**\n \t * @param {Element} [container=document]\n \t */\n \tself.Prism.fileHighlight = function(container) {\n \t\tcontainer = container || document;\n\n \t\tvar Extensions = {\n \t\t\t'js': 'javascript',\n \t\t\t'py': 'python',\n \t\t\t'rb': 'ruby',\n \t\t\t'ps1': 'powershell',\n \t\t\t'psm1': 'powershell',\n \t\t\t'sh': 'bash',\n \t\t\t'bat': 'batch',\n \t\t\t'h': 'c',\n \t\t\t'tex': 'latex'\n \t\t};\n\n \t\tArray.prototype.slice.call(container.querySelectorAll('pre[data-src]')).forEach(function (pre) {\n \t\t\t// ignore if already loaded\n \t\t\tif (pre.hasAttribute('data-src-loaded')) {\n \t\t\t\treturn;\n \t\t\t}\n\n \t\t\t// load current\n \t\t\tvar src = pre.getAttribute('data-src');\n\n \t\t\tvar language, parent = pre;\n \t\t\tvar lang = /\\blang(?:uage)?-([\\w-]+)\\b/i;\n \t\t\twhile (parent && !lang.test(parent.className)) {\n \t\t\t\tparent = parent.parentNode;\n \t\t\t}\n\n \t\t\tif (parent) {\n \t\t\t\tlanguage = (pre.className.match(lang) || [, ''])[1];\n \t\t\t}\n\n \t\t\tif (!language) {\n \t\t\t\tvar extension = (src.match(/\\.(\\w+)$/) || [, ''])[1];\n \t\t\t\tlanguage = Extensions[extension] || extension;\n \t\t\t}\n\n \t\t\tvar code = document.createElement('code');\n \t\t\tcode.className = 'language-' + language;\n\n \t\t\tpre.textContent = '';\n\n \t\t\tcode.textContent = 'Loading…';\n\n \t\t\tpre.appendChild(code);\n\n \t\t\tvar xhr = new XMLHttpRequest();\n\n \t\t\txhr.open('GET', src, true);\n\n \t\t\txhr.onreadystatechange = function () {\n \t\t\t\tif (xhr.readyState == 4) {\n\n \t\t\t\t\tif (xhr.status < 400 && xhr.responseText) {\n \t\t\t\t\t\tcode.textContent = xhr.responseText;\n\n \t\t\t\t\t\tPrism.highlightElement(code);\n \t\t\t\t\t\t// mark as loaded\n \t\t\t\t\t\tpre.setAttribute('data-src-loaded', '');\n \t\t\t\t\t}\n \t\t\t\t\telse if (xhr.status >= 400) {\n \t\t\t\t\t\tcode.textContent = '✖ Error ' + xhr.status + ' while fetching file: ' + xhr.statusText;\n \t\t\t\t\t}\n \t\t\t\t\telse {\n \t\t\t\t\t\tcode.textContent = '✖ Error: File does not exist or is empty';\n \t\t\t\t\t}\n \t\t\t\t}\n \t\t\t};\n\n \t\t\txhr.send(null);\n \t\t});\n \t};\n\n \tdocument.addEventListener('DOMContentLoaded', function () {\n \t\t// execute inside handler, for dropping Event as argument\n \t\tself.Prism.fileHighlight();\n \t});\n\n })();\n });\n\n Prism.languages.python = {\n \t'comment': {\n \t\tpattern: /(^|[^\\\\])#.*/,\n \t\tlookbehind: true\n \t},\n \t'string-interpolation': {\n \t\tpattern: /(?:f|rf|fr)(?:(\"\"\"|''')[\\s\\S]+?\\1|(\"|')(?:\\\\.|(?!\\2)[^\\\\\\r\\n])*\\2)/i,\n \t\tgreedy: true,\n \t\tinside: {\n \t\t\t'interpolation': {\n \t\t\t\t// \"{\" <expression> <optional \"!s\", \"!r\", or \"!a\"> <optional \":\" format specifier> \"}\"\n \t\t\t\tpattern: /((?:^|[^{])(?:{{)*){(?!{)(?:[^{}]|{(?!{)(?:[^{}]|{(?!{)(?:[^{}])+})+})+}/,\n \t\t\t\tlookbehind: true,\n \t\t\t\tinside: {\n \t\t\t\t\t'format-spec': {\n \t\t\t\t\t\tpattern: /(:)[^:(){}]+(?=}$)/,\n \t\t\t\t\t\tlookbehind: true\n \t\t\t\t\t},\n \t\t\t\t\t'conversion-option': {\n \t\t\t\t\t\tpattern: //,\n \t\t\t\t\t\talias: 'punctuation'\n \t\t\t\t\t},\n \t\t\t\t\trest: null\n \t\t\t\t}\n \t\t\t},\n \t\t\t'string': /[\\s\\S]+/\n \t\t}\n \t},\n \t'triple-quoted-string': {\n \t\tpattern: /(?:[rub]|rb|br)?(\"\"\"|''')[\\s\\S]+?\\1/i,\n \t\tgreedy: true,\n \t\talias: 'string'\n \t},\n \t'string': {\n \t\tpattern: /(?:[rub]|rb|br)?(\"|')(?:\\\\.|(?!\\1)[^\\\\\\r\\n])*\\1/i,\n \t\tgreedy: true\n \t},\n \t'function': {\n \t\tpattern: /((?:^|\\s)def[ \\t]+)[a-zA-Z_]\\w*(?=\\s*\\()/g,\n \t\tlookbehind: true\n \t},\n \t'class-name': {\n \t\tpattern: /(\\bclass\\s+)\\w+/i,\n \t\tlookbehind: true\n \t},\n \t'decorator': {\n \t\tpattern: /(^\\s*)@\\w+(?:\\.\\w+)*/im,\n \t\tlookbehind: true,\n \t\talias: ['annotation', 'punctuation'],\n \t\tinside: {\n \t\t\t'punctuation': /\\./\n \t\t}\n \t},\n \t'keyword': /\\b(?:and|as|assert|async|await|break|class|continue|def|del|elif|else|except|exec|finally|for|from|global|if|import|in|is|lambda|nonlocal|not|or|pass|print|raise|return|try|while|with|yield)\\b/,\n \t'builtin': /\\b(?:__import__|abs|all|any|apply|ascii|basestring|bin|bool|buffer|bytearray|bytes|callable|chr|classmethod|cmp|coerce|compile|complex|delattr|dict|dir|divmod|enumerate|eval|execfile|file|filter|float|format|frozenset|getattr|globals|hasattr|hash|help|hex|id|input|int|intern|isinstance|issubclass|iter|len|list|locals|long|map|max|memoryview|min|next|object|oct|open|ord|pow|property|range|raw_input|reduce|reload|repr|reversed|round|set|setattr|slice|sorted|staticmethod|str|sum|super|tuple|type|unichr|unicode|vars|xrange|zip)\\b/,\n \t'boolean': /\\b(?:True|False|None)\\b/,\n \t'number': /(?:\\b(?=\\d)|\\B(?=\\.))(?:0[bo])?(?:(?:\\d|0x[\\da-f])[\\da-f]*\\.?\\d*|\\.\\d+)(?:e[+-]?\\d+)?j?\\b/i,\n \t'operator': /[-+%=]=?|!=|\\*\\*?=?|\\/\\/?=?|<[<=>]?|>[=>]?|[&|^~]/,\n \t'punctuation': /[{}[\\];(),.:]/\n };\n\n Prism.languages.python['string-interpolation'].inside['interpolation'].inside.rest = Prism.languages.python;\n\n Prism.languages.py = Prism.languages.python;\n\n Prism.languages.clike = {\n \t'comment': [\n \t\t{\n \t\t\tpattern: /(^|[^\\\\])\\/\\*[\\s\\S]*?(?:\\*\\/|$)/,\n \t\t\tlookbehind: true\n \t\t},\n \t\t{\n \t\t\tpattern: /(^|[^\\\\:])\\/\\/.*/,\n \t\t\tlookbehind: true,\n \t\t\tgreedy: true\n \t\t}\n \t],\n \t'string': {\n \t\tpattern: /([\"'])(?:\\\\(?:\\r\\n|[\\s\\S])|(?!\\1)[^\\\\\\r\\n])*\\1/,\n \t\tgreedy: true\n \t},\n \t'class-name': {\n \t\tpattern: /(\\b(?:class|interface|extends|implements|trait|instanceof|new)\\s+|\\bcatch\\s+\\()[\\w.\\\\]+/i,\n \t\tlookbehind: true,\n \t\tinside: {\n \t\t\t'punctuation': /[.\\\\]/\n \t\t}\n \t},\n \t'keyword': /\\b(?:if|else|while|do|for|return|in|instanceof|function|new|try|throw|catch|finally|null|break|continue)\\b/,\n \t'boolean': /\\b(?:true|false)\\b/,\n \t'function': /\\w+(?=\\()/,\n \t'number': /\\b0x[\\da-f]+\\b|(?:\\b\\d+\\.?\\d*|\\B\\.\\d+)(?:e[+-]?\\d+)?/i,\n \t'operator': /[<>]=?|[!=]=?=?|--?|\\+\\+?|&&?|\\|\\|?|[?*/~^%]/,\n \t'punctuation': /[{}[\\];(),.:]/\n };\n\n Prism.languages.lua = {\n \t'comment': /^#!.+|--(?:\\[(=*)\\[[\\s\\S]*?\\]\\1\\]|.*)/m,\n \t// \\z may be used to skip the following space\n \t'string': {\n \t\tpattern: /([\"'])(?:(?!\\1)[^\\\\\\r\\n]|\\\\z(?:\\r\\n|\\s)|\\\\(?:\\r\\n|[\\s\\S]))*\\1|\\[(=*)\\[[\\s\\S]*?\\]\\2\\]/,\n \t\tgreedy: true\n \t},\n \t'number': /\\b0x[a-f\\d]+\\.?[a-f\\d]*(?:p[+-]?\\d+)?\\b|\\b\\d+(?:\\.\\B|\\.?\\d*(?:e[+-]?\\d+)?\\b)|\\B\\.\\d+(?:e[+-]?\\d+)?\\b/i,\n \t'keyword': /\\b(?:and|break|do|else|elseif|end|false|for|function|goto|if|in|local|nil|not|or|repeat|return|then|true|until|while)\\b/,\n \t'function': /(?!\\d)\\w+(?=\\s*(?:[({]))/,\n \t'operator': [\n \t\t/[-+*%^&|#]|\\/\\/?|<[<=]?|>[>=]?|[=~]=?/,\n \t\t{\n \t\t\t// Match \"..\" but don't break \"...\"\n \t\t\tpattern: /(^|[^.])\\.\\.(?!\\.)/,\n \t\t\tlookbehind: true\n \t\t}\n \t],\n \t'punctuation': /[\\[\\](){},;]|\\.+|:+/\n };\n\n (function(Prism) {\n \t// $ set | grep '^[A-Z][^[:space:]]*=' | cut -d= -f1 | tr '\\n' '|'\n \t// + LC_ALL, RANDOM, REPLY, SECONDS.\n \t// + make sure PS1..4 are here as they are not always set,\n \t// - some useless things.\n \tvar envVars = '\\\\b(?:BASH|BASHOPTS|BASH_ALIASES|BASH_ARGC|BASH_ARGV|BASH_CMDS|BASH_COMPLETION_COMPAT_DIR|BASH_LINENO|BASH_REMATCH|BASH_SOURCE|BASH_VERSINFO|BASH_VERSION|COLORTERM|COLUMNS|COMP_WORDBREAKS|DBUS_SESSION_BUS_ADDRESS|DEFAULTS_PATH|DESKTOP_SESSION|DIRSTACK|DISPLAY|EUID|GDMSESSION|GDM_LANG|GNOME_KEYRING_CONTROL|GNOME_KEYRING_PID|GPG_AGENT_INFO|GROUPS|HISTCONTROL|HISTFILE|HISTFILESIZE|HISTSIZE|HOME|HOSTNAME|HOSTTYPE|IFS|INSTANCE|JOB|LANG|LANGUAGE|LC_ADDRESS|LC_ALL|LC_IDENTIFICATION|LC_MEASUREMENT|LC_MONETARY|LC_NAME|LC_NUMERIC|LC_PAPER|LC_TELEPHONE|LC_TIME|LESSCLOSE|LESSOPEN|LINES|LOGNAME|LS_COLORS|MACHTYPE|MAILCHECK|MANDATORY_PATH|NO_AT_BRIDGE|OLDPWD|OPTERR|OPTIND|ORBIT_SOCKETDIR|OSTYPE|PAPERSIZE|PATH|PIPESTATUS|PPID|PS1|PS2|PS3|PS4|PWD|RANDOM|REPLY|SECONDS|SELINUX_INIT|SESSION|SESSIONTYPE|SESSION_MANAGER|SHELL|SHELLOPTS|SHLVL|SSH_AUTH_SOCK|TERM|UID|UPSTART_EVENTS|UPSTART_INSTANCE|UPSTART_JOB|UPSTART_SESSION|USER|WINDOWID|XAUTHORITY|XDG_CONFIG_DIRS|XDG_CURRENT_DESKTOP|XDG_DATA_DIRS|XDG_GREETER_DATA_DIR|XDG_MENU_PREFIX|XDG_RUNTIME_DIR|XDG_SEAT|XDG_SEAT_PATH|XDG_SESSION_DESKTOP|XDG_SESSION_ID|XDG_SESSION_PATH|XDG_SESSION_TYPE|XDG_VTNR|XMODIFIERS)\\\\b';\n \tvar insideString = {\n \t\t'environment': {\n \t\t\tpattern: RegExp(\"\\\\$\" + envVars),\n \t\t\talias: 'constant'\n \t\t},\n \t\t'variable': [\n \t\t\t// [0]: Arithmetic Environment\n \t\t\t{\n \t\t\t\tpattern: /\\$?\\(\\([\\s\\S]+?\\)\\)/,\n \t\t\t\tgreedy: true,\n \t\t\t\tinside: {\n \t\t\t\t\t// If there is a $ sign at the beginning highlight $(( and )) as variable\n \t\t\t\t\t'variable': [\n \t\t\t\t\t\t{\n \t\t\t\t\t\t\tpattern: /(^\\$\\(\\([\\s\\S]+)\\)\\)/,\n \t\t\t\t\t\t\tlookbehind: true\n \t\t\t\t\t\t},\n \t\t\t\t\t\t/^\\$\\(\\(/\n \t\t\t\t\t],\n \t\t\t\t\t'number': /\\b0x[\\dA-Fa-f]+\\b|(?:\\b\\d+\\.?\\d*|\\B\\.\\d+)(?:[Ee]-?\\d+)?/,\n \t\t\t\t\t// Operators according to https://www.gnu.org/software/bash/manual/bashref.html#Shell-Arithmetic\n \t\t\t\t\t'operator': /--?|-=|\\+\\+?|\\+=|!=?|~|\\*\\*?|\\*=|\\/=?|%=?|<<=?|>>=?|<=?|>=?|==?|&&?|&=|\\^=?|\\|\\|?|\\|=|\\?|:/,\n \t\t\t\t\t// If there is no $ sign at the beginning highlight (( and )) as punctuation\n \t\t\t\t\t'punctuation': /\\(\\(?|\\)\\)?|,|;/\n \t\t\t\t}\n \t\t\t},\n \t\t\t// [1]: Command Substitution\n \t\t\t{\n \t\t\t\tpattern: /\\$\\((?:\\([^)]+\\)|[^()])+\\)|`[^`]+`/,\n \t\t\t\tgreedy: true,\n \t\t\t\tinside: {\n \t\t\t\t\t'variable': /^\\$\\(|^`|\\)$|`$/\n \t\t\t\t}\n \t\t\t},\n \t\t\t// [2]: Brace expansion\n \t\t\t{\n \t\t\t\tpattern: /\\$\\{[^}]+\\}/,\n \t\t\t\tgreedy: true,\n \t\t\t\tinside: {\n \t\t\t\t\t'operator': /:[-=?+]?|[!\\/]|##?|%%?|\\^\\^?|,,?/,\n \t\t\t\t\t'punctuation': /[\\[\\]]/,\n \t\t\t\t\t'environment': {\n \t\t\t\t\t\tpattern: RegExp(\"(\\\\{)\" + envVars),\n \t\t\t\t\t\tlookbehind: true,\n \t\t\t\t\t\talias: 'constant'\n \t\t\t\t\t}\n \t\t\t\t}\n \t\t\t},\n \t\t\t/\\$(?:\\w+|[#?*!@$])/\n \t\t],\n \t\t// Escape sequences from echo and printf's manuals, and escaped quotes.\n \t\t'entity': /\\\\(?:[abceEfnrtv\\\\\"]|O?[0-7]{1,3}|x[0-9a-fA-F]{1,2}|u[0-9a-fA-F]{4}|U[0-9a-fA-F]{8})/\n \t};\n\n \tPrism.languages.bash = {\n \t\t'shebang': {\n \t\t\tpattern: /^#!\\s*\\/.*/,\n \t\t\talias: 'important'\n \t\t},\n \t\t'comment': {\n \t\t\tpattern: /(^|[^\"{\\\\$])#.*/,\n \t\t\tlookbehind: true\n \t\t},\n \t\t'function-name': [\n \t\t\t// a) function foo {\n \t\t\t// b) foo() {\n \t\t\t// c) function foo() {\n \t\t\t// but not “foo {”\n \t\t\t{\n \t\t\t\t// a) and c)\n \t\t\t\tpattern: /(\\bfunction\\s+)\\w+(?=(?:\\s*\\(?:\\s*\\))?\\s*\\{)/,\n \t\t\t\tlookbehind: true,\n \t\t\t\talias: 'function'\n \t\t\t},\n \t\t\t{\n \t\t\t\t// b)\n \t\t\t\tpattern: /\\b\\w+(?=\\s*\\(\\s*\\)\\s*\\{)/,\n \t\t\t\talias: 'function'\n \t\t\t}\n \t\t],\n \t\t// Highlight variable names as variables in for and select beginnings.\n \t\t'for-or-select': {\n \t\t\tpattern: /(\\b(?:for|select)\\s+)\\w+(?=\\s+in\\s)/,\n \t\t\talias: 'variable',\n \t\t\tlookbehind: true\n \t\t},\n \t\t// Highlight variable names as variables in the left-hand part\n \t\t// of assignments (“=” and “+=”).\n \t\t'assign-left': {\n \t\t\tpattern: /(^|[\\s;|&]|[<>]\\()\\w+(?=\\+?=)/,\n \t\t\tinside: {\n \t\t\t\t'environment': {\n \t\t\t\t\tpattern: RegExp(\"(^|[\\\\s;|&]|[<>]\\\\()\" + envVars),\n \t\t\t\t\tlookbehind: true,\n \t\t\t\t\talias: 'constant'\n \t\t\t\t}\n \t\t\t},\n \t\t\talias: 'variable',\n \t\t\tlookbehind: true\n \t\t},\n \t\t'string': [\n \t\t\t// Support for Here-documents https://en.wikipedia.org/wiki/Here_document\n \t\t\t{\n \t\t\t\tpattern: /((?:^|[^<])<<-?\\s*)(\\w+?)\\s*(?:\\r?\\n|\\r)[\\s\\S]*?(?:\\r?\\n|\\r)\\2/,\n \t\t\t\tlookbehind: true,\n \t\t\t\tgreedy: true,\n \t\t\t\tinside: insideString\n \t\t\t},\n \t\t\t// Here-document with quotes around the tag\n \t\t\t// → No expansion (so no “inside”).\n \t\t\t{\n \t\t\t\tpattern: /((?:^|[^<])<<-?\\s*)([\"'])(\\w+)\\2\\s*(?:\\r?\\n|\\r)[\\s\\S]*?(?:\\r?\\n|\\r)\\3/,\n \t\t\t\tlookbehind: true,\n \t\t\t\tgreedy: true\n \t\t\t},\n \t\t\t// “Normal” string\n \t\t\t{\n \t\t\t\tpattern: /(^|[^\\\\](?:\\\\\\\\)*)([\"'])(?:\\\\[\\s\\S]|\\$\\([^)]+\\)|`[^`]+`|(?!\\2)[^\\\\])*\\2/,\n \t\t\t\tlookbehind: true,\n \t\t\t\tgreedy: true,\n \t\t\t\tinside: insideString\n \t\t\t}\n \t\t],\n \t\t'environment': {\n \t\t\tpattern: RegExp(\"\\\\$?\" + envVars),\n \t\t\talias: 'constant'\n \t\t},\n \t\t'variable': insideString.variable,\n \t\t'function': {\n \t\t\tpattern: /(^|[\\s;|&]|[<>]\\()(?:add|apropos|apt|aptitude|apt-cache|apt-get|aspell|automysqlbackup|awk|basename|bash|bc|bconsole|bg|bzip2|cal|cat|cfdisk|chgrp|chkconfig|chmod|chown|chroot|cksum|clear|cmp|column|comm|cp|cron|crontab|csplit|curl|cut|date|dc|dd|ddrescue|debootstrap|df|diff|diff3|dig|dir|dircolors|dirname|dirs|dmesg|du|egrep|eject|env|ethtool|expand|expect|expr|fdformat|fdisk|fg|fgrep|file|find|fmt|fold|format|free|fsck|ftp|fuser|gawk|git|gparted|grep|groupadd|groupdel|groupmod|groups|grub-mkconfig|gzip|halt|head|hg|history|host|hostname|htop|iconv|id|ifconfig|ifdown|ifup|import|install|ip|jobs|join|kill|killall|less|link|ln|locate|logname|logrotate|look|lpc|lpr|lprint|lprintd|lprintq|lprm|ls|lsof|lynx|make|man|mc|mdadm|mkconfig|mkdir|mke2fs|mkfifo|mkfs|mkisofs|mknod|mkswap|mmv|more|most|mount|mtools|mtr|mutt|mv|nano|nc|netstat|nice|nl|nohup|notify-send|npm|nslookup|op|open|parted|passwd|paste|pathchk|ping|pkill|pnpm|popd|pr|printcap|printenv|ps|pushd|pv|quota|quotacheck|quotactl|ram|rar|rcp|reboot|remsync|rename|renice|rev|rm|rmdir|rpm|rsync|scp|screen|sdiff|sed|sendmail|seq|service|sftp|sh|shellcheck|shuf|shutdown|sleep|slocate|sort|split|ssh|stat|strace|su|sudo|sum|suspend|swapon|sync|tac|tail|tar|tee|time|timeout|top|touch|tr|traceroute|tsort|tty|umount|uname|unexpand|uniq|units|unrar|unshar|unzip|update-grub|uptime|useradd|userdel|usermod|users|uudecode|uuencode|v|vdir|vi|vim|virsh|vmstat|wait|watch|wc|wget|whereis|which|who|whoami|write|xargs|xdg-open|yarn|yes|zenity|zip|zsh|zypper)(?=$|[)\\s;|&])/,\n \t\t\tlookbehind: true\n \t\t},\n \t\t'keyword': {\n \t\t\tpattern: /(^|[\\s;|&]|[<>]\\()(?:if|then|else|elif|fi|for|while|in|case|esac|function|select|do|done|until)(?=$|[)\\s;|&])/,\n \t\t\tlookbehind: true\n \t\t},\n \t\t// https://www.gnu.org/software/bash/manual/html_node/Shell-Builtin-Commands.html\n \t\t'builtin': {\n \t\t\tpattern: /(^|[\\s;|&]|[<>]\\()(?:\\.|:|break|cd|continue|eval|exec|exit|export|getopts|hash|pwd|readonly|return|shift|test|times|trap|umask|unset|alias|bind|builtin|caller|command|declare|echo|enable|help|let|local|logout|mapfile|printf|read|readarray|source|type|typeset|ulimit|unalias|set|shopt)(?=$|[)\\s;|&])/,\n \t\t\tlookbehind: true,\n \t\t\t// Alias added to make those easier to distinguish from strings.\n \t\t\talias: 'class-name'\n \t\t},\n \t\t'boolean': {\n \t\t\tpattern: /(^|[\\s;|&]|[<>]\\()(?:true|false)(?=$|[)\\s;|&])/,\n \t\t\tlookbehind: true\n \t\t},\n \t\t'file-descriptor': {\n \t\t\tpattern: /\\B&\\d\\b/,\n \t\t\talias: 'important'\n \t\t},\n \t\t'operator': {\n \t\t\t// Lots of redirections here, but not just that.\n \t\t\tpattern: /\\d?<>|>\\||\\+=|==?|!=?|=~|<<[<-]?|[&\\d]?>>|\\d?[<>]&?|&[>&]?|\\|[&|]?|<=?|>=?/,\n \t\t\tinside: {\n \t\t\t\t'file-descriptor': {\n \t\t\t\t\tpattern: /^\\d/,\n \t\t\t\t\talias: 'important'\n \t\t\t\t}\n \t\t\t}\n \t\t},\n \t\t'punctuation': /\\$?\\(\\(?|\\)\\)?|\\.\\.|[{}[\\];\\\\]/,\n \t\t'number': {\n \t\t\tpattern: /(^|\\s)(?:[1-9]\\d*|0)(?:[.,]\\d+)?\\b/,\n \t\t\tlookbehind: true\n \t\t}\n \t};\n\n \t/* Patterns in command substitution. */\n \tvar toBeCopied = [\n \t\t'comment',\n \t\t'function-name',\n \t\t'for-or-select',\n \t\t'assign-left',\n \t\t'string',\n \t\t'environment',\n \t\t'function',\n \t\t'keyword',\n \t\t'builtin',\n \t\t'boolean',\n \t\t'file-descriptor',\n \t\t'operator',\n \t\t'punctuation',\n \t\t'number'\n \t];\n \tvar inside = insideString.variable[1].inside;\n \tfor(var i = 0; i < toBeCopied.length; i++) {\n \t\tinside[toBeCopied[i]] = Prism.languages.bash[toBeCopied[i]];\n \t}\n\n \tPrism.languages.shell = Prism.languages.bash;\n })(Prism);\n\n Prism.languages.go = Prism.languages.extend('clike', {\n \t'keyword': /\\b(?:break|case|chan|const|continue|default|defer|else|fallthrough|for|func|go(?:to)?|if|import|interface|map|package|range|return|select|struct|switch|type|var)\\b/,\n \t'builtin': /\\b(?:bool|byte|complex(?:64|128)|error|float(?:32|64)|rune|string|u?int(?:8|16|32|64)?|uintptr|append|cap|close|complex|copy|delete|imag|len|make|new|panic|print(?:ln)?|real|recover)\\b/,\n \t'boolean': /\\b(?:_|iota|nil|true|false)\\b/,\n \t'operator': /[*\\/%^!=]=?|\\+[=+]?|-[=-]?|\\|[=|]?|&(?:=|&|\\^=?)?|>(?:>=?|=)?|<(?:<=?|=|-)?|:=|\\.\\.\\./,\n \t'number': /(?:\\b0x[a-f\\d]+|(?:\\b\\d+\\.?\\d*|\\B\\.\\d+)(?:e[-+]?\\d+)?)i?/i,\n \t'string': {\n \t\tpattern: /([\"'`])(?:\\\\[\\s\\S]|(?!\\1)[^\\\\])*\\1/,\n \t\tgreedy: true\n \t}\n });\n delete Prism.languages.go['class-name'];\n\n (function (Prism) {\n\n \t// Allow only one line break\n \tvar inner = /(?:\\\\.|[^\\\\\\n\\r]|(?:\\n|\\r\\n?)(?!\\n|\\r\\n?))/.source;\n\n \t/**\n \t * This function is intended for the creation of the bold or italic pattern.\n \t *\n \t * This also adds a lookbehind group to the given pattern to ensure that the pattern is not backslash-escaped.\n \t *\n \t * _Note:_ Keep in mind that this adds a capturing group.\n \t *\n \t * @param {string} pattern\n \t * @param {boolean} starAlternative Whether to also add an alternative where all `_`s are replaced with `*`s.\n \t * @returns {RegExp}\n \t */\n \tfunction createInline(pattern, starAlternative) {\n \t\tpattern = pattern.replace(/<inner>/g, function () { return inner; });\n \t\tif (starAlternative) {\n \t\t\tpattern = pattern + '|' + pattern.replace(/_/g, '\\\\*');\n \t\t}\n \t\treturn RegExp(/((?:^|[^\\\\])(?:\\\\{2})*)/.source + '(?:' + pattern + ')');\n \t}\n\n\n \tvar tableCell = /(?:\\\\.|``.+?``|`[^`\\r\\n]+`|[^\\\\|\\r\\n`])+/.source;\n \tvar tableRow = /\\|?__(?:\\|__)+\\|?(?:(?:\\n|\\r\\n?)|$)/.source.replace(/__/g, function () { return tableCell; });\n \tvar tableLine = /\\|?[ \\t]*:?-{3,}:?[ \\t]*(?:\\|[ \\t]*:?-{3,}:?[ \\t]*)+\\|?(?:\\n|\\r\\n?)/.source;\n\n\n \tPrism.languages.markdown = Prism.languages.extend('markup', {});\n \tPrism.languages.insertBefore('markdown', 'prolog', {\n \t\t'blockquote': {\n \t\t\t// > ...\n \t\t\tpattern: /^>(?:[\\t ]*>)*/m,\n \t\t\talias: 'punctuation'\n \t\t},\n \t\t'table': {\n \t\t\tpattern: RegExp('^' + tableRow + tableLine + '(?:' + tableRow + ')*', 'm'),\n \t\t\tinside: {\n \t\t\t\t'table-data-rows': {\n \t\t\t\t\tpattern: RegExp('^(' + tableRow + tableLine + ')(?:' + tableRow + ')*$'),\n \t\t\t\t\tlookbehind: true,\n \t\t\t\t\tinside: {\n \t\t\t\t\t\t'table-data': {\n \t\t\t\t\t\t\tpattern: RegExp(tableCell),\n \t\t\t\t\t\t\tinside: Prism.languages.markdown\n \t\t\t\t\t\t},\n \t\t\t\t\t\t'punctuation': /\\|/\n \t\t\t\t\t}\n \t\t\t\t},\n \t\t\t\t'table-line': {\n \t\t\t\t\tpattern: RegExp('^(' + tableRow + ')' + tableLine + '$'),\n \t\t\t\t\tlookbehind: true,\n \t\t\t\t\tinside: {\n \t\t\t\t\t\t'punctuation': /\\||:?-{3,}:?/\n \t\t\t\t\t}\n \t\t\t\t},\n \t\t\t\t'table-header-row': {\n \t\t\t\t\tpattern: RegExp('^' + tableRow + '$'),\n \t\t\t\t\tinside: {\n \t\t\t\t\t\t'table-header': {\n \t\t\t\t\t\t\tpattern: RegExp(tableCell),\n \t\t\t\t\t\t\talias: 'important',\n \t\t\t\t\t\t\tinside: Prism.languages.markdown\n \t\t\t\t\t\t},\n \t\t\t\t\t\t'punctuation': /\\|/\n \t\t\t\t\t}\n \t\t\t\t}\n \t\t\t}\n \t\t},\n \t\t'code': [\n \t\t\t{\n \t\t\t\t// Prefixed by 4 spaces or 1 tab and preceded by an empty line\n \t\t\t\tpattern: /((?:^|\\n)[ \\t]*\\n|(?:^|\\r\\n?)[ \\t]*\\r\\n?)(?: {4}|\\t).+(?:(?:\\n|\\r\\n?)(?: {4}|\\t).+)*/,\n \t\t\t\tlookbehind: true,\n \t\t\t\talias: 'keyword'\n \t\t\t},\n \t\t\t{\n \t\t\t\t// `code`\n \t\t\t\t// ``code``\n \t\t\t\tpattern: /``.+?``|`[^`\\r\\n]+`/,\n \t\t\t\talias: 'keyword'\n \t\t\t},\n \t\t\t{\n \t\t\t\t// ```optional language\n \t\t\t\t// code block\n \t\t\t\t// ```\n \t\t\t\tpattern: /^```[\\s\\S]*?^```$/m,\n \t\t\t\tgreedy: true,\n \t\t\t\tinside: {\n \t\t\t\t\t'code-block': {\n \t\t\t\t\t\tpattern: /^(```.*(?:\\n|\\r\\n?))[\\s\\S]+?(?=(?:\\n|\\r\\n?)^```$)/m,\n \t\t\t\t\t\tlookbehind: true\n \t\t\t\t\t},\n \t\t\t\t\t'code-language': {\n \t\t\t\t\t\tpattern: /^(```).+/,\n \t\t\t\t\t\tlookbehind: true\n \t\t\t\t\t},\n \t\t\t\t\t'punctuation': /```/\n \t\t\t\t}\n \t\t\t}\n \t\t],\n \t\t'title': [\n \t\t\t{\n \t\t\t\t// title 1\n \t\t\t\t// =======\n\n \t\t\t\t// title 2\n \t\t\t\t// -------\n \t\t\t\tpattern: /\\S.*(?:\\n|\\r\\n?)(?:==+|--+)(?=[ \\t]*$)/m,\n \t\t\t\talias: 'important',\n \t\t\t\tinside: {\n \t\t\t\t\tpunctuation: /==+$|--+$/\n \t\t\t\t}\n \t\t\t},\n \t\t\t{\n \t\t\t\t// # title 1\n \t\t\t\t// ###### title 6\n \t\t\t\tpattern: /(^\\s*)#+.+/m,\n \t\t\t\tlookbehind: true,\n \t\t\t\talias: 'important',\n \t\t\t\tinside: {\n \t\t\t\t\tpunctuation: /^#+|#+$/\n \t\t\t\t}\n \t\t\t}\n \t\t],\n \t\t'hr': {\n \t\t\t// ***\n \t\t\t// ---\n \t\t\t// * * *\n \t\t\t// -----------\n \t\t\tpattern: /(^\\s*)([*-])(?:[\\t ]*\\2){2,}(?=\\s*$)/m,\n \t\t\tlookbehind: true,\n \t\t\talias: 'punctuation'\n \t\t},\n \t\t'list': {\n \t\t\t// * item\n \t\t\t// + item\n \t\t\t// - item\n \t\t\t// 1. item\n \t\t\tpattern: /(^\\s*)(?:[*+-]|\\d+\\.)(?=[\\t ].)/m,\n \t\t\tlookbehind: true,\n \t\t\talias: 'punctuation'\n \t\t},\n \t\t'url-reference': {\n \t\t\t// [id]: http://example.com \"Optional title\"\n \t\t\t// [id]: http://example.com 'Optional title'\n \t\t\t// [id]: http://example.com (Optional title)\n \t\t\t// [id]: <http://example.com> \"Optional title\"\n \t\t\tpattern: /!?\\[[^\\]]+\\]:[\\t ]+(?:\\S+|<(?:\\\\.|[^>\\\\])+>)(?:[\\t ]+(?:\"(?:\\\\.|[^\"\\\\])*\"|'(?:\\\\.|[^'\\\\])*'|\\((?:\\\\.|[^)\\\\])*\\)))?/,\n \t\t\tinside: {\n \t\t\t\t'variable': {\n \t\t\t\t\tpattern: /^(!?\\[)[^\\]]+/,\n \t\t\t\t\tlookbehind: true\n \t\t\t\t},\n \t\t\t\t'string': /(?:\"(?:\\\\.|[^\"\\\\])*\"|'(?:\\\\.|[^'\\\\])*'|\\((?:\\\\.|[^)\\\\])*\\))$/,\n \t\t\t\t'punctuation': /^[\\[\\]!:]|[<>]/\n \t\t\t},\n \t\t\talias: 'url'\n \t\t},\n \t\t'bold': {\n \t\t\t// **strong**\n \t\t\t// __strong__\n\n \t\t\t// allow one nested instance of italic text using the same delimiter\n \t\t\tpattern: createInline(/__(?:(?!_)<inner>|_(?:(?!_)<inner>)+_)+__/.source, true),\n \t\t\tlookbehind: true,\n \t\t\tgreedy: true,\n \t\t\tinside: {\n \t\t\t\t'content': {\n \t\t\t\t\tpattern: /(^..)[\\s\\S]+(?=..$)/,\n \t\t\t\t\tlookbehind: true,\n \t\t\t\t\tinside: {} // see below\n \t\t\t\t},\n \t\t\t\t'punctuation': /\\*\\*|__/\n \t\t\t}\n \t\t},\n \t\t'italic': {\n \t\t\t// *em*\n \t\t\t// _em_\n\n \t\t\t// allow one nested instance of bold text using the same delimiter\n \t\t\tpattern: createInline(/_(?:(?!_)<inner>|__(?:(?!_)<inner>)+__)+_/.source, true),\n \t\t\tlookbehind: true,\n \t\t\tgreedy: true,\n \t\t\tinside: {\n \t\t\t\t'content': {\n \t\t\t\t\tpattern: /(^.)[\\s\\S]+(?=.$)/,\n \t\t\t\t\tlookbehind: true,\n \t\t\t\t\tinside: {} // see below\n \t\t\t\t},\n \t\t\t\t'punctuation': /[*_]/\n \t\t\t}\n \t\t},\n \t\t'strike': {\n \t\t\t// ~~strike through~~\n \t\t\t// ~strike~\n \t\t\tpattern: createInline(/(~~?)(?:(?!~)<inner>)+?\\2/.source, false),\n \t\t\tlookbehind: true,\n \t\t\tgreedy: true,\n \t\t\tinside: {\n \t\t\t\t'content': {\n \t\t\t\t\tpattern: /(^~~?)[\\s\\S]+(?=\\1$)/,\n \t\t\t\t\tlookbehind: true,\n \t\t\t\t\tinside: {} // see below\n \t\t\t\t},\n \t\t\t\t'punctuation': /~~?/\n \t\t\t}\n \t\t},\n \t\t'url': {\n \t\t\t// [example](http://example.com \"Optional title\")\n \t\t\t// [example][id]\n \t\t\t// [example] [id]\n \t\t\tpattern: createInline(/!?\\[(?:(?!\\])<inner>)+\\](?:\\([^\\s)]+(?:[\\t ]+\"(?:\\\\.|[^\"\\\\])*\")?\\)| ?\\[(?:(?!\\])<inner>)+\\])/.source, false),\n \t\t\tlookbehind: true,\n \t\t\tgreedy: true,\n \t\t\tinside: {\n \t\t\t\t'variable': {\n \t\t\t\t\tpattern: /(\\[)[^\\]]+(?=\\]$)/,\n \t\t\t\t\tlookbehind: true\n \t\t\t\t},\n \t\t\t\t'content': {\n \t\t\t\t\tpattern: /(^!?\\[)[^\\]]+(?=\\])/,\n \t\t\t\t\tlookbehind: true,\n \t\t\t\t\tinside: {} // see below\n \t\t\t\t},\n \t\t\t\t'string': {\n \t\t\t\t\tpattern: /\"(?:\\\\.|[^\"\\\\])*\"(?=\\)$)/\n \t\t\t\t}\n \t\t\t}\n \t\t}\n \t});\n\n \t['url', 'bold', 'italic', 'strike'].forEach(function (token) {\n \t\t['url', 'bold', 'italic', 'strike'].forEach(function (inside) {\n \t\t\tif (token !== inside) {\n \t\t\t\tPrism.languages.markdown[token].inside.content.inside[inside] = Prism.languages.markdown[inside];\n \t\t\t}\n \t\t});\n \t});\n\n \tPrism.hooks.add('after-tokenize', function (env) {\n \t\tif (env.language !== 'markdown' && env.language !== 'md') {\n \t\t\treturn;\n \t\t}\n\n \t\tfunction walkTokens(tokens) {\n \t\t\tif (!tokens || typeof tokens === 'string') {\n \t\t\t\treturn;\n \t\t\t}\n\n \t\t\tfor (var i = 0, l = tokens.length; i < l; i++) {\n \t\t\t\tvar token = tokens[i];\n\n \t\t\t\tif (token.type !== 'code') {\n \t\t\t\t\twalkTokens(token.content);\n \t\t\t\t\tcontinue;\n \t\t\t\t}\n\n \t\t\t\t/*\n \t\t\t\t * Add the correct `language-xxxx` class to this code block. Keep in mind that the `code-language` token\n \t\t\t\t * is optional. But the grammar is defined so that there is only one case we have to handle:\n \t\t\t\t *\n \t\t\t\t * token.content = [\n \t\t\t\t * <span class=\"punctuation\">```</span>,\n \t\t\t\t * <span class=\"code-language\">xxxx</span>,\n \t\t\t\t * '\\n', // exactly one new lines (\\r or \\n or \\r\\n)\n \t\t\t\t * <span class=\"code-block\">...</span>,\n \t\t\t\t * '\\n', // exactly one new lines again\n \t\t\t\t * <span class=\"punctuation\">```</span>\n \t\t\t\t * ];\n \t\t\t\t */\n\n \t\t\t\tvar codeLang = token.content[1];\n \t\t\t\tvar codeBlock = token.content[3];\n\n \t\t\t\tif (codeLang && codeBlock &&\n \t\t\t\t\tcodeLang.type === 'code-language' && codeBlock.type === 'code-block' &&\n \t\t\t\t\ttypeof codeLang.content === 'string') {\n\n \t\t\t\t\t// this might be a language that Prism does not support\n\n \t\t\t\t\t// do some replacements to support C++, C#, and F#\n \t\t\t\t\tvar lang = codeLang.content.replace(/\\b#/g, 'sharp').replace(/\\b\\+\\+/g, 'pp');\n \t\t\t\t\t// only use the first word\n \t\t\t\t\tlang = (/[a-z][\\w-]*/i.exec(lang) || [''])[0].toLowerCase();\n \t\t\t\t\tvar alias = 'language-' + lang;\n\n \t\t\t\t\t// add alias\n \t\t\t\t\tif (!codeBlock.alias) {\n \t\t\t\t\t\tcodeBlock.alias = [alias];\n \t\t\t\t\t} else if (typeof codeBlock.alias === 'string') {\n \t\t\t\t\t\tcodeBlock.alias = [codeBlock.alias, alias];\n \t\t\t\t\t} else {\n \t\t\t\t\t\tcodeBlock.alias.push(alias);\n \t\t\t\t\t}\n \t\t\t\t}\n \t\t\t}\n \t\t}\n\n \t\twalkTokens(env.tokens);\n \t});\n\n \tPrism.hooks.add('wrap', function (env) {\n \t\tif (env.type !== 'code-block') {\n \t\t\treturn;\n \t\t}\n\n \t\tvar codeLang = '';\n \t\tfor (var i = 0, l = env.classes.length; i < l; i++) {\n \t\t\tvar cls = env.classes[i];\n \t\t\tvar match = /language-(.+)/.exec(cls);\n \t\t\tif (match) {\n \t\t\t\tcodeLang = match[1];\n \t\t\t\tbreak;\n \t\t\t}\n \t\t}\n\n \t\tvar grammar = Prism.languages[codeLang];\n\n \t\tif (!grammar) {\n \t\t\tif (codeLang && codeLang !== 'none' && Prism.plugins.autoloader) {\n \t\t\t\tvar id = 'md-' + new Date().valueOf() + '-' + Math.floor(Math.random() * 1e16);\n \t\t\t\tenv.attributes['id'] = id;\n\n \t\t\t\tPrism.plugins.autoloader.loadLanguages(codeLang, function () {\n \t\t\t\t\tvar ele = document.getElementById(id);\n \t\t\t\t\tif (ele) {\n \t\t\t\t\t\tele.innerHTML = Prism.highlight(ele.textContent, Prism.languages[codeLang], codeLang);\n \t\t\t\t\t}\n \t\t\t\t});\n \t\t\t}\n \t\t} else {\n \t\t\t// reverse Prism.util.encode\n \t\t\tvar code = env.content.replace(/</g, '<').replace(/&/g, '&');\n\n \t\t\tenv.content = Prism.highlight(code, grammar, codeLang);\n \t\t}\n \t});\n\n \tPrism.languages.md = Prism.languages.markdown;\n\n }(Prism));\n\n Prism.languages.julia= {\n \t'comment': {\n \t\tpattern: /(^|[^\\\\])#.*/,\n \t\tlookbehind: true\n \t},\n \t'string': /(\"\"\"|''')[\\s\\S]+?\\1|(\"|')(?:\\\\.|(?!\\2)[^\\\\\\r\\n])*\\2/,\n \t'keyword' : /\\b(?:abstract|baremodule|begin|bitstype|break|catch|ccall|const|continue|do|else|elseif|end|export|finally|for|function|global|if|immutable|import|importall|in|let|local|macro|module|print|println|quote|return|struct|try|type|typealias|using|while)\\b/,\n \t'boolean' : /\\b(?:true|false)\\b/,\n \t'number' : /(?:\\b(?=\\d)|\\B(?=\\.))(?:0[box])?(?:[\\da-f]+\\.?\\d*|\\.\\d+)(?:[efp][+-]?\\d+)?j?/i,\n \t'operator': /[-+*^%÷&$\\\\]=?|\\/[\\/=]?|!=?=?|\\|[=>]?|<(?:<=?|[=:])?|>(?:=|>>?=?)?|==?=?|[~≠≤≥]/,\n \t'punctuation' : /[{}[\\];(),.:]/,\n \t'constant': /\\b(?:(?:NaN|Inf)(?:16|32|64)?)\\b/\n };\n\n var css = \"/**\\n * prism.js default theme for JavaScript, CSS and HTML\\n * Based on dabblet (http://dabblet.com)\\n * @author Lea Verou\\n */\\n\\ncode[class*=\\\"language-\\\"],\\npre[class*=\\\"language-\\\"] {\\n\\tcolor: black;\\n\\tbackground: none;\\n\\ttext-shadow: 0 1px white;\\n\\tfont-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;\\n\\tfont-size: 1em;\\n\\ttext-align: left;\\n\\twhite-space: pre;\\n\\tword-spacing: normal;\\n\\tword-break: normal;\\n\\tword-wrap: normal;\\n\\tline-height: 1.5;\\n\\n\\t-moz-tab-size: 4;\\n\\t-o-tab-size: 4;\\n\\ttab-size: 4;\\n\\n\\t-webkit-hyphens: none;\\n\\t-moz-hyphens: none;\\n\\t-ms-hyphens: none;\\n\\thyphens: none;\\n}\\n\\npre[class*=\\\"language-\\\"]::-moz-selection, pre[class*=\\\"language-\\\"] ::-moz-selection,\\ncode[class*=\\\"language-\\\"]::-moz-selection, code[class*=\\\"language-\\\"] ::-moz-selection {\\n\\ttext-shadow: none;\\n\\tbackground: #b3d4fc;\\n}\\n\\npre[class*=\\\"language-\\\"]::selection, pre[class*=\\\"language-\\\"] ::selection,\\ncode[class*=\\\"language-\\\"]::selection, code[class*=\\\"language-\\\"] ::selection {\\n\\ttext-shadow: none;\\n\\tbackground: #b3d4fc;\\n}\\n\\n@media print {\\n\\tcode[class*=\\\"language-\\\"],\\n\\tpre[class*=\\\"language-\\\"] {\\n\\t\\ttext-shadow: none;\\n\\t}\\n}\\n\\n/* Code blocks */\\npre[class*=\\\"language-\\\"] {\\n\\tpadding: 1em;\\n\\tmargin: .5em 0;\\n\\toverflow: auto;\\n}\\n\\n:not(pre) > code[class*=\\\"language-\\\"],\\npre[class*=\\\"language-\\\"] {\\n\\tbackground: #f5f2f0;\\n}\\n\\n/* Inline code */\\n:not(pre) > code[class*=\\\"language-\\\"] {\\n\\tpadding: .1em;\\n\\tborder-radius: .3em;\\n\\twhite-space: normal;\\n}\\n\\n.token.comment,\\n.token.prolog,\\n.token.doctype,\\n.token.cdata {\\n\\tcolor: slategray;\\n}\\n\\n.token.punctuation {\\n\\tcolor: #999;\\n}\\n\\n.token.namespace {\\n\\topacity: .7;\\n}\\n\\n.token.property,\\n.token.tag,\\n.token.boolean,\\n.token.number,\\n.token.constant,\\n.token.symbol,\\n.token.deleted {\\n\\tcolor: #905;\\n}\\n\\n.token.selector,\\n.token.attr-name,\\n.token.string,\\n.token.char,\\n.token.builtin,\\n.token.inserted {\\n\\tcolor: #690;\\n}\\n\\n.token.operator,\\n.token.entity,\\n.token.url,\\n.language-css .token.string,\\n.style .token.string {\\n\\tcolor: #9a6e3a;\\n\\tbackground: hsla(0, 0%, 100%, .5);\\n}\\n\\n.token.atrule,\\n.token.attr-value,\\n.token.keyword {\\n\\tcolor: #07a;\\n}\\n\\n.token.function,\\n.token.class-name {\\n\\tcolor: #DD4A68;\\n}\\n\\n.token.regex,\\n.token.important,\\n.token.variable {\\n\\tcolor: #e90;\\n}\\n\\n.token.important,\\n.token.bold {\\n\\tfont-weight: bold;\\n}\\n.token.italic {\\n\\tfont-style: italic;\\n}\\n\\n.token.entity {\\n\\tcursor: help;\\n}\\n\";\n\n // Copyright 2018 The Distill Template Authors\n\n const T$4 = Template('d-code', `\n<style>\n\ncode {\n white-space: nowrap;\n background: rgba(0, 0, 0, 0.04);\n border-radius: 2px;\n padding: 4px 7px;\n font-size: 15px;\n color: rgba(0, 0, 0, 0.6);\n}\n\npre code {\n display: block;\n border-left: 2px solid rgba(0, 0, 0, .1);\n padding: 0 0 0 36px;\n}\n\n${css}\n</style>\n\n<code id=\"code-container\"></code>\n\n`);\n\n class Code extends Mutating(T$4(HTMLElement)) {\n\n renderContent() {\n\n // check if language can be highlighted\n this.languageName = this.getAttribute('language');\n if (!this.languageName) {\n console.warn('You need to provide a language attribute to your <d-code> block to let us know how to highlight your code; e.g.:\\n <d-code language=\"python\">zeros = np.zeros(shape)</d-code>.');\n return;\n }\n const language = prism.languages[this.languageName];\n if (language == undefined) {\n console.warn(`Distill does not yet support highlighting your code block in \"${this.languageName}'.`);\n return;\n }\n\n let content = this.textContent;\n const codeTag = this.shadowRoot.querySelector('#code-container');\n\n if (this.hasAttribute('block')) {\n // normalize the tab indents\n content = content.replace(/\\n/, '');\n const tabs = content.match(/\\s*/);\n content = content.replace(new RegExp('\\n' + tabs, 'g'), '\\n');\n content = content.trim();\n // wrap code block in pre tag if needed\n if (codeTag.parentNode instanceof ShadowRoot) {\n const preTag = document.createElement('pre');\n this.shadowRoot.removeChild(codeTag);\n preTag.appendChild(codeTag);\n this.shadowRoot.appendChild(preTag);\n }\n\n }\n\n codeTag.className = `language-${this.languageName}`;\n codeTag.innerHTML = prism.highlight(content, language);\n }\n\n }\n\n // Copyright 2018 The Distill Template Authors\n\n const T$5 = Template('d-footnote', `\n<style>\n\nd-math[block] {\n display: block;\n}\n\n:host {\n\n}\n\nsup {\n line-height: 1em;\n font-size: 0.75em;\n position: relative;\n top: -.5em;\n vertical-align: baseline;\n}\n\nspan {\n color: hsla(206, 90%, 20%, 0.7);\n cursor: default;\n}\n\n.footnote-container {\n padding: 10px;\n}\n\n</style>\n\n<d-hover-box>\n <div class=\"footnote-container\">\n <slot id=\"slot\"></slot>\n </div>\n</d-hover-box>\n\n<sup>\n <span id=\"fn-\" data-hover-ref=\"\"></span>\n</sup>\n\n`);\n\n class Footnote extends T$5(HTMLElement) {\n\n constructor() {\n super();\n\n const options = {childList: true, characterData: true, subtree: true};\n const observer = new MutationObserver(this.notify);\n observer.observe(this, options);\n }\n\n notify() {\n const options = { detail: this, bubbles: true };\n const event = new CustomEvent('onFootnoteChanged', options);\n document.dispatchEvent(event);\n }\n\n connectedCallback() {\n // listen and notify about changes to slotted content\n // const slot = this.shadowRoot.querySelector('#slot');\n // console.warn(slot.textContent);\n // slot.addEventListener('slotchange', this.notify);\n this.hoverBox = this.root.querySelector('d-hover-box');\n window.customElements.whenDefined('d-hover-box').then(() => {\n this.hoverBox.listen(this);\n });\n // create numeric ID\n Footnote.currentFootnoteId += 1;\n const IdString = Footnote.currentFootnoteId.toString();\n this.root.host.id = 'd-footnote-' + IdString;\n\n // set up hidden hover box\n const id = 'dt-fn-hover-box-' + IdString;\n this.hoverBox.id = id;\n\n // set up visible footnote marker\n const span = this.root.querySelector('#fn-');\n span.setAttribute('id', 'fn-' + IdString);\n span.setAttribute('data-hover-ref', id);\n span.textContent = IdString;\n }\n\n }\n\n Footnote.currentFootnoteId = 0;\n\n // Copyright 2018 The Distill Template Authors\n\n const T$6 = Template('d-footnote-list', `\n<style>\n\nd-footnote-list {\n contain: layout style;\n}\n\nd-footnote-list > * {\n grid-column: text;\n}\n\nd-footnote-list a.footnote-backlink {\n color: rgba(0,0,0,0.3);\n padding-left: 0.5em;\n}\n\n</style>\n\n<h3>Footnotes</h3>\n<ol></ol>\n`, false);\n\n class FootnoteList extends T$6(HTMLElement) {\n\n connectedCallback() {\n super.connectedCallback();\n\n this.list = this.root.querySelector('ol');\n // footnotes list is initially hidden\n this.root.style.display = 'none';\n // look through document and register existing footnotes\n // Store.subscribeTo('footnotes', (footnote) => {\n // this.renderFootnote(footnote);\n // });\n }\n\n // TODO: could optimize this to accept individual footnotes?\n set footnotes(footnotes) {\n this.list.innerHTML = '';\n if (footnotes.length) {\n // ensure footnote list is visible\n this.root.style.display = '';\n\n for (const footnote of footnotes) {\n // construct and append list item to show footnote\n const listItem = document.createElement('li');\n listItem.id = footnote.id + '-listing';\n listItem.innerHTML = footnote.innerHTML;\n\n const backlink = document.createElement('a');\n backlink.setAttribute('class', 'footnote-backlink');\n backlink.setAttribute('target', '_self');\n backlink.textContent = '[↩]';\n backlink.href = '#' + footnote.id;\n\n listItem.appendChild(backlink);\n this.list.appendChild(listItem);\n }\n } else {\n // ensure footnote list is invisible\n this.root.style.display = 'none';\n }\n }\n\n }\n\n // Copyright 2018 The Distill Template Authors\n\n const T$7 = Template('d-hover-box', `\n<style>\n\n:host {\n position: absolute;\n width: 100%;\n left: 0px;\n z-index: 10000;\n display: none;\n white-space: normal\n}\n\n.container {\n position: relative;\n width: 704px;\n max-width: 100vw;\n margin: 0 auto;\n}\n\n.panel {\n position: absolute;\n font-size: 1rem;\n line-height: 1.5em;\n top: 0;\n left: 0;\n width: 100%;\n border: 1px solid rgba(0, 0, 0, 0.1);\n background-color: rgba(250, 250, 250, 0.95);\n box-shadow: 0 0 7px rgba(0, 0, 0, 0.1);\n border-radius: 4px;\n box-sizing: border-box;\n\n backdrop-filter: blur(2px);\n -webkit-backdrop-filter: blur(2px);\n}\n\n</style>\n\n<div class=\"container\">\n <div class=\"panel\">\n <slot></slot>\n </div>\n</div>\n`);\n\n class HoverBox extends T$7(HTMLElement) {\n\n constructor() {\n super();\n }\n\n connectedCallback() {\n\n }\n\n listen(element) {\n // console.log(element)\n this.bindDivEvents(this);\n this.bindTriggerEvents(element);\n // this.style.display = \"block\";\n }\n\n bindDivEvents(element) {\n // For mice, same behavior as hovering on links\n element.addEventListener('mouseover', () => {\n if (!this.visible) this.showAtNode(element);\n this.stopTimeout();\n });\n element.addEventListener('mouseout', () => {\n this.extendTimeout(500);\n });\n // Don't trigger body touchstart event when touching within box\n element.addEventListener('touchstart', (event) => {\n event.stopPropagation();\n }, {passive: true});\n // Close box when touching outside box\n document.body.addEventListener('touchstart', () => {\n this.hide();\n }, {passive: true});\n }\n\n bindTriggerEvents(node) {\n node.addEventListener('mouseover', () => {\n if (!this.visible) {\n this.showAtNode(node);\n }\n this.stopTimeout();\n });\n\n node.addEventListener('mouseout', () => {\n this.extendTimeout(300);\n });\n\n node.addEventListener('touchstart', (event) => {\n if (this.visible) {\n this.hide();\n } else {\n this.showAtNode(node);\n }\n // Don't trigger body touchstart event when touching link\n event.stopPropagation();\n }, {passive: true});\n }\n\n show(position) {\n this.visible = true;\n this.style.display = 'block';\n // 10px extra offset from element\n this.style.top = Math.round(position[1] + 10) + 'px';\n }\n\n showAtNode(node) {\n // https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/offsetTop\n const bbox = node.getBoundingClientRect();\n this.show([node.offsetLeft + bbox.width, node.offsetTop + bbox.height]);\n }\n\n hide() {\n this.visible = false;\n this.style.display = 'none';\n this.stopTimeout();\n }\n\n stopTimeout() {\n if (this.timeout) {\n clearTimeout(this.timeout);\n }\n }\n\n extendTimeout(time) {\n this.stopTimeout();\n this.timeout = setTimeout(() => {\n this.hide();\n }, time);\n }\n\n }\n\n // Copyright 2018 The Distill Template Authors\n //\n // Licensed under the Apache License, Version 2.0 (the \"License\");\n // you may not use this file except in compliance with the License.\n // You may obtain a copy of the License at\n //\n // http://www.apache.org/licenses/LICENSE-2.0\n //\n // Unless required by applicable law or agreed to in writing, software\n // distributed under the License is distributed on an \"AS IS\" BASIS,\n // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n // See the License for the specific language governing permissions and\n // limitations under the License.\n\n class Title extends HTMLElement {\n static get is() { return 'd-title'; }\n }\n\n // Copyright 2018 The Distill Template Authors\n\n const T$8 = Template('d-references', `\n<style>\nd-references {\n display: block;\n}\n</style>\n`, false);\n\n class References extends T$8(HTMLElement) {\n\n }\n\n // Copyright 2018 The Distill Template Authors\n //\n // Licensed under the Apache License, Version 2.0 (the \"License\");\n // you may not use this file except in compliance with the License.\n // You may obtain a copy of the License at\n //\n // http://www.apache.org/licenses/LICENSE-2.0\n //\n // Unless required by applicable law or agreed to in writing, software\n // distributed under the License is distributed on an \"AS IS\" BASIS,\n // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n // See the License for the specific language governing permissions and\n // limitations under the License.\n\n class TOC extends HTMLElement {\n\n static get is() { return 'd-toc'; }\n\n connectedCallback() {\n if (!this.getAttribute('prerendered')) {\n window.onload = () => {\n const article = document.querySelector('d-article');\n const headings = article.querySelectorAll('h2, h3');\n renderTOC(this, headings);\n };\n }\n }\n\n }\n\n function renderTOC(element, headings) {\n\n let ToC =`\n <style>\n\n d-toc {\n contain: layout style;\n display: block;\n }\n\n d-toc ul {\n padding-left: 0;\n }\n\n d-toc ul > ul {\n padding-left: 24px;\n }\n\n d-toc a {\n border-bottom: none;\n text-decoration: none;\n }\n\n </style>\n <nav role=\"navigation\" class=\"table-of-contents\"></nav>\n <h2>Table of contents</h2>\n <ul>`;\n\n for (const el of headings) {\n // should element be included in TOC?\n const isInTitle = el.parentElement.tagName == 'D-TITLE';\n const isException = el.getAttribute('no-toc');\n if (isInTitle || isException) continue;\n // create TOC entry\n const title = el.textContent;\n const link = '#' + el.getAttribute('id');\n\n let newLine = '<li>' + '<a href=\"' + link + '\">' + title + '</a>' + '</li>';\n if (el.tagName == 'H3') {\n newLine = '<ul>' + newLine + '</ul>';\n } else {\n newLine += '<br>';\n }\n ToC += newLine;\n\n }\n\n ToC += '</ul></nav>';\n element.innerHTML = ToC;\n }\n\n // Copyright 2018 The Distill Template Authors\n //\n // Licensed under the Apache License, Version 2.0 (the \"License\");\n // you may not use this file except in compliance with the License.\n // You may obtain a copy of the License at\n //\n // http://www.apache.org/licenses/LICENSE-2.0\n //\n // Unless required by applicable law or agreed to in writing, software\n // distributed under the License is distributed on an \"AS IS\" BASIS,\n // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n // See the License for the specific language governing permissions and\n // limitations under the License.\n\n // Figure\n //\n // d-figure provides a state-machine of visibility events:\n //\n // scroll out of view\n // +----------------+\n // *do work here* | |\n // +----------------+ +-+---------+ +-v---------+\n // | ready +----> onscreen | | offscreen |\n // +----------------+ +---------^-+ +---------+-+\n // | |\n // +----------------+\n // scroll into view\n //\n\n class Figure extends HTMLElement {\n\n static get is() { return 'd-figure'; }\n\n static get readyQueue() {\n if (!Figure._readyQueue) {\n Figure._readyQueue = [];\n }\n return Figure._readyQueue;\n }\n\n static addToReadyQueue(figure) {\n if (Figure.readyQueue.indexOf(figure) === -1) {\n Figure.readyQueue.push(figure);\n Figure.runReadyQueue();\n }\n }\n\n static runReadyQueue() {\n // console.log(\"Checking to run readyQueue, length: \" + Figure.readyQueue.length + \", scrolling: \" + Figure.isScrolling);\n // if (Figure.isScrolling) return;\n // console.log(\"Running ready Queue\");\n const figure = Figure.readyQueue\n .sort((a,b) => a._seenOnScreen - b._seenOnScreen )\n .filter((figure) => !figure._ready)\n .pop();\n if (figure) {\n figure.ready();\n requestAnimationFrame(Figure.runReadyQueue);\n }\n\n }\n\n constructor() {\n super();\n // debugger\n this._ready = false;\n this._onscreen = false;\n this._offscreen = true;\n }\n\n connectedCallback() {\n this.loadsWhileScrolling = this.hasAttribute('loadsWhileScrolling');\n Figure.marginObserver.observe(this);\n Figure.directObserver.observe(this);\n }\n\n disconnectedCallback() {\n Figure.marginObserver.unobserve(this);\n Figure.directObserver.unobserve(this);\n }\n\n // We use two separate observers:\n // One with an extra 1000px margin to warn if the viewpoint gets close,\n // And one for the actual on/off screen events\n\n static get marginObserver() {\n if (!Figure._marginObserver) {\n // if (!('IntersectionObserver' in window)) {\n // throw new Error('no interscetionobbserver!');\n // }\n const viewportHeight = window.innerHeight;\n const margin = Math.floor(2 * viewportHeight);\n const options = {rootMargin: margin + 'px 0px ' + margin + 'px 0px', threshold: 0.01};\n const callback = Figure.didObserveMarginIntersection;\n const observer = new IntersectionObserver(callback, options);\n Figure._marginObserver = observer;\n }\n return Figure._marginObserver;\n }\n\n static didObserveMarginIntersection(entries) {\n for (const entry of entries) {\n const figure = entry.target;\n if (entry.isIntersecting && !figure._ready) {\n Figure.addToReadyQueue(figure);\n }\n }\n }\n\n static get directObserver() {\n if (!Figure._directObserver) {\n Figure._directObserver = new IntersectionObserver(\n Figure.didObserveDirectIntersection, {\n rootMargin: '0px', threshold: [0, 1.0],\n }\n );\n }\n return Figure._directObserver;\n }\n\n static didObserveDirectIntersection(entries) {\n for (const entry of entries) {\n const figure = entry.target;\n if (entry.isIntersecting) {\n figure._seenOnScreen = new Date();\n // if (!figure._ready) { figure.ready(); }\n if (figure._offscreen) { figure.onscreen(); }\n } else {\n if (figure._onscreen) { figure.offscreen(); }\n }\n }\n }\n\n // Notify listeners that registered late, too:\n\n addEventListener(eventName, callback) {\n super.addEventListener(eventName, callback);\n // if we had already dispatched something while presumingly no one was listening, we do so again\n // debugger\n if (eventName === 'ready') {\n if (Figure.readyQueue.indexOf(this) !== -1) {\n this._ready = false;\n Figure.runReadyQueue();\n }\n }\n if (eventName === 'onscreen') {\n this.onscreen();\n }\n }\n\n // Custom Events\n\n ready() {\n // debugger\n this._ready = true;\n Figure.marginObserver.unobserve(this);\n const event = new CustomEvent('ready');\n this.dispatchEvent(event);\n }\n\n onscreen() {\n this._onscreen = true;\n this._offscreen = false;\n const event = new CustomEvent('onscreen');\n this.dispatchEvent(event);\n }\n\n offscreen() {\n this._onscreen = false;\n this._offscreen = true;\n const event = new CustomEvent('offscreen');\n this.dispatchEvent(event);\n }\n\n }\n\n if (typeof window !== 'undefined') {\n\n Figure.isScrolling = false;\n let timeout;\n const resetTimer = () => {\n Figure.isScrolling = true;\n clearTimeout(timeout);\n timeout = setTimeout(() => {\n Figure.isScrolling = false;\n Figure.runReadyQueue();\n }, 500);\n };\n window.addEventListener('scroll', resetTimer, true);\n\n }\n\n // Copyright 2018 The Distill Template Authors\n\n // This overlay is not secure.\n // It is only meant as a social deterrent.\n\n const productionHostname = 'distill.pub';\n const T$9 = Template('d-interstitial', `\n<style>\n\n.overlay {\n position: fixed;\n width: 100%;\n height: 100%;\n top: 0;\n left: 0;\n background: white;\n\n opacity: 1;\n visibility: visible;\n\n display: flex;\n flex-flow: column;\n justify-content: center;\n z-index: 2147483647 /* MaxInt32 */\n\n}\n\n.container {\n position: relative;\n margin-left: auto;\n margin-right: auto;\n max-width: 420px;\n padding: 2em;\n}\n\nh1 {\n text-decoration: underline;\n text-decoration-color: hsl(0,100%,40%);\n -webkit-text-decoration-color: hsl(0,100%,40%);\n margin-bottom: 1em;\n line-height: 1.5em;\n}\n\ninput[type=\"password\"] {\n -webkit-appearance: none;\n -moz-appearance: none;\n appearance: none;\n -webkit-box-shadow: none;\n -moz-box-shadow: none;\n box-shadow: none;\n -webkit-border-radius: none;\n -moz-border-radius: none;\n -ms-border-radius: none;\n -o-border-radius: none;\n border-radius: none;\n outline: none;\n\n font-size: 18px;\n background: none;\n width: 25%;\n padding: 10px;\n border: none;\n border-bottom: solid 2px #999;\n transition: border .3s;\n}\n\ninput[type=\"password\"]:focus {\n border-bottom: solid 2px #333;\n}\n\ninput[type=\"password\"].wrong {\n border-bottom: solid 2px hsl(0,100%,40%);\n}\n\np small {\n color: #888;\n}\n\n.logo {\n position: relative;\n font-size: 1.5em;\n margin-bottom: 3em;\n}\n\n.logo svg {\n width: 36px;\n position: relative;\n top: 6px;\n margin-right: 2px;\n}\n\n.logo svg path {\n fill: none;\n stroke: black;\n stroke-width: 2px;\n}\n\n</style>\n\n<div class=\"overlay\">\n <div class=\"container\">\n <h1>This article is in review.</h1>\n <p>Do not share this URL or the contents of this article. Thank you!</p>\n <input id=\"interstitial-password-input\" type=\"password\" name=\"password\" autofocus/>\n <p><small>Enter the password we shared with you as part of the review process to view the article.</small></p>\n </div>\n</div>\n`);\n\n class Interstitial extends T$9(HTMLElement) {\n\n connectedCallback() {\n if (this.shouldRemoveSelf()) {\n this.parentElement.removeChild(this);\n } else {\n const passwordInput = this.root.querySelector('#interstitial-password-input');\n passwordInput.oninput = (event) => this.passwordChanged(event);\n }\n }\n\n passwordChanged(event) {\n const entered = event.target.value;\n if (entered === this.password) {\n console.log('Correct password entered.');\n this.parentElement.removeChild(this);\n if (typeof(Storage) !== 'undefined') {\n console.log('Saved that correct password was entered.');\n localStorage.setItem(this.localStorageIdentifier(), 'true');\n }\n }\n }\n\n shouldRemoveSelf() {\n // should never be visible in production\n if (window && window.location.hostname === productionHostname) {\n console.warn('Interstitial found on production, hiding it.');\n return true\n }\n // should only have to enter password once\n if (typeof(Storage) !== 'undefined') {\n if (localStorage.getItem(this.localStorageIdentifier()) === 'true') {\n console.log('Loaded that correct password was entered before; skipping interstitial.');\n return true;\n }\n }\n // otherwise, leave visible\n return false;\n }\n\n localStorageIdentifier() {\n const prefix = 'distill-drafts';\n const suffix = 'interstitial-password-correct';\n return prefix + (window ? window.location.pathname : '-') + suffix\n }\n\n }\n\n function ascending(a, b) {\n return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n }\n\n function bisector(compare) {\n if (compare.length === 1) compare = ascendingComparator(compare);\n return {\n left: function(a, x, lo, hi) {\n if (lo == null) lo = 0;\n if (hi == null) hi = a.length;\n while (lo < hi) {\n var mid = lo + hi >>> 1;\n if (compare(a[mid], x) < 0) lo = mid + 1;\n else hi = mid;\n }\n return lo;\n },\n right: function(a, x, lo, hi) {\n if (lo == null) lo = 0;\n if (hi == null) hi = a.length;\n while (lo < hi) {\n var mid = lo + hi >>> 1;\n if (compare(a[mid], x) > 0) hi = mid;\n else lo = mid + 1;\n }\n return lo;\n }\n };\n }\n\n function ascendingComparator(f) {\n return function(d, x) {\n return ascending(f(d), x);\n };\n }\n\n var ascendingBisect = bisector(ascending);\n var bisectRight = ascendingBisect.right;\n\n function range(start, stop, step) {\n start = +start, stop = +stop, step = (n = arguments.length) < 2 ? (stop = start, start = 0, 1) : n < 3 ? 1 : +step;\n\n var i = -1,\n n = Math.max(0, Math.ceil((stop - start) / step)) | 0,\n range = new Array(n);\n\n while (++i < n) {\n range[i] = start + i * step;\n }\n\n return range;\n }\n\n var e10 = Math.sqrt(50),\n e5 = Math.sqrt(10),\n e2 = Math.sqrt(2);\n\n function ticks(start, stop, count) {\n var reverse,\n i = -1,\n n,\n ticks,\n step;\n\n stop = +stop, start = +start, count = +count;\n if (start === stop && count > 0) return [start];\n if (reverse = stop < start) n = start, start = stop, stop = n;\n if ((step = tickIncrement(start, stop, count)) === 0 || !isFinite(step)) return [];\n\n if (step > 0) {\n start = Math.ceil(start / step);\n stop = Math.floor(stop / step);\n ticks = new Array(n = Math.ceil(stop - start + 1));\n while (++i < n) ticks[i] = (start + i) * step;\n } else {\n start = Math.floor(start * step);\n stop = Math.ceil(stop * step);\n ticks = new Array(n = Math.ceil(start - stop + 1));\n while (++i < n) ticks[i] = (start - i) / step;\n }\n\n if (reverse) ticks.reverse();\n\n return ticks;\n }\n\n function tickIncrement(start, stop, count) {\n var step = (stop - start) / Math.max(0, count),\n power = Math.floor(Math.log(step) / Math.LN10),\n error = step / Math.pow(10, power);\n return power >= 0\n ? (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1) * Math.pow(10, power)\n : -Math.pow(10, -power) / (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1);\n }\n\n function tickStep(start, stop, count) {\n var step0 = Math.abs(stop - start) / Math.max(0, count),\n step1 = Math.pow(10, Math.floor(Math.log(step0) / Math.LN10)),\n error = step0 / step1;\n if (error >= e10) step1 *= 10;\n else if (error >= e5) step1 *= 5;\n else if (error >= e2) step1 *= 2;\n return stop < start ? -step1 : step1;\n }\n\n function initRange(domain, range) {\n switch (arguments.length) {\n case 0: break;\n case 1: this.range(domain); break;\n default: this.range(range).domain(domain); break;\n }\n return this;\n }\n\n function define(constructor, factory, prototype) {\n constructor.prototype = factory.prototype = prototype;\n prototype.constructor = constructor;\n }\n\n function extend(parent, definition) {\n var prototype = Object.create(parent.prototype);\n for (var key in definition) prototype[key] = definition[key];\n return prototype;\n }\n\n function Color() {}\n\n var darker = 0.7;\n var brighter = 1 / darker;\n\n var reI = \"\\\\s*([+-]?\\\\d+)\\\\s*\",\n reN = \"\\\\s*([+-]?\\\\d*\\\\.?\\\\d+(?:[eE][+-]?\\\\d+)?)\\\\s*\",\n reP = \"\\\\s*([+-]?\\\\d*\\\\.?\\\\d+(?:[eE][+-]?\\\\d+)?)%\\\\s*\",\n reHex = /^#([0-9a-f]{3,8})$/,\n reRgbInteger = new RegExp(\"^rgb\\\\(\" + [reI, reI, reI] + \"\\\\)$\"),\n reRgbPercent = new RegExp(\"^rgb\\\\(\" + [reP, reP, reP] + \"\\\\)$\"),\n reRgbaInteger = new RegExp(\"^rgba\\\\(\" + [reI, reI, reI, reN] + \"\\\\)$\"),\n reRgbaPercent = new RegExp(\"^rgba\\\\(\" + [reP, reP, reP, reN] + \"\\\\)$\"),\n reHslPercent = new RegExp(\"^hsl\\\\(\" + [reN, reP, reP] + \"\\\\)$\"),\n reHslaPercent = new RegExp(\"^hsla\\\\(\" + [reN, reP, reP, reN] + \"\\\\)$\");\n\n var named = {\n aliceblue: 0xf0f8ff,\n antiquewhite: 0xfaebd7,\n aqua: 0x00ffff,\n aquamarine: 0x7fffd4,\n azure: 0xf0ffff,\n beige: 0xf5f5dc,\n bisque: 0xffe4c4,\n black: 0x000000,\n blanchedalmond: 0xffebcd,\n blue: 0x0000ff,\n blueviolet: 0x8a2be2,\n brown: 0xa52a2a,\n burlywood: 0xdeb887,\n cadetblue: 0x5f9ea0,\n chartreuse: 0x7fff00,\n chocolate: 0xd2691e,\n coral: 0xff7f50,\n cornflowerblue: 0x6495ed,\n cornsilk: 0xfff8dc,\n crimson: 0xdc143c,\n cyan: 0x00ffff,\n darkblue: 0x00008b,\n darkcyan: 0x008b8b,\n darkgoldenrod: 0xb8860b,\n darkgray: 0xa9a9a9,\n darkgreen: 0x006400,\n darkgrey: 0xa9a9a9,\n darkkhaki: 0xbdb76b,\n darkmagenta: 0x8b008b,\n darkolivegreen: 0x556b2f,\n darkorange: 0xff8c00,\n darkorchid: 0x9932cc,\n darkred: 0x8b0000,\n darksalmon: 0xe9967a,\n darkseagreen: 0x8fbc8f,\n darkslateblue: 0x483d8b,\n darkslategray: 0x2f4f4f,\n darkslategrey: 0x2f4f4f,\n darkturquoise: 0x00ced1,\n darkviolet: 0x9400d3,\n deeppink: 0xff1493,\n deepskyblue: 0x00bfff,\n dimgray: 0x696969,\n dimgrey: 0x696969,\n dodgerblue: 0x1e90ff,\n firebrick: 0xb22222,\n floralwhite: 0xfffaf0,\n forestgreen: 0x228b22,\n fuchsia: 0xff00ff,\n gainsboro: 0xdcdcdc,\n ghostwhite: 0xf8f8ff,\n gold: 0xffd700,\n goldenrod: 0xdaa520,\n gray: 0x808080,\n green: 0x008000,\n greenyellow: 0xadff2f,\n grey: 0x808080,\n honeydew: 0xf0fff0,\n hotpink: 0xff69b4,\n indianred: 0xcd5c5c,\n indigo: 0x4b0082,\n ivory: 0xfffff0,\n khaki: 0xf0e68c,\n lavender: 0xe6e6fa,\n lavenderblush: 0xfff0f5,\n lawngreen: 0x7cfc00,\n lemonchiffon: 0xfffacd,\n lightblue: 0xadd8e6,\n lightcoral: 0xf08080,\n lightcyan: 0xe0ffff,\n lightgoldenrodyellow: 0xfafad2,\n lightgray: 0xd3d3d3,\n lightgreen: 0x90ee90,\n lightgrey: 0xd3d3d3,\n lightpink: 0xffb6c1,\n lightsalmon: 0xffa07a,\n lightseagreen: 0x20b2aa,\n lightskyblue: 0x87cefa,\n lightslategray: 0x778899,\n lightslategrey: 0x778899,\n lightsteelblue: 0xb0c4de,\n lightyellow: 0xffffe0,\n lime: 0x00ff00,\n limegreen: 0x32cd32,\n linen: 0xfaf0e6,\n magenta: 0xff00ff,\n maroon: 0x800000,\n mediumaquamarine: 0x66cdaa,\n mediumblue: 0x0000cd,\n mediumorchid: 0xba55d3,\n mediumpurple: 0x9370db,\n mediumseagreen: 0x3cb371,\n mediumslateblue: 0x7b68ee,\n mediumspringgreen: 0x00fa9a,\n mediumturquoise: 0x48d1cc,\n mediumvioletred: 0xc71585,\n midnightblue: 0x191970,\n mintcream: 0xf5fffa,\n mistyrose: 0xffe4e1,\n moccasin: 0xffe4b5,\n navajowhite: 0xffdead,\n navy: 0x000080,\n oldlace: 0xfdf5e6,\n olive: 0x808000,\n olivedrab: 0x6b8e23,\n orange: 0xffa500,\n orangered: 0xff4500,\n orchid: 0xda70d6,\n palegoldenrod: 0xeee8aa,\n palegreen: 0x98fb98,\n paleturquoise: 0xafeeee,\n palevioletred: 0xdb7093,\n papayawhip: 0xffefd5,\n peachpuff: 0xffdab9,\n peru: 0xcd853f,\n pink: 0xffc0cb,\n plum: 0xdda0dd,\n powderblue: 0xb0e0e6,\n purple: 0x800080,\n rebeccapurple: 0x663399,\n red: 0xff0000,\n rosybrown: 0xbc8f8f,\n royalblue: 0x4169e1,\n saddlebrown: 0x8b4513,\n salmon: 0xfa8072,\n sandybrown: 0xf4a460,\n seagreen: 0x2e8b57,\n seashell: 0xfff5ee,\n sienna: 0xa0522d,\n silver: 0xc0c0c0,\n skyblue: 0x87ceeb,\n slateblue: 0x6a5acd,\n slategray: 0x708090,\n slategrey: 0x708090,\n snow: 0xfffafa,\n springgreen: 0x00ff7f,\n steelblue: 0x4682b4,\n tan: 0xd2b48c,\n teal: 0x008080,\n thistle: 0xd8bfd8,\n tomato: 0xff6347,\n turquoise: 0x40e0d0,\n violet: 0xee82ee,\n wheat: 0xf5deb3,\n white: 0xffffff,\n whitesmoke: 0xf5f5f5,\n yellow: 0xffff00,\n yellowgreen: 0x9acd32\n };\n\n define(Color, color, {\n copy: function(channels) {\n return Object.assign(new this.constructor, this, channels);\n },\n displayable: function() {\n return this.rgb().displayable();\n },\n hex: color_formatHex, // Deprecated! Use color.formatHex.\n formatHex: color_formatHex,\n formatHsl: color_formatHsl,\n formatRgb: color_formatRgb,\n toString: color_formatRgb\n });\n\n function color_formatHex() {\n return this.rgb().formatHex();\n }\n\n function color_formatHsl() {\n return hslConvert(this).formatHsl();\n }\n\n function color_formatRgb() {\n return this.rgb().formatRgb();\n }\n\n function color(format) {\n var m, l;\n format = (format + \"\").trim().toLowerCase();\n return (m = reHex.exec(format)) ? (l = m[1].length, m = parseInt(m[1], 16), l === 6 ? rgbn(m) // #ff0000\n : l === 3 ? new Rgb((m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), ((m & 0xf) << 4) | (m & 0xf), 1) // #f00\n : l === 8 ? rgba(m >> 24 & 0xff, m >> 16 & 0xff, m >> 8 & 0xff, (m & 0xff) / 0xff) // #ff000000\n : l === 4 ? rgba((m >> 12 & 0xf) | (m >> 8 & 0xf0), (m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), (((m & 0xf) << 4) | (m & 0xf)) / 0xff) // #f000\n : null) // invalid hex\n : (m = reRgbInteger.exec(format)) ? new Rgb(m[1], m[2], m[3], 1) // rgb(255, 0, 0)\n : (m = reRgbPercent.exec(format)) ? new Rgb(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, 1) // rgb(100%, 0%, 0%)\n : (m = reRgbaInteger.exec(format)) ? rgba(m[1], m[2], m[3], m[4]) // rgba(255, 0, 0, 1)\n : (m = reRgbaPercent.exec(format)) ? rgba(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, m[4]) // rgb(100%, 0%, 0%, 1)\n : (m = reHslPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, 1) // hsl(120, 50%, 50%)\n : (m = reHslaPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, m[4]) // hsla(120, 50%, 50%, 1)\n : named.hasOwnProperty(format) ? rgbn(named[format]) // eslint-disable-line no-prototype-builtins\n : format === \"transparent\" ? new Rgb(NaN, NaN, NaN, 0)\n : null;\n }\n\n function rgbn(n) {\n return new Rgb(n >> 16 & 0xff, n >> 8 & 0xff, n & 0xff, 1);\n }\n\n function rgba(r, g, b, a) {\n if (a <= 0) r = g = b = NaN;\n return new Rgb(r, g, b, a);\n }\n\n function rgbConvert(o) {\n if (!(o instanceof Color)) o = color(o);\n if (!o) return new Rgb;\n o = o.rgb();\n return new Rgb(o.r, o.g, o.b, o.opacity);\n }\n\n function rgb(r, g, b, opacity) {\n return arguments.length === 1 ? rgbConvert(r) : new Rgb(r, g, b, opacity == null ? 1 : opacity);\n }\n\n function Rgb(r, g, b, opacity) {\n this.r = +r;\n this.g = +g;\n this.b = +b;\n this.opacity = +opacity;\n }\n\n define(Rgb, rgb, extend(Color, {\n brighter: function(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n },\n darker: function(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n },\n rgb: function() {\n return this;\n },\n displayable: function() {\n return (-0.5 <= this.r && this.r < 255.5)\n && (-0.5 <= this.g && this.g < 255.5)\n && (-0.5 <= this.b && this.b < 255.5)\n && (0 <= this.opacity && this.opacity <= 1);\n },\n hex: rgb_formatHex, // Deprecated! Use color.formatHex.\n formatHex: rgb_formatHex,\n formatRgb: rgb_formatRgb,\n toString: rgb_formatRgb\n }));\n\n function rgb_formatHex() {\n return \"#\" + hex(this.r) + hex(this.g) + hex(this.b);\n }\n\n function rgb_formatRgb() {\n var a = this.opacity; a = isNaN(a) ? 1 : Math.max(0, Math.min(1, a));\n return (a === 1 ? \"rgb(\" : \"rgba(\")\n + Math.max(0, Math.min(255, Math.round(this.r) || 0)) + \", \"\n + Math.max(0, Math.min(255, Math.round(this.g) || 0)) + \", \"\n + Math.max(0, Math.min(255, Math.round(this.b) || 0))\n + (a === 1 ? \")\" : \", \" + a + \")\");\n }\n\n function hex(value) {\n value = Math.max(0, Math.min(255, Math.round(value) || 0));\n return (value < 16 ? \"0\" : \"\") + value.toString(16);\n }\n\n function hsla(h, s, l, a) {\n if (a <= 0) h = s = l = NaN;\n else if (l <= 0 || l >= 1) h = s = NaN;\n else if (s <= 0) h = NaN;\n return new Hsl(h, s, l, a);\n }\n\n function hslConvert(o) {\n if (o instanceof Hsl) return new Hsl(o.h, o.s, o.l, o.opacity);\n if (!(o instanceof Color)) o = color(o);\n if (!o) return new Hsl;\n if (o instanceof Hsl) return o;\n o = o.rgb();\n var r = o.r / 255,\n g = o.g / 255,\n b = o.b / 255,\n min = Math.min(r, g, b),\n max = Math.max(r, g, b),\n h = NaN,\n s = max - min,\n l = (max + min) / 2;\n if (s) {\n if (r === max) h = (g - b) / s + (g < b) * 6;\n else if (g === max) h = (b - r) / s + 2;\n else h = (r - g) / s + 4;\n s /= l < 0.5 ? max + min : 2 - max - min;\n h *= 60;\n } else {\n s = l > 0 && l < 1 ? 0 : h;\n }\n return new Hsl(h, s, l, o.opacity);\n }\n\n function hsl(h, s, l, opacity) {\n return arguments.length === 1 ? hslConvert(h) : new Hsl(h, s, l, opacity == null ? 1 : opacity);\n }\n\n function Hsl(h, s, l, opacity) {\n this.h = +h;\n this.s = +s;\n this.l = +l;\n this.opacity = +opacity;\n }\n\n define(Hsl, hsl, extend(Color, {\n brighter: function(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Hsl(this.h, this.s, this.l * k, this.opacity);\n },\n darker: function(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Hsl(this.h, this.s, this.l * k, this.opacity);\n },\n rgb: function() {\n var h = this.h % 360 + (this.h < 0) * 360,\n s = isNaN(h) || isNaN(this.s) ? 0 : this.s,\n l = this.l,\n m2 = l + (l < 0.5 ? l : 1 - l) * s,\n m1 = 2 * l - m2;\n return new Rgb(\n hsl2rgb(h >= 240 ? h - 240 : h + 120, m1, m2),\n hsl2rgb(h, m1, m2),\n hsl2rgb(h < 120 ? h + 240 : h - 120, m1, m2),\n this.opacity\n );\n },\n displayable: function() {\n return (0 <= this.s && this.s <= 1 || isNaN(this.s))\n && (0 <= this.l && this.l <= 1)\n && (0 <= this.opacity && this.opacity <= 1);\n },\n formatHsl: function() {\n var a = this.opacity; a = isNaN(a) ? 1 : Math.max(0, Math.min(1, a));\n return (a === 1 ? \"hsl(\" : \"hsla(\")\n + (this.h || 0) + \", \"\n + (this.s || 0) * 100 + \"%, \"\n + (this.l || 0) * 100 + \"%\"\n + (a === 1 ? \")\" : \", \" + a + \")\");\n }\n }));\n\n /* From FvD 13.37, CSS Color Module Level 3 */\n function hsl2rgb(h, m1, m2) {\n return (h < 60 ? m1 + (m2 - m1) * h / 60\n : h < 180 ? m2\n : h < 240 ? m1 + (m2 - m1) * (240 - h) / 60\n : m1) * 255;\n }\n\n var deg2rad = Math.PI / 180;\n var rad2deg = 180 / Math.PI;\n\n // https://observablehq.com/@mbostock/lab-and-rgb\n var K = 18,\n Xn = 0.96422,\n Yn = 1,\n Zn = 0.82521,\n t0 = 4 / 29,\n t1 = 6 / 29,\n t2 = 3 * t1 * t1,\n t3 = t1 * t1 * t1;\n\n function labConvert(o) {\n if (o instanceof Lab) return new Lab(o.l, o.a, o.b, o.opacity);\n if (o instanceof Hcl) return hcl2lab(o);\n if (!(o instanceof Rgb)) o = rgbConvert(o);\n var r = rgb2lrgb(o.r),\n g = rgb2lrgb(o.g),\n b = rgb2lrgb(o.b),\n y = xyz2lab((0.2225045 * r + 0.7168786 * g + 0.0606169 * b) / Yn), x, z;\n if (r === g && g === b) x = z = y; else {\n x = xyz2lab((0.4360747 * r + 0.3850649 * g + 0.1430804 * b) / Xn);\n z = xyz2lab((0.0139322 * r + 0.0971045 * g + 0.7141733 * b) / Zn);\n }\n return new Lab(116 * y - 16, 500 * (x - y), 200 * (y - z), o.opacity);\n }\n\n function lab(l, a, b, opacity) {\n return arguments.length === 1 ? labConvert(l) : new Lab(l, a, b, opacity == null ? 1 : opacity);\n }\n\n function Lab(l, a, b, opacity) {\n this.l = +l;\n this.a = +a;\n this.b = +b;\n this.opacity = +opacity;\n }\n\n define(Lab, lab, extend(Color, {\n brighter: function(k) {\n return new Lab(this.l + K * (k == null ? 1 : k), this.a, this.b, this.opacity);\n },\n darker: function(k) {\n return new Lab(this.l - K * (k == null ? 1 : k), this.a, this.b, this.opacity);\n },\n rgb: function() {\n var y = (this.l + 16) / 116,\n x = isNaN(this.a) ? y : y + this.a / 500,\n z = isNaN(this.b) ? y : y - this.b / 200;\n x = Xn * lab2xyz(x);\n y = Yn * lab2xyz(y);\n z = Zn * lab2xyz(z);\n return new Rgb(\n lrgb2rgb( 3.1338561 * x - 1.6168667 * y - 0.4906146 * z),\n lrgb2rgb(-0.9787684 * x + 1.9161415 * y + 0.0334540 * z),\n lrgb2rgb( 0.0719453 * x - 0.2289914 * y + 1.4052427 * z),\n this.opacity\n );\n }\n }));\n\n function xyz2lab(t) {\n return t > t3 ? Math.pow(t, 1 / 3) : t / t2 + t0;\n }\n\n function lab2xyz(t) {\n return t > t1 ? t * t * t : t2 * (t - t0);\n }\n\n function lrgb2rgb(x) {\n return 255 * (x <= 0.0031308 ? 12.92 * x : 1.055 * Math.pow(x, 1 / 2.4) - 0.055);\n }\n\n function rgb2lrgb(x) {\n return (x /= 255) <= 0.04045 ? x / 12.92 : Math.pow((x + 0.055) / 1.055, 2.4);\n }\n\n function hclConvert(o) {\n if (o instanceof Hcl) return new Hcl(o.h, o.c, o.l, o.opacity);\n if (!(o instanceof Lab)) o = labConvert(o);\n if (o.a === 0 && o.b === 0) return new Hcl(NaN, 0 < o.l && o.l < 100 ? 0 : NaN, o.l, o.opacity);\n var h = Math.atan2(o.b, o.a) * rad2deg;\n return new Hcl(h < 0 ? h + 360 : h, Math.sqrt(o.a * o.a + o.b * o.b), o.l, o.opacity);\n }\n\n function hcl(h, c, l, opacity) {\n return arguments.length === 1 ? hclConvert(h) : new Hcl(h, c, l, opacity == null ? 1 : opacity);\n }\n\n function Hcl(h, c, l, opacity) {\n this.h = +h;\n this.c = +c;\n this.l = +l;\n this.opacity = +opacity;\n }\n\n function hcl2lab(o) {\n if (isNaN(o.h)) return new Lab(o.l, 0, 0, o.opacity);\n var h = o.h * deg2rad;\n return new Lab(o.l, Math.cos(h) * o.c, Math.sin(h) * o.c, o.opacity);\n }\n\n define(Hcl, hcl, extend(Color, {\n brighter: function(k) {\n return new Hcl(this.h, this.c, this.l + K * (k == null ? 1 : k), this.opacity);\n },\n darker: function(k) {\n return new Hcl(this.h, this.c, this.l - K * (k == null ? 1 : k), this.opacity);\n },\n rgb: function() {\n return hcl2lab(this).rgb();\n }\n }));\n\n var A = -0.14861,\n B = +1.78277,\n C = -0.29227,\n D = -0.90649,\n E = +1.97294,\n ED = E * D,\n EB = E * B,\n BC_DA = B * C - D * A;\n\n function cubehelixConvert(o) {\n if (o instanceof Cubehelix) return new Cubehelix(o.h, o.s, o.l, o.opacity);\n if (!(o instanceof Rgb)) o = rgbConvert(o);\n var r = o.r / 255,\n g = o.g / 255,\n b = o.b / 255,\n l = (BC_DA * b + ED * r - EB * g) / (BC_DA + ED - EB),\n bl = b - l,\n k = (E * (g - l) - C * bl) / D,\n s = Math.sqrt(k * k + bl * bl) / (E * l * (1 - l)), // NaN if l=0 or l=1\n h = s ? Math.atan2(k, bl) * rad2deg - 120 : NaN;\n return new Cubehelix(h < 0 ? h + 360 : h, s, l, o.opacity);\n }\n\n function cubehelix(h, s, l, opacity) {\n return arguments.length === 1 ? cubehelixConvert(h) : new Cubehelix(h, s, l, opacity == null ? 1 : opacity);\n }\n\n function Cubehelix(h, s, l, opacity) {\n this.h = +h;\n this.s = +s;\n this.l = +l;\n this.opacity = +opacity;\n }\n\n define(Cubehelix, cubehelix, extend(Color, {\n brighter: function(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Cubehelix(this.h, this.s, this.l * k, this.opacity);\n },\n darker: function(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Cubehelix(this.h, this.s, this.l * k, this.opacity);\n },\n rgb: function() {\n var h = isNaN(this.h) ? 0 : (this.h + 120) * deg2rad,\n l = +this.l,\n a = isNaN(this.s) ? 0 : this.s * l * (1 - l),\n cosh = Math.cos(h),\n sinh = Math.sin(h);\n return new Rgb(\n 255 * (l + a * (A * cosh + B * sinh)),\n 255 * (l + a * (C * cosh + D * sinh)),\n 255 * (l + a * (E * cosh)),\n this.opacity\n );\n }\n }));\n\n function constant(x) {\n return function() {\n return x;\n };\n }\n\n function linear(a, d) {\n return function(t) {\n return a + t * d;\n };\n }\n\n function exponential(a, b, y) {\n return a = Math.pow(a, y), b = Math.pow(b, y) - a, y = 1 / y, function(t) {\n return Math.pow(a + t * b, y);\n };\n }\n\n function gamma(y) {\n return (y = +y) === 1 ? nogamma : function(a, b) {\n return b - a ? exponential(a, b, y) : constant(isNaN(a) ? b : a);\n };\n }\n\n function nogamma(a, b) {\n var d = b - a;\n return d ? linear(a, d) : constant(isNaN(a) ? b : a);\n }\n\n var rgb$1 = (function rgbGamma(y) {\n var color = gamma(y);\n\n function rgb$1(start, end) {\n var r = color((start = rgb(start)).r, (end = rgb(end)).r),\n g = color(start.g, end.g),\n b = color(start.b, end.b),\n opacity = nogamma(start.opacity, end.opacity);\n return function(t) {\n start.r = r(t);\n start.g = g(t);\n start.b = b(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n\n rgb$1.gamma = rgbGamma;\n\n return rgb$1;\n })(1);\n\n function numberArray(a, b) {\n if (!b) b = [];\n var n = a ? Math.min(b.length, a.length) : 0,\n c = b.slice(),\n i;\n return function(t) {\n for (i = 0; i < n; ++i) c[i] = a[i] * (1 - t) + b[i] * t;\n return c;\n };\n }\n\n function isNumberArray(x) {\n return ArrayBuffer.isView(x) && !(x instanceof DataView);\n }\n\n function genericArray(a, b) {\n var nb = b ? b.length : 0,\n na = a ? Math.min(nb, a.length) : 0,\n x = new Array(na),\n c = new Array(nb),\n i;\n\n for (i = 0; i < na; ++i) x[i] = interpolate(a[i], b[i]);\n for (; i < nb; ++i) c[i] = b[i];\n\n return function(t) {\n for (i = 0; i < na; ++i) c[i] = x[i](t);\n return c;\n };\n }\n\n function date(a, b) {\n var d = new Date;\n return a = +a, b = +b, function(t) {\n return d.setTime(a * (1 - t) + b * t), d;\n };\n }\n\n function interpolateNumber(a, b) {\n return a = +a, b = +b, function(t) {\n return a * (1 - t) + b * t;\n };\n }\n\n function object(a, b) {\n var i = {},\n c = {},\n k;\n\n if (a === null || typeof a !== \"object\") a = {};\n if (b === null || typeof b !== \"object\") b = {};\n\n for (k in b) {\n if (k in a) {\n i[k] = interpolate(a[k], b[k]);\n } else {\n c[k] = b[k];\n }\n }\n\n return function(t) {\n for (k in i) c[k] = i[k](t);\n return c;\n };\n }\n\n var reA = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n reB = new RegExp(reA.source, \"g\");\n\n function zero(b) {\n return function() {\n return b;\n };\n }\n\n function one(b) {\n return function(t) {\n return b(t) + \"\";\n };\n }\n\n function string(a, b) {\n var bi = reA.lastIndex = reB.lastIndex = 0, // scan index for next number in b\n am, // current match in a\n bm, // current match in b\n bs, // string preceding current number in b, if any\n i = -1, // index in s\n s = [], // string constants and placeholders\n q = []; // number interpolators\n\n // Coerce inputs to strings.\n a = a + \"\", b = b + \"\";\n\n // Interpolate pairs of numbers in a & b.\n while ((am = reA.exec(a))\n && (bm = reB.exec(b))) {\n if ((bs = bm.index) > bi) { // a string precedes the next number in b\n bs = b.slice(bi, bs);\n if (s[i]) s[i] += bs; // coalesce with previous string\n else s[++i] = bs;\n }\n if ((am = am[0]) === (bm = bm[0])) { // numbers in a & b match\n if (s[i]) s[i] += bm; // coalesce with previous string\n else s[++i] = bm;\n } else { // interpolate non-matching numbers\n s[++i] = null;\n q.push({i: i, x: interpolateNumber(am, bm)});\n }\n bi = reB.lastIndex;\n }\n\n // Add remains of b.\n if (bi < b.length) {\n bs = b.slice(bi);\n if (s[i]) s[i] += bs; // coalesce with previous string\n else s[++i] = bs;\n }\n\n // Special optimization for only a single match.\n // Otherwise, interpolate each of the numbers and rejoin the string.\n return s.length < 2 ? (q[0]\n ? one(q[0].x)\n : zero(b))\n : (b = q.length, function(t) {\n for (var i = 0, o; i < b; ++i) s[(o = q[i]).i] = o.x(t);\n return s.join(\"\");\n });\n }\n\n function interpolate(a, b) {\n var t = typeof b, c;\n return b == null || t === \"boolean\" ? constant(b)\n : (t === \"number\" ? interpolateNumber\n : t === \"string\" ? ((c = color(b)) ? (b = c, rgb$1) : string)\n : b instanceof color ? rgb$1\n : b instanceof Date ? date\n : isNumberArray(b) ? numberArray\n : Array.isArray(b) ? genericArray\n : typeof b.valueOf !== \"function\" && typeof b.toString !== \"function\" || isNaN(b) ? object\n : interpolateNumber)(a, b);\n }\n\n function interpolateRound(a, b) {\n return a = +a, b = +b, function(t) {\n return Math.round(a * (1 - t) + b * t);\n };\n }\n\n function constant$1(x) {\n return function() {\n return x;\n };\n }\n\n function number(x) {\n return +x;\n }\n\n var unit = [0, 1];\n\n function identity(x) {\n return x;\n }\n\n function normalize(a, b) {\n return (b -= (a = +a))\n ? function(x) { return (x - a) / b; }\n : constant$1(isNaN(b) ? NaN : 0.5);\n }\n\n function clamper(a, b) {\n var t;\n if (a > b) t = a, a = b, b = t;\n return function(x) { return Math.max(a, Math.min(b, x)); };\n }\n\n // normalize(a, b)(x) takes a domain value x in [a,b] and returns the corresponding parameter t in [0,1].\n // interpolate(a, b)(t) takes a parameter t in [0,1] and returns the corresponding range value x in [a,b].\n function bimap(domain, range, interpolate) {\n var d0 = domain[0], d1 = domain[1], r0 = range[0], r1 = range[1];\n if (d1 < d0) d0 = normalize(d1, d0), r0 = interpolate(r1, r0);\n else d0 = normalize(d0, d1), r0 = interpolate(r0, r1);\n return function(x) { return r0(d0(x)); };\n }\n\n function polymap(domain, range, interpolate) {\n var j = Math.min(domain.length, range.length) - 1,\n d = new Array(j),\n r = new Array(j),\n i = -1;\n\n // Reverse descending domains.\n if (domain[j] < domain[0]) {\n domain = domain.slice().reverse();\n range = range.slice().reverse();\n }\n\n while (++i < j) {\n d[i] = normalize(domain[i], domain[i + 1]);\n r[i] = interpolate(range[i], range[i + 1]);\n }\n\n return function(x) {\n var i = bisectRight(domain, x, 1, j) - 1;\n return r[i](d[i](x));\n };\n }\n\n function copy(source, target) {\n return target\n .domain(source.domain())\n .range(source.range())\n .interpolate(source.interpolate())\n .clamp(source.clamp())\n .unknown(source.unknown());\n }\n\n function transformer() {\n var domain = unit,\n range = unit,\n interpolate$1 = interpolate,\n transform,\n untransform,\n unknown,\n clamp = identity,\n piecewise,\n output,\n input;\n\n function rescale() {\n var n = Math.min(domain.length, range.length);\n if (clamp !== identity) clamp = clamper(domain[0], domain[n - 1]);\n piecewise = n > 2 ? polymap : bimap;\n output = input = null;\n return scale;\n }\n\n function scale(x) {\n return isNaN(x = +x) ? unknown : (output || (output = piecewise(domain.map(transform), range, interpolate$1)))(transform(clamp(x)));\n }\n\n scale.invert = function(y) {\n return clamp(untransform((input || (input = piecewise(range, domain.map(transform), interpolateNumber)))(y)));\n };\n\n scale.domain = function(_) {\n return arguments.length ? (domain = Array.from(_, number), rescale()) : domain.slice();\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = Array.from(_), rescale()) : range.slice();\n };\n\n scale.rangeRound = function(_) {\n return range = Array.from(_), interpolate$1 = interpolateRound, rescale();\n };\n\n scale.clamp = function(_) {\n return arguments.length ? (clamp = _ ? true : identity, rescale()) : clamp !== identity;\n };\n\n scale.interpolate = function(_) {\n return arguments.length ? (interpolate$1 = _, rescale()) : interpolate$1;\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n return function(t, u) {\n transform = t, untransform = u;\n return rescale();\n };\n }\n\n function continuous() {\n return transformer()(identity, identity);\n }\n\n // Computes the decimal coefficient and exponent of the specified number x with\n // significant digits p, where x is positive and p is in [1, 21] or undefined.\n // For example, formatDecimal(1.23) returns [\"123\", 0].\n function formatDecimal(x, p) {\n if ((i = (x = p ? x.toExponential(p - 1) : x.toExponential()).indexOf(\"e\")) < 0) return null; // NaN, ±Infinity\n var i, coefficient = x.slice(0, i);\n\n // The string returned by toExponential either has the form \\d\\.\\d+e[-+]\\d+\n // (e.g., 1.2e+3) or the form \\de[-+]\\d+ (e.g., 1e+3).\n return [\n coefficient.length > 1 ? coefficient[0] + coefficient.slice(2) : coefficient,\n +x.slice(i + 1)\n ];\n }\n\n function exponent(x) {\n return x = formatDecimal(Math.abs(x)), x ? x[1] : NaN;\n }\n\n function formatGroup(grouping, thousands) {\n return function(value, width) {\n var i = value.length,\n t = [],\n j = 0,\n g = grouping[0],\n length = 0;\n\n while (i > 0 && g > 0) {\n if (length + g + 1 > width) g = Math.max(1, width - length);\n t.push(value.substring(i -= g, i + g));\n if ((length += g + 1) > width) break;\n g = grouping[j = (j + 1) % grouping.length];\n }\n\n return t.reverse().join(thousands);\n };\n }\n\n function formatNumerals(numerals) {\n return function(value) {\n return value.replace(/[0-9]/g, function(i) {\n return numerals[+i];\n });\n };\n }\n\n // [[fill]align][sign][symbol][0][width][,][.precision][~][type]\n var re = /^(?:(.)?([<>=^]))?([+\\-( ])?([$#])?(0)?(\\d+)?(,)?(\\.\\d+)?(~)?([a-z%])?$/i;\n\n function formatSpecifier(specifier) {\n if (!(match = re.exec(specifier))) throw new Error(\"invalid format: \" + specifier);\n var match;\n return new FormatSpecifier({\n fill: match[1],\n align: match[2],\n sign: match[3],\n symbol: match[4],\n zero: match[5],\n width: match[6],\n comma: match[7],\n precision: match[8] && match[8].slice(1),\n trim: match[9],\n type: match[10]\n });\n }\n\n formatSpecifier.prototype = FormatSpecifier.prototype; // instanceof\n\n function FormatSpecifier(specifier) {\n this.fill = specifier.fill === undefined ? \" \" : specifier.fill + \"\";\n this.align = specifier.align === undefined ? \">\" : specifier.align + \"\";\n this.sign = specifier.sign === undefined ? \"-\" : specifier.sign + \"\";\n this.symbol = specifier.symbol === undefined ? \"\" : specifier.symbol + \"\";\n this.zero = !!specifier.zero;\n this.width = specifier.width === undefined ? undefined : +specifier.width;\n this.comma = !!specifier.comma;\n this.precision = specifier.precision === undefined ? undefined : +specifier.precision;\n this.trim = !!specifier.trim;\n this.type = specifier.type === undefined ? \"\" : specifier.type + \"\";\n }\n\n FormatSpecifier.prototype.toString = function() {\n return this.fill\n + this.align\n + this.sign\n + this.symbol\n + (this.zero ? \"0\" : \"\")\n + (this.width === undefined ? \"\" : Math.max(1, this.width | 0))\n + (this.comma ? \",\" : \"\")\n + (this.precision === undefined ? \"\" : \".\" + Math.max(0, this.precision | 0))\n + (this.trim ? \"~\" : \"\")\n + this.type;\n };\n\n // Trims insignificant zeros, e.g., replaces 1.2000k with 1.2k.\n function formatTrim(s) {\n out: for (var n = s.length, i = 1, i0 = -1, i1; i < n; ++i) {\n switch (s[i]) {\n case \".\": i0 = i1 = i; break;\n case \"0\": if (i0 === 0) i0 = i; i1 = i; break;\n default: if (!+s[i]) break out; if (i0 > 0) i0 = 0; break;\n }\n }\n return i0 > 0 ? s.slice(0, i0) + s.slice(i1 + 1) : s;\n }\n\n var prefixExponent;\n\n function formatPrefixAuto(x, p) {\n var d = formatDecimal(x, p);\n if (!d) return x + \"\";\n var coefficient = d[0],\n exponent = d[1],\n i = exponent - (prefixExponent = Math.max(-8, Math.min(8, Math.floor(exponent / 3))) * 3) + 1,\n n = coefficient.length;\n return i === n ? coefficient\n : i > n ? coefficient + new Array(i - n + 1).join(\"0\")\n : i > 0 ? coefficient.slice(0, i) + \".\" + coefficient.slice(i)\n : \"0.\" + new Array(1 - i).join(\"0\") + formatDecimal(x, Math.max(0, p + i - 1))[0]; // less than 1y!\n }\n\n function formatRounded(x, p) {\n var d = formatDecimal(x, p);\n if (!d) return x + \"\";\n var coefficient = d[0],\n exponent = d[1];\n return exponent < 0 ? \"0.\" + new Array(-exponent).join(\"0\") + coefficient\n : coefficient.length > exponent + 1 ? coefficient.slice(0, exponent + 1) + \".\" + coefficient.slice(exponent + 1)\n : coefficient + new Array(exponent - coefficient.length + 2).join(\"0\");\n }\n\n var formatTypes = {\n \"%\": function(x, p) { return (x * 100).toFixed(p); },\n \"b\": function(x) { return Math.round(x).toString(2); },\n \"c\": function(x) { return x + \"\"; },\n \"d\": function(x) { return Math.round(x).toString(10); },\n \"e\": function(x, p) { return x.toExponential(p); },\n \"f\": function(x, p) { return x.toFixed(p); },\n \"g\": function(x, p) { return x.toPrecision(p); },\n \"o\": function(x) { return Math.round(x).toString(8); },\n \"p\": function(x, p) { return formatRounded(x * 100, p); },\n \"r\": formatRounded,\n \"s\": formatPrefixAuto,\n \"X\": function(x) { return Math.round(x).toString(16).toUpperCase(); },\n \"x\": function(x) { return Math.round(x).toString(16); }\n };\n\n function identity$1(x) {\n return x;\n }\n\n var map = Array.prototype.map,\n prefixes = [\"y\",\"z\",\"a\",\"f\",\"p\",\"n\",\"µ\",\"m\",\"\",\"k\",\"M\",\"G\",\"T\",\"P\",\"E\",\"Z\",\"Y\"];\n\n function formatLocale(locale) {\n var group = locale.grouping === undefined || locale.thousands === undefined ? identity$1 : formatGroup(map.call(locale.grouping, Number), locale.thousands + \"\"),\n currencyPrefix = locale.currency === undefined ? \"\" : locale.currency[0] + \"\",\n currencySuffix = locale.currency === undefined ? \"\" : locale.currency[1] + \"\",\n decimal = locale.decimal === undefined ? \".\" : locale.decimal + \"\",\n numerals = locale.numerals === undefined ? identity$1 : formatNumerals(map.call(locale.numerals, String)),\n percent = locale.percent === undefined ? \"%\" : locale.percent + \"\",\n minus = locale.minus === undefined ? \"-\" : locale.minus + \"\",\n nan = locale.nan === undefined ? \"NaN\" : locale.nan + \"\";\n\n function newFormat(specifier) {\n specifier = formatSpecifier(specifier);\n\n var fill = specifier.fill,\n align = specifier.align,\n sign = specifier.sign,\n symbol = specifier.symbol,\n zero = specifier.zero,\n width = specifier.width,\n comma = specifier.comma,\n precision = specifier.precision,\n trim = specifier.trim,\n type = specifier.type;\n\n // The \"n\" type is an alias for \",g\".\n if (type === \"n\") comma = true, type = \"g\";\n\n // The \"\" type, and any invalid type, is an alias for \".12~g\".\n else if (!formatTypes[type]) precision === undefined && (precision = 12), trim = true, type = \"g\";\n\n // If zero fill is specified, padding goes after sign and before digits.\n if (zero || (fill === \"0\" && align === \"=\")) zero = true, fill = \"0\", align = \"=\";\n\n // Compute the prefix and suffix.\n // For SI-prefix, the suffix is lazily computed.\n var prefix = symbol === \"$\" ? currencyPrefix : symbol === \"#\" && /[boxX]/.test(type) ? \"0\" + type.toLowerCase() : \"\",\n suffix = symbol === \"$\" ? currencySuffix : /[%p]/.test(type) ? percent : \"\";\n\n // What format function should we use?\n // Is this an integer type?\n // Can this type generate exponential notation?\n var formatType = formatTypes[type],\n maybeSuffix = /[defgprs%]/.test(type);\n\n // Set the default precision if not specified,\n // or clamp the specified precision to the supported range.\n // For significant precision, it must be in [1, 21].\n // For fixed precision, it must be in [0, 20].\n precision = precision === undefined ? 6\n : /[gprs]/.test(type) ? Math.max(1, Math.min(21, precision))\n : Math.max(0, Math.min(20, precision));\n\n function format(value) {\n var valuePrefix = prefix,\n valueSuffix = suffix,\n i, n, c;\n\n if (type === \"c\") {\n valueSuffix = formatType(value) + valueSuffix;\n value = \"\";\n } else {\n value = +value;\n\n // Determine the sign. -0 is not less than 0, but 1 / -0 is!\n var valueNegative = value < 0 || 1 / value < 0;\n\n // Perform the initial formatting.\n value = isNaN(value) ? nan : formatType(Math.abs(value), precision);\n\n // Trim insignificant zeros.\n if (trim) value = formatTrim(value);\n\n // If a negative value rounds to zero after formatting, and no explicit positive sign is requested, hide the sign.\n if (valueNegative && +value === 0 && sign !== \"+\") valueNegative = false;\n\n // Compute the prefix and suffix.\n valuePrefix = (valueNegative ? (sign === \"(\" ? sign : minus) : sign === \"-\" || sign === \"(\" ? \"\" : sign) + valuePrefix;\n valueSuffix = (type === \"s\" ? prefixes[8 + prefixExponent / 3] : \"\") + valueSuffix + (valueNegative && sign === \"(\" ? \")\" : \"\");\n\n // Break the formatted value into the integer “value” part that can be\n // grouped, and fractional or exponential “suffix” part that is not.\n if (maybeSuffix) {\n i = -1, n = value.length;\n while (++i < n) {\n if (c = value.charCodeAt(i), 48 > c || c > 57) {\n valueSuffix = (c === 46 ? decimal + value.slice(i + 1) : value.slice(i)) + valueSuffix;\n value = value.slice(0, i);\n break;\n }\n }\n }\n }\n\n // If the fill character is not \"0\", grouping is applied before padding.\n if (comma && !zero) value = group(value, Infinity);\n\n // Compute the padding.\n var length = valuePrefix.length + value.length + valueSuffix.length,\n padding = length < width ? new Array(width - length + 1).join(fill) : \"\";\n\n // If the fill character is \"0\", grouping is applied after padding.\n if (comma && zero) value = group(padding + value, padding.length ? width - valueSuffix.length : Infinity), padding = \"\";\n\n // Reconstruct the final output based on the desired alignment.\n switch (align) {\n case \"<\": value = valuePrefix + value + valueSuffix + padding; break;\n case \"=\": value = valuePrefix + padding + value + valueSuffix; break;\n case \"^\": value = padding.slice(0, length = padding.length >> 1) + valuePrefix + value + valueSuffix + padding.slice(length); break;\n default: value = padding + valuePrefix + value + valueSuffix; break;\n }\n\n return numerals(value);\n }\n\n format.toString = function() {\n return specifier + \"\";\n };\n\n return format;\n }\n\n function formatPrefix(specifier, value) {\n var f = newFormat((specifier = formatSpecifier(specifier), specifier.type = \"f\", specifier)),\n e = Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3,\n k = Math.pow(10, -e),\n prefix = prefixes[8 + e / 3];\n return function(value) {\n return f(k * value) + prefix;\n };\n }\n\n return {\n format: newFormat,\n formatPrefix: formatPrefix\n };\n }\n\n var locale;\n var format;\n var formatPrefix;\n\n defaultLocale({\n decimal: \".\",\n thousands: \",\",\n grouping: [3],\n currency: [\"$\", \"\"],\n minus: \"-\"\n });\n\n function defaultLocale(definition) {\n locale = formatLocale(definition);\n format = locale.format;\n formatPrefix = locale.formatPrefix;\n return locale;\n }\n\n function precisionFixed(step) {\n return Math.max(0, -exponent(Math.abs(step)));\n }\n\n function precisionPrefix(step, value) {\n return Math.max(0, Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3 - exponent(Math.abs(step)));\n }\n\n function precisionRound(step, max) {\n step = Math.abs(step), max = Math.abs(max) - step;\n return Math.max(0, exponent(max) - exponent(step)) + 1;\n }\n\n function tickFormat(start, stop, count, specifier) {\n var step = tickStep(start, stop, count),\n precision;\n specifier = formatSpecifier(specifier == null ? \",f\" : specifier);\n switch (specifier.type) {\n case \"s\": {\n var value = Math.max(Math.abs(start), Math.abs(stop));\n if (specifier.precision == null && !isNaN(precision = precisionPrefix(step, value))) specifier.precision = precision;\n return formatPrefix(specifier, value);\n }\n case \"\":\n case \"e\":\n case \"g\":\n case \"p\":\n case \"r\": {\n if (specifier.precision == null && !isNaN(precision = precisionRound(step, Math.max(Math.abs(start), Math.abs(stop))))) specifier.precision = precision - (specifier.type === \"e\");\n break;\n }\n case \"f\":\n case \"%\": {\n if (specifier.precision == null && !isNaN(precision = precisionFixed(step))) specifier.precision = precision - (specifier.type === \"%\") * 2;\n break;\n }\n }\n return format(specifier);\n }\n\n function linearish(scale) {\n var domain = scale.domain;\n\n scale.ticks = function(count) {\n var d = domain();\n return ticks(d[0], d[d.length - 1], count == null ? 10 : count);\n };\n\n scale.tickFormat = function(count, specifier) {\n var d = domain();\n return tickFormat(d[0], d[d.length - 1], count == null ? 10 : count, specifier);\n };\n\n scale.nice = function(count) {\n if (count == null) count = 10;\n\n var d = domain(),\n i0 = 0,\n i1 = d.length - 1,\n start = d[i0],\n stop = d[i1],\n step;\n\n if (stop < start) {\n step = start, start = stop, stop = step;\n step = i0, i0 = i1, i1 = step;\n }\n\n step = tickIncrement(start, stop, count);\n\n if (step > 0) {\n start = Math.floor(start / step) * step;\n stop = Math.ceil(stop / step) * step;\n step = tickIncrement(start, stop, count);\n } else if (step < 0) {\n start = Math.ceil(start * step) / step;\n stop = Math.floor(stop * step) / step;\n step = tickIncrement(start, stop, count);\n }\n\n if (step > 0) {\n d[i0] = Math.floor(start / step) * step;\n d[i1] = Math.ceil(stop / step) * step;\n domain(d);\n } else if (step < 0) {\n d[i0] = Math.ceil(start * step) / step;\n d[i1] = Math.floor(stop * step) / step;\n domain(d);\n }\n\n return scale;\n };\n\n return scale;\n }\n\n function linear$1() {\n var scale = continuous();\n\n scale.copy = function() {\n return copy(scale, linear$1());\n };\n\n initRange.apply(scale, arguments);\n\n return linearish(scale);\n }\n\n var t0$1 = new Date,\n t1$1 = new Date;\n\n function newInterval(floori, offseti, count, field) {\n\n function interval(date) {\n return floori(date = arguments.length === 0 ? new Date : new Date(+date)), date;\n }\n\n interval.floor = function(date) {\n return floori(date = new Date(+date)), date;\n };\n\n interval.ceil = function(date) {\n return floori(date = new Date(date - 1)), offseti(date, 1), floori(date), date;\n };\n\n interval.round = function(date) {\n var d0 = interval(date),\n d1 = interval.ceil(date);\n return date - d0 < d1 - date ? d0 : d1;\n };\n\n interval.offset = function(date, step) {\n return offseti(date = new Date(+date), step == null ? 1 : Math.floor(step)), date;\n };\n\n interval.range = function(start, stop, step) {\n var range = [], previous;\n start = interval.ceil(start);\n step = step == null ? 1 : Math.floor(step);\n if (!(start < stop) || !(step > 0)) return range; // also handles Invalid Date\n do range.push(previous = new Date(+start)), offseti(start, step), floori(start);\n while (previous < start && start < stop);\n return range;\n };\n\n interval.filter = function(test) {\n return newInterval(function(date) {\n if (date >= date) while (floori(date), !test(date)) date.setTime(date - 1);\n }, function(date, step) {\n if (date >= date) {\n if (step < 0) while (++step <= 0) {\n while (offseti(date, -1), !test(date)) {} // eslint-disable-line no-empty\n } else while (--step >= 0) {\n while (offseti(date, +1), !test(date)) {} // eslint-disable-line no-empty\n }\n }\n });\n };\n\n if (count) {\n interval.count = function(start, end) {\n t0$1.setTime(+start), t1$1.setTime(+end);\n floori(t0$1), floori(t1$1);\n return Math.floor(count(t0$1, t1$1));\n };\n\n interval.every = function(step) {\n step = Math.floor(step);\n return !isFinite(step) || !(step > 0) ? null\n : !(step > 1) ? interval\n : interval.filter(field\n ? function(d) { return field(d) % step === 0; }\n : function(d) { return interval.count(0, d) % step === 0; });\n };\n }\n\n return interval;\n }\n\n var millisecond = newInterval(function() {\n // noop\n }, function(date, step) {\n date.setTime(+date + step);\n }, function(start, end) {\n return end - start;\n });\n\n // An optimized implementation for this simple case.\n millisecond.every = function(k) {\n k = Math.floor(k);\n if (!isFinite(k) || !(k > 0)) return null;\n if (!(k > 1)) return millisecond;\n return newInterval(function(date) {\n date.setTime(Math.floor(date / k) * k);\n }, function(date, step) {\n date.setTime(+date + step * k);\n }, function(start, end) {\n return (end - start) / k;\n });\n };\n\n var durationSecond = 1e3;\n var durationMinute = 6e4;\n var durationHour = 36e5;\n var durationDay = 864e5;\n var durationWeek = 6048e5;\n\n var second = newInterval(function(date) {\n date.setTime(date - date.getMilliseconds());\n }, function(date, step) {\n date.setTime(+date + step * durationSecond);\n }, function(start, end) {\n return (end - start) / durationSecond;\n }, function(date) {\n return date.getUTCSeconds();\n });\n\n var minute = newInterval(function(date) {\n date.setTime(date - date.getMilliseconds() - date.getSeconds() * durationSecond);\n }, function(date, step) {\n date.setTime(+date + step * durationMinute);\n }, function(start, end) {\n return (end - start) / durationMinute;\n }, function(date) {\n return date.getMinutes();\n });\n\n var hour = newInterval(function(date) {\n date.setTime(date - date.getMilliseconds() - date.getSeconds() * durationSecond - date.getMinutes() * durationMinute);\n }, function(date, step) {\n date.setTime(+date + step * durationHour);\n }, function(start, end) {\n return (end - start) / durationHour;\n }, function(date) {\n return date.getHours();\n });\n\n var day = newInterval(function(date) {\n date.setHours(0, 0, 0, 0);\n }, function(date, step) {\n date.setDate(date.getDate() + step);\n }, function(start, end) {\n return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationDay;\n }, function(date) {\n return date.getDate() - 1;\n });\n\n function weekday(i) {\n return newInterval(function(date) {\n date.setDate(date.getDate() - (date.getDay() + 7 - i) % 7);\n date.setHours(0, 0, 0, 0);\n }, function(date, step) {\n date.setDate(date.getDate() + step * 7);\n }, function(start, end) {\n return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationWeek;\n });\n }\n\n var sunday = weekday(0);\n var monday = weekday(1);\n var tuesday = weekday(2);\n var wednesday = weekday(3);\n var thursday = weekday(4);\n var friday = weekday(5);\n var saturday = weekday(6);\n\n var month = newInterval(function(date) {\n date.setDate(1);\n date.setHours(0, 0, 0, 0);\n }, function(date, step) {\n date.setMonth(date.getMonth() + step);\n }, function(start, end) {\n return end.getMonth() - start.getMonth() + (end.getFullYear() - start.getFullYear()) * 12;\n }, function(date) {\n return date.getMonth();\n });\n\n var year = newInterval(function(date) {\n date.setMonth(0, 1);\n date.setHours(0, 0, 0, 0);\n }, function(date, step) {\n date.setFullYear(date.getFullYear() + step);\n }, function(start, end) {\n return end.getFullYear() - start.getFullYear();\n }, function(date) {\n return date.getFullYear();\n });\n\n // An optimized implementation for this simple case.\n year.every = function(k) {\n return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : newInterval(function(date) {\n date.setFullYear(Math.floor(date.getFullYear() / k) * k);\n date.setMonth(0, 1);\n date.setHours(0, 0, 0, 0);\n }, function(date, step) {\n date.setFullYear(date.getFullYear() + step * k);\n });\n };\n\n var utcMinute = newInterval(function(date) {\n date.setUTCSeconds(0, 0);\n }, function(date, step) {\n date.setTime(+date + step * durationMinute);\n }, function(start, end) {\n return (end - start) / durationMinute;\n }, function(date) {\n return date.getUTCMinutes();\n });\n\n var utcHour = newInterval(function(date) {\n date.setUTCMinutes(0, 0, 0);\n }, function(date, step) {\n date.setTime(+date + step * durationHour);\n }, function(start, end) {\n return (end - start) / durationHour;\n }, function(date) {\n return date.getUTCHours();\n });\n\n var utcDay = newInterval(function(date) {\n date.setUTCHours(0, 0, 0, 0);\n }, function(date, step) {\n date.setUTCDate(date.getUTCDate() + step);\n }, function(start, end) {\n return (end - start) / durationDay;\n }, function(date) {\n return date.getUTCDate() - 1;\n });\n\n function utcWeekday(i) {\n return newInterval(function(date) {\n date.setUTCDate(date.getUTCDate() - (date.getUTCDay() + 7 - i) % 7);\n date.setUTCHours(0, 0, 0, 0);\n }, function(date, step) {\n date.setUTCDate(date.getUTCDate() + step * 7);\n }, function(start, end) {\n return (end - start) / durationWeek;\n });\n }\n\n var utcSunday = utcWeekday(0);\n var utcMonday = utcWeekday(1);\n var utcTuesday = utcWeekday(2);\n var utcWednesday = utcWeekday(3);\n var utcThursday = utcWeekday(4);\n var utcFriday = utcWeekday(5);\n var utcSaturday = utcWeekday(6);\n\n var utcMonth = newInterval(function(date) {\n date.setUTCDate(1);\n date.setUTCHours(0, 0, 0, 0);\n }, function(date, step) {\n date.setUTCMonth(date.getUTCMonth() + step);\n }, function(start, end) {\n return end.getUTCMonth() - start.getUTCMonth() + (end.getUTCFullYear() - start.getUTCFullYear()) * 12;\n }, function(date) {\n return date.getUTCMonth();\n });\n\n var utcYear = newInterval(function(date) {\n date.setUTCMonth(0, 1);\n date.setUTCHours(0, 0, 0, 0);\n }, function(date, step) {\n date.setUTCFullYear(date.getUTCFullYear() + step);\n }, function(start, end) {\n return end.getUTCFullYear() - start.getUTCFullYear();\n }, function(date) {\n return date.getUTCFullYear();\n });\n\n // An optimized implementation for this simple case.\n utcYear.every = function(k) {\n return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : newInterval(function(date) {\n date.setUTCFullYear(Math.floor(date.getUTCFullYear() / k) * k);\n date.setUTCMonth(0, 1);\n date.setUTCHours(0, 0, 0, 0);\n }, function(date, step) {\n date.setUTCFullYear(date.getUTCFullYear() + step * k);\n });\n };\n\n function localDate(d) {\n if (0 <= d.y && d.y < 100) {\n var date = new Date(-1, d.m, d.d, d.H, d.M, d.S, d.L);\n date.setFullYear(d.y);\n return date;\n }\n return new Date(d.y, d.m, d.d, d.H, d.M, d.S, d.L);\n }\n\n function utcDate(d) {\n if (0 <= d.y && d.y < 100) {\n var date = new Date(Date.UTC(-1, d.m, d.d, d.H, d.M, d.S, d.L));\n date.setUTCFullYear(d.y);\n return date;\n }\n return new Date(Date.UTC(d.y, d.m, d.d, d.H, d.M, d.S, d.L));\n }\n\n function newDate(y, m, d) {\n return {y: y, m: m, d: d, H: 0, M: 0, S: 0, L: 0};\n }\n\n function formatLocale$1(locale) {\n var locale_dateTime = locale.dateTime,\n locale_date = locale.date,\n locale_time = locale.time,\n locale_periods = locale.periods,\n locale_weekdays = locale.days,\n locale_shortWeekdays = locale.shortDays,\n locale_months = locale.months,\n locale_shortMonths = locale.shortMonths;\n\n var periodRe = formatRe(locale_periods),\n periodLookup = formatLookup(locale_periods),\n weekdayRe = formatRe(locale_weekdays),\n weekdayLookup = formatLookup(locale_weekdays),\n shortWeekdayRe = formatRe(locale_shortWeekdays),\n shortWeekdayLookup = formatLookup(locale_shortWeekdays),\n monthRe = formatRe(locale_months),\n monthLookup = formatLookup(locale_months),\n shortMonthRe = formatRe(locale_shortMonths),\n shortMonthLookup = formatLookup(locale_shortMonths);\n\n var formats = {\n \"a\": formatShortWeekday,\n \"A\": formatWeekday,\n \"b\": formatShortMonth,\n \"B\": formatMonth,\n \"c\": null,\n \"d\": formatDayOfMonth,\n \"e\": formatDayOfMonth,\n \"f\": formatMicroseconds,\n \"H\": formatHour24,\n \"I\": formatHour12,\n \"j\": formatDayOfYear,\n \"L\": formatMilliseconds,\n \"m\": formatMonthNumber,\n \"M\": formatMinutes,\n \"p\": formatPeriod,\n \"q\": formatQuarter,\n \"Q\": formatUnixTimestamp,\n \"s\": formatUnixTimestampSeconds,\n \"S\": formatSeconds,\n \"u\": formatWeekdayNumberMonday,\n \"U\": formatWeekNumberSunday,\n \"V\": formatWeekNumberISO,\n \"w\": formatWeekdayNumberSunday,\n \"W\": formatWeekNumberMonday,\n \"x\": null,\n \"X\": null,\n \"y\": formatYear,\n \"Y\": formatFullYear,\n \"Z\": formatZone,\n \"%\": formatLiteralPercent\n };\n\n var utcFormats = {\n \"a\": formatUTCShortWeekday,\n \"A\": formatUTCWeekday,\n \"b\": formatUTCShortMonth,\n \"B\": formatUTCMonth,\n \"c\": null,\n \"d\": formatUTCDayOfMonth,\n \"e\": formatUTCDayOfMonth,\n \"f\": formatUTCMicroseconds,\n \"H\": formatUTCHour24,\n \"I\": formatUTCHour12,\n \"j\": formatUTCDayOfYear,\n \"L\": formatUTCMilliseconds,\n \"m\": formatUTCMonthNumber,\n \"M\": formatUTCMinutes,\n \"p\": formatUTCPeriod,\n \"q\": formatUTCQuarter,\n \"Q\": formatUnixTimestamp,\n \"s\": formatUnixTimestampSeconds,\n \"S\": formatUTCSeconds,\n \"u\": formatUTCWeekdayNumberMonday,\n \"U\": formatUTCWeekNumberSunday,\n \"V\": formatUTCWeekNumberISO,\n \"w\": formatUTCWeekdayNumberSunday,\n \"W\": formatUTCWeekNumberMonday,\n \"x\": null,\n \"X\": null,\n \"y\": formatUTCYear,\n \"Y\": formatUTCFullYear,\n \"Z\": formatUTCZone,\n \"%\": formatLiteralPercent\n };\n\n var parses = {\n \"a\": parseShortWeekday,\n \"A\": parseWeekday,\n \"b\": parseShortMonth,\n \"B\": parseMonth,\n \"c\": parseLocaleDateTime,\n \"d\": parseDayOfMonth,\n \"e\": parseDayOfMonth,\n \"f\": parseMicroseconds,\n \"H\": parseHour24,\n \"I\": parseHour24,\n \"j\": parseDayOfYear,\n \"L\": parseMilliseconds,\n \"m\": parseMonthNumber,\n \"M\": parseMinutes,\n \"p\": parsePeriod,\n \"q\": parseQuarter,\n \"Q\": parseUnixTimestamp,\n \"s\": parseUnixTimestampSeconds,\n \"S\": parseSeconds,\n \"u\": parseWeekdayNumberMonday,\n \"U\": parseWeekNumberSunday,\n \"V\": parseWeekNumberISO,\n \"w\": parseWeekdayNumberSunday,\n \"W\": parseWeekNumberMonday,\n \"x\": parseLocaleDate,\n \"X\": parseLocaleTime,\n \"y\": parseYear,\n \"Y\": parseFullYear,\n \"Z\": parseZone,\n \"%\": parseLiteralPercent\n };\n\n // These recursive directive definitions must be deferred.\n formats.x = newFormat(locale_date, formats);\n formats.X = newFormat(locale_time, formats);\n formats.c = newFormat(locale_dateTime, formats);\n utcFormats.x = newFormat(locale_date, utcFormats);\n utcFormats.X = newFormat(locale_time, utcFormats);\n utcFormats.c = newFormat(locale_dateTime, utcFormats);\n\n function newFormat(specifier, formats) {\n return function(date) {\n var string = [],\n i = -1,\n j = 0,\n n = specifier.length,\n c,\n pad,\n format;\n\n if (!(date instanceof Date)) date = new Date(+date);\n\n while (++i < n) {\n if (specifier.charCodeAt(i) === 37) {\n string.push(specifier.slice(j, i));\n if ((pad = pads[c = specifier.charAt(++i)]) != null) c = specifier.charAt(++i);\n else pad = c === \"e\" ? \" \" : \"0\";\n if (format = formats[c]) c = format(date, pad);\n string.push(c);\n j = i + 1;\n }\n }\n\n string.push(specifier.slice(j, i));\n return string.join(\"\");\n };\n }\n\n function newParse(specifier, Z) {\n return function(string) {\n var d = newDate(1900, undefined, 1),\n i = parseSpecifier(d, specifier, string += \"\", 0),\n week, day$1;\n if (i != string.length) return null;\n\n // If a UNIX timestamp is specified, return it.\n if (\"Q\" in d) return new Date(d.Q);\n if (\"s\" in d) return new Date(d.s * 1000 + (\"L\" in d ? d.L : 0));\n\n // If this is utcParse, never use the local timezone.\n if (Z && !(\"Z\" in d)) d.Z = 0;\n\n // The am-pm flag is 0 for AM, and 1 for PM.\n if (\"p\" in d) d.H = d.H % 12 + d.p * 12;\n\n // If the month was not specified, inherit from the quarter.\n if (d.m === undefined) d.m = \"q\" in d ? d.q : 0;\n\n // Convert day-of-week and week-of-year to day-of-year.\n if (\"V\" in d) {\n if (d.V < 1 || d.V > 53) return null;\n if (!(\"w\" in d)) d.w = 1;\n if (\"Z\" in d) {\n week = utcDate(newDate(d.y, 0, 1)), day$1 = week.getUTCDay();\n week = day$1 > 4 || day$1 === 0 ? utcMonday.ceil(week) : utcMonday(week);\n week = utcDay.offset(week, (d.V - 1) * 7);\n d.y = week.getUTCFullYear();\n d.m = week.getUTCMonth();\n d.d = week.getUTCDate() + (d.w + 6) % 7;\n } else {\n week = localDate(newDate(d.y, 0, 1)), day$1 = week.getDay();\n week = day$1 > 4 || day$1 === 0 ? monday.ceil(week) : monday(week);\n week = day.offset(week, (d.V - 1) * 7);\n d.y = week.getFullYear();\n d.m = week.getMonth();\n d.d = week.getDate() + (d.w + 6) % 7;\n }\n } else if (\"W\" in d || \"U\" in d) {\n if (!(\"w\" in d)) d.w = \"u\" in d ? d.u % 7 : \"W\" in d ? 1 : 0;\n day$1 = \"Z\" in d ? utcDate(newDate(d.y, 0, 1)).getUTCDay() : localDate(newDate(d.y, 0, 1)).getDay();\n d.m = 0;\n d.d = \"W\" in d ? (d.w + 6) % 7 + d.W * 7 - (day$1 + 5) % 7 : d.w + d.U * 7 - (day$1 + 6) % 7;\n }\n\n // If a time zone is specified, all fields are interpreted as UTC and then\n // offset according to the specified time zone.\n if (\"Z\" in d) {\n d.H += d.Z / 100 | 0;\n d.M += d.Z % 100;\n return utcDate(d);\n }\n\n // Otherwise, all fields are in local time.\n return localDate(d);\n };\n }\n\n function parseSpecifier(d, specifier, string, j) {\n var i = 0,\n n = specifier.length,\n m = string.length,\n c,\n parse;\n\n while (i < n) {\n if (j >= m) return -1;\n c = specifier.charCodeAt(i++);\n if (c === 37) {\n c = specifier.charAt(i++);\n parse = parses[c in pads ? specifier.charAt(i++) : c];\n if (!parse || ((j = parse(d, string, j)) < 0)) return -1;\n } else if (c != string.charCodeAt(j++)) {\n return -1;\n }\n }\n\n return j;\n }\n\n function parsePeriod(d, string, i) {\n var n = periodRe.exec(string.slice(i));\n return n ? (d.p = periodLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n }\n\n function parseShortWeekday(d, string, i) {\n var n = shortWeekdayRe.exec(string.slice(i));\n return n ? (d.w = shortWeekdayLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n }\n\n function parseWeekday(d, string, i) {\n var n = weekdayRe.exec(string.slice(i));\n return n ? (d.w = weekdayLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n }\n\n function parseShortMonth(d, string, i) {\n var n = shortMonthRe.exec(string.slice(i));\n return n ? (d.m = shortMonthLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n }\n\n function parseMonth(d, string, i) {\n var n = monthRe.exec(string.slice(i));\n return n ? (d.m = monthLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n }\n\n function parseLocaleDateTime(d, string, i) {\n return parseSpecifier(d, locale_dateTime, string, i);\n }\n\n function parseLocaleDate(d, string, i) {\n return parseSpecifier(d, locale_date, string, i);\n }\n\n function parseLocaleTime(d, string, i) {\n return parseSpecifier(d, locale_time, string, i);\n }\n\n function formatShortWeekday(d) {\n return locale_shortWeekdays[d.getDay()];\n }\n\n function formatWeekday(d) {\n return locale_weekdays[d.getDay()];\n }\n\n function formatShortMonth(d) {\n return locale_shortMonths[d.getMonth()];\n }\n\n function formatMonth(d) {\n return locale_months[d.getMonth()];\n }\n\n function formatPeriod(d) {\n return locale_periods[+(d.getHours() >= 12)];\n }\n\n function formatQuarter(d) {\n return 1 + ~~(d.getMonth() / 3);\n }\n\n function formatUTCShortWeekday(d) {\n return locale_shortWeekdays[d.getUTCDay()];\n }\n\n function formatUTCWeekday(d) {\n return locale_weekdays[d.getUTCDay()];\n }\n\n function formatUTCShortMonth(d) {\n return locale_shortMonths[d.getUTCMonth()];\n }\n\n function formatUTCMonth(d) {\n return locale_months[d.getUTCMonth()];\n }\n\n function formatUTCPeriod(d) {\n return locale_periods[+(d.getUTCHours() >= 12)];\n }\n\n function formatUTCQuarter(d) {\n return 1 + ~~(d.getUTCMonth() / 3);\n }\n\n return {\n format: function(specifier) {\n var f = newFormat(specifier += \"\", formats);\n f.toString = function() { return specifier; };\n return f;\n },\n parse: function(specifier) {\n var p = newParse(specifier += \"\", false);\n p.toString = function() { return specifier; };\n return p;\n },\n utcFormat: function(specifier) {\n var f = newFormat(specifier += \"\", utcFormats);\n f.toString = function() { return specifier; };\n return f;\n },\n utcParse: function(specifier) {\n var p = newParse(specifier += \"\", true);\n p.toString = function() { return specifier; };\n return p;\n }\n };\n }\n\n var pads = {\"-\": \"\", \"_\": \" \", \"0\": \"0\"},\n numberRe = /^\\s*\\d+/, // note: ignores next directive\n percentRe = /^%/,\n requoteRe = /[\\\\^$*+?|[\\]().{}]/g;\n\n function pad(value, fill, width) {\n var sign = value < 0 ? \"-\" : \"\",\n string = (sign ? -value : value) + \"\",\n length = string.length;\n return sign + (length < width ? new Array(width - length + 1).join(fill) + string : string);\n }\n\n function requote(s) {\n return s.replace(requoteRe, \"\\\\$&\");\n }\n\n function formatRe(names) {\n return new RegExp(\"^(?:\" + names.map(requote).join(\"|\") + \")\", \"i\");\n }\n\n function formatLookup(names) {\n var map = {}, i = -1, n = names.length;\n while (++i < n) map[names[i].toLowerCase()] = i;\n return map;\n }\n\n function parseWeekdayNumberSunday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 1));\n return n ? (d.w = +n[0], i + n[0].length) : -1;\n }\n\n function parseWeekdayNumberMonday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 1));\n return n ? (d.u = +n[0], i + n[0].length) : -1;\n }\n\n function parseWeekNumberSunday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.U = +n[0], i + n[0].length) : -1;\n }\n\n function parseWeekNumberISO(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.V = +n[0], i + n[0].length) : -1;\n }\n\n function parseWeekNumberMonday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.W = +n[0], i + n[0].length) : -1;\n }\n\n function parseFullYear(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 4));\n return n ? (d.y = +n[0], i + n[0].length) : -1;\n }\n\n function parseYear(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.y = +n[0] + (+n[0] > 68 ? 1900 : 2000), i + n[0].length) : -1;\n }\n\n function parseZone(d, string, i) {\n var n = /^(Z)|([+-]\\d\\d)(?::?(\\d\\d))?/.exec(string.slice(i, i + 6));\n return n ? (d.Z = n[1] ? 0 : -(n[2] + (n[3] || \"00\")), i + n[0].length) : -1;\n }\n\n function parseQuarter(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 1));\n return n ? (d.q = n[0] * 3 - 3, i + n[0].length) : -1;\n }\n\n function parseMonthNumber(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.m = n[0] - 1, i + n[0].length) : -1;\n }\n\n function parseDayOfMonth(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.d = +n[0], i + n[0].length) : -1;\n }\n\n function parseDayOfYear(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 3));\n return n ? (d.m = 0, d.d = +n[0], i + n[0].length) : -1;\n }\n\n function parseHour24(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.H = +n[0], i + n[0].length) : -1;\n }\n\n function parseMinutes(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.M = +n[0], i + n[0].length) : -1;\n }\n\n function parseSeconds(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.S = +n[0], i + n[0].length) : -1;\n }\n\n function parseMilliseconds(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 3));\n return n ? (d.L = +n[0], i + n[0].length) : -1;\n }\n\n function parseMicroseconds(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 6));\n return n ? (d.L = Math.floor(n[0] / 1000), i + n[0].length) : -1;\n }\n\n function parseLiteralPercent(d, string, i) {\n var n = percentRe.exec(string.slice(i, i + 1));\n return n ? i + n[0].length : -1;\n }\n\n function parseUnixTimestamp(d, string, i) {\n var n = numberRe.exec(string.slice(i));\n return n ? (d.Q = +n[0], i + n[0].length) : -1;\n }\n\n function parseUnixTimestampSeconds(d, string, i) {\n var n = numberRe.exec(string.slice(i));\n return n ? (d.s = +n[0], i + n[0].length) : -1;\n }\n\n function formatDayOfMonth(d, p) {\n return pad(d.getDate(), p, 2);\n }\n\n function formatHour24(d, p) {\n return pad(d.getHours(), p, 2);\n }\n\n function formatHour12(d, p) {\n return pad(d.getHours() % 12 || 12, p, 2);\n }\n\n function formatDayOfYear(d, p) {\n return pad(1 + day.count(year(d), d), p, 3);\n }\n\n function formatMilliseconds(d, p) {\n return pad(d.getMilliseconds(), p, 3);\n }\n\n function formatMicroseconds(d, p) {\n return formatMilliseconds(d, p) + \"000\";\n }\n\n function formatMonthNumber(d, p) {\n return pad(d.getMonth() + 1, p, 2);\n }\n\n function formatMinutes(d, p) {\n return pad(d.getMinutes(), p, 2);\n }\n\n function formatSeconds(d, p) {\n return pad(d.getSeconds(), p, 2);\n }\n\n function formatWeekdayNumberMonday(d) {\n var day = d.getDay();\n return day === 0 ? 7 : day;\n }\n\n function formatWeekNumberSunday(d, p) {\n return pad(sunday.count(year(d) - 1, d), p, 2);\n }\n\n function formatWeekNumberISO(d, p) {\n var day = d.getDay();\n d = (day >= 4 || day === 0) ? thursday(d) : thursday.ceil(d);\n return pad(thursday.count(year(d), d) + (year(d).getDay() === 4), p, 2);\n }\n\n function formatWeekdayNumberSunday(d) {\n return d.getDay();\n }\n\n function formatWeekNumberMonday(d, p) {\n return pad(monday.count(year(d) - 1, d), p, 2);\n }\n\n function formatYear(d, p) {\n return pad(d.getFullYear() % 100, p, 2);\n }\n\n function formatFullYear(d, p) {\n return pad(d.getFullYear() % 10000, p, 4);\n }\n\n function formatZone(d) {\n var z = d.getTimezoneOffset();\n return (z > 0 ? \"-\" : (z *= -1, \"+\"))\n + pad(z / 60 | 0, \"0\", 2)\n + pad(z % 60, \"0\", 2);\n }\n\n function formatUTCDayOfMonth(d, p) {\n return pad(d.getUTCDate(), p, 2);\n }\n\n function formatUTCHour24(d, p) {\n return pad(d.getUTCHours(), p, 2);\n }\n\n function formatUTCHour12(d, p) {\n return pad(d.getUTCHours() % 12 || 12, p, 2);\n }\n\n function formatUTCDayOfYear(d, p) {\n return pad(1 + utcDay.count(utcYear(d), d), p, 3);\n }\n\n function formatUTCMilliseconds(d, p) {\n return pad(d.getUTCMilliseconds(), p, 3);\n }\n\n function formatUTCMicroseconds(d, p) {\n return formatUTCMilliseconds(d, p) + \"000\";\n }\n\n function formatUTCMonthNumber(d, p) {\n return pad(d.getUTCMonth() + 1, p, 2);\n }\n\n function formatUTCMinutes(d, p) {\n return pad(d.getUTCMinutes(), p, 2);\n }\n\n function formatUTCSeconds(d, p) {\n return pad(d.getUTCSeconds(), p, 2);\n }\n\n function formatUTCWeekdayNumberMonday(d) {\n var dow = d.getUTCDay();\n return dow === 0 ? 7 : dow;\n }\n\n function formatUTCWeekNumberSunday(d, p) {\n return pad(utcSunday.count(utcYear(d) - 1, d), p, 2);\n }\n\n function formatUTCWeekNumberISO(d, p) {\n var day = d.getUTCDay();\n d = (day >= 4 || day === 0) ? utcThursday(d) : utcThursday.ceil(d);\n return pad(utcThursday.count(utcYear(d), d) + (utcYear(d).getUTCDay() === 4), p, 2);\n }\n\n function formatUTCWeekdayNumberSunday(d) {\n return d.getUTCDay();\n }\n\n function formatUTCWeekNumberMonday(d, p) {\n return pad(utcMonday.count(utcYear(d) - 1, d), p, 2);\n }\n\n function formatUTCYear(d, p) {\n return pad(d.getUTCFullYear() % 100, p, 2);\n }\n\n function formatUTCFullYear(d, p) {\n return pad(d.getUTCFullYear() % 10000, p, 4);\n }\n\n function formatUTCZone() {\n return \"+0000\";\n }\n\n function formatLiteralPercent() {\n return \"%\";\n }\n\n function formatUnixTimestamp(d) {\n return +d;\n }\n\n function formatUnixTimestampSeconds(d) {\n return Math.floor(+d / 1000);\n }\n\n var locale$1;\n var timeFormat;\n var timeParse;\n var utcFormat;\n var utcParse;\n\n defaultLocale$1({\n dateTime: \"%x, %X\",\n date: \"%-m/%-d/%Y\",\n time: \"%-I:%M:%S %p\",\n periods: [\"AM\", \"PM\"],\n days: [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"],\n shortDays: [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"],\n months: [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"],\n shortMonths: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"]\n });\n\n function defaultLocale$1(definition) {\n locale$1 = formatLocale$1(definition);\n timeFormat = locale$1.format;\n timeParse = locale$1.parse;\n utcFormat = locale$1.utcFormat;\n utcParse = locale$1.utcParse;\n return locale$1;\n }\n\n var isoSpecifier = \"%Y-%m-%dT%H:%M:%S.%LZ\";\n\n function formatIsoNative(date) {\n return date.toISOString();\n }\n\n var formatIso = Date.prototype.toISOString\n ? formatIsoNative\n : utcFormat(isoSpecifier);\n\n function parseIsoNative(string) {\n var date = new Date(string);\n return isNaN(date) ? null : date;\n }\n\n var parseIso = +new Date(\"2000-01-01T00:00:00.000Z\")\n ? parseIsoNative\n : utcParse(isoSpecifier);\n\n var noop = {value: function() {}};\n\n function dispatch() {\n for (var i = 0, n = arguments.length, _ = {}, t; i < n; ++i) {\n if (!(t = arguments[i] + \"\") || (t in _) || /[\\s.]/.test(t)) throw new Error(\"illegal type: \" + t);\n _[t] = [];\n }\n return new Dispatch(_);\n }\n\n function Dispatch(_) {\n this._ = _;\n }\n\n function parseTypenames(typenames, types) {\n return typenames.trim().split(/^|\\s+/).map(function(t) {\n var name = \"\", i = t.indexOf(\".\");\n if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\n if (t && !types.hasOwnProperty(t)) throw new Error(\"unknown type: \" + t);\n return {type: t, name: name};\n });\n }\n\n Dispatch.prototype = dispatch.prototype = {\n constructor: Dispatch,\n on: function(typename, callback) {\n var _ = this._,\n T = parseTypenames(typename + \"\", _),\n t,\n i = -1,\n n = T.length;\n\n // If no callback was specified, return the callback of the given type and name.\n if (arguments.length < 2) {\n while (++i < n) if ((t = (typename = T[i]).type) && (t = get(_[t], typename.name))) return t;\n return;\n }\n\n // If a type was specified, set the callback for the given type and name.\n // Otherwise, if a null callback was specified, remove callbacks of the given name.\n if (callback != null && typeof callback !== \"function\") throw new Error(\"invalid callback: \" + callback);\n while (++i < n) {\n if (t = (typename = T[i]).type) _[t] = set(_[t], typename.name, callback);\n else if (callback == null) for (t in _) _[t] = set(_[t], typename.name, null);\n }\n\n return this;\n },\n copy: function() {\n var copy = {}, _ = this._;\n for (var t in _) copy[t] = _[t].slice();\n return new Dispatch(copy);\n },\n call: function(type, that) {\n if ((n = arguments.length - 2) > 0) for (var args = new Array(n), i = 0, n, t; i < n; ++i) args[i] = arguments[i + 2];\n if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n for (t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n },\n apply: function(type, that, args) {\n if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n for (var t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n }\n };\n\n function get(type, name) {\n for (var i = 0, n = type.length, c; i < n; ++i) {\n if ((c = type[i]).name === name) {\n return c.value;\n }\n }\n }\n\n function set(type, name, callback) {\n for (var i = 0, n = type.length; i < n; ++i) {\n if (type[i].name === name) {\n type[i] = noop, type = type.slice(0, i).concat(type.slice(i + 1));\n break;\n }\n }\n if (callback != null) type.push({name: name, value: callback});\n return type;\n }\n\n var xhtml = \"http://www.w3.org/1999/xhtml\";\n\n var namespaces = {\n svg: \"http://www.w3.org/2000/svg\",\n xhtml: xhtml,\n xlink: \"http://www.w3.org/1999/xlink\",\n xml: \"http://www.w3.org/XML/1998/namespace\",\n xmlns: \"http://www.w3.org/2000/xmlns/\"\n };\n\n function namespace(name) {\n var prefix = name += \"\", i = prefix.indexOf(\":\");\n if (i >= 0 && (prefix = name.slice(0, i)) !== \"xmlns\") name = name.slice(i + 1);\n return namespaces.hasOwnProperty(prefix) ? {space: namespaces[prefix], local: name} : name;\n }\n\n function creatorInherit(name) {\n return function() {\n var document = this.ownerDocument,\n uri = this.namespaceURI;\n return uri === xhtml && document.documentElement.namespaceURI === xhtml\n ? document.createElement(name)\n : document.createElementNS(uri, name);\n };\n }\n\n function creatorFixed(fullname) {\n return function() {\n return this.ownerDocument.createElementNS(fullname.space, fullname.local);\n };\n }\n\n function creator(name) {\n var fullname = namespace(name);\n return (fullname.local\n ? creatorFixed\n : creatorInherit)(fullname);\n }\n\n function none() {}\n\n function selector(selector) {\n return selector == null ? none : function() {\n return this.querySelector(selector);\n };\n }\n\n function selection_select(select) {\n if (typeof select !== \"function\") select = selector(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {\n if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) {\n if (\"__data__\" in node) subnode.__data__ = node.__data__;\n subgroup[i] = subnode;\n }\n }\n }\n\n return new Selection(subgroups, this._parents);\n }\n\n function empty() {\n return [];\n }\n\n function selectorAll(selector) {\n return selector == null ? empty : function() {\n return this.querySelectorAll(selector);\n };\n }\n\n function selection_selectAll(select) {\n if (typeof select !== \"function\") select = selectorAll(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n subgroups.push(select.call(node, node.__data__, i, group));\n parents.push(node);\n }\n }\n }\n\n return new Selection(subgroups, parents);\n }\n\n function matcher(selector) {\n return function() {\n return this.matches(selector);\n };\n }\n\n function selection_filter(match) {\n if (typeof match !== \"function\") match = matcher(match);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {\n if ((node = group[i]) && match.call(node, node.__data__, i, group)) {\n subgroup.push(node);\n }\n }\n }\n\n return new Selection(subgroups, this._parents);\n }\n\n function sparse(update) {\n return new Array(update.length);\n }\n\n function selection_enter() {\n return new Selection(this._enter || this._groups.map(sparse), this._parents);\n }\n\n function EnterNode(parent, datum) {\n this.ownerDocument = parent.ownerDocument;\n this.namespaceURI = parent.namespaceURI;\n this._next = null;\n this._parent = parent;\n this.__data__ = datum;\n }\n\n EnterNode.prototype = {\n constructor: EnterNode,\n appendChild: function(child) { return this._parent.insertBefore(child, this._next); },\n insertBefore: function(child, next) { return this._parent.insertBefore(child, next); },\n querySelector: function(selector) { return this._parent.querySelector(selector); },\n querySelectorAll: function(selector) { return this._parent.querySelectorAll(selector); }\n };\n\n function constant$2(x) {\n return function() {\n return x;\n };\n }\n\n var keyPrefix = \"$\"; // Protect against keys like “__proto__”.\n\n function bindIndex(parent, group, enter, update, exit, data) {\n var i = 0,\n node,\n groupLength = group.length,\n dataLength = data.length;\n\n // Put any non-null nodes that fit into update.\n // Put any null nodes into enter.\n // Put any remaining data into enter.\n for (; i < dataLength; ++i) {\n if (node = group[i]) {\n node.__data__ = data[i];\n update[i] = node;\n } else {\n enter[i] = new EnterNode(parent, data[i]);\n }\n }\n\n // Put any non-null nodes that don’t fit into exit.\n for (; i < groupLength; ++i) {\n if (node = group[i]) {\n exit[i] = node;\n }\n }\n }\n\n function bindKey(parent, group, enter, update, exit, data, key) {\n var i,\n node,\n nodeByKeyValue = {},\n groupLength = group.length,\n dataLength = data.length,\n keyValues = new Array(groupLength),\n keyValue;\n\n // Compute the key for each node.\n // If multiple nodes have the same key, the duplicates are added to exit.\n for (i = 0; i < groupLength; ++i) {\n if (node = group[i]) {\n keyValues[i] = keyValue = keyPrefix + key.call(node, node.__data__, i, group);\n if (keyValue in nodeByKeyValue) {\n exit[i] = node;\n } else {\n nodeByKeyValue[keyValue] = node;\n }\n }\n }\n\n // Compute the key for each datum.\n // If there a node associated with this key, join and add it to update.\n // If there is not (or the key is a duplicate), add it to enter.\n for (i = 0; i < dataLength; ++i) {\n keyValue = keyPrefix + key.call(parent, data[i], i, data);\n if (node = nodeByKeyValue[keyValue]) {\n update[i] = node;\n node.__data__ = data[i];\n nodeByKeyValue[keyValue] = null;\n } else {\n enter[i] = new EnterNode(parent, data[i]);\n }\n }\n\n // Add any remaining nodes that were not bound to data to exit.\n for (i = 0; i < groupLength; ++i) {\n if ((node = group[i]) && (nodeByKeyValue[keyValues[i]] === node)) {\n exit[i] = node;\n }\n }\n }\n\n function selection_data(value, key) {\n if (!value) {\n data = new Array(this.size()), j = -1;\n this.each(function(d) { data[++j] = d; });\n return data;\n }\n\n var bind = key ? bindKey : bindIndex,\n parents = this._parents,\n groups = this._groups;\n\n if (typeof value !== \"function\") value = constant$2(value);\n\n for (var m = groups.length, update = new Array(m), enter = new Array(m), exit = new Array(m), j = 0; j < m; ++j) {\n var parent = parents[j],\n group = groups[j],\n groupLength = group.length,\n data = value.call(parent, parent && parent.__data__, j, parents),\n dataLength = data.length,\n enterGroup = enter[j] = new Array(dataLength),\n updateGroup = update[j] = new Array(dataLength),\n exitGroup = exit[j] = new Array(groupLength);\n\n bind(parent, group, enterGroup, updateGroup, exitGroup, data, key);\n\n // Now connect the enter nodes to their following update node, such that\n // appendChild can insert the materialized enter node before this node,\n // rather than at the end of the parent node.\n for (var i0 = 0, i1 = 0, previous, next; i0 < dataLength; ++i0) {\n if (previous = enterGroup[i0]) {\n if (i0 >= i1) i1 = i0 + 1;\n while (!(next = updateGroup[i1]) && ++i1 < dataLength);\n previous._next = next || null;\n }\n }\n }\n\n update = new Selection(update, parents);\n update._enter = enter;\n update._exit = exit;\n return update;\n }\n\n function selection_exit() {\n return new Selection(this._exit || this._groups.map(sparse), this._parents);\n }\n\n function selection_join(onenter, onupdate, onexit) {\n var enter = this.enter(), update = this, exit = this.exit();\n enter = typeof onenter === \"function\" ? onenter(enter) : enter.append(onenter + \"\");\n if (onupdate != null) update = onupdate(update);\n if (onexit == null) exit.remove(); else onexit(exit);\n return enter && update ? enter.merge(update).order() : update;\n }\n\n function selection_merge(selection) {\n\n for (var groups0 = this._groups, groups1 = selection._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) {\n for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {\n if (node = group0[i] || group1[i]) {\n merge[i] = node;\n }\n }\n }\n\n for (; j < m0; ++j) {\n merges[j] = groups0[j];\n }\n\n return new Selection(merges, this._parents);\n }\n\n function selection_order() {\n\n for (var groups = this._groups, j = -1, m = groups.length; ++j < m;) {\n for (var group = groups[j], i = group.length - 1, next = group[i], node; --i >= 0;) {\n if (node = group[i]) {\n if (next && node.compareDocumentPosition(next) ^ 4) next.parentNode.insertBefore(node, next);\n next = node;\n }\n }\n }\n\n return this;\n }\n\n function selection_sort(compare) {\n if (!compare) compare = ascending$1;\n\n function compareNode(a, b) {\n return a && b ? compare(a.__data__, b.__data__) : !a - !b;\n }\n\n for (var groups = this._groups, m = groups.length, sortgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, sortgroup = sortgroups[j] = new Array(n), node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n sortgroup[i] = node;\n }\n }\n sortgroup.sort(compareNode);\n }\n\n return new Selection(sortgroups, this._parents).order();\n }\n\n function ascending$1(a, b) {\n return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n }\n\n function selection_call() {\n var callback = arguments[0];\n arguments[0] = this;\n callback.apply(null, arguments);\n return this;\n }\n\n function selection_nodes() {\n var nodes = new Array(this.size()), i = -1;\n this.each(function() { nodes[++i] = this; });\n return nodes;\n }\n\n function selection_node() {\n\n for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n for (var group = groups[j], i = 0, n = group.length; i < n; ++i) {\n var node = group[i];\n if (node) return node;\n }\n }\n\n return null;\n }\n\n function selection_size() {\n var size = 0;\n this.each(function() { ++size; });\n return size;\n }\n\n function selection_empty() {\n return !this.node();\n }\n\n function selection_each(callback) {\n\n for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n for (var group = groups[j], i = 0, n = group.length, node; i < n; ++i) {\n if (node = group[i]) callback.call(node, node.__data__, i, group);\n }\n }\n\n return this;\n }\n\n function attrRemove(name) {\n return function() {\n this.removeAttribute(name);\n };\n }\n\n function attrRemoveNS(fullname) {\n return function() {\n this.removeAttributeNS(fullname.space, fullname.local);\n };\n }\n\n function attrConstant(name, value) {\n return function() {\n this.setAttribute(name, value);\n };\n }\n\n function attrConstantNS(fullname, value) {\n return function() {\n this.setAttributeNS(fullname.space, fullname.local, value);\n };\n }\n\n function attrFunction(name, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) this.removeAttribute(name);\n else this.setAttribute(name, v);\n };\n }\n\n function attrFunctionNS(fullname, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) this.removeAttributeNS(fullname.space, fullname.local);\n else this.setAttributeNS(fullname.space, fullname.local, v);\n };\n }\n\n function selection_attr(name, value) {\n var fullname = namespace(name);\n\n if (arguments.length < 2) {\n var node = this.node();\n return fullname.local\n ? node.getAttributeNS(fullname.space, fullname.local)\n : node.getAttribute(fullname);\n }\n\n return this.each((value == null\n ? (fullname.local ? attrRemoveNS : attrRemove) : (typeof value === \"function\"\n ? (fullname.local ? attrFunctionNS : attrFunction)\n : (fullname.local ? attrConstantNS : attrConstant)))(fullname, value));\n }\n\n function defaultView(node) {\n return (node.ownerDocument && node.ownerDocument.defaultView) // node is a Node\n || (node.document && node) // node is a Window\n || node.defaultView; // node is a Document\n }\n\n function styleRemove(name) {\n return function() {\n this.style.removeProperty(name);\n };\n }\n\n function styleConstant(name, value, priority) {\n return function() {\n this.style.setProperty(name, value, priority);\n };\n }\n\n function styleFunction(name, value, priority) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) this.style.removeProperty(name);\n else this.style.setProperty(name, v, priority);\n };\n }\n\n function selection_style(name, value, priority) {\n return arguments.length > 1\n ? this.each((value == null\n ? styleRemove : typeof value === \"function\"\n ? styleFunction\n : styleConstant)(name, value, priority == null ? \"\" : priority))\n : styleValue(this.node(), name);\n }\n\n function styleValue(node, name) {\n return node.style.getPropertyValue(name)\n || defaultView(node).getComputedStyle(node, null).getPropertyValue(name);\n }\n\n function propertyRemove(name) {\n return function() {\n delete this[name];\n };\n }\n\n function propertyConstant(name, value) {\n return function() {\n this[name] = value;\n };\n }\n\n function propertyFunction(name, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) delete this[name];\n else this[name] = v;\n };\n }\n\n function selection_property(name, value) {\n return arguments.length > 1\n ? this.each((value == null\n ? propertyRemove : typeof value === \"function\"\n ? propertyFunction\n : propertyConstant)(name, value))\n : this.node()[name];\n }\n\n function classArray(string) {\n return string.trim().split(/^|\\s+/);\n }\n\n function classList(node) {\n return node.classList || new ClassList(node);\n }\n\n function ClassList(node) {\n this._node = node;\n this._names = classArray(node.getAttribute(\"class\") || \"\");\n }\n\n ClassList.prototype = {\n add: function(name) {\n var i = this._names.indexOf(name);\n if (i < 0) {\n this._names.push(name);\n this._node.setAttribute(\"class\", this._names.join(\" \"));\n }\n },\n remove: function(name) {\n var i = this._names.indexOf(name);\n if (i >= 0) {\n this._names.splice(i, 1);\n this._node.setAttribute(\"class\", this._names.join(\" \"));\n }\n },\n contains: function(name) {\n return this._names.indexOf(name) >= 0;\n }\n };\n\n function classedAdd(node, names) {\n var list = classList(node), i = -1, n = names.length;\n while (++i < n) list.add(names[i]);\n }\n\n function classedRemove(node, names) {\n var list = classList(node), i = -1, n = names.length;\n while (++i < n) list.remove(names[i]);\n }\n\n function classedTrue(names) {\n return function() {\n classedAdd(this, names);\n };\n }\n\n function classedFalse(names) {\n return function() {\n classedRemove(this, names);\n };\n }\n\n function classedFunction(names, value) {\n return function() {\n (value.apply(this, arguments) ? classedAdd : classedRemove)(this, names);\n };\n }\n\n function selection_classed(name, value) {\n var names = classArray(name + \"\");\n\n if (arguments.length < 2) {\n var list = classList(this.node()), i = -1, n = names.length;\n while (++i < n) if (!list.contains(names[i])) return false;\n return true;\n }\n\n return this.each((typeof value === \"function\"\n ? classedFunction : value\n ? classedTrue\n : classedFalse)(names, value));\n }\n\n function textRemove() {\n this.textContent = \"\";\n }\n\n function textConstant(value) {\n return function() {\n this.textContent = value;\n };\n }\n\n function textFunction(value) {\n return function() {\n var v = value.apply(this, arguments);\n this.textContent = v == null ? \"\" : v;\n };\n }\n\n function selection_text(value) {\n return arguments.length\n ? this.each(value == null\n ? textRemove : (typeof value === \"function\"\n ? textFunction\n : textConstant)(value))\n : this.node().textContent;\n }\n\n function htmlRemove() {\n this.innerHTML = \"\";\n }\n\n function htmlConstant(value) {\n return function() {\n this.innerHTML = value;\n };\n }\n\n function htmlFunction(value) {\n return function() {\n var v = value.apply(this, arguments);\n this.innerHTML = v == null ? \"\" : v;\n };\n }\n\n function selection_html(value) {\n return arguments.length\n ? this.each(value == null\n ? htmlRemove : (typeof value === \"function\"\n ? htmlFunction\n : htmlConstant)(value))\n : this.node().innerHTML;\n }\n\n function raise() {\n if (this.nextSibling) this.parentNode.appendChild(this);\n }\n\n function selection_raise() {\n return this.each(raise);\n }\n\n function lower() {\n if (this.previousSibling) this.parentNode.insertBefore(this, this.parentNode.firstChild);\n }\n\n function selection_lower() {\n return this.each(lower);\n }\n\n function selection_append(name) {\n var create = typeof name === \"function\" ? name : creator(name);\n return this.select(function() {\n return this.appendChild(create.apply(this, arguments));\n });\n }\n\n function constantNull() {\n return null;\n }\n\n function selection_insert(name, before) {\n var create = typeof name === \"function\" ? name : creator(name),\n select = before == null ? constantNull : typeof before === \"function\" ? before : selector(before);\n return this.select(function() {\n return this.insertBefore(create.apply(this, arguments), select.apply(this, arguments) || null);\n });\n }\n\n function remove() {\n var parent = this.parentNode;\n if (parent) parent.removeChild(this);\n }\n\n function selection_remove() {\n return this.each(remove);\n }\n\n function selection_cloneShallow() {\n var clone = this.cloneNode(false), parent = this.parentNode;\n return parent ? parent.insertBefore(clone, this.nextSibling) : clone;\n }\n\n function selection_cloneDeep() {\n var clone = this.cloneNode(true), parent = this.parentNode;\n return parent ? parent.insertBefore(clone, this.nextSibling) : clone;\n }\n\n function selection_clone(deep) {\n return this.select(deep ? selection_cloneDeep : selection_cloneShallow);\n }\n\n function selection_datum(value) {\n return arguments.length\n ? this.property(\"__data__\", value)\n : this.node().__data__;\n }\n\n var filterEvents = {};\n\n var event = null;\n\n if (typeof document !== \"undefined\") {\n var element = document.documentElement;\n if (!(\"onmouseenter\" in element)) {\n filterEvents = {mouseenter: \"mouseover\", mouseleave: \"mouseout\"};\n }\n }\n\n function filterContextListener(listener, index, group) {\n listener = contextListener(listener, index, group);\n return function(event) {\n var related = event.relatedTarget;\n if (!related || (related !== this && !(related.compareDocumentPosition(this) & 8))) {\n listener.call(this, event);\n }\n };\n }\n\n function contextListener(listener, index, group) {\n return function(event1) {\n var event0 = event; // Events can be reentrant (e.g., focus).\n event = event1;\n try {\n listener.call(this, this.__data__, index, group);\n } finally {\n event = event0;\n }\n };\n }\n\n function parseTypenames$1(typenames) {\n return typenames.trim().split(/^|\\s+/).map(function(t) {\n var name = \"\", i = t.indexOf(\".\");\n if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\n return {type: t, name: name};\n });\n }\n\n function onRemove(typename) {\n return function() {\n var on = this.__on;\n if (!on) return;\n for (var j = 0, i = -1, m = on.length, o; j < m; ++j) {\n if (o = on[j], (!typename.type || o.type === typename.type) && o.name === typename.name) {\n this.removeEventListener(o.type, o.listener, o.capture);\n } else {\n on[++i] = o;\n }\n }\n if (++i) on.length = i;\n else delete this.__on;\n };\n }\n\n function onAdd(typename, value, capture) {\n var wrap = filterEvents.hasOwnProperty(typename.type) ? filterContextListener : contextListener;\n return function(d, i, group) {\n var on = this.__on, o, listener = wrap(value, i, group);\n if (on) for (var j = 0, m = on.length; j < m; ++j) {\n if ((o = on[j]).type === typename.type && o.name === typename.name) {\n this.removeEventListener(o.type, o.listener, o.capture);\n this.addEventListener(o.type, o.listener = listener, o.capture = capture);\n o.value = value;\n return;\n }\n }\n this.addEventListener(typename.type, listener, capture);\n o = {type: typename.type, name: typename.name, value: value, listener: listener, capture: capture};\n if (!on) this.__on = [o];\n else on.push(o);\n };\n }\n\n function selection_on(typename, value, capture) {\n var typenames = parseTypenames$1(typename + \"\"), i, n = typenames.length, t;\n\n if (arguments.length < 2) {\n var on = this.node().__on;\n if (on) for (var j = 0, m = on.length, o; j < m; ++j) {\n for (i = 0, o = on[j]; i < n; ++i) {\n if ((t = typenames[i]).type === o.type && t.name === o.name) {\n return o.value;\n }\n }\n }\n return;\n }\n\n on = value ? onAdd : onRemove;\n if (capture == null) capture = false;\n for (i = 0; i < n; ++i) this.each(on(typenames[i], value, capture));\n return this;\n }\n\n function customEvent(event1, listener, that, args) {\n var event0 = event;\n event1.sourceEvent = event;\n event = event1;\n try {\n return listener.apply(that, args);\n } finally {\n event = event0;\n }\n }\n\n function dispatchEvent(node, type, params) {\n var window = defaultView(node),\n event = window.CustomEvent;\n\n if (typeof event === \"function\") {\n event = new event(type, params);\n } else {\n event = window.document.createEvent(\"Event\");\n if (params) event.initEvent(type, params.bubbles, params.cancelable), event.detail = params.detail;\n else event.initEvent(type, false, false);\n }\n\n node.dispatchEvent(event);\n }\n\n function dispatchConstant(type, params) {\n return function() {\n return dispatchEvent(this, type, params);\n };\n }\n\n function dispatchFunction(type, params) {\n return function() {\n return dispatchEvent(this, type, params.apply(this, arguments));\n };\n }\n\n function selection_dispatch(type, params) {\n return this.each((typeof params === \"function\"\n ? dispatchFunction\n : dispatchConstant)(type, params));\n }\n\n var root = [null];\n\n function Selection(groups, parents) {\n this._groups = groups;\n this._parents = parents;\n }\n\n function selection() {\n return new Selection([[document.documentElement]], root);\n }\n\n Selection.prototype = selection.prototype = {\n constructor: Selection,\n select: selection_select,\n selectAll: selection_selectAll,\n filter: selection_filter,\n data: selection_data,\n enter: selection_enter,\n exit: selection_exit,\n join: selection_join,\n merge: selection_merge,\n order: selection_order,\n sort: selection_sort,\n call: selection_call,\n nodes: selection_nodes,\n node: selection_node,\n size: selection_size,\n empty: selection_empty,\n each: selection_each,\n attr: selection_attr,\n style: selection_style,\n property: selection_property,\n classed: selection_classed,\n text: selection_text,\n html: selection_html,\n raise: selection_raise,\n lower: selection_lower,\n append: selection_append,\n insert: selection_insert,\n remove: selection_remove,\n clone: selection_clone,\n datum: selection_datum,\n on: selection_on,\n dispatch: selection_dispatch\n };\n\n function select(selector) {\n return typeof selector === \"string\"\n ? new Selection([[document.querySelector(selector)]], [document.documentElement])\n : new Selection([[selector]], root);\n }\n\n function sourceEvent() {\n var current = event, source;\n while (source = current.sourceEvent) current = source;\n return current;\n }\n\n function point(node, event) {\n var svg = node.ownerSVGElement || node;\n\n if (svg.createSVGPoint) {\n var point = svg.createSVGPoint();\n point.x = event.clientX, point.y = event.clientY;\n point = point.matrixTransform(node.getScreenCTM().inverse());\n return [point.x, point.y];\n }\n\n var rect = node.getBoundingClientRect();\n return [event.clientX - rect.left - node.clientLeft, event.clientY - rect.top - node.clientTop];\n }\n\n function mouse(node) {\n var event = sourceEvent();\n if (event.changedTouches) event = event.changedTouches[0];\n return point(node, event);\n }\n\n function touch(node, touches, identifier) {\n if (arguments.length < 3) identifier = touches, touches = sourceEvent().changedTouches;\n\n for (var i = 0, n = touches ? touches.length : 0, touch; i < n; ++i) {\n if ((touch = touches[i]).identifier === identifier) {\n return point(node, touch);\n }\n }\n\n return null;\n }\n\n function nopropagation() {\n event.stopImmediatePropagation();\n }\n\n function noevent() {\n event.preventDefault();\n event.stopImmediatePropagation();\n }\n\n function nodrag(view) {\n var root = view.document.documentElement,\n selection = select(view).on(\"dragstart.drag\", noevent, true);\n if (\"onselectstart\" in root) {\n selection.on(\"selectstart.drag\", noevent, true);\n } else {\n root.__noselect = root.style.MozUserSelect;\n root.style.MozUserSelect = \"none\";\n }\n }\n\n function yesdrag(view, noclick) {\n var root = view.document.documentElement,\n selection = select(view).on(\"dragstart.drag\", null);\n if (noclick) {\n selection.on(\"click.drag\", noevent, true);\n setTimeout(function() { selection.on(\"click.drag\", null); }, 0);\n }\n if (\"onselectstart\" in root) {\n selection.on(\"selectstart.drag\", null);\n } else {\n root.style.MozUserSelect = root.__noselect;\n delete root.__noselect;\n }\n }\n\n function constant$3(x) {\n return function() {\n return x;\n };\n }\n\n function DragEvent(target, type, subject, id, active, x, y, dx, dy, dispatch) {\n this.target = target;\n this.type = type;\n this.subject = subject;\n this.identifier = id;\n this.active = active;\n this.x = x;\n this.y = y;\n this.dx = dx;\n this.dy = dy;\n this._ = dispatch;\n }\n\n DragEvent.prototype.on = function() {\n var value = this._.on.apply(this._, arguments);\n return value === this._ ? this : value;\n };\n\n // Ignore right-click, since that should open the context menu.\n function defaultFilter() {\n return !event.ctrlKey && !event.button;\n }\n\n function defaultContainer() {\n return this.parentNode;\n }\n\n function defaultSubject(d) {\n return d == null ? {x: event.x, y: event.y} : d;\n }\n\n function defaultTouchable() {\n return navigator.maxTouchPoints || (\"ontouchstart\" in this);\n }\n\n function drag() {\n var filter = defaultFilter,\n container = defaultContainer,\n subject = defaultSubject,\n touchable = defaultTouchable,\n gestures = {},\n listeners = dispatch(\"start\", \"drag\", \"end\"),\n active = 0,\n mousedownx,\n mousedowny,\n mousemoving,\n touchending,\n clickDistance2 = 0;\n\n function drag(selection) {\n selection\n .on(\"mousedown.drag\", mousedowned)\n .filter(touchable)\n .on(\"touchstart.drag\", touchstarted)\n .on(\"touchmove.drag\", touchmoved)\n .on(\"touchend.drag touchcancel.drag\", touchended)\n .style(\"touch-action\", \"none\")\n .style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\");\n }\n\n function mousedowned() {\n if (touchending || !filter.apply(this, arguments)) return;\n var gesture = beforestart(\"mouse\", container.apply(this, arguments), mouse, this, arguments);\n if (!gesture) return;\n select(event.view).on(\"mousemove.drag\", mousemoved, true).on(\"mouseup.drag\", mouseupped, true);\n nodrag(event.view);\n nopropagation();\n mousemoving = false;\n mousedownx = event.clientX;\n mousedowny = event.clientY;\n gesture(\"start\");\n }\n\n function mousemoved() {\n noevent();\n if (!mousemoving) {\n var dx = event.clientX - mousedownx, dy = event.clientY - mousedowny;\n mousemoving = dx * dx + dy * dy > clickDistance2;\n }\n gestures.mouse(\"drag\");\n }\n\n function mouseupped() {\n select(event.view).on(\"mousemove.drag mouseup.drag\", null);\n yesdrag(event.view, mousemoving);\n noevent();\n gestures.mouse(\"end\");\n }\n\n function touchstarted() {\n if (!filter.apply(this, arguments)) return;\n var touches = event.changedTouches,\n c = container.apply(this, arguments),\n n = touches.length, i, gesture;\n\n for (i = 0; i < n; ++i) {\n if (gesture = beforestart(touches[i].identifier, c, touch, this, arguments)) {\n nopropagation();\n gesture(\"start\");\n }\n }\n }\n\n function touchmoved() {\n var touches = event.changedTouches,\n n = touches.length, i, gesture;\n\n for (i = 0; i < n; ++i) {\n if (gesture = gestures[touches[i].identifier]) {\n noevent();\n gesture(\"drag\");\n }\n }\n }\n\n function touchended() {\n var touches = event.changedTouches,\n n = touches.length, i, gesture;\n\n if (touchending) clearTimeout(touchending);\n touchending = setTimeout(function() { touchending = null; }, 500); // Ghost clicks are delayed!\n for (i = 0; i < n; ++i) {\n if (gesture = gestures[touches[i].identifier]) {\n nopropagation();\n gesture(\"end\");\n }\n }\n }\n\n function beforestart(id, container, point, that, args) {\n var p = point(container, id), s, dx, dy,\n sublisteners = listeners.copy();\n\n if (!customEvent(new DragEvent(drag, \"beforestart\", s, id, active, p[0], p[1], 0, 0, sublisteners), function() {\n if ((event.subject = s = subject.apply(that, args)) == null) return false;\n dx = s.x - p[0] || 0;\n dy = s.y - p[1] || 0;\n return true;\n })) return;\n\n return function gesture(type) {\n var p0 = p, n;\n switch (type) {\n case \"start\": gestures[id] = gesture, n = active++; break;\n case \"end\": delete gestures[id], --active; // nobreak\n case \"drag\": p = point(container, id), n = active; break;\n }\n customEvent(new DragEvent(drag, type, s, id, n, p[0] + dx, p[1] + dy, p[0] - p0[0], p[1] - p0[1], sublisteners), sublisteners.apply, sublisteners, [type, that, args]);\n };\n }\n\n drag.filter = function(_) {\n return arguments.length ? (filter = typeof _ === \"function\" ? _ : constant$3(!!_), drag) : filter;\n };\n\n drag.container = function(_) {\n return arguments.length ? (container = typeof _ === \"function\" ? _ : constant$3(_), drag) : container;\n };\n\n drag.subject = function(_) {\n return arguments.length ? (subject = typeof _ === \"function\" ? _ : constant$3(_), drag) : subject;\n };\n\n drag.touchable = function(_) {\n return arguments.length ? (touchable = typeof _ === \"function\" ? _ : constant$3(!!_), drag) : touchable;\n };\n\n drag.on = function() {\n var value = listeners.on.apply(listeners, arguments);\n return value === listeners ? drag : value;\n };\n\n drag.clickDistance = function(_) {\n return arguments.length ? (clickDistance2 = (_ = +_) * _, drag) : Math.sqrt(clickDistance2);\n };\n\n return drag;\n }\n\n // Copyright 2018 The Distill Template Authors\n\n const T$a = Template('d-slider', `\n<style>\n :host {\n position: relative;\n display: inline-block;\n }\n\n :host(:focus) {\n outline: none;\n }\n\n .background {\n padding: 9px 0;\n color: white;\n position: relative;\n }\n\n .track {\n height: 3px;\n width: 100%;\n border-radius: 2px;\n background-color: hsla(0, 0%, 0%, 0.2);\n }\n\n .track-fill {\n position: absolute;\n top: 9px;\n height: 3px;\n border-radius: 4px;\n background-color: hsl(24, 100%, 50%);\n }\n\n .knob-container {\n position: absolute;\n top: 10px;\n }\n\n .knob {\n position: absolute;\n top: -6px;\n left: -6px;\n width: 13px;\n height: 13px;\n background-color: hsl(24, 100%, 50%);\n border-radius: 50%;\n transition-property: transform;\n transition-duration: 0.18s;\n transition-timing-function: ease;\n }\n .mousedown .knob {\n transform: scale(1.5);\n }\n\n .knob-highlight {\n position: absolute;\n top: -6px;\n left: -6px;\n width: 13px;\n height: 13px;\n background-color: hsla(0, 0%, 0%, 0.1);\n border-radius: 50%;\n transition-property: transform;\n transition-duration: 0.18s;\n transition-timing-function: ease;\n }\n\n .focus .knob-highlight {\n transform: scale(2);\n }\n\n .ticks {\n position: absolute;\n top: 16px;\n height: 4px;\n width: 100%;\n z-index: -1;\n }\n\n .ticks .tick {\n position: absolute;\n height: 100%;\n border-left: 1px solid hsla(0, 0%, 0%, 0.2);\n }\n\n</style>\n\n <div class='background'>\n <div class='track'></div>\n <div class='track-fill'></div>\n <div class='knob-container'>\n <div class='knob-highlight'></div>\n <div class='knob'></div>\n </div>\n <div class='ticks'></div>\n </div>\n`);\n\n // ARIA\n // If the slider has a visible label, it is referenced by aria-labelledby on the slider element. Otherwise, the slider element has a label provided by aria-label.\n // If the slider is vertically oriented, it has aria-orientation set to vertical. The default value of aria-orientation for a slider is horizontal.\n\n const keyCodes = {\n left: 37,\n up: 38,\n right: 39,\n down: 40,\n pageUp: 33,\n pageDown: 34,\n end: 35,\n home: 36\n };\n\n class Slider extends T$a(HTMLElement) {\n\n\n connectedCallback() {\n this.connected = true;\n this.setAttribute('role', 'slider');\n // Makes the element tab-able.\n if (!this.hasAttribute('tabindex')) { this.setAttribute('tabindex', 0); }\n\n // Keeps track of keyboard vs. mouse interactions for focus rings\n this.mouseEvent = false;\n\n // Handles to shadow DOM elements\n this.knob = this.root.querySelector('.knob-container');\n this.background = this.root.querySelector('.background');\n this.trackFill = this.root.querySelector('.track-fill');\n this.track = this.root.querySelector('.track');\n\n // Default values for attributes\n this.min = this.min ? this.min : 0;\n this.max = this.max ? this.max : 100;\n this.scale = linear$1().domain([this.min, this.max]).range([0, 1]).clamp(true);\n\n this.origin = this.origin !== undefined ? this.origin : this.min;\n this.step = this.step ? this.step : 1;\n this.update(this.value ? this.value : 0);\n\n this.ticks = this.ticks ? this.ticks : false;\n this.renderTicks();\n\n this.drag = drag()\n .container(this.background)\n .on('start', () => {\n this.mouseEvent = true;\n this.background.classList.add('mousedown');\n this.changeValue = this.value;\n this.dragUpdate();\n })\n .on('drag', () => {\n this.dragUpdate();\n })\n .on('end', () => {\n this.mouseEvent = false;\n this.background.classList.remove('mousedown');\n this.dragUpdate();\n if (this.changeValue !== this.value) this.dispatchChange();\n this.changeValue = this.value;\n });\n this.drag(select(this.background));\n\n this.addEventListener('focusin', () => {\n if(!this.mouseEvent) {\n this.background.classList.add('focus');\n }\n });\n this.addEventListener('focusout', () => {\n this.background.classList.remove('focus');\n });\n this.addEventListener('keydown', this.onKeyDown);\n\n }\n\n static get observedAttributes() {return ['min', 'max', 'value', 'step', 'ticks', 'origin', 'tickValues', 'tickLabels']; }\n\n attributeChangedCallback(attr, oldValue, newValue) {\n if (isNaN(newValue) || newValue === undefined || newValue === null) return;\n if (attr == 'min') {\n this.min = +newValue;\n this.setAttribute('aria-valuemin', this.min);\n }\n if (attr == 'max') {\n this.max = +newValue;\n this.setAttribute('aria-valuemax', this.max);\n }\n if (attr == 'value') {\n this.update(+newValue);\n }\n if (attr == 'origin') {\n this.origin = +newValue;\n // this.update(this.value);\n }\n if (attr == 'step') {\n if (newValue > 0) {\n this.step = +newValue;\n }\n }\n if (attr == 'ticks') {\n this.ticks = (newValue === '' ? true : newValue);\n }\n }\n\n onKeyDown(event) {\n this.changeValue = this.value;\n let stopPropagation = false;\n switch (event.keyCode) {\n case keyCodes.left:\n case keyCodes.down:\n this.update(this.value - this.step);\n stopPropagation = true;\n break;\n case keyCodes.right:\n case keyCodes.up:\n this.update(this.value + this.step);\n stopPropagation = true;\n break;\n case keyCodes.pageUp:\n this.update(this.value + this.step * 10);\n stopPropagation = true;\n break;\n\n case keyCodes.pageDown:\n this.update(this.value + this.step * 10);\n stopPropagation = true;\n break;\n case keyCodes.home:\n this.update(this.min);\n stopPropagation = true;\n break;\n case keyCodes.end:\n this.update(this.max);\n stopPropagation = true;\n break;\n }\n if (stopPropagation) {\n this.background.classList.add('focus');\n event.preventDefault();\n event.stopPropagation();\n if (this.changeValue !== this.value) this.dispatchChange();\n }\n }\n\n validateValueRange(min, max, value) {\n return Math.max(Math.min(max, value), min);\n }\n\n quantizeValue(value, step) {\n return Math.round(value / step) * step;\n }\n\n dragUpdate() {\n const bbox = this.background.getBoundingClientRect();\n const x = event.x;\n const width = bbox.width;\n this.update(this.scale.invert(x / width));\n }\n\n update(value) {\n let v = value;\n if (this.step !== 'any') {\n v = this.quantizeValue(value, this.step);\n }\n v = this.validateValueRange(this.min, this.max, v);\n if (this.connected) {\n this.knob.style.left = this.scale(v) * 100 + '%';\n this.trackFill.style.width = this.scale(this.min + Math.abs(v - this.origin)) * 100 + '%';\n this.trackFill.style.left = this.scale(Math.min(v, this.origin)) * 100 + '%';\n }\n if (this.value !== v) {\n this.value = v;\n this.setAttribute('aria-valuenow', this.value);\n this.dispatchInput();\n }\n }\n\n // Dispatches only on a committed change (basically only on mouseup).\n dispatchChange() {\n const e = new Event('change');\n this.dispatchEvent(e, {});\n }\n\n // Dispatches on each value change.\n dispatchInput() {\n const e = new Event('input');\n this.dispatchEvent(e, {});\n }\n\n renderTicks() {\n const ticksContainer = this.root.querySelector('.ticks');\n if (this.ticks !== false) {\n let tickData = [];\n if (this.ticks > 0) {\n tickData = this.scale.ticks(this.ticks);\n } else if (this.step === 'any') {\n tickData = this.scale.ticks();\n } else {\n tickData = range(this.min, this.max + 1e-6, this.step);\n }\n tickData.forEach(d => {\n const tick = document.createElement('div');\n tick.classList.add('tick');\n tick.style.left = this.scale(d) * 100 + '%';\n ticksContainer.appendChild(tick);\n });\n } else {\n ticksContainer.style.display = 'none';\n }\n }\n }\n\n var logo = \"<svg viewBox=\\\"-607 419 64 64\\\">\\n <path d=\\\"M-573.4,478.9c-8,0-14.6-6.4-14.6-14.5s14.6-25.9,14.6-40.8c0,14.9,14.6,32.8,14.6,40.8S-565.4,478.9-573.4,478.9z\\\"/>\\n</svg>\\n\";\n\n const headerTemplate = `\n<style>\ndistill-header {\n position: relative;\n height: 60px;\n background-color: hsl(200, 60%, 15%);\n width: 100%;\n box-sizing: border-box;\n z-index: 2;\n color: rgba(0, 0, 0, 0.8);\n border-bottom: 1px solid rgba(0, 0, 0, 0.08);\n box-shadow: 0 1px 6px rgba(0, 0, 0, 0.05);\n}\ndistill-header .content {\n height: 70px;\n grid-column: page;\n}\ndistill-header a {\n font-size: 16px;\n height: 60px;\n line-height: 60px;\n text-decoration: none;\n color: rgba(255, 255, 255, 0.8);\n padding: 22px 0;\n}\ndistill-header a:hover {\n color: rgba(255, 255, 255, 1);\n}\ndistill-header svg {\n width: 24px;\n position: relative;\n top: 4px;\n margin-right: 2px;\n}\n@media(min-width: 1080px) {\n distill-header {\n height: 70px;\n }\n distill-header a {\n height: 70px;\n line-height: 70px;\n padding: 28px 0;\n }\n distill-header .logo {\n }\n}\ndistill-header svg path {\n fill: none;\n stroke: rgba(255, 255, 255, 0.8);\n stroke-width: 3px;\n}\ndistill-header .logo {\n font-size: 17px;\n font-weight: 200;\n}\ndistill-header .nav {\n float: right;\n font-weight: 300;\n}\ndistill-header .nav a {\n font-size: 12px;\n margin-left: 24px;\n text-transform: uppercase;\n}\n</style>\n<div class=\"content\">\n <a href=\"/\" class=\"logo\">\n ${logo}\n Distill\n </a>\n <nav class=\"nav\">\n <a href=\"/about/\">About</a>\n <a href=\"/prize/\">Prize</a>\n <a href=\"/journal/\">Submit</a>\n </nav>\n</div>\n`;\n\n // Copyright 2018 The Distill Template Authors\n\n const T$b = Template('distill-header', headerTemplate, false);\n\n class DistillHeader extends T$b(HTMLElement) {\n\n }\n\n // Copyright 2018 The Distill Template Authors\n\n const styles$2 = `\n<style>\n distill-appendix {\n contain: layout style;\n }\n\n distill-appendix .citation {\n font-size: 11px;\n line-height: 15px;\n border-left: 1px solid rgba(0, 0, 0, 0.1);\n padding-left: 18px;\n border: 1px solid rgba(0,0,0,0.1);\n background: rgba(0, 0, 0, 0.02);\n padding: 10px 18px;\n border-radius: 3px;\n color: rgba(150, 150, 150, 1);\n overflow: hidden;\n margin-top: -12px;\n white-space: pre-wrap;\n word-wrap: break-word;\n }\n\n distill-appendix > * {\n grid-column: text;\n }\n</style>\n`;\n\n function appendixTemplate(frontMatter) {\n let html = styles$2;\n\n if (typeof frontMatter.githubUrl !== 'undefined') {\n html += `\n <h3 id=\"updates-and-corrections\">Updates and Corrections</h3>\n <p>`;\n if (frontMatter.githubCompareUpdatesUrl) {\n html += `<a href=\"${frontMatter.githubCompareUpdatesUrl}\">View all changes</a> to this article since it was first published.`;\n }\n html += `\n If you see mistakes or want to suggest changes, please <a href=\"${frontMatter.githubUrl + '/issues/new'}\">create an issue on GitHub</a>. </p>\n `;\n }\n\n const journal = frontMatter.journal;\n if (typeof journal !== 'undefined' && journal.title === 'Distill') {\n html += `\n <h3 id=\"reuse\">Reuse</h3>\n <p>Diagrams and text are licensed under Creative Commons Attribution <a href=\"https://creativecommons.org/licenses/by/4.0/\">CC-BY 4.0</a> with the <a class=\"github\" href=\"${frontMatter.githubUrl}\">source available on GitHub</a>, unless noted otherwise. The figures that have been reused from other sources don’t fall under this license and can be recognized by a note in their caption: “Figure from …”.</p>\n `;\n }\n\n if (typeof frontMatter.publishedDate !== 'undefined') {\n html += `\n <h3 id=\"citation\">Citation</h3>\n <p>For attribution in academic contexts, please cite this work as</p>\n <pre class=\"citation short\">${frontMatter.concatenatedAuthors}, \"${frontMatter.title}\", Distill, ${frontMatter.publishedYear}.</pre>\n <p>BibTeX citation</p>\n <pre class=\"citation long\">${serializeFrontmatterToBibtex(frontMatter)}</pre>\n `;\n }\n\n return html;\n }\n\n class DistillAppendix extends HTMLElement {\n\n static get is() { return 'distill-appendix'; }\n\n set frontMatter(frontMatter) {\n this.innerHTML = appendixTemplate(frontMatter);\n }\n\n }\n\n const footerTemplate = `\n<style>\n\n:host {\n color: rgba(255, 255, 255, 0.5);\n font-weight: 300;\n padding: 2rem 0;\n border-top: 1px solid rgba(0, 0, 0, 0.1);\n background-color: hsl(180, 5%, 15%); /*hsl(200, 60%, 15%);*/\n text-align: left;\n contain: content;\n}\n\n.footer-container .logo svg {\n width: 24px;\n position: relative;\n top: 4px;\n margin-right: 2px;\n}\n\n.footer-container .logo svg path {\n fill: none;\n stroke: rgba(255, 255, 255, 0.8);\n stroke-width: 3px;\n}\n\n.footer-container .logo {\n font-size: 17px;\n font-weight: 200;\n color: rgba(255, 255, 255, 0.8);\n text-decoration: none;\n margin-right: 6px;\n}\n\n.footer-container {\n grid-column: text;\n}\n\n.footer-container .nav {\n font-size: 0.9em;\n margin-top: 1.5em;\n}\n\n.footer-container .nav a {\n color: rgba(255, 255, 255, 0.8);\n margin-right: 6px;\n text-decoration: none;\n}\n\n</style>\n\n<div class='footer-container'>\n\n <a href=\"/\" class=\"logo\">\n ${logo}\n Distill\n </a> is dedicated to clear explanations of machine learning\n\n <div class=\"nav\">\n <a href=\"https://distill.pub/about/\">About</a>\n <a href=\"https://distill.pub/journal/\">Submit</a>\n <a href=\"https://distill.pub/prize/\">Prize</a>\n <a href=\"https://distill.pub/archive/\">Archive</a>\n <a href=\"https://distill.pub/rss.xml\">RSS</a>\n <a href=\"https://github.com/distillpub\">GitHub</a>\n <a href=\"https://twitter.com/distillpub\">Twitter</a>\n ISSN 2476-0757\n </div>\n\n</div>\n\n`;\n\n // Copyright 2018 The Distill Template Authors\n\n const T$c = Template('distill-footer', footerTemplate);\n\n class DistillFooter extends T$c(HTMLElement) {\n\n }\n\n // Copyright 2018 The Distill Template Authors\n\n let templateIsLoading = false;\n let runlevel = 0;\n const initialize = function() {\n if (window.distill.runlevel < 1) {\n throw new Error(\"Insufficient Runlevel for Distill Template!\");\n }\n\n /* 1. Flag that we're being loaded */\n if (\"distill\" in window && window.distill.templateIsLoading) {\n throw new Error(\n \"Runlevel 1: Distill Template is getting loaded more than once, aborting!\"\n );\n } else {\n window.distill.templateIsLoading = true;\n console.debug(\"Runlevel 1: Distill Template has started loading.\");\n }\n\n /* 2. Add styles if they weren't added during prerendering */\n makeStyleTag(document);\n console.debug(\"Runlevel 1: Static Distill styles have been added.\");\n console.debug(\"Runlevel 1->2.\");\n window.distill.runlevel += 1;\n\n /* 3. Register Controller listener functions */\n /* Needs to happen before components to their connected callbacks have a controller to talk to. */\n for (const [functionName, callback] of Object.entries(Controller.listeners)) {\n if (typeof callback === \"function\") {\n document.addEventListener(functionName, callback);\n } else {\n console.error(\"Runlevel 2: Controller listeners need to be functions!\");\n }\n }\n console.debug(\"Runlevel 2: We can now listen to controller events.\");\n console.debug(\"Runlevel 2->3.\");\n window.distill.runlevel += 1;\n\n /* 4. Register components */\n const components = [\n Abstract, Appendix, Article, Bibliography, Byline, Cite, CitationList, Code,\n Footnote, FootnoteList, FrontMatter$1, HoverBox, Title, DMath, References, TOC, Figure,\n Slider, Interstitial\n ];\n\n const distillComponents = [DistillHeader, DistillAppendix, DistillFooter];\n\n if (window.distill.runlevel < 2) {\n throw new Error(\"Insufficient Runlevel for adding custom elements!\");\n }\n const allComponents = components.concat(distillComponents);\n for (const component of allComponents) {\n console.debug(\"Runlevel 2: Registering custom element: \" + component.is);\n customElements.define(component.is, component);\n }\n\n console.debug(\n \"Runlevel 3: Distill Template finished registering custom elements.\"\n );\n console.debug(\"Runlevel 3->4.\");\n window.distill.runlevel += 1;\n\n // If template was added after DOMContentLoaded we may have missed that event.\n // Controller will check for that case, so trigger the event explicitly:\n if (domContentLoaded()) {\n Controller.listeners.DOMContentLoaded();\n }\n\n console.debug(\"Runlevel 4: Distill Template initialisation complete.\");\n window.distill.templateIsLoading = false;\n window.distill.templateHasLoaded = true;\n };\n\n window.distill = { runlevel, initialize, templateIsLoading };\n\n /* 0. Check browser feature support; synchronously polyfill if needed */\n if (Polyfills.browserSupportsAllFeatures()) {\n console.debug(\"Runlevel 0: No need for polyfills.\");\n console.debug(\"Runlevel 0->1.\");\n window.distill.runlevel += 1;\n window.distill.initialize();\n } else {\n console.debug(\"Runlevel 0: Distill Template is loading polyfills.\");\n Polyfills.load(window.distill.initialize);\n }\n\n})));\n//# sourceMappingURL=template.v2.js.map\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","// startup\n// Load entry module and return exports\n// This entry module used 'module' so it can't be inlined\nvar __webpack_exports__ = __webpack_require__(792);\n"],"names":["define","days","months","zeroPad","n","RFC","date","day","getDay","substring","paddedDate","getDate","month","getMonth","year","getFullYear","toString","hours","getUTCHours","minutes","getUTCMinutes","seconds","getUTCSeconds","concat","Author","_createClass","object","_classCallCheck","this","name","author","personalURL","authorURL","affiliation","affiliationURL","affiliations","key","get","names","split","slice","length","join","FrontMatter","title","description","authors","bibliography","Map","bibliographyParsed","citations","citationsCollected","journal","katex","doi","undefined","publishedDate","_url","distillPath","url","set","value","githubPath","_previewURL","updatedDate","toISOString","volume","publishedYear","Error","lastName","map","firstName","slug","toLowerCase","_this","citationKey","_bibliography","_typeof","property","hasOwnProperty","mapFromObject","target","Object","assign","Array","from","reduce","_ref","_ref2","_slicedToArray","objectFromMap","bibliographyEntries","githubUrl","previewURL","issue","publishedDateRFC","publishedMonth","publishedDay","publishedMonthPadded","publishedDayPadded","updatedDateRFC","concatenatedAuthors","bibtexAuthors","source","frontMatter","Mutating","superclass","_superclass","_class","_this2","_callSuper","options","childList","characterData","subtree","observer","MutationObserver","disconnect","renderIfPossible","observe","_inherits","_superPropGet","textContent","root","renderContent","console","error","constructor","Template","templateString","useShadow","arguments","template","document","createElement","innerHTML","window","ShadyCSS","prepareTemplate","_superclass2","_class2","_this3","clone","importNode","content","attachShadow","mode","shadowRoot","appendChild","hasAttribute","styleElement","insertBefore","firstChild","query","querySelector","querySelectorAll","math","findEndOfMath","delimiter","text","startIndex","index","braceLevel","delimLength","character","splitAtDelimiters","startData","leftDelim","rightDelim","display","finalData","i","type","data","lookingForLeft","currIndex","nextIndex","indexOf","push","rawData","renderMathInText","optionsCopy","delimiters","left","right","splitWithDelimiters","fragment","createDocumentFragment","createTextNode","tag","displayMode","setAttribute","e","ParseError","errorCallback","renderElem","elem","childNodes","childNode","nodeType","mightHaveMath","frag","replaceChild","ignoredTags","nodeName","defaultAutoRenderOptions","msg","err","katexCSSTag","DMath","_Mutating","localOptions","katexOptions","katexAdded","addKatex","container","render","_katexOptions","katexLoadedCallback","_step","_iterator","_createForOfIteratorHelper","s","done","f","delimiterStrings","flatMap","d","some","renderMathInElement","body","head","insertAdjacentHTML","scriptTag","src","async","onload","crossorigin","T","HTMLElement","collect_citations","_step2","dom","Set","_iterator2","_step3","_iterator3","getAttribute","k","trim","add","author_string","ent","sep","finalSep","name_strings","last","firsts","initials","replace","venue_string","cite","booktitle","number","pages","publisher","link_string","arxiv_match","exec","label","doi_string","new_line","bibliography_cite","fancy","title_string","hover_cite","a_str","v_str","Math","min","domContentLoaded","readyState","parseFrontmatter","element","firstElementChild","_step4","_iterator4","hasOldStyle","Boolean","hasNewStyle","warn","newAffiliation","_moveLegacyAffiliationFormatIntoArray","JSON","parse","inlineMathRendered","FrontMatter$1","_HTMLElement","_this4","entries","_step5","_iterator5","entry","notify","event","CustomEvent","detail","bubbles","dispatchEvent","_wrapNativeSuper","Controller","waitingOn","listeners","onCiteKeyCreated","_event$detail","citeTag","keys","numbers","onCiteKeyChanged","_step6","_iterator6","waitingCallback","citationListTag","_step7","_iterator7","log","onCiteKeyRemoved","onBibliographyChanged","_step8","_iterator8","debug","onFootnoteChanged","footnotesList","footnotes","onFrontMatterChanged","published","Date","String","authorObject","password","interstitial","parentElement","removeChild","article","byline","h1","hasPassword","inBrowser","onLocalhost","location","hostname","includes","appendix","footnoteList","citationList","optionalComponents","DOMContentLoaded","loaded","frontMatterTag","_step9","_iterator9","_step10","_iterator10","styles","base","addPolyfill","polyfill","polyfillLoadedCallback","script","onerror","polyfills","support","Element","prototype","Polyfills","every","poly","callback","_step11","polyfillLoaded","neededPolyfills","distillRunlevel","_iterator11","_neededPolyfills","filter","Abstract","_T$","selector","T$1","Appendix","_T$2","T$2","isOnlyWhitespace","Article","_HTMLElement2","_this5","mutations","_step12","_iterator12","_step13","_iterator13","addedNodes","addedNode","nodeValue","test","wrapper","parentNode","commonjsGlobal","globalThis","global","self","createCommonjsModule","fn","module","exports","bibtexParse","BibtexParser","notKey","pos","input","currentEntry","setInput","t","getEntries","isWhitespace","match","canCommentOut","skipWhitespace","tryMatch","matchAt","value_braces","bracecount","start","escaped","end","value_comment","str","brcktCnt","value_quotes","single_value","values","key_equals_value","key_value_list","kv","entry_body","directive","preamble","comment","bibtex","string","toJSON","b","toBibtex","json","out","entryType","entryTags","tags","jdx","normalizeTag","full","x","char","parseBibtex","_step14","_iterator14","_i","_Object$entries","_Object$entries$_i","Bibliography","_HTMLElement3","_this6","_step15","_iterator15","parseIfPossible","_this7","requestAnimationFrame","newBibtex","response","oldValue","newValue","_this8","oReq","XMLHttpRequest","receivedBibtex","responseType","open","send","Byline","_HTMLElement4","bylineTemplate","Cite","_T$3","_this9","_numbers","_entries","_this10","outerSpan","innerSpan","hoverBox","customElements","whenDefined","then","listen","displayNumbers","displayEntries","eventName","result","html","T$3","CitationList","_HTMLElement5","style","size","list","stylesTag","heading","id","className","_step16","_iterator16","_step16$value","listItem","renderCitationList","prism","Prism","_self","lang","uniqueId","_","manual","disableWorkerMessageHandler","util","encode","tokens","Token","alias","isArray","o","call","objId","obj","defineProperty","deepClone","visited","forEach","v","getLanguage","currentScript","stack","scripts","getElementsByTagName","languages","extend","redef","inside","before","insert","grammar","ret","token","newToken","old","DFS","propertyType","plugins","highlightAll","highlightAllUnder","env","hooks","run","elements","apply","highlightElement","language","parent","code","insertHighlightedCode","highlightedCode","Worker","worker","filename","onmessage","evt","postMessage","stringify","immediateClose","highlight","tokenize","rest","tokenList","LinkedList","addAfter","matchGrammar","array","node","next","tail","toArray","all","callbacks","matchedStr","greedy","startNode","startPos","oneshot","patterns","j","pattern","lookbehind","lookbehindLength","flags","RegExp","currentNode","removeCount","prev","lastIndex","to","p","after","removeFrom","removeRange","newNode","count","classes","attributes","aliases","addEventListener","message","close","highlightAutomaticallyCallback","defer","setTimeout","WorkerGlobalScope","markup","tagName","includedCdataInside","def","xml","mathml","svg","css","addInlined","clike","javascript","js","fileHighlight","Extensions","pre","extension","xhr","onreadystatechange","status","responseText","statusText","python","py","lua","envVars","insideString","bash","variable","toBeCopied","shell","go","inner","createInline","starAlternative","tableCell","tableRow","tableLine","markdown","punctuation","walkTokens","l","codeLang","codeBlock","cls","autoloader","valueOf","floor","random","loadLanguages","ele","getElementById","md","julia","Code","_Mutating2","languageName","codeTag","tabs","ShadowRoot","preTag","T$4","Footnote","_T$4","_this11","_this12","currentFootnoteId","IdString","host","span","T$5","FootnoteList","_T$5","_step17","_iterator17","footnote","backlink","href","T$6","HoverBox","_T$6","bindDivEvents","bindTriggerEvents","_this13","visible","showAtNode","stopTimeout","extendTimeout","stopPropagation","passive","hide","_this14","position","top","round","bbox","getBoundingClientRect","show","offsetLeft","width","offsetTop","height","timeout","clearTimeout","time","_this15","T$7","Title","_HTMLElement6","References","_T$7","T$8","TOC","_HTMLElement7","_this16","headings","_step18","ToC","_iterator18","el","isInTitle","isException","newLine","renderTOC","Figure","_HTMLElement8","_this17","_ready","_onscreen","_offscreen","loadsWhileScrolling","marginObserver","directObserver","unobserve","readyQueue","runReadyQueue","onscreen","_readyQueue","figure","sort","a","_seenOnScreen","pop","ready","_marginObserver","viewportHeight","innerHeight","margin","rootMargin","threshold","didObserveMarginIntersection","IntersectionObserver","_step19","_iterator19","isIntersecting","addToReadyQueue","_directObserver","didObserveDirectIntersection","_step20","_iterator20","offscreen","isScrolling","Interstitial","_T$8","_this18","shouldRemoveSelf","oninput","passwordChanged","Storage","localStorage","setItem","localStorageIdentifier","getItem","pathname","T$9","ascending","NaN","compare","bisectRight","lo","hi","mid","e10","sqrt","e5","e2","tickIncrement","stop","step","max","power","LN10","pow","initRange","domain","range","factory","definition","create","Color","darker","brighter","reI","reN","reP","reHex","reRgbInteger","reRgbPercent","reRgbaInteger","reRgbaPercent","reHslPercent","reHslaPercent","named","aliceblue","antiquewhite","aqua","aquamarine","azure","beige","bisque","black","blanchedalmond","blue","blueviolet","brown","burlywood","cadetblue","chartreuse","chocolate","coral","cornflowerblue","cornsilk","crimson","cyan","darkblue","darkcyan","darkgoldenrod","darkgray","darkgreen","darkgrey","darkkhaki","darkmagenta","darkolivegreen","darkorange","darkorchid","darkred","darksalmon","darkseagreen","darkslateblue","darkslategray","darkslategrey","darkturquoise","darkviolet","deeppink","deepskyblue","dimgray","dimgrey","dodgerblue","firebrick","floralwhite","forestgreen","fuchsia","gainsboro","ghostwhite","gold","goldenrod","gray","green","greenyellow","grey","honeydew","hotpink","indianred","indigo","ivory","khaki","lavender","lavenderblush","lawngreen","lemonchiffon","lightblue","lightcoral","lightcyan","lightgoldenrodyellow","lightgray","lightgreen","lightgrey","lightpink","lightsalmon","lightseagreen","lightskyblue","lightslategray","lightslategrey","lightsteelblue","lightyellow","lime","limegreen","linen","magenta","maroon","mediumaquamarine","mediumblue","mediumorchid","mediumpurple","mediumseagreen","mediumslateblue","mediumspringgreen","mediumturquoise","mediumvioletred","midnightblue","mintcream","mistyrose","moccasin","navajowhite","navy","oldlace","olive","olivedrab","orange","orangered","orchid","palegoldenrod","palegreen","paleturquoise","palevioletred","papayawhip","peachpuff","peru","pink","plum","powderblue","purple","rebeccapurple","red","rosybrown","royalblue","saddlebrown","salmon","sandybrown","seagreen","seashell","sienna","silver","skyblue","slateblue","slategray","slategrey","snow","springgreen","steelblue","tan","teal","thistle","tomato","turquoise","violet","wheat","white","whitesmoke","yellow","yellowgreen","color_formatHex","rgb","formatHex","color_formatRgb","formatRgb","color","format","m","parseInt","rgbn","Rgb","rgba","hsla","r","g","rgbConvert","opacity","rgb_formatHex","hex","rgb_formatRgb","isNaN","h","Hsl","hslConvert","hsl2rgb","m1","m2","copy","channels","displayable","formatHsl","deg2rad","PI","rad2deg","Xn","Zn","t0","t1","t2","t3","labConvert","Lab","Hcl","hcl2lab","z","rgb2lrgb","y","xyz2lab","lab2xyz","lrgb2rgb","c","cos","sin","atan2","hclConvert","A","B","C","D","E","ED","EB","BC_DA","Cubehelix","constant","gamma","nogamma","exponential","linear","bl","cubehelixConvert","cosh","sinh","rgb$1","rgbGamma","numberArray","genericArray","nb","na","interpolate","setTime","interpolateNumber","reA","reB","am","bm","bs","bi","q","one","zero","ArrayBuffer","isView","DataView","interpolateRound","unit","identity","normalize","bimap","d0","d1","r0","r1","polymap","reverse","transformer","transform","untransform","unknown","piecewise","output","interpolate$1","clamp","rescale","scale","invert","rangeRound","u","formatDecimal","toExponential","coefficient","exponent","abs","prefixExponent","re","formatSpecifier","specifier","FormatSpecifier","fill","align","sign","symbol","comma","precision","formatRounded","formatTypes","toFixed","toPrecision","toUpperCase","identity$1","locale","formatPrefix","prefixes","formatLocale","grouping","thousands","group","Number","currencyPrefix","currency","currencySuffix","decimal","numerals","formatNumerals","percent","minus","nan","newFormat","prefix","suffix","formatType","maybeSuffix","valuePrefix","valueSuffix","valueNegative","i1","i0","formatTrim","charCodeAt","Infinity","padding","tickFormat","step0","step1","tickStep","precisionPrefix","precisionRound","precisionFixed","linearish","ticks","isFinite","ceil","nice","linear$1","t0$1","t1$1","newInterval","floori","offseti","field","interval","offset","previous","millisecond","durationSecond","durationMinute","durationHour","durationDay","durationWeek","getMilliseconds","getSeconds","getMinutes","getHours","setHours","setDate","getTimezoneOffset","weekday","sunday","monday","thursday","setMonth","setFullYear","setUTCSeconds","setUTCMinutes","utcDay","setUTCHours","setUTCDate","getUTCDate","utcWeekday","getUTCDay","utcSunday","utcMonday","utcThursday","utcYear","setUTCMonth","getUTCMonth","getUTCFullYear","setUTCFullYear","localDate","H","M","S","L","utcDate","UTC","newDate","locale$1","utcFormat","utcParse","pads","numberRe","percentRe","requoteRe","pad","requote","formatRe","formatLookup","parseWeekdayNumberSunday","w","parseWeekdayNumberMonday","parseWeekNumberSunday","U","parseWeekNumberISO","V","parseWeekNumberMonday","W","parseFullYear","parseYear","parseZone","Z","parseQuarter","parseMonthNumber","parseDayOfMonth","parseDayOfYear","parseHour24","parseMinutes","parseSeconds","parseMilliseconds","parseMicroseconds","parseLiteralPercent","parseUnixTimestamp","Q","parseUnixTimestampSeconds","formatDayOfMonth","formatHour24","formatHour12","formatDayOfYear","formatMilliseconds","formatMicroseconds","formatMonthNumber","formatMinutes","formatSeconds","formatWeekdayNumberMonday","formatWeekNumberSunday","formatWeekNumberISO","formatWeekdayNumberSunday","formatWeekNumberMonday","formatYear","formatFullYear","formatZone","formatUTCDayOfMonth","formatUTCHour24","formatUTCHour12","formatUTCDayOfYear","formatUTCMilliseconds","getUTCMilliseconds","formatUTCMicroseconds","formatUTCMonthNumber","formatUTCMinutes","formatUTCSeconds","formatUTCWeekdayNumberMonday","dow","formatUTCWeekNumberSunday","formatUTCWeekNumberISO","formatUTCWeekdayNumberSunday","formatUTCWeekNumberMonday","formatUTCYear","formatUTCFullYear","formatUTCZone","formatLiteralPercent","formatUnixTimestamp","formatUnixTimestampSeconds","locale_dateTime","dateTime","locale_date","locale_time","locale_periods","periods","locale_weekdays","locale_shortWeekdays","shortDays","locale_months","locale_shortMonths","shortMonths","periodRe","periodLookup","weekdayRe","weekdayLookup","shortWeekdayRe","shortWeekdayLookup","monthRe","monthLookup","shortMonthRe","shortMonthLookup","formats","utcFormats","parses","parseSpecifier","charAt","newParse","week","day$1","X","formatLocale$1","defaultLocale$1","isoSpecifier","noop","dispatch","Dispatch","on","typename","types","that","args","xhtml","namespaces","xlink","xmlns","namespace","space","local","creatorInherit","ownerDocument","uri","namespaceURI","documentElement","createElementNS","creatorFixed","fullname","creator","none","empty","sparse","update","EnterNode","datum","_next","_parent","__data__","child","bindIndex","enter","exit","groupLength","dataLength","bindKey","keyValue","nodeByKeyValue","keyValues","ascending$1","attrRemove","removeAttribute","attrRemoveNS","removeAttributeNS","attrConstant","attrConstantNS","setAttributeNS","attrFunction","attrFunctionNS","defaultView","styleRemove","removeProperty","styleConstant","priority","setProperty","styleFunction","propertyRemove","propertyConstant","propertyFunction","classArray","classList","ClassList","_node","_names","classedAdd","classedRemove","remove","classedTrue","classedFalse","classedFunction","textRemove","textConstant","textFunction","htmlRemove","htmlConstant","htmlFunction","raise","nextSibling","lower","previousSibling","constantNull","selection_cloneShallow","cloneNode","selection_cloneDeep","splice","contains","filterEvents","filterContextListener","listener","contextListener","related","relatedTarget","compareDocumentPosition","event1","event0","onRemove","__on","removeEventListener","capture","onAdd","wrap","customEvent","sourceEvent","params","createEvent","initEvent","cancelable","dispatchConstant","dispatchFunction","mouseenter","mouseleave","Selection","groups","parents","_groups","_parents","select","current","point","ownerSVGElement","createSVGPoint","clientX","clientY","matrixTransform","getScreenCTM","inverse","rect","clientLeft","clientTop","mouse","changedTouches","touch","touches","identifier","nopropagation","stopImmediatePropagation","noevent","preventDefault","constant$3","DragEvent","subject","active","dx","dy","defaultFilter","ctrlKey","button","defaultContainer","defaultSubject","defaultTouchable","navigator","maxTouchPoints","drag","mousedownx","mousedowny","mousemoving","touchending","touchable","gestures","clickDistance2","selection","mousedowned","touchstarted","touchmoved","touchended","gesture","beforestart","view","mousemoved","mouseupped","__noselect","MozUserSelect","nodrag","noclick","yesdrag","sublisteners","p0","clickDistance","subgroups","subnode","subgroup","selectAll","selectorAll","matches","matcher","each","bind","enterGroup","updateGroup","_enter","_exit","onenter","onupdate","onexit","append","merge","order","groups0","groups1","m0","merges","group0","group1","compareNode","sortgroups","sortgroup","nodes","attr","getAttributeNS","getPropertyValue","getComputedStyle","styleValue","classed","deep","typenames","parseTypenames$1","T$a","keyCodes","Slider","_T$a","_this19","connected","mouseEvent","knob","background","trackFill","track","origin","renderTicks","changeValue","dragUpdate","dispatchChange","onKeyDown","keyCode","quantizeValue","validateValueRange","dispatchInput","Event","_this20","ticksContainer","tick","logo","DistillHeader","_T$b","T$b","DistillAppendix","_HTMLElement9","githubCompareUpdatesUrl","serializeFrontmatterToBibtex","appendixTemplate","DistillFooter","_T$c","T$c","distill","runlevel","initialize","templateIsLoading","styleTagId","styleTag","cssTextTag","firstScriptTag","makeStyleTag","_i2","_Object$entries2","_Object$entries2$_i","functionName","components","distillComponents","_step21","_iterator21","component","is","templateHasLoaded","browserSupportsAllFeatures","load","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__","Function"],"sourceRoot":""} \ No newline at end of file