{"version":3,"file":"zinc.js","mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD,O;;;;;ACVAA,mBAAO,CAAC,CAAc,CAAC,IACjB,CAAAC,OAAO,CAAGD,mBAAO,CAAC,CAAiB,CAAC,CACpCE,OAAO,CAAGD,OAAO,CAACC,OAAO,CASzBC,IAAI,CAAG,QAAAA,CAAA,CAAW,CACtB,IAAI,CAACC,QAAQ,CAAGF,OAAO,CACvB,IAAI,CAACG,oBAAoB,CAAG,QAAQ,CACpC,IAAI,CAACC,cAAc,CAAG,CAAG,CACzB,IAAI,CAACC,WAAW,OAAY,CAC5B,IAAI,CAACC,QAAQ,CAAGR,iCAAyC,CACzD,IAAI,CAACS,KAAK,CAAGT,+BAAmC,CAChD,IAAI,CAACU,QAAQ,CAAGV,kCAAyC,CACzD,IAAI,CAACW,QAAQ,CAAGX,kCAAyC,CACzD,IAAI,CAACY,KAAK,CAAGZ,+BAAmC,CAChD,IAAI,CAACa,KAAK,CAAGb,+BAAmC,CAChD,IAAI,CAACc,YAAY,CAAGd,sCAA8C,CAClE,IAAI,CAACe,aAAa,CAAGf,uCAAmD,CACxE,IAAI,CAACgB,QAAQ,CAAGhB,kCAA8B,CAC9C,IAAI,CAACiB,KAAK,CAAGjB,+BAAwB,CACrC,IAAI,CAACkB,WAAW,CAAGlB,qCAAoC,CACvD,IAAI,CAACmB,WAAW,CAAGnB,qCAAoC,CACvD,IAAI,CAACoB,QAAQ,CAAGpB,kCAA8B,CAC9C,IAAI,CAACqB,cAAc,CAAGrB,wCAAoC,CAC1D,IAAI,CAACsB,sBAAsB,CAAGtB,gDAA4C,CAC1E,IAAI,CAACuB,SAAS,CAAGvB,mCAA+B,CAChD,IAAI,CAACwB,gBAAgB,CAAGxB,0CAAsC,CAC9D,IAAI,CAACyB,YAAY,CAAGzB,sCAAkC,CACtD,IAAI,CAAC0B,gBAAgB,CAAG1B,yCAAuC,CAC/D,IAAI,CAAC2B,iBAAiB,CAAG3B,0CAAwC,CACjE,IAAI,CAAC4B,KAAK,CAAG5B,mBAAO,CAAC,CAAO,CAE9B,CAAC,CAlCD;AACA;AACA;AACA;AACA;AACA,GA+BA6B,MAAM,CAACC,OAAO,CAAG,GAAI,CAAA3B,IAAM;;;;;;;ACxC3B;;;;;;;;;;;;;GCAM,CAAAyB,KAAK,CAAG5B,mBAAO,CAAC,CAAO,CAAC,CACxB+B,gBAAgB,CAAG/B,yCAAwC,CAE3DgC,qBAAqB,CAAIA,CAACC,UAAU,CAAEC,UAAU,CAAEC,OAAO,GAAK,CAClE;AAAA,GACI,CAAAC,QAAQ,CAAGL,gBAAgB,CAACE,UAAU,CAAEE,OAAO,CAAC,CAEhDE,aAAa,GAAQ,CACrB,CAAG,CAAGF,OAAO,CAACG,OAAO,GACrBD,aAAa,GAAO,EAExB,GAAI,CAAAE,QAAoB,CACxB,GAAIH,QAAQ,CAACI,MAAM,SAAc,CAAE,CACjC,GAAM,CAAAC,YAAY,CAAGN,OAAO,CAACO,gBAAgB,EAAIP,OAAO,CAACQ,gBAAgB,CACrET,UAAU,EACZK,QAAQ,CAAGL,UAAU,CACrBK,QAAQ,CAACE,YAAY,CAAGA,YAAY,CACpCF,QAAQ,CAACK,YAAY,CAAGT,OAAO,CAACO,gBAAgB,EAE5CN,QAAQ,WAAY,CAAAR,KAAK,CAACiB,cAAc,EAAIT,QAAQ,CAACU,UAAU,CAACC,KAAK,SAAc,CACrFR,QAAQ,CAAG,GAAI,CAAAX,KAAK,CAACoB,iBAAiB,CAAC,CACrCD,KAAK,CAAGZ,OAAO,CAACc,MAAM,CACtBR,YAAY,CAAGA,YAAY,CAC3BG,YAAY,CAAGT,OAAO,CAACO,gBAAgB,CACvCQ,WAAW,CAAGb,aAAa,CAC3BC,OAAO,CAAGH,OAAO,CAACG,OAAO,CACzBa,IAAI,CAAGvB,KAAK,CAACwB,UACf,CAAC,CAAC,CAEFb,QAAQ,CAAG,GAAI,CAAAX,KAAK,CAACoB,iBAAiB,CAAC,CACrCD,KAAK,CAAGZ,OAAO,CAACc,MAAM,CACtBR,YAAY,CAAGA,YAAY,CAC3BG,YAAY,CAAGT,OAAO,CAACO,gBAAgB,CACvCW,YAAY,CAAGzB,KAAK,CAAC0B,YAAY,CACjCJ,WAAW,CAAGb,aAAa,CAC3BC,OAAO,CAAGH,OAAO,CAACG,OAAO,CACzBa,IAAI,CAAGvB,KAAK,CAACwB,UACf,CAAC,CAAC,CAIFjB,OAAO,CAACQ,gBAAgB,EAAIP,QAAQ,CAACmB,eAAe,CAAAR,KAAW,GACjER,QAAQ,CAACiB,eAAe,CAAIxD,0CAA4C,CAAE,CAAC,CAE/E,CAAC,IAAM,CACL,GAAI,CAAA0D,YAAY,CAAGtB,QAAQ,CAACI,MAAM,CAACmB,wBAAwB,CAAC,CAAC,CAC7DpB,QAAQ,CAAG,GAAI,CAAAX,KAAK,CAACgC,iBAAiB,CAAC,CACrCnB,YAAY,CAAGN,OAAO,CAACO,gBAAgB,CACvCK,KAAK,CAAG,GAAI,CAAAnB,KAAK,CAACiC,KAAK,CAAC,CAAC,CAAE,CAAC,CAAE,CAAC,CAAC,CAChCX,WAAW,CAAGb,aAAa,CAC3BC,OAAO,CAAGH,OAAO,CAACG,OAAO,CACzBwB,GAAG,CAAGJ,YAAY,CAClBP,IAAI,CAAGvB,KAAK,CAACwB,UACf,CAAC,CAAC,CACF,iBAAiB,CAAGhB,QAAQ,CAACI,MAC/B,CACA,MAAO,IAAI,CAAAZ,KAAK,CAACoC,IAAI,CAAC5B,QAAQ,CAAEG,QAAQ,CAC1C,CAAC,CAWK/B,QAAQ,CAAG,QAAAA,CAAA,CAAY,CAE5B;AAIC;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAZE,CAqBA;AACF;AACA,KAFE,CAwBA;AACF;AACA;AACA,KAHE,CAQD;AACD;AACA;AACA;AACA,IAJC,CASC;AACF;AACA,KArEGR,oCAAkC,CAAEkE,IAAI,CAAC,IAAI,CAAC,CAEhD,IAAI,CAACH,YAAY,OAAY,CAC5B,IAAI,CAACI,UAAU,GAAO,CAevB,IAAI,CAACC,UAAU,CAAG,CAACnC,UAAU,CAAEC,UAAU,CAAEC,OAAO,GAAK,CACpD;AACF,KAAI,IAAI,CAACkC,KAAK,EAAI,IAAI,CAACA,KAAK,CAACjC,QAAQ,EAAK,MAAAH,UAAwB,GAElE,GAAM,CAAAqC,IAAI,CAAGtC,qBAAqB,CAACC,UAAU,CAAEC,UAAU,CAAEC,OAAO,CAAC,CACnE,IAAI,CAACoC,OAAO,CAACD,IAAI,CAAEnC,OAAO,CAACO,gBAAgB,CAAEP,OAAO,CAACQ,gBAAgB,CAAC,CACvE,CAAC,CAKD,IAAI,CAAC6B,YAAY,CAAG,IAAM,CAEzB,IAAI,CAACpC,QAAQ,CAACqC,kBAAkB,CAAC,CAAC,IAC5B,CAAAC,GAAG,CAAG,IAAI,CAACtC,QAAQ,CAACuC,WAAW,CAACD,GAAG,CAAEE,GAAG,CAAG,IAAI,CAACxC,QAAQ,CAACuC,WAAW,CAACC,GAAG,CACxEC,MAAM,CAAG,GAAI,CAAAjD,KAAK,CAACkD,OAAO,CAAC,CAAC,CAAGF,GAAG,CAACG,CAAC,CAAE,CAAC,CAAGH,GAAG,CAACI,CAAC,CAAC,CAChDC,KAAK,CAAG,GAAI,CAAArD,KAAK,CAACkD,OAAO,CAACJ,GAAG,CAACK,CAAC,CAAGH,GAAG,CAACG,CAAC,CAAEL,GAAG,CAACM,CAAC,CAAGJ,GAAG,CAACI,CAAC,CAAC,CAC7D,IAAI,CAAC5C,QAAQ,CAAC8C,aAAa,CAAC,CAAC,CAAC,CAAG,EAAE,CACnC,IAAK,GAAI,CAAAC,CAAC,CAAG,CAAC,CAAEA,CAAC,CAAG,IAAI,CAAC/C,QAAQ,CAACgD,KAAK,CAACC,MAAM,CAAGF,CAAC,EAAE,CAAE,IAC5C,CAAAG,EAAE,CAAG,IAAI,CAAClD,QAAQ,CAACmD,QAAQ,CAAC,IAAI,CAACnD,QAAQ,CAACgD,KAAK,CAACD,CAAC,CAAC,CAACK,CAAC,CAAC,CACrDC,EAAE,CAAG,IAAI,CAACrD,QAAQ,CAACmD,QAAQ,CAAC,IAAI,CAACnD,QAAQ,CAACgD,KAAK,CAACD,CAAC,CAAC,CAACO,CAAC,CAAC,CACrDC,EAAE,CAAG,IAAI,CAACvD,QAAQ,CAACmD,QAAQ,CAAC,IAAI,CAACnD,QAAQ,CAACgD,KAAK,CAACD,CAAC,CAAC,CAACS,CAAC,CAAC,CAC3DxD,QAAQ,CAAC8C,aAAa,CAAC,CAAC,CAAC,CAACW,IAAI,CAC1B,CACI,GAAI,CAAAjE,KAAK,CAACkD,OAAO,CAAC,CAACQ,EAAE,CAACP,CAAC,CAAGF,MAAM,CAACE,CAAC,EAAEE,KAAK,CAACF,CAAC,CAAE,CAACO,EAAE,CAACN,CAAC,CAAGH,MAAM,CAACG,CAAC,EAAEC,KAAK,CAACD,CAAC,CAAC,CACvE,GAAI,CAAApD,KAAK,CAACkD,OAAO,CAAC,CAACW,EAAE,CAACV,CAAC,CAAGF,MAAM,CAACE,CAAC,EAAEE,KAAK,CAACF,CAAC,CAAE,CAACU,EAAE,CAACT,CAAC,CAAGH,MAAM,CAACG,CAAC,EAAEC,KAAK,CAACD,CAAC,CAAC,CACvE,GAAI,CAAApD,KAAK,CAACkD,OAAO,CAAC,CAACa,EAAE,CAACZ,CAAC,CAAGF,MAAM,CAACE,CAAC,EAAEE,KAAK,CAACF,CAAC,CAAE,CAACY,EAAE,CAACX,CAAC,CAAGH,MAAM,CAACG,CAAC,EAAEC,KAAK,CAACD,CAAC,CAAC,CAC1E,CACT,CACA5C,QAAQ,CAAC0D,aAAa,GACvB,CAAC,CAMA,IAAI,CAACC,oBAAoB,CAAG,UAAW,CACrC,IAAI,CAACC,IAAI,CAACD,oBAAoB,CAAC,CACjC,CAAC,CAOF,IAAI,CAACE,YAAY,CAAGC,SAAS,EAAI,CAChC,IAAI,CAAC7B,KAAK,CAAC9B,QAAQ,CAAC2D,SAAS,CAAGA,SACjC,CAAC,CAKA,IAAI,CAACC,YAAY,CAAG,SAASC,MAAM,CAAEjB,CAAC,CAAE,CACtC,GAAIiB,MAAM,EAAIA,MAAM,CAACf,MAAM,CAAE,IACvB,CAAAf,IAAI,CAAG,IAAI,CAAC+B,QAAQ,CAAC,CAAC,CACpBC,SAAS,CAAGhC,IAAI,CAAClC,QAAQ,CAACmE,YAAY,CAAC,UAAU,CAAC,CACxD,GAAI,CAACjC,IAAI,EAAI,CAAC,CAAGa,CAAC,CAChB,OAEA,GAAI,CAAAqB,KAAK,CAAO,CAAC,CAALrB,CAAK,CACjBiB,MAAM,CAACK,OAAO,CAACC,KAAK,EAAI,CACtBJ,SAAS,CAACK,KAAK,CAACH,KAAK,EAAE,CAAC,CAAGE,KAAK,CAAC,CAAC,CAAC,CACnCJ,SAAS,CAACK,KAAK,CAACH,KAAK,EAAE,CAAC,CAAGE,KAAK,CAAC,CAAC,CAAC,CACnCJ,SAAS,CAACK,KAAK,CAACH,KAAK,EAAE,CAAC,CAAGE,KAAK,CAAC,CAAC,CACpC,CAAC,CAAC,CACFJ,SAAS,CAACM,WAAW,GAAO,CAC5BtC,IAAI,CAAClC,QAAQ,CAACqC,kBAAkB,CAAC,CAAC,CAClCH,IAAI,CAAClC,QAAQ,CAACyE,qBAAqB,CAAC,CAAC,CACrC,IAAI,CAACC,yBAAyB,GAElC,CACF,CAGF,CAAC,CAtGD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAgGAtG,QAAQ,CAACuG,SAAS,CAAGC,MAAM,CAACC,MAAM,CAAEjH,oCAAkC,CAAE+G,SAAS,CAAC,CAClFjF,gBAAgB,CAAGtB,QAAQ;;;;;;;ACpK3B;;;;;;4ECAM,CAAAoB,KAAK,CAAG5B,mBAAO,CAAC,CAAO,CAAC,CACxBkH,aAAa,CAAGlH,iCAAoC,CACpDmH,UAAU,CAAGnH,mCAAmC,CAEtD,QAAS,CAAAqH,UAAUA,CAACC,GAAG,CAAE,IACpB,CAAAC,SAAS,CAAGD,GAAG,CACbE,MAAM,CAAIxH,oCAA8B,CAE9C,GAAIwH,MAAM,CAAE,CACqB,GAAG,EAA/BA,MAAM,CAACA,MAAM,CAACnC,MAAM,CAAE,CAAC,CAAQ,GACzBmC,MAAM,CAAG,GAAG,CAAAC,cAAA,YAEjB,qBAAEC,IAAI,CAACJ,GAAG,CAAC,GACfC,SAAS,CAAIC,MAAM,CAAGF,GAAG,CAE3B,CAEA,MAAO,CAAAC,SACR,CAEA,QAAS,CAAAI,YAAYA,CAACC,MAAM,CAAEC,SAAS,CAAE,CACvC,GAAM,CAAAC,SAAS,CAAGA,CAACF,MAAM,CAAEC,SAAS,GAAK,CACvC,GAAI,CACF,GAAI,CAAAE,MAAM,CAAI,GAAI,CAAAC,GAAG,CAACJ,MAAM,CAAEC,SAAS,CAAC,CAAEI,IAAI,CAC9C;AACA,GAAIL,MAAM,EAA+B,CAAC,CAA5BA,MAAM,CAACM,KAAK,CAAC,GAAG,CAAC,CAAC7C,MAAU,CAAE,CAC1C,GAAM,CAAA8C,aAAa,CAAGN,SAAS,CAACK,KAAK,CAAC,GAAG,CAAC,CAC1C;AAC6B,CAAC,GAA1BC,aAAa,CAAC9C,MAAY,GAC5B0C,MAAM,CAAGA,MAAM,CAAG,GAAG,CAAGI,aAAa,CAAC,CAAC,CAAC,CAE5C,CACA,MAAO,CAAAJ,MACT,CAAE,MAAAK,OAAA,CAAM,CACNC,OAAO,CAACC,KAAK,kDAAAC,MAAA,CAAkDX,MAAM,KAAI,CAC3E,CACF,CAAC,CACD,GAAI,CAACY,KAAK,CAACC,OAAO,CAACb,MAAM,CAAC,CACxB,MAAO,CAAAE,SAAS,CAACF,MAAM,CAAEC,SAAS,CAAC,CAEnC,GAAM,CAAAa,IAAI,CAAG,EAAE,CAIf,MAHA,CAAAd,MAAM,CAACnB,OAAO,CAAEa,GAAG,EAAK,CACtBoB,IAAI,CAAC7C,IAAI,CAACiC,SAAS,CAACR,GAAG,CAAEO,SAAS,CAAC,CACrC,CAAC,CAAC,CACKa,IAEX,CAEA;AACA;AACA;AACA;AACA,GACA,QAAS,CAAAC,cAAcA,CAACrE,IAAI,CAAEsE,SAAS,CAAEC,EAAE,CAAEvD,EAAE,CAAEG,EAAE,CAAE,IAC/C,CAAAqD,UAAU,CAAGxE,IAAI,CAACyE,qBAAqB,CACvCjG,UAAU,OAAY,CACtBwB,IAAI,CAAClC,QAAQ,GACfU,UAAU,CAAGwB,IAAI,CAAClC,QAAQ,CAACmB,eAAe,EAC5C,GAAI,CAAAyF,KAAK,GAAQ,CACjB,GAAIF,UAAU,EAAIhG,UAAU,EAAIA,UAAU,CAACmG,QAAQ,CAAE,CACnD3D,EAAE,CAAC4D,GAAG,CAAC,CAAG,CAAE,CAAG,CAAE,CAAG,CAAC,CACrBzD,EAAE,CAACyD,GAAG,CAAC,CAAG,CAAE,CAAG,CAAE,CAAG,CAAC,CACrB,IAAK,GAAI,CAAA/D,CAAC,CAAG,CAAC,CAAEA,CAAC,CAAG2D,UAAU,CAACzD,MAAM,CAAEF,CAAC,EAAE,CACpB,CAAC,CAAjB2D,UAAU,CAAC3D,CAAC,CAAK,GACnB6D,KAAK,GAAO,CACZH,EAAE,CAACM,YAAY,CAACrG,UAAU,CAACmG,QAAQ,CAAC9D,CAAC,CAAC,CAACwB,KAAK,CAAC,CAC7CrB,EAAE,CAAC8D,GAAG,CAACP,EAAE,CAACjE,GAAG,CAACyE,cAAc,CAACP,UAAU,CAAC3D,CAAC,CAAC,CAAC,CAAC,CAC5CM,EAAE,CAAC2D,GAAG,CAACP,EAAE,CAACnE,GAAG,CAAC2E,cAAc,CAACP,UAAU,CAAC3D,CAAC,CAAC,CAAC,CAAC,EAG5C6D,KAAK,EACPJ,SAAS,CAACM,GAAG,CAAC5D,EAAE,CAAEG,EAAE,CAExB,CACKuD,KAAK,EACRJ,SAAS,CAACU,sBAAsB,CAC9BhF,IAAI,CAAClC,QAAQ,CAACU,UAAU,CAACmG,QAAQ,CAAC,CAEtC3E,IAAI,CAACiF,iBAAiB,MAAW,CAAC,CAClCX,SAAS,CAACY,YAAY,CAAClF,IAAI,CAACmF,WAAW,CACzC,CAGA;AACA,QAAS,CAAA/H,gBAAgBA,CAAC4F,GAAG,CAAEoC,IAAI,CAAEC,QAAQ,CAAEC,aAAa,CAAE,CAC1D;AACA,GAAM,CAAAC,OAAO,CAAG,GAAI,CAAAC,cAAgB,CAGpC;AAFAD,OAAO,CAACE,IAAI,CAAC,KAAK,CAAE1C,UAAU,CAACC,GAAG,CAAC,GAAM,CAAC,CAG1CuC,OAAO,CAACG,kBAAkB,CAAG,IAAM,CAEL,CAAC,EAAvBH,OAAO,CAACI,UAAe,GAED,GAAG,EAArBJ,OAAO,CAACK,MAAa,CACrBP,QAAQ,CAACE,OAAO,CAACM,YAAY,CAAET,IAAI,CAAC,CAEpCE,aAAa,CAACtC,GAAG,CAAC,CAG9B,CAAC,CAEDuC,OAAO,CAACO,IAAI,CAAC,IAAI,CACrB,CAEA,QAAS,CAAAzI,iBAAiBA,CAAC+G,IAAI,CAAEiB,QAAQ,CAAEC,aAAa,CAAE,CAKtD;AACA,QAAS,CAAAS,eAAeA,CAACC,IAAI,CAAEC,QAAQ,CAAE,CACrCC,MAAM,CAACD,QAAQ,CAAC,CAAGD,IAAI,CACvBG,WAAW,EAAE,CAGTA,WAAW,EAAIC,OAAO,EACtBf,QAAQ,CAACa,MAAM,CAEvB,CAEA,OAfM,CAAAE,OAAO,CAAGhC,IAAI,CAACrD,MAAM,CACvBoF,WAAW,CAAG,CAAC,CACbD,MAAM,CAAG,EAAE,CAaRrF,CAAC,CAAG,CAAC,CAAEA,CAAC,CAAGuF,OAAO,CAAEvF,CAAC,EAAE,CAC/BzD,gBAAgB,CAACgH,IAAI,CAACvD,CAAC,CAAC,CAAEA,CAAC,CAAEkF,eAAe,CAAET,aAAa,CAEhE,CAGA;AACA9H,oBAAoB,CAAG,CAAC8I,MAAM,CAAEpE,KAAK,GAAK,IAChC,CAAAqE,eAAe,CAAGC,IAAI,CAACC,KAAK,CAACvE,KAAK,CAAC,CAAC,CAAC,CACrCwE,SAAS,CAAGxE,KAAK,CAAC,CAAC,CACrByE,SAAS,CAAG,CAAC,CACA,CAAC,EAAdD,SAAc,CAEdC,SAAS,CAAGL,MAAM,CAACC,eAAe,CAAC,CAACK,CAAC,CAEnB,CAAC,EAAdF,SAAc,CAEnBC,SAAS,CAAGL,MAAM,CAACC,eAAe,CAAC,CAACM,CAAC,CAEnB,CAAC,EAAdH,SAAc,GAEnBC,SAAS,CAAGL,MAAM,CAACC,eAAe,CAAC,CAACnF,CAAC,EAEzC,GAAM,CAAA0F,OAAO,CAAG,GAAI,CAAAxJ,KAAK,CAACiC,KAAK,CAACoH,SAAS,CAAC,CAC1C,MAAO,CAACG,OAAO,CAACF,CAAC,CAAEE,OAAO,CAACD,CAAC,CAAEC,OAAO,CAAC1F,CAAC,CAC3C,CAAC,CAED5D,iCAAiC,CAAG,SAASwJ,cAAc,CAAEjH,KAAK,CAAE,CAClE,GAAIA,KAAK,EAAIiH,cAAc,EAAIA,cAAc,CAAC/H,eAAe,EAC3D+H,cAAc,CAAC/H,eAAe,CAAAR,KAAW,CAAE,IACrC,CAAAwI,WAAW,CAAGD,cAAc,CAAC/H,eAAe,CAAAR,KAAW,CACvD+F,UAAU,CAAGzE,KAAK,CAAC0E,qBAAqB,CACxC1D,MAAM,CAAGyD,UAAU,CAACzD,MAAM,CAChCiG,cAAc,CAACE,eAAe,CAAE,aAAc,CAAC,CAC/CF,cAAc,CAACE,eAAe,CAAE,aAAc,CAAC,CAG/C,OAFI,CAAAC,KAAK,CAAG,CAAC,CACTC,UAAU,CAAG,EAAE,CACVvG,CAAC,CAAG,CAAC,CAAG,CAAC,CAAGsG,KAAK,EAAMtG,CAAC,CAAGE,MAAO,CAAEF,CAAC,EAAE,CAC1B,CAAC,CAAjB2D,UAAU,CAAC3D,CAAC,CAAK,GACnBsG,KAAK,EAAE,CACPC,UAAU,CAAC7F,IAAI,CAAC,CAACV,CAAC,CAAE2D,UAAU,CAAC3D,CAAC,CAAC,CAAC,CAAC,EAGd,CAAC,EAAtBuG,UAAU,CAACrG,MAAW,EACxBiG,cAAc,CAACK,YAAY,CAAC,aAAa,CAAEJ,WAAW,CAAEG,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAG,CAAC,CAC5EJ,cAAc,CAACK,YAAY,CAAC,aAAa,CAAEJ,WAAW,CAAEG,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAG,CAAC,EAC9C,CAAC,EAAtBA,UAAU,CAACrG,MAAW,GAC/BiG,cAAc,CAACK,YAAY,CAAC,aAAa,CAAEJ,WAAW,CAAEG,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAG,CAAC,CAC5EJ,cAAc,CAACK,YAAY,CAAC,aAAa,CAAEJ,WAAW,CAAEG,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAG,CAAC,CAEhF,CACF,CAAC,CAGD5J,wBAAwB,CAAG,CAACG,UAAU,CAAEE,OAAO,GAAK,CAClD,GAAI,CAAAC,QAAoB,CAiBxB,MAhBI,CAAAH,UAAU,WAAY,CAAAiF,aAAa,EACjC/E,OAAO,CAACO,gBAAgB,EAAI,CAACT,UAAU,CAAC2J,iBAAiB,GAC1D,MAAA3J,UAAU,CAACW,YAAyB,EAAsC,CAAC,EAAnCX,UAAU,CAACW,YAAY,CAACyC,MAAW,CAAC,EAC7EpD,UAAU,CAAC4J,mBAAmB,CAAC,CAAC,CAClCzJ,QAAQ,CAAGH,UAAU,CAAC6J,uBAAuB,CAAC,CAAC,CAC3C3J,OAAO,CAACQ,gBAAgB,EAC1BoJ,sCAAsC,CAAC9J,UAAU,CAAEG,QAAQ,CAAC,EAErDH,UAAU,WAAY,CAAAL,KAAK,CAACiB,cAAc,GACnDT,QAAQ,CAAGH,UAAU,CAAC+J,KAAK,CAAC,CAAC,EAE/B5J,QAAQ,CAAC6J,gBAAgB,GAAO,CAChC7J,QAAQ,CAACqC,kBAAkB,CAAC,CAAC,CAC7BrC,QAAQ,CAACyE,qBAAqB,CAAC,CAAC,CAC5B5E,UAAU,CAACO,MAAM,GACnBJ,QAAQ,CAACI,MAAM,CAAGP,UAAU,CAACO,MAAM,EAC9BJ,QACT,CAAC,CAEDN,uCAAuC,CAAG,CAACM,QAAQ,CAAE+J,cAAc,GAAK,CACtE,GAAI/J,QAAQ,EAAIA,QAAQ,CAACmJ,WAAW,EAAkC,CAAC,CAA/BnJ,QAAQ,CAACmJ,WAAW,CAAClG,MAAU,CAAG,CAIxE,OAHI,CAAAsB,KAAK,CAAG,EAAE,CACV4E,WAAW,CAAGnJ,QAAQ,CAACmJ,WAAW,CAChCZ,YAAY,CAAG3K,qCAAmC,CAC9CmF,CAAC,CAAG,CAAC,CAAEiH,CAAC,CAAGb,WAAW,CAAClG,MAAM,CAAEF,CAAC,CAAGiH,CAAC,CAAEjH,CAAC,EAAG,CAAG,CAGrD,OAFI,CAAAkH,UAAU,CAAGd,WAAW,CAAEpG,CAAC,CAAE,CAC7BmH,UAAU,CAAG,EAAE,CACTC,CAAC,CAAG,CAAC,CAAEA,CAAC,CAAGnK,QAAQ,CAACgD,KAAK,CAACC,MAAM,CAAEkH,CAAC,EAAG,CAAG,IAC7C,CAAAC,IAAI,CAAGpK,QAAQ,CAACgD,KAAK,CAACmH,CAAC,CAAC,CACxBxJ,KAAK,CAAG4H,YAAY,CAAC0B,UAAU,CAACzB,MAAM,CAAE4B,IAAI,CAAChH,CAAC,CAAC,CACnD8G,UAAU,CAACzG,IAAI,CAAC9C,KAAK,CAAC,CAAC,CAAC,CAAEA,KAAK,CAAC,CAAC,CAAC,CAAEA,KAAK,CAAC,CAAC,CAAC,CAAC,CAC7CA,KAAK,CAAG4H,YAAY,CAAC0B,UAAU,CAACzB,MAAM,CAAE4B,IAAI,CAAC9G,CAAC,CAAC,CAC/C4G,UAAU,CAACzG,IAAI,CAAC9C,KAAK,CAAC,CAAC,CAAC,CAAEA,KAAK,CAAC,CAAC,CAAC,CAAEA,KAAK,CAAC,CAAC,CAAC,CAAC,CAC7CA,KAAK,CAAG4H,YAAY,CAAC0B,UAAU,CAACzB,MAAM,CAAE4B,IAAI,CAAC5G,CAAC,CAAC,CAC/C0G,UAAU,CAACzG,IAAI,CAAC9C,KAAK,CAAC,CAAC,CAAC,CAAEA,KAAK,CAAC,CAAC,CAAC,CAAEA,KAAK,CAAC,CAAC,CAAC,CAC9C,CACA,GAAI,CAAAuD,SAAS,CAAG,GAAI,CAAA1E,KAAK,CAAC6K,sBAAsB,CAA8B,CAAC,EAAL,CAAC,CAAzBrK,QAAQ,CAACgD,KAAK,CAACC,MAAU,CAAI,CAAE,CAAE,CAAC,CACpFiB,SAAS,CAACoG,IAAI,CAAGL,UAAU,CAACK,IAAI,CAChC/F,KAAK,CAACd,IAAI,CAAES,SAAS,CAACqG,SAAS,CAAEL,UAAW,CAAE,CAChD,CACAH,cAAc,CAAC5I,eAAe,CAAAR,KAAW,CAAG4D,KAC9C,CACF,CAAC,CAGD,GAAM,CAAAoF,sCAAsC,CAAGA,CAAC3J,QAAQ,CAAE+J,cAAc,GAAK,CAC3E,GAAI/J,QAAQ,EAAIA,QAAQ,CAACmJ,WAAW,EAAkC,CAAC,CAA/BnJ,QAAQ,CAACmJ,WAAW,CAAClG,MAAU,CAAG,CAIxE,OAHI,CAAAsB,KAAK,CAAG,EAAE,CACV4E,WAAW,CAAGnJ,QAAQ,CAACmJ,WAAW,CAChCZ,YAAY,CAAG3K,qCAAmC,CAC9CmF,CAAC,CAAG,CAAC,CAAEiH,CAAC,CAAGb,WAAW,CAAClG,MAAM,CAAEF,CAAC,CAAGiH,CAAC,CAAEjH,CAAC,EAAG,CAAG,CAGrD,OACM,CAAApC,KAAK,CAHLsJ,UAAU,CAAGd,WAAW,CAAEpG,CAAC,CAAE,CAC7BmH,UAAU,CAAG,EAAE,CACXC,CAAC,CAAG,CAAC,CAAEA,CAAC,CAA8B,CAAC,CAA5BF,UAAU,CAACzB,MAAM,CAACvF,MAAU,CAAEkH,CAAC,EAAG,CACjDxJ,KAAK,CAAG4H,YAAY,CAAC0B,UAAU,CAACzB,MAAM,CAAE2B,CAAC,CAAC,CAC9CD,UAAU,CAACzG,IAAI,CAAC9C,KAAK,CAAC,CAAC,CAAC,CAAEA,KAAK,CAAC,CAAC,CAAC,CAAEA,KAAK,CAAC,CAAC,CAAC,CAAC,CAE/C,GAAM,CAAAuD,SAAS,CAAG,GAAI,CAAA1E,KAAK,CAAC6K,sBAAsB,CAAEH,UAAU,CAAE,CAAE,CAAC,CACnEhG,SAAS,CAACoG,IAAI,CAAGL,UAAU,CAACK,IAAI,CAChC/F,KAAK,CAACd,IAAI,CAAES,SAAU,CACxB,CACA6F,cAAc,CAAC5I,eAAe,CAAAR,KAAW,CAAG4D,KAC9C,CACF,CAAC,CAED;AACA;AACA;AACA;AACA;AACA;AACA,GACA,QAAS,CAAAiG,eAAeA,CAAE9J,UAAU,CAAG,CAQrC,OANI,CAAA+J,UAAU,CACVC,QAAQ,CACRC,UAAU,CAMNzG,SAAS,CALb0G,OAAO,CAAG,CAAE,CAAC,CACbC,WAAW,CAAG,CAAC,CAET9H,CAAC,CAAG,CAAC,CAAEA,CAAC,CAAGrC,UAAU,CAACuC,MAAM,CAAE,EAAGF,CAAC,CAAG,CAK7C,GAHMmB,SAAS,CAAGxD,UAAU,CAAEqC,CAAC,CAAE,CAE5B,SAAA0H,UAAwB,GAAGA,UAAU,CAAGvG,SAAS,CAACK,KAAK,CAACuG,WAAW,EACnEL,UAAU,GAAKvG,SAAS,CAACK,KAAK,CAACuG,WAAW,CAG7C,MADA,CAAA7E,OAAO,CAACC,KAAK,CAAE,2IAA4I,CAAC,CACrJ,IAAI,CAKb,GADK,SAAAwE,QAAsB,GAAGA,QAAQ,CAAGxG,SAAS,CAACwG,QAAQ,EACtDA,QAAQ,GAAKxG,SAAS,CAACwG,QAAQ,CAGlC,MADA,CAAAzE,OAAO,CAACC,KAAK,CAAE,+HAAgI,CAAC,CACzI,IAAI,CAKb,GADK,SAAAyE,UAAwB,GAAGA,UAAU,CAAGzG,SAAS,CAACyG,UAAU,EAC5DA,UAAU,GAAKzG,SAAS,CAACyG,UAAU,CAGtC,MADA,CAAA1E,OAAO,CAACC,KAAK,CAAE,iIAAkI,CAAC,CAC3I,IAAI,CAKb,GADiB,CAAE,CAAC,GAAf0E,OAAe,GAAGA,OAAO,CAAG1G,SAAS,CAAC0G,OAAO,EAC7CA,OAAO,GAAK1G,SAAS,CAAC0G,OAAO,CAGhC,MADA,CAAA3E,OAAO,CAACC,KAAK,CAAE,8HAA+H,CAAC,CACxI,IAAI,CAIb2E,WAAW,EAAI3G,SAAS,CAAC6G,KAAK,CAAGL,QAEnC,CAMA,OAEQ,CAAAxG,UAAS,CANXK,KAAK,CAAG,GAAI,CAAAkG,UAAU,CAAEI,WAAY,CAAC,CACrCzC,MAAM,CAAG,GAAI,CAAA5I,KAAK,CAACwL,eAAe,CAAEzG,KAAK,CAAEmG,QAAQ,CAAEC,UAAW,CAAC,CACnElI,MAAM,CAAG,CAAC,CAEJM,EAAC,CAAG,CAAC,CAAEA,EAAC,CAAGrC,UAAU,CAACuC,MAAM,CAAE,EAAGF,EAAC,CAAG,CAG7C,GADMmB,UAAS,CAAGxD,UAAU,CAAEqC,EAAC,CAAE,CAC5BmB,UAAS,CAAC+G,4BAA4B,CAGzC,OADM,CAAAC,WAAW,CAAGzI,MAAM,CAAGiI,QAAQ,CAC3BP,CAAC,CAAG,CAAC,CAAEH,CAAC,CAAG9F,UAAS,CAAC6G,KAAK,CAAEZ,CAAC,CAAGH,CAAC,CAAEG,CAAC,EAAG,CAE/C,IAAM,GAEE,CAAAgB,KAAK,CAFH3H,CAAC,CAAG,CAAC,CAAEA,CAAC,CAAGkH,QAAQ,CAAElH,CAAC,EAAG,CAE3B2H,KAAK,CAAGjH,UAAS,CAACkH,YAAY,CAAEjB,CAAC,CAAE3G,CAAE,CAAC,CAC5C4E,MAAM,CAACiD,YAAY,CAAElB,CAAC,CAAGe,WAAW,CAAE1H,CAAC,CAAE2H,KAAM,CAAC,CAInD,IAID,CAAA5G,KAAK,CAACuC,GAAG,CAAE5C,UAAS,CAACK,KAAK,CAAE9B,MAAO,CAAC,CAItCA,MAAM,EAAIyB,UAAS,CAAC6G,KAAK,CAAGL,QAE9B,CAQA,MANK,UAAAE,OAAqB,GAExBxC,MAAM,CAACwC,OAAO,CAAGA,OAAO,EAInBxC,MAET,CAEA;AACA;AACA;AACA;AACA;AACA;AACA,GACA1I,uBAAuB,CAAG,SAAE6L,UAAU,CAAyB,CAgB7D,OAhBsC,CAAAC,SAAS,MAAAC,SAAA,CAAAxI,MAAA,EAAAwI,SAAA,eAAAA,SAAA,IAEzCC,SAAS,CAA6B,IAAI,GAA9BH,UAAU,CAAE,CAAC,CAAE,CAACnH,KAAc,CAE1CuH,cAAc,CAAG,GAAI,CAAAC,GAAG,CAAEhH,MAAM,CAACiH,IAAI,CAAEN,UAAU,CAAE,CAAC,CAAE,CAAC7K,UAAW,CAAE,CAAC,CACrEoL,mBAAmB,CAAG,GAAI,CAAAF,GAAG,CAAEhH,MAAM,CAACiH,IAAI,CAAEN,UAAU,CAAE,CAAC,CAAE,CAACpK,eAAgB,CAAE,CAAC,CAE/ET,UAAU,CAAG,CAAC,CAAC,CACfS,eAAe,CAAG,CAAC,CAAC,CAEpB4K,oBAAoB,CAAGR,UAAU,CAAE,CAAC,CAAE,CAACQ,oBAAoB,CAE3DC,cAAc,CAAG,GAAI,CAAAxM,KAAK,CAACiB,cAAgB,CAE7CgC,MAAM,CAAG,CAAC,CAEJM,CAAC,CAAG,CAAC,CAAEA,CAAC,CAAGwI,UAAU,CAACtI,MAAM,CAAE,EAAGF,CAAC,CAAG,IAEvC,CAAA/C,QAAQ,CAAGuL,UAAU,CAAExI,CAAC,CAAE,CAC5BkJ,eAAe,CAAG,CAAC,CAEvB;AAEA,GAAKP,SAAS,IAA0B,IAAI,GAAvB1L,QAAQ,CAACoE,KAAc,CAAE,CAG5C,MADA,CAAA6B,OAAO,CAACC,KAAK,CAAE,8EAA8E,CAAGnD,CAAC,CAAG,8HAA+H,CAAC,CAC7N,IAAI,CAIb;AAEA,IAAM,GAAM,CAAAuH,IAAI,GAAI,CAAAtK,QAAQ,CAACU,UAAU,CAAG,CAExC,GAAK,CAAEiL,cAAc,CAACO,GAAG,CAAE5B,IAAK,CAAC,CAG/B,MADA,CAAArE,OAAO,CAACC,KAAK,CAAE,8EAA8E,CAAGnD,CAAC,CAAG,gEAA+D,CAAGuH,IAAI,CAAG,+DAA+D,CAAC,CACtO,IAAI,CAIR5J,UAAU,CAAE4J,IAAI,CAAE,SAAc,GAAG5J,UAAU,CAAE4J,IAAI,CAAE,CAAG,EAAE,EAE/D5J,UAAU,CAAE4J,IAAI,CAAE,CAAC7G,IAAI,CAAEzD,QAAQ,CAACU,UAAU,CAAE4J,IAAI,CAAG,CAAC,CAEtD2B,eAAe,EAEjB,CAEA;AAEA,GAAKA,eAAe,GAAKN,cAAc,CAACQ,IAAI,CAG1C,MADA,CAAAlG,OAAO,CAACC,KAAK,CAAE,8EAA8E,CAAGnD,CAAC,CAAG,gEAAiE,CAAC,CAC/J,IAAI,CAIb;AAEA,GAAKgJ,oBAAoB,GAAK/L,QAAQ,CAAC+L,oBAAoB,CAGzD,MADA,CAAA9F,OAAO,CAACC,KAAK,CAAE,8EAA8E,CAAGnD,CAAC,CAAG,uEAAwE,CAAC,CACtK,IAAI,CAIb,IAAM,GAAM,CAAAuH,KAAI,GAAI,CAAAtK,QAAQ,CAACmB,eAAe,CAAG,CAE7C,GAAK,CAAE2K,mBAAmB,CAACI,GAAG,CAAE5B,KAAK,CAAC,CAGpC,MADA,CAAArE,OAAO,CAACC,KAAK,CAAE,8EAA8E,CAAGnD,CAAC,CAAG,mEAAoE,CAAC,CAClK,IAAI,CAIR5B,eAAe,CAAEmJ,KAAI,CAAE,SAAc,GAAGnJ,eAAe,CAAEmJ,KAAI,CAAE,CAAG,EAAE,EAEzEnJ,eAAe,CAAEmJ,KAAI,CAAE,CAAC7G,IAAI,CAAEzD,QAAQ,CAACmB,eAAe,CAAEmJ,KAAI,CAAG,CAEjE,CAEA,GAAKkB,SAAS,CAAG,CAEf,GAAI,CAAAT,KAAK,QAET,GAAKW,SAAS,CAEZX,KAAK,CAAG/K,QAAQ,CAACoE,KAAK,CAAC2G,KAAK,KAEvB,IAAK,SAAA/K,QAAQ,CAACU,UAAU,CAACmG,QAAsB,CAEpDkE,KAAK,CAAG/K,QAAQ,CAACU,UAAU,CAACmG,QAAQ,CAACkE,KAAK,KAK1C,OADA,CAAA9E,OAAO,CAACC,KAAK,CAAE,8EAA8E,CAAGnD,CAAC,CAAG,kEAAmE,CAAC,CACjK,IAAI,CAIbiJ,cAAc,CAACI,QAAQ,CAAE3J,MAAM,CAAEsI,KAAK,CAAEhI,CAAE,CAAC,CAE3CN,MAAM,EAAIsI,KAEZ,CAEF,CAEA;AAEA,GAAKW,SAAS,CAAG,CAKf,OAEQ,CAAAtH,KAAK,CALTiI,WAAW,CAAG,CAAC,CACbC,WAAW,CAAG,EAAE,CAEZvJ,GAAC,CAAG,CAAC,CAAEA,GAAC,CAAGwI,UAAU,CAACtI,MAAM,CAAE,EAAGF,GAAC,CAAG,CAEvCqB,KAAK,CAAGmH,UAAU,CAAExI,GAAC,CAAE,CAACqB,KAAK,CAEnC,IAAM,GAAI,CAAA+F,CAAC,CAAG,CAAC,CAAEA,CAAC,CAAG/F,KAAK,CAAC2G,KAAK,CAAE,EAAGZ,CAAC,CAEpCmC,WAAW,CAAC7I,IAAI,CAAEW,KAAK,CAACmI,IAAI,CAAEpC,CAAE,CAAC,CAAGkC,WAAY,CAAC,CAInDA,WAAW,EAAId,UAAU,CAAExI,GAAC,CAAE,CAACrC,UAAU,CAACmG,QAAQ,CAACkE,KAErD,CAEAiB,cAAc,CAACQ,QAAQ,CAAEF,WAAY,CAEvC,CAEA;AAEA,IAAM,GAAM,CAAAhC,MAAI,GAAI,CAAA5J,UAAU,CAAG,CAE/B,GAAM,CAAA+L,eAAe,CAAGjC,eAAe,CAAE9J,UAAU,CAAE4J,MAAI,CAAG,CAAC,CAE7D,GAAK,CAAEmC,eAAe,CAGpB,MADA,CAAAxG,OAAO,CAACC,KAAK,CAAE,iFAAiF,CAAGoE,MAAI,CAAG,aAAc,CAAC,CAClH,IAAI,CAIb0B,cAAc,CAACzC,YAAY,CAAEe,MAAI,CAAEmC,eAAgB,CAErD,CAEA;AAEA,IAAM,GAAM,CAAAnC,MAAI,GAAI,CAAAnJ,eAAe,CAAG,CAEpC,GAAM,CAAAuL,eAAe,CAAGvL,eAAe,CAAEmJ,MAAI,CAAE,CAAE,CAAC,CAAE,CAACrH,MAAM,CAE3D,GAAyB,CAAC,GAArByJ,eAAqB,CAAG,MAE7BV,cAAc,CAAC7K,eAAe,CAAG6K,cAAc,CAAC7K,eAAe,EAAI,CAAC,CAAC,CACrE6K,cAAc,CAAC7K,eAAe,CAAEmJ,MAAI,CAAE,CAAG,EAAE,CAE3C,IAAM,GAEE,CAAAqC,sBAAsB,CAFpB5J,GAAC,CAAG,CAAC,CAAEA,GAAC,CAAG2J,eAAe,CAAE,EAAG3J,GAAC,CAAG,CAErC4J,sBAAsB,CAAG,EAAE,CAEjC,IAAM,GAAI,CAAAxC,EAAC,CAAG,CAAC,CAAEA,EAAC,CAAGhJ,eAAe,CAAEmJ,MAAI,CAAE,CAACrH,MAAM,CAAE,EAAGkH,EAAC,CAEvDwC,sBAAsB,CAAClJ,IAAI,CAAEtC,eAAe,CAAEmJ,MAAI,CAAE,CAAEH,EAAC,CAAE,CAAEpH,GAAC,CAAG,CAAC,CAIlE,GAAM,CAAA6J,oBAAoB,CAAGpC,eAAe,CAAEmC,sBAAuB,CAAC,CAEtE,GAAK,CAAEC,oBAAoB,CAGzB,MADA,CAAA3G,OAAO,CAACC,KAAK,CAAE,iFAAiF,CAAGoE,MAAI,CAAG,kBAAmB,CAAC,CACvH,IAAI,CAIb0B,cAAc,CAAC7K,eAAe,CAAEmJ,MAAI,CAAE,CAAC7G,IAAI,CAAEmJ,oBAAqB,CAEpE,CAEF,CAEA,MAAO,CAAAZ,cAET,CAAC,CAEDtM,qBAAqB,CAAG,SAAEM,QAAQ,CAAwB,IAAtB,CAAA8M,SAAS,GAAArB,SAAA,CAAAxI,MAAA,WAAAwI,SAAA,IAAAA,SAAA,IAAG,IAAI,CAElDqB,SAAS,CAAGpE,IAAI,CAACpG,GAAG,CAAEwK,SAAS,CAAEC,MAAM,CAACC,OAAQ,CAAC,CASjD;AAGA;AAOA;AACA,OACQ,CAAA1C,IAAI,CAjBR2C,WAAW,CAAG,CAAC,CAAC,CAChBC,OAAO,CAAGlN,QAAQ,CAACmN,QAAQ,CAAC,CAAC,CAC7BC,SAAS,CAAGpN,QAAQ,CAACmE,YAAY,CAAE,UAAW,CAAC,CAC/CkJ,WAAW,CAAGH,OAAO,CAAGA,OAAO,CAACnC,KAAK,CAAGqC,SAAS,CAACrC,KAAK,CAGvDuC,SAAS,CAAG,CAAC,CAGbC,cAAc,CAAG3I,MAAM,CAACiH,IAAI,CAAE7L,QAAQ,CAACU,UAAW,CAAC,CACnD8M,UAAU,CAAG,CAAC,CAAC,CACfC,gBAAgB,CAAG,CAAC,CAAC,CACrBC,UAAU,CAAG,EAAE,CACfC,OAAO,CAAG,CAAE,MAAM,CAAE,MAAM,CAAE,MAAM,CAAE,MAAM,CAAE,CAGtC5K,CAAC,CAAG,CAAC,CAAEiH,CAAC,CAAGuD,cAAc,CAACtK,MAAM,CAAEF,CAAC,CAAGiH,CAAC,CAAEjH,CAAC,EAAG,CAAG,CAClDuH,IAAI,CAAGiD,cAAc,CAAExK,CAAC,CAAE,CAE9ByK,UAAU,CAAElD,IAAI,CAAE,CAAG,EAAE,CAEvB,GAAI,CAAAsD,SAAS,CAAG5N,QAAQ,CAACmB,eAAe,CAAEmJ,IAAI,CAAE,CAC3CsD,SAAS,GAEVH,gBAAgB,CAAEnD,IAAI,CAAE,CAAOlE,KAAK,CAAEwH,SAAS,CAAC3K,MAAM,EAAG4K,IAAI,CAAC,CAAC,CAACnM,GAAG,CAAE,IAAM,EAAG,CAAC,CAIvF,CAEA;AAGA,OAFI,CAAAoM,YAAY,CAAGpF,IAAI,CAACqF,KAAK,CAAE,CAAC,CAAGjB,SAAU,CAAC,CAC1CkB,eAAe,CAAGtF,IAAI,CAACuF,GAAG,CAAE,EAAE,CAAEH,YAAa,CAAC,CACxC/K,CAAC,CAAG,CAAC,CAAEA,CAAC,CAAGsK,WAAW,CAAEtK,CAAC,EAAG,CAAG,CAIrC;AAEA,OAJI,CAAAqB,KAAK,CAAG8I,OAAO,CAAGA,OAAO,CAACX,IAAI,CAAExJ,CAAE,CAAC,CAAGA,CAAC,CAGvCmL,IAAI,CAAG,EAAE,CACH/D,CAAC,CAAG,CAAC,CAAEH,CAAC,CAAGuD,cAAc,CAACtK,MAAM,CAAEkH,CAAC,CAAGH,CAAC,CAAEG,CAAC,EAAG,CAMnD,OAJI,CAAAG,IAAI,CAAGiD,cAAc,CAAEpD,CAAC,CAAE,CAC1BjG,SAAS,CAAGlE,QAAQ,CAACmE,YAAY,CAAEmG,IAAK,CAAC,CACzCI,QAAQ,CAAGxG,SAAS,CAACwG,QAAQ,CAEvByD,CAAC,CAAG,CAAC,CAAEA,CAAC,CAAGzD,QAAQ,CAAEyD,CAAC,EAAG,CAE/B;AACAD,IAAI,KAAA/H,MAAA,CAAQ,CAAE,EAAIjC,SAAS,CAAEyJ,OAAO,CAAEQ,CAAC,CAAE,CAAE,CAAE/J,KAAM,CAAC,CAAG4J,eAAe,CAAE,KAAI,CAMpF;AACA;AACA,GAAKE,IAAI,GAAI,CAAAjB,WAAW,CAEpBS,UAAU,CAACjK,IAAI,CAAEwJ,WAAW,CAAEiB,IAAI,CAAG,CAAC,KAEnC,CAEH;AACA,IAAM,GAAI,CAAA/D,CAAC,CAAG,CAAC,CAAEH,CAAC,CAAGuD,cAAc,CAACtK,MAAM,CAAEkH,CAAC,CAAGH,CAAC,CAAEG,CAAC,EAAG,CASnD,OAEQ,CAAAiE,UAAU,CATd9D,IAAI,CAAGiD,cAAc,CAAEpD,CAAC,CAAE,CAC1BjG,SAAS,CAAGlE,QAAQ,CAACmE,YAAY,CAAEmG,IAAK,CAAC,CACzCsD,SAAS,CAAG5N,QAAQ,CAACmB,eAAe,CAAEmJ,IAAI,CAAE,CAC5CI,QAAQ,CAAGxG,SAAS,CAACwG,QAAQ,CAC7B2D,QAAQ,CAAGb,UAAU,CAAElD,IAAI,CAAE,CAC7BgE,cAAc,CAAGb,gBAAgB,CAAEnD,IAAI,CAAE,CAEnC6D,CAAC,CAAG,CAAC,CAAEA,CAAC,CAAGzD,QAAQ,CAAEyD,CAAC,EAAG,CAK/B,GAHIC,UAAU,CAAGT,OAAO,CAAEQ,CAAC,CAAE,CAC7BE,QAAQ,CAAC5K,IAAI,CAAES,SAAS,CAAEkK,UAAU,CAAE,CAAEhK,KAAM,CAAE,CAAC,CAE5CwJ,SAAS,CAEV,IAAM,GAAI,CAAAW,CAAC,CAAG,CAAC,CAAEC,EAAE,CAAGZ,SAAS,CAAC3K,MAAM,CAAEsL,CAAC,CAAGC,EAAE,CAAED,CAAC,EAAG,CAEhDD,cAAc,CAAEC,CAAC,CAAE,CAAC9K,IAAI,CAAEmK,SAAS,CAAEW,CAAC,CAAE,CAAEH,UAAU,CAAE,CAAEhK,KAAM,CAAE,CAAC,CAUjF6I,WAAW,CAAEiB,IAAI,CAAE,CAAGZ,SAAS,CAC/BI,UAAU,CAACjK,IAAI,CAAE6J,SAAU,CAAC,CAC5BA,SAAS,EAEb,CAEJ,CAEA;AACA;AAEA,OADM,CAAAlF,MAAM,CAAGpI,QAAQ,CAAC4J,KAAK,CAAC,CAAC,CACrB7G,CAAC,CAAG,CAAC,CAAEiH,CAAC,CAAGuD,cAAc,CAACtK,MAAM,CAAEF,CAAC,CAAGiH,CAAC,CAAEjH,CAAC,EAAG,CAAG,IAIlD,CAAAmB,SAAS,CAFToG,IAAI,CAAGiD,cAAc,CAAExK,CAAC,CAAE,CAC1B0L,YAAY,CAAGzO,QAAQ,CAACmE,YAAY,CAAEmG,IAAK,CAAC,CAG5CoE,MAAM,CAAG,GAAI,CAAAD,YAAY,CAAClK,KAAK,CAACuG,WAAW,CAAE0C,UAAU,CAAElD,IAAI,CAAG,CAAC,CAcrE;AACA,GAdKmE,YAAY,CAACxD,4BAA4B,CAE1C/G,SAAS,CAAG,GAAI,CAAA1E,KAAK,CAACwL,eAAe,CAAE0D,MAAM,CAAED,YAAY,CAAC/D,QAAQ,CAAE+D,YAAY,CAAC/D,QAAS,CAAC,EAI7FxG,SAAS,CAAGlE,QAAQ,CAACmE,YAAY,CAAEmG,IAAK,CAAC,CAACV,KAAK,CAAC,CAAC,CACjD1F,SAAS,CAACyK,QAAQ,CAAED,MAAO,CAAC,EAIhCtG,MAAM,CAACmB,YAAY,CAAEe,IAAI,CAAEpG,SAAU,CAAC,CAGjCoG,IAAI,GAAI,CAAAmD,gBAAgB,CAEzB,IAAM,GAEE,CAAAmB,cAAc,CAFZzE,CAAC,CAAG,CAAC,CAAEA,CAAC,CAAGsD,gBAAgB,CAAEnD,IAAI,CAAE,CAACrH,MAAM,CAAEkH,CAAC,EAAG,CAElDyE,cAAc,CAAG5O,QAAQ,CAACmB,eAAe,CAAEmJ,IAAI,CAAE,CAAEH,CAAC,CAAE,CAACP,KAAK,CAAC,CAAC,CAClEgF,cAAc,CAACD,QAAQ,CAAE,GAAI,CAAAC,cAAc,CAACrK,KAAK,CAACuG,WAAW,CAAE2C,gBAAgB,CAAEnD,IAAI,CAAE,CAAEH,CAAC,CAAG,CAAE,CAAC,CAChG/B,MAAM,CAACjH,eAAe,CAAEmJ,IAAI,CAAE,CAAEH,CAAC,CAAE,CAAGyE,cAMlD,CAEA;AACA,GAAI,CAAAC,IAAI,CAAGC,UAAU,CAChBpB,UAAU,CAACzK,MAAM,EAAIyF,IAAI,CAACuF,GAAG,CAAE,CAAC,CAAE,CAAE,CAAC,GAAGY,IAAI,CAAGE,WAAW,EAC1DrB,UAAU,CAACzK,MAAM,EAAIyF,IAAI,CAACuF,GAAG,CAAE,CAAC,CAAE,EAAG,CAAC,GAAGY,IAAI,CAAGG,WAAW,KAE5D,CAAAC,cAAc,CAAG,GAAI,CAAAJ,IAAI,CAAEnB,UAAW,CAAC,CACvCA,UAAU,CAAG,IAAI,CAcrB,MAbiB,KAAI,GAAhBR,OAAgB,CAEjBQ,UAAU,CAAG,GAAI,CAAAlO,KAAK,CAACwL,eAAe,CAAEiE,cAAc,CAAE,CAAE,CAAC,EAI3DvB,UAAU,CAAG1N,QAAQ,CAACmN,QAAQ,CAAC,CAAC,CAACvD,KAAK,CAAC,CAAC,CACxC8D,UAAU,CAACiB,QAAQ,CAAEM,cAAe,CAAC,EAIzC7G,MAAM,CAACoE,QAAQ,CAAEkB,UAAW,CAAC,CAEtBtF,MACT,CAAC,CAED,QAAS,CAAA8G,WAAWA,CAACpP,UAAU,CAAE,CAChC,GAAIA,UAAU,CAACqP,mBAAmB,CAAE,CACnC,GAAI,CAAAhP,QAAQ,CAAG,GAAI,CAAAX,KAAK,CAAC4P,gBAAgB,CAAC,CACzCzO,KAAK,CAAGb,UAAU,CAACa,KAAK,CAACiJ,KAAK,CAAC,CAAC,CAChCvJ,YAAY,CAAGP,UAAU,CAACO,YAAY,CACtCG,YAAY,CAAGV,UAAU,CAACU,YAAY,CACtCS,YAAY,CAAGnB,UAAU,CAACmB,YAAY,CACtCH,WAAW,CAAGhB,UAAU,CAACgB,WAAW,CACpCZ,OAAO,CAAGJ,UAAU,CAACI,OAAO,CAC5Ba,IAAI,CAAGjB,UAAU,CAACiB,IACnB,CAAC,CAAC,CAGF,MAFI,CAAAjB,UAAU,CAAC4B,GAAG,GACjBvB,QAAQ,CAACuB,GAAG,CAAG5B,UAAU,CAAC4B,GAAG,EACvBvB,QACR,CAEA,MAAO,CAAAL,UACR,CAEA;AACA;AACA;AACA,GACA,QAAS,CAAAuP,oBAAoBA,CAACpM,MAAM,CAAEe,MAAM,CAAE,CAC5C,GAAIA,MAAM,EAAKf,MAAM,EAAIe,MAAM,CAACf,MAAO,CAAE,IACjC,CAAAjD,QAAQ,CAAG,GAAI,CAAAR,KAAK,CAACiB,cAAgB,CACrC0C,QAAQ,CAAG,GAAI,CAAAmM,YAAY,CAAU,CAAC,CAAVrM,MAAU,CAAC,CACzCF,CAAC,CAAG,CAAC,CAQT,MAPA,CAAAiB,MAAM,CAACK,OAAO,CAACC,KAAK,EAAI,CACtBnB,QAAQ,CAACJ,CAAC,EAAE,CAAC,CAAGuB,KAAK,CAAC,CAAC,CAAC,CACxBnB,QAAQ,CAACJ,CAAC,EAAE,CAAC,CAAGuB,KAAK,CAAC,CAAC,CAAC,CACxBnB,QAAQ,CAACJ,CAAC,EAAE,CAAC,CAAGuB,KAAK,CAAC,CAAC,CACzB,CAAC,CAAC,CACFtE,QAAQ,CAACuJ,YAAY,CAAE,UAAU,CAAE,GAAI,CAAA/J,KAAK,CAACwL,eAAe,CAAE7H,QAAQ,CAAE,CAAE,CAAE,CAAC,CAC7EnD,QAAQ,CAACuP,YAAY,CAAC,CAAC,CAAEvL,MAAM,CAACf,MAAM,CAAC,CAChCjD,QACT,CAEF,CAEA,QAAS,CAAAwP,kBAAkBA,CAAA,CAAG,CAC5B,GAAM,CAAAC,KAAK,CAAG,GAAI,CAAAC,KAAO,CACzBD,KAAK,CAACE,GAAG,CAAG/R,mBAAO,CAAC,CAAmB,CAAC,CACxC,GAAM,CAAAgS,OAAO,CAAG,GAAI,CAAApQ,KAAK,CAACqQ,OAAS,CAGnC,MAFA,CAAAD,OAAO,CAACH,KAAK,CAAGA,KAAK,CACrBG,OAAO,CAACpL,WAAW,GAAO,CACnBoL,OACT,CAEA,QAAS,CAAAE,mBAAmBA,CAAC5H,IAAI,CAAE6H,MAAM,CAAElP,MAAM,CAAEmP,IAAI,CAAEC,KAAK,CAAEC,MAAM,CAAE,CACtE,GAAM,CAAAC,MAAM,CAAG,GAAI,CAAApL,UAAU,CAACmD,IAAI,CAAE6H,MAAM,CAAElP,MAAM,CAAEmP,IAAI,CAAEC,KAAK,CAAEC,MAAM,CAAC,CAaxE,MAZA,CAAAC,MAAM,CAACC,QAAQ,CAAGJ,IAAI,CACtBG,MAAM,CAACE,QAAQ,CAAGJ,KAAK,CACvBE,MAAM,CAACG,UAAU,CAAGJ,MAAM,CAC1BC,MAAM,CAAChQ,QAAQ,CAACuB,GAAG,CAAC6O,eAAe,GAAQ,CAC3CJ,MAAM,CAAChQ,QAAQ,CAACuB,GAAG,CAAC8O,UAAU,CAAG,CAAC,CAClCL,MAAM,CAAChQ,QAAQ,CAACsQ,eAAe,GAAQ,CACvCN,MAAM,CAAChQ,QAAQ,CAACuQ,SAAS,CAAG,EAAG,CAC/BP,MAAM,CAAChQ,QAAQ,CAACW,WAAW,GAAO,CAClCqP,MAAM,CAAChQ,QAAQ,CAACwQ,UAAU,GAAQ,CAClCR,MAAM,CAAChQ,QAAQ,CAACyQ,SAAS,GAAQ,CACjCT,MAAM,CAACU,MAAM,CAAC/J,GAAG,CAAC,EAAG,CAAE,CAAC,GAAG,CAAC,CAC5BqJ,MAAM,CAACW,WAAW,CAAG,GAAK,CACnBX,MACT,CAEA;AACA;AACA;AACA;AACA;AACA;AACA,GACA,QAAS,CAAAY,aAAaA,CAACC,UAAU,CAAEC,SAAS,CAAEC,WAAW,CAAE,CACzD,GAAIA,WAAW,CAAE,IACT,CAAAC,MAAM,CAAGH,UAAU,CAAGA,UAAU,CAAG,EAAE,CACrCI,KAAK,CAAGH,SAAS,CAAGA,SAAS,CAAG,EAAE,CAClCI,CAAC,CAAGH,WAAW,CAACI,WAAW,CAAC,GAAG,CAAC,CACtC,GAAQ,CAAC,CAAC,CAAND,CAAM,CAAE,IACN,CAAAvI,CAAC,OAAY,CACbC,CAAC,OAAY,CAGjB,GAFAD,CAAC,CAAGoI,WAAW,CAACK,SAAS,CAAC,CAAC,CAAEF,CAAC,CAAC,CAC/BtI,CAAC,CAAGmI,WAAW,CAACK,SAAS,CAACF,CAAC,CAAG,CAAC,CAAC,EACtB,GAAG,GAATvI,CAAS,EAAU,IAAI,GAAVA,CAAU,EAAIA,CAAC,CAAC0I,WAAW,CAAC,CAAC,GAAKL,MAAM,CAACK,WAAW,CAAC,CAAC,IAC3D,GAAG,GAATzI,CAAS,EAAU,IAAI,GAAVA,CAAU,EAAIA,CAAC,CAACyI,WAAW,CAAC,CAAC,GAAKJ,KAAK,CAACI,WAAW,CAAC,CAAC,EACpE,QAGN,CAAC,IACC;AACA,GAAIL,MAAM,CAACK,WAAW,CAAC,CAAC,GAAKN,WAAW,CAACM,WAAW,CAAC,CAAC,EACpDJ,KAAK,CAACI,WAAW,CAAC,CAAC,GAAKN,WAAW,CAACM,WAAW,CAAC,CAAC,CACjD,QAGN,CAEA,QACF,CAEA9R,sBAAsB,CAAG6G,cAAc,CACvC7G,oBAAoB,CAAG6F,YAAY,CACnC7F,4BAA4B,CAAG2P,oBAAoB,CACnD3P,0BAA0B,CAAG8P,kBAAkB,CAC/C9P,kBAAkB,CAAGuF,UAAU,CAC/BvF,wBAAwB,CAAGJ,gBAAgB,CAC3CI,yBAAyB,CAAGH,iBAAiB,CAC7CG,mBAAmB,CAAGwP,WAAW,CACjCxP,2BAA2B,CAAGoQ,mBAAmB,CACjDpQ,qBAAqB,CAAGqR,aAAa;;;;;;;;;;;;;;AC7xBtB,GAET,CAAAkB,GAAG,CAAG,GAAI,CAAAL,0CAAS,CACnBM,IAAI,CAAG,GAAI,CAAAJ,2CAAU,CACrBK,OAAO,CAAG,GAAI,CAAAH,0CAAS,CACvBI,KAAK,CAAG,GAAI,CAAAJ,0CAAS,CAE3B,QAAS,CAAA5T,QAAQA,CAAA,CAAG,CAyBnB;AAvBA,IAAI,CAACiU,IAAI,CAAGR,4CAAS,CAACS,YAAY,CAAC,CAAC,CAEpC,IAAI,CAAChI,IAAI,CAAG,EAAE,CACd,IAAI,CAACiI,IAAI,CAAG,UAAU,CAEtB,IAAI,CAACpP,QAAQ,CAAG,EAAE,CAClB,IAAI,CAACqF,MAAM,CAAG,EAAE,CAChB,IAAI,CAACxF,KAAK,CAAG,EAAE,CACf,IAAI,CAACF,aAAa,CAAG,CAAC,EAAE,CAAC,CACxB,IAAI,CAAC0P,OAAO,CAAG,EAAE,CACjB,IAAI,CAACC,GAAG,CAAG,EAAE,CAEd,IAAI,CAACpS,YAAY,CAAG,EAAE,CACtB,IAAI,CAACG,YAAY,CAAG,EAAE,CAEtB,IAAI,CAACkS,WAAW,CAAG,EAAE,CACrB,IAAI,CAACC,WAAW,CAAG,EAAE,CAErB,IAAI,CAACC,aAAa,CAAG,EAAE,CAEvB,IAAI,CAACrQ,WAAW,CAAG,IAAI,CACvB,IAAI,CAACsQ,cAAc,CAAG,IAAI,CAI1B,IAAI,CAACC,kBAAkB,GAAQ,CAC/B,IAAI,CAACC,kBAAkB,GAAQ,CAC/B,IAAI,CAACrP,aAAa,GAAQ,CAC1B,IAAI,CAACsP,iBAAiB,GAAQ,CAC9B,IAAI,CAACnJ,gBAAgB,GAAQ,CAC7B,IAAI,CAACoJ,uBAAuB,GAAQ,CACpC,IAAI,CAACC,gBAAgB,GAAQ,CAC7B,IAAI,CAAC1J,iBAAiB,GAEvB,CAEApL,QAAQ,CAACuG,SAAS,CAAGC,MAAM,CAACuO,MAAM,CAAEvO,MAAM,CAACC,MAAM,CAAE6M,kDAAe,CAAC/M,SAAU,CAAC,CAAE,CAE/EmG,WAAW,CAAE1M,QAAQ,CAErB2D,UAAU,GAAM,CAEhBqF,YAAY,CAAE,SAAAA,aAAWgM,MAAM,CAAG,CAIjC,OAEO,CAAAC,MAAM,CAJPC,YAAY,CAAG,GAAI,CAAA3B,0CAAO,CAAC,CAAC,CAAC4B,eAAe,CAAEH,MAAO,CAAC,CAElDrQ,CAAC,CAAG,CAAC,CAAEyQ,EAAE,CAAG,IAAI,CAACrQ,QAAQ,CAACF,MAAM,CAAEF,CAAC,CAAGyQ,EAAE,CAAEzQ,CAAC,EAAG,CAEjDsQ,MAAM,CAAG,IAAI,CAAClQ,QAAQ,CAAEJ,CAAC,CAAE,CACjCsQ,MAAM,CAACjM,YAAY,CAAEgM,MAAO,CAAC,CAI9B,IAAM,GAEC,CAAAhJ,IAAI,CAFDrH,EAAC,CAAG,CAAC,CAAEyQ,GAAE,CAAG,IAAI,CAACxQ,KAAK,CAACC,MAAM,CAAEF,EAAC,CAAGyQ,GAAE,CAAEzQ,EAAC,EAAG,CAAG,CAEjDqH,IAAI,CAAG,IAAI,CAACpH,KAAK,CAAED,EAAC,CAAE,CAC5BqH,IAAI,CAACqJ,MAAM,CAACC,YAAY,CAAEJ,YAAa,CAAC,CAACK,SAAS,CAAC,CAAC,CAEpD,IAAM,GAAI,CAAAxJ,CAAC,CAAG,CAAC,CAAEyJ,EAAE,CAAGxJ,IAAI,CAACyJ,aAAa,CAAC5Q,MAAM,CAAEkH,CAAC,CAAGyJ,EAAE,CAAEzJ,CAAC,EAAG,CAE5DC,IAAI,CAACyJ,aAAa,CAAE1J,CAAC,CAAE,CAACuJ,YAAY,CAAEJ,YAAa,CAAC,CAACK,SAAS,CAAC,CAIjE,CAiBA,MAf0B,KAAI,GAAzB,IAAI,CAACpR,WAAoB,EAE7B,IAAI,CAACF,kBAAkB,CAAC,CAAC,CAIG,IAAI,GAA5B,IAAI,CAACwQ,cAAuB,EAEhC,IAAI,CAACpO,qBAAqB,CAAC,CAAC,CAI7B,IAAI,CAACsO,kBAAkB,GAAO,CAC9B,IAAI,CAACC,iBAAiB,GAAO,CAEtB,IAER,CAAC,CAEDc,OAAO,CAAE,SAAAA,QAAWC,KAAK,CAAG,CAQ3B,MAJA,CAAA9B,GAAG,CAAC+B,aAAa,CAAED,KAAM,CAAC,CAE1B,IAAI,CAAC3M,YAAY,CAAE6K,GAAI,CAAC,CAEjB,IAER,CAAC,CAEDgC,OAAO,CAAE,SAAAA,QAAWF,KAAK,CAAG,CAQ3B,MAJA,CAAA9B,GAAG,CAACiC,aAAa,CAAEH,KAAM,CAAC,CAE1B,IAAI,CAAC3M,YAAY,CAAE6K,GAAI,CAAC,CAEjB,IAER,CAAC,CAEDkC,OAAO,CAAE,SAAAA,QAAWJ,KAAK,CAAG,CAQ3B,MAJA,CAAA9B,GAAG,CAACmC,aAAa,CAAEL,KAAM,CAAC,CAE1B,IAAI,CAAC3M,YAAY,CAAE6K,GAAI,CAAC,CAEjB,IAER,CAAC,CAEDoC,SAAS,CAAE,SAAAA,UAAW1R,CAAC,CAAEC,CAAC,CAAE0R,CAAC,CAAG,CAQ/B,MAJA,CAAArC,GAAG,CAACsC,eAAe,CAAE5R,CAAC,CAAEC,CAAC,CAAE0R,CAAE,CAAC,CAE9B,IAAI,CAAClN,YAAY,CAAE6K,GAAI,CAAC,CAEjB,IAER,CAAC,CAEDuC,KAAK,CAAE,SAAAA,MAAW7R,CAAC,CAAEC,CAAC,CAAE0R,CAAC,CAAG,CAQ3B,MAJA,CAAArC,GAAG,CAACwC,SAAS,CAAE9R,CAAC,CAAEC,CAAC,CAAE0R,CAAE,CAAC,CAExB,IAAI,CAAClN,YAAY,CAAE6K,GAAI,CAAC,CAEjB,IAER,CAAC,CAEDyC,MAAM,CAAE,SAAAA,OAAWC,MAAM,CAAG,CAQ3B,MANA,CAAAzC,IAAI,CAACwC,MAAM,CAAEC,MAAO,CAAC,CAErBzC,IAAI,CAAC0C,YAAY,CAAC,CAAC,CAEnB,IAAI,CAACxN,YAAY,CAAE8K,IAAI,CAACkB,MAAO,CAAC,CAEzB,IAER,CAAC,CAEDyB,kBAAkB,CAAE,SAAAA,mBAAW7U,QAAQ,CAAG,CAkCzC,QAAS,CAAA8U,OAAOA,CAAE1R,CAAC,CAAEE,CAAC,CAAEE,CAAC,CAAEuR,aAAa,CAAG,IAEpC,CAAA9T,YAAY,CAAK,SAAAN,KAAmB,CAAK,EAAE,CAAG,CACnDqU,KAAK,CAACxM,MAAM,CAAEpF,CAAC,CAAE,CAACwG,KAAK,CAAC,CAAC,CACzBoL,KAAK,CAACxM,MAAM,CAAElF,CAAC,CAAE,CAACsG,KAAK,CAAC,CAAC,CACzBoL,KAAK,CAACxM,MAAM,CAAEhF,CAAC,CAAE,CAACoG,KAAK,CAAC,CAAC,CACzB,CAEKiK,aAAa,CAAK,SAAAJ,MAAoB,CAAK,EAAE,CAAG,CACrD,GAAI,CAAAzB,0CAAO,CAAC,CAAC,CAACiD,mBAAmB,CAAExB,MAAM,CAAErQ,CAAE,CAAC,CAC9C,GAAI,CAAA4O,0CAAO,CAAC,CAAC,CAACiD,mBAAmB,CAAExB,MAAM,CAAEnQ,CAAE,CAAC,CAC9C,GAAI,CAAA0O,0CAAO,CAAC,CAAC,CAACiD,mBAAmB,CAAExB,MAAM,CAAEjQ,CAAE,CAAC,CAC9C,CAEK4G,IAAI,CAAG,GAAI,CAAA8K,KAAK,CAAE9R,CAAC,CAAEE,CAAC,CAAEE,CAAC,CAAEqQ,aAAa,CAAE5S,YAAY,CAAE8T,aAAc,CAAC,CAE7EC,KAAK,CAAChS,KAAK,CAACS,IAAI,CAAE2G,IAAK,CAAC,CAEnB,SAAA+K,EAAgB,EAEpBH,KAAK,CAAClS,aAAa,CAAE,CAAC,CAAE,CAACW,IAAI,CAAE,CAC9B,GAAI,CAAAf,0CAAO,CAAC,CAAC,CAACuS,mBAAmB,CAAEE,EAAE,CAAE/R,CAAE,CAAC,CAC1C,GAAI,CAAAV,0CAAO,CAAC,CAAC,CAACuS,mBAAmB,CAAEE,EAAE,CAAE7R,CAAE,CAAC,CAC1C,GAAI,CAAAZ,0CAAO,CAAC,CAAC,CAACuS,mBAAmB,CAAEE,EAAE,CAAE3R,CAAE,CAAC,CACzC,CAAC,CAIC,SAAA4R,GAAiB,EAErBJ,KAAK,CAAClS,aAAa,CAAE,CAAC,CAAE,CAACW,IAAI,CAAE,CAC9B,GAAI,CAAAf,0CAAO,CAAC,CAAC,CAACuS,mBAAmB,CAAEG,GAAG,CAAEhS,CAAE,CAAC,CAC3C,GAAI,CAAAV,0CAAO,CAAC,CAAC,CAACuS,mBAAmB,CAAEG,GAAG,CAAE9R,CAAE,CAAC,CAC3C,GAAI,CAAAZ,0CAAO,CAAC,CAAC,CAACuS,mBAAmB,CAAEG,GAAG,CAAE5R,CAAE,CAAC,CAC1C,CAIJ,CAAC,GAtEK,CAAAwR,KAAK,CAAG,IAAI,CAEZ5Q,KAAK,CAAsB,IAAI,GAAvBpE,QAAQ,CAACoE,KAAc,QAAGpE,QAAQ,CAACoE,KAAiB,CAC5D1D,UAAU,CAAGV,QAAQ,CAACU,UAAU,CAEtC,GAAK,SAAAA,UAAU,CAACmG,QAAsB,CAGrC,MADA,CAAAZ,OAAO,CAACC,KAAK,CAAE,kFAAmF,CAAC,CAC5F,IAAI,CAEX,GAEK,CAAAW,QAAQ,CAAGnG,UAAU,CAACmG,QAAQ,CAC9B4M,MAAM,CAAG/S,UAAU,CAAC+S,MAAM,CAC1B9S,KAAK,CAAGD,UAAU,CAACC,KAAK,CACxBwU,EAAE,CAAGzU,UAAU,CAACyU,EAAE,CAClBC,GAAG,CAAG1U,UAAU,CAAC0U,GAAG,CAErB,SAAAA,GAAiB,GAAG,IAAI,CAACtS,aAAa,CAAE,CAAC,CAAE,CAAG,EAAE,EAErD,IAAM,GAAI,CAAAC,CAAC,CAAG,CAAC,CAAEA,CAAC,CAAG8D,QAAQ,CAACkE,KAAK,CAAEhI,CAAC,EAAG,CAExCiS,KAAK,CAAC7R,QAAQ,CAACM,IAAI,CAAE,GAAI,CAAAuO,0CAAO,CAAC,CAAC,CAACiD,mBAAmB,CAAEpO,QAAQ,CAAE9D,CAAE,CAAE,CAAC,CAElE,SAAApC,KAAmB,EAEvBqU,KAAK,CAACxM,MAAM,CAAC/E,IAAI,CAAE,GAAI,CAAAhC,wCAAK,CAAC,CAAC,CAACwT,mBAAmB,CAAEtU,KAAK,CAAEoC,CAAE,CAAE,CAAC,CA8ClE,GAAM,CAAAsS,MAAM,CAAGrV,QAAQ,CAACqV,MAAM,CAE9B,GAAqB,CAAC,CAAjBA,MAAM,CAACpS,MAAU,CAErB,IAAM,GAAI,CAAAF,GAAC,CAAG,CAAC,CAAEA,GAAC,CAAGsS,MAAM,CAACpS,MAAM,CAAEF,GAAC,EAAG,CAOvC,OALM,CAAAqO,KAAK,CAAGiE,MAAM,CAAEtS,GAAC,CAAE,CAEnBuS,KAAK,CAAGlE,KAAK,CAACkE,KAAK,CACnBvK,KAAK,CAAGqG,KAAK,CAACrG,KAAK,CAEfZ,CAAC,CAAGmL,KAAK,CAAE1B,EAAE,CAAG0B,KAAK,CAAGvK,KAAK,CAAEZ,CAAC,CAAGyJ,EAAE,CAAEzJ,CAAC,EAAI,CAAC,CAEjD,SAAA/F,KAAmB,CAMvB0Q,OAAO,CAAE3K,CAAC,CAAEA,CAAC,CAAG,CAAC,CAAEA,CAAC,CAAG,CAAC,CAAEiH,KAAK,CAAC2D,aAAc,CAAC,CAJ/CD,OAAO,CAAE1Q,KAAK,CAACmI,IAAI,CAAEpC,CAAE,CAAC,CAAE/F,KAAK,CAACmI,IAAI,CAAEpC,CAAC,CAAG,CAAE,CAAC,CAAE/F,KAAK,CAACmI,IAAI,CAAEpC,CAAC,CAAG,CAAE,CAAC,CAAEiH,KAAK,CAAC2D,aAAc,CAAC,CAU3F,IAID,IAAK,SAAA3Q,KAAmB,CAEvB,IAAM,GAAI,CAAArB,GAAC,CAAG,CAAC,CAAEA,GAAC,CAAGqB,KAAK,CAAC2G,KAAK,CAAEhI,GAAC,EAAI,CAAC,CAEvC+R,OAAO,CAAE1Q,KAAK,CAACmI,IAAI,CAAExJ,GAAE,CAAC,CAAEqB,KAAK,CAACmI,IAAI,CAAExJ,GAAC,CAAG,CAAE,CAAC,CAAEqB,KAAK,CAACmI,IAAI,CAAExJ,GAAC,CAAG,CAAE,CAAE,CAAC,CAEpE,IAID,KAAM,GAAI,CAAAA,GAAC,CAAG,CAAC,CAAEA,GAAC,CAAG8D,QAAQ,CAACkE,KAAK,CAAEhI,GAAC,EAAI,CAAC,CAE1C+R,OAAO,CAAE/R,GAAC,CAAEA,GAAC,CAAG,CAAC,CAAEA,GAAC,CAAG,CAAE,CAAC,CAsB7B,MAdA,KAAI,CAACwS,kBAAkB,CAAC,CAAC,CAEK,IAAI,GAA7BvV,QAAQ,CAACuC,WAAoB,GAEjC,IAAI,CAACA,WAAW,CAAGvC,QAAQ,CAACuC,WAAW,CAACqH,KAAK,CAAC,CAAC,EAIf,IAAI,GAAhC5J,QAAQ,CAAC6S,cAAuB,GAEpC,IAAI,CAACA,cAAc,CAAG7S,QAAQ,CAAC6S,cAAc,CAACjJ,KAAK,CAAC,CAAC,EAI/C,IAER,CAAC,CAEDiH,MAAM,CAAE,SAAAA,OAAA,CAAY,CAQnB,MANA,KAAI,CAACxO,kBAAkB,CAAC,CAAC,CAEzB,IAAI,CAACE,WAAW,CAACiT,SAAS,CAAErD,OAAQ,CAAC,CAACsD,MAAM,CAAC,CAAC,CAE9C,IAAI,CAACpB,SAAS,CAAElC,OAAO,CAACxP,CAAC,CAAEwP,OAAO,CAACvP,CAAC,CAAEuP,OAAO,CAACmC,CAAE,CAAC,CAE1C,IAER,CAAC,CAEDX,SAAS,CAAE,SAAAA,UAAA,CAAY,CAEtB,IAAI,CAAClP,qBAAqB,CAAC,CAAC,IAEtB,CAAAoM,MAAM,CAAG,IAAI,CAACgC,cAAc,CAAChC,MAAM,CACnC6E,MAAM,CAAG,IAAI,CAAC7C,cAAc,CAAC6C,MAAM,CAEnCC,CAAC,CAAc,CAAC,GAAZD,MAAY,CAAG,CAAC,CAAG,CAAG,CAAGA,MAAM,CAEnCtC,MAAM,CAAG,GAAI,CAAAxB,0CAAS,CAU5B,MATA,CAAAwB,MAAM,CAACtM,GAAG,CACT6O,CAAC,CAAE,CAAC,CAAE,CAAC,CAAE,CAAEA,CAAC,CAAG9E,MAAM,CAAClO,CAAC,CACvB,CAAC,CAAEgT,CAAC,CAAE,CAAC,CAAE,CAAEA,CAAC,CAAG9E,MAAM,CAACjO,CAAC,CACvB,CAAC,CAAE,CAAC,CAAE+S,CAAC,CAAE,CAAEA,CAAC,CAAG9E,MAAM,CAACyD,CAAC,CACvB,CAAC,CAAE,CAAC,CAAE,CAAC,CAAE,CACV,CAAC,CAED,IAAI,CAAClN,YAAY,CAAEgM,MAAO,CAAC,CAEpB,IAER,CAAC,CAEDmC,kBAAkB,CAAE,SAAAA,mBAAA,CAAY,CAI/B,OAFM,CAAAK,EAAE,CAAG,GAAI,CAAA5D,0CAAS,CAAE6D,EAAE,CAAG,GAAI,CAAA7D,0CAAS,CAElC8D,CAAC,CAAG,CAAC,CAAEC,EAAE,CAAG,IAAI,CAAC/S,KAAK,CAACC,MAAM,CAAE6S,CAAC,CAAGC,EAAE,CAAED,CAAC,EAAG,CAAG,IAEjD,CAAA1L,IAAI,CAAG,IAAI,CAACpH,KAAK,CAAE8S,CAAC,CAAE,CAEtBE,EAAE,CAAG,IAAI,CAAC7S,QAAQ,CAAEiH,IAAI,CAAChH,CAAC,CAAE,CAC5B6S,EAAE,CAAG,IAAI,CAAC9S,QAAQ,CAAEiH,IAAI,CAAC9G,CAAC,CAAE,CAC5B4S,EAAE,CAAG,IAAI,CAAC/S,QAAQ,CAAEiH,IAAI,CAAC5G,CAAC,CAAE,CAElCoS,EAAE,CAACO,UAAU,CAAED,EAAE,CAAED,EAAG,CAAC,CACvBJ,EAAE,CAACM,UAAU,CAAEH,EAAE,CAAEC,EAAG,CAAC,CACvBL,EAAE,CAACQ,KAAK,CAAEP,EAAG,CAAC,CAEdD,EAAE,CAACjC,SAAS,CAAC,CAAC,CAEdvJ,IAAI,CAACqJ,MAAM,CAAC4C,IAAI,CAAET,EAAG,CAEtB,CAED,CAAC,CAEDU,oBAAoB,CAAE,SAAAA,qBAAA,CAAiC,CAItD,OAJgC,CAAAC,YAAY,KAAA9K,SAAA,CAAAxI,MAAA,WAAAwI,SAAA,MAAAA,SAAA,IAEtCtI,QAAQ,CAAOiD,KAAK,CAAE,IAAI,CAACjD,QAAQ,CAACF,MAAM,CAAE,CAExCuT,CAAC,CAAG,CAAC,CAAEC,EAAE,CAAG,IAAI,CAACtT,QAAQ,CAACF,MAAM,CAAEuT,CAAC,CAAGC,EAAE,CAAED,CAAC,EAAG,CAEvDrT,QAAQ,CAAEqT,CAAC,CAAE,CAAG,GAAI,CAAAxE,0CAAS,CAI9B,GAAKuE,YAAY,CAEhB;AACA;AAIA,OAFM,CAAAX,EAAE,CAAG,GAAI,CAAA5D,0CAAS,CAAE6D,EAAE,CAAG,GAAI,CAAA7D,0CAAS,CAElC8D,CAAC,CAAG,CAAC,CAAEC,EAAE,CAAG,IAAI,CAAC/S,KAAK,CAACC,MAAM,CAAE6S,CAAC,CAAGC,EAAE,CAAED,CAAC,EAAG,CAAG,IAEjD,CAAA1L,IAAI,CAAG,IAAI,CAACpH,KAAK,CAAE8S,CAAC,CAAE,CAEtBE,EAAE,CAAG,IAAI,CAAC7S,QAAQ,CAAEiH,IAAI,CAAChH,CAAC,CAAE,CAC5B6S,EAAE,CAAG,IAAI,CAAC9S,QAAQ,CAAEiH,IAAI,CAAC9G,CAAC,CAAE,CAC5B4S,EAAE,CAAG,IAAI,CAAC/S,QAAQ,CAAEiH,IAAI,CAAC5G,CAAC,CAAE,CAElCoS,EAAE,CAACO,UAAU,CAAED,EAAE,CAAED,EAAG,CAAC,CACvBJ,EAAE,CAACM,UAAU,CAAEH,EAAE,CAAEC,EAAG,CAAC,CACvBL,EAAE,CAACQ,KAAK,CAAEP,EAAG,CAAC,CAEd1S,QAAQ,CAAEiH,IAAI,CAAChH,CAAC,CAAE,CAAC4D,GAAG,CAAE4O,EAAG,CAAC,CAC5BzS,QAAQ,CAAEiH,IAAI,CAAC9G,CAAC,CAAE,CAAC0D,GAAG,CAAE4O,EAAG,CAAC,CAC5BzS,QAAQ,CAAEiH,IAAI,CAAC5G,CAAC,CAAE,CAACwD,GAAG,CAAE4O,EAAG,CAE5B,CAAC,IAEK,CAEN,IAAI,CAACL,kBAAkB,CAAC,CAAC,CAEzB,IAAM,GAEC,CAAAnL,KAAI,CAFD0L,EAAC,CAAG,CAAC,CAAEC,GAAE,CAAG,IAAI,CAAC/S,KAAK,CAACC,MAAM,CAAE6S,EAAC,CAAGC,GAAE,CAAED,EAAC,EAAG,CAE9C1L,KAAI,CAAG,IAAI,CAACpH,KAAK,CAAE8S,EAAC,CAAE,CAE5B3S,QAAQ,CAAEiH,KAAI,CAAChH,CAAC,CAAE,CAAC4D,GAAG,CAAEoD,KAAI,CAACqJ,MAAO,CAAC,CACrCtQ,QAAQ,CAAEiH,KAAI,CAAC9G,CAAC,CAAE,CAAC0D,GAAG,CAAEoD,KAAI,CAACqJ,MAAO,CAAC,CACrCtQ,QAAQ,CAAEiH,KAAI,CAAC5G,CAAC,CAAE,CAACwD,GAAG,CAAEoD,KAAI,CAACqJ,MAAO,CAItC,CAEA,IAAM,GAAI,CAAA+C,EAAC,CAAG,CAAC,CAAEC,GAAE,CAAG,IAAI,CAACtT,QAAQ,CAACF,MAAM,CAAEuT,EAAC,CAAGC,GAAE,CAAED,EAAC,EAAG,CAEvDrT,QAAQ,CAAEqT,EAAC,CAAE,CAAC7C,SAAS,CAAC,CAAC,CAI1B,IAAM,GAAI,CAAAmC,GAAC,CAAG,CAAC,CAAEC,IAAE,CAAG,IAAI,CAAC/S,KAAK,CAACC,MAAM,CAAE6S,GAAC,CAAGC,IAAE,CAAED,GAAC,EAAG,CAAG,IAEjD,CAAA1L,MAAI,CAAG,IAAI,CAACpH,KAAK,CAAE8S,GAAC,CAAE,CAEtBjC,aAAa,CAAGzJ,MAAI,CAACyJ,aAAa,CAEV,CAAC,GAA1BA,aAAa,CAAC5Q,MAAY,EAE9B4Q,aAAa,CAAE,CAAC,CAAE,CAACwC,IAAI,CAAElT,QAAQ,CAAEiH,MAAI,CAAChH,CAAC,CAAG,CAAC,CAC7CyQ,aAAa,CAAE,CAAC,CAAE,CAACwC,IAAI,CAAElT,QAAQ,CAAEiH,MAAI,CAAC9G,CAAC,CAAG,CAAC,CAC7CuQ,aAAa,CAAE,CAAC,CAAE,CAACwC,IAAI,CAAElT,QAAQ,CAAEiH,MAAI,CAAC5G,CAAC,CAAG,CAAC,GAI7CqQ,aAAa,CAAE,CAAC,CAAE,CAAG1Q,QAAQ,CAAEiH,MAAI,CAAChH,CAAC,CAAE,CAACwG,KAAK,CAAC,CAAC,CAE/CiK,aAAa,CAAE,CAAC,CAAE,CAAG1Q,QAAQ,CAAEiH,MAAI,CAAC9G,CAAC,CAAE,CAACsG,KAAK,CAAC,CAAC,CAC/CiK,aAAa,CAAE,CAAC,CAAE,CAAG1Q,QAAQ,CAAEiH,MAAI,CAAC5G,CAAC,CAAE,CAACoG,KAAK,CAAC,CAAC,CAIjD,CAQE,MANuB,EAAC,CAArB,IAAI,CAAC5G,KAAK,CAACC,MAAU,GAEzB,IAAI,CAAC+P,iBAAiB,GAAO,EAIrB7P,QAEV,CAAC,CAEDuT,wBAAwB,CAAE,SAAAA,yBAAA,CAAY,CAErC,IAAI,CAACnB,kBAAkB,CAAC,CAAC,CAEzB,IAAM,GAAI,CAAAO,CAAC,CAAG,CAAC,CAAEC,EAAE,CAAG,IAAI,CAAC/S,KAAK,CAACC,MAAM,CAAE6S,CAAC,CAAGC,EAAE,CAAED,CAAC,EAAG,CAAG,IAEjD,CAAA1L,IAAI,CAAG,IAAI,CAACpH,KAAK,CAAE8S,CAAC,CAAE,CAEtBjC,aAAa,CAAGzJ,IAAI,CAACyJ,aAAa,CAEV,CAAC,GAA1BA,aAAa,CAAC5Q,MAAY,EAE9B4Q,aAAa,CAAE,CAAC,CAAE,CAACwC,IAAI,CAAEjM,IAAI,CAACqJ,MAAO,CAAC,CACtCI,aAAa,CAAE,CAAC,CAAE,CAACwC,IAAI,CAAEjM,IAAI,CAACqJ,MAAO,CAAC,CACtCI,aAAa,CAAE,CAAC,CAAE,CAACwC,IAAI,CAAEjM,IAAI,CAACqJ,MAAO,CAAC,GAItCI,aAAa,CAAE,CAAC,CAAE,CAAGzJ,IAAI,CAACqJ,MAAM,CAAC7J,KAAK,CAAC,CAAC,CACxCiK,aAAa,CAAE,CAAC,CAAE,CAAGzJ,IAAI,CAACqJ,MAAM,CAAC7J,KAAK,CAAC,CAAC,CACxCiK,aAAa,CAAE,CAAC,CAAE,CAAGzJ,IAAI,CAACqJ,MAAM,CAAC7J,KAAK,CAAC,CAAC,CAI1C,CAEyB,CAAC,CAArB,IAAI,CAAC5G,KAAK,CAACC,MAAU,GAEzB,IAAI,CAAC+P,iBAAiB,GAAO,CAI/B,CAAC,CAEDvJ,mBAAmB,CAAE,SAAAA,oBAAA,CAAY,CAEhC;AACA;AACA;AAEA,IAAM,GAEC,CAAAW,IAAI,CAFD0L,CAAC,CAAG,CAAC,CAAEC,EAAE,CAAG,IAAI,CAAC/S,KAAK,CAACC,MAAM,CAAE6S,CAAC,CAAGC,EAAE,CAAED,CAAC,EAAG,CAAG,CAEjD1L,IAAI,CAAG,IAAI,CAACpH,KAAK,CAAE8S,CAAC,CAAE,CAErB1L,IAAI,CAACuM,oBAAoB,CAM/BvM,IAAI,CAACuM,oBAAoB,CAACN,IAAI,CAAEjM,IAAI,CAACqJ,MAAO,CAAC,CAJ7CrJ,IAAI,CAACuM,oBAAoB,CAAGvM,IAAI,CAACqJ,MAAM,CAAC7J,KAAK,CAAC,CAAC,CAQzCQ,IAAI,CAACwM,uBAAuB,GAAGxM,IAAI,CAACwM,uBAAuB,CAAG,EAAE,EAEvE,IAAM,GAAI,CAAA7T,CAAC,CAAG,CAAC,CAAEyQ,EAAE,CAAGpJ,IAAI,CAACyJ,aAAa,CAAC5Q,MAAM,CAAEF,CAAC,CAAGyQ,EAAE,CAAEzQ,CAAC,EAAG,CAErDqH,IAAI,CAACwM,uBAAuB,CAAE7T,CAAC,CAAE,CAMvCqH,IAAI,CAACwM,uBAAuB,CAAE7T,CAAC,CAAE,CAACsT,IAAI,CAAEjM,IAAI,CAACyJ,aAAa,CAAE9Q,CAAC,CAAG,CAAC,CAJjEqH,IAAI,CAACwM,uBAAuB,CAAE7T,CAAC,CAAE,CAAGqH,IAAI,CAACyJ,aAAa,CAAE9Q,CAAC,CAAE,CAAC6G,KAAK,CAAC,CAUrE,CAEA;AAEA,GAAM,CAAAiN,MAAM,CAAG,GAAI,CAAAzY,QAAU,CAC7ByY,MAAM,CAAC7T,KAAK,CAAG,IAAI,CAACA,KAAK,CAEzB,IAAM,GAAI,CAAAD,GAAC,CAAG,CAAC,CAAEyQ,IAAE,CAAG,IAAI,CAACnT,YAAY,CAAC4C,MAAM,CAAEF,GAAC,CAAGyQ,IAAE,CAAEzQ,GAAC,EAAG,CAAG,CAE9D;AAEA,GAAK,CAAE,IAAI,CAACvC,YAAY,CAAEuC,GAAC,CAAE,CAAG,CAE/B,IAAI,CAACvC,YAAY,CAAEuC,GAAC,CAAE,CAAG,CAAC,CAAC,CAC3B,IAAI,CAACvC,YAAY,CAAEuC,GAAC,CAAE,CAAC+T,WAAW,CAAG,EAAE,CACvC,IAAI,CAACtW,YAAY,CAAEuC,GAAC,CAAE,CAAC8Q,aAAa,CAAG,EAAE,CAKzC,OAHM,CAAAkD,cAAc,CAAG,IAAI,CAACvW,YAAY,CAAEuC,GAAC,CAAE,CAAC+T,WAAW,CACnDE,gBAAgB,CAAG,IAAI,CAACxW,YAAY,CAAEuC,GAAC,CAAE,CAAC8Q,aAAa,CAEnDiC,GAAC,CAAG,CAAC,CAAEC,IAAE,CAAG,IAAI,CAAC/S,KAAK,CAACC,MAAM,CAAE6S,GAAC,CAAGC,IAAE,CAAED,GAAC,EAAG,CAAG,IAEjD,CAAAmB,UAAU,CAAG,GAAI,CAAAjF,0CAAS,CAC1B6B,cAAa,CAAG,CAAEzQ,CAAC,CAAE,GAAI,CAAA4O,0CAAS,CAAE1O,CAAC,CAAE,GAAI,CAAA0O,0CAAS,CAAExO,CAAC,CAAE,GAAI,CAAAwO,0CAAU,CAAC,CAE9E+E,cAAc,CAACtT,IAAI,CAAEwT,UAAW,CAAC,CACjCD,gBAAgB,CAACvT,IAAI,CAAEoQ,cAAc,CAEtC,CAED,CAEA,GAAM,CAAArT,YAAY,CAAG,IAAI,CAACA,YAAY,CAAEuC,GAAC,CAAE,CAE3C;AAEA8T,MAAM,CAAC1T,QAAQ,CAAG,IAAI,CAAC9C,YAAY,CAAE0C,GAAC,CAAE,CAACI,QAAQ,CAIjD0T,MAAM,CAACtB,kBAAkB,CAAC,CAAC,CAC3B,GAAI,CAAA1B,aAAa,CAAGgD,MAAM,CAACP,oBAAoB,CAAC,CAAC,CAE9C,GAAIzC,aAAa,EAA2B,CAAC,CAAxBA,aAAa,CAAC5Q,MAAU,CAAE,CAC7C,IAAI,CAAC5C,YAAY,CAAC0C,GAAC,CAAC,CAACyP,OAAO,CAAOpM,KAAK,CAAE,IAAI,CAACjD,QAAQ,CAACF,MAAM,CAAE,CAEhE,IAAM,GAAI,CAAAuT,CAAC,CAAG,CAAC,CAAEA,CAAC,CAAG3C,aAAa,CAAC5Q,MAAM,CAAEuT,CAAC,EAAG,CAE7C,IAAI,CAACnW,YAAY,CAAC0C,GAAC,CAAC,CAACyP,OAAO,CAAEgE,CAAC,CAAE,CAAI3C,aAAa,CAAC2C,CAAC,CAAC,CAAC5M,KAAK,CAAC,CAGhE,CAEH;AAEA,IAAM,GAAI,CAAAkM,GAAC,CAAG,CAAC,CAAEC,IAAE,CAAG,IAAI,CAAC/S,KAAK,CAACC,MAAM,CAAE6S,GAAC,CAAGC,IAAE,CAAED,GAAC,EAAG,CAAG,IAEjD,CAAA1L,MAAI,CAAG,IAAI,CAACpH,KAAK,CAAE8S,GAAC,CAAE,CAEtBmB,WAAU,CAAGzW,YAAY,CAACsW,WAAW,CAAEhB,GAAC,CAAE,CAC1CjC,eAAa,CAAGrT,YAAY,CAACqT,aAAa,CAAEiC,GAAC,CAAE,CAErDmB,WAAU,CAACZ,IAAI,CAAEjM,MAAI,CAACqJ,MAAO,CAAC,CAE9BI,eAAa,CAACzQ,CAAC,CAACiT,IAAI,CAAEjM,MAAI,CAACyJ,aAAa,CAAE,CAAC,CAAG,CAAC,CAC/CA,eAAa,CAACvQ,CAAC,CAAC+S,IAAI,CAAEjM,MAAI,CAACyJ,aAAa,CAAE,CAAC,CAAG,CAAC,CAC/CA,eAAa,CAACrQ,CAAC,CAAC6S,IAAI,CAAEjM,MAAI,CAACyJ,aAAa,CAAE,CAAC,CAAG,CAE/C,CAED,CAEA;AAEA,IAAM,GAEC,CAAAzJ,MAAI,CAFD0L,GAAC,CAAG,CAAC,CAAEC,IAAE,CAAG,IAAI,CAAC/S,KAAK,CAACC,MAAM,CAAE6S,GAAC,CAAGC,IAAE,CAAED,GAAC,EAAG,CAE9C1L,MAAI,CAAG,IAAI,CAACpH,KAAK,CAAE8S,GAAC,CAAE,CAE5B1L,MAAI,CAACqJ,MAAM,CAAGrJ,MAAI,CAACuM,oBAAoB,CACvCvM,MAAI,CAACyJ,aAAa,CAAGzJ,MAAI,CAACwM,uBAAuB,CAIhD,IAAI,CAACpN,iBAAiB,GAEzB,CAAC,CAEDnH,kBAAkB,CAAE,SAAAA,mBAAA,CAAY,CAEL,IAAI,GAAzB,IAAI,CAACE,WAAoB,GAE7B,IAAI,CAACA,WAAW,CAAG,GAAI,CAAAkP,uCAAM,EAI9B,IAAI,CAAClP,WAAW,CAAC2U,aAAa,CAAE,IAAI,CAAC/T,QAAS,CAE/C,CAAC,CAEDsB,qBAAqB,CAAE,SAAAA,sBAAA,CAAY,CAEL,IAAI,GAA5B,IAAI,CAACoO,cAAuB,GAEhC,IAAI,CAACA,cAAc,CAAG,GAAI,CAAAd,yCAAQ,EAInC,IAAI,CAACc,cAAc,CAACqE,aAAa,CAAE,IAAI,CAAC/T,QAAS,CAElD,CAAC,CAEDgU,UAAU,CAAE,SAAAA,WAAWnX,QAAQ,CAAEoT,MAAM,CAAG,CAEzC,GAAM,CAAA7E,CAAC,CAAG,IAAI,CAAClO,YAAY,CAAC4C,MAAM,CACjCmU,aAAa,CAAG,IAAI,CAAC/W,YAAY,CACjCgX,aAAa,CAAGrX,QAAQ,CAACK,YAAY,CACrCgR,CAAC,CAAG,IAAI,CAAClI,WAAW,CAAClG,MAAM,CAC3BqU,YAAY,CAAG,IAAI,CAACnO,WAAW,CAC/BoO,YAAY,CAAGvX,QAAQ,CAACmJ,WAAW,CAElC,GAAS,CAAC,CAALoF,CAAK,EAAIA,CAAC,EAAI8I,aAAa,CAACpU,MAAM,CAExC,IAAM,GAAI,CAAAF,CAAC,CAAG,CAAC,CAAEiH,CAAC,CAAGoN,aAAa,CAACnU,MAAM,CAAEF,CAAC,CAAGiH,CAAC,CAAEjH,CAAC,EAAG,CAAG,CAKxD,OAHM,CAAAyU,YAAY,CAAGJ,aAAa,CAAErU,CAAC,CAAE,CACjC0U,YAAY,CAAGJ,aAAa,CAAEtU,CAAC,CAAE,CAE7BoL,CAAC,CAAG,CAAC,CAAEuJ,EAAE,CAAGD,YAAY,CAACtU,QAAQ,CAACF,MAAM,CAAEkL,CAAC,CAAGuJ,EAAE,CAAEvJ,CAAC,EAAG,CAAG,IAE5D,CAAAkF,MAAM,CAAGoE,YAAY,CAACtU,QAAQ,CAAEgL,CAAC,CAAE,CAEnCwJ,UAAU,CAAGtE,MAAM,CAACzJ,KAAK,CAAC,CAAC,CAE5B,SAAAwJ,MAAoB,EAAGuE,UAAU,CAACvQ,YAAY,CAAEgM,MAAO,CAAC,CAE7DoE,YAAY,CAACrU,QAAQ,CAACM,IAAI,CAAEkU,UAAW,CAExC,CAEA,GAAKH,YAAY,CAAChF,OAAO,EAAIiF,YAAY,CAACjF,OAAO,CAEhD,IAAM,GAAI,CAAArE,EAAC,CAAG,CAAC,CAAEA,EAAC,CAAGsJ,YAAY,CAACjF,OAAO,CAACvP,MAAM,CAAEkL,EAAC,EAAO,CAAC,CAE1DiE,KAAK,CAACtL,GAAG,CAAC2Q,YAAY,CAACG,QAAQ,CAACzJ,EAAC,CAAC,CAAEsJ,YAAY,CAACG,QAAQ,CAACzJ,EAAC,CAAG,CAAC,CAAC,CAAEsJ,YAAY,CAACG,QAAQ,CAACzJ,EAAC,CAAG,CAAC,CAAC,CAAC,CAE1F,SAAAiF,MAAoB,EAAGhB,KAAK,CAAChL,YAAY,CAAEgM,MAAO,CAAC,CAExDoE,YAAY,CAAChF,OAAO,CAAC/O,IAAI,CAAC2O,KAAK,CAACzP,CAAC,CAAEyP,KAAK,CAACxP,CAAC,CAAEwP,KAAK,CAACkC,CAAC,CAMtD,CAID,GAAS,CAAC,CAALjD,CAAK,EAAIA,CAAC,EAAIkG,YAAY,CAACtU,MAAM,CAErC,IAAM,GAAI,CAAAF,GAAC,CAAG,CAAC,CAAEiH,EAAC,CAAGsN,YAAY,CAACrU,MAAM,CAAEF,GAAC,CAAGiH,EAAC,CAAEjH,GAAC,EAAG,CAKpD,OAHM,CAAA8U,WAAW,CAAGP,YAAY,CAAEvU,GAAC,CAAE,CAC/B+U,WAAW,CAAGP,YAAY,CAAExU,GAAC,CAAE,CAE3BoL,GAAC,CAAG,CAAC,CAAEuJ,GAAE,CAAGI,WAAW,CAACtP,MAAM,CAAE2F,GAAC,CAAGuJ,GAAE,CAAEvJ,GAAC,EAAG,CAErD0J,WAAW,CAACrP,MAAM,CAAC/E,IAAI,CAAEqU,WAAW,CAACtP,MAAM,CAAE2F,GAAC,CAAE,CAACvE,KAAK,CAAC,CAAE,CAQ7D,CAAC,CAEDmO,KAAK,CAAE,SAAAA,MAAW/X,QAAQ,CAAEoT,MAAM,CAA4B,IAA1B,CAAA4E,mBAAmB,GAAAvM,SAAA,CAAAxI,MAAA,EAAAwI,SAAA,aAAAA,SAAA,IAAG,CAAC,CAE1D,GAAK,EAAIzL,QAAQ,EAAIA,QAAQ,CAAC+B,UAAU,CAAE,CAGzC,WADA,CAAAkE,OAAO,CAACC,KAAK,CAAE,qEAAqE,CAAElG,QAAS,CAAC,CAGhG,GAEG,CAAAsT,YAAY,CACV2E,YAAY,CAAG,IAAI,CAAC9U,QAAQ,CAACF,MAAM,CACxCiV,SAAS,CAAG,IAAI,CAAC/U,QAAQ,CACzBgV,SAAS,CAAGnY,QAAQ,CAACmD,QAAQ,CAC7ByU,QAAQ,CAAG5X,QAAQ,CAACwS,OAAO,CAC3B4F,MAAM,CAAG,IAAI,CAACpV,KAAK,CACnBqV,MAAM,CAAGrY,QAAQ,CAACgD,KAAK,CACvBsV,OAAO,CAAG,IAAI,CAAC9P,MAAM,CACrB+P,OAAO,CAAGvY,QAAQ,CAACwI,MAAM,CAErB4K,MAAM,SAAc,GAExBE,YAAY,CAAG,GAAI,CAAA3B,0CAAO,CAAC,CAAC,CAAC4B,eAAe,CAAEH,MAAO,CAAC,EAIvD;AAEA,IAAM,GAAI,CAAArQ,CAAC,CAAG,CAAC,CAAEyQ,EAAE,CAAG2E,SAAS,CAAClV,MAAM,CAAEF,CAAC,CAAGyQ,EAAE,CAAEzQ,CAAC,EAAG,CAAG,IAEhD,CAAAsQ,MAAM,CAAG8E,SAAS,CAAEpV,CAAC,CAAE,CAEvB4U,UAAU,CAAGtE,MAAM,CAACzJ,KAAK,CAAC,CAAC,CAE5BwJ,MAAM,SAAc,EAAGuE,UAAU,CAACvQ,YAAY,CAAEgM,MAAO,CAAC,CAE7D8E,SAAS,CAACzU,IAAI,CAAEkU,UAAW,CAE5B,CAEA,IAAM,GAAI,CAAA5U,GAAC,CAAG,CAAC,CAAEA,GAAC,CAAG6U,QAAQ,CAAC3U,MAAM,CAAEF,GAAC,EAAO,CAAC,CAE9CqP,KAAK,CAACtL,GAAG,CAAC8Q,QAAQ,CAAC7U,GAAC,CAAC,CAAE6U,QAAQ,CAAC7U,GAAC,CAAG,CAAC,CAAC,CAAE6U,QAAQ,CAAC7U,GAAC,CAAG,CAAC,CAAC,CAAC,CAEnD,SAAAqQ,MAAoB,EAAGhB,KAAK,CAAChL,YAAY,CAAEgM,MAAO,CAAC,CAExD,IAAI,CAACZ,OAAO,CAAC/O,IAAI,CAAC2O,KAAK,CAACzP,CAAC,CAAEyP,KAAK,CAACxP,CAAC,CAAEwP,KAAK,CAACkC,CAAC,CAAC,CAI7C;AAEA,IAAM,GAAI,CAAAvR,GAAC,CAAG,CAAC,CAAEyQ,IAAE,CAAG+E,OAAO,CAACtV,MAAM,CAAEF,GAAC,CAAGyQ,IAAE,CAAEzQ,GAAC,EAAG,CACpB,QAAQ,EAAhC,MAAO,CAAAwV,OAAO,CAAExV,GAAC,CAAe,CACpCuV,OAAO,CAAC7U,IAAI,CAAE8U,OAAO,CAAExV,GAAC,CAAG,CAAC,CAE5BuV,OAAO,CAAC7U,IAAI,CAAE8U,OAAO,CAAExV,GAAC,CAAE,CAAC6G,KAAK,CAAC,CAAE,CAAC,CAItC;AAEA,IAAM,GAAI,CAAA7G,GAAC,CAAG,CAAC,CAAEyQ,IAAE,CAAG6E,MAAM,CAACpV,MAAM,CAAEF,GAAC,CAAGyQ,IAAE,CAAEzQ,GAAC,EAAG,CAAG,IAE7C,CAAAqH,IAAI,CAAGiO,MAAM,CAAEtV,GAAC,CAAE,CACpB0Q,MAAM,QAAE9S,KAAK,QACX6X,iBAAiB,CAAGpO,IAAI,CAACyJ,aAAa,CAC3C4E,gBAAgB,CAAGrO,IAAI,CAACnJ,YAAY,CAE/ByX,QAAQ,CAAG,GAAI,CAAAxD,KAAK,CAAE9K,IAAI,CAAChH,CAAC,CAAG6U,YAAY,CAAE7N,IAAI,CAAC9G,CAAC,CAAG2U,YAAY,CAAE7N,IAAI,CAAC5G,CAAC,CAAGyU,YAAa,CAAC,CACjGS,QAAQ,CAACjF,MAAM,CAAC4C,IAAI,CAAEjM,IAAI,CAACqJ,MAAO,CAAC,CAE9BH,YAAY,SAAc,EAE9BoF,QAAQ,CAACjF,MAAM,CAACC,YAAY,CAAEJ,YAAa,CAAC,CAACK,SAAS,CAAC,CAAC,CAIzD,IAAM,GAAI,CAAAxJ,CAAC,CAAG,CAAC,CAAEyJ,EAAE,CAAG4E,iBAAiB,CAACvV,MAAM,CAAEkH,CAAC,CAAGyJ,EAAE,CAAEzJ,CAAC,EAAG,CAE3DsJ,MAAM,CAAG+E,iBAAiB,CAAErO,CAAC,CAAE,CAACP,KAAK,CAAC,CAAC,CAElC,SAAA0J,YAA0B,EAE9BG,MAAM,CAACC,YAAY,CAAEJ,YAAa,CAAC,CAACK,SAAS,CAAC,CAAC,CAIhD+E,QAAQ,CAAC7E,aAAa,CAACpQ,IAAI,CAAEgQ,MAAO,CAAC,CAItCiF,QAAQ,CAAC/X,KAAK,CAAC0V,IAAI,CAAEjM,IAAI,CAACzJ,KAAM,CAAC,CAEjC,IAAM,GAAI,CAAAwJ,EAAC,CAAG,CAAC,CAAEyJ,GAAE,CAAG6E,gBAAgB,CAACxV,MAAM,CAAEkH,EAAC,CAAGyJ,GAAE,CAAEzJ,EAAC,EAAG,CAE1DxJ,KAAK,CAAG8X,gBAAgB,CAAEtO,EAAC,CAAE,CAC7BuO,QAAQ,CAACzX,YAAY,CAACwC,IAAI,CAAE9C,KAAK,CAACiJ,KAAK,CAAC,CAAE,CAAC,CAI5C8O,QAAQ,CAAC3D,aAAa,CAAG3K,IAAI,CAAC2K,aAAa,CAAGiD,mBAAmB,CAEjEI,MAAM,CAAC3U,IAAI,CAAEiV,QAAS,CAEvB,CAEA;AAEA,IAAM,GAEC,CAAAC,cAAc,CAFX5V,IAAC,CAAG,CAAC,CAAEyQ,IAAE,CAAGxT,QAAQ,CAAC8C,aAAa,CAACG,MAAM,CAAEF,IAAC,CAAGyQ,IAAE,CAAEzQ,IAAC,EAAG,CAAG,CAE7D4V,cAAc,CAAG3Y,QAAQ,CAAC8C,aAAa,CAAEC,IAAC,CAAE,CAE7C,IAAI,CAACD,aAAa,CAAEC,IAAC,CAAE,SAAc,GAAG,IAAI,CAACD,aAAa,CAAEC,IAAC,CAAE,CAAG,EAAE,EAEzE,IAAM,GAAI,CAAAoH,GAAC,CAAG,CAAC,CAAEyJ,IAAE,CAAG+E,cAAc,CAAC1V,MAAM,CAAEkH,GAAC,CAAGyJ,IAAE,CAAEzJ,GAAC,EAAG,CAAG,CAI3D,OAFM,CAAAyO,IAAI,CAAGD,cAAc,CAAExO,GAAC,CAAE,CAAE0O,OAAO,CAAG,EAAE,CAEpC1K,CAAC,CAAG,CAAC,CAAEuJ,EAAE,CAAGkB,IAAI,CAAC3V,MAAM,CAAEkL,CAAC,CAAGuJ,EAAE,CAAEvJ,CAAC,EAAG,CAE9C0K,OAAO,CAACpV,IAAI,CAAEmV,IAAI,CAAEzK,CAAC,CAAE,CAACvE,KAAK,CAAC,CAAE,CAAC,CAIlC,IAAI,CAAC9G,aAAa,CAAEC,IAAC,CAAE,CAACU,IAAI,CAAEoV,OAAQ,CAEvC,CAED,CAEA,IAAI,CAAC1B,UAAU,CAAEnX,QAAQ,CAAEoT,MAAO,CAEnC,CAAC,CAED0F,SAAS,CAAE,SAAAA,UAAW5W,IAAI,CAAG,OAEnB,CAAAA,IAAI,EAAIA,IAAI,CAAC6W,MAAM,MAOvB7W,IAAI,CAAC8W,gBAAgB,EAAG9W,IAAI,CAAC0S,YAAY,CAAC,CAAC,CAEhD,IAAI,CAACmD,KAAK,CAAE7V,IAAI,CAAClC,QAAQ,CAAEkC,IAAI,CAACkR,MAAO,CAAC,MAPvC,CAAAnN,OAAO,CAACC,KAAK,CAAE,iEAAiE,CAAEhE,IAAK,CASzF,CAAC,CAED;AACD;AACA;AACA;AACA,IAEC2K,aAAa,CAAE,SAAAA,cAAA,CAAiC,CAEvB;AAKxB,OAPyB,CAAAoM,eAAe,GAAAxN,SAAA,CAAAxI,MAAA,WAAAwI,SAAA,IAAAA,SAAA,IAAG,CAAC,CAEtCyN,WAAW,CAAG,CAAC,CAAC,CAChBC,MAAM,CAAG,EAAE,CAAEC,OAAO,CAAG,EAAE,CAEzBC,SAAS,CAAG3Q,IAAI,CAACuF,GAAG,CAAE,EAAE,CAAEgL,eAAgB,CAAC,CAEvClW,CAAC,CAAG,CAAC,CAAEyQ,EAAE,CAAG,IAAI,CAACrQ,QAAQ,CAACF,MAAM,CAAEF,CAAC,CAAGyQ,EAAE,CAAEzQ,CAAC,EAAG,CAAG,IAEpD,CAAAyT,CAAC,CAAG,IAAI,CAACrT,QAAQ,CAAEJ,CAAC,CAAE,CACtBuW,GAAG,CAAG5Q,IAAI,CAAC6Q,KAAK,CAAE/C,CAAC,CAAC7T,CAAC,CAAG0W,SAAU,CAAC,CAAG,GAAG,CAAG3Q,IAAI,CAAC6Q,KAAK,CAAE/C,CAAC,CAAC5T,CAAC,CAAGyW,SAAU,CAAC,CAAG,GAAG,CAAG3Q,IAAI,CAAC6Q,KAAK,CAAE/C,CAAC,CAAClC,CAAC,CAAG+E,SAAU,CAAC,CAEhH,SAAAH,WAAW,CAAEI,GAAG,CAAgB,EAEpCJ,WAAW,CAAEI,GAAG,CAAE,CAAGvW,CAAC,CACtBoW,MAAM,CAAC1V,IAAI,CAAE,IAAI,CAACN,QAAQ,CAAEJ,CAAC,CAAG,CAAC,CACjCqW,OAAO,CAAErW,CAAC,CAAE,CAAGoW,MAAM,CAAClW,MAAM,CAAG,CAAC,EAKhCmW,OAAO,CAAErW,CAAC,CAAE,CAAGqW,OAAO,CAAEF,WAAW,CAAEI,GAAG,CAAE,CAI5C,CAGA;AACA;AAGA,OAEO,CAAAlP,IAAI,CAJLoP,mBAAmB,CAAG,EAAE,CAEpBzW,IAAC,CAAG,CAAC,CAAEyQ,IAAE,CAAG,IAAI,CAACxQ,KAAK,CAACC,MAAM,CAAEF,IAAC,CAAGyQ,IAAE,CAAEzQ,IAAC,EAAG,CAAG,CAEjDqH,IAAI,CAAG,IAAI,CAACpH,KAAK,CAAED,IAAC,CAAE,CAE5BqH,IAAI,CAAChH,CAAC,CAAGgW,OAAO,CAAEhP,IAAI,CAAChH,CAAC,CAAE,CAC1BgH,IAAI,CAAC9G,CAAC,CAAG8V,OAAO,CAAEhP,IAAI,CAAC9G,CAAC,CAAE,CAC1B8G,IAAI,CAAC5G,CAAC,CAAG4V,OAAO,CAAEhP,IAAI,CAAC5G,CAAC,CAAE,CAI1B;AACA;AACA,OAJM,CAAA0J,OAAO,CAAG,CAAE9C,IAAI,CAAChH,CAAC,CAAEgH,IAAI,CAAC9G,CAAC,CAAE8G,IAAI,CAAC5G,CAAC,CAAE,CAIhC6N,CAAC,CAAG,CAAC,CAAM,CAAC,CAALA,CAAK,CAAEA,CAAC,EAAG,CAE3B,GAAKnE,OAAO,CAAEmE,CAAC,CAAE,GAAKnE,OAAO,CAAE,CAAEmE,CAAC,CAAG,CAAC,EAAK,CAAC,CAAE,CAAG,CAEhDmI,mBAAmB,CAAC/V,IAAI,CAAEV,IAAE,CAAC,CAC7B,KAED,CAIF,CAEA,IAAM,GAEC,CAAA0W,GAAG,CAFA1W,IAAC,CAAGyW,mBAAmB,CAACvW,MAAM,CAAG,CAAC,CAAO,CAAC,EAANF,IAAM,CAAEA,IAAC,EAAG,CAAG,CAEtD0W,GAAG,CAAGD,mBAAmB,CAAEzW,IAAC,CAAE,CAEpC,IAAI,CAACC,KAAK,CAAC0W,MAAM,CAAED,GAAG,CAAE,CAAE,CAAC,CAE3B,IAAM,GAAI,CAAAtP,CAAC,CAAG,CAAC,CAAEyJ,EAAE,CAAG,IAAI,CAAC9Q,aAAa,CAACG,MAAM,CAAEkH,CAAC,CAAGyJ,EAAE,CAAEzJ,CAAC,EAAG,CAE5D,IAAI,CAACrH,aAAa,CAAEqH,CAAC,CAAE,CAACuP,MAAM,CAAED,GAAG,CAAE,CAAE,CAIzC,CAEA;AAEA,GAAM,CAAAE,IAAI,CAAG,IAAI,CAACxW,QAAQ,CAACF,MAAM,CAAGkW,MAAM,CAAClW,MAAM,CAEjD,MADA,KAAI,CAACE,QAAQ,CAAGgW,MAAM,CACfQ,IAER,CAAC,CAEDzC,aAAa,CAAE,SAAAA,cAAW0C,MAAM,CAAG,CAElC,IAAI,CAACzW,QAAQ,CAAG,EAAE,CAElB,IAAM,GAEC,CAAA0W,KAAK,CAFF9W,CAAC,CAAG,CAAC,CAAEiH,CAAC,CAAG4P,MAAM,CAAC3W,MAAM,CAAEF,CAAC,CAAGiH,CAAC,CAAEjH,CAAC,EAAG,CAExC8W,KAAK,CAAGD,MAAM,CAAE7W,CAAC,CAAE,CACzB,IAAI,CAACI,QAAQ,CAACM,IAAI,CAAE,GAAI,CAAAuO,0CAAO,CAAE6H,KAAK,CAAClX,CAAC,CAAEkX,KAAK,CAACjX,CAAC,CAAEiX,KAAK,CAACvF,CAAC,EAAI,CAAE,CAAE,CAAC,CAIpE,MAAO,KAER,CAAC,CAEDwF,wBAAwB,CAAE,SAAAA,yBAAA,CAAY,CAarC;AARA;AAEA,OALM,CAAA9W,KAAK,CAAG,IAAI,CAACA,KAAK,CAClBC,MAAM,CAAGD,KAAK,CAACC,MAAM,CAIjBF,CAAC,CAAG,CAAC,CAAEA,CAAC,CAAGE,MAAM,CAAEF,CAAC,EAAG,CAEhCC,KAAK,CAAED,CAAC,CAAE,CAACgX,GAAG,CAAGhX,CAAC,CAYnBC,KAAK,CAACgX,IAAI,CANV,SAA4B5W,CAAC,CAAEE,CAAC,CAAG,CAElC,MAAO,CAAAF,CAAC,CAAC2R,aAAa,CAAGzR,CAAC,CAACyR,aAE5B,CAE8B,CAAC,CAE/B;AAAA,GAKI,CAAAkF,OAAO,CAAEC,OAAO,CAHdC,IAAI,CAAG,IAAI,CAACrX,aAAa,CAAE,CAAC,CAAE,CAC9B8V,IAAI,CAAG,IAAI,CAAC9V,aAAa,CAAE,CAAC,CAAE,CAI/BqX,IAAI,EAAIA,IAAI,CAAClX,MAAM,GAAKA,MAAM,GAAGgX,OAAO,CAAG,EAAE,EAC7CrB,IAAI,EAAIA,IAAI,CAAC3V,MAAM,GAAKA,MAAM,GAAGiX,OAAO,CAAG,EAAE,EAElD,IAAM,GAEC,CAAAE,EAAE,CAFCrX,IAAC,CAAG,CAAC,CAAEA,IAAC,CAAGE,MAAM,CAAEF,IAAC,EAAG,CAE1BqX,EAAE,CAAGpX,KAAK,CAAED,IAAC,CAAE,CAACgX,GAAG,CAEpBE,OAAO,EAAGA,OAAO,CAACxW,IAAI,CAAE0W,IAAI,CAAEC,EAAE,CAAG,CAAC,CACpCF,OAAO,EAAGA,OAAO,CAACzW,IAAI,CAAEmV,IAAI,CAAEwB,EAAE,CAAG,CAAC,CAIrCH,OAAO,GAAG,IAAI,CAACnX,aAAa,CAAE,CAAC,CAAE,CAAGmX,OAAO,EAC3CC,OAAO,GAAG,IAAI,CAACpX,aAAa,CAAE,CAAC,CAAE,CAAGoX,OAAO,CAEjD,CAAC,CAEDG,MAAM,CAAE,SAAAA,OAAA,CAAY,CA4HnB,QAAS,CAAAC,MAAMA,CAAEnP,KAAK,CAAEtE,QAAQ,CAAE0T,OAAO,CAAG,CAE3C,MAAO,CAAAA,OAAO,CAAGpP,KAAK,CAAK,CAAC,EAAItE,QAAU,CAAGsE,KAAK,CAAK,EAAI,CAAC,EAAItE,QAAQ,CAEzE,CAEA,QAAS,CAAA2T,cAAcA,CAAE/G,MAAM,CAAG,CAEjC,GAAM,CAAAvF,IAAI,CAAGuF,MAAM,CAAC9Q,CAAC,CAAC8X,QAAQ,CAAC,CAAC,CAAGhH,MAAM,CAAC7Q,CAAC,CAAC6X,QAAQ,CAAC,CAAC,CAAGhH,MAAM,CAACa,CAAC,CAACmG,QAAQ,CAAC,CAAC,CAAC,MAExE,UAAAC,WAAW,CAAExM,IAAI,CAAgB,EAMtCwM,WAAW,CAAExM,IAAI,CAAE,CAAGsE,OAAO,CAACvP,MAAM,CAAG,CAAC,CACxCuP,OAAO,CAAC/O,IAAI,CAAEgQ,MAAM,CAAC9Q,CAAC,CAAE8Q,MAAM,CAAC7Q,CAAC,CAAE6Q,MAAM,CAACa,CAAE,CAAC,CAErCoG,WAAW,CAAExM,IAAI,CAAE,EAPlBwM,WAAW,CAAExM,IAAI,CAS1B,CAEA,QAAS,CAAAyM,aAAaA,CAAEha,KAAK,CAAG,CAE/B,GAAM,CAAAuN,IAAI,CAAGvN,KAAK,CAACmI,CAAC,CAAC2R,QAAQ,CAAC,CAAC,CAAG9Z,KAAK,CAACoI,CAAC,CAAC0R,QAAQ,CAAC,CAAC,CAAG9Z,KAAK,CAAC2C,CAAC,CAACmX,QAAQ,CAAC,CAAC,CAAC,MAErE,UAAAG,UAAU,CAAE1M,IAAI,CAAgB,EAMrC0M,UAAU,CAAE1M,IAAI,CAAE,CAAG1F,MAAM,CAACvF,MAAM,CAClCuF,MAAM,CAAC/E,IAAI,CAAE9C,KAAK,CAACka,MAAM,CAAC,CAAE,CAAC,CAEtBD,UAAU,CAAE1M,IAAI,CAAE,EAPjB0M,UAAU,CAAE1M,IAAI,CASzB,CAEA,QAAS,CAAA4M,UAAUA,CAAE3F,EAAE,CAAG,CAEzB,GAAM,CAAAjH,IAAI,CAAGiH,EAAE,CAACxS,CAAC,CAAC8X,QAAQ,CAAC,CAAC,CAAGtF,EAAE,CAACvS,CAAC,CAAC6X,QAAQ,CAAC,CAAC,CAAC,MAE1C,UAAAM,OAAO,CAAE7M,IAAI,CAAgB,EAMlC6M,OAAO,CAAE7M,IAAI,CAAE,CAAGuE,GAAG,CAACxP,MAAM,CAAG,CAAC,CAChCwP,GAAG,CAAChP,IAAI,CAAE0R,EAAE,CAACxS,CAAC,CAAEwS,EAAE,CAACvS,CAAE,CAAC,CAEfmY,OAAO,CAAE7M,IAAI,CAAE,EAPd6M,OAAO,CAAE7M,IAAI,CAStB,CAjLA,GAAM,CAAA5G,IAAI,CAAG,CACZ0T,QAAQ,CAAE,CACTld,OAAO,CAAE,GAAG,CACZyU,IAAI,CAAE,UAAU,CAChB0I,SAAS,CAAE,iBACZ,CACD,CAAC,CAED;AAMA,GAJA3T,IAAI,CAAC+K,IAAI,CAAG,IAAI,CAACA,IAAI,CACrB/K,IAAI,CAACiL,IAAI,CAAG,IAAI,CAACA,IAAI,CACF,EAAE,GAAhB,IAAI,CAACjI,IAAW,GAAGhD,IAAI,CAACgD,IAAI,CAAG,IAAI,CAACA,IAAI,EAExC,aAAI,CAAC4Q,UAAwB,CAAG,CAEpC,GAAM,CAAAA,UAAU,CAAG,IAAI,CAACA,UAAU,CAElC,IAAM,GAAM,CAAA5B,GAAG,GAAI,CAAA4B,UAAU,CAEvB,SAAAA,UAAU,CAAE5B,GAAG,CAAgB,GAAGhS,IAAI,CAAEgS,GAAG,CAAE,CAAG4B,UAAU,CAAE5B,GAAG,CAAE,EAIvE,MAAO,CAAAhS,IAER,CAIA,OAEO,CAAA+L,MAAM,CAJPlQ,QAAQ,CAAG,EAAE,CAETJ,CAAC,CAAG,CAAC,CAAEA,CAAC,CAAG,IAAI,CAACI,QAAQ,CAACF,MAAM,CAAEF,CAAC,EAAG,CAExCsQ,MAAM,CAAG,IAAI,CAAClQ,QAAQ,CAAEJ,CAAC,CAAE,CACjCI,QAAQ,CAACM,IAAI,CAAE4P,MAAM,CAAC1Q,CAAC,CAAE0Q,MAAM,CAACzQ,CAAC,CAAEyQ,MAAM,CAACiB,CAAE,CAAC,CAY9C,OARM,CAAAtR,KAAK,CAAG,EAAE,CACVwP,OAAO,CAAG,EAAE,CACZkI,WAAW,CAAG,CAAC,CAAC,CAChBlS,MAAM,CAAG,EAAE,CACXoS,UAAU,CAAG,CAAC,CAAC,CACfnI,GAAG,CAAG,EAAE,CACRsI,OAAO,CAAG,CAAC,CAAC,CAERhY,IAAC,CAAG,CAAC,CAAEA,IAAC,CAAG,IAAI,CAACC,KAAK,CAACC,MAAM,CAAEF,IAAC,EAAG,CAAG,IAExC,CAAAqH,IAAI,CAAG,IAAI,CAACpH,KAAK,CAAED,IAAC,CAAE,CAEtBoY,WAAW,GAAO,CAClBC,SAAS,GAAQ,CACjBC,eAAe,CAAG,aAAI,CAACvY,aAAa,CAAE,CAAC,CAAE,CAAEC,IAAC,CAAgB,CAC5DuY,aAAa,CAA0B,CAAC,CAAxBlR,IAAI,CAACqJ,MAAM,CAACxQ,MAAM,CAAC,CAAK,CACxCsY,mBAAmB,CAA+B,CAAC,CAA7BnR,IAAI,CAACyJ,aAAa,CAAC5Q,MAAU,CACnDuY,YAAY,CAAoB,CAAC,GAAlBpR,IAAI,CAACzJ,KAAK,CAACmI,CAAO,EAAqB,CAAC,GAAlBsB,IAAI,CAACzJ,KAAK,CAACoI,CAAO,EAAqB,CAAC,GAAlBqB,IAAI,CAACzJ,KAAK,CAAC2C,CAAO,CAC7EmY,kBAAkB,CAA8B,CAAC,CAA5BrR,IAAI,CAACnJ,YAAY,CAACgC,MAAU,CAEnDyY,QAAQ,CAAG,CAAC,CAPS;AAsBzB,GAbAA,QAAQ,CAAGpB,MAAM,CAAEoB,QAAQ,CAAE,CAAC,CAAE,CAAE,CAAC,CACnCA,QAAQ,CAAGpB,MAAM,CAAEoB,QAAQ,CAAE,CAAC,CAAEP,WAAY,CAAC,CAC7CO,QAAQ,CAAGpB,MAAM,CAAEoB,QAAQ,CAAE,CAAC,CAAEN,SAAU,CAAC,CAC3CM,QAAQ,CAAGpB,MAAM,CAAEoB,QAAQ,CAAE,CAAC,CAAEL,eAAgB,CAAC,CACjDK,QAAQ,CAAGpB,MAAM,CAAEoB,QAAQ,CAAE,CAAC,CAAEJ,aAAc,CAAC,CAC/CI,QAAQ,CAAGpB,MAAM,CAAEoB,QAAQ,CAAE,CAAC,CAAEH,mBAAoB,CAAC,CACrDG,QAAQ,CAAGpB,MAAM,CAAEoB,QAAQ,CAAE,CAAC,CAAEF,YAAa,CAAC,CAC9CE,QAAQ,CAAGpB,MAAM,CAAEoB,QAAQ,CAAE,CAAC,CAAED,kBAAmB,CAAC,CAEpDzY,KAAK,CAACS,IAAI,CAAEiY,QAAS,CAAC,CACtB1Y,KAAK,CAACS,IAAI,CAAE2G,IAAI,CAAChH,CAAC,CAAEgH,IAAI,CAAC9G,CAAC,CAAE8G,IAAI,CAAC5G,CAAE,CAAC,CACpCR,KAAK,CAACS,IAAI,CAAE2G,IAAI,CAAC2K,aAAc,CAAC,CAE3BsG,eAAe,CAAG,CAEtB,GAAM,CAAAvY,aAAa,CAAG,IAAI,CAACA,aAAa,CAAE,CAAC,CAAE,CAAEC,IAAC,CAAE,CAElDC,KAAK,CAACS,IAAI,CACTqX,UAAU,CAAEhY,aAAa,CAAE,CAAC,CAAG,CAAC,CAChCgY,UAAU,CAAEhY,aAAa,CAAE,CAAC,CAAG,CAAC,CAChCgY,UAAU,CAAEhY,aAAa,CAAE,CAAC,CAAG,CAChC,CAED,CAQA,GANKwY,aAAa,EAEjBtY,KAAK,CAACS,IAAI,CAAE+W,cAAc,CAAEpQ,IAAI,CAACqJ,MAAO,CAAE,CAAC,CAIvC8H,mBAAmB,CAAG,CAE1B,GAAM,CAAA1H,aAAa,CAAGzJ,IAAI,CAACyJ,aAAa,CAExC7Q,KAAK,CAACS,IAAI,CACT+W,cAAc,CAAE3G,aAAa,CAAE,CAAC,CAAG,CAAC,CACpC2G,cAAc,CAAE3G,aAAa,CAAE,CAAC,CAAG,CAAC,CACpC2G,cAAc,CAAE3G,aAAa,CAAE,CAAC,CAAG,CACpC,CAED,CAQA,GANK2H,YAAY,EAEhBxY,KAAK,CAACS,IAAI,CAAEkX,aAAa,CAAEvQ,IAAI,CAACzJ,KAAM,CAAE,CAAC,CAIrC8a,kBAAkB,CAAG,CAEzB,GAAM,CAAAxa,YAAY,CAAGmJ,IAAI,CAACnJ,YAAY,CAEtC+B,KAAK,CAACS,IAAI,CACTkX,aAAa,CAAE1Z,YAAY,CAAE,CAAC,CAAG,CAAC,CAClC0Z,aAAa,CAAE1Z,YAAY,CAAE,CAAC,CAAG,CAAC,CAClC0Z,aAAa,CAAE1Z,YAAY,CAAE,CAAC,CAAG,CAClC,CAED,CAED,CAmEA,MARA,CAAAqG,IAAI,CAACA,IAAI,CAAG,CAAC,CAAC,CAEdA,IAAI,CAACA,IAAI,CAACnE,QAAQ,CAAGA,QAAQ,CAC7BmE,IAAI,CAACA,IAAI,CAACkL,OAAO,CAAGA,OAAO,CACN,CAAC,CAAjBhK,MAAM,CAACvF,MAAU,GAAGqE,IAAI,CAACA,IAAI,CAACkB,MAAM,CAAGA,MAAM,EAChC,CAAC,CAAdiK,GAAG,CAACxP,MAAU,GAAGqE,IAAI,CAACA,IAAI,CAACmL,GAAG,CAAG,CAAEA,GAAG,CAAE,EAC7CnL,IAAI,CAACA,IAAI,CAACtE,KAAK,CAAGA,KAAK,CAEhBsE,IAER,CAAC,CAEDsC,KAAK,CAAE,SAAAA,MAAA,CAAY,CAElB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAEE,MAAO,IAAI,CAAAxL,QAAQ,CAAC,CAAC,CAACiY,IAAI,CAAE,IAAK,CAElC,CAAC,CAEDA,IAAI,CAAE,SAAAA,KAAWsF,MAAM,CAAG,CAIzB,IAAI,CAACxY,QAAQ,CAAG,EAAE,CAClB,IAAI,CAACqF,MAAM,CAAG,EAAE,CAChB,IAAI,CAACxF,KAAK,CAAG,EAAE,CACf,IAAI,CAACF,aAAa,CAAG,CAAC,EAAE,CAAC,CACzB,IAAI,CAACzC,YAAY,CAAG,EAAE,CACtB,IAAI,CAACG,YAAY,CAAG,EAAE,CACtB,IAAI,CAACkS,WAAW,CAAG,EAAE,CACrB,IAAI,CAACC,WAAW,CAAG,EAAE,CACrB,IAAI,CAACC,aAAa,CAAG,EAAE,CACvB,IAAI,CAACrQ,WAAW,CAAG,IAAI,CACvB,IAAI,CAACsQ,cAAc,CAAG,IAAI,CAI1B,IAAI,CAACvI,IAAI,CAAGqR,MAAM,CAACrR,IAAI,CAMvB,OAFM,CAAAnH,QAAQ,CAAGwY,MAAM,CAACxY,QAAQ,CAEtBJ,CAAC,CAAG,CAAC,CAAEyQ,EAAE,CAAGrQ,QAAQ,CAACF,MAAM,CAAEF,CAAC,CAAGyQ,EAAE,CAAEzQ,CAAC,EAAG,CAElD,IAAI,CAACI,QAAQ,CAACM,IAAI,CAAEN,QAAQ,CAAEJ,CAAC,CAAE,CAAC6G,KAAK,CAAC,CAAE,CAAC,CAI5C;AAIA,OAFM,CAAApB,MAAM,CAAGmT,MAAM,CAACnT,MAAM,CAElBzF,IAAC,CAAG,CAAC,CAAEyQ,IAAE,CAAGhL,MAAM,CAACvF,MAAM,CAAEF,IAAC,CAAGyQ,IAAE,CAAEzQ,IAAC,EAAG,CAEhD,IAAI,CAACyF,MAAM,CAAC/E,IAAI,CAAE+E,MAAM,CAAEzF,IAAC,CAAE,CAAC6G,KAAK,CAAC,CAAE,CAAC,CAIxC;AAIA,OAFM,CAAA5G,KAAK,CAAG2Y,MAAM,CAAC3Y,KAAK,CAEhBD,IAAC,CAAG,CAAC,CAAEyQ,IAAE,CAAGxQ,KAAK,CAACC,MAAM,CAAEF,IAAC,CAAGyQ,IAAE,CAAEzQ,IAAC,EAAG,CAE/C,IAAI,CAACC,KAAK,CAACS,IAAI,CAAET,KAAK,CAAED,IAAC,CAAE,CAAC6G,KAAK,CAAC,CAAE,CAAC,CAItC;AAEA,IAAM,GAEC,CAAA9G,aAAa,CAFVC,IAAC,CAAG,CAAC,CAAEyQ,IAAE,CAAGmI,MAAM,CAAC7Y,aAAa,CAACG,MAAM,CAAEF,IAAC,CAAGyQ,IAAE,CAAEzQ,IAAC,EAAG,CAAG,CAE3DD,aAAa,CAAG6Y,MAAM,CAAC7Y,aAAa,CAAEC,IAAC,CAAE,CAE1C,aAAI,CAACD,aAAa,CAAEC,IAAC,CAAgB,GAEzC,IAAI,CAACD,aAAa,CAAEC,IAAC,CAAE,CAAG,EAAE,EAI7B,IAAM,GAAI,CAAAoH,CAAC,CAAG,CAAC,CAAEyJ,EAAE,CAAG9Q,aAAa,CAACG,MAAM,CAAEkH,CAAC,CAAGyJ,EAAE,CAAEzJ,CAAC,EAAG,CAAG,CAI1D,OAEO,CAAAgL,EAAE,CAJH1C,GAAG,CAAG3P,aAAa,CAAEqH,CAAC,CAAE,CAAE0O,OAAO,CAAG,EAAE,CAElC1K,CAAC,CAAG,CAAC,CAAEuJ,EAAE,CAAGjF,GAAG,CAACxP,MAAM,CAAEkL,CAAC,CAAGuJ,EAAE,CAAEvJ,CAAC,EAAG,CAEvCgH,EAAE,CAAG1C,GAAG,CAAEtE,CAAC,CAAE,CAEnB0K,OAAO,CAACpV,IAAI,CAAE0R,EAAE,CAACvL,KAAK,CAAC,CAAE,CAAC,CAI3B,IAAI,CAAC9G,aAAa,CAAEC,IAAC,CAAE,CAACU,IAAI,CAAEoV,OAAQ,CAEvC,CAED,CAEA;AAIA,OAEO,CAAA+C,WAAW,CAJZvb,YAAY,CAAGsb,MAAM,CAACtb,YAAY,CAE9B0C,IAAC,CAAG,CAAC,CAAEyQ,KAAE,CAAGnT,YAAY,CAAC4C,MAAM,CAAEF,IAAC,CAAGyQ,KAAE,CAAEzQ,IAAC,EAAG,CAAG,CAKzD;AAEA,GALM6Y,WAAW,CAAG,CAAC,CAAC,CACtBA,WAAW,CAACtR,IAAI,CAAGjK,YAAY,CAAE0C,IAAC,CAAE,CAACuH,IAAI,CAIpC,SAAAjK,YAAY,CAAE0C,IAAC,CAAE,CAACI,QAAsB,CAAG,CAE/CyY,WAAW,CAACzY,QAAQ,CAAG,EAAE,CAEzB,IAAM,GAAI,CAAAgH,GAAC,CAAG,CAAC,CAAEyJ,IAAE,CAAGvT,YAAY,CAAE0C,IAAC,CAAE,CAACI,QAAQ,CAACF,MAAM,CAAEkH,GAAC,CAAGyJ,IAAE,CAAEzJ,GAAC,EAAG,CAEpEyR,WAAW,CAACzY,QAAQ,CAACM,IAAI,CAAEpD,YAAY,CAAE0C,IAAC,CAAE,CAACI,QAAQ,CAAEgH,GAAC,CAAE,CAACP,KAAK,CAAC,CAAE,CAIrE,CAEA;AAEA,GAAK,SAAAvJ,YAAY,CAAE0C,IAAC,CAAE,CAACyP,OAAqB,CAAG,CAE9CoJ,WAAW,CAACpJ,OAAO,CAAG,EAAE,CAExB,IAAM,GAAI,CAAArI,GAAC,CAAG,CAAC,CAAEyJ,IAAE,CAAGvT,YAAY,CAAE0C,IAAC,CAAE,CAACyP,OAAO,CAACvP,MAAM,CAAEkH,GAAC,CAAGyJ,IAAE,CAAEzJ,GAAC,EAAG,CAEnEyR,WAAW,CAACpJ,OAAO,CAAC/O,IAAI,CAAEpD,YAAY,CAAE0C,IAAC,CAAE,CAACyP,OAAO,CAAErI,GAAC,CAAE,CAACP,KAAK,CAAC,CAAE,CAInE,CAEA,IAAI,CAACvJ,YAAY,CAACoD,IAAI,CAAEmY,WAAY,CAErC,CAEA;AAIA,OAEO,CAAAC,WAAW,CAJZrb,YAAY,CAAGmb,MAAM,CAACnb,YAAY,CAE9BuC,IAAC,CAAG,CAAC,CAAEyQ,KAAE,CAAGhT,YAAY,CAACyC,MAAM,CAAEF,IAAC,CAAGyQ,KAAE,CAAEzQ,IAAC,EAAG,CAAG,CAIzD;AAEA,GAJM8Y,WAAW,CAAG,CAAC,CAAC,CAIjB,SAAArb,YAAY,CAAEuC,IAAC,CAAE,CAAC8Q,aAA2B,CAAG,CAEpDgI,WAAW,CAAChI,aAAa,CAAG,EAAE,CAE9B,IAAM,GAAI,CAAA1J,GAAC,CAAG,CAAC,CAAEyJ,IAAE,CAAGpT,YAAY,CAAEuC,IAAC,CAAE,CAAC8Q,aAAa,CAAC5Q,MAAM,CAAEkH,GAAC,CAAGyJ,IAAE,CAAEzJ,GAAC,EAAG,CAAG,IAEtE,CAAA2R,eAAe,CAAGtb,YAAY,CAAEuC,IAAC,CAAE,CAAC8Q,aAAa,CAAE1J,GAAC,CAAE,CACtD4R,gBAAgB,CAAG,CAAC,CAAC,CAE3BA,gBAAgB,CAAC3Y,CAAC,CAAG0Y,eAAe,CAAC1Y,CAAC,CAACwG,KAAK,CAAC,CAAC,CAC9CmS,gBAAgB,CAACzY,CAAC,CAAGwY,eAAe,CAACxY,CAAC,CAACsG,KAAK,CAAC,CAAC,CAC9CmS,gBAAgB,CAACvY,CAAC,CAAGsY,eAAe,CAACtY,CAAC,CAACoG,KAAK,CAAC,CAAC,CAE9CiS,WAAW,CAAChI,aAAa,CAACpQ,IAAI,CAAEsY,gBAAiB,CAElD,CAED,CAEA;AAEA,GAAK,SAAAvb,YAAY,CAAEuC,IAAC,CAAE,CAAC+T,WAAyB,CAAG,CAElD+E,WAAW,CAAC/E,WAAW,CAAG,EAAE,CAE5B,IAAM,GAAI,CAAA3M,GAAC,CAAG,CAAC,CAAEyJ,IAAE,CAAGpT,YAAY,CAAEuC,IAAC,CAAE,CAAC+T,WAAW,CAAC7T,MAAM,CAAEkH,GAAC,CAAGyJ,IAAE,CAAEzJ,GAAC,EAAG,CAEvE0R,WAAW,CAAC/E,WAAW,CAACrT,IAAI,CAAEjD,YAAY,CAAEuC,IAAC,CAAE,CAAC+T,WAAW,CAAE3M,GAAC,CAAE,CAACP,KAAK,CAAC,CAAE,CAI3E,CAEA,IAAI,CAACpJ,YAAY,CAACiD,IAAI,CAAEoY,WAAY,CAErC,CAEA;AAIA,OAFM,CAAAnJ,WAAW,CAAGiJ,MAAM,CAACjJ,WAAW,CAE5B3P,IAAC,CAAG,CAAC,CAAEyQ,KAAE,CAAGd,WAAW,CAACzP,MAAM,CAAEF,IAAC,CAAGyQ,KAAE,CAAEzQ,IAAC,EAAG,CAErD,IAAI,CAAC2P,WAAW,CAACjP,IAAI,CAAEiP,WAAW,CAAE3P,IAAC,CAAE,CAAC6G,KAAK,CAAC,CAAE,CAAC,CAIlD;AAIA,OAFM,CAAA+I,WAAW,CAAGgJ,MAAM,CAAChJ,WAAW,CAE5B5P,IAAC,CAAG,CAAC,CAAEyQ,KAAE,CAAGb,WAAW,CAAC1P,MAAM,CAAEF,IAAC,CAAGyQ,KAAE,CAAEzQ,IAAC,EAAG,CAErD,IAAI,CAAC4P,WAAW,CAAClP,IAAI,CAAEkP,WAAW,CAAE5P,IAAC,CAAE,CAAC6G,KAAK,CAAC,CAAE,CAAC,CAIlD;AAIA,OAFM,CAAAgJ,aAAa,CAAG+I,MAAM,CAAC/I,aAAa,CAEhC7P,IAAC,CAAG,CAAC,CAAEyQ,KAAE,CAAGZ,aAAa,CAAC3P,MAAM,CAAEF,IAAC,CAAGyQ,KAAE,CAAEzQ,IAAC,EAAG,CAEvD,IAAI,CAAC6P,aAAa,CAACnP,IAAI,CAAEmP,aAAa,CAAE7P,IAAC,CAAG,CAAC,CAI9C;AAEA,GAAM,CAAAR,WAAW,CAAGoZ,MAAM,CAACpZ,WAAW,CAEjB,IAAI,GAApBA,WAAoB,GAExB,IAAI,CAACA,WAAW,CAAGA,WAAW,CAACqH,KAAK,CAAC,CAAC,EAIvC;AAEA,GAAM,CAAAiJ,cAAc,CAAG8I,MAAM,CAAC9I,cAAc,CAkB5C,MAhBwB,KAAI,GAAvBA,cAAuB,GAE3B,IAAI,CAACA,cAAc,CAAGA,cAAc,CAACjJ,KAAK,CAAC,CAAC,EAM7C,IAAI,CAACkJ,kBAAkB,CAAG6I,MAAM,CAAC7I,kBAAkB,CACnD,IAAI,CAACC,kBAAkB,CAAG4I,MAAM,CAAC5I,kBAAkB,CACnD,IAAI,CAACrP,aAAa,CAAGiY,MAAM,CAACjY,aAAa,CACzC,IAAI,CAACsP,iBAAiB,CAAG2I,MAAM,CAAC3I,iBAAiB,CACjD,IAAI,CAACnJ,gBAAgB,CAAG8R,MAAM,CAAC9R,gBAAgB,CAC/C,IAAI,CAACoJ,uBAAuB,CAAG0I,MAAM,CAAC1I,uBAAuB,CAC7D,IAAI,CAACC,gBAAgB,CAAGyI,MAAM,CAACzI,gBAAgB,CAExC,IAER,CAAC,CAGD8I,aAAaA,CAAA,CAAI,IAIZ,CAAA5K,KAAK,CAAErO,CAAC,CAFNsS,MAAM,CAAG,EAAE,CAGbN,aAAa,OAAY,CAEvB/R,KAAK,CAAG,IAAI,CAACA,KAAK,CAExB,IAAMD,CAAC,CAAG,CAAC,CAAEA,CAAC,CAAGC,KAAK,CAACC,MAAM,CAAEF,CAAC,EAAG,CAAG,CAErC,GAAM,CAAAqH,IAAI,CAAGpH,KAAK,CAAED,CAAC,CAAE,CAEvB;AAEKqH,IAAI,CAAC2K,aAAa,GAAKA,aAAa,GAExCA,aAAa,CAAG3K,IAAI,CAAC2K,aAAa,CAE7B,SAAA3D,KAAmB,GAEvBA,KAAK,CAACrG,KAAK,CAAS,CAAC,CAALhI,CAAK,CAAKqO,KAAK,CAACkE,KAAK,CACrCD,MAAM,CAAC5R,IAAI,CAAE2N,KAAM,CAAC,EAIrBA,KAAK,CAAG,CACPkE,KAAK,CAAM,CAAC,CAALvS,CAAK,CACZgS,aAAa,CAAEA,aAChB,CAAC,CAIH,CASA,MAPK,UAAA3D,KAAmB,GAEvBA,KAAK,CAACrG,KAAK,CAAS,CAAC,CAALhI,CAAK,CAAKqO,KAAK,CAACkE,KAAK,CACrCD,MAAM,CAAC5R,IAAI,CAAE2N,KAAM,CAAC,EAIdiE,MAER,CAAC,CAED1V,gBAAgB,CAAE,SAAAA,iBAAA,CAAY,IAEvB,CAAAK,QAAQ,CAAG,GAAI,CAAAic,cAAc,CAAC,CAAC,CAACC,YAAY,CAAE,IAAK,CAAC,CAEpDC,cAAc,CAAG,GAAI,CAAA1b,iDAAgB,CAErC2M,SAAS,CAAG,GAAI,CAAAkC,YAAY,CAA6B,CAAC,CAA5BtP,QAAQ,CAACmD,QAAQ,CAACF,MAAW,CAAC,CAGlE,GAFAkZ,cAAc,CAAC5S,YAAY,CAAE,UAAU,CAAE,GAAI,CAAAyB,kDAAe,CAAEoC,SAAS,CAAE,CAAE,CAAC,CAACgP,iBAAiB,CAAEpc,QAAQ,CAACmD,QAAS,CAAE,CAAC,CAEtF,CAAC,CAA3BnD,QAAQ,CAACwS,OAAO,CAACvP,MAAU,CAAG,CAElC,GAAM,CAAAuP,OAAO,CAAG,GAAI,CAAAlD,YAAY,CAA4B,CAAC,CAA3BtP,QAAQ,CAACwS,OAAO,CAACvP,MAAW,CAAC,CAC/DkZ,cAAc,CAAC5S,YAAY,CAAE,QAAQ,CAAE,GAAI,CAAAyB,kDAAe,CAAEwH,OAAO,CAAE,CAAE,CAAC,CAAC4J,iBAAiB,CAAEpc,QAAQ,CAACwS,OAAQ,CAAE,CAEhH,CAEA,GAA8B,CAAC,CAA1BxS,QAAQ,CAACwI,MAAM,CAACvF,MAAU,CAAG,CAEjC,GAAM,CAAAuF,MAAM,CAAG,GAAI,CAAA8G,YAAY,CAA2B,CAAC,CAA1BtP,QAAQ,CAACwI,MAAM,CAACvF,MAAW,CAAC,CAC7DkZ,cAAc,CAAC5S,YAAY,CAAE,OAAO,CAAE,GAAI,CAAAyB,kDAAe,CAAExC,MAAM,CAAE,CAAE,CAAC,CAAC6T,eAAe,CAAErc,QAAQ,CAACwI,MAAO,CAAE,CAE3G,CAEA,GAA2B,CAAC,CAAvBxI,QAAQ,CAACyS,GAAG,CAACxP,MAAU,CAAG,CAE9B,GAAM,CAAAwP,GAAG,CAAG,GAAI,CAAAnD,YAAY,CAAwB,CAAC,CAAvBtP,QAAQ,CAACyS,GAAG,CAACxP,MAAW,CAAC,CACvDkZ,cAAc,CAAC5S,YAAY,CAAE,IAAI,CAAE,GAAI,CAAAyB,kDAAe,CAAEyH,GAAG,CAAE,CAAE,CAAC,CAAC6J,iBAAiB,CAAEtc,QAAQ,CAACyS,GAAI,CAAE,CAEpG,CAEA,GAA4B,CAAC,CAAxBzS,QAAQ,CAAC4Y,IAAI,CAAC3V,MAAU,CAAG,CAE/B,GAAM,CAAA2V,IAAI,CAAG,GAAI,CAAAtJ,YAAY,CAAyB,CAAC,CAAxBtP,QAAQ,CAAC4Y,IAAI,CAAC3V,MAAW,CAAC,CACzDkZ,cAAc,CAAC5S,YAAY,CAAE,KAAK,CAAE,GAAI,CAAAyB,kDAAe,CAAE4N,IAAI,CAAE,CAAE,CAAC,CAAC0D,iBAAiB,CAAEtc,QAAQ,CAAC4Y,IAAK,CAAE,CAEvG,CAEA;AAIA;AAEA,IAAM,GAAM,CAAAtO,IAAI,GAJhB,CAAA6R,cAAc,CAAC9G,MAAM,CAAGrV,QAAQ,CAACqV,MAAM,CAInBrV,QAAQ,CAACK,YAAY,CAAG,CAK3C,OAHM,CAAAkE,KAAK,CAAG,EAAE,CACVlE,YAAY,CAAGL,QAAQ,CAACK,YAAY,CAAEiK,IAAI,CAAE,CAExCvH,CAAC,CAAG,CAAC,CAAEiH,CAAC,CAAG3J,YAAY,CAAC4C,MAAM,CAAEF,CAAC,CAAGiH,CAAC,CAAEjH,CAAC,EAAG,CAAG,IAEjD,CAAA6Y,WAAW,CAAGvb,YAAY,CAAE0C,CAAC,CAAE,CAE/BmB,SAAS,CAAG,GAAI,CAAAmG,yDAAsB,CAA4B,CAAC,CAA3BuR,WAAW,CAACtU,IAAI,CAACrE,MAAU,CAAE,CAAE,CAAC,CAC9EiB,SAAS,CAACoG,IAAI,CAAGsR,WAAW,CAACtR,IAAI,CAEjC/F,KAAK,CAACd,IAAI,CAAES,SAAS,CAACkY,iBAAiB,CAAER,WAAW,CAACtU,IAAK,CAAE,CAE7D,CAEA6U,cAAc,CAAChb,eAAe,CAAEmJ,IAAI,CAAE,CAAG/F,KAE1C,CAEA;AAEA,GAAmC,CAAC,CAA/BvE,QAAQ,CAAC2S,WAAW,CAAC1P,MAAU,CAAG,CAEtC,GAAM,CAAA0P,WAAW,CAAG,GAAI,CAAAtI,yDAAsB,CAAgC,CAAC,CAA/BrK,QAAQ,CAAC2S,WAAW,CAAC1P,MAAU,CAAE,CAAE,CAAC,CACpFkZ,cAAc,CAAC5S,YAAY,CAAE,WAAW,CAAEoJ,WAAW,CAAC4J,iBAAiB,CAAEvc,QAAQ,CAAC2S,WAAY,CAAE,CAEjG,CAEA,GAAmC,CAAC,CAA/B3S,QAAQ,CAAC0S,WAAW,CAACzP,MAAU,CAAG,CAEtC,GAAM,CAAAyP,WAAW,CAAG,GAAI,CAAArI,yDAAsB,CAAgC,CAAC,CAA/BrK,QAAQ,CAAC0S,WAAW,CAACzP,MAAU,CAAE,CAAE,CAAC,CACpFkZ,cAAc,CAAC5S,YAAY,CAAE,YAAY,CAAEmJ,WAAW,CAAC6J,iBAAiB,CAAEvc,QAAQ,CAAC0S,WAAY,CAAE,CAElG,CAEA;AAcA,MAZiC,KAAI,GAAhC1S,QAAQ,CAAC6S,cAAuB,GAEpCsJ,cAAc,CAACtJ,cAAc,CAAG7S,QAAQ,CAAC6S,cAAc,CAACjJ,KAAK,CAAC,CAAC,EAIlC,IAAI,GAA7B5J,QAAQ,CAACuC,WAAoB,GAEjC4Z,cAAc,CAAC5Z,WAAW,CAAGvC,QAAQ,CAACuC,WAAW,CAACqH,KAAK,CAAC,CAAC,EAInDuS,cAER,CAAC,CAEAzS,uBAAuB,CAAE,SAAAA,wBAAA,CAAY,CAErC;AAAA,GAEM,CAAAyS,cAAc,CAAG,GAAI,CAAA1b,iDAAgB,CAErC2M,SAAS,CAAG,GAAI,CAAAkC,YAAY,CAAyB,CAAC,CAAxB,IAAI,CAACnM,QAAQ,CAACF,MAAW,CAAC,CAG9D,GAFAkZ,cAAc,CAAC5S,YAAY,CAAE,UAAU,CAAE,GAAI,CAAAyB,kDAAe,CAAEoC,SAAS,CAAE,CAAE,CAAC,CAACgP,iBAAiB,CAAE,IAAI,CAACjZ,QAAS,CAAE,CAAC,CAEtF,CAAC,CAAvB,IAAI,CAACqP,OAAO,CAACvP,MAAU,CAAG,IACxB,CAAAuP,OAAO,CAAG,GAAI,CAAAlD,YAAY,CAAE,IAAI,CAACkD,OAAO,CAACvP,MAAO,CAAC,CAChDyL,MAAM,CAAG,GAAI,CAAA1D,kDAAe,CAAEwH,OAAO,CAAE,CAAE,CAAC,CAACjI,SAAS,CAAE,IAAI,CAACiI,OAAQ,CAAC,CAC3E2J,cAAc,CAAC5S,YAAY,CAAE,QAAQ,CAAGmF,MAAM,CAC/C,CACE,GAAuB,CAAC,CAAnB,IAAI,CAAC+D,GAAG,CAACxP,MAAU,EAAyB,CAAC,CAAtB,IAAI,CAACwP,GAAG,CAAC,CAAC,CAAC,CAACxP,MAAU,CAAG,CAEtD,GAAM,CAAAwP,GAAG,CAAG,GAAI,CAAAnD,YAAY,CAAuB,CAAC,CAAtB,IAAI,CAACmD,GAAG,CAAC,CAAC,CAAC,CAACxP,MAAW,CAAC,CACtDkZ,cAAc,CAAC5S,YAAY,CAAE,IAAI,CAAE,GAAI,CAAAyB,kDAAe,CAAEyH,GAAG,CAAE,CAAE,CAAC,CAAClI,SAAS,CAAE,IAAI,CAACkI,GAAG,CAAC,CAAC,CAAE,CAAE,CAC3F,CAEA,GAAuB,CAAC,CAAnB,IAAI,CAACA,GAAG,CAACxP,MAAU,EAAyB,CAAC,CAAtB,IAAI,CAACwP,GAAG,CAAC,CAAC,CAAC,CAACxP,MAAU,CAAG,CACpD,GAAM,CAAA2V,IAAI,CAAG,GAAI,CAAAtJ,YAAY,CAAuB,CAAC,CAAtB,IAAI,CAACmD,GAAG,CAAC,CAAC,CAAC,CAACxP,MAAW,CAAC,CACvDkZ,cAAc,CAAC5S,YAAY,CAAE,KAAK,CAAE,GAAI,CAAAyB,kDAAe,CAAE4N,IAAI,CAAE,CAAE,CAAC,CAACrO,SAAS,CAAE,IAAI,CAACkI,GAAG,CAAC,CAAC,CAAE,CAAE,CAC7F,CAEE,GAA0B,CAAC,CAAtB,IAAI,CAACjK,MAAM,CAACvF,MAAU,CAAE,CAG3B,OADM,CAAAiH,UAAU,CAAG,EAAE,CACZnH,CAAC,CAAG,CAAC,CAAGA,CAAC,CAAG,IAAI,CAACyF,MAAM,CAACvF,MAAM,CAAEF,CAAC,EAAE,CAC1CmH,UAAU,CAACzG,IAAI,CAAC,GAAI,CAAAhC,wCAAK,CAAE,IAAI,CAAC+G,MAAM,CAAEzF,CAAC,CAAG,CAAC,CAAC,CAEhD,GAAM,CAAAyF,MAAM,CAAG,GAAI,CAAA8G,YAAY,CAAsB,CAAC,CAArBpF,UAAU,CAACjH,MAAW,CAAC,CAC3DkZ,cAAc,CAAC5S,YAAY,CAAE,OAAO,CAAE,GAAI,CAAAyB,kDAAe,CAAExC,MAAM,CAAE,CAAE,CAAC,CAAC6T,eAAe,CAAEnS,UAAW,CAAE,CAEpG,CAAC,IAAM,CAGL,OADM,CAAAsS,WAAW,CAAG,GAAI,CAAAlN,YAAY,CAAyB,CAAC,CAAxB,IAAI,CAACnM,QAAQ,CAACF,MAAY,CAAC,CACxDF,IAAC,CAAG,CAAC,CAAEA,IAAC,CAA0B,CAAC,CAAxB,IAAI,CAACI,QAAQ,CAACF,MAAU,CAAEF,IAAC,EAAE,CAC/CyZ,WAAW,CAACzZ,IAAC,CAAC,CAAG,CAAG,CAEtBoZ,cAAc,CAAC5S,YAAY,CAAE,OAAO,CAAE,GAAI,CAAAyB,kDAAe,CAAEwR,WAAW,CAAE,CAAE,CAAE,CAE9E,CAEA,GAAwB,CAAC,CAArB,IAAI,CAACxZ,KAAK,CAACC,MAAU,CAAE,CAMzB,OAJI,CAAAuF,OAAM,CAAG,EAAE,CAEX0E,OAAO,CAAG,EAAE,CAEPnK,IAAC,CAAG,CAAC,CAAGA,IAAC,CAAG,IAAI,CAACC,KAAK,CAACC,MAAM,CAAEF,IAAC,EAAE,CAAE,CAE3CmK,OAAO,CAACzJ,IAAI,CAAC,IAAI,CAACT,KAAK,CAACD,IAAC,CAAC,CAACK,CAAC,CAAE,IAAI,CAACJ,KAAK,CAACD,IAAC,CAAC,CAACO,CAAC,CAAE,IAAI,CAACN,KAAK,CAACD,IAAC,CAAC,CAACS,CAAC,CAAC,CAE/D,GAAM,CAAAvC,YAAY,CAAG,IAAI,CAAC+B,KAAK,CAACD,IAAC,CAAC,CAAC9B,YAAY,CAE7C,GAA6B,CAAC,GAAzBA,YAAY,CAACgC,MAAY,CAE5BuF,OAAM,CAAC/E,IAAI,CAAExC,YAAY,CAAE,CAAC,CAAE,CAAEA,YAAY,CAAE,CAAC,CAAE,CAAEA,YAAY,CAAE,CAAC,CAAG,CAAC,KAEjE,CAEL,GAAM,CAAAN,KAAK,CAAG,IAAI,CAACqC,KAAK,CAACD,IAAC,CAAC,CAACpC,KAAK,CAEjC6H,OAAM,CAAC/E,IAAI,CAAE9C,KAAK,CAAEA,KAAK,CAAEA,KAAM,CAErC,CAEF,CAED;AAEL;AACA;AAEA;AAEMwb,cAAc,CAAC3P,QAAQ,CAAEU,OAAQ,CAAC,CAElCiP,cAAc,CAAC9G,MAAM,CAAG,IAAI,CAAC2G,aAAa,CAAC,CAE7C,CAEF;AAEE,GAA+B,CAAC,CAA5B,IAAI,CAAC3b,YAAY,CAAC4C,MAAU,CAAE,CAKnC,OAHM,CAAAsB,KAAK,CAAG,EAAE,CACPkY,YAAY,CAAG,EAAE,CAEhB1Z,IAAC,CAAG,CAAC,CAAEiH,CAAC,CAAG,IAAI,CAAC3J,YAAY,CAAC4C,MAAM,CAAEF,IAAC,CAAGiH,CAAC,CAAEjH,IAAC,EAAG,CAAG,IAEtD,CAAA6Y,WAAW,CAAG,IAAI,CAACvb,YAAY,CAAE0C,IAAC,CAAE,CAEpCmB,SAAS,CAAG,GAAI,CAAAmG,yDAAsB,CAAgC,CAAC,CAA/BuR,WAAW,CAACzY,QAAQ,CAACF,MAAU,CAAE,CAAE,CAAC,CAK9E,GAJJiB,SAAS,CAACoG,IAAI,CAAGsR,WAAW,CAACtR,IAAI,CAEjC/F,KAAK,CAACd,IAAI,CAAES,SAAS,CAACkY,iBAAiB,CAAER,WAAW,CAACzY,QAAS,CAAE,CAAC,CAEzDyY,WAAW,CAACpJ,OAAO,CAAE,CAGvB,GAAM,CAAAtO,UAAS,CAAG,GAAI,CAAAmG,yDAAsB,CAA+B,CAAC,CAA9BuR,WAAW,CAACpJ,OAAO,CAACvP,MAAU,CAAE,CAAE,CAAC,CACjFiB,UAAS,CAACoG,IAAI,CAAGsR,WAAW,CAACtR,IAAI,CAEjCmS,YAAY,CAAChZ,IAAI,CAAES,UAAS,CAACkY,iBAAiB,CAAER,WAAW,CAACpJ,OAAQ,CAAE,CAExE,CAEL,CAEA2J,cAAc,CAAChb,eAAe,CAAC0F,QAAQ,CAAGtC,KAAK,CAC5C4X,cAAc,CAAChb,eAAe,CAACsS,MAAM,CAAGgJ,YAE5C,CAEA;AAEA,GAA+B,CAAC,CAA3B,IAAI,CAAC9J,WAAW,CAAC1P,MAAU,CAAG,CAElC,GAAM,CAAA0P,WAAW,CAAG,GAAI,CAAAtI,yDAAsB,CAA4B,CAAC,CAA3B,IAAI,CAACsI,WAAW,CAAC1P,MAAU,CAAE,CAAE,CAAC,CAChFkZ,cAAc,CAAC5S,YAAY,CAAE,WAAW,CAAEoJ,WAAW,CAAC4J,iBAAiB,CAAE,IAAI,CAAC5J,WAAY,CAAE,CAE7F,CAEA,GAA+B,CAAC,CAA3B,IAAI,CAACD,WAAW,CAACzP,MAAU,CAAG,CAElC,GAAM,CAAAyP,WAAW,CAAG,GAAI,CAAArI,yDAAsB,CAA4B,CAAC,CAA3B,IAAI,CAACqI,WAAW,CAACzP,MAAU,CAAE,CAAE,CAAC,CAChFkZ,cAAc,CAAC5S,YAAY,CAAE,YAAY,CAAEmJ,WAAW,CAAC6J,iBAAiB,CAAE,IAAI,CAAC7J,WAAY,CAAE,CAE9F,CAEA;AAcA,MAZ6B,KAAI,GAA5B,IAAI,CAACG,cAAuB,GAEhCsJ,cAAc,CAACtJ,cAAc,CAAG,IAAI,CAACA,cAAc,CAACjJ,KAAK,CAAC,CAAC,EAIlC,IAAI,GAAzB,IAAI,CAACrH,WAAoB,GAE7B4Z,cAAc,CAAC5Z,WAAW,CAAG,IAAI,CAACA,WAAW,CAACqH,KAAK,CAAC,CAAC,EAI/CuS,cAER,CAAC,CAEDO,eAAe,CAAE,SAAAA,gBAAA,CAAY,CAE5BzW,OAAO,CAACC,KAAK,CAAE,sDAAuD,CAEvE,CAAC,CAEDyW,oBAAoB,CAAE,SAAAA,qBAAA,CAAY,CAEjC1W,OAAO,CAACC,KAAK,CAAE,0GAA2G,CAE3H,CAAC,CAED0W,WAAW,CAAE,SAAAA,YAAWxJ,MAAM,CAAG,CAGhC,MADA,CAAAnN,OAAO,CAAC4W,IAAI,CAAE,qEAAsE,CAAC,CAC9E,IAAI,CAACzV,YAAY,CAAEgM,MAAO,CAElC,CAAC,CAED0J,OAAO,CAAE,SAAAA,QAAA,CAAY,CAEpB,IAAI,CAACC,aAAa,CAAE,CAAExK,IAAI,CAAE,SAAU,CAAE,CAEzC,CAED,CAAE,CAAC,CAEHnU,QAAQ,CAAC4e,8BAA8B,CAAG,SAAWC,MAAM,CAAG,IAEzD,CAAAd,cAAc,CAAG,GAAI,CAAA1b,iDAAgB,CAEnCT,QAAQ,CAAGid,MAAM,CAACjd,QAAQ,CAEhC,GAAKid,MAAM,CAACC,QAAQ,EAAID,MAAM,CAACE,MAAM,CAAG,IAEjC,CAAA/P,SAAS,CAAG,GAAI,CAAA/C,yDAAsB,CAA6B,CAAC,CAA5BrK,QAAQ,CAACmD,QAAQ,CAACF,MAAU,CAAE,CAAE,CAAC,CACzEuF,MAAM,CAAG,GAAI,CAAA6B,yDAAsB,CAA2B,CAAC,CAA1BrK,QAAQ,CAACwI,MAAM,CAACvF,MAAU,CAAE,CAAE,CAAC,CAK1E,GAHAkZ,cAAc,CAAC5S,YAAY,CAAE,UAAU,CAAE6D,SAAS,CAACgP,iBAAiB,CAAEpc,QAAQ,CAACmD,QAAS,CAAE,CAAC,CAC3FgZ,cAAc,CAAC5S,YAAY,CAAE,OAAO,CAAEf,MAAM,CAAC6T,eAAe,CAAErc,QAAQ,CAACwI,MAAO,CAAE,CAAC,CAE5ExI,QAAQ,CAAC4S,aAAa,EAAI5S,QAAQ,CAAC4S,aAAa,CAAC3P,MAAM,GAAKjD,QAAQ,CAACmD,QAAQ,CAACF,MAAM,CAAG,CAE3F,GAAM,CAAA2P,aAAa,CAAG,GAAI,CAAAvI,yDAAsB,CAAErK,QAAQ,CAAC4S,aAAa,CAAC3P,MAAM,CAAE,CAAE,CAAC,CAEpFkZ,cAAc,CAAC5S,YAAY,CAAE,cAAc,CAAEqJ,aAAa,CAACrI,SAAS,CAAEvK,QAAQ,CAAC4S,aAAc,CAAE,CAEhG,CAEiC,IAAI,GAAhC5S,QAAQ,CAAC6S,cAAuB,GAEpCsJ,cAAc,CAACtJ,cAAc,CAAG7S,QAAQ,CAAC6S,cAAc,CAACjJ,KAAK,CAAC,CAAC,EAIlC,IAAI,GAA7B5J,QAAQ,CAACuC,WAAoB,GAEjC4Z,cAAc,CAAC5Z,WAAW,CAAGvC,QAAQ,CAACuC,WAAW,CAACqH,KAAK,CAAC,CAAC,CAI3D,CAAC,IAAW,CAAAqT,MAAM,CAAClE,MAAM,GAExBoD,cAAc,CAAGnc,QAAQ,CAACL,gBAAgB,CAAC,CAAC,EAI7C,MAAO,CAAAwc,cAER,CAAC,CAED,KAAM,CAAAF,cAAe,CAEpBnR,WAAWA,CAAA,CAAG,CAeb;AAKA;AAlBA,IAAI,CAAC3H,QAAQ,CAAG,EAAE,CAClB,IAAI,CAACqP,OAAO,CAAG,EAAE,CACjB,IAAI,CAAChK,MAAM,CAAG,EAAE,CAChB,IAAI,CAACiK,GAAG,CAAG,EAAE,CACb,IAAI,CAACmG,IAAI,CAAG,EAAE,CAEd,IAAI,CAACvD,MAAM,CAAG,EAAE,CAEhB,IAAI,CAAChV,YAAY,CAAG,CAAC,CAAC,CAEtB,IAAI,CAACqS,WAAW,CAAG,EAAE,CACrB,IAAI,CAACC,WAAW,CAAG,EAAE,CAIrB,IAAI,CAACpQ,WAAW,CAAG,IAAI,CACvB,IAAI,CAACsQ,cAAc,CAAG,IAAI,CAI1B,IAAI,CAACE,kBAAkB,GAAQ,CAC/B,IAAI,CAACC,iBAAiB,GAAQ,CAC9B,IAAI,CAACnJ,gBAAgB,GAAQ,CAC7B,IAAI,CAACnG,aAAa,GAAQ,CAC1B,IAAI,CAACwP,gBAAgB,GAEtB,CAEA8I,aAAaA,CAAEhc,QAAQ,CAAG,IAIrB,CAAAoR,KAAK,CAAErO,CAAC,CAFNsS,MAAM,CAAG,EAAE,CAGbN,aAAa,OAAY,CAEvB/R,KAAK,CAAGhD,QAAQ,CAACgD,KAAK,CAE5B,IAAMD,CAAC,CAAG,CAAC,CAAEA,CAAC,CAAGC,KAAK,CAACC,MAAM,CAAEF,CAAC,EAAG,CAAG,CAErC,GAAM,CAAAqH,IAAI,CAAGpH,KAAK,CAAED,CAAC,CAAE,CAEvB;AAEKqH,IAAI,CAAC2K,aAAa,GAAKA,aAAa,GAExCA,aAAa,CAAG3K,IAAI,CAAC2K,aAAa,CAE7B3D,KAAK,SAAc,GAEvBA,KAAK,CAACrG,KAAK,CAAS,CAAC,CAALhI,CAAK,CAAKqO,KAAK,CAACkE,KAAK,CACrCD,MAAM,CAAC5R,IAAI,CAAE2N,KAAM,CAAC,EAIrBA,KAAK,CAAG,CACPkE,KAAK,CAAM,CAAC,CAALvS,CAAK,CACZgS,aAAa,CAAEA,aAChB,CAAC,CAIH,CAEK3D,KAAK,SAAc,GAEvBA,KAAK,CAACrG,KAAK,CAAS,CAAC,CAALhI,CAAK,CAAKqO,KAAK,CAACkE,KAAK,CACrCD,MAAM,CAAC5R,IAAI,CAAE2N,KAAM,CAAC,EAIrB,IAAI,CAACiE,MAAM,CAAGA,MAEf,CAEA6G,YAAYA,CAAElc,QAAQ,CAAG,IAcpB,CAAAod,oBAAoB,CAZlBpa,KAAK,CAAGhD,QAAQ,CAACgD,KAAK,CACtBG,QAAQ,CAAGnD,QAAQ,CAACmD,QAAQ,CAC5BL,aAAa,CAAG9C,QAAQ,CAAC8C,aAAa,CAEtCuY,eAAe,CAAGvY,aAAa,CAAE,CAAC,CAAE,EAAgC,CAAC,CAA7BA,aAAa,CAAE,CAAC,CAAE,CAACG,MAAU,CACrEoa,gBAAgB,CAAGva,aAAa,CAAE,CAAC,CAAE,EAAgC,CAAC,CAA7BA,aAAa,CAAE,CAAC,CAAE,CAACG,MAAU,CAItE5C,YAAY,CAAGL,QAAQ,CAACK,YAAY,CACpCid,kBAAkB,CAAGjd,YAAY,CAAC4C,MAAM,CAH9C;AAOA,GAA0B,CAAC,CAAtBqa,kBAAsB,CAAG,CAE7BF,oBAAoB,CAAG,EAAE,CAEzB,IAAM,GAAI,CAAAra,CAAC,CAAG,CAAC,CAAEA,CAAC,CAAGua,kBAAkB,CAAEva,CAAC,EAAG,CAE5Cqa,oBAAoB,CAAEra,CAAC,CAAE,CAAG,CAC3BuH,IAAI,CAAEjK,YAAY,CAAE0C,CAAC,CAAE,CAACuH,IAAI,CAC3BhD,IAAI,CAAE,EACR,CAAC,CAIF,IAAI,CAACjH,YAAY,CAACwG,QAAQ,CAAGuW,oBAE9B,CAAC,GAKG,CAAAG,kBAAkB,CAHhB/c,YAAY,CAAGR,QAAQ,CAACQ,YAAY,CACpCgd,kBAAkB,CAAGhd,YAAY,CAACyC,MAAM,CAI9C,GAA0B,CAAC,CAAtBua,kBAAsB,CAAG,CAE7BD,kBAAkB,CAAG,EAAE,CAEvB,IAAM,GAAI,CAAAxa,IAAC,CAAG,CAAC,CAAEA,IAAC,CAAGya,kBAAkB,CAAEza,IAAC,EAAG,CAE5Cwa,kBAAkB,CAAExa,IAAC,CAAE,CAAG,CACzBuH,IAAI,CAAE9J,YAAY,CAAEuC,IAAC,CAAE,CAACuH,IAAI,CAC3BhD,IAAI,CAAE,EACR,CAAC,CAIF,IAAI,CAACjH,YAAY,CAACoT,MAAM,CAAG8J,kBAE5B,CAEA;AAAA,GAEM,CAAA5K,WAAW,CAAG3S,QAAQ,CAAC2S,WAAW,CAClCD,WAAW,CAAG1S,QAAQ,CAAC0S,WAAW,CAElC+K,cAAc,CAAG9K,WAAW,CAAC1P,MAAM,GAAKE,QAAQ,CAACF,MAAM,CACvDya,cAAc,CAAGhL,WAAW,CAACzP,MAAM,GAAKE,QAAQ,CAACF,MAAM,CAItC,CAAC,CAAnBE,QAAQ,CAACF,MAAU,EAAqB,CAAC,GAAlBD,KAAK,CAACC,MAAY,EAE7CgD,OAAO,CAACC,KAAK,CAAE,8DAA+D,CAAC,CAIhF,IAAM,GAEC,CAAAkE,IAAI,CAFDrH,IAAC,CAAG,CAAC,CAAEA,IAAC,CAAGC,KAAK,CAACC,MAAM,CAAEF,IAAC,EAAG,CAAG,CAEnCqH,IAAI,CAAGpH,KAAK,CAAED,IAAC,CAAE,CAEvB,IAAI,CAACI,QAAQ,CAACM,IAAI,CAAEN,QAAQ,CAAEiH,IAAI,CAAChH,CAAC,CAAE,CAAED,QAAQ,CAAEiH,IAAI,CAAC9G,CAAC,CAAE,CAAEH,QAAQ,CAAEiH,IAAI,CAAC5G,CAAC,CAAG,CAAC,CAEhF,GAAM,CAAAqQ,aAAa,CAAGzJ,IAAI,CAACyJ,aAAa,CAExC,GAA8B,CAAC,GAA1BA,aAAa,CAAC5Q,MAAY,CAE9B,IAAI,CAACuP,OAAO,CAAC/O,IAAI,CAAEoQ,aAAa,CAAE,CAAC,CAAE,CAAEA,aAAa,CAAE,CAAC,CAAE,CAAEA,aAAa,CAAE,CAAC,CAAG,CAAC,KAEzE,CAEN,GAAM,CAAAJ,MAAM,CAAGrJ,IAAI,CAACqJ,MAAM,CAE1B,IAAI,CAACjB,OAAO,CAAC/O,IAAI,CAAEgQ,MAAM,CAAEA,MAAM,CAAEA,MAAO,CAE3C,CAEA,GAAM,CAAAxS,YAAY,CAAGmJ,IAAI,CAACnJ,YAAY,CAEtC,GAA6B,CAAC,GAAzBA,YAAY,CAACgC,MAAY,CAE7B,IAAI,CAACuF,MAAM,CAAC/E,IAAI,CAAExC,YAAY,CAAE,CAAC,CAAE,CAAEA,YAAY,CAAE,CAAC,CAAE,CAAEA,YAAY,CAAE,CAAC,CAAG,CAAC,KAErE,CAEN,GAAM,CAAAN,KAAK,CAAGyJ,IAAI,CAACzJ,KAAK,CAExB,IAAI,CAAC6H,MAAM,CAAC/E,IAAI,CAAE9C,KAAK,CAAEA,KAAK,CAAEA,KAAM,CAEvC,CAEA,GAAK,KAAA0a,eAAwB,CAAG,CAE/B,GAAM,CAAAsC,SAAS,CAAG7a,aAAa,CAAE,CAAC,CAAE,CAAEC,IAAC,CAAE,CAEpC,SAAA4a,SAAuB,EAM3B1X,OAAO,CAAC4W,IAAI,CAAE,0DAA0D,CAAE9Z,IAAE,CAAC,CAE7E,IAAI,CAAC0P,GAAG,CAAChP,IAAI,CAAE,GAAI,CAAAf,0CAAS,CAAE,GAAI,CAAAA,0CAAS,CAAE,GAAI,CAAAA,0CAAU,CAAC,EAN5D,IAAI,CAAC+P,GAAG,CAAChP,IAAI,CAAEka,SAAS,CAAE,CAAC,CAAE,CAAEA,SAAS,CAAE,CAAC,CAAE,CAAEA,SAAS,CAAE,CAAC,CAAG,CAUhE,CAEA,GAAK,KAAAN,gBAAyB,CAAG,CAEhC,GAAM,CAAAM,UAAS,CAAG7a,aAAa,CAAE,CAAC,CAAE,CAAEC,IAAC,CAAE,CAEpC,SAAA4a,UAAuB,EAM3B1X,OAAO,CAAC4W,IAAI,CAAE,2DAA2D,CAAE9Z,IAAE,CAAC,CAE9E,IAAI,CAAC6V,IAAI,CAACnV,IAAI,CAAE,GAAI,CAAAf,0CAAS,CAAE,GAAI,CAAAA,0CAAS,CAAE,GAAI,CAAAA,0CAAU,CAAC,EAN7D,IAAI,CAACkW,IAAI,CAACnV,IAAI,CAAEka,UAAS,CAAE,CAAC,CAAE,CAAEA,UAAS,CAAE,CAAC,CAAE,CAAEA,UAAS,CAAE,CAAC,CAAG,CAUjE,CAEA;AAEA,IAAM,GAEC,CAAA/B,WAAW,CAFRzR,CAAC,CAAG,CAAC,CAAEA,CAAC,CAAGmT,kBAAkB,CAAEnT,CAAC,EAAG,CAEtCyR,WAAW,CAAGvb,YAAY,CAAE8J,CAAC,CAAE,CAAChH,QAAQ,CAE9Cia,oBAAoB,CAAEjT,CAAC,CAAE,CAAC7C,IAAI,CAAC7D,IAAI,CAAEmY,WAAW,CAAExR,IAAI,CAAChH,CAAC,CAAE,CAAEwY,WAAW,CAAExR,IAAI,CAAC9G,CAAC,CAAE,CAAEsY,WAAW,CAAExR,IAAI,CAAC5G,CAAC,CAAG,CAAC,CAI3G,IAAM,GAEC,CAAAqY,WAAW,CAFR1R,GAAC,CAAG,CAAC,CAAEA,GAAC,CAAGqT,kBAAkB,CAAErT,GAAC,EAAG,CAEtC0R,WAAW,CAAGrb,YAAY,CAAE2J,GAAC,CAAE,CAAC0J,aAAa,CAAE9Q,IAAC,CAAE,CAExDwa,kBAAkB,CAAEpT,GAAC,CAAE,CAAC7C,IAAI,CAAC7D,IAAI,CAAEoY,WAAW,CAACzY,CAAC,CAAEyY,WAAW,CAACvY,CAAC,CAAEuY,WAAW,CAACrY,CAAE,CAAC,CAIjF;AAEKia,cAAc,EAElB,IAAI,CAAC9K,WAAW,CAAClP,IAAI,CAAEkP,WAAW,CAAEvI,IAAI,CAAChH,CAAC,CAAE,CAAEuP,WAAW,CAAEvI,IAAI,CAAC9G,CAAC,CAAE,CAAEqP,WAAW,CAAEvI,IAAI,CAAC5G,CAAC,CAAG,CAAC,CAIxFka,cAAc,EAElB,IAAI,CAAChL,WAAW,CAACjP,IAAI,CAAEiP,WAAW,CAAEtI,IAAI,CAAChH,CAAC,CAAE,CAAEsP,WAAW,CAAEtI,IAAI,CAAC9G,CAAC,CAAE,CAAEoP,WAAW,CAAEtI,IAAI,CAAC5G,CAAC,CAAG,CAI7F,CAsBA,MApBA,KAAI,CAACwY,aAAa,CAAEhc,QAAS,CAAC,CAE9B,IAAI,CAAC+S,kBAAkB,CAAG/S,QAAQ,CAAC+S,kBAAkB,CACrD,IAAI,CAACC,iBAAiB,CAAGhT,QAAQ,CAACgT,iBAAiB,CACnD,IAAI,CAACnJ,gBAAgB,CAAG7J,QAAQ,CAAC6J,gBAAgB,CACjD,IAAI,CAACnG,aAAa,CAAG1D,QAAQ,CAAC0D,aAAa,CAC3C,IAAI,CAACwP,gBAAgB,CAAGlT,QAAQ,CAACkT,gBAAgB,CAEhB,IAAI,GAAhClT,QAAQ,CAAC6S,cAAuB,GAEpC,IAAI,CAACA,cAAc,CAAG7S,QAAQ,CAAC6S,cAAc,CAACjJ,KAAK,CAAC,CAAC,EAIxB,IAAI,GAA7B5J,QAAQ,CAACuC,WAAoB,GAEjC,IAAI,CAACA,WAAW,CAAGvC,QAAQ,CAACuC,WAAW,CAACqH,KAAK,CAAC,CAAC,EAIzC,IAER,CAED,CAEA,KAAM,CAAAsL,KAAM,CAEXpK,WAAWA,CAAE1H,CAAC,CAAEE,CAAC,CAAEE,CAAC,CAAEiQ,MAAM,CAAE9S,KAAK,CAAsB,IAApB,CAAAoU,aAAa,GAAAtJ,SAAA,CAAAxI,MAAA,EAAAwI,SAAA,aAAAA,SAAA,IAAG,CAAC,CAErD,IAAI,CAACrI,CAAC,CAAGA,CAAC,CACV,IAAI,CAACE,CAAC,CAAGA,CAAC,CACV,IAAI,CAACE,CAAC,CAAGA,CAAC,CAEV,IAAI,CAACiQ,MAAM,CAAKA,MAAM,EAAIA,MAAM,CAACmK,SAAS,CAAKnK,MAAM,CAAG,GAAI,CAAAzB,0CAAS,CACrE,IAAI,CAAC6B,aAAa,CAAGzN,KAAK,CAACC,OAAO,CAAEoN,MAAO,CAAC,CAAGA,MAAM,CAAG,EAAE,CAE1D,IAAI,CAAC9S,KAAK,CAAKA,KAAK,EAAIA,KAAK,CAACkd,OAAO,CAAKld,KAAK,CAAG,GAAI,CAAAc,wCAAO,CAC7D,IAAI,CAACR,YAAY,CAAGmF,KAAK,CAACC,OAAO,CAAE1F,KAAM,CAAC,CAAGA,KAAK,CAAG,EAAE,CAEvD,IAAI,CAACoU,aAAa,CAAGA,aAEtB,CAEAnL,KAAKA,CAAA,CAAG,CAEP,MAAO,IAAI,KAAI,CAACkB,WAAW,CAAC,CAAC,CAACuL,IAAI,CAAE,IAAK,CAE1C,CAEAA,IAAIA,CAAEsF,MAAM,CAAG,CAEd,IAAI,CAACvY,CAAC,CAAGuY,MAAM,CAACvY,CAAC,CACjB,IAAI,CAACE,CAAC,CAAGqY,MAAM,CAACrY,CAAC,CACjB,IAAI,CAACE,CAAC,CAAGmY,MAAM,CAACnY,CAAC,CAEjB,IAAI,CAACiQ,MAAM,CAAC4C,IAAI,CAAEsF,MAAM,CAAClI,MAAO,CAAC,CACjC,IAAI,CAAC9S,KAAK,CAAC0V,IAAI,CAAEsF,MAAM,CAAChb,KAAM,CAAC,CAE/B,IAAI,CAACoU,aAAa,CAAG4G,MAAM,CAAC5G,aAAa,CAEzC,IAAM,GAAI,CAAAhS,CAAC,CAAG,CAAC,CAAEyQ,EAAE,CAAGmI,MAAM,CAAC9H,aAAa,CAAC5Q,MAAM,CAAEF,CAAC,CAAGyQ,EAAE,CAAEzQ,CAAC,EAAG,CAE9D,IAAI,CAAC8Q,aAAa,CAAE9Q,CAAC,CAAE,CAAG4Y,MAAM,CAAC9H,aAAa,CAAE9Q,CAAC,CAAE,CAAC6G,KAAK,CAAC,CAAC,CAI5D,IAAM,GAAI,CAAA7G,IAAC,CAAG,CAAC,CAAEyQ,KAAE,CAAGmI,MAAM,CAAC1a,YAAY,CAACgC,MAAM,CAAEF,IAAC,CAAGyQ,KAAE,CAAEzQ,IAAC,EAAG,CAE7D,IAAI,CAAC9B,YAAY,CAAE8B,IAAC,CAAE,CAAG4Y,MAAM,CAAC1a,YAAY,CAAE8B,IAAC,CAAE,CAAC6G,KAAK,CAAC,CAAC,CAI1D,MAAO,KAER,CAED;;;;;;;AClnEA;;;;;;ACAA,iCAAiC;;;;;;ACCjC;AACA;AACA,GACAlK,yBAAyB,CAAG,UAAW,CACnC,MAAO,UAASoe,MAAM,CAAE,CACpBA,MAAM,CAACC,YAAY,CAAGD,MAAM,CAACC,YAAY,CAACC,OAAO,CAC7C,8BAA8B,CAC9B,CACC,sBAAsB,CACnB,6BAA6B,CAC7B,6BAA6B,CAChC,CAACC,IAAI,CAAE,IAAK,CACjB,CAAC,CACDH,MAAM,CAACC,YAAY,CAAGD,MAAM,CAACC,YAAY,CAACC,OAAO,CAC7C,yBAAyB,CACzB,CACI,yBAAyB,CACzB,yBAAyB,CACzB,oDAAoD,CACpD,qDAAqD,CACrD,QAAQ,CACX,CAACC,IAAI,CAAE,IAAK,CACjB,CACJ,CACJ,CAAC;;;;;;GCzBK,CAAAze,KAAK,CAAG5B,mBAAO,CAAC,CAAO,CAAC,CACxByR,oBAAoB,CAAGzR,6CAA4C,CACnEqH,UAAU,CAAGrH,mCAAkC,CAEjDsgB,SAAS,CAAG,CAAC,CAEXC,WAAW,CAAG,QAAAA,CAAA,CAAY,CAC9B,MAAO,IAAI,CAAGD,SAAS,EACzB,CAAC,CAUKrc,UAAU,CAAG,QAAAA,CAAA,CAAW,CAG5B;AAIA;AACF;AACA,IAFE,CASD;AACD;AACA;AACA;AACA,IAJC,CA0BC;AACA;AAEA;AA5CA,IAAI,CAACuc,YAAY,GAAO,CACxB,IAAI,CAACpe,QAAQ,OAAY,CAEzB,IAAI,CAACiC,KAAK,OAAY,CACtB,IAAI,CAACmP,KAAK,CAAG,GAAI,CAAA5R,KAAK,CAAC6e,KAAO,CAC9B,IAAI,CAACza,IAAI,CAAG,IAAKhG,6BAAoB,EAAE,IAAI,CAAC,CAI5C,IAAI,CAACqT,SAAS,OAAY,CAC1B,IAAI,CAACsN,WAAW,GAAQ,CACxB,IAAI,CAACC,WAAW,GAAQ,CACxB,IAAI,CAACC,WAAW,CAAG,CAAC,CACpB,IAAI,CAACC,KAAK,OAAY,CACtB,IAAI,CAACC,cAAc,OAAY,CAM/B,IAAI,CAACC,QAAQ,CAAG,GAAI,CACpB,IAAI,CAACC,UAAU,OAAY,CAC3B,IAAI,CAACC,QAAQ,CAAG,CAAC,CAAC,CAClB,IAAI,CAACnd,YAAY,OAAY,CAC7B,IAAI,CAACod,MAAM,OAAY,CACvB,IAAI,CAACC,YAAY,OAAY,CAC7B,IAAI,CAACC,oBAAoB,GAAO,CAChC,IAAI,CAACC,kBAAkB,CAAG,CAAC,CAAC,CAC5B,IAAI,CAACxa,yBAAyB,GAAO,CACrC,IAAI,CAACya,iBAAiB,CAAG,GAAI,CAAA3f,KAAK,CAACiS,IAAM,CACzC,IAAI,CAAC2N,YAAY,OAAY,CAC7B,IAAI,CAACjO,MAAM,OAAY,CACvB,IAAI,CAACkO,aAAa,OAAY,CAC9B,IAAI,CAACC,UAAU,CAAG,WAAW,CAC7B,IAAI,CAACjN,IAAI,CAAG8L,WAAW,CAAC,CAAC,CACzB,IAAI,CAACoB,GAAG,CAAG,GAAI,CAAA/f,KAAK,CAACwS,OAAS,CAC9B,IAAI,CAACwN,GAAG,CAAG,GAAI,CAAAhgB,KAAK,CAACwS,OAAS,CAC9B,IAAI,CAACyN,GAAG,CAAG,GAAI,CAAAjgB,KAAK,CAACiS,IAAM,CAC3B,IAAI,CAACZ,MAAM,CAAG,GAAI,CAAArR,KAAK,CAACwS,OAAS,CACjC,IAAI,CAAC0D,MAAM,CAAG,CAAC,CACf,IAAI,CAACgK,OAAO,GAAO,CAGnB,IAAI,CAACC,SAAS,CAAG,CAAC,CAAC,CAEnB,IAAI,CAACC,UAAU,OAAY,CAC3B,IAAI,CAACC,gBAAgB,GAAQ,CAC7B,IAAI,CAACC,UAAU,GACjB,CAAC,CAzDD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAPA,CA2DA;AACA;AACA;AACA;AACA,GAJA,CAYA;AACA;AACA;AACA;AACA,GAJA,CASA;AACA;AACA;AACA;AACA,GAJA,CASA;AACA;AACA;AACA;AACA,GAJA,CASA;AACA;AACA;AACA;AACA,GAJA,CAUA;AACA;AACA;AACA;AACA,GAJA,CASA;AACA;AACA,GAFA,CAYA;AACA;AACA;AACA,GAHA,CAQA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GARA,CAsDA;AACA;AACA;AACA;AACA,GAJA,CAYA;AACA;AACA;AACA;AACA,GAJA,CASA;AACA;AACA;AACA;AACA,GAJA,CAUA;AACA;AACA;AACA;AACA;AACA,GALA,CAeA;AACA;AACA;AACA;AACA,GAJA,CAuCA;AACA;AACA;AACA;AACA,GAJA,CAWA;AACA;AACA;AACA,GAHA,CAQA;AACA;AACA;AACA;AACA,GAJA,CAaA;AACA;AACA;AACA;AACA;AACA;AACA,GANA,CAiBA;AACA;AACA;AACA;AACA;AACA;AACA,GANA,CAYA;AACA;AACA;AACA;AACA;AACA,GALA,CAYA;AACA;AACA;AACA;AACA,GAJA,CAWA;AACA;AACA;AACA;AACA,GAJA,CASA;AACA;AACA;AACA;AACA,GAJA,CA2BA;AACA;AACA;AACA;AACA,GAJA,CAaA;AACA;AACA;AACA;AACA,GAJA,CAYA;AACA;AACA;AACA;AACA,GAJA,CAeA;AACA;AACA;AACA;AACA,GAJA,CASA;AACA;AACA;AACA;AACA,GAJA,CA8BA;AACA;AACA;AACA;AACA,GAJA,CAsCA;AACA;AACA;AACA;AACA,GAJA,CAsBA;AACA;AACA,GAFA,CAcA;AACA;AACA;AACA;AACA;AACA,GALA,CAeA;AACA;AACA,GAFA,CAyEA;AACA;AACA;AACA;AACA,GAJA,CAqBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAXA,CA6BA;AA4BA;AACA;AACA,GAFA,CAOA;AACA;AACA,GAFA,CA2BA;AACA;AACA,GAFA,CAiBA;AACA;AACA,GAhsBAje,UAAU,CAAC8C,SAAS,CAACob,WAAW,CAAG,SAASC,UAAU,CAAE,CACtD,IAAI,CAACpB,QAAQ,CAAGoB,UAAU,CACtB,IAAI,CAACnB,UAAU,EACjB,IAAI,CAACA,UAAU,CAACkB,WAAW,CAAC,IAAI,CAACnB,QAAQ,CAE7C,CAAC,CAOD/c,UAAU,CAAC8C,SAAS,CAACsb,WAAW,CAAG,UAAW,CAC5C,MAAO,KAAI,CA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UA;AACF;AACA,KAFE,CAiBA;AACF;AACA;AACA;AACA,KAJE,CAwBA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAXE,CAgDC;AACH;AACA;AACA;AACA;AACA,KALG,CAiBD;AACF;AACA;AACA;AACA,KAJE,CA6BA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAVE,CAiBA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAXE,CAkBA;AACF;AACA;AACA;AACA,KAJE,CAYA;AACF;AACA,KAFE,CAOA;AACF;AACA;AACA,KAHE,CAUA;AACF;AACA,KAFE,CAQA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAVE,CAeA;AACF;AACA,KAFE,CAOA;AACF;AACA,KAFE,CAQA;AACF;AACA,KAFE,CAQA;AACF;AACA;AACA;AACA,KAJE,CASA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KARE,CAcA;AACF;AACA,KAFE,CAQA;AACF;AACA;AACA;AACA,KAJE,CASA;AACF;AACA,KAFE,CAYA;AACF;AACA,KAtaC,IAAI,CAAC9wD,MAAM,CAAGJ,WAAW,EAAI,IACtB,CAAAmE,KAAK,CAAGnE,WAAW,CAAGumB,QAAQ,CAChC6qC,cAAc,CAAG34D,OAAO,CACxB44D,OAAO,GAAO,CAwDlB,MAvDI,CAAA1I,WAAW,GAAKvD,IAAI,CAACG,IAAI,CAC5BqL,UAAU,CAACzsD,KAAK,CAAC,CACPwkD,WAAW,GAAKvD,IAAI,CAACI,wBAAwB,EAAIoD,4BAA4B,EACvFA,4BAA4B,CAACxoD,MAAM,CAAC+D,KAAK,CAAC,CACtCykD,4BAA4B,CAAC0I,qBAAqB,CAAC,CAAC,GACvD,MAAA1I,4BAAyC,CACzCD,WAAW,CAAGvD,IAAI,CAACE,OAAO,EAE3B8L,cAAc,GAAQ,EACZzI,WAAW,GAAKvD,IAAI,CAACmM,wBAAwB,EAAI1I,4BAA4B,EACvFA,4BAA4B,CAACzoD,MAAM,CAAC+D,KAAK,CA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ACF;AACA,KAFE,CAQA;AACF;AACA,KAFE,CAQA;AACF;AACA;AACA;AACA;AACA,KALE,CAaA;AACF;AACA;AACA;AACA,KAJE,CASA;AACF;AACA;AACA;AACA;AACA,KALE,CAUA;AACF;AACA;AACA;AACA;AACA;AACA,KANE,CAaA;AACF;AACA;AACA;AACA;AACA,KALE,CAYA;AACF;AACA;AACA;AACA,KAJE,CASA;AACF;AACA;AACA;AACA,KAJE,CASA;AACF;AACA;AACA;AACA,KAJE,CAoBA;AACF;AACA;AACA;AACA,KAJE,CAiBA;AACF;AACA;AACA;AACA;AACA,KALE,CAcA;AACF;AACA;AACA;AACA;AACA,KALE,CAiBA;AACF;AACA;AACA;AACA;AACA;AACA,KANE,CAyBA;AACF;AACA;AACA;AACA;AACA;AACA;AACA,KAPE,CAaA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KARE,CA0BA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KARE,CAeA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KARE,CAiBA;AACF;AACA;AACA;AACA;AACA;AACA,KANE,CAoBA;AACF;AACA;AACA;AACA;AACA,KALE,CAqBA;AACF;AACA;AACA;AACA;AACA;AACA;AACA,KAPE,CAoBA;AACF;AACA,KAFE,CAwBA;AACF;AACA;AACA;AACA;AACA,KALE,CAYA;AACF;AACA;AACA,KAHE,CAQA;AACF;AACA;AACA;AACA;AACA;AACA,KANE,CAkCA;AACF;AACA;AACA;AACA;AACA,KALE,CAkBA;AACF;AACA;AACA;AACA;AACA;AACA;AACA,KAPE,CAwBA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KARE,CAmBA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KARE,CAmBA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KARE,CAmBA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IARE,CAmCA;AACF;AACA;AACA;AACA;AACA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","sources":["webpack://Zinc/webpack/universalModuleDefinition","webpack://Zinc/./src/zinc.js","webpack://Zinc/external commonjs \"url-polyfill\"","webpack://Zinc/./src/primitives/geometry.js","webpack://Zinc/external commonjs \"three\"","webpack://Zinc/./src/utilities.js","webpack://Zinc/./src/three/Geometry.js","webpack://Zinc/external commonjs \"three-spritetext\"","webpack://Zinc/./src/assets/disc.png","webpack://Zinc/./src/primitives/augmentShader.js","webpack://Zinc/./src/primitives/zincObject.js","webpack://Zinc/./src/primitives/lod.js","webpack://Zinc/./src/three/line/LineSegments.js","webpack://Zinc/./src/three/line/Line.js","webpack://Zinc/./src/primitives/marker.js","webpack://Zinc/./src/assets/mapMarker.svg","webpack://Zinc/./src/primitives/glyph.js","webpack://Zinc/./src/primitives/label.js","webpack://Zinc/./src/primitives/glyphset.js","webpack://Zinc/./src/loaders/JSONLoader.js","webpack://Zinc/./src/three/Loader.js","webpack://Zinc/./src/videoHandler.js","webpack://Zinc/./src/primitives/pointset.js","webpack://Zinc/./src/three/Points.js","webpack://Zinc/./src/primitives/lines.js","webpack://Zinc/./src/texture/textureArray.js","webpack://Zinc/./src/texture/texture.js","webpack://Zinc/./src/primitives/textureSlides.js","webpack://Zinc/./src/shaders/textureSlide.js","webpack://Zinc/./src/primitives/texturePrimitive.js","webpack://Zinc/./src/renderer.js","webpack://Zinc/external commonjs \"css-element-queries/src/ResizeSensor\"","webpack://Zinc/./src/scene.js","webpack://Zinc/./src/primitives/markerCluster.js","webpack://Zinc/./src/assets/mapMarkerOrange.svg","webpack://Zinc/./src/sceneLoader.js","webpack://Zinc/./src/loaders/STLLoader.js","webpack://Zinc/./src/loaders/OBJLoader.js","webpack://Zinc/./src/loaders/primitivesLoader.js","webpack://Zinc/./src/primitives/tubeLines.js","webpack://Zinc/./src/loaders/GLTFToZincJSLoader.js","webpack://Zinc/external commonjs \"three/examples/jsm/loaders/GLTFLoader\"","webpack://Zinc/./src/sceneExporter.js","webpack://Zinc/./src/three/GLTFExporter.js","webpack://Zinc/./src/controls.js","webpack://Zinc/./src/region.js","webpack://Zinc/./src/primitives/lines2.js","webpack://Zinc/./src/three/line/LineSegments2.js","webpack://Zinc/./src/three/line/LineSegmentsGeometry.js","webpack://Zinc/./src/three/line/LineMaterial.js","webpack://Zinc/./src/minimap.js","webpack://Zinc/./src/geometryCSG.js","webpack://Zinc/./src/three-js-csg.js","webpack://Zinc/external commonjs \"webworkify-webpack\"","webpack://Zinc/external commonjs \"promise-polyfill\"","webpack://Zinc/./src/workers/geometryCSG.worker.js","webpack://Zinc/./src/workers/geometryCSGInternal.js","webpack://Zinc/./src/glyphsetCSG.js","webpack://Zinc/webpack/bootstrap","webpack://Zinc/webpack/runtime/compat get default export","webpack://Zinc/webpack/runtime/define property getters","webpack://Zinc/webpack/runtime/hasOwnProperty shorthand","webpack://Zinc/webpack/runtime/make namespace object","webpack://Zinc/webpack/before-startup","webpack://Zinc/webpack/startup","webpack://Zinc/webpack/after-startup"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"Zinc\"] = factory();\n\telse\n\t\troot[\"Zinc\"] = factory();\n})(this, () => {\nreturn ","require(\"url-polyfill\");\nconst PACKAGE = require('../package.json');\nconst version = PACKAGE.version;\n\n/**\n * Provides a global namespace for the Zinc javascript library and some default parameters for it.\n * \n * @namespace\n * @author Alan Wu\n */\n\nconst Zinc = function() {\n this.Revision = version;\n this.defaultMaterialColor = 0xFFFFFF;\n this.defaultOpacity = 1.0;\n this.modelPrefix = undefined;\n this.Geometry = require('./primitives/geometry').Geometry;\n this.Glyph = require('./primitives/glyph').Glyph;\n this.Glyphset = require('./primitives/glyphset').Glyphset;\n this.Pointset = require('./primitives/pointset').Pointset;\n this.Label = require('./primitives/label').Label;\n this.Lines = require('./primitives/lines').Lines;\n this.TextureArray = require('./texture/textureArray').TextureArray;\n this.TextureSlides = require('./primitives/textureSlides').TextureSlides;\n this.Renderer = require('./renderer').Renderer;\n this.Scene = require('./scene').Scene;\n this.GeometryCSG = require('./geometryCSG').GeometryCSG;\n this.GlyphsetCSG = require('./glyphsetCSG').GlyphsetCSG;\n this.Viewport = require('./controls').Viewport;\n this.CameraControls = require('./controls').CameraControls;\n this.SmoothCameraTransition = require('./controls').SmoothCameraTransition;\n this.RayCaster = require('./controls').RayCaster;\n this.CameraAutoTumble = require('./controls').CameraAutoTumble;\n this.StereoEffect = require('./controls').StereoEffect;\n this.loadExternalFile = require('./utilities').loadExternalFile;\n this.loadExternalFiles = require('./utilities').loadExternalFiles;\n this.THREE = require('three'); \n \n};\n\nmodule.exports = new Zinc();\n","module.exports = require(\"url-polyfill\");","const THREE = require('three');\nconst toBufferGeometry = require('../utilities').toBufferGeometry;\n\nconst createMeshForGeometry = (geometryIn, materialIn, options) => {\n // First copy the geometry\n let geometry = toBufferGeometry(geometryIn, options);\n\n let isTransparent = false;\n if (1.0 > options.opacity)\n isTransparent = true;\n\n let material = undefined;\n if (geometry._video === undefined) {\n const morphTargets = options.localTimeEnabled || options.localMorphColour;\n if (materialIn) {\n material = materialIn;\n material.morphTargets = morphTargets;\n material.morphNormals = options.localTimeEnabled;\n } else {\n if (geometry instanceof THREE.BufferGeometry && geometry.attributes.color === undefined) {\n material = new THREE.MeshPhongMaterial({\n color : options.colour,\n morphTargets : morphTargets,\n morphNormals : options.localTimeEnabled,\n transparent : isTransparent,\n opacity : options.opacity,\n side : THREE.DoubleSide\n });\n } else {\n material = new THREE.MeshPhongMaterial({\n color : options.colour,\n morphTargets : morphTargets,\n morphNormals : options.localTimeEnabled,\n vertexColors : THREE.VertexColors,\n transparent : isTransparent,\n opacity : options.opacity,\n side : THREE.DoubleSide\n });\n }\n }\n //material = PhongToToon(material);\n if (options.localMorphColour && geometry.morphAttributes[ \"color\" ]) {\n material.onBeforeCompile = (require(\"./augmentShader\").augmentMorphColor)();\n }\n } else {\n let videoTexture = geometry._video.createCanvasVideoTexture();\n material = new THREE.MeshBasicMaterial({\n morphTargets : options.localTimeEnabled,\n color : new THREE.Color(1, 1, 1),\n transparent : isTransparent,\n opacity : options.opacity,\n map : videoTexture,\n side : THREE.DoubleSide\n });\n this.videoHandler = geometry._video;\n }\n return new THREE.Mesh(geometry, material); \n}\n\n/**\n * Provides an object which stores geometry and provides method which controls its animations.\n * This is created when a valid json file containging geometry is read into a {@link Zinc.Scene}\n * object.\n * \n * @class\n * @author Alan Wu\n * @return {Geometry}\n */\nconst Geometry = function () {\n (require('./zincObject').ZincObject).call(this);\n\t// THREE.Geometry or THREE.BufferGeometry\n\tthis.videoHandler = undefined;\n this.isGeometry = true;\n\n /**\n * Create the mesh for rendering\n * \n * @param {THREE.Geomtry} geometryIn - Geometry to be rendered.\n * @param {THREE.Material} materialIn - Material to be set for the geometry.\n * @param {Object} options - Provide various options\n * @param {THREE.Color} options.colour - colour to be set for the geometry\n * @param {Boolean} options.localTimeEnabled - A flag to indicate either the geometry is\n * time dependent.\n * @param {Boolean} options.localMorphColour - A flag to indicate either the colour is\n * time dependent.\n * @param {Number} options.opacity - Opacity to be set for the geometry\n */\n\tthis.createMesh = (geometryIn, materialIn, options) => {\n //Skip if there is a morph already\n\t\tif (this.morph && this.morph.geometry && (geometryIn != undefined))\n\t\t\treturn;\n\t\tconst mesh = createMeshForGeometry(geometryIn, materialIn, options); \n\t\tthis.setMesh(mesh, options.localTimeEnabled, options.localMorphColour);\n\t}\n\n /**\n * Calculate the UV for texture rendering.\n */\n\tthis.calculateUVs = () => {\n //Multilayers\n\t\tthis.geometry.computeBoundingBox();\n\t\tconst max = this.geometry.boundingBox.max, min = this.geometry.boundingBox.min;\n\t\tconst offset = new THREE.Vector2(0 - min.x, 0 - min.y);\n\t\tconst range = new THREE.Vector2(max.x - min.x, max.y - min.y);\n\t\tthis.geometry.faceVertexUvs[0] = [];\n\t\tfor (let i = 0; i < this.geometry.faces.length ; i++) {\n\t\t const v1 = this.geometry.vertices[this.geometry.faces[i].a];\n\t\t const v2 = this.geometry.vertices[this.geometry.faces[i].b];\n\t\t const v3 = this.geometry.vertices[this.geometry.faces[i].c];\n\t\t geometry.faceVertexUvs[0].push(\n\t\t [\n\t\t new THREE.Vector2((v1.x + offset.x)/range.x ,(v1.y + offset.y)/range.y),\n\t\t new THREE.Vector2((v2.x + offset.x)/range.x ,(v2.y + offset.y)/range.y),\n\t\t new THREE.Vector2((v3.x + offset.x)/range.x ,(v3.y + offset.y)/range.y)\n\t\t ]);\n\t\t}\n\t\tgeometry.uvsNeedUpdate = true;\t\n\t}\n\n /**\n * Handle transparent mesh, create a clone for backside rendering if it is\n * transparent.\n */\n this.checkTransparentMesh = function() {\n this._lod.checkTransparentMesh();\n }\n\t\n\t/**\n\t * Set wireframe display for this geometry.\n\t * \n\t * @param {Boolean} wireframe - Flag to turn on/off wireframe display.\n\t */\n\tthis.setWireframe = wireframe => {\n\t\tthis.morph.material.wireframe = wireframe;\n\t}\n\n /**\n * Edit Vertice in index.\n */\n this.editVertices = function(coords, i) {\n if (coords && coords.length) {\n let mesh = this.getMorph();\n const attribute = mesh.geometry.getAttribute(\"position\");\n if (!mesh || 0 > i) {\n return;\n } else {\n let index = i * 3;\n coords.forEach(coord => {\n attribute.array[index++] = coord[0];\n attribute.array[index++] = coord[1];\n attribute.array[index++] = coord[2];\n });\n attribute.needsUpdate = true;\n mesh.geometry.computeBoundingBox();\n mesh.geometry.computeBoundingSphere();\n this.boundingBoxUpdateRequired = true;\n }\n }\n }\n\t\n\n}\n\nGeometry.prototype = Object.create((require('./zincObject').ZincObject).prototype);\nexports.Geometry = Geometry;\n","module.exports = require(\"three\");","const THREE = require('three');\nconst THREEGeometry = require('./three/Geometry').Geometry;\nconst SpriteText = require('three-spritetext').default;\n\nfunction resolveURL(url) {\n\tlet actualURL = url;\n\tconst prefix = (require(\"./zinc\").modelPrefix);\n\t\n\tif (prefix) {\n\t\tif (prefix[prefix.length -1] != '/')\n\t\t\tprefix = prefix + '/';\n\t\tconst r = new RegExp('^(?:[a-z]+:)?//', 'i');\n\t\tif (!r.test(url)) {\n\t\t\tactualURL = prefix + url;\n\t\t}\n\t}\n\t\n\treturn actualURL;\n}\n\nfunction createNewURL(target, reference) {\n const getNewURL = (target, reference) => {\n try {\n let newURL = (new URL(target, reference)).href;\n //Make sure the target url does not contain parameters\n if (target && target.split(\"?\").length < 2) {\n const paramsStrings = reference.split(\"?\");\n //There are parameters, add them to the target\n if (paramsStrings.length === 2) {\n newURL = newURL + \"?\" + paramsStrings[1];\n }\n }\n return newURL;\n } catch {\n console.error(`There is an issue creating the url link with: ${target}.` );\n }\n }\n if (!Array.isArray(target)) {\n return getNewURL(target, reference);\n } else {\n const urls = [];\n target.forEach((url) => {\n urls.push(getNewURL(url, reference));\n });\n return urls;\n }\n}\n\n/*\n * Calculate the bounding box of a mesh, values will be\n * set for cachedBox, b1, v1 and v2 and they need to be\n * defined. \n */\nfunction getBoundingBox(mesh, cachedBox, b1, v1, v2) {\n let influences = mesh.morphTargetInfluences;\n let attributes = undefined;\n if (mesh.geometry)\n attributes = mesh.geometry.morphAttributes;\n let found = false;\n if (influences && attributes && attributes.position) {\n v1.set(0.0, 0.0, 0.0);\n v2.set(0.0, 0.0, 0.0);\n for (let i = 0; i < influences.length; i++) {\n if (influences[i] > 0) {\n found = true;\n b1.setFromArray(attributes.position[i].array);\n v1.add(b1.min.multiplyScalar(influences[i]));\n v2.add(b1.max.multiplyScalar(influences[i]));\n }\n }\n if (found) {\n cachedBox.set(v1, v2);\n }\n }\n if (!found) {\n cachedBox.setFromBufferAttribute(\n mesh.geometry.attributes.position);\n }\n mesh.updateWorldMatrix(true, true);\n cachedBox.applyMatrix4(mesh.matrixWorld);\n}\n\n\n//Convenient function\nfunction loadExternalFile(url, data, callback, errorCallback) {\n // Set up an asynchronous request\n const request = new XMLHttpRequest();\n request.open('GET', resolveURL(url), true);\n\n // Hook the event that gets called as the request progresses\n request.onreadystatechange = () => {\n // If the request is \"DONE\" (completed or failed)\n if (request.readyState == 4) {\n // If we got HTTP status 200 (OK)\n if (request.status == 200) {\n callback(request.responseText, data)\n } else { // Failed\n errorCallback(url);\n }\n }\n };\n\n request.send(null); \n}\n\nfunction loadExternalFiles(urls, callback, errorCallback) {\n const numUrls = urls.length;\n let numComplete = 0;\n const result = [];\n\n // Callback for a single file\n function partialCallback(text, urlIndex) {\n result[urlIndex] = text;\n numComplete++;\n\n // When all files have downloaded\n if (numComplete == numUrls) {\n callback(result);\n }\n }\n\n for (let i = 0; i < numUrls; i++) {\n \tloadExternalFile(urls[i], i, partialCallback, errorCallback);\n }\n}\n\n\n//Get the colours at index\nexports.getColorsRGB = (colors, index) => {\n const index_in_colors = Math.floor(index/3);\n const remainder = index%3;\n let hex_value = 0;\n if (remainder == 0)\n {\n hex_value = colors[index_in_colors].r;\n }\n else if (remainder == 1)\n {\n hex_value = colors[index_in_colors].g;\n }\n else if (remainder == 2)\n {\n hex_value = colors[index_in_colors].b;\n }\n const mycolor = new THREE.Color(hex_value);\n return [mycolor.r, mycolor.g, mycolor.b];\n}\n\nexports.updateMorphColorAttribute = function(targetGeometry, morph) {\n if (morph && targetGeometry && targetGeometry.morphAttributes &&\n targetGeometry.morphAttributes[ \"color\" ]) {\n const morphColors = targetGeometry.morphAttributes[ \"color\" ];\n const influences = morph.morphTargetInfluences;\n const length = influences.length;\n targetGeometry.deleteAttribute( 'morphColor0' );\n targetGeometry.deleteAttribute( 'morphColor1' );\n let bound = 0;\n let morphArray = [];\n for (let i = 0; (1 > bound) || (i < length); i++) {\n if (influences[i] > 0) {\n bound++;\n morphArray.push([i, influences[i]]);\n }\n }\n if (morphArray.length == 2) {\n targetGeometry.setAttribute('morphColor0', morphColors[ morphArray[0][0] ] );\n targetGeometry.setAttribute('morphColor1', morphColors[ morphArray[1][0] ] );\n } else if (morphArray.length == 1) {\n targetGeometry.setAttribute('morphColor0', morphColors[ morphArray[0][0] ] );\n targetGeometry.setAttribute('morphColor1', morphColors[ morphArray[0][0] ] );\n }\n }\n}\n\n\nexports.toBufferGeometry = (geometryIn, options) => {\n let geometry = undefined;\n if (geometryIn instanceof THREEGeometry) {\n if (options.localTimeEnabled && !geometryIn.morphNormalsReady && \n (geometryIn.morphNormals == undefined || geometryIn.morphNormals.length == 0))\n geometryIn.computeMorphNormals();\n geometry = geometryIn.toIndexedBufferGeometry();\n if (options.localMorphColour) {\n copyMorphColorsToIndexedBufferGeometry(geometryIn, geometry);\n }\n } else if (geometryIn instanceof THREE.BufferGeometry) {\n geometry = geometryIn.clone();\n }\n geometry.colorsNeedUpdate = true;\n geometry.computeBoundingBox();\n geometry.computeBoundingSphere();\n if (geometryIn._video)\n geometry._video = geometryIn._video;\n return geometry;\n}\n\nexports.copyMorphColorsToBufferGeometry = (geometry, bufferGeometry) => {\n if (geometry && geometry.morphColors && geometry.morphColors.length > 0 ) {\n let array = [];\n let morphColors = geometry.morphColors;\n const getColorsRGB = require(\"./utilities\").getColorsRGB;\n for ( var i = 0, l = morphColors.length; i < l; i ++ ) {\n let morphColor = morphColors[ i ];\n let colorArray = [];\n for ( var j = 0; j < geometry.faces.length; j ++ ) {\n let face = geometry.faces[j];\n let color = getColorsRGB(morphColor.colors, face.a);\n colorArray.push(color[0], color[1], color[2]);\n color = getColorsRGB(morphColor.colors, face.b);\n colorArray.push(color[0], color[1], color[2]);\n color = getColorsRGB(morphColor.colors, face.c);\n colorArray.push(color[0], color[1], color[2]);\n }\n var attribute = new THREE.Float32BufferAttribute( geometry.faces.length * 3 * 3, 3 );\n attribute.name = morphColor.name;\n array.push( attribute.copyArray( colorArray ) );\n }\n bufferGeometry.morphAttributes[ \"color\" ] = array; \n }\n}\n\n\nconst copyMorphColorsToIndexedBufferGeometry = (geometry, bufferGeometry) => {\n if (geometry && geometry.morphColors && geometry.morphColors.length > 0 ) {\n let array = [];\n let morphColors = geometry.morphColors;\n const getColorsRGB = require(\"./utilities\").getColorsRGB;\n for ( let i = 0, l = morphColors.length; i < l; i ++ ) {\n const morphColor = morphColors[ i ];\n const colorArray = [];\n for ( let j = 0; j < morphColor.colors.length * 3; j ++ ) {\n let color = getColorsRGB(morphColor.colors, j);\n colorArray.push(color[0], color[1], color[2]);\n }\n const attribute = new THREE.Float32BufferAttribute( colorArray, 3 );\n attribute.name = morphColor.name;\n array.push( attribute );\n }\n bufferGeometry.morphAttributes[ \"color\" ] = array; \n }\n}\n\n/**\n * Merges a set of attributes into a single instance. All attributes must have compatible properties and types.\n * Instances of {@link InterleavedBufferAttribute} are not supported.\n *\n * @param {Array} attributes - The attributes to merge.\n * @return {?BufferAttribute} The merged attribute. Returns `null` if the merge does not succeed.\n */\nfunction mergeAttributes( attributes ) {\n\n let TypedArray;\n let itemSize;\n let normalized;\n let gpuType = - 1;\n let arrayLength = 0;\n\n for ( let i = 0; i < attributes.length; ++ i ) {\n\n const attribute = attributes[ i ];\n\n if ( TypedArray === undefined ) TypedArray = attribute.array.constructor;\n if ( TypedArray !== attribute.array.constructor ) {\n\n console.error( 'THREE.BufferGeometryUtils: .mergeAttributes() failed. BufferAttribute.array must be of consistent array types across matching attributes.' );\n return null;\n\n }\n\n if ( itemSize === undefined ) itemSize = attribute.itemSize;\n if ( itemSize !== attribute.itemSize ) {\n\n console.error( 'THREE.BufferGeometryUtils: .mergeAttributes() failed. BufferAttribute.itemSize must be consistent across matching attributes.' );\n return null;\n\n }\n\n if ( normalized === undefined ) normalized = attribute.normalized;\n if ( normalized !== attribute.normalized ) {\n\n console.error( 'THREE.BufferGeometryUtils: .mergeAttributes() failed. BufferAttribute.normalized must be consistent across matching attributes.' );\n return null;\n\n }\n\n if ( gpuType === - 1 ) gpuType = attribute.gpuType;\n if ( gpuType !== attribute.gpuType ) {\n\n console.error( 'THREE.BufferGeometryUtils: .mergeAttributes() failed. BufferAttribute.gpuType must be consistent across matching attributes.' );\n return null;\n\n }\n\n arrayLength += attribute.count * itemSize;\n\n }\n\n const array = new TypedArray( arrayLength );\n const result = new THREE.BufferAttribute( array, itemSize, normalized );\n let offset = 0;\n\n for ( let i = 0; i < attributes.length; ++ i ) {\n\n const attribute = attributes[ i ];\n if ( attribute.isInterleavedBufferAttribute ) {\n\n const tupleOffset = offset / itemSize;\n for ( let j = 0, l = attribute.count; j < l; j ++ ) {\n\n for ( let c = 0; c < itemSize; c ++ ) {\n\n const value = attribute.getComponent( j, c );\n result.setComponent( j + tupleOffset, c, value );\n\n }\n\n }\n\n } else {\n\n array.set( attribute.array, offset );\n\n }\n\n offset += attribute.count * itemSize;\n\n }\n\n if ( gpuType !== undefined ) {\n\n result.gpuType = gpuType;\n\n }\n\n return result;\n\n}\n\n/**\n * Merges a set of geometries into a single instance. All geometries must have compatible attributes.\n *\n * @param {Array} geometries - The geometries to merge.\n * @param {boolean} [useGroups=false] - Whether to use groups or not.\n * @return {?BufferGeometry} The merged geometry. Returns `null` if the merge does not succeed.\n */\nexports.mergeGeometries = ( geometries, useGroups = false ) => {\n\n const isIndexed = geometries[ 0 ].index !== null;\n\n const attributesUsed = new Set( Object.keys( geometries[ 0 ].attributes ) );\n const morphAttributesUsed = new Set( Object.keys( geometries[ 0 ].morphAttributes ) );\n\n const attributes = {};\n const morphAttributes = {};\n\n const morphTargetsRelative = geometries[ 0 ].morphTargetsRelative;\n\n const mergedGeometry = new THREE.BufferGeometry();\n\n let offset = 0;\n\n for ( let i = 0; i < geometries.length; ++ i ) {\n\n const geometry = geometries[ i ];\n let attributesCount = 0;\n\n // ensure that all geometries are indexed, or none\n\n if ( isIndexed !== ( geometry.index !== null ) ) {\n\n console.error( 'THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index ' + i + '. All geometries must have compatible attributes; make sure index attribute exists among all geometries, or in none of them.' );\n return null;\n\n }\n\n // gather attributes, exit early if they're different\n\n for ( const name in geometry.attributes ) {\n\n if ( ! attributesUsed.has( name ) ) {\n\n console.error( 'THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index ' + i + '. All geometries must have compatible attributes; make sure \"' + name + '\" attribute exists among all geometries, or in none of them.' );\n return null;\n\n }\n\n if ( attributes[ name ] === undefined ) attributes[ name ] = [];\n\n attributes[ name ].push( geometry.attributes[ name ] );\n\n attributesCount ++;\n\n }\n\n // ensure geometries have the same number of attributes\n\n if ( attributesCount !== attributesUsed.size ) {\n\n console.error( 'THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index ' + i + '. Make sure all geometries have the same number of attributes.' );\n return null;\n\n }\n\n // gather morph attributes, exit early if they're different\n\n if ( morphTargetsRelative !== geometry.morphTargetsRelative ) {\n\n console.error( 'THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index ' + i + '. .morphTargetsRelative must be consistent throughout all geometries.' );\n return null;\n\n }\n\n for ( const name in geometry.morphAttributes ) {\n\n if ( ! morphAttributesUsed.has( name ) ) {\n\n console.error( 'THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index ' + i + '. .morphAttributes must be consistent throughout all geometries.' );\n return null;\n\n }\n\n if ( morphAttributes[ name ] === undefined ) morphAttributes[ name ] = [];\n\n morphAttributes[ name ].push( geometry.morphAttributes[ name ] );\n\n }\n\n if ( useGroups ) {\n\n let count;\n\n if ( isIndexed ) {\n\n count = geometry.index.count;\n\n } else if ( geometry.attributes.position !== undefined ) {\n\n count = geometry.attributes.position.count;\n\n } else {\n\n console.error( 'THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index ' + i + '. The geometry must have either an index or a position attribute' );\n return null;\n\n }\n\n mergedGeometry.addGroup( offset, count, i );\n\n offset += count;\n\n }\n\n }\n\n // merge indices\n\n if ( isIndexed ) {\n\n let indexOffset = 0;\n const mergedIndex = [];\n\n for ( let i = 0; i < geometries.length; ++ i ) {\n\n const index = geometries[ i ].index;\n\n for ( let j = 0; j < index.count; ++ j ) {\n\n mergedIndex.push( index.getX( j ) + indexOffset );\n\n }\n\n indexOffset += geometries[ i ].attributes.position.count;\n\n }\n\n mergedGeometry.setIndex( mergedIndex );\n\n }\n\n // merge attributes\n\n for ( const name in attributes ) {\n\n const mergedAttribute = mergeAttributes( attributes[ name ] );\n\n if ( ! mergedAttribute ) {\n\n console.error( 'THREE.BufferGeometryUtils: .mergeGeometries() failed while trying to merge the ' + name + ' attribute.' );\n return null;\n\n }\n\n mergedGeometry.setAttribute( name, mergedAttribute );\n\n }\n\n // merge morph attributes\n\n for ( const name in morphAttributes ) {\n\n const numMorphTargets = morphAttributes[ name ][ 0 ].length;\n\n if ( numMorphTargets === 0 ) break;\n\n mergedGeometry.morphAttributes = mergedGeometry.morphAttributes || {};\n mergedGeometry.morphAttributes[ name ] = [];\n\n for ( let i = 0; i < numMorphTargets; ++ i ) {\n\n const morphAttributesToMerge = [];\n\n for ( let j = 0; j < morphAttributes[ name ].length; ++ j ) {\n\n morphAttributesToMerge.push( morphAttributes[ name ][ j ][ i ] );\n\n }\n\n const mergedMorphAttribute = mergeAttributes( morphAttributesToMerge );\n\n if ( ! mergedMorphAttribute ) {\n\n console.error( 'THREE.BufferGeometryUtils: .mergeGeometries() failed while trying to merge the ' + name + ' morphAttribute.' );\n return null;\n\n }\n\n mergedGeometry.morphAttributes[ name ].push( mergedMorphAttribute );\n\n }\n\n }\n\n return mergedGeometry;\n\n}\n\nexports.mergeVertices = ( geometry, tolerance = 1e-4 ) => {\n\n tolerance = Math.max( tolerance, Number.EPSILON );\n\n // Generate an index buffer if the geometry doesn't have one, or optimize it\n // if it's already available.\n var hashToIndex = {};\n var indices = geometry.getIndex();\n var positions = geometry.getAttribute( 'position' );\n var vertexCount = indices ? indices.count : positions.count;\n\n // next value for triangle indices\n var nextIndex = 0;\n\n // attributes and new attribute arrays\n var attributeNames = Object.keys( geometry.attributes );\n var attrArrays = {};\n var morphAttrsArrays = {};\n var newIndices = [];\n var getters = [ 'getX', 'getY', 'getZ', 'getW' ];\n\n // initialize the arrays\n for ( var i = 0, l = attributeNames.length; i < l; i ++ ) {\n var name = attributeNames[ i ];\n\n attrArrays[ name ] = [];\n\n var morphAttr = geometry.morphAttributes[ name ];\n if ( morphAttr ) {\n\n morphAttrsArrays[ name ] = new Array( morphAttr.length ).fill().map( () => [] );\n\n }\n\n }\n\n // convert the error tolerance to an amount of decimal places to truncate to\n var decimalShift = Math.log10( 1 / tolerance );\n var shiftMultiplier = Math.pow( 10, decimalShift );\n for ( var i = 0; i < vertexCount; i ++ ) {\n\n var index = indices ? indices.getX( i ) : i;\n\n // Generate a hash for the vertex attributes at the current index 'i'\n var hash = '';\n for ( var j = 0, l = attributeNames.length; j < l; j ++ ) {\n\n var name = attributeNames[ j ];\n var attribute = geometry.getAttribute( name );\n var itemSize = attribute.itemSize;\n\n for ( var k = 0; k < itemSize; k ++ ) {\n\n // double tilde truncates the decimal value\n hash += `${ ~ ~ ( attribute[ getters[ k ] ]( index ) * shiftMultiplier ) },`;\n\n }\n\n }\n\n // Add another reference to the vertex if it's already\n // used by another index\n if ( hash in hashToIndex ) {\n\n newIndices.push( hashToIndex[ hash ] );\n\n } else {\n\n // copy data to the new index in the attribute arrays\n for ( var j = 0, l = attributeNames.length; j < l; j ++ ) {\n\n var name = attributeNames[ j ];\n var attribute = geometry.getAttribute( name );\n var morphAttr = geometry.morphAttributes[ name ];\n var itemSize = attribute.itemSize;\n var newarray = attrArrays[ name ];\n var newMorphArrays = morphAttrsArrays[ name ];\n\n for ( var k = 0; k < itemSize; k ++ ) {\n\n var getterFunc = getters[ k ];\n newarray.push( attribute[ getterFunc ]( index ) );\n\n if ( morphAttr ) {\n\n for ( var m = 0, ml = morphAttr.length; m < ml; m ++ ) {\n\n newMorphArrays[ m ].push( morphAttr[ m ][ getterFunc ]( index ) );\n\n }\n\n }\n\n }\n\n }\n\n hashToIndex[ hash ] = nextIndex;\n newIndices.push( nextIndex );\n nextIndex ++;\n\n }\n\n }\n\n // Generate typed arrays from new attribute arrays and update\n // the attributeBuffers\n const result = geometry.clone();\n for ( var i = 0, l = attributeNames.length; i < l; i ++ ) {\n\n var name = attributeNames[ i ];\n var oldAttribute = geometry.getAttribute( name );\n var attribute;\n\n var buffer = new oldAttribute.array.constructor( attrArrays[ name ] );\n if ( oldAttribute.isInterleavedBufferAttribute ) {\n\n attribute = new THREE.BufferAttribute( buffer, oldAttribute.itemSize, oldAttribute.itemSize );\n\n } else {\n\n attribute = geometry.getAttribute( name ).clone();\n attribute.setArray( buffer );\n\n }\n\n result.setAttribute( name, attribute );\n\n // Update the attribute arrays\n if ( name in morphAttrsArrays ) {\n\n for ( var j = 0; j < morphAttrsArrays[ name ].length; j ++ ) {\n\n var morphAttribute = geometry.morphAttributes[ name ][ j ].clone();\n morphAttribute.setArray( new morphAttribute.array.constructor( morphAttrsArrays[ name ][ j ] ) );\n result.morphAttributes[ name ][ j ] = morphAttribute;\n\n }\n\n }\n\n }\n\n // Generate an index buffer typed array\n var cons = Uint8Array;\n if ( newIndices.length >= Math.pow( 2, 8 ) ) cons = Uint16Array;\n if ( newIndices.length >= Math.pow( 2, 16 ) ) cons = Uint32Array;\n\n var newIndexBuffer = new cons( newIndices );\n var newIndices = null;\n if ( indices === null ) {\n\n newIndices = new THREE.BufferAttribute( newIndexBuffer, 1 );\n\n } else {\n\n newIndices = geometry.getIndex().clone();\n newIndices.setArray( newIndexBuffer );\n\n }\n\n result.setIndex( newIndices );\n\n return result;\n}\n\nfunction PhongToToon(materialIn) {\n\tif (materialIn.isMeshPhongMaterial) {\n\t\tlet material = new THREE.MeshToonMaterial({\n\t\t\tcolor : materialIn.color.clone(),\n\t\t\tmorphTargets : materialIn.morphTargets,\n\t\t\tmorphNormals : materialIn.morphNormals,\n\t\t\tvertexColors : materialIn.vertexColors,\n\t\t\ttransparent : materialIn.transparent,\n\t\t\topacity : materialIn.opacity,\n\t\t\tside : materialIn.side\n\t\t});\n\t\tif (materialIn.map)\n\t\t\tmaterial.map = materialIn.map;\n\t\treturn material;\n\t}\n\n\treturn materialIn;\n}\n\n/**\n * Create and return a new buffer geometry with the size of length,\n * and initial coords.\n */\nfunction createBufferGeometry(length, coords) {\n if (coords && (length >= coords.length)) {\n const geometry = new THREE.BufferGeometry()\n const vertices = new Float32Array(length * 3);\n let i = 0;\n coords.forEach(coord => {\n vertices[i++] = coord[0];\n vertices[i++] = coord[1];\n vertices[i++] = coord[2];\n });\n geometry.setAttribute( 'position', new THREE.BufferAttribute( vertices, 3 ) );\n geometry.setDrawRange(0, coords.length);\n return geometry;\n }\n return undefined;\n};\n\nfunction getCircularTexture() {\n const image = new Image();\n image.src = require(\"./assets/disc.png\");\n const texture = new THREE.Texture();\n texture.image = image;\n texture.needsUpdate = true;\n return texture;\n}\n\nfunction createNewSpriteText(text, height, colour, font, pixel, weight) {\n const sprite = new SpriteText(text, height, colour, font, pixel, weight);\n sprite.fontFace = font;\n sprite.fontSize = pixel;\n sprite.fontWeight = weight;\n sprite.material.map.generateMipmaps = false;\n sprite.material.map.anisotropy = 4;\n sprite.material.sizeAttenuation = false;\n sprite.material.alphaTest = 0.5;\n sprite.material.transparent = true;\n sprite.material.depthWrite = false;\n sprite.material.depthTest = false;\n sprite.center.set(0.5, -1.2);\n sprite.renderOrder = 10000;\n return sprite;\n}\n\n/*\n * Check if the compare path match with the region or/and group.\n * comparePath should be in the form of regionPath/Group.\n * * can be used as wildcard.\n * comparePath will be used to compare both region and group if it\n * is a single string without /\n */\nfunction isRegionGroup(regionPath, groupName, comparePath) {\n if (comparePath) {\n const region = regionPath ? regionPath : \"\";\n const group = groupName ? groupName : \"\";\n const n = comparePath.lastIndexOf('/');\n if (n > -1) {\n let r = undefined;\n let g = undefined;\n r = comparePath.substring(0, n);\n g = comparePath.substring(n + 1);\n if (r === \"*\" || r === \"**\" || r.toLowerCase() === region.toLowerCase()) {\n if (g === \"*\" || g === \"**\" || g.toLowerCase() === group.toLowerCase()) {\n return true;\n }\n }\n } else {\n //one single value if one of the region / group matches\n if (region.toLowerCase() === comparePath.toLowerCase() ||\n group.toLowerCase() === comparePath.toLowerCase()) {\n return true;\n }\n }\n }\n\n return false;\n}\n\nexports.getBoundingBox = getBoundingBox;\nexports.createNewURL = createNewURL;\nexports.createBufferGeometry = createBufferGeometry;\nexports.getCircularTexture = getCircularTexture;\nexports.resolveURL = resolveURL;\nexports.loadExternalFile = loadExternalFile;\nexports.loadExternalFiles = loadExternalFiles;\nexports.PhongToToon = PhongToToon;\nexports.createNewSpriteText = createNewSpriteText;\nexports.isRegionGroup = isRegionGroup;\n","import {\n\tBox3,\n\tBufferAttribute,\n\tBufferGeometry,\n\tColor,\n\tEventDispatcher,\n\tFloat32BufferAttribute,\n\tMatrix3,\n\tMatrix4,\n\tMathUtils,\n\tObject3D,\n\tSphere,\n\tVector2,\n\tVector3\n} from 'three';\n\nconst _m1 = new Matrix4();\nconst _obj = new Object3D();\nconst _offset = new Vector3();\nconst _temp = new Vector3();\n\nfunction Geometry() {\n\n\tthis.uuid = MathUtils.generateUUID();\n\n\tthis.name = '';\n\tthis.type = 'Geometry';\n\n\tthis.vertices = [];\n\tthis.colors = [];\n\tthis.faces = [];\n\tthis.faceVertexUvs = [[]];\n this.normals = [];\n this.uvs = [];\n\n\tthis.morphTargets = [];\n\tthis.morphNormals = [];\n\n\tthis.skinWeights = [];\n\tthis.skinIndices = [];\n\n\tthis.lineDistances = [];\n\n\tthis.boundingBox = null;\n\tthis.boundingSphere = null;\n\n\t// update flags\n\n\tthis.elementsNeedUpdate = false;\n\tthis.verticesNeedUpdate = false;\n\tthis.uvsNeedUpdate = false;\n\tthis.normalsNeedUpdate = false;\n\tthis.colorsNeedUpdate = false;\n\tthis.lineDistancesNeedUpdate = false;\n\tthis.groupsNeedUpdate = false;\n\tthis.morphNormalsReady = false;\n\n}\n\nGeometry.prototype = Object.assign( Object.create( EventDispatcher.prototype ), {\n\n\tconstructor: Geometry,\n\n\tisGeometry: true,\n\n\tapplyMatrix4: function ( matrix ) {\n\n\t\tconst normalMatrix = new Matrix3().getNormalMatrix( matrix );\n\n\t\tfor ( let i = 0, il = this.vertices.length; i < il; i ++ ) {\n\n\t\t\tconst vertex = this.vertices[ i ];\n\t\t\tvertex.applyMatrix4( matrix );\n\n\t\t}\n\n\t\tfor ( let i = 0, il = this.faces.length; i < il; i ++ ) {\n\n\t\t\tconst face = this.faces[ i ];\n\t\t\tface.normal.applyMatrix3( normalMatrix ).normalize();\n\n\t\t\tfor ( let j = 0, jl = face.vertexNormals.length; j < jl; j ++ ) {\n\n\t\t\t\tface.vertexNormals[ j ].applyMatrix3( normalMatrix ).normalize();\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( this.boundingBox !== null ) {\n\n\t\t\tthis.computeBoundingBox();\n\n\t\t}\n\n\t\tif ( this.boundingSphere !== null ) {\n\n\t\t\tthis.computeBoundingSphere();\n\n\t\t}\n\n\t\tthis.verticesNeedUpdate = true;\n\t\tthis.normalsNeedUpdate = true;\n\n\t\treturn this;\n\n\t},\n\n\trotateX: function ( angle ) {\n\n\t\t// rotate geometry around world x-axis\n\n\t\t_m1.makeRotationX( angle );\n\n\t\tthis.applyMatrix4( _m1 );\n\n\t\treturn this;\n\n\t},\n\n\trotateY: function ( angle ) {\n\n\t\t// rotate geometry around world y-axis\n\n\t\t_m1.makeRotationY( angle );\n\n\t\tthis.applyMatrix4( _m1 );\n\n\t\treturn this;\n\n\t},\n\n\trotateZ: function ( angle ) {\n\n\t\t// rotate geometry around world z-axis\n\n\t\t_m1.makeRotationZ( angle );\n\n\t\tthis.applyMatrix4( _m1 );\n\n\t\treturn this;\n\n\t},\n\n\ttranslate: function ( x, y, z ) {\n\n\t\t// translate geometry\n\n\t\t_m1.makeTranslation( x, y, z );\n\n\t\tthis.applyMatrix4( _m1 );\n\n\t\treturn this;\n\n\t},\n\n\tscale: function ( x, y, z ) {\n\n\t\t// scale geometry\n\n\t\t_m1.makeScale( x, y, z );\n\n\t\tthis.applyMatrix4( _m1 );\n\n\t\treturn this;\n\n\t},\n\n\tlookAt: function ( vector ) {\n\n\t\t_obj.lookAt( vector );\n\n\t\t_obj.updateMatrix();\n\n\t\tthis.applyMatrix4( _obj.matrix );\n\n\t\treturn this;\n\n\t},\n\n\tfromBufferGeometry: function ( geometry ) {\n\n\t\tconst scope = this;\n\n\t\tconst index = geometry.index !== null ? geometry.index : undefined;\n\t\tconst attributes = geometry.attributes;\n\n\t\tif ( attributes.position === undefined ) {\n\n\t\t\tconsole.error( 'THREE.Geometry.fromBufferGeometry(): Position attribute required for conversion.' );\n\t\t\treturn this;\n\n\t\t}\n\n\t\tconst position = attributes.position;\n\t\tconst normal = attributes.normal;\n\t\tconst color = attributes.color;\n\t\tconst uv = attributes.uv;\n\t\tconst uv2 = attributes.uv2;\n\n\t\tif ( uv2 !== undefined ) this.faceVertexUvs[ 1 ] = [];\n\n\t\tfor ( let i = 0; i < position.count; i ++ ) {\n\n\t\t\tscope.vertices.push( new Vector3().fromBufferAttribute( position, i ) );\n\n\t\t\tif ( color !== undefined ) {\n\n\t\t\t\tscope.colors.push( new Color().fromBufferAttribute( color, i ) );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction addFace( a, b, c, materialIndex ) {\n\n\t\t\tconst vertexColors = ( color === undefined ) ? [] : [\n\t\t\t\tscope.colors[ a ].clone(),\n\t\t\t\tscope.colors[ b ].clone(),\n\t\t\t\tscope.colors[ c ].clone()\n\t\t\t];\n\n\t\t\tconst vertexNormals = ( normal === undefined ) ? [] : [\n\t\t\t\tnew Vector3().fromBufferAttribute( normal, a ),\n\t\t\t\tnew Vector3().fromBufferAttribute( normal, b ),\n\t\t\t\tnew Vector3().fromBufferAttribute( normal, c )\n\t\t\t];\n\n\t\t\tconst face = new Face3( a, b, c, vertexNormals, vertexColors, materialIndex );\n\n\t\t\tscope.faces.push( face );\n\n\t\t\tif ( uv !== undefined ) {\n\n\t\t\t\tscope.faceVertexUvs[ 0 ].push( [\n\t\t\t\t\tnew Vector2().fromBufferAttribute( uv, a ),\n\t\t\t\t\tnew Vector2().fromBufferAttribute( uv, b ),\n\t\t\t\t\tnew Vector2().fromBufferAttribute( uv, c )\n\t\t\t\t] );\n\n\t\t\t}\n\n\t\t\tif ( uv2 !== undefined ) {\n\n\t\t\t\tscope.faceVertexUvs[ 1 ].push( [\n\t\t\t\t\tnew Vector2().fromBufferAttribute( uv2, a ),\n\t\t\t\t\tnew Vector2().fromBufferAttribute( uv2, b ),\n\t\t\t\t\tnew Vector2().fromBufferAttribute( uv2, c )\n\t\t\t\t] );\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst groups = geometry.groups;\n\n\t\tif ( groups.length > 0 ) {\n\n\t\t\tfor ( let i = 0; i < groups.length; i ++ ) {\n\n\t\t\t\tconst group = groups[ i ];\n\n\t\t\t\tconst start = group.start;\n\t\t\t\tconst count = group.count;\n\n\t\t\t\tfor ( let j = start, jl = start + count; j < jl; j += 3 ) {\n\n\t\t\t\t\tif ( index !== undefined ) {\n\n\t\t\t\t\t\taddFace( index.getX( j ), index.getX( j + 1 ), index.getX( j + 2 ), group.materialIndex );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\taddFace( j, j + 1, j + 2, group.materialIndex );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tif ( index !== undefined ) {\n\n\t\t\t\tfor ( let i = 0; i < index.count; i += 3 ) {\n\n\t\t\t\t\taddFace( index.getX( i ), index.getX( i + 1 ), index.getX( i + 2 ) );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tfor ( let i = 0; i < position.count; i += 3 ) {\n\n\t\t\t\t\taddFace( i, i + 1, i + 2 );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.computeFaceNormals();\n\n\t\tif ( geometry.boundingBox !== null ) {\n\n\t\t\tthis.boundingBox = geometry.boundingBox.clone();\n\n\t\t}\n\n\t\tif ( geometry.boundingSphere !== null ) {\n\n\t\t\tthis.boundingSphere = geometry.boundingSphere.clone();\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tcenter: function () {\n\n\t\tthis.computeBoundingBox();\n\n\t\tthis.boundingBox.getCenter( _offset ).negate();\n\n\t\tthis.translate( _offset.x, _offset.y, _offset.z );\n\n\t\treturn this;\n\n\t},\n\n\tnormalize: function () {\n\n\t\tthis.computeBoundingSphere();\n\n\t\tconst center = this.boundingSphere.center;\n\t\tconst radius = this.boundingSphere.radius;\n\n\t\tconst s = radius === 0 ? 1 : 1.0 / radius;\n\n\t\tconst matrix = new Matrix4();\n\t\tmatrix.set(\n\t\t\ts, 0, 0, - s * center.x,\n\t\t\t0, s, 0, - s * center.y,\n\t\t\t0, 0, s, - s * center.z,\n\t\t\t0, 0, 0, 1\n\t\t);\n\n\t\tthis.applyMatrix4( matrix );\n\n\t\treturn this;\n\n\t},\n\n\tcomputeFaceNormals: function () {\n\n\t\tconst cb = new Vector3(), ab = new Vector3();\n\n\t\tfor ( let f = 0, fl = this.faces.length; f < fl; f ++ ) {\n\n\t\t\tconst face = this.faces[ f ];\n\n\t\t\tconst vA = this.vertices[ face.a ];\n\t\t\tconst vB = this.vertices[ face.b ];\n\t\t\tconst vC = this.vertices[ face.c ];\n\n\t\t\tcb.subVectors( vC, vB );\n\t\t\tab.subVectors( vA, vB );\n\t\t\tcb.cross( ab );\n\n\t\t\tcb.normalize();\n\n\t\t\tface.normal.copy( cb );\n\n\t\t}\n\n\t},\n\n\tcomputeVertexNormals: function ( areaWeighted = true ) {\n\n\t\tconst vertices = new Array( this.vertices.length );\n\n\t\tfor ( let v = 0, vl = this.vertices.length; v < vl; v ++ ) {\n\n\t\t\tvertices[ v ] = new Vector3();\n\n\t\t}\n\n\t\tif ( areaWeighted ) {\n\n\t\t\t// vertex normals weighted by triangle areas\n\t\t\t// http://www.iquilezles.org/www/articles/normals/normals.htm\n\n\t\t\tconst cb = new Vector3(), ab = new Vector3();\n\n\t\t\tfor ( let f = 0, fl = this.faces.length; f < fl; f ++ ) {\n\n\t\t\t\tconst face = this.faces[ f ];\n\n\t\t\t\tconst vA = this.vertices[ face.a ];\n\t\t\t\tconst vB = this.vertices[ face.b ];\n\t\t\t\tconst vC = this.vertices[ face.c ];\n\n\t\t\t\tcb.subVectors( vC, vB );\n\t\t\t\tab.subVectors( vA, vB );\n\t\t\t\tcb.cross( ab );\n\n\t\t\t\tvertices[ face.a ].add( cb );\n\t\t\t\tvertices[ face.b ].add( cb );\n\t\t\t\tvertices[ face.c ].add( cb );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tthis.computeFaceNormals();\n\n\t\t\tfor ( let f = 0, fl = this.faces.length; f < fl; f ++ ) {\n\n\t\t\t\tconst face = this.faces[ f ];\n\n\t\t\t\tvertices[ face.a ].add( face.normal );\n\t\t\t\tvertices[ face.b ].add( face.normal );\n\t\t\t\tvertices[ face.c ].add( face.normal );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfor ( let v = 0, vl = this.vertices.length; v < vl; v ++ ) {\n\n\t\t\tvertices[ v ].normalize();\n\n\t\t}\n\n\t\tfor ( let f = 0, fl = this.faces.length; f < fl; f ++ ) {\n\n\t\t\tconst face = this.faces[ f ];\n\n\t\t\tconst vertexNormals = face.vertexNormals;\n\n\t\t\tif ( vertexNormals.length === 3 ) {\n\n\t\t\t\tvertexNormals[ 0 ].copy( vertices[ face.a ] );\n\t\t\t\tvertexNormals[ 1 ].copy( vertices[ face.b ] );\n\t\t\t\tvertexNormals[ 2 ].copy( vertices[ face.c ] );\n\n\t\t\t} else {\n\n\t\t\t\tvertexNormals[ 0 ] = vertices[ face.a ].clone();\n\n\t\t\t\tvertexNormals[ 1 ] = vertices[ face.b ].clone();\n\t\t\t\tvertexNormals[ 2 ] = vertices[ face.c ].clone();\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( this.faces.length > 0 ) {\n\n\t\t\tthis.normalsNeedUpdate = true;\n\n\t\t}\n\n return vertices;\n\n\t},\n\n\tcomputeFlatVertexNormals: function () {\n\n\t\tthis.computeFaceNormals();\n\n\t\tfor ( let f = 0, fl = this.faces.length; f < fl; f ++ ) {\n\n\t\t\tconst face = this.faces[ f ];\n\n\t\t\tconst vertexNormals = face.vertexNormals;\n\n\t\t\tif ( vertexNormals.length === 3 ) {\n\n\t\t\t\tvertexNormals[ 0 ].copy( face.normal );\n\t\t\t\tvertexNormals[ 1 ].copy( face.normal );\n\t\t\t\tvertexNormals[ 2 ].copy( face.normal );\n\n\t\t\t} else {\n\n\t\t\t\tvertexNormals[ 0 ] = face.normal.clone();\n\t\t\t\tvertexNormals[ 1 ] = face.normal.clone();\n\t\t\t\tvertexNormals[ 2 ] = face.normal.clone();\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( this.faces.length > 0 ) {\n\n\t\t\tthis.normalsNeedUpdate = true;\n\n\t\t}\n\n\t},\n\n\tcomputeMorphNormals: function () {\n\n\t\t// save original normals\n\t\t// - create temp variables on first access\n\t\t// otherwise just copy (for faster repeated calls)\n\n\t\tfor ( let f = 0, fl = this.faces.length; f < fl; f ++ ) {\n\n\t\t\tconst face = this.faces[ f ];\n\n\t\t\tif ( ! face.__originalFaceNormal ) {\n\n\t\t\t\tface.__originalFaceNormal = face.normal.clone();\n\n\t\t\t} else {\n\n\t\t\t\tface.__originalFaceNormal.copy( face.normal );\n\n\t\t\t}\n\n\t\t\tif ( ! face.__originalVertexNormals ) face.__originalVertexNormals = [];\n\n\t\t\tfor ( let i = 0, il = face.vertexNormals.length; i < il; i ++ ) {\n\n\t\t\t\tif ( ! face.__originalVertexNormals[ i ] ) {\n\n\t\t\t\t\tface.__originalVertexNormals[ i ] = face.vertexNormals[ i ].clone();\n\n\t\t\t\t} else {\n\n\t\t\t\t\tface.__originalVertexNormals[ i ].copy( face.vertexNormals[ i ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t// use temp geometry to compute face and vertex normals for each morph\n\n\t\tconst tmpGeo = new Geometry();\n\t\ttmpGeo.faces = this.faces;\n\n\t\tfor ( let i = 0, il = this.morphTargets.length; i < il; i ++ ) {\n\n\t\t\t// create on first access\n\n\t\t\tif ( ! this.morphNormals[ i ] ) {\n\n\t\t\t\tthis.morphNormals[ i ] = {};\n\t\t\t\tthis.morphNormals[ i ].faceNormals = [];\n\t\t\t\tthis.morphNormals[ i ].vertexNormals = [];\n\n\t\t\t\tconst dstNormalsFace = this.morphNormals[ i ].faceNormals;\n\t\t\t\tconst dstNormalsVertex = this.morphNormals[ i ].vertexNormals;\n\n\t\t\t\tfor ( let f = 0, fl = this.faces.length; f < fl; f ++ ) {\n\n\t\t\t\t\tconst faceNormal = new Vector3();\n\t\t\t\t\tconst vertexNormals = { a: new Vector3(), b: new Vector3(), c: new Vector3() };\n\n\t\t\t\t\tdstNormalsFace.push( faceNormal );\n\t\t\t\t\tdstNormalsVertex.push( vertexNormals );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tconst morphNormals = this.morphNormals[ i ];\n\n\t\t\t// set vertices to morph target\n\n\t\t\ttmpGeo.vertices = this.morphTargets[ i ].vertices;\n\n\t\t\t// compute morph normals\n\n\t\t\ttmpGeo.computeFaceNormals();\n\t\t\tlet vertexNormals = tmpGeo.computeVertexNormals();\n\n if (vertexNormals && vertexNormals.length > 0) {\n this.morphTargets[i].normals = new Array( this.vertices.length );\n\n for ( let v = 0; v < vertexNormals.length; v ++ ) {\n \n this.morphTargets[i].normals[ v ] = vertexNormals[v].clone();\n \n }\n }\n\n\t\t\t// store morph normals\n\n\t\t\tfor ( let f = 0, fl = this.faces.length; f < fl; f ++ ) {\n\n\t\t\t\tconst face = this.faces[ f ];\n\n\t\t\t\tconst faceNormal = morphNormals.faceNormals[ f ];\n\t\t\t\tconst vertexNormals = morphNormals.vertexNormals[ f ];\n\n\t\t\t\tfaceNormal.copy( face.normal );\n\n\t\t\t\tvertexNormals.a.copy( face.vertexNormals[ 0 ] );\n\t\t\t\tvertexNormals.b.copy( face.vertexNormals[ 1 ] );\n\t\t\t\tvertexNormals.c.copy( face.vertexNormals[ 2 ] );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// restore original normals\n\n\t\tfor ( let f = 0, fl = this.faces.length; f < fl; f ++ ) {\n\n\t\t\tconst face = this.faces[ f ];\n\n\t\t\tface.normal = face.__originalFaceNormal;\n\t\t\tface.vertexNormals = face.__originalVertexNormals;\n\n\t\t}\n\n this.morphNormalsReady = true;\n\n\t},\n\n\tcomputeBoundingBox: function () {\n\n\t\tif ( this.boundingBox === null ) {\n\n\t\t\tthis.boundingBox = new Box3();\n\n\t\t}\n\n\t\tthis.boundingBox.setFromPoints( this.vertices );\n\n\t},\n\n\tcomputeBoundingSphere: function () {\n\n\t\tif ( this.boundingSphere === null ) {\n\n\t\t\tthis.boundingSphere = new Sphere();\n\n\t\t}\n\n\t\tthis.boundingSphere.setFromPoints( this.vertices );\n\n\t},\n\n\tmergeMorph: function ( geometry, matrix ) {\n\n\t\tconst m = this.morphTargets.length,\n\t\t\tmorphTargets1 = this.morphTargets,\n\t\t\tmorphTargets2 = geometry.morphTargets,\n\t\t\tn = this.morphColors.length,\n\t\t\tmorphColors1 = this.morphColors,\n\t\t\tmorphColors2 = geometry.morphColors;\n\n if ( m > 0 && m == morphTargets2.length) {\n\n\t\t\tfor ( let i = 0, l = morphTargets1.length; i < l; i ++ ) {\n\n\t\t\t\tconst morphTarget1 = morphTargets1[ i ];\n\t\t\t\tconst morphTarget2 = morphTargets2[ i ];\n\n\t\t\t\tfor ( let k = 0, kl = morphTarget2.vertices.length; k < kl; k ++ ) {\n\n\t\t\t\t\tconst vertex = morphTarget2.vertices[ k ];\n\t\t\n\t\t\t\t\tconst vertexCopy = vertex.clone();\n\t\t\n\t\t\t\t\tif ( matrix !== undefined ) vertexCopy.applyMatrix4( matrix );\n\t\t\n\t\t\t\t\tmorphTarget1.vertices.push( vertexCopy );\n\t\t\n\t\t\t\t}\n\n\t\t\t\tif ( morphTarget1.normals && morphTarget2.normals ) {\n\t\t\t\t\t\n\t\t\t\t\tfor ( let k = 0; k < morphTarget2.normals.length; k = k + 3) {\n\n\t\t\t\t\t\t_temp.set(morphTarget2.normals2[k], morphTarget2.normals2[k + 1], morphTarget2.normals2[k + 2]);\n\t\t\t\n\t\t\t\t\t\tif ( matrix !== undefined ) _temp.applyMatrix4( matrix );\n\t\t\t\n\t\t\t\t\t\tmorphTarget1.normals.push(_temp.x, _temp.y, _temp.z);\n\t\t\t\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( n > 0 && n == morphColors2.length) {\n\n\t\t\tfor ( let i = 0, l = morphColors1.length; i < l; i ++ ) {\n\n\t\t\t\tconst morphColor1 = morphColors1[ i ];\n\t\t\t\tconst morphColor2 = morphColors2[ i ];\n\n\t\t\t\tfor ( let k = 0, kl = morphColor2.colors; k < kl; k ++ ) {\n\n\t\t\t\t\tmorphColor1.colors.push( morphColor2.colors[ k ].clone() );\n\t\t\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t},\n\n\tmerge: function ( geometry, matrix, materialIndexOffset = 0 ) {\n\n\t\tif ( ! ( geometry && geometry.isGeometry ) ) {\n\n\t\t\tconsole.error( 'THREE.Geometry.merge(): geometry not an instance of THREE.Geometry.', geometry );\n\t\t\treturn;\n\n\t\t}\n\n\t\tlet normalMatrix;\n\t\tconst vertexOffset = this.vertices.length,\n\t\t\tvertices1 = this.vertices,\n\t\t\tvertices2 = geometry.vertices,\n\t\t\tnormals2 = geometry.normals,\n\t\t\tfaces1 = this.faces,\n\t\t\tfaces2 = geometry.faces,\n\t\t\tcolors1 = this.colors,\n\t\t\tcolors2 = geometry.colors;\n\n\t\tif ( matrix !== undefined ) {\n\n\t\t\tnormalMatrix = new Matrix3().getNormalMatrix( matrix );\n\n\t\t}\n\n\t\t// vertices\n\n\t\tfor ( let i = 0, il = vertices2.length; i < il; i ++ ) {\n\n\t\t\tconst vertex = vertices2[ i ];\n\n\t\t\tconst vertexCopy = vertex.clone();\n\n\t\t\tif ( matrix !== undefined ) vertexCopy.applyMatrix4( matrix );\n\n\t\t\tvertices1.push( vertexCopy );\n\n\t\t}\n\n\t\tfor ( let i = 0; i < normals2.length; i = i + 3) {\n\n\t\t\t_temp.set(normals2[i], normals2[i + 1], normals2[i + 2]);\n\n\t\t\tif ( matrix !== undefined ) _temp.applyMatrix4( matrix );\n\n\t\t\tthis.normals.push(_temp.x, _temp.y, _temp.z);\n\n\t\t}\n\n\t\t// colors\n\n\t\tfor ( let i = 0, il = colors2.length; i < il; i ++ ) {\n\t\t\tif ((typeof colors2[ i ] === \"number\")) {\n\t\t\t\tcolors1.push( colors2[ i ] );\n\t\t\t} else {\n\t\t\t\tcolors1.push( colors2[ i ].clone() );\n\t\t\t}\n\t\t}\n\n\t\t// faces\n\n\t\tfor ( let i = 0, il = faces2.length; i < il; i ++ ) {\n\n\t\t\tconst face = faces2[ i ];\n\t\t\tlet normal, color;\n\t\t\tconst faceVertexNormals = face.vertexNormals,\n\t\t\t\tfaceVertexColors = face.vertexColors;\n\n\t\t\tconst faceCopy = new Face3( face.a + vertexOffset, face.b + vertexOffset, face.c + vertexOffset );\n\t\t\tfaceCopy.normal.copy( face.normal );\n\n\t\t\tif ( normalMatrix !== undefined ) {\n\n\t\t\t\tfaceCopy.normal.applyMatrix3( normalMatrix ).normalize();\n\n\t\t\t}\n\n\t\t\tfor ( let j = 0, jl = faceVertexNormals.length; j < jl; j ++ ) {\n\n\t\t\t\tnormal = faceVertexNormals[ j ].clone();\n\n\t\t\t\tif ( normalMatrix !== undefined ) {\n\n\t\t\t\t\tnormal.applyMatrix3( normalMatrix ).normalize();\n\n\t\t\t\t}\n\n\t\t\t\tfaceCopy.vertexNormals.push( normal );\n\n\t\t\t}\n\n\t\t\tfaceCopy.color.copy( face.color );\n\n\t\t\tfor ( let j = 0, jl = faceVertexColors.length; j < jl; j ++ ) {\n\n\t\t\t\tcolor = faceVertexColors[ j ];\n\t\t\t\tfaceCopy.vertexColors.push( color.clone() );\n\n\t\t\t}\n\n\t\t\tfaceCopy.materialIndex = face.materialIndex + materialIndexOffset;\n\n\t\t\tfaces1.push( faceCopy );\n\n\t\t}\n\n\t\t// uvs\n\n\t\tfor ( let i = 0, il = geometry.faceVertexUvs.length; i < il; i ++ ) {\n\n\t\t\tconst faceVertexUvs2 = geometry.faceVertexUvs[ i ];\n\n\t\t\tif ( this.faceVertexUvs[ i ] === undefined ) this.faceVertexUvs[ i ] = [];\n\n\t\t\tfor ( let j = 0, jl = faceVertexUvs2.length; j < jl; j ++ ) {\n\n\t\t\t\tconst uvs2 = faceVertexUvs2[ j ], uvsCopy = [];\n\n\t\t\t\tfor ( let k = 0, kl = uvs2.length; k < kl; k ++ ) {\n\n\t\t\t\t\tuvsCopy.push( uvs2[ k ].clone() );\n\n\t\t\t\t}\n\n\t\t\t\tthis.faceVertexUvs[ i ].push( uvsCopy );\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.mergeMorph( geometry, matrix );\n\n\t},\n\n\tmergeMesh: function ( mesh ) {\n\n\t\tif ( ! ( mesh && mesh.isMesh ) ) {\n\n\t\t\tconsole.error( 'THREE.Geometry.mergeMesh(): mesh not an instance of THREE.Mesh.', mesh );\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( mesh.matrixAutoUpdate ) mesh.updateMatrix();\n\n\t\tthis.merge( mesh.geometry, mesh.matrix );\n\n\t},\n\n\t/*\n\t * Checks for duplicate vertices with hashmap.\n\t * Duplicated vertices are removed\n\t * and faces' vertices are updated.\n\t */\n\n\tmergeVertices: function ( precisionPoints = 4 ) {\n\n\t\tconst verticesMap = {}; // Hashmap for looking up vertices by position coordinates (and making sure they are unique)\n\t\tconst unique = [], changes = [];\n\n\t\tconst precision = Math.pow( 10, precisionPoints );\n\n\t\tfor ( let i = 0, il = this.vertices.length; i < il; i ++ ) {\n\n\t\t\tconst v = this.vertices[ i ];\n\t\t\tconst key = Math.round( v.x * precision ) + '_' + Math.round( v.y * precision ) + '_' + Math.round( v.z * precision );\n\n\t\t\tif ( verticesMap[ key ] === undefined ) {\n\n\t\t\t\tverticesMap[ key ] = i;\n\t\t\t\tunique.push( this.vertices[ i ] );\n\t\t\t\tchanges[ i ] = unique.length - 1;\n\n\t\t\t} else {\n\n\t\t\t\t//console.log('Duplicate vertex found. ', i, ' could be using ', verticesMap[key]);\n\t\t\t\tchanges[ i ] = changes[ verticesMap[ key ] ];\n\n\t\t\t}\n\n\t\t}\n\n\n\t\t// if faces are completely degenerate after merging vertices, we\n\t\t// have to remove them from the geometry.\n\t\tconst faceIndicesToRemove = [];\n\n\t\tfor ( let i = 0, il = this.faces.length; i < il; i ++ ) {\n\n\t\t\tconst face = this.faces[ i ];\n\n\t\t\tface.a = changes[ face.a ];\n\t\t\tface.b = changes[ face.b ];\n\t\t\tface.c = changes[ face.c ];\n\n\t\t\tconst indices = [ face.a, face.b, face.c ];\n\n\t\t\t// if any duplicate vertices are found in a Face3\n\t\t\t// we have to remove the face as nothing can be saved\n\t\t\tfor ( let n = 0; n < 3; n ++ ) {\n\n\t\t\t\tif ( indices[ n ] === indices[ ( n + 1 ) % 3 ] ) {\n\n\t\t\t\t\tfaceIndicesToRemove.push( i );\n\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfor ( let i = faceIndicesToRemove.length - 1; i >= 0; i -- ) {\n\n\t\t\tconst idx = faceIndicesToRemove[ i ];\n\n\t\t\tthis.faces.splice( idx, 1 );\n\n\t\t\tfor ( let j = 0, jl = this.faceVertexUvs.length; j < jl; j ++ ) {\n\n\t\t\t\tthis.faceVertexUvs[ j ].splice( idx, 1 );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// Use unique set of vertices\n\n\t\tconst diff = this.vertices.length - unique.length;\n\t\tthis.vertices = unique;\n\t\treturn diff;\n\n\t},\n\n\tsetFromPoints: function ( points ) {\n\n\t\tthis.vertices = [];\n\n\t\tfor ( let i = 0, l = points.length; i < l; i ++ ) {\n\n\t\t\tconst point = points[ i ];\n\t\t\tthis.vertices.push( new Vector3( point.x, point.y, point.z || 0 ) );\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tsortFacesByMaterialIndex: function () {\n\n\t\tconst faces = this.faces;\n\t\tconst length = faces.length;\n\n\t\t// tag faces\n\n\t\tfor ( let i = 0; i < length; i ++ ) {\n\n\t\t\tfaces[ i ]._id = i;\n\n\t\t}\n\n\t\t// sort faces\n\n\t\tfunction materialIndexSort( a, b ) {\n\n\t\t\treturn a.materialIndex - b.materialIndex;\n\n\t\t}\n\n\t\tfaces.sort( materialIndexSort );\n\n\t\t// sort uvs\n\n\t\tconst uvs1 = this.faceVertexUvs[ 0 ];\n\t\tconst uvs2 = this.faceVertexUvs[ 1 ];\n\n\t\tlet newUvs1, newUvs2;\n\n\t\tif ( uvs1 && uvs1.length === length ) newUvs1 = [];\n\t\tif ( uvs2 && uvs2.length === length ) newUvs2 = [];\n\n\t\tfor ( let i = 0; i < length; i ++ ) {\n\n\t\t\tconst id = faces[ i ]._id;\n\n\t\t\tif ( newUvs1 ) newUvs1.push( uvs1[ id ] );\n\t\t\tif ( newUvs2 ) newUvs2.push( uvs2[ id ] );\n\n\t\t}\n\n\t\tif ( newUvs1 ) this.faceVertexUvs[ 0 ] = newUvs1;\n\t\tif ( newUvs2 ) this.faceVertexUvs[ 1 ] = newUvs2;\n\n\t},\n\n\ttoJSON: function () {\n\n\t\tconst data = {\n\t\t\tmetadata: {\n\t\t\t\tversion: 4.5,\n\t\t\t\ttype: 'Geometry',\n\t\t\t\tgenerator: 'Geometry.toJSON'\n\t\t\t}\n\t\t};\n\n\t\t// standard Geometry serialization\n\n\t\tdata.uuid = this.uuid;\n\t\tdata.type = this.type;\n\t\tif ( this.name !== '' ) data.name = this.name;\n\n\t\tif ( this.parameters !== undefined ) {\n\n\t\t\tconst parameters = this.parameters;\n\n\t\t\tfor ( const key in parameters ) {\n\n\t\t\t\tif ( parameters[ key ] !== undefined ) data[ key ] = parameters[ key ];\n\n\t\t\t}\n\n\t\t\treturn data;\n\n\t\t}\n\n\t\tconst vertices = [];\n\n\t\tfor ( let i = 0; i < this.vertices.length; i ++ ) {\n\n\t\t\tconst vertex = this.vertices[ i ];\n\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t}\n\n\t\tconst faces = [];\n\t\tconst normals = [];\n\t\tconst normalsHash = {};\n\t\tconst colors = [];\n\t\tconst colorsHash = {};\n\t\tconst uvs = [];\n\t\tconst uvsHash = {};\n\n\t\tfor ( let i = 0; i < this.faces.length; i ++ ) {\n\n\t\t\tconst face = this.faces[ i ];\n\n\t\t\tconst hasMaterial = true;\n\t\t\tconst hasFaceUv = false; // deprecated\n\t\t\tconst hasFaceVertexUv = this.faceVertexUvs[ 0 ][ i ] !== undefined;\n\t\t\tconst hasFaceNormal = face.normal.length() > 0;\n\t\t\tconst hasFaceVertexNormal = face.vertexNormals.length > 0;\n\t\t\tconst hasFaceColor = face.color.r !== 1 || face.color.g !== 1 || face.color.b !== 1;\n\t\t\tconst hasFaceVertexColor = face.vertexColors.length > 0;\n\n\t\t\tlet faceType = 0;\n\n\t\t\tfaceType = setBit( faceType, 0, 0 ); // isQuad\n\t\t\tfaceType = setBit( faceType, 1, hasMaterial );\n\t\t\tfaceType = setBit( faceType, 2, hasFaceUv );\n\t\t\tfaceType = setBit( faceType, 3, hasFaceVertexUv );\n\t\t\tfaceType = setBit( faceType, 4, hasFaceNormal );\n\t\t\tfaceType = setBit( faceType, 5, hasFaceVertexNormal );\n\t\t\tfaceType = setBit( faceType, 6, hasFaceColor );\n\t\t\tfaceType = setBit( faceType, 7, hasFaceVertexColor );\n\n\t\t\tfaces.push( faceType );\n\t\t\tfaces.push( face.a, face.b, face.c );\n\t\t\tfaces.push( face.materialIndex );\n\n\t\t\tif ( hasFaceVertexUv ) {\n\n\t\t\t\tconst faceVertexUvs = this.faceVertexUvs[ 0 ][ i ];\n\n\t\t\t\tfaces.push(\n\t\t\t\t\tgetUvIndex( faceVertexUvs[ 0 ] ),\n\t\t\t\t\tgetUvIndex( faceVertexUvs[ 1 ] ),\n\t\t\t\t\tgetUvIndex( faceVertexUvs[ 2 ] )\n\t\t\t\t);\n\n\t\t\t}\n\n\t\t\tif ( hasFaceNormal ) {\n\n\t\t\t\tfaces.push( getNormalIndex( face.normal ) );\n\n\t\t\t}\n\n\t\t\tif ( hasFaceVertexNormal ) {\n\n\t\t\t\tconst vertexNormals = face.vertexNormals;\n\n\t\t\t\tfaces.push(\n\t\t\t\t\tgetNormalIndex( vertexNormals[ 0 ] ),\n\t\t\t\t\tgetNormalIndex( vertexNormals[ 1 ] ),\n\t\t\t\t\tgetNormalIndex( vertexNormals[ 2 ] )\n\t\t\t\t);\n\n\t\t\t}\n\n\t\t\tif ( hasFaceColor ) {\n\n\t\t\t\tfaces.push( getColorIndex( face.color ) );\n\n\t\t\t}\n\n\t\t\tif ( hasFaceVertexColor ) {\n\n\t\t\t\tconst vertexColors = face.vertexColors;\n\n\t\t\t\tfaces.push(\n\t\t\t\t\tgetColorIndex( vertexColors[ 0 ] ),\n\t\t\t\t\tgetColorIndex( vertexColors[ 1 ] ),\n\t\t\t\t\tgetColorIndex( vertexColors[ 2 ] )\n\t\t\t\t);\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction setBit( value, position, enabled ) {\n\n\t\t\treturn enabled ? value | ( 1 << position ) : value & ( ~ ( 1 << position ) );\n\n\t\t}\n\n\t\tfunction getNormalIndex( normal ) {\n\n\t\t\tconst hash = normal.x.toString() + normal.y.toString() + normal.z.toString();\n\n\t\t\tif ( normalsHash[ hash ] !== undefined ) {\n\n\t\t\t\treturn normalsHash[ hash ];\n\n\t\t\t}\n\n\t\t\tnormalsHash[ hash ] = normals.length / 3;\n\t\t\tnormals.push( normal.x, normal.y, normal.z );\n\n\t\t\treturn normalsHash[ hash ];\n\n\t\t}\n\n\t\tfunction getColorIndex( color ) {\n\n\t\t\tconst hash = color.r.toString() + color.g.toString() + color.b.toString();\n\n\t\t\tif ( colorsHash[ hash ] !== undefined ) {\n\n\t\t\t\treturn colorsHash[ hash ];\n\n\t\t\t}\n\n\t\t\tcolorsHash[ hash ] = colors.length;\n\t\t\tcolors.push( color.getHex() );\n\n\t\t\treturn colorsHash[ hash ];\n\n\t\t}\n\n\t\tfunction getUvIndex( uv ) {\n\n\t\t\tconst hash = uv.x.toString() + uv.y.toString();\n\n\t\t\tif ( uvsHash[ hash ] !== undefined ) {\n\n\t\t\t\treturn uvsHash[ hash ];\n\n\t\t\t}\n\n\t\t\tuvsHash[ hash ] = uvs.length / 2;\n\t\t\tuvs.push( uv.x, uv.y );\n\n\t\t\treturn uvsHash[ hash ];\n\n\t\t}\n\n\t\tdata.data = {};\n\n\t\tdata.data.vertices = vertices;\n\t\tdata.data.normals = normals;\n\t\tif ( colors.length > 0 ) data.data.colors = colors;\n\t\tif ( uvs.length > 0 ) data.data.uvs = [ uvs ]; // temporal backward compatibility\n\t\tdata.data.faces = faces;\n\n\t\treturn data;\n\n\t},\n\n\tclone: function () {\n\n\t\t/*\n\t\t // Handle primitives\n\n\t\t const parameters = this.parameters;\n\n\t\t if ( parameters !== undefined ) {\n\n\t\t const values = [];\n\n\t\t for ( const key in parameters ) {\n\n\t\t values.push( parameters[ key ] );\n\n\t\t }\n\n\t\t const geometry = Object.create( this.constructor.prototype );\n\t\t this.constructor.apply( geometry, values );\n\t\t return geometry;\n\n\t\t }\n\n\t\t return new this.constructor().copy( this );\n\t\t */\n\n\t\treturn new Geometry().copy( this );\n\n\t},\n\n\tcopy: function ( source ) {\n\n\t\t// reset\n\n\t\tthis.vertices = [];\n\t\tthis.colors = [];\n\t\tthis.faces = [];\n\t\tthis.faceVertexUvs = [[]];\n\t\tthis.morphTargets = [];\n\t\tthis.morphNormals = [];\n\t\tthis.skinWeights = [];\n\t\tthis.skinIndices = [];\n\t\tthis.lineDistances = [];\n\t\tthis.boundingBox = null;\n\t\tthis.boundingSphere = null;\n\n\t\t// name\n\n\t\tthis.name = source.name;\n\n\t\t// vertices\n\n\t\tconst vertices = source.vertices;\n\n\t\tfor ( let i = 0, il = vertices.length; i < il; i ++ ) {\n\n\t\t\tthis.vertices.push( vertices[ i ].clone() );\n\n\t\t}\n\n\t\t// colors\n\n\t\tconst colors = source.colors;\n\n\t\tfor ( let i = 0, il = colors.length; i < il; i ++ ) {\n\n\t\t\tthis.colors.push( colors[ i ].clone() );\n\n\t\t}\n\n\t\t// faces\n\n\t\tconst faces = source.faces;\n\n\t\tfor ( let i = 0, il = faces.length; i < il; i ++ ) {\n\n\t\t\tthis.faces.push( faces[ i ].clone() );\n\n\t\t}\n\n\t\t// face vertex uvs\n\n\t\tfor ( let i = 0, il = source.faceVertexUvs.length; i < il; i ++ ) {\n\n\t\t\tconst faceVertexUvs = source.faceVertexUvs[ i ];\n\n\t\t\tif ( this.faceVertexUvs[ i ] === undefined ) {\n\n\t\t\t\tthis.faceVertexUvs[ i ] = [];\n\n\t\t\t}\n\n\t\t\tfor ( let j = 0, jl = faceVertexUvs.length; j < jl; j ++ ) {\n\n\t\t\t\tconst uvs = faceVertexUvs[ j ], uvsCopy = [];\n\n\t\t\t\tfor ( let k = 0, kl = uvs.length; k < kl; k ++ ) {\n\n\t\t\t\t\tconst uv = uvs[ k ];\n\n\t\t\t\t\tuvsCopy.push( uv.clone() );\n\n\t\t\t\t}\n\n\t\t\t\tthis.faceVertexUvs[ i ].push( uvsCopy );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// morph targets\n\n\t\tconst morphTargets = source.morphTargets;\n\n\t\tfor ( let i = 0, il = morphTargets.length; i < il; i ++ ) {\n\n\t\t\tconst morphTarget = {};\n\t\t\tmorphTarget.name = morphTargets[ i ].name;\n\n\t\t\t// vertices\n\n\t\t\tif ( morphTargets[ i ].vertices !== undefined ) {\n\n\t\t\t\tmorphTarget.vertices = [];\n\n\t\t\t\tfor ( let j = 0, jl = morphTargets[ i ].vertices.length; j < jl; j ++ ) {\n\n\t\t\t\t\tmorphTarget.vertices.push( morphTargets[ i ].vertices[ j ].clone() );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// normals\n\n\t\t\tif ( morphTargets[ i ].normals !== undefined ) {\n\n\t\t\t\tmorphTarget.normals = [];\n\n\t\t\t\tfor ( let j = 0, jl = morphTargets[ i ].normals.length; j < jl; j ++ ) {\n\n\t\t\t\t\tmorphTarget.normals.push( morphTargets[ i ].normals[ j ].clone() );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tthis.morphTargets.push( morphTarget );\n\n\t\t}\n\n\t\t// morph normals\n\n\t\tconst morphNormals = source.morphNormals;\n\n\t\tfor ( let i = 0, il = morphNormals.length; i < il; i ++ ) {\n\n\t\t\tconst morphNormal = {};\n\n\t\t\t// vertex normals\n\n\t\t\tif ( morphNormals[ i ].vertexNormals !== undefined ) {\n\n\t\t\t\tmorphNormal.vertexNormals = [];\n\n\t\t\t\tfor ( let j = 0, jl = morphNormals[ i ].vertexNormals.length; j < jl; j ++ ) {\n\n\t\t\t\t\tconst srcVertexNormal = morphNormals[ i ].vertexNormals[ j ];\n\t\t\t\t\tconst destVertexNormal = {};\n\n\t\t\t\t\tdestVertexNormal.a = srcVertexNormal.a.clone();\n\t\t\t\t\tdestVertexNormal.b = srcVertexNormal.b.clone();\n\t\t\t\t\tdestVertexNormal.c = srcVertexNormal.c.clone();\n\n\t\t\t\t\tmorphNormal.vertexNormals.push( destVertexNormal );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// face normals\n\n\t\t\tif ( morphNormals[ i ].faceNormals !== undefined ) {\n\n\t\t\t\tmorphNormal.faceNormals = [];\n\n\t\t\t\tfor ( let j = 0, jl = morphNormals[ i ].faceNormals.length; j < jl; j ++ ) {\n\n\t\t\t\t\tmorphNormal.faceNormals.push( morphNormals[ i ].faceNormals[ j ].clone() );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tthis.morphNormals.push( morphNormal );\n\n\t\t}\n\n\t\t// skin weights\n\n\t\tconst skinWeights = source.skinWeights;\n\n\t\tfor ( let i = 0, il = skinWeights.length; i < il; i ++ ) {\n\n\t\t\tthis.skinWeights.push( skinWeights[ i ].clone() );\n\n\t\t}\n\n\t\t// skin indices\n\n\t\tconst skinIndices = source.skinIndices;\n\n\t\tfor ( let i = 0, il = skinIndices.length; i < il; i ++ ) {\n\n\t\t\tthis.skinIndices.push( skinIndices[ i ].clone() );\n\n\t\t}\n\n\t\t// line distances\n\n\t\tconst lineDistances = source.lineDistances;\n\n\t\tfor ( let i = 0, il = lineDistances.length; i < il; i ++ ) {\n\n\t\t\tthis.lineDistances.push( lineDistances[ i ] );\n\n\t\t}\n\n\t\t// bounding box\n\n\t\tconst boundingBox = source.boundingBox;\n\n\t\tif ( boundingBox !== null ) {\n\n\t\t\tthis.boundingBox = boundingBox.clone();\n\n\t\t}\n\n\t\t// bounding sphere\n\n\t\tconst boundingSphere = source.boundingSphere;\n\n\t\tif ( boundingSphere !== null ) {\n\n\t\t\tthis.boundingSphere = boundingSphere.clone();\n\n\t\t}\n\n\t\t// update flags\n\n\t\tthis.elementsNeedUpdate = source.elementsNeedUpdate;\n\t\tthis.verticesNeedUpdate = source.verticesNeedUpdate;\n\t\tthis.uvsNeedUpdate = source.uvsNeedUpdate;\n\t\tthis.normalsNeedUpdate = source.normalsNeedUpdate;\n\t\tthis.colorsNeedUpdate = source.colorsNeedUpdate;\n\t\tthis.lineDistancesNeedUpdate = source.lineDistancesNeedUpdate;\n\t\tthis.groupsNeedUpdate = source.groupsNeedUpdate;\n\n\t\treturn this;\n\n\t},\n\n\n\tcomputeGroups( ) {\n\n\t\tconst groups = [];\n\n\t\tlet group, i;\n\t\tlet materialIndex = undefined;\n\n\t\tconst faces = this.faces;\n\n\t\tfor ( i = 0; i < faces.length; i ++ ) {\n\n\t\t\tconst face = faces[ i ];\n\n\t\t\t// materials\n\n\t\t\tif ( face.materialIndex !== materialIndex ) {\n\n\t\t\t\tmaterialIndex = face.materialIndex;\n\n\t\t\t\tif ( group !== undefined ) {\n\n\t\t\t\t\tgroup.count = ( i * 3 ) - group.start;\n\t\t\t\t\tgroups.push( group );\n\n\t\t\t\t}\n\n\t\t\t\tgroup = {\n\t\t\t\t\tstart: i * 3,\n\t\t\t\t\tmaterialIndex: materialIndex\n\t\t\t\t};\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( group !== undefined ) {\n\n\t\t\tgroup.count = ( i * 3 ) - group.start;\n\t\t\tgroups.push( group );\n\n\t\t}\n\n\t\treturn groups;\n\n\t},\n\n\ttoBufferGeometry: function () {\n\n\t\tconst geometry = new DirectGeometry().fromGeometry( this );\n\n\t\tconst buffergeometry = new BufferGeometry();\n\n\t\tconst positions = new Float32Array( geometry.vertices.length * 3 );\n\t\tbuffergeometry.setAttribute( 'position', new BufferAttribute( positions, 3 ).copyVector3sArray( geometry.vertices ) );\n\n\t\tif ( geometry.normals.length > 0 ) {\n\n\t\t\tconst normals = new Float32Array( geometry.normals.length * 3 );\n\t\t\tbuffergeometry.setAttribute( 'normal', new BufferAttribute( normals, 3 ).copyVector3sArray( geometry.normals ) );\n\n\t\t}\n\n\t\tif ( geometry.colors.length > 0 ) {\n\n\t\t\tconst colors = new Float32Array( geometry.colors.length * 3 );\n\t\t\tbuffergeometry.setAttribute( 'color', new BufferAttribute( colors, 3 ).copyColorsArray( geometry.colors ) );\n\n\t\t}\n\n\t\tif ( geometry.uvs.length > 0 ) {\n\n\t\t\tconst uvs = new Float32Array( geometry.uvs.length * 2 );\n\t\t\tbuffergeometry.setAttribute( 'uv', new BufferAttribute( uvs, 2 ).copyVector2sArray( geometry.uvs ) );\n\n\t\t}\n\n\t\tif ( geometry.uvs2.length > 0 ) {\n\n\t\t\tconst uvs2 = new Float32Array( geometry.uvs2.length * 2 );\n\t\t\tbuffergeometry.setAttribute( 'uv2', new BufferAttribute( uvs2, 2 ).copyVector2sArray( geometry.uvs2 ) );\n\n\t\t}\n\n\t\t// groups\n\n\t\tbuffergeometry.groups = geometry.groups;\n\n\t\t// morphs\n\n\t\tfor ( const name in geometry.morphTargets ) {\n\n\t\t\tconst array = [];\n\t\t\tconst morphTargets = geometry.morphTargets[ name ];\n\n\t\t\tfor ( let i = 0, l = morphTargets.length; i < l; i ++ ) {\n\n\t\t\t\tconst morphTarget = morphTargets[ i ];\n\n\t\t\t\tconst attribute = new Float32BufferAttribute( morphTarget.data.length * 3, 3 );\n\t\t\t\tattribute.name = morphTarget.name;\n\n\t\t\t\tarray.push( attribute.copyVector3sArray( morphTarget.data ) );\n\n\t\t\t}\n\n\t\t\tbuffergeometry.morphAttributes[ name ] = array;\n\n\t\t}\n\n\t\t// skinning\n\n\t\tif ( geometry.skinIndices.length > 0 ) {\n\n\t\t\tconst skinIndices = new Float32BufferAttribute( geometry.skinIndices.length * 4, 4 );\n\t\t\tbuffergeometry.setAttribute( 'skinIndex', skinIndices.copyVector4sArray( geometry.skinIndices ) );\n\n\t\t}\n\n\t\tif ( geometry.skinWeights.length > 0 ) {\n\n\t\t\tconst skinWeights = new Float32BufferAttribute( geometry.skinWeights.length * 4, 4 );\n\t\t\tbuffergeometry.setAttribute( 'skinWeight', skinWeights.copyVector4sArray( geometry.skinWeights ) );\n\n\t\t}\n\n\t\t//\n\n\t\tif ( geometry.boundingSphere !== null ) {\n\n\t\t\tbuffergeometry.boundingSphere = geometry.boundingSphere.clone();\n\n\t\t}\n\n\t\tif ( geometry.boundingBox !== null ) {\n\n\t\t\tbuffergeometry.boundingBox = geometry.boundingBox.clone();\n\n\t\t}\n\n\t\treturn buffergeometry;\n\n\t},\n\n toIndexedBufferGeometry: function () {\n\n\t\t//const geometry = new DirectGeometry().fromGeometry( this );\n\n\t\tconst buffergeometry = new BufferGeometry();\n\n\t\tconst positions = new Float32Array( this.vertices.length * 3 );\n\t\tbuffergeometry.setAttribute( 'position', new BufferAttribute( positions, 3 ).copyVector3sArray( this.vertices ) );\n\n\t\tif ( this.normals.length > 0 ) {\n\t\t\tconst normals = new Float32Array( this.normals.length );\n let buffer = new BufferAttribute( normals, 3 ).copyArray( this.normals );\n\t\t\tbuffergeometry.setAttribute( 'normal', buffer);\n\t\t}\n if ( this.uvs.length > 0 && this.uvs[0].length > 0 ) {\n\n\t\t\tconst uvs = new Float32Array( this.uvs[0].length * 2 );\n\t\t\tbuffergeometry.setAttribute( 'uv', new BufferAttribute( uvs, 2 ).copyArray( this.uvs[0] ) );\n\t\t}\n\n\t\tif ( this.uvs.length > 1 && this.uvs[1].length > 0 ) {\n\t\t\tconst uvs2 = new Float32Array( this.uvs[1].length * 2 );\n\t\t\tbuffergeometry.setAttribute( 'uv2', new BufferAttribute( uvs2, 2 ).copyArray( this.uvs[1] ) );\n\t\t}\n\n if ( this.colors.length > 0) {\n\n const colorArray = [];\n for (let i = 0 ; i < this.colors.length; i++) {\n colorArray.push(new Color( this.colors[ i ] ));\n }\n const colors = new Float32Array( colorArray.length * 3 );\n\t\t\tbuffergeometry.setAttribute( 'color', new BufferAttribute( colors, 3 ).copyColorsArray( colorArray ) );\n\n } else {\n\n const colorsArray = new Float32Array( this.vertices.length * 3 );\n for (let i = 0; i < this.vertices.length * 3; i++) {\n colorsArray[i] = 1.0;\n }\n buffergeometry.setAttribute( 'color', new BufferAttribute( colorsArray, 3 ) );\n \n }\n\n if (this.faces.length > 0) {\n\n let colors = [];\n\n let indices = [];\n\n for (let i = 0 ; i < this.faces.length; i++) {\n\n indices.push(this.faces[i].a, this.faces[i].b, this.faces[i].c);\n\n const vertexColors = this.faces[i].vertexColors;\n \n if ( vertexColors.length === 3 ) {\n \n colors.push( vertexColors[ 0 ], vertexColors[ 1 ], vertexColors[ 2 ] );\n \n } else {\n \n const color = this.faces[i].color;\n \n colors.push( color, color, color );\n \n }\n\n }\n\n // if ( colors.length > 0 ) {\n\n// const colorsArray = new Float32Array( colors.length * 3 );\n// buffergeometry.setAttribute( 'color', new BufferAttribute( colorsArray, 3 ).copyColorsArray( colors ) );\n \n// }\n\n buffergeometry.setIndex( indices );\n\n buffergeometry.groups = this.computeGroups();\n\n }\n\n\t\t// morphs\n\n if (this.morphTargets.length > 0) {\n\n\t\t\tconst array = [];\n const normalsArray = [];\n\n\t\t\tfor ( let i = 0, l = this.morphTargets.length; i < l; i ++ ) {\n\n\t\t\t\tconst morphTarget = this.morphTargets[ i ];\n\n\t\t\t\tconst attribute = new Float32BufferAttribute( morphTarget.vertices.length * 3, 3 );\n\t\t\t\tattribute.name = morphTarget.name;\n\n\t\t\t\tarray.push( attribute.copyVector3sArray( morphTarget.vertices ) );\n\n if (morphTarget.normals) {\n\n\n const attribute = new Float32BufferAttribute( morphTarget.normals.length * 3, 3 );\n attribute.name = morphTarget.name;\n\n normalsArray.push( attribute.copyVector3sArray( morphTarget.normals ) );\n \n }\n\n\t\t\t}\n\n\t\t\tbuffergeometry.morphAttributes.position = array;\n buffergeometry.morphAttributes.normal = normalsArray;\n\n\t\t}\n\n\t\t// skinning\n\n\t\tif ( this.skinIndices.length > 0 ) {\n\n\t\t\tconst skinIndices = new Float32BufferAttribute( this.skinIndices.length * 4, 4 );\n\t\t\tbuffergeometry.setAttribute( 'skinIndex', skinIndices.copyVector4sArray( this.skinIndices ) );\n\n\t\t}\n\n\t\tif ( this.skinWeights.length > 0 ) {\n\n\t\t\tconst skinWeights = new Float32BufferAttribute( this.skinWeights.length * 4, 4 );\n\t\t\tbuffergeometry.setAttribute( 'skinWeight', skinWeights.copyVector4sArray( this.skinWeights ) );\n\n\t\t}\n\n\t\t//\n\n\t\tif ( this.boundingSphere !== null ) {\n\n\t\t\tbuffergeometry.boundingSphere = this.boundingSphere.clone();\n\n\t\t}\n\n\t\tif ( this.boundingBox !== null ) {\n\n\t\t\tbuffergeometry.boundingBox = this.boundingBox.clone();\n\n\t\t}\n\n\t\treturn buffergeometry;\n\n\t},\n\n\tcomputeTangents: function () {\n\n\t\tconsole.error( 'THREE.Geometry: .computeTangents() has been removed.' );\n\n\t},\n\n\tcomputeLineDistances: function () {\n\n\t\tconsole.error( 'THREE.Geometry: .computeLineDistances() has been removed. Use THREE.Line.computeLineDistances() instead.' );\n\n\t},\n\n\tapplyMatrix: function ( matrix ) {\n\n\t\tconsole.warn( 'THREE.Geometry: .applyMatrix() has been renamed to .applyMatrix4().' );\n\t\treturn this.applyMatrix4( matrix );\n\n\t},\n\n\tdispose: function () {\n\n\t\tthis.dispatchEvent( { type: 'dispose' } );\n\n\t}\n\n} );\n\nGeometry.createBufferGeometryFromObject = function ( object ) {\n\n\tlet buffergeometry = new BufferGeometry();\n\n\tconst geometry = object.geometry;\n\n\tif ( object.isPoints || object.isLine ) {\n\n\t\tconst positions = new Float32BufferAttribute( geometry.vertices.length * 3, 3 );\n\t\tconst colors = new Float32BufferAttribute( geometry.colors.length * 3, 3 );\n\n\t\tbuffergeometry.setAttribute( 'position', positions.copyVector3sArray( geometry.vertices ) );\n\t\tbuffergeometry.setAttribute( 'color', colors.copyColorsArray( geometry.colors ) );\n\n\t\tif ( geometry.lineDistances && geometry.lineDistances.length === geometry.vertices.length ) {\n\n\t\t\tconst lineDistances = new Float32BufferAttribute( geometry.lineDistances.length, 1 );\n\n\t\t\tbuffergeometry.setAttribute( 'lineDistance', lineDistances.copyArray( geometry.lineDistances ) );\n\n\t\t}\n\n\t\tif ( geometry.boundingSphere !== null ) {\n\n\t\t\tbuffergeometry.boundingSphere = geometry.boundingSphere.clone();\n\n\t\t}\n\n\t\tif ( geometry.boundingBox !== null ) {\n\n\t\t\tbuffergeometry.boundingBox = geometry.boundingBox.clone();\n\n\t\t}\n\n\t} else if ( object.isMesh ) {\n\n\t\tbuffergeometry = geometry.toBufferGeometry();\n\n\t}\n\n\treturn buffergeometry;\n\n};\n\nclass DirectGeometry {\n\n\tconstructor() {\n\n\t\tthis.vertices = [];\n\t\tthis.normals = [];\n\t\tthis.colors = [];\n\t\tthis.uvs = [];\n\t\tthis.uvs2 = [];\n\n\t\tthis.groups = [];\n\n\t\tthis.morphTargets = {};\n\n\t\tthis.skinWeights = [];\n\t\tthis.skinIndices = [];\n\n\t\t// this.lineDistances = [];\n\n\t\tthis.boundingBox = null;\n\t\tthis.boundingSphere = null;\n\n\t\t// update flags\n\n\t\tthis.verticesNeedUpdate = false;\n\t\tthis.normalsNeedUpdate = false;\n\t\tthis.colorsNeedUpdate = false;\n\t\tthis.uvsNeedUpdate = false;\n\t\tthis.groupsNeedUpdate = false;\n\n\t}\n\n\tcomputeGroups( geometry ) {\n\n\t\tconst groups = [];\n\n\t\tlet group, i;\n\t\tlet materialIndex = undefined;\n\n\t\tconst faces = geometry.faces;\n\n\t\tfor ( i = 0; i < faces.length; i ++ ) {\n\n\t\t\tconst face = faces[ i ];\n\n\t\t\t// materials\n\n\t\t\tif ( face.materialIndex !== materialIndex ) {\n\n\t\t\t\tmaterialIndex = face.materialIndex;\n\n\t\t\t\tif ( group !== undefined ) {\n\n\t\t\t\t\tgroup.count = ( i * 3 ) - group.start;\n\t\t\t\t\tgroups.push( group );\n\n\t\t\t\t}\n\n\t\t\t\tgroup = {\n\t\t\t\t\tstart: i * 3,\n\t\t\t\t\tmaterialIndex: materialIndex\n\t\t\t\t};\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( group !== undefined ) {\n\n\t\t\tgroup.count = ( i * 3 ) - group.start;\n\t\t\tgroups.push( group );\n\n\t\t}\n\n\t\tthis.groups = groups;\n\n\t}\n\n\tfromGeometry( geometry ) {\n\n\t\tconst faces = geometry.faces;\n\t\tconst vertices = geometry.vertices;\n\t\tconst faceVertexUvs = geometry.faceVertexUvs;\n\n\t\tconst hasFaceVertexUv = faceVertexUvs[ 0 ] && faceVertexUvs[ 0 ].length > 0;\n\t\tconst hasFaceVertexUv2 = faceVertexUvs[ 1 ] && faceVertexUvs[ 1 ].length > 0;\n\n\t\t// morphs\n\n\t\tconst morphTargets = geometry.morphTargets;\n\t\tconst morphTargetsLength = morphTargets.length;\n\n\t\tlet morphTargetsPosition;\n\n\t\tif ( morphTargetsLength > 0 ) {\n\n\t\t\tmorphTargetsPosition = [];\n\n\t\t\tfor ( let i = 0; i < morphTargetsLength; i ++ ) {\n\n\t\t\t\tmorphTargetsPosition[ i ] = {\n\t\t\t\t\tname: morphTargets[ i ].name,\n\t\t\t\t \tdata: []\n\t\t\t\t};\n\n\t\t\t}\n\n\t\t\tthis.morphTargets.position = morphTargetsPosition;\n\n\t\t}\n\n\t\tconst morphNormals = geometry.morphNormals;\n\t\tconst morphNormalsLength = morphNormals.length;\n\n\t\tlet morphTargetsNormal;\n\n\t\tif ( morphNormalsLength > 0 ) {\n\n\t\t\tmorphTargetsNormal = [];\n\n\t\t\tfor ( let i = 0; i < morphNormalsLength; i ++ ) {\n\n\t\t\t\tmorphTargetsNormal[ i ] = {\n\t\t\t\t\tname: morphNormals[ i ].name,\n\t\t\t\t \tdata: []\n\t\t\t\t};\n\n\t\t\t}\n\n\t\t\tthis.morphTargets.normal = morphTargetsNormal;\n\n\t\t}\n\n\t\t// skins\n\n\t\tconst skinIndices = geometry.skinIndices;\n\t\tconst skinWeights = geometry.skinWeights;\n\n\t\tconst hasSkinIndices = skinIndices.length === vertices.length;\n\t\tconst hasSkinWeights = skinWeights.length === vertices.length;\n\n\t\t//\n\n\t\tif ( vertices.length > 0 && faces.length === 0 ) {\n\n\t\t\tconsole.error( 'THREE.DirectGeometry: Faceless geometries are not supported.' );\n\n\t\t}\n\n\t\tfor ( let i = 0; i < faces.length; i ++ ) {\n\n\t\t\tconst face = faces[ i ];\n\n\t\t\tthis.vertices.push( vertices[ face.a ], vertices[ face.b ], vertices[ face.c ] );\n\n\t\t\tconst vertexNormals = face.vertexNormals;\n\n\t\t\tif ( vertexNormals.length === 3 ) {\n\n\t\t\t\tthis.normals.push( vertexNormals[ 0 ], vertexNormals[ 1 ], vertexNormals[ 2 ] );\n\n\t\t\t} else {\n\n\t\t\t\tconst normal = face.normal;\n\n\t\t\t\tthis.normals.push( normal, normal, normal );\n\n\t\t\t}\n\n\t\t\tconst vertexColors = face.vertexColors;\n\n\t\t\tif ( vertexColors.length === 3 ) {\n\n\t\t\t\tthis.colors.push( vertexColors[ 0 ], vertexColors[ 1 ], vertexColors[ 2 ] );\n\n\t\t\t} else {\n\n\t\t\t\tconst color = face.color;\n\n\t\t\t\tthis.colors.push( color, color, color );\n\n\t\t\t}\n\n\t\t\tif ( hasFaceVertexUv === true ) {\n\n\t\t\t\tconst vertexUvs = faceVertexUvs[ 0 ][ i ];\n\n\t\t\t\tif ( vertexUvs !== undefined ) {\n\n\t\t\t\t\tthis.uvs.push( vertexUvs[ 0 ], vertexUvs[ 1 ], vertexUvs[ 2 ] );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.warn( 'THREE.DirectGeometry.fromGeometry(): Undefined vertexUv ', i );\n\n\t\t\t\t\tthis.uvs.push( new Vector2(), new Vector2(), new Vector2() );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( hasFaceVertexUv2 === true ) {\n\n\t\t\t\tconst vertexUvs = faceVertexUvs[ 1 ][ i ];\n\n\t\t\t\tif ( vertexUvs !== undefined ) {\n\n\t\t\t\t\tthis.uvs2.push( vertexUvs[ 0 ], vertexUvs[ 1 ], vertexUvs[ 2 ] );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.warn( 'THREE.DirectGeometry.fromGeometry(): Undefined vertexUv2 ', i );\n\n\t\t\t\t\tthis.uvs2.push( new Vector2(), new Vector2(), new Vector2() );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// morphs\n\n\t\t\tfor ( let j = 0; j < morphTargetsLength; j ++ ) {\n\n\t\t\t\tconst morphTarget = morphTargets[ j ].vertices;\n\n\t\t\t\tmorphTargetsPosition[ j ].data.push( morphTarget[ face.a ], morphTarget[ face.b ], morphTarget[ face.c ] );\n\n\t\t\t}\n\n\t\t\tfor ( let j = 0; j < morphNormalsLength; j ++ ) {\n\n\t\t\t\tconst morphNormal = morphNormals[ j ].vertexNormals[ i ];\n\n\t\t\t\tmorphTargetsNormal[ j ].data.push( morphNormal.a, morphNormal.b, morphNormal.c );\n\n\t\t\t}\n\n\t\t\t// skins\n\n\t\t\tif ( hasSkinIndices ) {\n\n\t\t\t\tthis.skinIndices.push( skinIndices[ face.a ], skinIndices[ face.b ], skinIndices[ face.c ] );\n\n\t\t\t}\n\n\t\t\tif ( hasSkinWeights ) {\n\n\t\t\t\tthis.skinWeights.push( skinWeights[ face.a ], skinWeights[ face.b ], skinWeights[ face.c ] );\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.computeGroups( geometry );\n\n\t\tthis.verticesNeedUpdate = geometry.verticesNeedUpdate;\n\t\tthis.normalsNeedUpdate = geometry.normalsNeedUpdate;\n\t\tthis.colorsNeedUpdate = geometry.colorsNeedUpdate;\n\t\tthis.uvsNeedUpdate = geometry.uvsNeedUpdate;\n\t\tthis.groupsNeedUpdate = geometry.groupsNeedUpdate;\n\n\t\tif ( geometry.boundingSphere !== null ) {\n\n\t\t\tthis.boundingSphere = geometry.boundingSphere.clone();\n\n\t\t}\n\n\t\tif ( geometry.boundingBox !== null ) {\n\n\t\t\tthis.boundingBox = geometry.boundingBox.clone();\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass Face3 {\n\n\tconstructor( a, b, c, normal, color, materialIndex = 0 ) {\n\n\t\tthis.a = a;\n\t\tthis.b = b;\n\t\tthis.c = c;\n\n\t\tthis.normal = ( normal && normal.isVector3 ) ? normal : new Vector3();\n\t\tthis.vertexNormals = Array.isArray( normal ) ? normal : [];\n\n\t\tthis.color = ( color && color.isColor ) ? color : new Color();\n\t\tthis.vertexColors = Array.isArray( color ) ? color : [];\n\n\t\tthis.materialIndex = materialIndex;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tthis.a = source.a;\n\t\tthis.b = source.b;\n\t\tthis.c = source.c;\n\n\t\tthis.normal.copy( source.normal );\n\t\tthis.color.copy( source.color );\n\n\t\tthis.materialIndex = source.materialIndex;\n\n\t\tfor ( let i = 0, il = source.vertexNormals.length; i < il; i ++ ) {\n\n\t\t\tthis.vertexNormals[ i ] = source.vertexNormals[ i ].clone();\n\n\t\t}\n\n\t\tfor ( let i = 0, il = source.vertexColors.length; i < il; i ++ ) {\n\n\t\t\tthis.vertexColors[ i ] = source.vertexColors[ i ].clone();\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n}\n\nexport { Face3, Geometry };\n","module.exports = require(\"three-spritetext\");","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAAZiS0dEAAAAAAAA+UO7fwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9sHDgwCEMBJZu0AAAAdaVRYdENvbW1lbnQAAAAAAENyZWF0ZWQgd2l0aCBHSU1QZC5lBwAABM5JREFUWMO1V0tPG2cUPZ4Hxh6DazIOrjFNqJs0FIMqWFgWQkatsmvVbtggKlSVRVf5AWz4AWz4AUSKEChll19QJYSXkECuhFxsHjEhxCYm+DWGMZ5HF72DJq4bAzFXurI0M/I5997v3u9cC65vTJVn2lX/xHINQOYSBLTLEuIuCWw4Z3IGAEvf6ASmVHjNzHCXBG4A0AjACsAOwEbO0nsFQBnAGYASAIl+ZRMR7SolMEdsByD09fV5R0ZGgg8ePPjW5/N1iqLYpuu6RZblciKR2I9Go69evnwZnZ+fjwI4IS8AKBIRzeQfJWCANwKwh0KhtrGxsYehUOin1tbW+zzP23ietzY2NnIAoGmaLsuyUiqVyvl8XtrY2NiamZn589mzZxsAUgCOAeQAnFI2tI+VxIjaAeDzoaGh7xYWFuZOTk6OZVk+12uYqqq6JEnn0Wg0OT4+/geAXwGEAdwDIFJQXC1wO4DWR48e/RCPxxclSSroVzRFUbSDg4P848ePFwH8DuAhkWih83TRQWxFOXgAwvDwcOfo6OhvXV1d39tsNtuVBwTDWBwOh1UUxVsMw1hXVlbSdCgNV43uYSvrHg6H24aHh38eHBz85TrgF9FYLHA4HLzH43FvbW2d7u/vG+dANp8FpqIlbd3d3V8Fg8EfBUFw4BONZVmL3+9vHhkZCQL4AoAHgJPK8G+yzC0XDofdoVAo5PP5vkadTBAEtr+/39ff3x8gAp/RPOEqx2qjx+NpvXv3bk9DQ0NDvQgwDIOWlhZrMBj8kgi0UJdxRgYMArzL5XJ7vd57qLPZ7Xamp6fnNgBXtQxcjFuHw+Hyer3t9SYgCAITCAScAJoBNNEY/08GOFVVrfVMv7kMNDntFD1vjIAPrlRN0xjckOm6biFQ3jwNPwDMZrOnqVTqfb3Bi8Wivru7W/VCYkwPlKOjo0IikXh7EwQikYgE4Nw0CfXKDCipVCoTj8df3QABbW1tLUc6oUgkFPMkVACUNjc337148eKvw8PDbJ2jP1taWkoCyNDVXDSECmNSK4qiKNLq6urW8+fPI/UicHx8rD59+jSVy+WOAKSJhKENwFItLtoxk8mwsixzHR0dHe3t7c5PAU+n09rs7OzJkydPYqVSaQfANoDXALIk31S2smU1TWMPDg7K5XKZ7+3t9TudTut1U7+wsFCcmJiIpdPpbQBxADsAknQWymYCOukBHYCuKApisdhpMpnURFEU79y503TVyKenpzOTk5M7e3t7MQKPV0Zv1gNm+awB0MvlshqLxfLb29uyJElWURSbXC4XXyvqxcXFs6mpqeTc3Nzu3t7e3wQcA7BPZ8Cov1pNlJplmQtAG8MwHV6v95tAINA5MDBwPxAIuLu6upr8fr/VAN3c3JQjkcjZ+vp6fnl5+d2bN29SuVzuNYAEpf01CdRChUL+X1VskHACuA3Ay3Fcu9vt7nA6nZ7m5uYWQRCaNE3jVVW15PP580KhIGUymWw2m00DOAJwSP4WwPtq4LX2Ao6USxNlQyS/RcQcdLGwlNIz6vEMAaZpNzCk2Pll94LK/cDYimxERiBwG10sxjgvEZBE0UpE6vxj+0Ct5bTaXthgEhRmja8QWNkkPGsuIpfdjpkK+cZUWTC0KredVmtD/gdlSl6EG4AMvQAAAABJRU5ErkJggg==\"","\n/**\n * Provide additional shaders to render time dependent color.\n */\nexports.augmentMorphColor = function() {\n return function(shader) {\n shader.vertexShader = shader.vertexShader.replace(\n '#include ',\n [\n\t 'varying vec3 vColor;',\n 'attribute vec3 morphColor0;',\n 'attribute vec3 morphColor1;'\n ].join( '\\n' )\n );\n shader.vertexShader = shader.vertexShader.replace(\n '#include ',\n [\n 'vColor.xyz = color.xyz;',\n '#ifdef USE_MORPHTARGETS',\n 'vColor = morphColor0 * morphTargetInfluences[ 0 ];',\n 'vColor += morphColor1 * morphTargetInfluences[ 1 ];',\n '#endif'\n ].join( '\\n' )\n );\n };\n}\n","const THREE = require('three');\nconst createBufferGeometry = require('../utilities').createBufferGeometry;\nconst resolveURL = require('../utilities').resolveURL;\n\nlet uniqueiId = 0;\n\nconst getUniqueId = function () {\n return \"pr\" + uniqueiId++;\n}\n\n/**\n * Provides the base object for other primitive types.\n * This class contains multiple base methods.\n * \n * @class\n * @author Alan Wu\n * @return {ZincObject}\n */\nconst ZincObject = function() {\n this.isZincObject = true;\n this.geometry = undefined;\n // THREE.Mesh\n this.morph = undefined;\n this.group = new THREE.Group();\n this._lod = new (require(\"./lod\").LOD)(this);\n /**\n\t * Groupname given to this geometry.\n\t */\n this.groupName = undefined;\n this.timeEnabled = false;\n this.morphColour = false;\n this.inbuildTime = 0;\n this.mixer = undefined;\n this.animationGroup = undefined;\n\t/**\n\t * Total duration of the animation, this value interacts with the \n\t * {@link Renderer#playRate} to produce the actual duration of the\n\t * animation. Actual time in second = duration / playRate.\n\t */\n this.duration = 6000;\n this.clipAction = undefined;\n this.userData = {};\n this.videoHandler = undefined;\n this.marker = undefined;\n this.markerNumber = undefined;\n this.markerUpdateRequired = true;\n this.closestVertexIndex = -1;\n this.boundingBoxUpdateRequired = true;\n this.cachedBoundingBox = new THREE.Box3();\n this.anatomicalId = undefined;\n this.region = undefined;\n this.animationClip = undefined;\n this.markerMode = \"inherited\";\n this.uuid = getUniqueId();\n this._v1 = new THREE.Vector3();\n this._v2 = new THREE.Vector3();\n this._b1 = new THREE.Box3();\n this.center = new THREE.Vector3();\n this.radius = 0;\n this.visible = true;\n //Draw range is only used by primitives added\n //programatically with addVertices function\n this.drawRange = -1;\n //Default value of colour\n this.origColour = undefined;\n this.origVertexColors = false;\n this.isPickable = true;\n}\n\n/**\n * Set the duration of the animation of this object.\n * \n * @param {Number} durationIn - Duration of the animation.\n */\nZincObject.prototype.setDuration = function(durationIn) {\n this.duration = durationIn;\n if (this.clipAction) {\n this.clipAction.setDuration(this.duration);\n }\n}\n\n/**\n * Get the duration of the animation of this object.\n * \n * @return {Number}\n */\nZincObject.prototype.getDuration = function() {\n return this.duration;\n}\n\n/**\n * Set the region this object belongs to.\n *\n * @param {Region} region\n */\nZincObject.prototype.setRegion = function(region) {\n this.region = region;\n}\n\n/**\n * Get the region this object belongs to.\n * \n * @return {Region}\n */\nZincObject.prototype.getRegion = function() {\n return this.region;\n}\n\n/**\n * Get the threejs object3D. \n * \n * @return {Object}\n */\n ZincObject.prototype.getMorph = function() {\n const morph = this._lod.getCurrentMorph();\n return morph ? morph : this.morph;\n}\n\n/**\n * Get the threejs object3D. \n * \n * @return {Object}\n */\n ZincObject.prototype.getGroup = function() {\n return this.group;\n}\n\n/**\n * Set the internal threejs object3D. \n */\n ZincObject.prototype.setMorph = function(mesh) {\n this.morph = mesh;\n this.group.add(this.morph);\n //this is the base level object\n const distance = this._lod.calculateDistance(\"far\");\n this._lod.addLevel(mesh, distance);\n this._lod.setMaterial(mesh.material);\n}\n\n/**\n * Handle transparent mesh, create a clone for backside rendering if it is\n * transparent.\n */\nZincObject.prototype.checkTransparentMesh = function() {\n return;\n}\n\n/**\n * Set the mesh function for zincObject.\n * \n * @param {THREE.Mesh} mesh - Mesh to be set for this zinc object.\n * @param {Boolean} localTimeEnabled - A flag to indicate either the mesh is\n * time dependent.\n * @param {Boolean} localMorphColour - A flag to indicate either the colour is\n * time dependent.\n */\nZincObject.prototype.setMesh = function(mesh, localTimeEnabled, localMorphColour) {\n //Note: we assume all layers are consistent with time frame\n //Thus adding them to the same animation group should work.\n //This step is only required for the primary (level 0) mesh.\n this.animationGroup = new THREE.AnimationObjectGroup(mesh);\n this.mixer = new THREE.AnimationMixer(this.animationGroup);\n const geometry = mesh.geometry;\n this.geometry = mesh.geometry;\n this.clipAction = undefined;\n if (geometry && geometry.morphAttributes) {\n let morphAttribute = geometry.morphAttributes.position;\n if (!morphAttribute) {\n morphAttribute = geometry.morphAttributes.color ?\n geometry.morphAttributes.color :\n geometry.morphAttributes.normal;\n }\n if (morphAttribute) {\n this.animationClip = THREE.AnimationClip.CreateClipsFromMorphTargetSequences(\n morphAttribute, 10, true);\n if (this.animationClip && (this.animationClip[0] != undefined)) {\n this.clipAction = this.mixer.clipAction(this.animationClip[0]).setDuration(\n this.duration);\n this.clipAction.loop = THREE.loopOnce;\n this.clipAction.clampWhenFinished = true;\n this.clipAction.play();\n }\n }\n }\n this.timeEnabled = localTimeEnabled;\n this.morphColour = localMorphColour;\n mesh.userData = this;\n mesh.matrixAutoUpdate = false;\n this.setMorph(mesh);\n this.checkTransparentMesh();\n if (this.timeEnabled) {\n this.setFrustumCulled(false);\n } else {\n if (this.morphColour) {\n geometry.setAttribute('morphTarget0', geometry.getAttribute( 'position' ) );\n geometry.setAttribute('morphTarget1', geometry.getAttribute( 'position' ) );\n }\n }\n this.boundingBoxUpdateRequired = true;\n}\n\n/**\n * Set isPickable for this ZincObject.\n * \n * @param {String} isPickable - Boolean to enable object pick.\n */\nZincObject.prototype.setIsPickable = function(isPickable) {\n if (this.isPickable !== isPickable) {\n this.isPickable = isPickable;\n if (this.region) this.region.pickableUpdateRequired = true;\n }\n}\n\n/**\n * Set the anatomicalId for this ZincObject.\n * \n * @param {String} anatomicalId - Id to be set.\n */\nZincObject.prototype.setAnatomicalId = function(anatomicalId) {\n this.anatomicalId = anatomicalId;\n}\n\n/**\n * Set the name for this ZincObject.\n * \n * @param {String} groupNameIn - Name to be set.\n */\nZincObject.prototype.setName = function(groupNameIn) {\n this.groupName = groupNameIn;\n this._lod.setName(groupNameIn);\n}\n\n/**\n * Get the local time of this geometry, it returns a value between \n * 0 and the duration.\n * \n * @return {Number}\n */\nZincObject.prototype.getCurrentTime = function() {\n if (this.clipAction) {\n const ratio = this.clipAction.time / this.clipAction._clip.duration;\n return this.duration * ratio;\n } else {\n return this.inbuildTime;\n }\n}\n\n/**\n * Set the local time of this geometry.\n * \n * @param {Number} time - Can be any value between 0 to duration.\n */\nZincObject.prototype.setMorphTime = function(time) {\n let timeChanged = false;\n if (this.clipAction) {\n const ratio = time / this.duration;\n const actualDuration = this.clipAction._clip.duration;\n let newTime = ratio * actualDuration;\n if (newTime != this.clipAction.time) {\n this.clipAction.time = newTime;\n timeChanged = true;\n }\n if (timeChanged && this.isTimeVarying()) {\n this.mixer.update( 0.0 );\n }\n } else {\n let newTime = time; \n if (time > this.duration)\n newTime = this.duration;\n else if (0 > time)\n newTime = 0;\n else\n newTime = time;\n if (newTime != this.inbuildTime) {\n this.inbuildTime = newTime;\n timeChanged = true;\n }\n }\n if (timeChanged) {\n this.boundingBoxUpdateRequired = true;\n this._lod.updateMorphColorAttribute(true);\n if (this.timeEnabled)\n this.markerUpdateRequired = true;\n }\n}\n\n/**\n * Check if the geometry is time varying.\n * \n * @return {Boolean}\n */\nZincObject.prototype.isTimeVarying = function() {\n if (this.timeEnabled || this.morphColour)\n return true;\n return false;\n}\n\n/**\n * Get the visibility of this Geometry.\n * \n */\nZincObject.prototype.getVisibility = function() {\n return this.visible;\n}\n\n/**\n * Set the visibility of this Geometry.\n * \n * @param {Boolean} visible - a boolean flag indicate the visibility to be set \n */\nZincObject.prototype.setVisibility = function(visible) {\n if (visible !== this.visible) {\n this.visible = visible;\n this.group.visible = visible;\n if (this.region) this.region.pickableUpdateRequired = true;\n }\n}\n\n/**\n * Set the opacity of this Geometry. This function will also set the isTransparent\n * flag according to the provided alpha value.\n * \n * @param {Number} alpah - Alpha value to set for this geometry, \n * can be any value between from 0 to 1.0.\n */\nZincObject.prototype.setAlpha = function(alpha) {\n const material = this._lod._material;\n let isTransparent = false;\n if (alpha < 1.0)\n isTransparent = true;\n material.opacity = alpha;\n material.transparent = isTransparent;\n this.checkTransparentMesh();\n}\n\n/**\n * The rendering will be culled if it is outside of the frustrum\n * when this flag is set to true, it should be set to false if\n * morphing is enabled.\n * \n * @param {Boolean} flag - Set frustrum culling on/off based on this flag.\n */\nZincObject.prototype.setFrustumCulled = function(flag) {\n //multilayers - set for all layers\n this._lod.setFrustumCulled(flag);\n}\n\n/**\n * Set rather a zinc object should be displayed using per vertex colour or\n * not.\n * \n * @param {Boolean} vertexColors - Set display with vertex color on/off.\n */\nZincObject.prototype.setVertexColors = function(vertexColors) {\n //multilayers - set for all\n this._lod.setVertexColors(vertexColors);\n\n}\n\n/**\n * Get the colour of the mesh.\n * \n * @return {THREE.Color}\n */\nZincObject.prototype.getColour = function() {\n if (this._lod._material)\n return this._lod._material.color;\n\treturn undefined;\n}\n \n/**\n * Set the colour of the mesh.\n * \n * @param {THREE.Color} colour - Colour to be set for this geometry.\n */\nZincObject.prototype.setColour = function(colour) {\n this._lod.setColour(colour);\n}\n\n/**\n * Set the colour of the mesh.\n * \n * @param {THREE.Color} colour - Colour to be set for this geometry.\n */\nZincObject.prototype.setGreyScale = function(flag) {\n if (flag) {\n if (!this.origColour) {\n if (this._lod._material) {\n this.origColour = this._lod._material.color;\n this.origVertexColors = this._lod._material.vertexColors;\n this._lod.setVertexColors(false);\n this._lod.setColour(new THREE.Color().setHex( 0xBBBBBB ));\n return true;\n }\n }\n } else {\n if (this.origColour) {\n this._lod.setColour(this.origColour);\n this._lod.setVertexColors(this.origVertexColors);\n this.origColour = undefined;\n return true;\n }\n }\n return false;\n}\n\n/**\n * Get the colour of the mesh in hex string form.\n * \n * @return {String}\n */\nZincObject.prototype.getColourHex = function() {\n if (!this.morphColour) {\n if (this._lod._material && this._lod._material.color)\n return this._lod._material.color.getHexString();\n }\n return undefined;\n}\n\n/**\n * Set the colour of the mesh using hex in string form.\n * \n * @param {String} hex - The colour value in hex form.\n */\nZincObject.prototype.setColourHex = function(hex) {\n this._lod._material.color.setHex(hex);\n if (this._lod._secondaryMaterial) {\n this._lod._secondaryMaterial.color.setHex(hex);\n }\n}\n\n/**\n * Set the emissive rgb of the mesh using rgb.\n * \n * @param {String} colour - The colour value in rgb form.\n */\nZincObject.prototype.setEmissiveRGB = function(colour) {\n if (this._lod._material && this._lod._material.emissive) {\n this._lod._material.emissive.setRGB(...colour);\n }\n if (this._lod._secondaryMaterial) {\n this._lod._secondaryMaterial.emissive.setRGB(...colour);\n }\n}\n\n\n/**\n * Set the material of the geometry.\n * \n * @param {THREE.Material} material - Material to be set for this geometry.\n */\nZincObject.prototype.setMaterial = function(material) {\n this._lod.setMaterial(material);\n}\n\n/**\n * Get the index of the closest vertex to centroid.\n * \n * @return {Number} - integer index in the array\n */\nZincObject.prototype.getClosestVertexIndex = function() {\n let closestIndex = -1;\n const morph = this.getMorph();\n if (morph && morph.geoemtry) {\n let position = morph.geometry.attributes.position;\n this._b1.setFromBufferAttribute(position);\n this._b1.getCenter(this._v1);\n if (position) {\n let distance = -1;\n let currentDistance = 0;\n for (let i = 0; i < position.count; i++) {\n this._v2.fromArray(position.array, i * 3);\n currentDistance = this._v2.distanceTo(this._v1);\n if (distance == -1)\n distance = currentDistance;\n else if (distance > (currentDistance)) {\n distance = currentDistance;\n closestIndex = i;\n }\n }\n }\n }\n return closestIndex;\n}\n\n/**\n * Get the closest vertex to centroid.\n * \n * @return {THREE.Vector3}\n */\nZincObject.prototype.getClosestVertex = function(applyMatrixWorld) {\n let position = new THREE.Vector3();\n if (this.closestVertexIndex == -1) {\n this.closestVertexIndex = this.getClosestVertexIndex();\n }\n const morph = this.getMorph();\n if (morph && morph.geometry && this.closestVertexIndex >= 0) {\n let influences = morph.morphTargetInfluences;\n let attributes = morph.geometry.morphAttributes;\n if (influences && attributes && attributes.position) {\n let found = false;\n for (let i = 0; i < influences.length; i++) {\n if (influences[i] > 0) {\n found = true;\n this._v1.fromArray(\n attributes.position[i].array, this.closestVertexIndex * 3);\n position.add(this._v1.multiplyScalar(influences[i]));\n }\n }\n if (found) {\n return applyMatrixWorld ? position.applyMatrix4(morph.matrixWorld) : position;\n }\n } else {\n position.fromArray(morph.geometry.attributes.position.array,\n this.closestVertexIndex * 3);\n return applyMatrixWorld ? position.applyMatrix4(morph.matrixWorld) : position;\n }\n }\n this.getBoundingBox();\n position.copy(this.center);\n return applyMatrixWorld ? position.applyMatrix4(this.morph.matrixWorld) : position;\n}\n\n/**\n * Get the bounding box of this geometry.\n * \n * @return {THREE.Box3}.\n */\nZincObject.prototype.getBoundingBox = function() {\n if (this.visible) {\n let morph = this._lod.getCurrentMorph();\n if (morph && morph.visible) {\n if (this.boundingBoxUpdateRequired) {\n require(\"../utilities\").getBoundingBox(morph, this.cachedBoundingBox,\n this._b1, this._v1, this._v2);\n this.cachedBoundingBox.getCenter(this.center);\n this.radius = this.center.distanceTo(this.cachedBoundingBox.max);\n this.boundingBoxUpdateRequired = false;\n }\n return this.cachedBoundingBox;\n }\n }\n return undefined;\n}\n\n/**\n * Clear this geometry and free the memory.\n */\nZincObject.prototype.dispose = function() {\n //multilayyers\n this._lod.dispose();\n this.animationGroup = undefined;\n this.mixer = undefined;\n this.morph = undefined;\n this.group = undefined;\n this.clipAction = undefined;\n this.groupName = undefined;\n}\n\n/**\n * Check if marker is enabled based on the objects settings with \n * the provided scene options.\n * \n * @return {Boolean} \n */\nZincObject.prototype.markerIsRequired = function(options) {\n if (this.visible && \n (this.markerMode === \"on\" || (options && options.displayMarkers &&\n (this.markerMode === \"inherited\")))) {\n return true;\n }\n return false;\n}\n\n/**\n * Update the marker's position and size based on current viewport. \n */\nZincObject.prototype.updateMarker = function(playAnimation, options) {\n if ((playAnimation == false) &&\n (this.markerIsRequired(options)))\n {\n let ndcToBeUpdated = options.ndcToBeUpdated;\n if (this.groupName) {\n if (!this.marker) {\n this.marker = new (require(\"./marker\").Marker)(this);\n this.markerUpdateRequired = true;\n }\n if (this.markerUpdateRequired) {\n let position = this.getClosestVertex(false);\n if (position) {\n this.marker.setPosition(position.x, position.y, position.z);\n this.markerUpdateRequired = false;\n }\n }\n if (!this.marker.isEnabled()) {\n if (options.markersList &&\n (!(this.marker.uuid in options.markersList))) { \n ndcToBeUpdated = true;\n options.markersList[this.marker.uuid] = this.marker;\n }\n this.marker.enable();\n this.group.add(this.marker.morph);\n }\n this.marker.setNumber(this.markerNumber);\n if (this.markerImgURL) {\n this.marker.loadUserSprite(this.markerImgURL);\n } else {\n this.marker.setDefaultSprite();\n }\n if (options && options.camera && (ndcToBeUpdated ||\n options.markerCluster.markerUpdateRequired)) {\n this.marker.updateNDC(options.camera.cameraObject);\n options.markerCluster.markerUpdateRequired = true;\n }\n }\n } else {\n if (this.marker && this.marker.isEnabled()) {\n this.marker.disable();\n this.group.remove(this.marker.morph);\n if (options.markersList &&\n (this.marker.uuid in options.markersList)) {\n options.markerCluster.markerUpdateRequired = true;\n delete options.markersList[this.marker.uuid];\n }\n }\n this.markerUpdateRequired = true;\n }\n}\n\nZincObject.prototype.processMarkerVisual = function(min, max) {\n if (this.marker && this.marker.isEnabled()) {\n this.marker.updateVisual(min, max);\n }\n}\n\nZincObject.prototype.initiateMorphColor = function() {\n //Multilayers - set all\n if (this.morphColour == 1) {\n this._lod.updateMorphColorAttribute(false);\n }\n}\n\nZincObject.prototype.setRenderOrder = function(renderOrder) {\n //multiilayers\n this._lod.setRenderOrder(renderOrder);\n}\n\n/**\n * Get the windows coordinates.\n * \n * @return {Object} - position and rather the closest vertex is on screen.\n */\nZincObject.prototype.getClosestVertexDOMElementCoords = function(scene) {\n if (scene && scene.camera) {\n let inView = true;\n const position = this.getClosestVertex(true);\n position.project(scene.camera);\n position.z = Math.min(Math.max(position.z, 0), 1);\n if (position.x > 1 || position.x < -1 || position.y > 1 || position.y < -1) {\n inView = false;\n }\n scene.getZincCameraControls().getRelativeCoordsFromNDC(position.x, position.y, position);\n return {position, inView};\n } else {\n return undefined;\n }\n}\n\n/**\n * Set marker mode for this zinc object which determine rather the\n * markers should be displayed or not.\n *\n * @param {string} mode - There are three options:\n * \"on\" - marker is enabled regardless of settings of scene\n * \"off\" - marker is disabled regardless of settings of scene\n * \"inherited\" - Marker settings on scene will determine the visibility\n * of the marker.\n * \n * @return {Boolean} \n */\n ZincObject.prototype.setMarkerMode = function(mode, options) {\n if (mode !== this.markerMode) {\n if (mode === \"on\" || mode === \"off\") {\n this.markerMode = mode;\n } else {\n this.markerMode = \"inherited\";\n }\n if (this.region) {\n this.region.pickableUpdateRequired = true;\n }\n }\n if (options) {\n this.markerNumber = options.number;\n this.markerImgURL = options.imgURL;\n }\n}\n\n//Update the geometry and colours depending on the morph.\nZincObject.prototype.render = function(delta, playAnimation,\n cameraControls, options) {\n if (this.visible && !(this.timeEnabled && playAnimation)) {\n this._lod.update(cameraControls, this.center);\n }\n if (playAnimation == true)\n {\n if ((this.clipAction) && this.isTimeVarying()) {\n this.mixer.update( delta );\n }\n else {\n let targetTime = this.inbuildTime + delta;\n if (targetTime > this.duration)\n targetTime = targetTime - this.duration;\n this.inbuildTime = targetTime;\n }\n //multilayers\n if (this.visible && delta != 0) {\n this.boundingBoxUpdateRequired = true;\n if (this.morphColour == 1) {\n this._lod.updateMorphColorAttribute(true);\n }\n }\n }\n this.updateMarker(playAnimation, options);\n}\n\n/**\n * Add lod from an url into the lod object.\n */\nZincObject.prototype.addLOD = function(loader, level, url, index, preload) {\n this._lod.addLevelFromURL(loader, level, url, index, preload);\n}\n\n/**\n * Add lod from an url into the lod object.\n */\nZincObject.prototype.addVertices = function(coords) {\n let mesh = this.getMorph();\n let geometry = undefined;\n if (!mesh) {\n geometry = createBufferGeometry(500, coords);\n this.drawRange = coords.length;\n } else {\n if (this.drawRange > -1) {\n const positionAttribute = mesh.geometry.getAttribute( 'position' );\n coords.forEach(coord => {\n positionAttribute.setXYZ(this.drawRange, coord[0], coord[1], coord[2])\n ++this.drawRange;\n });\n positionAttribute.needsUpdate = true;\n mesh.geometry.setDrawRange(0, this.drawRange);\n mesh.geometry.computeBoundingBox();\n mesh.geometry.computeBoundingSphere();\n geometry = mesh.geoemtry;\n this.boundingBoxUpdateRequired = true;\n }\n }\n return geometry;\n}\n\n/**\n * Set the objects position.\n */\nZincObject.prototype.setPosition = function(x, y, z) {\n const group = this.getGroup();\n if (group) {\n group.position.set(x, y, z);\n group.updateMatrix();\n this.boundingBoxUpdateRequired = true;\n }\n}\n\nZincObject.prototype.loadAdditionalSources = function(primitivesLoader, sources) {\n primitivesLoader.load(resolveURL(filename), meshloader(region, colour, opacity, localTimeEnabled, localMorphColour, undefined, undefined,\n undefined, undefined, finishCallback), this.onProgress(filename), this.onError(finishCallback));\n}\n\n/**\n * Set the objects scale.\n */\nZincObject.prototype.setScaleAll = function(scale) {\n const group = this.getGroup();\n if (group) {\n group.scale.set(scale, scale, scale);\n group.updateMatrix();\n this.boundingBoxUpdateRequired = true;\n }\n}\n\n\nexports.ZincObject = ZincObject;\n","const THREE = require('three');\nconst updateMorphColorAttribute = require(\"../utilities\").updateMorphColorAttribute;\nconst toBufferGeometry = require('../utilities').toBufferGeometry;\n\n/**\n * Provides an object which stores meshes at different levels based\n * on specified distance.\n * This object is ued by zincObject to provide mesh at different LODs.\n * A layer is displayed when the distance from the camera is greater \n * than its specified distance and closest compared to other layers.\n * This is intended to be an internal object used only by Zinc Object.\n * \n * This object assumes the centroid and bounding box are consistent between\n * different level of layers.\n * \n * @class\n * @author Alan Wu\n * @return {LOD}\n */\nconst LOD = function (parent) {\n this.levels = [];\n this._currentLevel = 0;\n this._renderOrder = 1;\n this._material = undefined;\n this._secondaryMaterial = undefined;\n this._loader = undefined;\n //The owning Zinc Object\n this._parent = parent;\n\n /*\n * Add a level of LOD at the specified distance\n */\n this.addLevel = (object, distanceIn) => {\n if (object) {\n const distance = Math.abs(distanceIn);\n let l;\n for (l = 0; l < this.levels.length; l++) {\n if (distance < this.levels[l].distance) {\n break;\n }\n }\n const levelObject = {\n distance: distance,\n morph: object,\n loaded: true,\n loading: false,\n url: \"\",\n };\n this.levels.splice(l, 0, levelObject);\n object.renderOrder = this._renderOrder;\n //this.add( object );\n }\n }\n\n /*\n * This is called once an ondemand level is loaded\n */\n this.levelLoaded = (object, distanceIn) => {\n if (object) {\n const distance = Math.abs(distanceIn);\n for (let l = 0; l < this.levels.length; l++) {\n if (distance === this.levels[l].distance) {\n this._parent.group.add(object);\n this.levels[l].morph = object;\n this.levels[l].loaded = true;\n this.levels[l].loading = false;\n break;\n }\n }\n this.checkTransparentMesh();\n }\n }\n\n this.addLevelFromURL = (loader, level, url, index, preload) => {\n this._loader = loader;\n const distance = this.calculateDistance(level);\n const levelObject = {\n distance: distance,\n morph: undefined,\n loaded: false,\n loading: false,\n url: url,\n index: index,\n };\n let l;\n for (l = 0; l < this.levels.length; l++) {\n if (distance < this.levels[l].distance) {\n break;\n }\n }\n this.levels.splice(l, 0, levelObject);\n if (preload) {\n this.loadLevel(l);\n }\n }\n\n //load the mesh at index, return true if morph is not ready\n this.loadLevel = (index) => {\n const level = this.levels[index];\n if (!level.morph && !level.loaded &&\n !level.loading) {\n level.loading = true;\n this._loader.load(level.url, this.lodLoader(level.distance),\n undefined, undefined, {index: level.index});\n }\n return (level.morph === undefined);\n }\n\n\n this.calculateDistance = function (level) {\n this._parent.getBoundingBox();\n const radius = this._parent.radius;\n let distance = 0;\n if (level === \"far\") {\n distance = radius * 4.5;\n } else if (level === \"medium\") {\n distance = radius * 2.5;\n } else if (level === \"close\") {\n distance = 0;\n }\n return distance;\n }\n\n /**\n * Check if there are multiple levels.\n */\n this.containsLevels = () => {\n if (this.levels && this.levels.length > 1) {\n return true;\n }\n return false;\n }\n\n /**\n * Check if material is transparent, create secondary mesh\n * for better rendering if required.\n */\n this.checkTransparentMesh = () => {\n const level = this.levels[this._currentLevel];\n if (this._material) {\n if (this._material.transparent) {\n if (!this._secondaryMaterial) {\n this._secondaryMaterial = this._material.clone();\n this._secondaryMaterial.side = THREE.FrontSide;\n }\n this._secondaryMaterial.opacity = this._material.opacity;\n if (this._secondaryMaterial.emissive) {\n this._secondaryMaterial.emissive.copy(this._material.emissive);\n }\n this._secondaryMaterial.needsUpdate = true;\n // THREE.Mesh - for utilities purpose such as rendering \n // transparent surfaces - one for front face and one for back face.\n if (!level.secondaryMesh) {\n level.secondaryMesh = new THREE.Mesh(level.morph.geometry,\n this._secondaryMaterial);\n level.secondaryMesh.renderOrder = level.morph.renderOrder + 1;\n level.secondaryMesh.userData = level.morph.userData;\n level.secondaryMesh.name = level.morph.name;\n }\n this._material.side = THREE.BackSide;\n this._material.needsUpdate = true;\n if (!level.secondaryMesh.parent) {\n level.morph.add(level.secondaryMesh);\n if (this._parent.animationGroup) {\n this._parent.animationGroup.add(level.secondaryMesh);\n }\n }\n } else {\n if (level.secondaryMesh) {\n //Do not delete this mesh, remove it from\n //rendering and animation group instead\n level.morph.remove(level.secondaryMesh);\n if (this._parent.animationGroup) {\n this._parent.animationGroup.uncache(level.secondaryMesh);\n this._parent.animationGroup.remove(level.secondaryMesh);\n }\n }\n this._material.side = THREE.DoubleSide;\n this._material.needsUpdate = true;\n }\n }\n }\n\n this.dispose = () => {\n this.levels.forEach((level) => {\n if (level.morph && level.morph.geometry) {\n level.morph.geometry.dispose();\n }\n });\n if (this._material) {\n this._material.dispose();\n }\n if (this._secondaryMaterial) {\n this._secondaryMaterial.dispose();\n }\n }\n\n this.getCurrentLevel = () => {\n return this._currentLevel;\n }\n\n this.getCurrentMorph = () => {\n const level = this.levels[this._currentLevel];\n if (level && level.morph) {\n return level.morph;\n }\n return this._parent.morph;\n }\n\n /**\n * Loader for lod object\n */\n this.lodLoader = function (distance) {\n return (geometryIn) => {\n const material = this._material;\n const options = {\n localTimeEnabled: this._parent.timeEnabled,\n localMorphColour: this._parent.morphColour,\n }\n const geometry = toBufferGeometry(geometryIn, options);\n let mesh = undefined;\n if (this._parent.isGeometry) {\n mesh = new THREE.Mesh(geometry, material);\n } else if (this._parent.isLines) {\n mesh = new (require(\"../three/line/LineSegments\").LineSegments)(geometry, material);\n }\n mesh.userData = this._parent;\n mesh.renderOrder = this._renderOrder;\n geometryIn.dispose();\n this.levelLoaded(mesh, distance);\n };\n }\n\n this.updateMorphColorAttribute = (currentOnly) => {\n //Multilayers - set all\n if (this._material) {\n if ((this._material.vertexColors == THREE.VertexColors) ||\n (this._material.vertexColors == true)) {\n if (currentOnly) {\n const morph = this.getCurrentMorph();\n updateMorphColorAttribute(morph.geometry, morph);\n } else {\n this.levels.forEach((level) => {\n if (level.morph && level.morph.geometry) {\n updateMorphColorAttribute(level.morph.geometry, level.morph);\n }\n });\n }\n }\n }\n }\n\n this.setColour = (colour) => {\n this._material.color = colour;\n if (this._secondaryMaterial) {\n this._secondaryMaterial.color = colour;\n }\n updateGeometryColour();\n }\n\n this.setFrustumCulled = (flag) => {\n this.levels.forEach((level) => {\n if (level.morph) {\n level.morph.frustumCulled = flag;\n }\n if (level.secondaryMesh) {\n level.secondaryMesh.frustumCulled = flag;\n }\n });\n }\n\n this.setMaterial = (material) => {\n if (material) {\n if (!this._material || (this._material.id !== material.id)) {\n this._material = material;\n if (this._secondaryMaterial) {\n this._secondaryMaterial.dispose();\n }\n this._secondaryMaterial = material.clone()\n this._secondaryMaterial.side = THREE.FrontSide;\n this._secondaryMaterial.transparent = true;\n this.levels.forEach((level) => {\n if (level.morph) {\n level.morph.material = this._material;\n if (level.morph.geometry) {\n level.morph.geometry.colorsNeedUpdate = true;\n }\n }\n if (level.secondaryMesh) {\n level.secondaryMesh.material = this._secondaryMaterial;\n }\n });\n }\n }\n }\n\n this.setName = (name) => {\n this.levels.forEach((level) => {\n if (level.morph) {\n level.morph.name = name;\n }\n if (level.secondaryMesh) {\n level.secondaryMesh.name = name;\n }\n });\n }\n\n this.setRenderOrder = (order) => {\n this._renderOrder = order;\n this.levels.forEach((level) => {\n if (level.morph) {\n level.morph.renderOrder = order;\n }\n if (level.secondaryMesh) {\n level.secondaryMesh.renderOrder = order;\n }\n });\n }\n\n this.setVertexColors = (vertexColors) => {\n this._material.vertexColors = vertexColors;\n updateGeometryColour();\n if (this._secondaryMaterial) {\n this._secondaryMaterial.vertexColors = vertexColors;\n }\n }\n\n /* Update layers based on the */\n this.update = (camera, center) => {\n const levels = this.levels;\n if (levels.length > 1) {\n const distance = camera.cameraObject.position.distanceTo(center);\n let visibleIndex = -1;\n let optimalIndex = -1;\n let i, l;\n //Found a visible index that is within range of the LOD\n for (i = 0, l = levels.length; i < l; i++) {\n if (distance >= levels[i].distance) {\n //Check if a level is loading\n if (levels[i].morph) {\n if (visibleIndex > -1 && levels[visibleIndex].morph) {\n levels[visibleIndex].morph.visible = false;\n }\n visibleIndex = i;\n levels[i].morph.visible = true;\n optimalIndex = -1;\n }\n else {\n optimalIndex = i;\n }\n } else {\n break;\n }\n }\n if (optimalIndex > -1) {\n this.loadLevel(optimalIndex);\n }\n for (; i < l; i++) {\n if (levels[i].morph) {\n //Set visibility of other morph to false\n //and set the closest lod to true if\n //none is found\n if (visibleIndex > -1) {\n levels[i].morph.visible = false;\n } else {\n levels[i].morph.visible = true;\n visibleIndex = i;\n }\n }\n }\n if (this._currentLevel != visibleIndex) {\n this._currentLevel = visibleIndex;\n this.checkTransparentMesh();\n }\n }\n }\n\n this.toggleMarker = (marker, flag) => {\n this.levels.forEach((level) => {\n if (level.morph) {\n if (flag) {\n level.morph.add(marker);\n } else {\n level.morph.remove(marker);\n }\n }\n });\n }\n\n const updateGeometryColour = () => {\n this.levels.forEach((level) => {\n if (level.morph && level.morph.geometry) {\n level.morph.geometry.colorsNeedUpdate = true;\n }\n });\n }\n}\n\nexports.LOD = LOD;\n","import { Line } from './Line.js';\nimport {\n Float32BufferAttribute,\n\tVector3\n} from 'three';\n\nconst _start = /*@__PURE__*/ new Vector3();\nconst _end = /*@__PURE__*/ new Vector3();\n\nclass LineSegments extends Line {\n\n\tconstructor( geometry, material ) {\n\n\t\tsuper( geometry, material );\n\n\t\tthis.type = 'LineSegments';\n\n\t}\n\n\tcomputeLineDistances() {\n\n\t\tconst geometry = this.geometry;\n\n\t\tif ( geometry.isBufferGeometry ) {\n\n\t\t\t// we assume non-indexed geometry\n\n\t\t\tif ( geometry.index === null ) {\n\n\t\t\t\tconst positionAttribute = geometry.attributes.position;\n\t\t\t\tconst lineDistances = [];\n\n\t\t\t\tfor ( let i = 0, l = positionAttribute.count; i < l; i += 2 ) {\n\n\t\t\t\t\t_start.fromBufferAttribute( positionAttribute, i );\n\t\t\t\t\t_end.fromBufferAttribute( positionAttribute, i + 1 );\n\n\t\t\t\t\tlineDistances[ i ] = ( i === 0 ) ? 0 : lineDistances[ i - 1 ];\n\t\t\t\t\tlineDistances[ i + 1 ] = lineDistances[ i ] + _start.distanceTo( _end );\n\n\t\t\t\t}\n\n\t\t\t\tgeometry.setAttribute( 'lineDistance', new Float32BufferAttribute( lineDistances, 1 ) );\n\n\t\t\t} else {\n\n\t\t\t\tconsole.warn( 'THREE.LineSegments.computeLineDistances(): Computation only possible with non-indexed BufferGeometry.' );\n\n\t\t\t}\n\n\t\t} else if ( geometry.isGeometry ) {\n\n\t\t\tconsole.error( 'THREE.LineSegments.computeLineDistances() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.' );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n}\n\nLineSegments.prototype.isLineSegments = true;\n\nexport { LineSegments };","import {\n BufferGeometry,\n Float32BufferAttribute,\n LineBasicMaterial,\n\tMatrix4,\n Object3D,\n Ray,\n\tSphere,\n\tVector3\n} from 'three';\n\n\nconst _start = /*@__PURE__*/ new Vector3();\nconst _end = /*@__PURE__*/ new Vector3();\nconst _inverseMatrix = /*@__PURE__*/ new Matrix4();\nconst _ray = /*@__PURE__*/ new Ray();\nconst _sphere = /*@__PURE__*/ new Sphere();\nconst _morphA = /*@__PURE__*/ new Vector3();\nconst _morphB = /*@__PURE__*/ new Vector3();\nconst _tempA = /*@__PURE__*/ new Vector3();\nconst _tempB = /*@__PURE__*/ new Vector3();\n\nclass Line extends Object3D {\n\n\tconstructor( geometry = new BufferGeometry(), material = new LineBasicMaterial() ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'Line';\n\n\t\tthis.geometry = geometry;\n\t\tthis.material = material;\n\n\t\tthis.updateMorphTargets();\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.material = source.material;\n\t\tthis.geometry = source.geometry;\n\n\t\treturn this;\n\n\t}\n\n\tcomputeLineDistances() {\n\n\t\tconst geometry = this.geometry;\n\n\t\tif ( geometry.isBufferGeometry ) {\n\n\t\t\t// we assume non-indexed geometry\n\n\t\t\tif ( geometry.index === null ) {\n\n\t\t\t\tconst positionAttribute = geometry.attributes.position;\n\t\t\t\tconst lineDistances = [ 0 ];\n\n\t\t\t\tfor ( let i = 1, l = positionAttribute.count; i < l; i ++ ) {\n\n\t\t\t\t\t_start.fromBufferAttribute( positionAttribute, i - 1 );\n\t\t\t\t\t_end.fromBufferAttribute( positionAttribute, i );\n\n\t\t\t\t\tlineDistances[ i ] = lineDistances[ i - 1 ];\n\t\t\t\t\tlineDistances[ i ] += _start.distanceTo( _end );\n\n\t\t\t\t}\n\n\t\t\t\tgeometry.setAttribute( 'lineDistance', new Float32BufferAttribute( lineDistances, 1 ) );\n\n\t\t\t} else {\n\n\t\t\t\tconsole.warn( 'THREE.Line.computeLineDistances(): Computation only possible with non-indexed BufferGeometry.' );\n\n\t\t\t}\n\n\t\t} else if ( geometry.isGeometry ) {\n\n\t\t\tconsole.error( 'THREE.Line.computeLineDistances() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.' );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\traycast( raycaster, intersects ) {\n\n\t\tconst geometry = this.geometry;\n\t\tconst matrixWorld = this.matrixWorld;\n\t\tconst threshold = raycaster.params.Line.threshold;\n const drawRange = geometry.drawRange;\n const morphPosition = geometry.morphAttributes.position;\n\n\t\t// Checking boundingSphere distance to ray\n\n\t\tif ( geometry.boundingSphere === null ) geometry.computeBoundingSphere();\n\n\t\t_sphere.copy( geometry.boundingSphere );\n\t\t_sphere.applyMatrix4( matrixWorld );\n\t\t_sphere.radius += threshold;\n\n\t\tif ( raycaster.ray.intersectsSphere( _sphere ) === false ) return;\n\n\t\t//\n\n\t\t_inverseMatrix.copy( matrixWorld ).invert();\n\t\t_ray.copy( raycaster.ray ).applyMatrix4( _inverseMatrix );\n\n\t\tconst localThreshold = threshold / ( ( this.scale.x + this.scale.y + this.scale.z ) / 3 );\n\t\tconst localThresholdSq = localThreshold * localThreshold;\n\n\t\tconst vStart = new Vector3();\n\t\tconst vEnd = new Vector3();\n\t\tconst interSegment = new Vector3();\n\t\tconst interRay = new Vector3();\n\t\tconst step = this.isLineSegments ? 2 : 1;\n\n\t\tif ( geometry.isBufferGeometry ) {\n\n\t\t\tconst index = geometry.index;\n\t\t\tconst attributes = geometry.attributes;\n\t\t\tconst positionAttribute = attributes.position;\n\n\t\t\tif ( index !== null ) {\n\n\t\t\t\tconst start = Math.max( 0, drawRange.start );\n\t\t\t\tconst end = Math.min( index.count, ( drawRange.start + drawRange.count ) );\n\n\t\t\t\tfor ( let i = start, l = end - 1; i < l; i += step ) {\n\n\t\t\t\t\tconst a = index.getX( i );\n const b = index.getX( i + 1 );\n \n calculatePosition( vStart, vEnd, this, positionAttribute, morphPosition, a, b );\n\n\t\t\t\t\tconst distSq = _ray.distanceSqToSegment( vStart, vEnd, interRay, interSegment );\n\n\t\t\t\t\tif ( distSq > localThresholdSq ) continue;\n\n\t\t\t\t\tinterRay.applyMatrix4( this.matrixWorld ); //Move back to world space for distance calculation\n\n\t\t\t\t\tconst distance = raycaster.ray.origin.distanceTo( interRay );\n\n\t\t\t\t\tif ( distance < raycaster.near || distance > raycaster.far ) continue;\n\n\t\t\t\t\tintersects.push( {\n\n\t\t\t\t\t\tdistance: distance,\n\t\t\t\t\t\t// What do we want? intersection point on the ray or on the segment??\n\t\t\t\t\t\t// point: raycaster.ray.at( distance ),\n\t\t\t\t\t\tpoint: interSegment.clone().applyMatrix4( this.matrixWorld ),\n\t\t\t\t\t\tindex: i,\n\t\t\t\t\t\tface: null,\n\t\t\t\t\t\tfaceIndex: null,\n\t\t\t\t\t\tobject: this\n\n\t\t\t\t\t} );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tconst start = Math.max( 0, drawRange.start );\n\t\t\t\tconst end = Math.min( positionAttribute.count, ( drawRange.start + drawRange.count ) );\n\n\t\t\t\tfor ( let i = start, l = end - 1; i < l; i += step ) {\n\n calculatePosition( vStart, vEnd, this, positionAttribute, morphPosition, i, i+1 );\n\n\t\t\t\t\tconst distSq = _ray.distanceSqToSegment( vStart, vEnd, interRay, interSegment );\n\n\t\t\t\t\tif ( distSq > localThresholdSq ) continue;\n\n\t\t\t\t\tinterRay.applyMatrix4( this.matrixWorld ); //Move back to world space for distance calculation\n\n\t\t\t\t\tconst distance = raycaster.ray.origin.distanceTo( interRay );\n\n\t\t\t\t\tif ( distance < raycaster.near || distance > raycaster.far ) continue;\n\n\t\t\t\t\tintersects.push( {\n\n\t\t\t\t\t\tdistance: distance,\n\t\t\t\t\t\t// What do we want? intersection point on the ray or on the segment??\n\t\t\t\t\t\t// point: raycaster.ray.at( distance ),\n\t\t\t\t\t\tpoint: interSegment.clone().applyMatrix4( this.matrixWorld ),\n\t\t\t\t\t\tindex: i,\n\t\t\t\t\t\tface: null,\n\t\t\t\t\t\tfaceIndex: null,\n\t\t\t\t\t\tobject: this\n\n\t\t\t\t\t} );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else if ( geometry.isGeometry ) {\n\n\t\t\tconsole.error( 'THREE.Line.raycast() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.' );\n\n\t\t}\n\n\t}\n\n\tupdateMorphTargets() {\n\n\t\tconst geometry = this.geometry;\n\n\t\tif ( geometry.isBufferGeometry ) {\n\n\t\t\tconst morphAttributes = geometry.morphAttributes;\n\t\t\tconst keys = Object.keys( morphAttributes );\n\n\t\t\tif ( keys.length > 0 ) {\n\n\t\t\t\tconst morphAttribute = morphAttributes[ keys[ 0 ] ];\n\n\t\t\t\tif ( morphAttribute !== undefined ) {\n\n\t\t\t\t\tthis.morphTargetInfluences = [];\n\t\t\t\t\tthis.morphTargetDictionary = {};\n\n\t\t\t\t\tfor ( let m = 0, ml = morphAttribute.length; m < ml; m ++ ) {\n\n\t\t\t\t\t\tconst name = morphAttribute[ m ].name || String( m );\n\n\t\t\t\t\t\tthis.morphTargetInfluences.push( 0 );\n\t\t\t\t\t\tthis.morphTargetDictionary[ name ] = m;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tconst morphTargets = geometry.morphTargets;\n\n\t\t\tif ( morphTargets !== undefined && morphTargets.length > 0 ) {\n\n\t\t\t\tconsole.error( 'THREE.Line.updateMorphTargets() does not support THREE.Geometry. Use THREE.BufferGeometry instead.' );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n}\n\nfunction calculatePosition( vStart, vEnd, object, position, morphPosition, a, b )\t{\n\n vStart.fromBufferAttribute( position, a );\n vEnd.fromBufferAttribute( position, b );\n\n var morphInfluences = object.morphTargetInfluences;\n\n if ( object.material.morphTargets && morphPosition && morphInfluences ) {\n\n _morphA.set( 0, 0, 0 );\n _morphB.set( 0, 0, 0 );\n\n for ( var i = 0, il = morphPosition.length; i < il; i ++ ) {\n\n var influence = morphInfluences[ i ];\n var morphAttribute = morphPosition[ i ];\n\n if ( influence === 0 ) continue;\n\n _tempA.fromBufferAttribute( morphAttribute, a );\n _tempB.fromBufferAttribute( morphAttribute, b );\n\n _morphA.addScaledVector( _tempA.sub( vStart ), influence );\n _morphB.addScaledVector( _tempB.sub( vEnd ), influence );\n\n }\n\n vStart.add( _morphA );\n vEnd.add( _morphB );\n\n }\n\n}\n\nLine.prototype.isLine = true;\n\n\nexport { Line };","var THREE = require('three');\nconst markerImage = new Image(128, 128);\nmarkerImage.src = require(\"../assets/mapMarker.svg\");\nconst texture = new THREE.Texture();\ntexture.image = markerImage;\ntexture.needsUpdate = true;\nconst size = [0.02, 0.03, 1];\nconst spriteMaterial = new THREE.SpriteMaterial({\n map: texture,\n alphaTest: 0.5,\n transparent: true,\n depthTest: false,\n depthWrite: false,\n sizeAttenuation: false\n});\nconst createNewSpriteText = require('../utilities').createNewSpriteText;\n\n/**\n * A special graphics type with a tear drop shape.\n * It is currently used to mark the location of a\n * {@link zincObject}.\n * \n * @class\n * @author Alan Wu\n * @return {Marker}\n */\nconst Marker = function(zincObject) {\n (require('./zincObject').ZincObject).call(this);\n this.texture = texture;\n let sprite = undefined;\n let userTexture = undefined;\n let userMaterial = undefined;\n let userSprite = undefined;\n let userUrl = undefined;\n let defaultDisplay = true;\n this.morph = new THREE.Group();\n this.group = this.morph;\n this.parent = zincObject;\n this.isMarker = true;\n let enabled = false;\n this.ndc = new THREE.Vector3();\n let number = undefined;\n let label = undefined;\n\n\tlet initialise = () => { \n sprite = new THREE.Sprite(spriteMaterial);\n sprite.center.set(0.5, 0);\n this.morph.add(sprite);\n this.morph.position.set(0, 0, 0);\n this.morph.renderOrder = 10000;\n sprite.scale.set(size[0], size[1], size[2]);\n sprite.userData = this;\n }\n\n this.updateVisual = (min, max) => {\n let scale = 1;\n let porportion = 0;\n if (min !== max) {\n porportion = (1 - (this.ndc.z - min) / (max - min));\n scale = 0.6 + porportion * 0.4;\n }\n this.setSpriteSize(scale);\n }\n\n this.updateNDC = camera => {\n this.ndc.copy(this.morph.position);\n this.ndc.project(camera);\n this.ndc.z = Math.min(Math.max(this.ndc.z, 0), 1);\n return this.ndc;\n }\n\n /**\n * Set the position of the marker.\n * \n * @param {Number} x - x coordinate to be set.\n * @param {Number} y - y coordinate to be set.\n * @param {Number} z - z coordinate to be set.\n */\n this.setPosition = (x, y, z) => {\n this.morph.position.set(x, y, z);\n }\n\n /**\n * Set the size of the marker.\n * \n * @param {Number} size - size to be set.\n */ \n this.setSpriteSize = size => {\n sprite.scale.set(0.015, 0.02, 1);\n sprite.scale.multiplyScalar(size);\n }\n\n this.setUserSprite = () => {\n if (userSprite) {\n this.morph.add(userSprite);\n if (defaultDisplay) {\n this.morph.remove(sprite);\n if (label) {\n this.morph.remove(label);\n }\n defaultDisplay = false;\n }\n }\n }\n\n this.setImageForUserSprite = (image, size) => {\n if (userSprite) {\n this.morph.remove(userSprite);\n userSprite = undefined;\n }\n if (userTexture) userTexture.dispose();\n if (userMaterial) userMaterial.dispose();\n userTexture = new THREE.Texture();\n userTexture.image = image;\n userTexture.needsUpdate = true;\n userMaterial = new THREE.SpriteMaterial({\n map: userTexture,\n alphaTest: 0.5,\n transparent: true,\n depthTest: false,\n depthWrite: false,\n sizeAttenuation: false\n });\n if (!size) {\n size = [0.05, 0.05, 1];\n }\n userSprite = new THREE.Sprite(userMaterial);\n userSprite.center.set(0.5, 0);\n userSprite.scale.set(size[0], size[1], size[2]);\n userSprite.userData = this;\n this.setUserSprite();\n }\n\n this.setDefaultSprite = () => {\n if (!defaultDisplay) {\n defaultDisplay = true;\n this.morph.add(sprite);\n if (userSprite) this.morph.remove(userSprite);\n if (label) this.morph.add(label);\n }\n }\n\n this.loadUserSprite = (url, size) => {\n if (url) {\n if (url !== userUrl) {\n userUrl = url;\n const userImage = new Image(128, 128);\n userImage.crossOrigin = \"anonymous\"\n userImage.onload = () => {\n this.setImageForUserSprite(userImage, size);\n };\n userImage.src = url;\n } else {\n this.setUserSprite();\n }\n }\n }\n\n /**\n * Clean up this object,\n */ \n this.dispose = () => {\n if (this.morph) {\n this.morph.clear();\n }\n if (sprite) {\n sprite.clear();\n sprite = undefined;\n }\n if (label) {\n label.material.map.dispose();\n label.material.dispose();\n label = undefined;\n }\n }\n\n this.isEnabled = () => {\n return enabled;\n }\n\n this.setNumber = (numberIn) => {\n if (!numberIn || (number != numberIn)) {\n //remove label\n if (label) {\n this.morph.remove(label);\n label.material.map.dispose();\n label.material.dispose();\n label = undefined;\n }\n }\n if (!label && numberIn) {\n label = createNewSpriteText(numberIn, 0.012, \"black\", \"Asap\", 120, 700);\n this.morph.add(label);\n }\n number = numberIn;\n }\n\n this.getNumber = () => {\n return number ? number : 1;\n }\n\n /**\n * Set the visibility of this Geometry.\n * \n * @param {Boolean} visible - a boolean flag indicate the visibility to be set \n */\n this.setVisibility = function(visible) {\n if (visible !== this.visible) {\n this.visible = visible;\n this.group.visible = visible;\n if (this.parent.region) this.parent.region.pickableUpdateRequired = true;\n }\n }\n\n /**\n * Enable and visualise the marker.\n */ \n this.enable = () => {\n enabled = true;\n this.morph.visible = true;\n this.visible = true;\n }\n\n /**\n * Disable and hide the marker.\n */ \n this.disable = () => {\n enabled = false;\n this.morph.visible = false;\n this.visible = false;\n }\n\n\tinitialise();\n\n}\n\nMarker.prototype = Object.create((require('./zincObject').ZincObject).prototype);\nexports.Marker = Marker;\n","module.exports = \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIiA/Pg0KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj4NCjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgdmVyc2lvbj0iMS4xIiB3aWR0aD0iMzY1IiBoZWlnaHQ9IjU2MCIgdmlld0JveD0iMCAwIDM2NSA1NjAiIHhtbDpzcGFjZT0icHJlc2VydmUiPg0KPGRlc2M+Q3JlYXRlZCB3aXRoIEZhYnJpYy5qcyA1LjIuNDwvZGVzYz4NCjxkZWZzPg0KPC9kZWZzPg0KPHJlY3QgeD0iMCIgeT0iMCIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgZmlsbD0idHJhbnNwYXJlbnQiPjwvcmVjdD4NCjxnIHRyYW5zZm9ybT0ibWF0cml4KDAgMCAwIDAgMCAwKSIgaWQ9IjgwOGVkMjgzLTI1MjQtNDQwZi04OGFlLTNiZGI0N2JiNTc0OSIgID4NCjwvZz4NCjxnIHRyYW5zZm9ybT0ibWF0cml4KDEgMCAwIDEgMTgyLjUgMjgwKSIgaWQ9ImRiMzA0MTNkLTViZmYtNGI5OC1hYjU5LTQ2NDQ5N2VlMTk5ZSIgID4NCjxyZWN0IHN0eWxlPSJzdHJva2U6IG5vbmU7IHN0cm9rZS13aWR0aDogMTsgc3Ryb2tlLWRhc2hhcnJheTogbm9uZTsgc3Ryb2tlLWxpbmVjYXA6IGJ1dHQ7IHN0cm9rZS1kYXNob2Zmc2V0OiAwOyBzdHJva2UtbGluZWpvaW46IG1pdGVyOyBzdHJva2UtbWl0ZXJsaW1pdDogNDsgZmlsbDogcmdiKDI1NSwyNTUsMjU1KTsgZmlsbC1ydWxlOiBub256ZXJvOyBvcGFjaXR5OiAxOyB2aXNpYmlsaXR5OiBoaWRkZW47IiB2ZWN0b3ItZWZmZWN0PSJub24tc2NhbGluZy1zdHJva2UiICB4PSItMTgyLjUiIHk9Ii0yODAiIHJ4PSIwIiByeT0iMCIgd2lkdGg9IjM2NSIgaGVpZ2h0PSI1NjAiIC8+DQo8L2c+DQo8ZyB0cmFuc2Zvcm09Im1hdHJpeCgwIDAgMCAwIDAgOTcuNSkiICA+DQo8ZyBzdHlsZT0iIiAgID4NCjwvZz4NCjwvZz4NCjxnIHRyYW5zZm9ybT0ibWF0cml4KDAgMCAwIDAgMCA5Ny41KSIgID4NCjxnIHN0eWxlPSIiICAgPg0KPC9nPg0KPC9nPg0KPGcgdHJhbnNmb3JtPSJtYXRyaXgoMC45OSAwIDAgMC45OSAxODIuNSAyODApIiAgPg0KPGcgc3R5bGU9IiIgdmVjdG9yLWVmZmVjdD0ibm9uLXNjYWxpbmctc3Ryb2tlIiAgID4NCgkJPGcgdHJhbnNmb3JtPSJtYXRyaXgoMSAwIDAgMSAwIDApIiAgPg0KPHJlY3Qgc3R5bGU9InN0cm9rZTogbm9uZTsgc3Ryb2tlLXdpZHRoOiAxOyBzdHJva2UtZGFzaGFycmF5OiBub25lOyBzdHJva2UtbGluZWNhcDogYnV0dDsgc3Ryb2tlLWRhc2hvZmZzZXQ6IDA7IHN0cm9rZS1saW5lam9pbjogbWl0ZXI7IHN0cm9rZS1taXRlcmxpbWl0OiA0OyBmaWxsOiByZ2IoMjU1LDI1NSwyNTUpOyBmaWxsLXJ1bGU6IG5vbnplcm87IG9wYWNpdHk6IDE7IHZpc2liaWxpdHk6IGhpZGRlbjsiIHZlY3Rvci1lZmZlY3Q9Im5vbi1zY2FsaW5nLXN0cm9rZSIgIHg9Ii01NDAiIHk9Ii01NDAiIHJ4PSIwIiByeT0iMCIgd2lkdGg9IjEwODAiIGhlaWdodD0iMTA4MCIgLz4NCjwvZz4NCgkJPGcgdHJhbnNmb3JtPSJtYXRyaXgoMSAwIDAgMSAwIDApIiAgPg0KPHBhdGggc3R5bGU9InN0cm9rZTogcmdiKDAsMCwwKTsgc3Ryb2tlLXdpZHRoOiAwOyBzdHJva2UtZGFzaGFycmF5OiBub25lOyBzdHJva2UtbGluZWNhcDogYnV0dDsgc3Ryb2tlLWRhc2hvZmZzZXQ6IDA7IHN0cm9rZS1saW5lam9pbjogbWl0ZXI7IHN0cm9rZS1taXRlcmxpbWl0OiA0OyBmaWxsOiByZ2IoMCw4OSwxMTYpOyBmaWxsLXJ1bGU6IG5vbnplcm87IG9wYWNpdHk6IDE7IiB2ZWN0b3ItZWZmZWN0PSJub24tc2NhbGluZy1zdHJva2UiICB0cmFuc2Zvcm09IiB0cmFuc2xhdGUoLTE4Mi45LCAtMjc5Ljg1KSIgZD0iTSAxODIuOSA1NTEuNyBDIDE4Mi45IDU1MS44MDAwMDAwMDAwMDAxIDE4My4xIDU1MiAxODMuMSA1NTIgQyAxODMuMSA1NTIgMzU4LjMgMjgzIDM1OC4zIDE5NC42IEMgMzU4LjMgNjQuNSAyNjkuNSA3LjkwMDAwMDAwMDAwMDAwNiAxODIuOSA3LjY5OTk5OTk5OTk5OTk4OSBDIDk2LjMgNy45IDcuNSA2NC41IDcuNSAxOTQuNiBDIDcuNSAyODMgMTgyLjggNTUyIDE4Mi44IDU1MiBDIDE4Mi44IDU1MiAxODIuOSA1NTEuNyAxODIuOSA1NTEuNyB6IE0gMTIyLjIgMTg3LjIgQyAxMjIuMiAxNTMuNiAxNDkuNCAxMjYuMzk5OTk5OTk5OTk5OTkgMTgzIDEyNi4zOTk5OTk5OTk5OTk5OSBDIDIxNi42IDEyNi4zOTk5OTk5OTk5OTk5OSAyNDMuOCAxNTMuNiAyNDMuOCAxODcuMiBDIDI0My44IDIyMC43OTk5OTk5OTk5OTk5OCAyMTYuNSAyNDggMTgyLjkgMjQ4IEMgMTQ5LjQgMjQ4IDEyMi4yIDIyMC44IDEyMi4yIDE4Ny4yIHoiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgLz4NCjwvZz4NCgkJPGcgdHJhbnNmb3JtPSJtYXRyaXgoMy44MiAwIDAgMy44MiAwIC0xMDAuNzcpIiAgPg0KPGNpcmNsZSBzdHlsZT0ic3Ryb2tlOiByZ2IoMCwwLDApOyBzdHJva2Utd2lkdGg6IDA7IHN0cm9rZS1kYXNoYXJyYXk6IG5vbmU7IHN0cm9rZS1saW5lY2FwOiBidXR0OyBzdHJva2UtZGFzaG9mZnNldDogMDsgc3Ryb2tlLWxpbmVqb2luOiBtaXRlcjsgc3Ryb2tlLW1pdGVybGltaXQ6IDQ7IGZpbGw6IHJnYigyNTUsMjU1LDI1NSk7IGZpbGwtcnVsZTogbm9uemVybzsgb3BhY2l0eTogMTsiIHZlY3Rvci1lZmZlY3Q9Im5vbi1zY2FsaW5nLXN0cm9rZSIgIGN4PSIwIiBjeT0iMCIgcj0iMzUiIC8+DQo8L2c+DQo8L2c+DQo8L2c+DQo8L3N2Zz4=\"","const THREE = require('three');\n\n/**\n * Zinc representation of glyph graphic, it contains the colours, \n * geometry and transformation of the glyph.\n * \n * @param {THREE.Geometry} geometry - Geometry of the glyph .\n * @param {THREE.Material} materialIn - Material of the glyph.\n * @param {Number} idIn - Id of the glyph.\n * \n * @class\n * @author Alan Wu\n * @return {Glyph}\n */\nconst Glyph = function (geometry, materialIn, idIn, glyphsetIn) {\n (require('./zincObject').ZincObject).call(this);\n let material = undefined;\n if (materialIn) {\n material = materialIn.clone();\n material.vertexColors = THREE.FaceColors;\n }\n const parent = glyphsetIn;\n this.id = idIn;\n let label = undefined;\n let labelString = undefined;\n this.isGlyph = true;\n let _position = [0, 0, 0];\n\n /**\n * Create a glyph using mesh\n * @param {THREE.Mesh} meshIn - Mesh to create the glyph from\n *\n * @returns {Boolean} true if successful\n */\n this.fromMesh = meshIn => {\n if (meshIn && meshIn.isMesh) {\n this.morph = meshIn.clone();\n this.morph.userData = this;\n this.group.add(this.morph);\n return true;\n }\n return false;\n }\n\n if (geometry && material) {\n this.fromMesh(new THREE.Mesh(geometry, material));\n }\n\n /**\n * Get the {Glyphset} containing this glyph.\n *\n * @returns {Boolean} true if successful\n */\n this.getGlyphset = function () {\n return parent;\n }\n\n /**\n * Set and update the text containing this glyph.\n * @param {String} text - Label to be set for this instance\n */\n this.setLabel = text => {\n if (text && (typeof text === 'string' || text instanceof String)) {\n labelString = text;\n if (this.morph)\n this.morph.name = text;\n }\n }\n\n /**\n * Display label with the choosen colour. It will replace the current\n * label.\n * @param {THREE.Color} colour - Colour for the label.\n */\n this.showLabel = (colour) => {\n if (label) {\n _position = label.getPosition();\n this.group.remove(label.getSprite());\n label.dispose();\n label = undefined;\n }\n if (labelString && (typeof labelString === 'string' || labelString instanceof String)) {\n label = new (require('./label').Label)(labelString, colour);\n label.setPosition(_position[0], _position[1], _position[2]);\n this.group.add(label.getSprite());\n }\n }\n\n /**\n * Hide label with the choosen colour.\n */\n this.hideLabel = () => {\n if (label) {\n _position = label.getPosition();\n this.group.remove(label.getSprite());\n label.dispose();\n label = undefined;\n }\n }\n\n /**\n * Get the label of this glyph\n * @return {Label}\n */\n this.getLabel = () => {\n return labelString;\n }\n\n /**\n * Get the mesh of this glyph.\n * @return {THREE.Mesh}\n */\n this.getMesh = () => {\n return this.morph;\n }\n\n /**\n * Set the transformation of this glyph.\n * @param {Array} position - Three components vectors containing position of the\n * transformation.\n * @param {Array} axis1 - Three components vectors containing axis1 rotation of the\n * transformation.\n * @param {Array} axis2 - Three components vectors containing axis2 rotation of the\n * transformation.\n * @param {Array} position - Three components vectors containing axis3 rotation of the\n * transformation.\n */\n this.setTransformation = (position, axis1, axis2, axis3) => {\n if (this.morph) {\n this.morph.matrix.elements[0] = axis1[0];\n this.morph.matrix.elements[1] = axis1[1];\n this.morph.matrix.elements[2] = axis1[2];\n this.morph.matrix.elements[3] = 0.0;\n this.morph.matrix.elements[4] = axis2[0];\n this.morph.matrix.elements[5] = axis2[1];\n this.morph.matrix.elements[6] = axis2[2];\n this.morph.matrix.elements[7] = 0.0;\n this.morph.matrix.elements[8] = axis3[0];\n this.morph.matrix.elements[9] = axis3[1];\n this.morph.matrix.elements[10] = axis3[2];\n this.morph.matrix.elements[11] = 0.0;\n this.morph.matrix.elements[12] = position[0];\n this.morph.matrix.elements[13] = position[1];\n this.morph.matrix.elements[14] = position[2];\n this.morph.matrix.elements[15] = 1.0;\n this.morph.matrixAutoUpdate = false;\n }\n _position = [...position];\n if (label) {\n label.setPosition(position[0], position[1], position[2]);\n }\n }\n\n /**\n * Set the color of the glyph and its label.\n * \n * @param {THREE.Color} color - Colour to be set.\n */\n this.setColour = (color) => {\n if (label)\n label.setColour(color);\n if (this.secondaryMesh && this.secondaryMesh.material)\n this.secondaryMesh.material.color = colour;\n if (this.geometry) {\n this.geometry.colorsNeedUpdate = true;\n }\n }\n\n /**\n * Clear and free its memory.\n */\n this.dispose = () => {\n if (this.material)\n this.material.dispose();\n this.morph = undefined;\n }\n}\n\nGlyph.prototype = Object.create((require('./zincObject').ZincObject).prototype);\nexports.Glyph = Glyph;\n","const SpriteText = require('three-spritetext').default;\n\n/**\n * Bitmap labels, this is used with {@link Glyph} to \n * provide labels.\n * \n * @param {String} textIn - Text to be displayed dwith the label.\n * @param {THREE.Color} colour - Colour to be set for the label.\n * \n * @class\n * @author Alan Wu\n * @return {Label}\n */\nexports.Label = function (textIn, colour) {\n let text = textIn;\n let sprite = undefined;\n if (colour)\n sprite = new SpriteText(text, 0.015, colour.getStyle());\n else\n sprite = new SpriteText(text, 0.015);\n sprite.fontFace = \"Asap\";\n sprite.fontWeight = 700;\n sprite.material.map.generateMipmaps = false;\n sprite.material.sizeAttenuation = false;\n sprite.center.x = -0.05;\n sprite.center.y = 0;\n\n /**\n * Get the current position in an array containing the x, y and z\n * coordinates.\n * \n * @return {Array}\n */\n this.getPosition = () => {\n if (sprite)\n return [sprite.position.x, sprite.position.y, sprite.position.z];\n return [0, 0, 0];\n }\n\n /**\n * Set the position of the label in 3D coordinates.\n * \n * @param {Number} x - x coordinate to be set.\n * @param {Number} y - y coordinate to be set.\n * @param {Number} z - z coordinate to be set.\n */\n this.setPosition = (x, y, z) => {\n if (sprite) {\n sprite.position.set(x, y, z);\n }\n }\n\n /**\n * Set the colour of the label\n * \n * @param {THREE.Color} colour - colour to be set\n */\n this.setColour = colour => {\n sprite.color = colour.getStyle();\n }\n\n /**\n * Scale the label.\n * \n * @param {Number} scaling - Scale to be set.\n */\n this.setScale = scaling => {\n if (sprite && scaling > 0.0)\n sprite.scale.set(scaling, scaling, 1.0);\n }\n\n /**\n * Free up the memory\n */\n this.dispose = () => {\n //sprite.dispose();\n }\n\n /**\n * Get the intrnal sprite.\n * \n * @return {THREE.Sprite}\n */\n this.getSprite = () => {\n return sprite;\n }\n\n /**\n * Get the text.\n * \n * @return {String}\n */\n this.getString = () => {\n return text;\n }\n\n};\n\n\n\n","const THREE = require('three');\nconst JSONLoader = require('../loaders/JSONLoader').JSONLoader;\n\n/**\n * This is a container of {@link Glyph} and their graphical properties \n * including transformations, colors, number of time steps, duration of animations\n * and group name. Please note that all glyphs in the glyphset share the same geometry\n * however they may have different transformations.\n * \n * @class\n * @author Alan Wu\n * @return {Glyphset}\n */\nconst Glyphset = function () {\n (require('./zincObject').ZincObject).call(this);\n const glyphList = [];\n let axis1s = undefined;\n let axis2s = undefined;\n let axis3s = undefined;\n let positions = undefined;\n let scales = undefined;\n let colors = undefined;\n let labels = undefined;\n let numberOfTimeSteps = 0;\n let numberOfVertices = 0;\n let baseSize = [0, 0, 0];\n let offset = [0, 0, 0];\n let scaleFactors = [0, 0, 0];\n let repeat_mode = \"NONE\";\n this.ready = false;\n let morphColours = false;\n let morphVertices = false;\n this.isGlyphset = true;\n let _transformMatrix = new THREE.Matrix4();\n const _bot_colour = new THREE.Color();\n const _top_colour = new THREE.Color();\n const _boundingBox1 = new THREE.Box3();\n const _boundingBox2 = new THREE.Box3();\n const _boundingBox3 = new THREE.Box3();\n const _points = [];\n const _current_positions = [];\n const _current_axis1s = [];\n const _current_axis2s = [];\n const _current_axis3s = [];\n const _current_scales = [];\n const _current_colors = [];\n const _glyph_axis_array = [];\n this.globalScale = 1;\n for (let i = 0; i < 8; i++) {\n _points[i] = new THREE.Vector3();\n }\n\n /**\n * Copy glyphset data into this glyphset then load the glyph's geoemtry \n * with the provided glyphURL. FinishCallback will be called once\n * glyph is loaded.\n * \n * @param {Array} glyphsetData - contains the informations about the glyphs.\n * @param {String} glyphURL - URL to the geometry which will be applied to all\n * all the glyphs in the glyphset once loaded.\n * @param {Function} finishCallback - User's function to be called once glyph's\n * geometry is loaded.\n */\n this.load = (glyphsetData, glyphURL, finishCallback, isInline, displayLabels) => {\n axis1s = glyphsetData.axis1;\n axis2s = glyphsetData.axis2;\n axis3s = glyphsetData.axis3;\n positions = glyphsetData.positions;\n scales = glyphsetData.scale;\n colors = glyphsetData.colors;\n labels = glyphsetData.label;\n morphColours = glyphsetData.metadata.MorphColours;\n morphVertices = glyphsetData.metadata.MorphVertices;\n numberOfTimeSteps = glyphsetData.metadata.number_of_time_steps;\n repeat_mode = glyphsetData.metadata.repeat_mode;\n numberOfVertices = glyphsetData.metadata.number_of_vertices;\n if (repeat_mode == \"AXES_2D\" || repeat_mode == \"MIRROR\")\n numberOfVertices = numberOfVertices * 2;\n else if (repeat_mode == \"AXES_3D\")\n numberOfVertices = numberOfVertices * 3;\n baseSize = glyphsetData.metadata.base_size;\n offset = glyphsetData.metadata.offset;\n scaleFactors = glyphsetData.metadata.scale_factors;\n const loader = new JSONLoader();\n this.geometry = new THREE.BufferGeometry();\n const instancedMesh = new THREE.InstancedMesh(this.geometry, undefined, numberOfVertices);\n this.setMorph(instancedMesh);\n if (isInline) {\n var object = loader.parse(glyphURL);\n (meshloader(finishCallback, displayLabels))(object.geometry, object.materials);\n object.geometry.dispose();\n } else {\n loader.crossOrigin = \"Anonymous\";\n loader.load(glyphURL, meshloader(finishCallback, displayLabels));\n }\n }\n\n /**\n * Calculate the actual transformation value that can be applied \n * to the transformation matrix.\n * \n * @returns {Array}\n */\n const resolve_glyph_axes = (point, axis1, axis2, axis3, scale, return_arrays) => {\n if (repeat_mode == \"NONE\" || repeat_mode == \"MIRROR\") {\n let axis_scale = [0.0, 0.0, 0.0];\n let final_axis1 = [0.0, 0.0, 0.0];\n let final_axis2 = [0.0, 0.0, 0.0];\n let final_axis3 = [0.0, 0.0, 0.0];\n let final_point = [0.0, 0.0, 0.0];\n const mirrored_axis1 = [0.0, 0.0, 0.0];\n const mirrored_axis2 = [0.0, 0.0, 0.0];\n const mirrored_axis3 = [0.0, 0.0, 0.0];\n const mirrored_point = [0.0, 0.0, 0.0];\n for (var j = 0; j < 3; j++) {\n var sign = (scale[j] < 0.0) ? -1.0 : 1.0;\n axis_scale[j] = (sign * baseSize[j] + scale[j] * scaleFactors[j]) * this.globalScale;\n }\n for (var j = 0; j < 3; j++) {\n final_axis1[j] = axis1[j] * axis_scale[0];\n final_axis2[j] = axis2[j] * axis_scale[1];\n final_axis3[j] = axis3[j] * axis_scale[2];\n final_point[j] = point[j]\n + offset[0] * final_axis1[j]\n + offset[1] * final_axis2[j]\n + offset[2] * final_axis3[j];\n if (repeat_mode == \"MIRROR\") {\n mirrored_axis1[j] = -final_axis1[j];\n mirrored_axis2[j] = -final_axis2[j];\n mirrored_axis3[j] = -final_axis3[j];\n mirrored_point[j] = final_point[j];\n if (scale[0] < 0.0) {\n // shift glyph origin to end of axis1 \n final_point[j] -= final_axis1[j];\n mirrored_point[j] -= mirrored_axis1[j];\n }\n }\n }\n /* if required, reverse axis3 to maintain right-handed coordinate system */\n if (0.0 > (\n final_axis3[0] * (final_axis1[1] * final_axis2[2] -\n final_axis1[2] * final_axis2[1]) +\n final_axis3[1] * (final_axis1[2] * final_axis2[0] -\n final_axis1[0] * final_axis2[2]) +\n final_axis3[2] * (final_axis1[0] * final_axis2[1] -\n final_axis1[1] * final_axis2[0]))) {\n final_axis3[0] = -final_axis3[0];\n final_axis3[1] = -final_axis3[1];\n final_axis3[2] = -final_axis3[2];\n }\n return_arrays[0] = [final_point, final_axis1, final_axis2, final_axis3];\n if (repeat_mode == \"MIRROR\") {\n if (0.0 > (\n mirrored_axis3[0] * (mirrored_axis1[1] * mirrored_axis2[2] -\n mirrored_axis1[2] * mirrored_axis2[1]) +\n mirrored_axis3[1] * (mirrored_axis1[2] * mirrored_axis2[0] -\n mirrored_axis1[0] * mirrored_axis2[2]) +\n mirrored_axis3[2] * (mirrored_axis1[0] * mirrored_axis2[1] -\n mirrored_axis1[1] * mirrored_axis2[0]))) {\n mirrored_axis3[0] = -mirrored_axis3[0];\n mirrored_axis3[1] = -mirrored_axis3[1];\n mirrored_axis3[2] = -mirrored_axis3[2];\n }\n return_arrays[1] = [mirrored_point, mirrored_axis1, mirrored_axis2, mirrored_axis3];\n }\n }\n else if (repeat_mode == \"AXES_2D\" || repeat_mode == \"AXES_3D\") {\n let axis_scale = [0.0, 0.0, 0.0];\n let final_point = [0.0, 0.0, 0.0];\n for (var j = 0; j < 3; j++) {\n var sign = (scale[j] < 0.0) ? -1.0 : 1.0;\n axis_scale[j] = (sign * baseSize[0] + scale[j] * scaleFactors[0]) * this.globalScale;\n }\n for (var j = 0; j < 3; j++) {\n final_point[j] = point[j]\n + offset[0] * axis_scale[0] * axis1[j]\n + offset[1] * axis_scale[1] * axis2[j]\n + offset[2] * axis_scale[2] * axis3[j];\n }\n const number_of_glyphs = (glyph_repeat_mode == \"AXES_2D\") ? 2 : 3;\n for (let k = 0; k < number_of_glyphs; k++) {\n let use_axis1, use_axis2;\n const use_scale = scale[k];\n let final_axis1 = [0.0, 0.0, 0.0];\n let final_axis2 = [0.0, 0.0, 0.0];\n let final_axis3 = [0.0, 0.0, 0.0];\n if (k == 0) {\n use_axis1 = axis1;\n use_axis2 = axis2;\n }\n else if (k == 1) {\n use_axis1 = axis2;\n use_axis2 = (glyph_repeat_mode == \"AXES_2D\") ? axis1 : axis3;\n }\n else // if (k == 2)\n {\n use_axis1 = axis3;\n use_axis2 = axis1;\n }\n const final_scale1 = (baseSize[0] + use_scale * scaleFactors[0]) * this.globalScale;\n final_axis1[0] = use_axis1[0] * final_scale1;\n final_axis1[1] = use_axis1[1] * final_scale1;\n final_axis1[2] = use_axis1[2] * final_scale1;\n final_axis3[0] = final_axis1[1] * use_axis2[2] - use_axis2[1] * final_axis1[2];\n final_axis3[1] = final_axis1[2] * use_axis2[0] - use_axis2[2] * final_axis1[0];\n final_axis3[2] = final_axis1[0] * use_axis2[1] - final_axis1[1] * use_axis2[0];\n let magnitude = Math.sqrt(final_axis3[0] * final_axis3[0] + final_axis3[1] * final_axis3[1] + final_axis3[2] * final_axis3[2]);\n if (0.0 < magnitude) {\n let scaling = (baseSize[2] + use_scale * scaleFactors[2]) * this.globalScale / magnitude;\n if ((repeat_mode == \"AXES_2D\") && (k > 0)) {\n scaling *= -1.0;\n }\n final_axis3[0] *= scaling;\n final_axis3[1] *= scaling;\n final_axis3[2] *= scaling;\n }\n\n final_axis2[0] = final_axis3[1] * final_axis1[2] - final_axis1[1] * final_axis3[2];\n final_axis2[1] = final_axis3[2] * final_axis1[0] - final_axis1[2] * final_axis3[0];\n final_axis2[2] = final_axis3[0] * final_axis1[1] - final_axis3[1] * final_axis1[0];\n magnitude = Math.sqrt(final_axis2[0] * final_axis2[0] + final_axis2[1] * final_axis2[1] + final_axis2[2] * final_axis2[2]);\n if (0.0 < magnitude) {\n var scaling = (baseSize[1] + use_scale * scaleFactors[1]) * this.globalScale / magnitude;\n final_axis2[0] *= scaling;\n final_axis2[1] *= scaling;\n final_axis2[2] *= scaling;\n }\n return_arrays[k] = [final_point, final_axis1, final_axis2, final_axis3];\n }\n }\n return return_arrays;\n };\n\n /**\n * Update transformation for each of the glyph in this glyphset.\n */\n const updateGlyphsetTransformation = (\n current_positions,\n current_axis1s,\n current_axis2s,\n current_axis3s,\n current_scales\n ) => {\n let numberOfGlyphs = 1;\n if (repeat_mode == \"AXES_2D\" || repeat_mode == \"MIRROR\")\n numberOfGlyphs = 2;\n else if (repeat_mode == \"AXES_3D\")\n numberOfGlyphs = 3;\n const numberOfPositions = current_positions.length / 3;\n let current_glyph_index = 0;\n _glyph_axis_array.length = numberOfGlyphs;\n for (let i = 0; i < numberOfPositions; i++) {\n const current_index = i * 3;\n const current_position = [current_positions[current_index], current_positions[current_index + 1],\n current_positions[current_index + 2]];\n const current_axis1 = [current_axis1s[current_index], current_axis1s[current_index + 1],\n current_axis1s[current_index + 2]];\n const current_axis2 = [current_axis2s[current_index], current_axis2s[current_index + 1],\n current_axis2s[current_index + 2]];\n const current_axis3 = [current_axis3s[current_index], current_axis3s[current_index + 1],\n current_axis3s[current_index + 2]];\n const current_scale = [current_scales[current_index], current_scales[current_index + 1],\n current_scales[current_index + 2]];\n const arrays = resolve_glyph_axes(current_position, current_axis1, current_axis2,\n current_axis3, current_scale, _glyph_axis_array);\n if (arrays.length == numberOfGlyphs) {\n for (let j = 0; j < numberOfGlyphs; j++) {\n _transformMatrix.elements[0] = arrays[j][1][0];\n _transformMatrix.elements[1] = arrays[j][1][1];\n _transformMatrix.elements[2] = arrays[j][1][2];\n _transformMatrix.elements[3] = 0.0;\n _transformMatrix.elements[4] = arrays[j][2][0];\n _transformMatrix.elements[5] = arrays[j][2][1];\n _transformMatrix.elements[6] = arrays[j][2][2];\n _transformMatrix.elements[7] = 0.0;\n _transformMatrix.elements[8] = arrays[j][3][0];\n _transformMatrix.elements[9] = arrays[j][3][1];\n _transformMatrix.elements[10] = arrays[j][3][2];\n _transformMatrix.elements[11] = 0.0;\n _transformMatrix.elements[12] = arrays[j][0][0];\n _transformMatrix.elements[13] = arrays[j][0][1];\n _transformMatrix.elements[14] = arrays[j][0][2];\n _transformMatrix.elements[15] = 1.0;\n this.morph.setMatrixAt(current_glyph_index, _transformMatrix);\n const glyph = glyphList[current_glyph_index];\n if (glyph) {\n glyph.setTransformation(arrays[j][0], arrays[j][1],\n arrays[j][2], arrays[j][3]);\n }\n current_glyph_index++;\n }\n }\n }\n this.morph.instanceMatrix.needsUpdate = true;\n };\n\n /**\n * Update colour for each of the glyph in this glyphset.\n */\n const updateGlyphsetHexColors = current_colors => {\n let numberOfGlyphs = 1;\n if (repeat_mode == \"AXES_2D\" || repeat_mode == \"MIRROR\")\n numberOfGlyphs = 2;\n else if (repeat_mode == \"AXES_3D\")\n numberOfGlyphs = 3;\n const numberOfColours = current_colors.length;\n let current_glyph_index = 0;\n for (let i = 0; i < numberOfColours; i++) {\n const hex_values = current_colors[i];\n for (let j = 0; j < numberOfGlyphs; j++) {\n _bot_colour.setHex(hex_values)\n this.morph.setColorAt(current_glyph_index, _bot_colour);\n const glyph = glyphList[current_glyph_index];\n if (glyph)\n glyph.setColour(_bot_colour);\n current_glyph_index++;\n }\n }\n this.morph.instanceColor.needsUpdate = true;\n };\n\n /**\n * Update the current states of the glyphs in this glyphset, this includes transformation and\n * colour for each of them. This is called when glyphset and glyphs are initialised and whenever\n * the internal time has been updated.\n */\n const updateMorphGlyphsets = () => {\n let current_positions = _current_positions;\n let current_axis1s = _current_axis1s;\n let current_axis2s = _current_axis2s;\n let current_axis3s = _current_axis3s;\n let current_scales = _current_scales;\n let current_colors = _current_colors;\n\n const current_time = this.inbuildTime / this.duration * (numberOfTimeSteps - 1);\n const bottom_frame = Math.floor(current_time);\n const proportion = 1 - (current_time - bottom_frame);\n const top_frame = Math.ceil(current_time);\n if (morphVertices) {\n const bottom_positions = positions[bottom_frame.toString()];\n const top_positions = positions[top_frame.toString()];\n const bottom_axis1 = axis1s[bottom_frame.toString()];\n const top_axis1 = axis1s[top_frame.toString()];\n const bottom_axis2 = axis2s[bottom_frame.toString()];\n const top_axis2 = axis2s[top_frame.toString()];\n const bottom_axis3 = axis3s[bottom_frame.toString()];\n const top_axis3 = axis3s[top_frame.toString()];\n const bottom_scale = scales[bottom_frame.toString()];\n const top_scale = scales[top_frame.toString()];\n _current_positions.length = bottom_positions.length;\n _current_axis1s.length = bottom_positions.length;\n _current_axis2s.length = bottom_positions.length;\n _current_axis3s.length = bottom_positions.length;\n _current_scales.length = bottom_positions.length;\n\n for (let i = 0; i < bottom_positions.length; i++) {\n current_positions[i] = proportion * bottom_positions[i] + (1.0 - proportion) * top_positions[i];\n current_axis1s[i] = proportion * bottom_axis1[i] + (1.0 - proportion) * top_axis1[i];\n current_axis2s[i] = proportion * bottom_axis2[i] + (1.0 - proportion) * top_axis2[i];\n current_axis3s[i] = proportion * bottom_axis3[i] + (1.0 - proportion) * top_axis3[i];\n current_scales[i] = proportion * bottom_scale[i] + (1.0 - proportion) * top_scale[i];\n }\n } else {\n current_positions = positions[\"0\"];\n current_axis1s = axis1s[\"0\"];\n current_axis2s = axis2s[\"0\"];\n current_axis3s = axis3s[\"0\"];\n current_scales = scales[\"0\"];\n }\n updateGlyphsetTransformation(current_positions, current_axis1s, current_axis2s, current_axis3s,\n current_scales);\n this.boundingBoxUpdateRequired = true;\n if (colors != undefined) {\n if (morphColours) {\n const bottom_colors = colors[bottom_frame.toString()];\n const top_colors = colors[top_frame.toString()];\n current_colors.length = bottom_colors.length;\n for (let i = 0; i < bottom_colors.length; i++) {\n _bot_colour.setHex(bottom_colors[i]);\n _top_colour.setHex(top_colors[i]);\n _bot_colour.setRGB(_bot_colour.r * proportion + _top_colour.r * (1 - proportion),\n _bot_colour.g * proportion + _top_colour.g * (1 - proportion),\n _bot_colour.b * proportion + _top_colour.b * (1 - proportion));\n current_colors[i] = _bot_colour.getHex();\n }\n /*\n for (var i = 0; i < bottom_colors.length; i++) {\n current_colors.push(proportion * bottom_colors[i] + (1.0 - proportion) * top_colors[i]);\n }\n */\n } else {\n current_colors = colors[\"0\"];\n }\n updateGlyphsetHexColors(current_colors);\n }\n };\n\n /**\n * Display the label of the glyphs in the glyphset.\n */\n this.showLabel = () => {\n for (let i = 0; i < glyphList.length; i++) {\n glyphList[i].showLabel(this.morph.material ? this.morph.material.color : undefined);\n }\n }\n\n /**\n * Hide label with the choosen colour.\n */\n this.hideLabel = () => {\n for (let i = 0; i < glyphList.length; i++) {\n glyphList[i].hideLabel();\n }\n }\n\n /**\n * Create the glyphs in the glyphset.\n * \n * @param {Boolean} displayLabels -Flag to determine either the labels should be display or not.\n */\n const createGlyphs = (displayLabels) => {\n for (let i = 0; i < numberOfVertices; i++) {\n const glyph = new (require('./glyph').Glyph)(undefined, undefined, i, this);\n let label = labels ? labels[i] : undefined;\n label = label ? label : this.groupName;\n if (label) {\n glyph.setLabel(label);\n }\n if (numberOfTimeSteps > 0) {\n glyph.setFrustumCulled(false);\n }\n glyphList[i] = glyph;\n this.morph.add(glyph.getGroup());\n }\n if (displayLabels) {\n this.showLabel();\n }\n //Update the transformation of the glyphs.\n updateGlyphsetTransformation(positions[\"0\"], axis1s[\"0\"],\n axis2s[\"0\"], axis3s[\"0\"], scales[\"0\"]);\n //Update the color of the glyphs.\n if (colors != undefined) {\n updateGlyphsetHexColors(colors[\"0\"]);\n }\n this.ready = true;\n this.boundingBoxUpdateRequired = true;\n };\n\n /**\n * Add a custom {@link Glyph} to this {@link Glyphset}.\n * \n * @param {Glyph} Glyph to be added.\n */\n this.addCustomGlyph = glyph => {\n if (glyph.isGlyph)\n glyphList.push(glyph);\n this.ready = true;\n this.boundingBoxUpdateRequired = true;\n }\n\n /**\n * Add a THREE.Mesh object to be displayed as glyph in this {@link Glyphset}.\n * \n * @param {THREE.Mesh} Mesh to be added.\n * @param {Number} id of the mesh.\n */\n this.addMeshAsGlyph = (mesh, id) => {\n if (mesh.isMesh) {\n const glyph = new (require('./glyph').Glyph)(undefined, undefined, id, this);\n glyph.fromMesh(mesh);\n glyphList.push(glyph);\n this.morph.add(glyph.getGroup())\n this.ready = true;\n this.boundingBoxUpdateRequired = true;\n return glyph;\n }\n return undefined;\n }\n\n /**\n * A function which iterates through the list of glyphs and call the callback\n * function with the glyph as the argument.\n * \n * @param {Function} callbackFunction - Callback function with the glyph\n * as an argument.\n */\n this.forEachGlyph = callbackFunction => {\n for (let i = 0; i < glyphList.length; i++) {\n callbackFunction(glyphList[i]);\n }\n }\n\n var meshloader = (finishCallback, displayLabels) => {\n return (geometry, materials) => {\n const tempGeometry = geometry.toBufferGeometry();\n this.geometry.copy(tempGeometry);\n this.geometry.computeBoundingSphere();\n this.geometry.computeBoundingBox();\n tempGeometry.dispose();\n if (materials && materials[0])\n this.morph.material = materials[0];\n createGlyphs(displayLabels);\n this.morph.name = this.groupName;\n this.morph.userData = this;\n this.setMorph(this.morph);\n geometry.dispose();\n if (finishCallback != undefined && (typeof finishCallback == 'function'))\n finishCallback(this);\n };\n }\n\n /**\n * Get the index of the closest vertex to centroid.\n */\n this.getClosestVertexIndex = function () {\n let closestIndex = -1;\n if (this.morph && this.ready) {\n this.getBoundingBox().getCenter(this._v1);\n let current_positions = positions[\"0\"];\n const numberOfPositions = current_positions.length / 3;\n let distance = -1;\n let currentDistance = 0;\n for (let i = 0; i < numberOfPositions; i++) {\n const current_index = i * 3;\n this._v2.set(current_positions[current_index],\n current_positions[current_index + 1],\n current_positions[current_index + 2]);\n currentDistance = this._v1.distanceTo(this._v2);\n if (distance == -1) {\n distance = currentDistance;\n closestIndex = i;\n } else if (distance > currentDistance) {\n distance = currentDistance;\n closestIndex = i;\n }\n }\n }\n return closestIndex;\n }\n\n /**\n * Get the closest vertex to centroid.\n */\n this.getClosestVertex = function () {\n\n if (this.closestVertexIndex == -1) {\n this.closestVertexIndex = this.getClosestVertexIndex();\n }\n if (this.closestVertexIndex >= 0) {\n /*\n if (glyphList && glyphList[this.closestVertexIndex]) {\n glyphList[this.closestVertexIndex].getBoundingBox().getCenter(position);\n }\n */\n if (this.morph) {\n let position = new THREE.Vector3();\n this.morph.getMatrixAt(this.closestVertexIndex, _transformMatrix);\n position.setFromMatrixPosition(_transformMatrix);\n return position;\n }\n }\n\n return undefined;\n }\n\n /**\n * Get the bounding box for the whole set of glyphs.\n * \n * @return {Three.Box3};\n */\n this.getBoundingBox = () => {\n if (this.morph && this.ready && this.morph.visible) {\n if (this.boundingBoxUpdateRequired) {\n _boundingBox1.setFromBufferAttribute(\n this.morph.geometry.attributes.position);\n for (let i = 0; i < numberOfVertices; i++) {\n this.morph.getMatrixAt(i, _transformMatrix);\n _boundingBox2.copy(_boundingBox1).applyMatrix4(_transformMatrix);\n if (i == 0) {\n _boundingBox3.copy(_boundingBox2);\n } else {\n _boundingBox3.union(_boundingBox2);\n }\n }\n if (_boundingBox3) {\n this.cachedBoundingBox.copy(_boundingBox3);\n this.morph.updateWorldMatrix(true, true);\n this.cachedBoundingBox.applyMatrix4(this.morph.matrixWorld);\n this.boundingBoxUpdateRequired = false;\n } else\n return undefined;\n }\n return this.cachedBoundingBox;\n }\n return undefined;\n }\n\n /**\n * Set the local time of this glyphset.\n * \n * @param {Number} time - Can be any value between 0 to duration.\n */\n this.setMorphTime = time => {\n if (time > this.duration)\n this.inbuildTime = this.duration;\n else if (0 > time)\n this.inbuildTime = 0;\n else\n this.inbuildTime = time;\n if (morphColours || morphVertices) {\n updateMorphGlyphsets();\n if (morphVertices)\n this.markerUpdateRequired = true;\n }\n }\n\n /**\n * Check if the glyphset is time varying.\n * \n * @return {Boolean}\n */\n this.isTimeVarying = () => {\n if (((this.ready === false) || (numberOfTimeSteps > 0)) && \n (morphColours || morphVertices))\n return true;\n return false;\n }\n\n /**\n * Get the current inbuild time of the \n * \n * @return {Number}\n */\n this.getCurrentTime = () => {\n return this.inbuildTime;\n }\n\n /**\n * Set the objects scale.\n * \n * @return {THREE.Box3}.\n */\n this.setScaleAll = function(scale) {\n this.globalScale = scale;\n updateMorphGlyphsets();\n }\n\n /**\n * Clear this glyphset and its list of glyphs which will release them from the memory.\n */\n this.dispose = () => {\n for (let i = glyphList.length - 1; i >= 0; i--) {\n glyphList[i].dispose();\n }\n if (this.geometry)\n this.geometry.dispose();\n if (this.morph)\n this.morph.material.dispose();\n axis1s = undefined;\n axis2s = undefined;\n axis3s = undefined;\n positions = undefined;\n scales = undefined;\n colors = undefined;\n this.ready = false;\n this.groupName = undefined;\n }\n\n /**\n * Update the glyphsets if required the render.\n */\n this.render = (delta, playAnimation, options) => {\n if (playAnimation == true) {\n let targetTime = this.inbuildTime + delta;\n if (targetTime > this.duration)\n targetTime = targetTime - this.duration;\n this.inbuildTime = targetTime;\n if (morphColours || morphVertices) {\n updateMorphGlyphsets();\n }\n }\n this.updateMarker(playAnimation, options);\n }\n}\n\nGlyphset.prototype = Object.create((require('./zincObject').ZincObject).prototype);\nexports.Glyphset = Glyphset;\n","var THREE = require('three');\n\nvar Loader = require('../three/Loader').Loader;\nvar LoaderUtils = THREE.LoaderUtils;\nvar AnimationClip = THREE.AnimationClip;\nvar Vector3 = THREE.Vector3;\nvar Vector4 = THREE.Vector4;\nvar Color = THREE.Color;\nvar Vector2 = THREE.Vector2;\nvar Face3 = require('../three/Geometry').Face3;\nvar Geometry = require('../three/Geometry').Geometry;\nvar FileLoader = THREE.FileLoader;\nvar DefaultLoadingManager = THREE.DefaultLoadingManager;\nvar VideoHandler = require('../videoHandler').VideoHandler;\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author alteredq / http://alteredqualia.com/\n */\n\nfunction JSONLoader( manager ) {\n\n\tif ( typeof manager === 'boolean' ) {\n\n\t\tconsole.warn( 'THREE.JSONLoader: showStatus parameter has been removed from constructor.' );\n\t\tmanager = undefined;\n\n\t}\n\n\tthis.manager = ( manager !== undefined ) ? manager : DefaultLoadingManager;\n\n\tthis.withCredentials = false;\n\n this.paramsString = \"\";\n\n}\n\nObject.assign( JSONLoader.prototype, {\n\n\tload: function ( url, onLoad, onProgress, onError ) {\n\n\t\tvar scope = this;\n\n\t\tvar texturePath = this.texturePath && ( typeof this.texturePath === 'string' ) ? this.texturePath : LoaderUtils.extractUrlBase( url );\n\n\t\tvar loader = new FileLoader( this.manager );\n\n const params = url.split(\"?\");\n\n //There are parameters, add them to the target\n if (url.length === 2) {\n\n this.paramsString = paramsStrings[1];\n\n } else {\n\n this.paramsString = \"\";\n\n }\n\n\t\tloader.setWithCredentials( this.withCredentials );\n\t\tloader.load( url, function ( text ) {\n\n\t\t\tvar json = undefined;\n\t\t\ttry {\n json = JSON.parse(text);\n\t\t\t} catch (e) {\n\t\t\t\tconsole.error(\"The loader has encountered an error while parsing the content of a resource.\");\n\t\t\t\tif (onError) {\n\t\t\t\t\tonError({responseURL: url});\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tvar metadata = json.metadata;\n\n\t\t\tif ( metadata !== undefined ) {\n\n\t\t\t\tvar type = metadata.type;\n\n\t\t\t\tif ( type !== undefined ) {\n\n\t\t\t\t\tif ( type.toLowerCase() === 'object' ) {\n\n\t\t\t\t\t\tconsole.error( 'THREE.JSONLoader: ' + url + ' should be loaded with THREE.ObjectLoader instead.' );\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n if (scope && scope.parse) {\n\t\t\t\ttry {\n\t\t\t\t\tvar object = scope.parse( json, texturePath );\n\t\t\t\t\tonLoad( object.geometry, object.materials );\n\t\t\t\t} catch (e) {\n\t\t\t\t\tconsole.error(\"The loader has encountered aon loading the geometry\");\n\t\t\t\t\tconsole.error(e);\n\t\t\t\t\tif (onError) {\n\t\t\t\t\t\tonError({responseURL: url});\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}, onProgress, onError );\n\n\t},\n\n\tsetTexturePath: function ( value ) {\n\n\t\tthis.texturePath = value;\n\n\t},\n\n\tparse: ( function () {\n\n\t\tfunction parseModel( json, geometry ) {\n\n\t\t\tfunction isBitSet( value, position ) {\n\n\t\t\t\treturn value & ( 1 << position );\n\n\t\t\t}\n\n\t\t\tvar i, j, fi,\n\n\t\t\t\toffset, zLength,\n\n\t\t\t\tcolorIndex, normalIndex, uvIndex, materialIndex,\n\n\t\t\t\ttype,\n\t\t\t\tisQuad,\n\t\t\t\thasMaterial,\n\t\t\t\thasFaceVertexUv,\n\t\t\t\thasFaceNormal, hasFaceVertexNormal,\n\t\t\t\thasFaceColor, hasFaceVertexColor,\n\n\t\t\t\tvertex, face, faceA, faceB, hex, normal,\n\n\t\t\t\tuvLayer, uv, u, v,\n\n\t\t\t\tfaces = json.faces,\n\t\t\t\tvertices = json.vertices,\n\t\t\t\tnormals = json.normals,\n\t\t\t\tcolors = json.colors,\n\n\t\t\t\tscale = json.scale,\n\n\t\t\t\tnUvLayers = 0;\n\n\n\t\t\tif ( json.uvs !== undefined ) {\n\n\t\t\t\t// disregard empty arrays\n\n\t\t\t\tfor ( i = 0; i < json.uvs.length; i ++ ) {\n\n\t\t\t\t\tif ( json.uvs[ i ].length ) nUvLayers ++;\n\n\t\t\t\t}\n\n\t\t\t\tfor ( i = 0; i < nUvLayers; i ++ ) {\n\n\t\t\t\t\tgeometry.faceVertexUvs[ i ] = [];\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\toffset = 0;\n\t\t\tzLength = vertices.length;\n\n\t\t\twhile ( offset < zLength ) {\n\n\t\t\t\tvertex = new Vector3();\n\n\t\t\t\tvertex.x = vertices[ offset ++ ] * scale;\n\t\t\t\tvertex.y = vertices[ offset ++ ] * scale;\n\t\t\t\tvertex.z = vertices[ offset ++ ] * scale;\n\n\t\t\t\tgeometry.vertices.push( vertex );\n\n\t\t\t}\n\n\t\t\toffset = 0;\n\t\t\tzLength = faces.length;\n\n if (json.uvs) {\n\n for ( i = 0; i < json.uvs.length; i ++ ) {\n\n geometry.uvs[i] = [];\n\n for ( let k = 0; k < json.uvs[i].length ; k++ ) {\n\n geometry.uvs[i][k] = json.uvs[i][k];\n\n }\n \n }\n \n }\n\n if (normals) {\n\n for ( i = 0; i < normals.length; i ++ ) {\n\n geometry.normals[i] = normals[i];\n\n }\n \n }\n\n if (colors) {\n\n for ( i = 0; i < colors.length; i ++ ) {\n\n geometry.colors[i] = colors[i];\n\n }\n \n }\n\n\n\t\t\twhile ( offset < zLength ) {\n\n\t\t\t\ttype = faces[ offset ++ ];\n\n\t\t\t\tisQuad = isBitSet( type, 0 );\n\t\t\t\thasMaterial = isBitSet( type, 1 );\n\t\t\t\thasFaceVertexUv = isBitSet( type, 3 );\n\t\t\t\thasFaceNormal = isBitSet( type, 4 );\n\t\t\t\thasFaceVertexNormal = isBitSet( type, 5 );\n\t\t\t\thasFaceColor = isBitSet( type, 6 );\n\t\t\t\thasFaceVertexColor = isBitSet( type, 7 );\n\n\t\t\t\t// console.log(\"type\", type, \"bits\", isQuad, hasMaterial, hasFaceVertexUv, hasFaceNormal, hasFaceVertexNormal, hasFaceColor, hasFaceVertexColor);\n\n\t\t\t\tif ( isQuad ) {\n\n\t\t\t\t\tfaceA = new Face3();\n\t\t\t\t\tfaceA.a = faces[ offset ];\n\t\t\t\t\tfaceA.b = faces[ offset + 1 ];\n\t\t\t\t\tfaceA.c = faces[ offset + 3 ];\n\n\t\t\t\t\tfaceB = new Face3();\n\t\t\t\t\tfaceB.a = faces[ offset + 1 ];\n\t\t\t\t\tfaceB.b = faces[ offset + 2 ];\n\t\t\t\t\tfaceB.c = faces[ offset + 3 ];\n\n\t\t\t\t\toffset += 4;\n\n\t\t\t\t\tif ( hasMaterial ) {\n\n\t\t\t\t\t\tmaterialIndex = faces[ offset ++ ];\n\t\t\t\t\t\tfaceA.materialIndex = materialIndex;\n\t\t\t\t\t\tfaceB.materialIndex = materialIndex;\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// to get face <=> uv index correspondence\n\n\t\t\t\t\tfi = geometry.faces.length;\n\n\t\t\t\t\tif ( hasFaceVertexUv ) {\n\n\t\t\t\t\t\tfor ( i = 0; i < nUvLayers; i ++ ) {\n\n\t\t\t\t\t\t\tuvLayer = json.uvs[ i ];\n\n\t\t\t\t\t\t\tgeometry.faceVertexUvs[ i ][ fi ] = [];\n\t\t\t\t\t\t\tgeometry.faceVertexUvs[ i ][ fi + 1 ] = [];\n\n\t\t\t\t\t\t\tfor ( j = 0; j < 4; j ++ ) {\n\n\t\t\t\t\t\t\t\tuvIndex = faces[ offset ++ ];\n\n\t\t\t\t\t\t\t\tu = uvLayer[ uvIndex * 2 ];\n\t\t\t\t\t\t\t\tv = uvLayer[ uvIndex * 2 + 1 ];\n\n\t\t\t\t\t\t\t\tuv = new Vector2( u, v );\n\n\t\t\t\t\t\t\t\tif ( j !== 2 ) geometry.faceVertexUvs[ i ][ fi ].push( uv );\n\t\t\t\t\t\t\t\tif ( j !== 0 ) geometry.faceVertexUvs[ i ][ fi + 1 ].push( uv );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( hasFaceNormal ) {\n\n\t\t\t\t\t\tnormalIndex = faces[ offset ++ ] * 3;\n\n\t\t\t\t\t\tfaceA.normal.set(\n\t\t\t\t\t\t\tnormals[ normalIndex ++ ],\n\t\t\t\t\t\t\tnormals[ normalIndex ++ ],\n\t\t\t\t\t\t\tnormals[ normalIndex ]\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tfaceB.normal.copy( faceA.normal );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( hasFaceVertexNormal ) {\n\n\t\t\t\t\t\tfor ( i = 0; i < 4; i ++ ) {\n\n\t\t\t\t\t\t\tnormalIndex = faces[ offset ++ ] * 3;\n\n\t\t\t\t\t\t\tnormal = new Vector3(\n\t\t\t\t\t\t\t\tnormals[ normalIndex ++ ],\n\t\t\t\t\t\t\t\tnormals[ normalIndex ++ ],\n\t\t\t\t\t\t\t\tnormals[ normalIndex ]\n\t\t\t\t\t\t\t);\n\n\n\t\t\t\t\t\t\tif ( i !== 2 ) faceA.vertexNormals.push( normal );\n\t\t\t\t\t\t\tif ( i !== 0 ) faceB.vertexNormals.push( normal );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\n\t\t\t\t\tif ( hasFaceColor ) {\n\n\t\t\t\t\t\tcolorIndex = faces[ offset ++ ];\n\t\t\t\t\t\thex = colors[ colorIndex ];\n\n\t\t\t\t\t\tfaceA.color.setHex( hex );\n\t\t\t\t\t\tfaceB.color.setHex( hex );\n\n\t\t\t\t\t}\n\n\n\t\t\t\t\tif ( hasFaceVertexColor ) {\n\n\t\t\t\t\t\tfor ( i = 0; i < 4; i ++ ) {\n\n\t\t\t\t\t\t\tcolorIndex = faces[ offset ++ ];\n\t\t\t\t\t\t\thex = colors[ colorIndex ];\n\n\t\t\t\t\t\t\tif ( i !== 2 ) faceA.vertexColors.push( new Color( hex ) );\n\t\t\t\t\t\t\tif ( i !== 0 ) faceB.vertexColors.push( new Color( hex ) );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tgeometry.faces.push( faceA );\n\t\t\t\t\tgeometry.faces.push( faceB );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tface = new Face3();\n\t\t\t\t\tface.a = faces[ offset ++ ];\n\t\t\t\t\tface.b = faces[ offset ++ ];\n\t\t\t\t\tface.c = faces[ offset ++ ];\n\n\t\t\t\t\tif ( hasMaterial ) {\n\n\t\t\t\t\t\tmaterialIndex = faces[ offset ++ ];\n\t\t\t\t\t\tface.materialIndex = materialIndex;\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// to get face <=> uv index correspondence\n\n\t\t\t\t\tfi = geometry.faces.length;\n\n\t\t\t\t\tif ( hasFaceVertexUv ) {\n\n\t\t\t\t\t\tfor ( i = 0; i < nUvLayers; i ++ ) {\n\n\t\t\t\t\t\t\tuvLayer = json.uvs[ i ];\n\n\t\t\t\t\t\t\tgeometry.faceVertexUvs[ i ][ fi ] = [];\n\n\t\t\t\t\t\t\tfor ( j = 0; j < 3; j ++ ) {\n\n\t\t\t\t\t\t\t\tuvIndex = faces[ offset ++ ];\n\n\t\t\t\t\t\t\t\tu = uvLayer[ uvIndex * 2 ];\n\t\t\t\t\t\t\t\tv = uvLayer[ uvIndex * 2 + 1 ];\n\n\t\t\t\t\t\t\t\tuv = new Vector2( u, v );\n\n\t\t\t\t\t\t\t\tgeometry.faceVertexUvs[ i ][ fi ].push( uv );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( hasFaceNormal ) {\n\n\t\t\t\t\t\tnormalIndex = faces[ offset ++ ] * 3;\n\n\t\t\t\t\t\tface.normal.set(\n\t\t\t\t\t\t\tnormals[ normalIndex ++ ],\n\t\t\t\t\t\t\tnormals[ normalIndex ++ ],\n\t\t\t\t\t\t\tnormals[ normalIndex ]\n\t\t\t\t\t\t);\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( hasFaceVertexNormal ) {\n\n\t\t\t\t\t\tfor ( i = 0; i < 3; i ++ ) {\n\n\t\t\t\t\t\t\tnormalIndex = faces[ offset ++ ] * 3;\n\n\t\t\t\t\t\t\tnormal = new Vector3(\n\t\t\t\t\t\t\t\tnormals[ normalIndex ++ ],\n\t\t\t\t\t\t\t\tnormals[ normalIndex ++ ],\n\t\t\t\t\t\t\t\tnormals[ normalIndex ]\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\tface.vertexNormals.push( normal );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\n\t\t\t\t\tif ( hasFaceColor ) {\n\n\t\t\t\t\t\tcolorIndex = faces[ offset ++ ];\n\t\t\t\t\t\tface.color.setHex( colors[ colorIndex ] );\n\n\t\t\t\t\t}\n\n\n\t\t\t\t\tif ( hasFaceVertexColor ) {\n\n\t\t\t\t\t\tfor ( i = 0; i < 3; i ++ ) {\n\n\t\t\t\t\t\t\tcolorIndex = faces[ offset ++ ];\n\t\t\t\t\t\t\tface.vertexColors.push( new Color( colors[ colorIndex ] ) );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tgeometry.faces.push( face );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction parseSkin( json, geometry ) {\n\n\t\t\tvar influencesPerVertex = ( json.influencesPerVertex !== undefined ) ? json.influencesPerVertex : 2;\n\n\t\t\tif ( json.skinWeights ) {\n\n\t\t\t\tfor ( var i = 0, l = json.skinWeights.length; i < l; i += influencesPerVertex ) {\n\n\t\t\t\t\tvar x = json.skinWeights[ i ];\n\t\t\t\t\tvar y = ( influencesPerVertex > 1 ) ? json.skinWeights[ i + 1 ] : 0;\n\t\t\t\t\tvar z = ( influencesPerVertex > 2 ) ? json.skinWeights[ i + 2 ] : 0;\n\t\t\t\t\tvar w = ( influencesPerVertex > 3 ) ? json.skinWeights[ i + 3 ] : 0;\n\n\t\t\t\t\tgeometry.skinWeights.push( new Vector4( x, y, z, w ) );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( json.skinIndices ) {\n\n\t\t\t\tfor ( var i = 0, l = json.skinIndices.length; i < l; i += influencesPerVertex ) {\n\n\t\t\t\t\tvar a = json.skinIndices[ i ];\n\t\t\t\t\tvar b = ( influencesPerVertex > 1 ) ? json.skinIndices[ i + 1 ] : 0;\n\t\t\t\t\tvar c = ( influencesPerVertex > 2 ) ? json.skinIndices[ i + 2 ] : 0;\n\t\t\t\t\tvar d = ( influencesPerVertex > 3 ) ? json.skinIndices[ i + 3 ] : 0;\n\n\t\t\t\t\tgeometry.skinIndices.push( new Vector4( a, b, c, d ) );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tgeometry.bones = json.bones;\n\n\t\t\tif ( geometry.bones && geometry.bones.length > 0 && ( geometry.skinWeights.length !== geometry.skinIndices.length || geometry.skinIndices.length !== geometry.vertices.length ) ) {\n\n\t\t\t\tconsole.warn( 'When skinning, number of vertices (' + geometry.vertices.length + '), skinIndices (' +\n\t\t\t\t\tgeometry.skinIndices.length + '), and skinWeights (' + geometry.skinWeights.length + ') should match.' );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction parseMorphing( json, geometry ) {\n\n\t\t\tvar scale = json.scale;\n\n\t\t\tif ( json.morphTargets !== undefined ) {\n\n\t\t\t\tfor ( var i = 0, l = json.morphTargets.length; i < l; i ++ ) {\n\n\t\t\t\t\tgeometry.morphTargets[ i ] = {};\n\t\t\t\t\tgeometry.morphTargets[ i ].name = json.morphTargets[ i ].name;\n\t\t\t\t\tgeometry.morphTargets[ i ].vertices = [];\n\n\t\t\t\t\tvar dstVertices = geometry.morphTargets[ i ].vertices;\n\t\t\t\t\tvar srcVertices = json.morphTargets[ i ].vertices;\n\n\t\t\t\t\tfor ( var v = 0, vl = srcVertices.length; v < vl; v += 3 ) {\n\n\t\t\t\t\t\tvar vertex = new Vector3();\n\t\t\t\t\t\tvertex.x = srcVertices[ v ] * scale;\n\t\t\t\t\t\tvertex.y = srcVertices[ v + 1 ] * scale;\n\t\t\t\t\t\tvertex.z = srcVertices[ v + 2 ] * scale;\n\n\t\t\t\t\t\tdstVertices.push( vertex );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( json.morphNormals !== undefined ) {\n\n\t\t\t\tfor ( var i = 0, l = json.morphNormals.length; i < l; i ++ ) {\n\n if (geometry.morphTargets[ i ]) {\n\n geometry.morphTargets[ i ].normals = [];\n\n var dstNormals = geometry.morphTargets[ i ].normals;\n var srcNormals = json.morphNormals[ i ].normals;\n\n for ( var v = 0, vl = srcNormals.length; v < vl; v += 3 ) {\n\n var normals = new Vector3();\n normals.x = srcNormals[ v ];\n normals.y = srcNormals[ v + 1 ] ;\n normals.z = srcNormals[ v + 2 ] ;\n\n dstNormals.push( normals );\n\n }\n\n geometry.morphNormalsReady = true;\n\n }\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( json.morphColors !== undefined ) {\n\n\t\t\t\tvar i, l, c, cl, dstColors, srcColors, color;\n\n\t\t\t\tfor ( i = 0, l = json.morphColors.length; i < l; i ++ ) {\n\n\t\t\t\t\tgeometry.morphColors[ i ] = {};\n\t\t\t\t\tgeometry.morphColors[ i ].name = json.morphColors[ i ].name;\n\t\t\t\t\tgeometry.morphColors[ i ].colors = [];\n\n\t\t\t\t\tdstColors = geometry.morphColors[ i ].colors;\n\t\t\t\t\tsrcColors = json.morphColors[ i ].colors;\n\n\t\t\t\t\tfor ( c = 0, cl = srcColors.length; c < cl; c += 3 ) {\n\n\t\t\t\t\t\tcolor = new THREE.Color( 0xffaa00 );\n\t\t\t\t\t\tcolor.setRGB( srcColors[ c ], srcColors[ c + 1 ], srcColors[ c + 2 ] );\n\t\t\t\t\t\tdstColors.push( color );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction parseAnimations( json, geometry ) {\n\n\t\t\tvar outputAnimations = [];\n\n\t\t\t// parse old style Bone/Hierarchy animations\n\t\t\tvar animations = [];\n\n\t\t\tif ( json.animation !== undefined ) {\n\n\t\t\t\tanimations.push( json.animation );\n\n\t\t\t}\n\n\t\t\tif ( json.animations !== undefined ) {\n\n\t\t\t\tif ( json.animations.length ) {\n\n\t\t\t\t\tanimations = animations.concat( json.animations );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tanimations.push( json.animations );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tfor ( var i = 0; i < animations.length; i ++ ) {\n\n\t\t\t\tvar clip = AnimationClip.parseAnimation( animations[ i ], geometry.bones );\n\t\t\t\tif ( clip ) outputAnimations.push( clip );\n\n\t\t\t}\n\n\t\t\t// parse implicit morph animations\n\t\t\tif ( geometry.morphTargets ) {\n\n\t\t\t\t// TODO: Figure out what an appropraite FPS is for morph target animations -- defaulting to 10, but really it is completely arbitrary.\n\t\t\t\tvar morphAnimationClips = AnimationClip.CreateClipsFromMorphTargetSequences( geometry.morphTargets, 10 );\n\t\t\t\toutputAnimations = outputAnimations.concat( morphAnimationClips );\n\n\t\t\t}\n\n\t\t\tif ( outputAnimations.length > 0 ) geometry.animations = outputAnimations;\n\n\t\t}\n\n\t\treturn function parse( json, texturePath ) {\n\n\t\t\tif ( json.data !== undefined ) {\n\n\t\t\t\t// Geometry 4.0 spec\n\t\t\t\tjson = json.data;\n\n\t\t\t}\n\n\t\t\tif ( json.scale !== undefined ) {\n\n\t\t\t\tjson.scale = 1.0 / json.scale;\n\n\t\t\t} else {\n\n\t\t\t\tjson.scale = 1.0;\n\n\t\t\t}\n\n\t\t\tvar geometry = new Geometry();\n\t\t\tgeometry.morphColors = [];\n\t\t\tparseModel( json, geometry );\n\t\t\tparseSkin( json, geometry );\n\t\t\tparseMorphing( json, geometry );\n\t\t\tparseAnimations( json, geometry );\n\n\t\t\tgeometry.computeFaceNormals();\n\t\t\tgeometry.computeBoundingSphere();\n\n\t\t\tif ( json.materials === undefined || json.materials.length === 0 ) {\n\n\t\t\t\treturn { geometry: geometry };\n\n\t\t\t} else {\n\n\t\t\t\tvar materials = Loader.prototype.initMaterials( json.materials, texturePath, 'Anonymous' );\n\n\t\t\t\t\n\t\t\t\tif (json.materials[0].video) {\n\t\t\t\t\t\n\t\t\t\t\tvar fullPath = texturePath + json.materials[0].video;\n\n if (this.paramsString) {\n\n fullPath = fullPath + `?${this.paramsString}`;\n \n }\n\n\t\t\t\t\tconst videoHandler = new VideoHandler(fullPath);\n\t\t\t\t\t\n\t\t\t\t\tgeometry._video = videoHandler;\n\t\t\t\t\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif (materials && materials.length > 0) {\n\t\t\t\t\tif (json.materials[0].singleSided) {\n\t\t\t\t\t\tmaterials[0].side = THREE.FrontSide;\n\t\t\t\t\t} else if (json.materials[0].flipSided){\n\t\t\t\t\t\tmaterials[0].side = THREE.BackSide;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tmaterials[0].side = THREE.DoubleSide;\n }\n if (json.materials[0].specularCoef) {\n materials[0].shininess = Math.floor(json.materials[0].specularCoef / 3);\n }\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\treturn { geometry: geometry, materials: materials };\n\n\t\t\t}\n\n\t\t};\n\n\t} )()\n\n} );\n\n\nexport { JSONLoader };\n","var THREE = require('three');\n\nimport {\n\tNoBlending,\n\tNormalBlending,\n\tAdditiveBlending,\n\tSubtractiveBlending,\n\tMultiplyBlending,\n\tCustomBlending,\n\n\tFaceColors,\n\tVertexColors,\n\n\tDoubleSide,\n\tBackSide,\n\n\tMirroredRepeatWrapping,\n RepeatWrapping,\n MathUtils,\n MaterialLoader,\n TextureLoader,\n Color\n} from 'three';\n\n/**\n * @author alteredq / http://alteredqualia.com/\n */\n\nfunction Loader() {}\n\nLoader.Handlers = {\n\n\thandlers: [],\n\n\tadd: function ( regex, loader ) {\n\n\t\tthis.handlers.push( regex, loader );\n\n\t},\n\n\tget: function ( file ) {\n\n\t\tvar handlers = this.handlers;\n\n\t\tfor ( var i = 0, l = handlers.length; i < l; i += 2 ) {\n\n\t\t\tvar regex = handlers[ i ];\n\t\t\tvar loader = handlers[ i + 1 ];\n\n\t\t\tif ( regex.test( file ) ) {\n\n\t\t\t\treturn loader;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn null;\n\n\t}\n\n};\n\nObject.assign( Loader.prototype, {\n\n\tcrossOrigin: 'anonymous',\n\n\tonLoadStart: function () {},\n\n\tonLoadProgress: function () {},\n\n\tonLoadComplete: function () {},\n\n\tinitMaterials: function ( materials, texturePath, crossOrigin ) {\n\n\t\tvar array = [];\n\n\t\tfor ( var i = 0; i < materials.length; ++ i ) {\n\n\t\t\tarray[ i ] = this.createMaterial( materials[ i ], texturePath, crossOrigin );\n\n\t\t}\n\n\t\treturn array;\n\n\t},\n\n\tcreateMaterial: ( function () {\n\n\t\tvar BlendingMode = {\n\t\t\tNoBlending: NoBlending,\n\t\t\tNormalBlending: NormalBlending,\n\t\t\tAdditiveBlending: AdditiveBlending,\n\t\t\tSubtractiveBlending: SubtractiveBlending,\n\t\t\tMultiplyBlending: MultiplyBlending,\n\t\t\tCustomBlending: CustomBlending\n\t\t};\n\n\t\tvar color = new Color();\n\t\tvar textureLoader = new TextureLoader();\n\t\tvar materialLoader = new MaterialLoader();\n\n\t\treturn function createMaterial( m, texturePath, crossOrigin ) {\n\n\t\t\t// convert from old material format\n\n\t\t\tvar textures = {};\n\n\t\t\tfunction loadTexture( path, repeat, offset, wrap, anisotropy ) {\n\n\t\t\t\tvar fullPath = texturePath + path;\n\t\t\t\tvar loader = Loader.Handlers.get( fullPath );\n\n\t\t\t\tvar texture;\n\n\t\t\t\tif ( loader !== null ) {\n\n\t\t\t\t\ttexture = loader.load( fullPath );\n\n\t\t\t\t} else {\n\n\t\t\t\t\ttextureLoader.setCrossOrigin( crossOrigin );\n\t\t\t\t\ttexture = textureLoader.load( fullPath );\n\n\t\t\t\t}\n\n\t\t\t\tif ( repeat !== undefined ) {\n\n\t\t\t\t\ttexture.repeat.fromArray( repeat );\n\n\t\t\t\t\tif ( repeat[ 0 ] !== 1 ) texture.wrapS = RepeatWrapping;\n\t\t\t\t\tif ( repeat[ 1 ] !== 1 ) texture.wrapT = RepeatWrapping;\n\n\t\t\t\t}\n\n\t\t\t\tif ( offset !== undefined ) {\n\n\t\t\t\t\ttexture.offset.fromArray( offset );\n\n\t\t\t\t}\n\n\t\t\t\tif ( wrap !== undefined ) {\n\n\t\t\t\t\tif ( wrap[ 0 ] === 'repeat' ) texture.wrapS = RepeatWrapping;\n\t\t\t\t\tif ( wrap[ 0 ] === 'mirror' ) texture.wrapS = MirroredRepeatWrapping;\n\n\t\t\t\t\tif ( wrap[ 1 ] === 'repeat' ) texture.wrapT = RepeatWrapping;\n\t\t\t\t\tif ( wrap[ 1 ] === 'mirror' ) texture.wrapT = MirroredRepeatWrapping;\n\n\t\t\t\t}\n\n\t\t\t\tif ( anisotropy !== undefined ) {\n\n\t\t\t\t\ttexture.anisotropy = anisotropy;\n\n\t\t\t\t}\n\n\t\t\t\tvar uuid = MathUtils.generateUUID();\n\n\t\t\t\ttextures[ uuid ] = texture;\n\n\t\t\t\treturn uuid;\n\n\t\t\t}\n\n\t\t\t//\n\n\t\t\tvar json = {\n\t\t\t\tuuid: MathUtils.generateUUID(),\n\t\t\t\ttype: 'MeshLambertMaterial'\n\t\t\t};\n\n\t\t\tfor ( var name in m ) {\n\n\t\t\t\tvar value = m[ name ];\n\n\t\t\t\tswitch ( name ) {\n\n\t\t\t\t\tcase 'DbgColor':\n\t\t\t\t\tcase 'DbgIndex':\n\t\t\t\t\tcase 'opticalDensity':\n\t\t\t\t\tcase 'illumination':\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'DbgName':\n\t\t\t\t\t\tjson.name = value;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'blending':\n\t\t\t\t\t\tjson.blending = BlendingMode[ value ];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'colorAmbient':\n\t\t\t\t\tcase 'mapAmbient':\n\t\t\t\t\t\tconsole.warn( 'THREE.Loader.createMaterial:', name, 'is no longer supported.' );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'colorDiffuse':\n\t\t\t\t\t\tjson.color = color.fromArray( value ).getHex();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'colorSpecular':\n\t\t\t\t\t\tjson.specular = color.fromArray( value ).getHex();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'colorEmissive':\n\t\t\t\t\t\tjson.emissive = color.fromArray( value ).getHex();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'specularCoef':\n\t\t\t\t\t\tjson.shininess = value;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'shading':\n\t\t\t\t\t\tif ( value.toLowerCase() === 'basic' ) json.type = 'MeshBasicMaterial';\n\t\t\t\t\t\tif ( value.toLowerCase() === 'phong' ) json.type = 'MeshPhongMaterial';\n\t\t\t\t\t\tif ( value.toLowerCase() === 'standard' ) json.type = 'MeshStandardMaterial';\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapDiffuse':\n\t\t\t\t\t\tjson.map = loadTexture( value, m.mapDiffuseRepeat, m.mapDiffuseOffset, m.mapDiffuseWrap, m.mapDiffuseAnisotropy );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapDiffuseRepeat':\n\t\t\t\t\tcase 'mapDiffuseOffset':\n\t\t\t\t\tcase 'mapDiffuseWrap':\n\t\t\t\t\tcase 'mapDiffuseAnisotropy':\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapEmissive':\n\t\t\t\t\t\tjson.emissiveMap = loadTexture( value, m.mapEmissiveRepeat, m.mapEmissiveOffset, m.mapEmissiveWrap, m.mapEmissiveAnisotropy );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapEmissiveRepeat':\n\t\t\t\t\tcase 'mapEmissiveOffset':\n\t\t\t\t\tcase 'mapEmissiveWrap':\n\t\t\t\t\tcase 'mapEmissiveAnisotropy':\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapLight':\n\t\t\t\t\t\tjson.lightMap = loadTexture( value, m.mapLightRepeat, m.mapLightOffset, m.mapLightWrap, m.mapLightAnisotropy );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapLightRepeat':\n\t\t\t\t\tcase 'mapLightOffset':\n\t\t\t\t\tcase 'mapLightWrap':\n\t\t\t\t\tcase 'mapLightAnisotropy':\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapAO':\n\t\t\t\t\t\tjson.aoMap = loadTexture( value, m.mapAORepeat, m.mapAOOffset, m.mapAOWrap, m.mapAOAnisotropy );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapAORepeat':\n\t\t\t\t\tcase 'mapAOOffset':\n\t\t\t\t\tcase 'mapAOWrap':\n\t\t\t\t\tcase 'mapAOAnisotropy':\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapBump':\n\t\t\t\t\t\tjson.bumpMap = loadTexture( value, m.mapBumpRepeat, m.mapBumpOffset, m.mapBumpWrap, m.mapBumpAnisotropy );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapBumpScale':\n\t\t\t\t\t\tjson.bumpScale = value;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapBumpRepeat':\n\t\t\t\t\tcase 'mapBumpOffset':\n\t\t\t\t\tcase 'mapBumpWrap':\n\t\t\t\t\tcase 'mapBumpAnisotropy':\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapNormal':\n\t\t\t\t\t\tjson.normalMap = loadTexture( value, m.mapNormalRepeat, m.mapNormalOffset, m.mapNormalWrap, m.mapNormalAnisotropy );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapNormalFactor':\n\t\t\t\t\t\tjson.normalScale = value;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapNormalRepeat':\n\t\t\t\t\tcase 'mapNormalOffset':\n\t\t\t\t\tcase 'mapNormalWrap':\n\t\t\t\t\tcase 'mapNormalAnisotropy':\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapSpecular':\n\t\t\t\t\t\tjson.specularMap = loadTexture( value, m.mapSpecularRepeat, m.mapSpecularOffset, m.mapSpecularWrap, m.mapSpecularAnisotropy );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapSpecularRepeat':\n\t\t\t\t\tcase 'mapSpecularOffset':\n\t\t\t\t\tcase 'mapSpecularWrap':\n\t\t\t\t\tcase 'mapSpecularAnisotropy':\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapMetalness':\n\t\t\t\t\t\tjson.metalnessMap = loadTexture( value, m.mapMetalnessRepeat, m.mapMetalnessOffset, m.mapMetalnessWrap, m.mapMetalnessAnisotropy );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapMetalnessRepeat':\n\t\t\t\t\tcase 'mapMetalnessOffset':\n\t\t\t\t\tcase 'mapMetalnessWrap':\n\t\t\t\t\tcase 'mapMetalnessAnisotropy':\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapRoughness':\n\t\t\t\t\t\tjson.roughnessMap = loadTexture( value, m.mapRoughnessRepeat, m.mapRoughnessOffset, m.mapRoughnessWrap, m.mapRoughnessAnisotropy );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapRoughnessRepeat':\n\t\t\t\t\tcase 'mapRoughnessOffset':\n\t\t\t\t\tcase 'mapRoughnessWrap':\n\t\t\t\t\tcase 'mapRoughnessAnisotropy':\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapAlpha':\n\t\t\t\t\t\tjson.alphaMap = loadTexture( value, m.mapAlphaRepeat, m.mapAlphaOffset, m.mapAlphaWrap, m.mapAlphaAnisotropy );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapAlphaRepeat':\n\t\t\t\t\tcase 'mapAlphaOffset':\n\t\t\t\t\tcase 'mapAlphaWrap':\n\t\t\t\t\tcase 'mapAlphaAnisotropy':\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'flipSided':\n\t\t\t\t\t\tjson.side = BackSide;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'doubleSided':\n\t\t\t\t\t\tjson.side = DoubleSide;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'transparency':\n\t\t\t\t\t\tconsole.warn( 'THREE.Loader.createMaterial: transparency has been renamed to opacity' );\n\t\t\t\t\t\tjson.opacity = value;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'depthTest':\n\t\t\t\t\tcase 'depthWrite':\n\t\t\t\t\tcase 'colorWrite':\n\t\t\t\t\tcase 'opacity':\n\t\t\t\t\tcase 'reflectivity':\n\t\t\t\t\tcase 'transparent':\n\t\t\t\t\tcase 'visible':\n\t\t\t\t\tcase 'wireframe':\n\t\t\t\t\t\tjson[ name ] = value;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'vertexColors':\n\t\t\t\t\t\tif ( value === true ) json.vertexColors = VertexColors;\n\t\t\t\t\t\tif ( value === 'face' ) json.vertexColors = FaceColors;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tconsole.error( 'THREE.Loader.createMaterial: Unsupported', name, value );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( json.type === 'MeshBasicMaterial' ) delete json.emissive;\n\t\t\tif ( json.type !== 'MeshPhongMaterial' ) delete json.specular;\n\n\t\t\tif ( json.opacity < 1 ) json.transparent = true;\n\n\t\t\tmaterialLoader.setTextures( textures );\n\n\t\t\treturn materialLoader.parse( json );\n\n\t\t};\n\n\t} )()\n\n} );\n\nexport { Loader };\n","var THREE = require('three');\n\n/**\n * Provide basic functionality to display video as texture.\n * VideoTexture is used for creating and updating a video projected onto a Three.js texture\n * \n * @class\n * @param {Object} containerIn - Container to create the renderer on.\n * @author Alan Wu\n * @return {VideoHandler}\n */\nexports.VideoHandler = function(srcIn) {\n\n\tvar _this = this;\n\tthis.video = undefined;\n\tthis.videoTexture = undefined;\n\tvar src = srcIn;\n\tvar lastTime = 0;\n\tvar lastUpdate = 0;\n\tvar frameRate = 30;\n\tvar videoPlaneLoadedFlag = false;\n\tvar lastPlayPos = 0;\n\tvar currentPlayPos = 0;\n\tvar bufferingDetected = false;\n\t\n\tvar checkBuffering = function(delta, playAnimation) {\n\t currentPlayPos = _this.video.currentTime;\n\n\t // checking offset should be at most the check interval\n\t // but allow for some margin\n\t var offset = delta - 0.02;\n\n\t // if no buffering is currently detected,\n\t // and the position does not seem to increase\n\t // and the _this.video isn't manually paused...\n\t if (!bufferingDetected && (currentPlayPos < (lastPlayPos + offset)) &&\n\t \t\t!_this.video.paused) {\n\t bufferingDetected = true;\n\t }\n\n\t // if we were buffering but the _this.video has advanced,\n\t // then there is no buffering\n\t if (bufferingDetected && (currentPlayPos > (lastPlayPos + offset)) &&\n\t \t\t!_this.video.paused) {\n\t bufferingDetected = false;\n\t }\n\t lastPlayPos = currentPlayPos;\n\t}\n\n\tvar initialise = function(){\n\t\tif (document) {\n\t\t \t_this.video = document.createElement( 'video' );\n\t\t \t_this.video.crossOrigin = \"anonymous\";\n\t\t \t_this.video.src = src;\n\t\t \t_this.video.load();\n _this.video.loop = true;\n \n\t\t}\n\t}\n\n\tthis.setMorphTime = function(time, duration){\n\t\tvar actualTime = time / duration * _this.video.duration;\n\t\t_this.video.currentTime = actualTime;\n\t}\n\n\t// videoPlaneLoaded connects the video to the video texture once it has loaded\n\t this.getVideoDuration = function() {\n\t\t return _this.video.duration;\n\t}\n\n\tthis.createCanvasVideoTexture = function(){\n\t\t_this.videoTexture = new THREE.VideoTexture( _this.video );\n\t\t_this.videoTexture.minFilter = THREE.LinearFilter;\n\t\t_this.videoTexture.magFilter = THREE.LinearFilter;\n\t\t_this.videoTexture.format = THREE.RGBFormat;\n _this.video.currentTime = 0;\n\t\treturn _this.videoTexture;\n\t}\n\t\n\tthis.getCurrentTime = function(duration) {\n\t\tif (_this.video)\n\t\t\treturn duration * (_this.video.currentTime / _this.video.duration);\n\t\telse\n\t\t\treturn 0;\n\t}\n\n\tthis.isReadyToPlay = function(){\n\t\t// video.readyState 3 means we have data to load for the current time and foreseeable future\n\t\tif (_this.video && _this.video.readyState >= 3){\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\t\n\t//this should be handle by scene... check the sync at \n\tinitialise();\n\n}","const THREE = require('three');\nconst Points = require('../three/Points').Points;\nconst toBufferGeometry = require('../utilities').toBufferGeometry;\nconst getCircularTexture = require('../utilities').getCircularTexture;\nconst Label = require('./label').Label;\n\n/**\n * Provides an object which stores points and provides method which controls its position.\n * This is created when a valid json file containing point is read into a {@link Zinc.Scene}\n * object.\n * \n * @class\n * @author Alan Wu\n * @return {Pointset}\n */\nconst Pointset = function () {\n (require('./zincObject').ZincObject).call(this);\n this.isPointset = true;\n const labelSets = [];\n\n /**\n * Create the pointsets using geometry and material.\n * \n * @param {THREE.Geomtry} geometryIn - Geometry of points to be rendered.\n * @param {THREE.Material} materialIn - Material to be set for the lines.\n * @param {Object} options - Provide various options\n * @param {Boolean} options.localTimeEnabled - A flag to indicate either the lines is\n * time dependent.\n * @param {Boolean} options.localMorphColour - A flag to indicate either the colour is\n * time dependent.\n */\n this.createMesh = (geometryIn, materialIn, options) => {\n if (geometryIn && materialIn) {\n let geometry = toBufferGeometry(geometryIn, options);\n const texture = getCircularTexture();\n materialIn.map = texture;\n let point = new Points(geometry, materialIn);\n this.setMesh(point, options.localTimeEnabled, \n options.localMorphColour);\n }\n }\n\n const addLabel = (index, coord, labelText, colourHex) => {\n if (labelText) {\n const colour = new THREE.Color(colourHex);\n const label = new Label(labelText, colour);\n label.setPosition(coord[0], coord[1], coord[2]);\n const sprite = label.getSprite();\n sprite.material.sizeAttenuation = false;\n sprite.material.alphaTest = 0.5;\n sprite.material.transparent = true;\n sprite.material.depthWrite = false;\n sprite.material.depthTest = false;\n this.group.add(sprite);\n labelSets[index] = label;\n }\n }\n\n /**\n * Add points to existing mesh if it exists, otherwise\n * create a new one and add to it.\n * @param {Array} coords -An array of three components coordinates.\n * @param {Array|String} labels - An array of strings, these are only added\n * if the number of coords equals to the number labels provided.\n * @param {Number} colour - A hex value of the colour for the points\n */\n this.addPoints = (coords, labels, colour) => {\n if (coords && coords.length > 0) {\n let current = this.drawRange - 1;\n const geometry = this.addVertices(coords);\n let mesh = this.getMorph();\n if (!mesh) {\n let material = new THREE.PointsMaterial({ alphaTest: 0.5, size: 10,\n color: colour, sizeAttenuation: false });\n const options = { localTimeEnabled: false, localMorphColour: false};\n geometry.colorsNeedUpdate = true;\n this.createMesh(geometry, material, options);\n }\n let end = current + coords.length;\n let index = 0;\n if ((Array.isArray(labels) && labels.length === coords.length) || \n (typeof labels === \"string\")) {\n for (current; current + index < end;) {\n const labelText = typeof labels === \"string\" ? labels : labels[index];\n addLabel(index, coords[index], labelText, colour);\n index++;\n }\n }\n if (this.region) this.region.pickableUpdateRequired = true;\n }\n }\n\n /**\n * Set the size of the points.\n * \n * @param {Number} size - size to be set.\n */\n this.setSize = size => {\n if (this.morph && this.morph.material) {\n this.morph.material.size = size;\n this.morph.material.needsUpdate = true;\n }\n }\n\n /**\n * Turn size attenuation on/off based on the flag.\n * \n * @param {Boolean} flag - Determin either size attenuation\n * should be on or off.\n */\n this.setSizeAttenuation = flag => {\n if (this.morph && this.morph.material) {\n this.morph.material.sizeAttenuation = flag;\n this.morph.material.needsUpdate = true;\n }\n }\n\n /**\n * Get vertices at index\n */\n this.getVerticesByIndex = function(index) {\n if (index >= 0 && this.drawRange > index) {\n const positionAttribute = this.getMorph().geometry.getAttribute( 'position' );\n return [ \n positionAttribute.getX(index),\n positionAttribute.getY(index),\n positionAttribute.getZ(index)\n ];\n }\n return undefined;\n }\n\n /**\n * Edit Vertice in index.\n */\n this.editVertices = function(coords, i) {\n if (coords && coords.length) {\n let mesh = this.getMorph();\n const maxIndex = i + coords.length - 1;\n if (!mesh || 0 > i || maxIndex >= this.drawRange) {\n return;\n } else {\n const positionAttribute = mesh.geometry.getAttribute( 'position' );\n let index = i;\n coords.forEach(coord => {\n const label = labelSets[index];\n if (label) {\n label.setPosition(coord[0], coord[1], coord[2]);\n }\n positionAttribute.setXYZ(index++, coord[0], coord[1], coord[2]);\n \n });\n positionAttribute.needsUpdate = true;\n this.boundingBoxUpdateRequired = true;\n }\n }\n }\n\n /**\n * Turn size attenuation on/off based on the flag.\n * \n * @param {Boolean} flag - Determin either size attenuation\n * should be on or off.\n */\n this.render = (delta, playAnimation, cameraControls, options) => {\n if (this.morph && cameraControls) {\n this.morph.sizePerPixel = cameraControls.pixelHeight;\n }\n Pointset.prototype.render.call(this, delta, playAnimation, cameraControls, options);\n }\n}\n\nPointset.prototype = Object.create((require('./zincObject').ZincObject).prototype);\nexports.Pointset = Pointset;\n","import {\n\tBufferGeometry,\n\tMatrix4,\n Object3D,\n PointsMaterial,\n Ray,\n\tSphere,\n\tVector3\n} from 'three';\n\n\nconst _inverseMatrix = /*@__PURE__*/ new Matrix4();\nconst _ray = /*@__PURE__*/ new Ray();\nconst _sphere = /*@__PURE__*/ new Sphere();\nconst _position = /*@__PURE__*/ new Vector3();\nconst _morphA = /*@__PURE__*/ new Vector3();\nconst _tempA = /*@__PURE__*/ new Vector3();\n\nclass Points extends Object3D {\n\n\tconstructor( geometry = new BufferGeometry(), material = new PointsMaterial() ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'Points';\n\n\t\tthis.geometry = geometry;\n\t\tthis.material = material;\n\t\tthis.sizePerPixel = 1;\n\n\t\tthis.updateMorphTargets();\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.material = source.material;\n\t\tthis.geometry = source.geometry;\n\n\t\treturn this;\n\n\t}\n\n\traycast( raycaster, intersects ) {\n\n\t\tconst geometry = this.geometry;\n\t\tconst matrixWorld = this.matrixWorld;\n\t\tconst threshold = raycaster.params.Points.threshold;\n const drawRange = geometry.drawRange;\n\n\t\t// Checking boundingSphere distance to ray\n\n\t\tif ( geometry.boundingSphere === null ) geometry.computeBoundingSphere();\n\n\t\t_sphere.copy( geometry.boundingSphere );\n\t\t_sphere.applyMatrix4( matrixWorld );\n\t\t_sphere.radius += threshold;\n\n\t\tif ( raycaster.ray.intersectsSphere( _sphere ) === false ) return;\n\n\t\t//\n\n\t\t_inverseMatrix.copy( matrixWorld ).invert();\n\t\t_ray.copy( raycaster.ray ).applyMatrix4( _inverseMatrix );\n\n\t\tconst localThreshold = threshold / ( ( this.scale.x + this.scale.y + this.scale.z ) / 3 ) * this.material.size * this.sizePerPixel;\n\t\tconst localThresholdSq = localThreshold * localThreshold;\n\n\t\tif ( geometry.isBufferGeometry ) {\n\n\t\t\tconst index = geometry.index;\n\t\t\tconst attributes = geometry.attributes;\n\t\t\tconst positionAttribute = attributes.position;\n const morphPosition = geometry.morphAttributes.position;\n\n\t\t\tif ( index !== null ) {\n\n\t\t\t\tconst start = Math.max( 0, drawRange.start );\n\t\t\t\tconst end = Math.min( index.count, ( drawRange.start + drawRange.count ) );\n\n\t\t\t\tfor ( let i = start, il = end; i < il; i ++ ) {\n\n\t\t\t\t\tconst a = index.getX( i );\n \n calculatePosition( this, positionAttribute, morphPosition, a );\n\n\t\t\t\t\ttestPoint( _position, a, localThresholdSq, matrixWorld, raycaster, intersects, this );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tconst start = Math.max( 0, drawRange.start );\n\t\t\t\tconst end = Math.min( positionAttribute.count, ( drawRange.start + drawRange.count ) );\n\n\t\t\t\tfor ( let i = start, l = end; i < l; i ++ ) {\n \n calculatePosition( this, positionAttribute, morphPosition, i );\n\n\t\t\t\t\ttestPoint( _position, i, localThresholdSq, matrixWorld, raycaster, intersects, this );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tconsole.error( 'THREE.Points.raycast() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.' );\n\n\t\t}\n\n\t}\n\n\tupdateMorphTargets() {\n\n\t\tconst geometry = this.geometry;\n\n\t\tif ( geometry.isBufferGeometry ) {\n\n\t\t\tconst morphAttributes = geometry.morphAttributes;\n\t\t\tconst keys = Object.keys( morphAttributes );\n\n\t\t\tif ( keys.length > 0 ) {\n\n\t\t\t\tconst morphAttribute = morphAttributes[ keys[ 0 ] ];\n\n\t\t\t\tif ( morphAttribute !== undefined ) {\n\n\t\t\t\t\tthis.morphTargetInfluences = [];\n\t\t\t\t\tthis.morphTargetDictionary = {};\n\n\t\t\t\t\tfor ( let m = 0, ml = morphAttribute.length; m < ml; m ++ ) {\n\n\t\t\t\t\t\tconst name = morphAttribute[ m ].name || String( m );\n\n\t\t\t\t\t\tthis.morphTargetInfluences.push( 0 );\n\t\t\t\t\t\tthis.morphTargetDictionary[ name ] = m;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tconst morphTargets = geometry.morphTargets;\n\n\t\t\tif ( morphTargets !== undefined && morphTargets.length > 0 ) {\n\n\t\t\t\tconsole.error( 'THREE.Points.updateMorphTargets() does not support THREE.Geometry. Use THREE.BufferGeometry instead.' );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n}\n\nPoints.prototype.isPoints = true;\n\nfunction testPoint( point, index, localThresholdSq, matrixWorld, raycaster, intersects, object ) {\n\n\tconst rayPointDistanceSq = _ray.distanceSqToPoint( point );\n\n\tif ( rayPointDistanceSq < localThresholdSq ) {\n\n\t\tconst intersectPoint = new Vector3();\n\n\t\t_ray.closestPointToPoint( point, intersectPoint );\n\t\tintersectPoint.applyMatrix4( matrixWorld );\n\n\t\tconst distance = raycaster.ray.origin.distanceTo( intersectPoint );\n\n\t\tif ( distance < raycaster.near || distance > raycaster.far ) return;\n\n\t\tintersects.push( {\n\n\t\t\tdistance: distance,\n\t\t\tdistanceToRay: Math.sqrt( rayPointDistanceSq ),\n\t\t\tpoint: intersectPoint,\n\t\t\tindex: index,\n\t\t\tface: null,\n\t\t\tobject: object\n\n\t\t} );\n\n\t}\n\n}\n\nfunction calculatePosition( object, position, morphPosition, a )\t{\n\n _position.fromBufferAttribute( position, a );\n\n const morphInfluences = object.morphTargetInfluences;\n\n if ( object.material.morphTargets && morphPosition && morphInfluences ) {\n\n _morphA.set( 0, 0, 0 );\n\n for ( var i = 0, il = morphPosition.length; i < il; i ++ ) {\n\n const influence = morphInfluences[ i ];\n const morphAttribute = morphPosition[ i ];\n\n if ( influence === 0 ) continue;\n\n _tempA.fromBufferAttribute( morphAttribute, a );\n\n _morphA.addScaledVector( _tempA.sub( _position ), influence );\n\n }\n\n _position.add( _morphA );\n\n }\n\n}\n\nexport { Points };","const THREE = require('three');\nconst toBufferGeometry = require('../utilities').toBufferGeometry;\n\n/**\n * Provides an object which stores lines.\n * This is created when a valid json file containing lines is read into a {@link Zinc.Scene}\n * object.\n * \n * @class\n * @author Alan Wu\n * @return {Lines}\n */\nconst Lines = function () {\n (require('./zincObject').ZincObject).call(this);\n\tthis.isLines = true;\n\n /**\n * Create the line segements using geometry and material.\n * \n * @param {THREE.Geomtry} geometryIn - Geometry of lines to be rendered.\n * @param {THREE.Material} materialIn - Material to be set for the lines.\n * @param {Object} options - Provide various options\n * @param {Boolean} options.localTimeEnabled - A flag to indicate either the lines is\n * time dependent.\n * @param {Boolean} options.localMorphColour - A flag to indicate either the colour is\n * time dependent.\n */\n\tthis.createLineSegment = (geometryIn, materialIn, options) => {\n\t\tif (geometryIn && materialIn) {\n\t\t\tlet geometry = toBufferGeometry(geometryIn, options);\n\t\t\tif (options.localMorphColour && geometry.morphAttributes[ \"color\" ])\n\t\t\t\tmaterialIn.onBeforeCompile = (require(\"./augmentShader\").augmentMorphColor)();\n let line = new (require(\"../three/line/LineSegments\").LineSegments)(geometry, materialIn);\n this.setMesh(line, options.localTimeEnabled, options.localMorphColour);\n\t\t}\n\t}\n\n /**\n * Set the width for the lines.\n * \n * @param {Number} width - Width of the lines.\n */\n\tthis.setWidth = width => {\n\t\tif (this.morph && this.morph.material) {\n\t\t\tthis.morph.material.linewidth = width;\n\t\t\tthis.morph.material.needsUpdate = true;\n\t\t}\n\t}\n\n /**\n * Add new lines to existing lines if it exists, otherwise\n * create a new one and add to it.\n * @param {Array} coords -An array of three components coordinates.\n\n * @param {Number} colour - A hex value of the colour for the points\n */\n\tthis.addLines = (coords, colour) => {\n if (coords && coords.length > 0) {\n const geometry = this.addVertices(coords);\n let mesh = this.getMorph();\n if (!mesh) {\n let material = new THREE.LineBasicMaterial({color:colour});\n const options = { localTimeEnabled: false, localMorphColour: false};\n geometry.colorsNeedUpdate = true;\n this.createLineSegment(geometry, material, options);\n }\n if (this.region) this.region.pickableUpdateRequired = true;\n }\n\t}\n}\n\nLines.prototype = Object.create((require('./zincObject').ZincObject).prototype);\nexports.Lines = Lines;\n","const THREE = require('three');\n\n/**\n * Texture array object for holding array of images into\n * texures unit that can be used by other texture primitives.\n * \n * @class\n * @author Alan Wu\n * @return {TextureArray}\n */\nconst TextureArray = function () {\n (require('./texture').Texture).call(this);\n this.isTextureArray = true;\n\n\n /**\n * Read images from an array containg src locations.\n * \n * @async\n * @param {Array} srcArrays - List of source location of the images.\n */\n this.loadFromImages = async (srcArrays) => {\n let w = 1;\n let h = 1;\n let d = 0;\n if (srcArrays && srcArrays.length) {\n this.isLoading = true;\n const image = new Image();\n image.crossOrigin = \"Anonymous\";\n const canvas = document.createElement(\"canvas\");\n let length = 0;\n const dataStacks = new Array(srcArrays.length);\n for (let i = 0; i < srcArrays.length; i++) {\n const data = await this.imageToUint8Array(this, image, srcArrays[i], canvas);\n if (data && data.array) {\n w = data.width;\n h = data.height;\n dataStacks[d] = data.array;\n length += dataStacks[d].length;\n d++;\n }\n }\n const fullArray = new Uint8Array(length);\n length = 0;\n dataStacks.forEach(data => {\n fullArray.set(data, length);\n length += data.length;\n });\n\n this.impl = new THREE.DataTexture2DArray(fullArray, w, h, d);\n this.size = {\n width: w,\n height: h,\n depth: d\n };\n this.isLoading = false;\n this.impl.needsUpdate = true;\n }\n }\n\n /**\n * Get and create the material containing shaders and the textures.\n * The texture must be read and ready before calling this function.\n * \n *\n * @param {Object} options - Customise the material with the options object.\n * @param {String} options.fs - string of the fragment shader used for \n * visualisation.\n * @param {String} options.vs - string of the vertex shader used for \n * visualisation.\n * @param {Object} options.uniforms - Containing the data to be passed into the shaders.\n * @param {String} options.glslVersion - Version of glsl used for compile this shader.\n * \n */\n this.getMaterial = (options) => {\n if (this.impl) {\n let material = undefined;\n if (options) {\n if (options.vs && options.fs) {\n let transparent = true;\n if (\"transparent\" in options) {\n transparent = options.transparent;\n }\n let side = THREE.FrontSide;\n if (options.side)\n side = options.side;\n material = new THREE.ShaderMaterial({\n transparent,\n uniforms: options.uniforms,\n vertexShader: options.vs,\n fragmentShader: options.fs,\n side\n });\n if (options.glslVersion) {\n material.glslVersion = options.glslVersion;\n }\n }\n } else {\n material = new THREE.MeshBasicMaterial({\n color: new THREE.Color(1, 1, 1),\n transparent: false,\n opacity: 1.0,\n map: this.impl,\n side: THREE.DoubleSide\n });\n }\n if (material) {\n material.needsUpdate = true;\n return material;\n }\n }\n }\n}\n\nTextureArray.prototype = Object.create((require('./texture').Texture).prototype);\nexports.TextureArray = TextureArray;\n","const THREE = require('three');\n\n/**\n * Base texture object for importing images and turning them into\n * texures unit that can be used by other texture primitives.\n * \n * @class\n * @author Alan Wu\n * @return {Texture}\n */\nconst Texture = function () {\n this.isTexture = true;\n this.impl = undefined;\n this.isLoading = false;\n this.size = {\n width: 1,\n height: 1,\n depth: 0\n };\n}\n\n/**\n * Read an image from src.\n * \n * @async\n * @param {Image} img - An image object.\n * @param {String} src - Source location of the image.\n * \n * @return {Promise} img on resolve.\n */\nTexture.prototype.loadImage = function (img, src) {\n return new Promise((resolve, reject) => {\n img.onload = () => resolve(img);\n img.onerror = reject;\n img.src = src;\n })\n}\n\n/**\n @typedef IMAGE_UINT8_RETURN\n @type {Set}\n @property {Uint8Array} array - Array containing the uint8 image value.\n @property {Number} width - Phyiscal image width.\n @property {Number} height - Phyiscal image height.\n */\n/**\n * Read an image from src and turn it into Uint8Array.\n * \n * @async\n * @param {Image} img - An image object.\n * @param {String} src - Source location of the image.\n * @param {Canvas} canvas - Canvas html element used for the conversion.\n * \n * @return {IMAGE_UNIT8_RETURN}\n */\nTexture.prototype.imageToUint8Array = async function (instance, img, src, canvas) {\n await instance.loadImage(img, src);\n canvas.width = img.width;\n canvas.height = img.height;\n const ctx = canvas.getContext(\"2d\");\n ctx.drawImage(img, 0, 0);\n return {\n array: new Uint8Array(ctx.getImageData(0, 0, canvas.width, canvas.height).data.buffer),\n width: canvas.width,\n height: canvas.height\n };\n}\n\nTexture.prototype.loadFromImages = async function (srcArrays) {\n return\n}\n\n/**\n * Return true if the texture is ready for consumption.\n * \n * @return {Boolean}\n */\nTexture.prototype.isReady = function () {\n if (this.impl && !this.isLoading)\n return true;\n return false;\n}\n\n/**\n * Return true if the texture is ready for consumption, otherwise false.\n * \n * @return {Boolean}\n */\nTexture.prototype.getMaterial = function () {\n if (this.impl) {\n return new THREE.MeshBasicMaterial({\n color: new THREE.Color(1, 1, 1),\n transparent: false,\n opacity: 1.0,\n map: this.impl,\n side: THREE.DoubleSide\n });\n }\n}\n\nexports.Texture = Texture;\n","const THREE = require('three');\nconst shader = require(\"../shaders/textureSlide.js\");\n/**\n * Provides a class which create a texture stacks in a block\n * with shaders allowing slices of texture to be displayed.\n * \n * @param {TextureArray} textureIn - An object of texture array\n * holding texture information.\n * \n * @class\n * @author Alan Wu\n * @return {TextureSlides}\n */\nconst TextureSlides = function (textureIn) {\n (require('./texturePrimitive').TexturePrimitive).call(this, textureIn);\n this.isTextureSlides = true;\n const textureSettings = [];\n const idTextureMap = {};\n this.morph = new THREE.Group();\n this.group = this.morph;\n this.morph.userData = this;\n let edgesLine = undefined;\n let flipY = true;\n\n /**\n @typedef SLIDE_SETTINGS\n @type {Set}\n @property {String} direction - the value must be x, y or z, specify the\n direction the slide should be facing.\n @property {Number} value - Normalised value of the location on direction.\n @property {String} id - ID of the mesh, it is only available if the settings\n is returned from {@link TextureSlides.createSlide} or \n {@link TextureSlides.getTextureSettings}.\n */\n /**\n * Create the slides required for visualisation based on the slide settings.\n * The slides themselves are {THREE.PlanGeometry} objects.\n * \n * @param {SLIDE_SETTINGS} slideSettings - An array to each slide settings.\n */\n this.createSlides = slideSettings => {\n slideSettings.forEach(slide => this.createSlide(slide));\n }\n\n /**\n * Set the value of the uniforms for a specific mesh in this\n * texture slide object.\n *\n * @param {THREE.Mesh} mesh - Mesh to be modified\n * @param {SLIDE_SETTINGS} slideSettings - Slide settings.\n */\n const setUniformSlideSettingsOfMesh = (mesh, settings) => {\n const material = mesh.material;\n const uniforms = material.uniforms;\n mesh.rotation.x = 0;\n mesh.rotation.y = 0;\n mesh.rotation.z = 0;\n mesh.position.x = 0;\n mesh.position.y = 0;\n mesh.position.z = 0;\n switch (settings.direction) {\n case \"x\":\n const rotation = -Math.PI / 2;\n mesh.rotation.y = rotation;\n uniforms.direction.value = 1;\n uniforms.slide.value.set(settings.value, 0, 0);\n mesh.position.x = settings.value;\n break;\n case \"y\":\n mesh.rotation.x = Math.PI / 2;\n uniforms.direction.value = 2;\n uniforms.slide.value.set(0, settings.value, 0);\n mesh.position.y = settings.value;\n break;\n case \"z\":\n uniforms.direction.value = 3;\n uniforms.slide.value.set(0, 0, settings.value);\n mesh.position.z = settings.value;\n break;\n default:\n break;\n }\n material.needsUpdate = true;\n this.boundingBoxUpdateRequired = true;\n }\n\n /**\n * Modify the mesh based on a setting\n *\n * @param {SLIDE_SETTINGS} settings - s.\n */\n this.modifySlideSettings = (settings) => {\n if (settings && settings.id &&\n settings.id in idTextureMap &&\n idTextureMap[settings.id]) {\n setUniformSlideSettingsOfMesh(idTextureMap[settings.id], settings);\n }\n }\n\n /**\n * Create a slide required for visualisation based on the slide settings.\n * The slide itself is an {THREE.PlanGeometry} object.\n *\n * @param {SLIDE_SETTINGS} settings -settings of the slide to be created.\n * @return {SLIDE_SETTINGS} - Returned settings, it includes the newly\n * created mesh's id.\n */\n this.createSlide = settings => {\n if (this.texture && this.texture.isTextureArray && this.texture.isReady()) {\n if (settings && settings.direction && settings.value !== undefined) {\n const geometry = new THREE.PlaneGeometry(1, 1);\n geometry.translate(0.5, 0.5, 0);\n const uniforms = shader.getUniforms();\n uniforms.diffuse.value = this.texture.impl;\n uniforms.depth.value = this.texture.size.depth;\n uniforms.flipY.value = flipY;\n \n const options = {\n fs: shader.fs,\n vs: shader.vs,\n uniforms: uniforms,\n glslVersion: shader.glslVersion,\n side: THREE.DoubleSide,\n transparent: false\n };\n const material = this.texture.getMaterial(options);\n material.needsUpdate = true;\n const mesh = new THREE.Mesh(geometry, material);\n mesh.name = this.groupName;\n mesh.userData = this;\n const slideSettings = {\n value: settings.value,\n direction: settings.direction,\n id: mesh.id,\n };\n textureSettings.push(slideSettings);\n setUniformSlideSettingsOfMesh(mesh, slideSettings);\n idTextureMap[mesh.id] = mesh;\n this.morph.add(mesh);\n this.boundingBoxUpdateRequired = true;\n return slideSettings;\n }\n }\n }\n\n /**\n * Return a copy of texture settings used by this object.\n *\n * @return {SLIDE_SETTINGS} - Returned the list of settings.\n */\n this.getTextureSettings = () => {\n return [...textureSettings];\n }\n\n /**\n * Return a copy of texture settings with corresponding id used by this object.\n *\n * @return {SLIDE_SETTINGS} - Returned a copy of settings with corresponding id.\n */\n this.getTextureSettingsWithId = (id) => {\n for (let i = 0; i < textureSettings.length; i++) {\n if (id === textureSettings[i].id) {\n return {...textureSettings[i]};\n }\n }\n }\n\n /**\n * Get the array of slides, return them in an array\n *\n * @return {Array} - Return an array of {@link THREE.Object)\n */\n this.getSlides = () => {\n if (this.morph) return [...this.morph.children];\n return [];\n }\n\n /**\n * Remove a slide, this will dispose the slide and its material.\n *\n * @param {Slide} slide - Slide to be remvoed\n */\n this.removeSlide = slide => {\n if (slide) {\n this.removeSlideWithId(slide.id);\n }\n }\n\n /**\n * Remove a slide, this will dispose the slide and its material.\n *\n * @param {Number} id - id of slide to be remvoed\n */\n this.removeSlideWithId = id => {\n if (this.morph && id in idTextureMap && idTextureMap[id]) {\n if (this.morph.getObjectById(id)) {\n const slide = idTextureMap[id];\n this.morph.remove(slide);\n slide.clear();\n if (slide.geometry)\n slide.geometry.dispose();\n if (slide.material)\n slide.material.dispose();\n this.boundingBoxUpdateRequired = true;\n }\n const index = textureSettings.findIndex(item => item.id === id);\n if (index > -1) {\n textureSettings.splice(index, 1);\n }\n }\n }\n\n /**\n * Clean up all internal objects.\n */\n this.dispose = () => {\n this.morph.children.forEach(slide => {\n if (slide.geometry)\n slide.geometry.dispose();\n if (slide.material)\n slide.material.dispose();\n });\n (require('./texturePrimitive').TexturePrimitive).prototype.dispose.call(this);\n this.boundingBoxUpdateRequired = true;\n }\n\n //Expand the boundingbox with slide settings\n const expandBoxWithSettings = (box, settings, vector) => {\n if (settings) {\n switch (settings.direction.value) {\n case 1:\n vector.copy(settings.slide.value);\n box.expandByPoint(vector);\n vector.setY(1.0);\n vector.setZ(1.0);\n box.expandByPoint(vector);\n break;\n case 2:\n vector.copy(settings.slide.value);\n box.expandByPoint(vector);\n vector.setX(1.0);\n vector.setZ(1.0);\n box.expandByPoint(vector);\n break;\n case 3:\n vector.copy(settings.slide.value);\n box.expandByPoint(vector);\n vector.setX(1.0);\n vector.setY(1.0);\n box.expandByPoint(vector);\n break;\n default:\n break;\n }\n }\n }\n\n /**\n * Get the bounding box of this slides.\n * It uses the max and min of the slides position and the\n * transformation to calculate the position of the box.\n * \n * @return {THREE.Box3}.\n */\n this.getBoundingBox = () => {\n if (this.morph && this.morph.children && this.morph.visible &&\n this.boundingBoxUpdateRequired) {\n this.cachedBoundingBox.makeEmpty();\n const vector = new THREE.Vector3(0, 0, 0);\n this.morph.children.forEach(slide => {\n expandBoxWithSettings(this.cachedBoundingBox, slide.material.uniforms,\n vector);\n });\n this.morph.updateMatrixWorld (true, true);\n this.cachedBoundingBox.applyMatrix4(this.morph.matrixWorld);\n this.boundingBoxUpdateRequired = false;\n }\n return this.cachedBoundingBox;\n }\n\n this.applyTransformation = (rotation, position, scale) => {\n const matrix = new THREE.Matrix4();\n matrix.set(\n rotation[0],\n rotation[1],\n rotation[2],\n 0,\n rotation[3],\n rotation[4],\n rotation[5],\n 0,\n rotation[6],\n rotation[7],\n rotation[8],\n 0,\n 0,\n 0,\n 0,\n 0\n );\n const quaternion = new THREE.Quaternion().setFromRotationMatrix(matrix);\n this.morph.position.set(...position);\n this.morph.quaternion.copy( quaternion );\n this.morph.scale.set(...scale);\n this.morph.updateMatrix();\n this.boundingBoxUpdateRequired = true;\n }\n\n this.setRenderOrder = (order) => {\n //multiilayers\n this.morph.renderOrder = order;\n }\n\n this.initialise = (textureData, finishCallback) => {\n if (textureData) {\n const locations = textureData.locations;\n if (locations && locations.length > 0) {\n this.applyTransformation(locations[0].orientation,\n locations[0].position, locations[0].scale);\n if (\"flipY\" in locations[0]) {\n flipY = locations[0].flipY;\n }\n }\n this.createSlides(textureData.settings.slides);\n if (finishCallback != undefined && (typeof finishCallback == 'function')) {\n finishCallback(this);\n }\n }\n }\n\n this.showEdges = (color) => {\n if (!edgesLine) {\n const geometry = new THREE.BoxGeometry( 1, 1, 1 );\n geometry.translate(0.5, 0.5, 0.5);\n const edges = new THREE.EdgesGeometry( geometry );\n edgesLine = new THREE.LineSegments(edges, new THREE.LineBasicMaterial( { color } ) );\n this.group.add( edgesLine );\n } else {\n edgesLine.material.color = color;\n }\n edgesLine.visible = true;\n }\n\n this.hideEdges = () => {\n if (edgesLine) {\n edgesLine.visible = false;\n }\n }\n}\n\nTextureSlides.prototype = Object.create((require('./texturePrimitive').TexturePrimitive).prototype);\nTextureSlides.prototype.constructor = TextureSlides;\nexports.TextureSlides = TextureSlides;\n","const THREE = require('three');\n\nconst glslVersion = THREE.GLSL3;\n\nconst fs =\n`\nprecision highp float;\nprecision highp int;\nprecision highp sampler2DArray;\n\nuniform sampler2DArray diffuse;\nuniform bool discardAlpha;\nin vec3 vUw;\n\nout vec4 outColor;\n\nvoid main() {\n\n vec4 color = texture( diffuse, vUw );\n\n // lighten a bit\n if (discardAlpha && color.a == 0.0) discard;\n\n outColor = vec4( color.rgba );\n\n}\n`;\n\nconst vs = \n`\nout vec3 vUw;\nuniform float depth;\nuniform vec3 slide;\nuniform int direction;\nuniform bool flipY;\n\nvoid main() {\n\n vec3 slidePos = position.xyz;\n gl_Position = projectionMatrix * modelViewMatrix * vec4( position.xyz, 1.0 );\n\n if (direction == 1)\n slidePos = vec3(slide.x, position.y, position.x);\n if (direction == 2)\n slidePos = vec3(position.x, slide.y, position.y);\n if (direction == 3)\n slidePos = vec3(position.x, position.y, slide.z);\n\n if (flipY) \n slidePos.y = 1.0 - slidePos.y;\n\n vUw.xyz = vec3(slidePos.x, slidePos.y, slidePos.z * depth);\n\n}\n`;\n\nconst getUniforms = function() {\n return {\n diffuse: { value: undefined },\n depth: { value: 1 },\n slide: { value: new THREE.Vector3( 0, 0, 1 ) },\n direction: {value: 1},\n flipY: { value: true},\n discardAlpha: {value: true},\n };\n}\n\nexports.fs = fs;\nexports.vs = vs;\nexports.glslVersion = glslVersion;\nexports.getUniforms = getUniforms;\n","const THREE = require('three');\nconst resolveURL = require('../utilities').resolveURL;\n/**\n * Provides a base class object which stores textures and rendering object.\n * \n * @class\n * @author Alan Wu\n * @return {TexturePrimitive}\n */\nconst TexturePrimitive = function (textureIn) {\n (require('./zincObject').ZincObject).call(this);\n this.isTexturePrimitive = true;\n this.texture = textureIn;\n\n /**\n * Load texture data into this primitves.\n * \n * @param {Object} textureData - contains the informations about the textures.\n * @param {Function} finishCallback - User's function to be called once texture's\n * is loaded.\n */\n this.load = (textureData, finishCallback, isInline) => {\n if (textureData) {\n if (textureData.images && textureData.images.source) {\n const texture = new (require('../texture/textureArray').TextureArray)();\n const imgArray = [];\n textureData.images.source.forEach(img => {\n imgArray.push(resolveURL(img));\n });\n const _this = this;\n texture.loadFromImages(imgArray).then(() => {\n _this.texture = texture;\n _this.initialise(textureData, finishCallback);\n });\n }\n }\n }\n\n /**\n * Initialise a texture based on the provided textureData, this should be used\n * internally only.\n * \n * @param {Object} textureData - contains the informations about the textures.\n * @param {Function} finishCallback - User's function to be called once texture's\n * is loaded.\n */\n this.initialise = (textureData, finishCallback) => {\n if (finishCallback != undefined && (typeof finishCallback == 'function')) {\n finishCallback(this);\n }\n }\n\n\n}\n\nTexturePrimitive.prototype = Object.create((require('./zincObject').ZincObject).prototype);\nTexturePrimitive.prototype.constructor = TexturePrimitive;\nexports.TexturePrimitive = TexturePrimitive;\n","const THREE = require('three');\r\nconst ResizeSensor = require('css-element-queries/src/ResizeSensor');\r\n/**\r\n * Create a Zinc 3D renderer in the container provided.\r\n * The primary function of a Zinc 3D renderer is to display the current\r\n * scene (@link Scene} set to the renderer and each scene may contain as \r\n * many geometries, glyphset and other primitives as the system can support.\r\n * Zinc.Renderer also allows additional scenes to be displayed.\r\n * \r\n * @param {Object} containerIn - Container to create the renderer on.\r\n * @class\r\n * @author Alan Wu\r\n * @return {Renderer}\r\n */\r\nexports.Renderer = function (containerIn) {\r\n\r\n\tlet container = containerIn;\r\n\t\r\n\tconst stats = 0;\r\n\t\r\n\tlet renderer = undefined;\r\n\tlet currentScene = undefined;\r\n\r\n\t//myGezincGeometriestains a tuple of the threejs mesh, timeEnabled, morphColour flag, unique id and morph\r\n\tconst clock = new THREE.Clock(false);\r\n\tthis.playAnimation = true;\r\n /* default animation update rate, rate is 1000 and duration \r\n is default to 6000, 6s to finish a full animation */\r\n\tlet playRate = 1000;\r\n\tlet preRenderCallbackFunctions = [];\r\n let preRenderCallbackFunctions_id = 0;\r\n let postRenderCallbackFunctions = [];\r\n\tlet postRenderCallbackFunctions_id = 0;\r\n\tlet animated_id = undefined;\r\n\tlet cameraOrtho = undefined, sceneOrtho = undefined, logoSprite = undefined;\r\n\tlet sceneMap = [];\r\n\tlet additionalActiveScenes = [];\r\n\tlet scenesGroup = new THREE.Group();\r\n\tlet canvas = undefined;\r\n let sensor = undefined;\r\n let isRendering = false;\r\n\tconst _this = this;\r\n\tconst currentSize = [0, 0];\r\n\tconst currentOffset = [0, 0];\r\n\t\r\n\tthis.getDrawingWidth = () => {\r\n\t\tif (container) {\r\n\t\t\treturn container.clientWidth;\r\n\t\t} else if (canvas)\r\n\t\t\tif (typeof canvas.clientWidth !== 'undefined')\r\n\t\t\t\treturn Math.round(canvas.clientWidth);\r\n\t\t\telse\r\n\t\t\t\treturn Math.round(canvas.width);\r\n\t\treturn 0;\r\n\t}\r\n\t\r\n\tthis.getDrawingHeight = () => {\r\n\t\tif (container) {\r\n\t\t\treturn container.clientHeight;\r\n\t\t} else if (canvas)\r\n\t\t\tif (typeof canvas.clientHeight !== 'undefined')\r\n\t\t\t\treturn Math.round(canvas.clientHeight);\r\n\t\t\telse\r\n\t\t\t\treturn Math.round(canvas.height);\r\n\t\treturn 0;\r\n\t}\r\n\t\r\n\t/** \r\n\t * Call this to resize the renderer, this is normally call automatically.\r\n\t */\r\n\tthis.onWindowResize = () => {\r\n\t\tcurrentScene.onWindowResize();\r\n\t\tconst width = this.getDrawingWidth();\r\n\t\tconst height = this.getDrawingHeight();\r\n\t\tif (renderer != undefined) {\r\n\t\t\tlet localRect = undefined;\r\n\t\t\tif (container) {\r\n\t\t\t\tlocalRect = container.getBoundingClientRect();\r\n\t\t\t\trenderer.setSize(width, height);\r\n\t\t\t} else if (canvas) {\r\n\t\t\t\tif (typeof canvas.getBoundingClientRect !== 'undefined') {\r\n\t\t\t\t\tlocalRect = canvas.getBoundingClientRect();\r\n\t\t\t\t\tcanvas.width = width;\r\n\t\t\t\t\tcanvas.height = height;\r\n\t\t\t\t\trenderer.setSize(width, height, false);\r\n\t\t\t\t} else {\r\n\t\t\t\t\trenderer.setSize(width, height, false);\r\n\t\t\t\t\t\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif (localRect) {\r\n\t\t\t\tcurrentOffset[0] = localRect.left;\r\n\t\t\t\tcurrentOffset[1] = localRect.top;\r\n\t\t\t}\r\n\t\t\tconst target = new THREE.Vector2();\r\n\t\t\trenderer.getSize(target);\r\n\t\t\tcurrentSize[0] = target.x;\r\n\t\t\tcurrentSize[1] = target.y;\r\n\t\t}\r\n\t}\r\n\t\r\n\t/**\r\n\t * Initialise the renderer and its visualisations.\r\n\t */\r\n\tthis.initialiseVisualisation = parameters => {\r\n\t parameters = parameters || {};\r\n\t if (parameters['antialias'] === undefined) {\r\n let onMobile = false;\r\n try {\r\n if( /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent) ) {\r\n onMobile = true;\r\n }\r\n }\r\n catch(err) {\r\n onMobile = false;\r\n }\r\n if (onMobile)\r\n parameters['antialias'] = false;\r\n else\r\n parameters['antialias'] = true;\r\n\t }\r\n\t if (parameters[\"canvas\"]) {\r\n\t\t container = undefined;\r\n\t\t canvas = parameters[\"canvas\"];\r\n\t }\r\n renderer = new THREE.WebGLRenderer(parameters);\r\n if (container !== undefined) {\r\n\t\t container.appendChild( renderer.domElement );\r\n }\r\n\t renderer.setClearColor( 0xffffff, 1);\r\n\t if (canvas && canvas.style) {\r\n\t\t canvas.style.height = \"100%\";\r\n\t\t canvas.style.width = \"100%\";\r\n }\r\n renderer.autoClear = false;\r\n\t const scene = this.createScene(\"default\");\r\n\t this.setCurrentScene(scene);\r\n\t}\r\n\t\r\n\t/**\r\n\t * Get the current scene on display.\r\n\t * @return {Zinc.Scene};\r\n\t */\r\n\tthis.getCurrentScene = () => {\r\n\t\treturn currentScene;\r\n\t}\r\n\t\r\n\t/**\r\n\t * Set the current scene on display.\r\n\t * \r\n\t * @param {Zinc.Scene} sceneIn - The scene to be set, only scene created by this instance\r\n\t * of ZincRenderer is supported currently.\r\n\t */\r\n\tthis.setCurrentScene = sceneIn => {\r\n\t\tif (sceneIn) {\r\n\t\t\tthis.removeActiveScene(sceneIn);\r\n\t\t\tconst oldScene = currentScene;\r\n\t\t\tcurrentScene = sceneIn;\r\n\t\t\tif (oldScene) {\r\n\t\t\t\toldScene.setInteractiveControlEnable(false);\r\n\t\t\t}\r\n\t\t\tcurrentScene.setInteractiveControlEnable(true);\r\n\t\t\tcurrentScene.setAdditionalScenesGroup(scenesGroup);\r\n\t\t\tthis.onWindowResize();\r\n\t\t}\r\n\t}\r\n\t\r\n\t/**\r\n\t * Return scene with the matching name if scene with that name has been created.\r\n\t * \r\n\t * @param {String} name - Name to match\r\n\t * @return {Zinc.Scene}\r\n\t */\r\n\tthis.getSceneByName = name => {\r\n\t\treturn sceneMap[name];\r\n\t}\r\n\t\r\n\t/**\r\n\t * Create a new scene with the provided name if scene with the same name exists,\r\n\t * return undefined.\r\n\t * \r\n\t * @param {String} name - Name of the scene to be created.\r\n\t * @return {Zinc.Scene}\r\n\t */\r\n\tthis.createScene = name => {\r\n\t\tif (sceneMap[name] != undefined){\r\n\t\t\treturn undefined;\r\n\t\t} else {\r\n\t\t\tlet new_scene = undefined;\r\n\t\t\tif (canvas)\r\n\t\t\t\tnew_scene = new (require('./scene').Scene)(canvas, renderer);\r\n\t\t\telse\r\n\t\t\t\tnew_scene = new (require('./scene').Scene)(container, renderer);\r\n\t\t\tsceneMap[name] = new_scene;\r\n\t\t\tnew_scene.sceneName = name;\r\n\t\t\treturn new_scene;\r\n\t\t}\r\n\t}\r\n\t\r\n\tconst updateOrthoScene = () => {\r\n\t\tif (logoSprite != undefined) {\r\n\t\t\tconst material = logoSprite.material;\r\n\t\t\tif (material.map) {\r\n\t\t\t\tconst width = this.getDrawingWidth();\r\n\t\t\t\tconst height = this.getDrawingHeight();\r\n\t\t\t\tconst calculatedWidth = (width - material.map.image.width)/2;\r\n\t\t\t\tconst calculatedHeight = (-height + material.map.image.height)/2;\r\n\t\t\t\tlogoSprite.position.set(calculatedWidth, calculatedHeight, 1 );\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\t\r\n\tconst updateOrthoCamera = () => {\r\n\t\tif (cameraOrtho != undefined) {\r\n\t\t\tconst width = this.getDrawingWidth();\r\n\t\t\tconst height = this.getDrawingHeight();\r\n\t\t\tcameraOrtho.left = -width / 2;\r\n\t\t\tcameraOrtho.right = width / 2;\r\n\t\t\tcameraOrtho.top = height / 2;\r\n\t\t\tcameraOrtho.bottom = -height / 2;\r\n\t\t\tcameraOrtho.updateProjectionMatrix();\r\n\t\t}\r\n\t};\r\n\t\r\n\t/**\r\n\t * Reset the viewport of the current scene to its original state.\r\n\t */\r\n\tthis.resetView = () => {\r\n\t\tcurrentScene.resetView();\r\n\t}\r\n\t\r\n\t/**\r\n\t * Adjust zoom distance to include all primitives in scene and also the additional scenes\r\n\t * but the lookat direction and up vectors will remain constant.\r\n\t */\r\n\tthis.viewAll = () => {\r\n\t\tif (currentScene) {\t\r\n\t\t\tconst boundingBox = currentScene.getBoundingBox();\r\n\t\t\tif (boundingBox) {\r\n\t\t\t for(let i = 0; i < additionalActiveScenes.length; i++) {\r\n\t\t\t const boundingBox2 = additionalActiveScenes[i].getBoundingBox();\r\n\t\t\t if (boundingBox2) {\r\n\t\t\t \tboundingBox.union(boundingBox2);\r\n\t\t\t }\r\n\t\t\t }\r\n\t\t\t\tcurrentScene.viewAllWithBoundingBox(boundingBox);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\t\r\n\t/**\r\n\t * Load a legacy model(s) format with the provided URLs and parameters. This only loads the geometry\r\n\t * without any of the metadata. Therefore, extra parameters should be provided. This should be\r\n\t * called from {@link Zinc.Scene}.\r\n\t * \r\n\t * @deprecated\r\n\t */\r\n\tthis.loadModelsURL = (urls, colours, opacities, timeEnabled, morphColour, finishCallback) => {\r\n\t\tcurrentScene.loadModelsURL(urls, colours, opacities, timeEnabled, morphColour, finishCallback);\r\n\t}\r\n\t\r\n\tconst loadView = viewData => {\r\n\t\tcurrentScene.loadView(viewData);\r\n\t};\r\n\t\r\n\t/**\r\n\t * Load the viewport from an external location provided by the url. This should be\r\n\t * called from {@link Zinc.Scene};\r\n\t * @param {String} URL - address to the file containing viewport information.\r\n\t * @deprecated\r\n\t */\r\n\tthis.loadViewURL = url => {\r\n\t\tcurrentScene.loadViewURL(url);\r\n\t}\r\n\t\r\n\t/**\r\n\t * Load a legacy file format containing the viewport and its model file from an external \r\n\t * location provided by the url. Use the new metadata format with\r\n\t * {@link Zinc.Scene#loadMetadataURL} instead. This should be\r\n\t * called from {@link Zinc.Scene};\r\n\t * \r\n\t * @param {String} URL - address to the file containing viewport and model information.\r\n\t * @deprecated\r\n\t */\r\n\tthis.loadFromViewURL = (jsonFilePrefix, finishCallback) => {\r\n\t\tcurrentScene.loadFromViewURL(jsonFilePrefix, finishCallback);\r\n\t}\r\n\t\r\n\tthis.updateDirectionalLight = () => {\r\n\t\tcurrentScene.updateDirectionalLight();\r\n\t}\r\n \r\n let runAnimation = () => {\r\n if (isRendering) {\r\n animated_id = requestAnimationFrame( runAnimation );\r\n this.render();\r\n } else {\r\n cancelAnimationFrame(animated_id);\r\n animated_id = undefined;\r\n }\r\n }\r\n\r\n\t/**\r\n\t * Stop the animation and renderer to get into the render loop.\r\n\t */\r\n\tthis.stopAnimate = () => {\r\n if (isRendering) {\r\n clock.stop();\r\n isRendering = false;\r\n }\r\n\t}\r\n\r\n\t/**\r\n\t * Start the animation and begin the rendering loop.\r\n\t */\r\n\tthis.animate = () => {\r\n if (!isRendering) {\r\n clock.start();\r\n isRendering = true;\r\n runAnimation();\r\n }\r\n\t}\r\n\r\n\tconst prevTime = Date.now();\r\n\t\r\n\t/**\r\n\t * Add a callback function which will be called everytime before the renderer renders its scene.\r\n\t * @param {Function} callbackFunction - callbackFunction to be added.\r\n\t * \r\n\t * @return {Number}\r\n\t */\r\n\tthis.addPreRenderCallbackFunction = callbackFunction => {\r\n\t\tpreRenderCallbackFunctions_id = preRenderCallbackFunctions_id + 1;\r\n\t\tpreRenderCallbackFunctions[preRenderCallbackFunctions_id] = callbackFunction;\r\n\t\treturn preRenderCallbackFunctions_id;\r\n\t}\r\n\t\r\n\t/**\r\n\t * Remove a callback function that is previously added to the scene.\r\n\t * @param {Number} id - identifier of the previously added callback function.\r\n\t */\r\n\tthis.removePreRenderCallbackFunction = id => {\r\n\t\tif (id in preRenderCallbackFunctions) {\r\n \t\t\tdelete preRenderCallbackFunctions[id];\r\n\t\t}\r\n\t}\r\n \r\n\t/**\r\n\t * Add a callback function which will be called everytime after the renderer renders its scene.\r\n\t * @param {Function} callbackFunction - callbackFunction to be added.\r\n\t * \r\n\t * @return {Number}\r\n\t */\r\n\tthis.addPostRenderCallbackFunction = callbackFunction => {\r\n\t\tpostRenderCallbackFunctions_id = postRenderCallbackFunctions_id + 1;\r\n\t\tpostRenderCallbackFunctions[postRenderCallbackFunctions_id] = callbackFunction;\r\n\t\treturn postRenderCallbackFunctions_id;\r\n\t}\r\n\t\r\n\t/**\r\n\t * Remove a callback function that is previously added to the scene.\r\n\t * @param {Number} id - identifier of the previously added callback function.\r\n\t */\r\n\tthis.removePostRenderCallbackFunction = id => {\r\n\t\tif (id in postRenderCallbackFunctions) {\r\n \t\t\tdelete postRenderCallbackFunctions[id];\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Get the current play rate, playrate affects how fast an animated object animates.\r\n\t * Also see {@link Zinc.Scene#duration}.\r\n\t */\r\n\tthis.getPlayRate = () => {\r\n\t\treturn playRate;\r\n\t}\r\n\t\r\n\t/**\r\n\t * Set the current play rate, playrate affects how fast an animated object animates.\r\n\t * @param {Number} PlayRateIn - value to set the playrate to.\r\n\t * Also see {@link Zinc.Scene#duration}.\r\n\t */\r\n\tthis.setPlayRate = playRateIn => {\r\n\t\tplayRate = playRateIn;\r\n\t}\r\n\t\r\n\tthis.getCurrentTime = () => {\r\n\t\treturn currentScene.getCurrentTime();\r\n\t}\r\n\t\r\n\t\r\n\t/**\r\n\t * Get the current play rate, playrate affects how fast an animated object animates.\r\n\t * Also see {@link Zinc.Scene#duration}.\r\n\t */\r\n\tthis.setMorphsTime = time => {\r\n\t\tcurrentScene.setMorphsTime(time);\r\n\t}\r\n\t\r\n\t/**\r\n\t * Get {Zinc.Geoemtry} by its id. This should be called from {@link Zinc.Scene};\r\n\t * \r\n\t * @depreacted\r\n\t * @return {Zinc.Geometry}\r\n\t */\r\n\tthis.getZincGeometryByID = id => {\r\n\t\treturn currentScene.getZincGeometryByID(id);\r\n\t}\t\r\n\t\r\n\t/**\r\n\t * Add {Three.Object} to the current scene.\r\n\t */\r\n\tthis.addToScene = object => {\r\n\t\tcurrentScene.addObject(object)\r\n\t}\r\n\t\r\n\t/**\r\n\t * Add {Three.Object} to the ortho scene, objects added to the ortho scene are rendered in\r\n\t * normalised coordinates and overlay on top of current scene. \r\n\t * \r\n\t */\r\n\tthis.addToOrthoScene = object => {\r\n\t\tif (sceneOrtho == undefined)\r\n\t\t\tsceneOrtho = new THREE.Scene();\r\n\t\tif (cameraOrtho == undefined) {\r\n\t\t\tconst width = this.getDrawingWidth();\r\n\t\t\tconst height = this.getDrawingHeight();\r\n\t\t\tcameraOrtho = new THREE.OrthographicCamera( -width / 2,\r\n\t\t\t\t\twidth / 2, height/ 2, -height / 2, 1, 10 );\r\n\t\t\tcameraOrtho.position.z = 10;\r\n\t\t}\r\n\t\tsceneOrtho.add(object)\r\n\t}\r\n\t\r\n\tconst createHUDSprites = logoSprite => {\r\n\t\treturn texture => {\r\n\t\t\ttexture.needsUpdate = true;\r\n\t\t\tconst material = new THREE.SpriteMaterial( { map: texture } );\r\n\t\t\tconst imagewidth = material.map.image.width;\r\n\t\t\tconst imageheight = material.map.image.height;\r\n\t\t\tlogoSprite.material = material;\r\n\t\t\tlogoSprite.scale.set( imagewidth, imageheight, 1 );\r\n\t\t\tconst width = this.getDrawingWidth();\r\n\t\t\tconst height = this.getDrawingHeight();\r\n\t\t\tlogoSprite.position.set( (width - imagewidth)/2, (-height + imageheight)/2, 1 );\r\n\t\t\tthis.addToOrthoScene(logoSprite);\r\n\t\t};\r\n\t};\r\n\t\r\n\tthis.addLogo = () => {\r\n\t\tlogoSprite = new THREE.Sprite();\r\n\t\tconst logo = THREE.ImageUtils.loadTexture(\r\n\t\t\t\t\"images/abi_big_logo_transparent_small.png\", undefined, createHUDSprites(logoSprite));\r\n\t}\r\n\t\r\n\t/**\r\n\t * Render the current and all additional scenes. It will first update all geometries and glyphsets\r\n\t * in scenes, clear depth buffer and render the ortho scene, call the preRenderCallbackFunctions stack\r\n\t * , render the scenes then postRenderCallback.\r\n\t */\r\n\tthis.render = () => {\r\n\t\tif (!sensor) {\r\n\t\t\tif (container) {\r\n\t\t\t\tif (container.clientWidth > 0 && container.clientHeight > 0)\r\n\t\t\t\t\tsensor = new ResizeSensor(container, this.onWindowResize);\r\n\t\t\t} else if (canvas) {\r\n\t\t\t\tif (canvas.width > 0 && canvas.height > 0)\r\n\t\t\t\t\tsensor = new ResizeSensor(canvas, this.onWindowResize);\r\n\t\t\t}\r\n\t\t}\r\n\t\tconst delta = clock.getDelta();\r\n\t\tcurrentScene.renderGeometries(playRate, delta, this.playAnimation);\r\n\t for(let i = 0; i < additionalActiveScenes.length; i++) {\r\n\t const sceneItem = additionalActiveScenes[i];\r\n\t sceneItem.renderGeometries(playRate, delta, this.playAnimation);\r\n\t }\r\n\t\tif (cameraOrtho != undefined && sceneOrtho != undefined) {\r\n\t\t\trenderer.clearDepth();\r\n\t\t\trenderer.render( sceneOrtho, cameraOrtho );\r\n\t\t}\r\n for (let key in preRenderCallbackFunctions) {\r\n if (preRenderCallbackFunctions.hasOwnProperty(key)) {\r\n preRenderCallbackFunctions[key].call();\r\n }\r\n }\r\n currentScene.render(renderer);\r\n for (let key in postRenderCallbackFunctions) {\r\n if (postRenderCallbackFunctions.hasOwnProperty(key)) {\r\n postRenderCallbackFunctions[key].call();\r\n }\r\n }\r\n\t}\r\n\t\r\n\t/**\r\n\t * Get the internal {@link Three.Renderer}, to gain access to ThreeJS APIs.\r\n\t */\r\n\tthis.getThreeJSRenderer = () => {\r\n\t\treturn renderer;\r\n\t}\r\n\t\r\n\t/**\r\n\t * Check if a scene is currently active.\r\n\t * @param {Zinc.Scene} sceneIn - Scene to check if it is currently\r\n\t * rendered.\r\n\t */\r\n\tthis.isSceneActive = sceneIn => {\r\n\t\tif (currentScene === sceneIn) {\r\n\t\t\treturn true;\r\n\t\t} else {\r\n\t\t for(let i = 0; i < additionalActiveScenes.length; i++) {\r\n\t\t const sceneItem = additionalActiveScenes[i];\r\n\t\t if (sceneItem === sceneIn)\r\n\t\t \treturn true;\r\n\t\t }\r\n\t\t}\r\n\t return false;\r\n\t} \r\n\t\r\n\t/**\r\n\t * Add additional active scene for rendering, this scene will also be rendered but \r\n\t * viewport of the currentScene will be used. \r\n\t * @param {Zinc.Scene} additionalScene - Scene to be added to the rendering.\r\n\t */\r\n\tthis.addActiveScene = additionalScene => {\r\n\t\tif (!this.isSceneActive(additionalScene)) {\r\n\t\t\tadditionalActiveScenes.push(additionalScene);\r\n\t\t\tscenesGroup.add(additionalScene.getThreeJSScene());\r\n\t\t}\r\n\t}\r\n\t\r\n\t/**\r\n\t * Remove a currenrtly active scene from the renderer, this scene will also be rendered but \r\n\t * viewport of the currentScene will be used. \r\n\t * @param {Zinc.Scene} additionalScene - Scene to be removed from rendering.\r\n\t */\r\n\tthis.removeActiveScene = additionalScene => {\r\n\t for(let i = 0; i < additionalActiveScenes.length; i++) {\r\n\t const sceneItem = additionalActiveScenes[i];\r\n\t if (sceneItem === additionalScene) {\r\n\t \tadditionalActiveScenes.splice(i, 1);\r\n\t \tscenesGroup.remove(additionalScene.getThreeJSScene());\r\n\t \treturn;\r\n\t }\r\n\t }\r\n\t}\r\n\t\r\n\t/**\r\n\t * Clear all additional scenes from rendering except for curentScene.\r\n\t */\r\n\tthis.clearAllActiveScene = () => {\r\n\t\tfor (let i = 0; i < additionalActiveScenes.length; i++) {\r\n\t\t\tscenesGroup.remove(additionalActiveScenes[i].getThreeJSScene());\r\n\t\t}\r\n\t\tadditionalActiveScenes.splice(0,additionalActiveScenes.length);\r\n\t}\r\n\t\r\n\t/**\r\n\t * Dispose all memory allocated, this will effetively destroy all scenes.\r\n\t */\r\n\tthis.dispose = () => {\r\n if (isRendering)\r\n cancelAnimationFrame(animated_id);\r\n\t for (const key in sceneMap) {\r\n\t if (sceneMap.hasOwnProperty(key)) {\r\n\t sceneMap[key].clearAll();\r\n\t }\r\n\t }\r\n\t sceneMap = [];\r\n\t additionalActiveScenes = [];\r\n\t scenesGroup = new THREE.Group();\r\n\t this.stopAnimate();\r\n\t preRenderCallbackFunctions = [];\r\n\t preRenderCallbackFunctions_id = 0;\r\n\t cameraOrtho = undefined;\r\n\t sceneOrtho = undefined;\r\n\t logoSprite = undefined;\r\n\t const scene = this.createScene(\"default\");\r\n\t this.setCurrentScene(scene);\r\n\t sensor = undefined;\r\n\t}\r\n\t\r\n\t/**\r\n\t * Transition from the current viewport to the endingScene's viewport in the specified duration.\r\n\t * \r\n\t * @param {Zinc.Scene} endingScene - Viewport of this scene will be used as the destination.\r\n\t * @param {Number} duration - Amount of time to transition from current viewport to the \r\n\t * endingScene's viewport.\r\n\t */\r\n\tthis.transitionScene = (endingScene, duration) => {\r\n\t\tif (currentScene) {\r\n\t\t\tconst currentCamera = currentScene.getZincCameraControls();\r\n\t\t\tconst boundingBox = endingScene.getBoundingBox();\r\n\t\t\tif (boundingBox) {\r\n\t\t\t\tconst radius = boundingBox.min.distanceTo(boundingBox.max)/2.0;\r\n\t\t\t\tconst centreX = (boundingBox.min.x + boundingBox.max.x) / 2.0;\r\n\t\t\t\tconst centreY = (boundingBox.min.y + boundingBox.max.y) / 2.0;\r\n\t\t\t\tconst centreZ = (boundingBox.min.z + boundingBox.max.z) / 2.0;\r\n\t\t\t\tconst clip_factor = 4.0;\r\n\t\t\t\tconst endingViewport = currentCamera.getViewportFromCentreAndRadius(centreX, centreY, centreZ, radius, 40, radius * clip_factor );\r\n\t\t\t\tconst startingViewport = currentCamera.getCurrentViewport();\r\n\t\t\t\tcurrentCamera.cameraTransition(startingViewport, endingViewport, duration);\r\n\t\t\t\tcurrentCamera.enableCameraTransition();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n this.isWebGL2 = () => {\r\n if (renderer)\r\n return renderer.capabilities.isWebGL2;\r\n return false;\r\n }\r\n};\r\n","module.exports = require(\"css-element-queries/src/ResizeSensor\");","const THREE = require('three');\nconst MarkerCluster = require('./primitives/markerCluster').MarkerCluster;\nconst SceneLoader = require('./sceneLoader').SceneLoader;\nconst SceneExporter = require('./sceneExporter').SceneExporter;\nconst Viewport = require('./controls').Viewport;\nconst createBufferGeometry = require('./utilities').createBufferGeometry;\nconst getCircularTexture = require('./utilities').getCircularTexture;\nconst createNewSpriteText = require('./utilities').createNewSpriteText;\nlet uniqueiId = 0;\n\nconst getUniqueId = function () {\n return \"sc\" + uniqueiId++;\n}\n\nconst defaultMetadata = function() {\n return { \n Duration: \"6 secs\",\n OriginalDuration: \"-\",\n TimeStamps: {}\n }\n};\n\nconst defaultDuration = 6000;\n\n/**\n * A Scene contains {@link Region},and \n * {@link CameraControls} which controls the viewport and additional features.\n * It is the main object used for controlling what is and what is not displayed\n * on the renderer.\n * \n * @class\n * @param {Object} containerIn - Container to create the renderer on.\n * @author Alan Wu\n * @return {Scene}\n */\nexports.Scene = function (containerIn, rendererIn) {\n const container = containerIn;\n let videoHandler = undefined;\n let sceneLoader = new SceneLoader(this);\n let minimap = undefined;\n let zincObjectAddedCallbacks = {};\n let zincObjectAddedCallbacks_id = 0;\n let zincObjectRemovedCallbacks = {};\n let zincObjectRemovedCallbacks_id = 0;\n const scene = new THREE.Scene();\n const miniAxesScene = new THREE.Scene();\n const rootRegion = new (require('./region').Region)(undefined, this);\n scene.add(rootRegion.getGroup());\n const tempGroup = new THREE.Group();\n scene.add(tempGroup);\n /**\n * A {@link THREE.DirectionalLight} object for controlling lighting of this scene.\n */\n this.directionalLight = undefined;\n /**\n * a {@link THREE.AmbientLight} for controlling the ambient lighting of this scene.\n */\n this.ambient = undefined;\n this.camera = undefined;\n let duration = 6000;\n let zincCameraControls = undefined;\n this.sceneName = undefined;\n let stereoEffectFlag = false;\n let stereoEffect = undefined;\n this.autoClearFlag = true;\n this.displayMarkers = false;\n this.displayMinimap = false;\n this.displayMiniAxes = false;\n this.minimapScissor = {\n x_offset: 16,\n y_offset: 16,\n width: 128,\n height: 128,\n align: \"top-right\",\n updateRequired: true\n };\n let scissor = {x: 0, y: 0};\n let metadata = defaultMetadata();\n let _markerTarget = new THREE.Vector2();\n let pickableObjectsList = [];\n this.forcePickableObjectsUpdate = false;\n this.uuid = getUniqueId();\n let markerCluster = new MarkerCluster(this);\n markerCluster.disable();\n scene.add(markerCluster.group);\n let axisDisplay = {\n main: [],\n mini: [],\n }\n const _v3 = new THREE.Vector3( 0, 0, 0 );\n\n const getDrawingWidth = () => {\n if (container)\n if (typeof container.clientWidth !== \"undefined\")\n return container.clientWidth;\n else\n return container.width;\n return 0;\n }\n \n const getDrawingHeight = () => {\n if (container)\n if (typeof container.clientHeight !== \"undefined\")\n return container.clientHeight;\n else\n return container.height;\n return 0;\n }\n\n /**\n * This function returns a three component array, which contains\n * [totalsize, totalLoaded and errorDownload] of all the downloads happening\n * in this scene.\n * @returns {Array} \n */\n this.getDownloadProgress = () => {\n return sceneLoader.getDownloadProgress();\n }\n\n //called from Renderer when panel has been resized\n this.onWindowResize = () => {\n const wHeight = getDrawingHeight();\n this.camera.aspect = getDrawingWidth() / wHeight;\n this.camera.updateProjectionMatrix();\n this.minimapScissor.updateRequired = true;\n zincCameraControls.onResize();\n zincCameraControls.calculateHeightPerPixelAtZeroDepth(wHeight);\n }\n\n /**\n * Reset the viewport of this scene to its original state. \n */\n this.resetView = () => {\n this.onWindowResize();\n zincCameraControls.resetView();\n }\n\n /**\n * Set the zoom level by unit scroll rate\n */\n this.changeZoomByScrollRateUnit = unit => {\n zincCameraControls.changeZoomByScrollRateUnit(unit);\n }\n\n //Setup the camera for this scene, it also initialise the lighting\n const setupCamera = () => {\n this.camera = new THREE.PerspectiveCamera(40, getDrawingWidth() / getDrawingHeight(), 0.0, 10.0);\n this.ambient = new THREE.AmbientLight(0xffffff, 0.2);\n scene.add(this.ambient);\n\n this.directionalLight = new THREE.DirectionalLight(0xffffff, 0.8);\n scene.add(this.directionalLight);\n zincCameraControls = new (require('./controls').CameraControls)(this.camera, rendererIn.domElement, rendererIn, this);\n\n zincCameraControls.setDirectionalLight(this.directionalLight);\n zincCameraControls.resetView();\n\n minimap = new (require('./minimap').Minimap)(this);\n };\n\n setupCamera();\n\n /**\n * Load the viewport Data from the argument {@link Zinc.Viewport} and set it as \n * the default viewport of this scene.\n * \n * @param {Zinc.Viewport} viewData - Viewport data to be loaded. \n */\n this.loadView = settings => {\n const viewPort = new Viewport();\n viewPort.setFromObject(settings);\n zincCameraControls.setCurrentCameraSettings(viewPort);\n return true;\n }\n\n /**\n * Set up multiple views.\n * \n * @param {Zinc.Viewport} viewData - Viewport data to be loaded. \n */\n this.setupMultipleViews = (defaultView, entries) => {\n for (const [name, settings] of Object.entries(entries)) {\n const viewport = new Viewport();\n viewport.setFromObject(settings);\n zincCameraControls.addViewport(name, viewport);\n }\n zincCameraControls.setDefaultViewport(defaultView);\n }\n\n /**\n * Get the bounding box of all the object in this scene only.\n * \n * @returns {THREE.Box3} \n */\n this.getBoundingBox = () => {\n return rootRegion.getBoundingBox(true);\n }\n\n /**\n * Adjust the viewport to display the desired volume provided by the bounding box.\n * \n * @param {THREE.Box3} boundingBox - The bounding box which describes the volume of\n * which we the viewport should be displaying.\n */\n this.viewAllWithBoundingBox = boundingBox => {\n if (boundingBox) {\n const viewport = zincCameraControls.getViewportFromBoundingBox(boundingBox, 1.0);\n zincCameraControls.setCurrentCameraSettings(viewport);\n zincCameraControls.calculateHeightPerPixelAtZeroDepth(getDrawingHeight());\n markerCluster.markerUpdateRequired = true;\n }\n }\n\n /**\n * Adjust zoom distance to include all primitives in scene only.\n */\n this.viewAll = () => {\n const boundingBox = this.getBoundingBox();\n this.viewAllWithBoundingBox(boundingBox);\n markerCluster.markerUpdateRequired = true;\n }\n\n /**\n * A function which iterates through the list of geometries and call the callback\n * function with the geometries as the argument.\n * @param {Function} callbackFunction - Callback function with the geometry\n * as an argument.\n */\n this.forEachGeometry = callbackFunction => {\n rootRegion.forEachGeometry(callbackFunction, true);\n }\n\n /**\n * A function which iterates through the list of glyphsets and call the callback\n * function with the glyphset as the argument.\n * @param {Function} callbackFunction - Callback function with the glyphset\n * as an argument.\n */\n this.forEachGlyphset = callbackFunction => {\n rootRegion.forEachGlyphset(callbackFunction, true);\n }\n\n /**\n * A function which iterates through the list of pointsets and call the callback\n * function with the pointset as the argument.\n * @param {Function} callbackFunction - Callback function with the pointset\n * as an argument.\n */\n this.forEachPointset = callbackFunction => {\n rootRegion.forEachPointset(callbackFunction, true);\n }\n\n /**\n * A function which iterates through the list of lines and call the callback\n * function with the lines as the argument.\n * @param {Function} callbackFunction - Callback function with the lines\n * as an argument.\n */\n this.forEachLine = callbackFunction => {\n rootRegion.forEachLine(callbackFunction, true);\n }\n\n /** \n * Find and return all geometries in this scene with the matching GroupName.\n * \n * @param {String} GroupName - Groupname to match with.\n * @returns {Array}\n */\n this.findGeometriesWithGroupName = GroupName => {\n return rootRegion.findGeometriesWithGroupName(GroupName, true);\n }\n\n /** \n * Find and return all pointsets in this scene with the matching GroupName.\n * \n * @param {String} GroupName - Groupname to match with.\n * @returns {Array}\n */\n this.findPointsetsWithGroupName = GroupName => {\n return rootRegion.findPointsetsWithGroupName(GroupName, true);\n }\n /** \n * Find and return all glyphsets in this scene with the matching GroupName.\n * \n * @param {String} GroupName - Groupname to match with.\n * @returns {Array}\n */\n this.findGlyphsetsWithGroupName = GroupName => {\n return rootRegion.findGlyphsetsWithGroupName(GroupName, true);\n }\n\n /** \n * Find and return all lines in this scene with the matching GroupName.\n * \n * @param {String} GroupName - Groupname to match with.\n * @returns {Array}\n */\n this.findLinesWithGroupName = GroupName => {\n return rootRegion.findLinesWithGroupName(GroupName, true);\n }\n\n /** \n * Find a list of objects with the specified name, this will\n * tranverse through the region tree to find all child objects\n * with matching name.\n * \n * @param {String} GroupName - Groupname to match with.\n * @returns {Array}\n */\n this.findObjectsWithGroupName = GroupName => {\n return rootRegion.findObjectsWithGroupName(GroupName, true);\n }\n\n this.findObjectsWithAnatomicalId = anatomicalId => {\n return rootRegion.findObjectsWithAnatomicalId(anatomicalId, true);\n }\n\n /** \n * Get the bounding box of all zinc objects in list.\n * \n * @param {Array} objectsArray - Groupname to match with.\n * @returns {THREE.Box3}\n */\n this.getBoundingBoxOfZincObjects = objectsArray => {\n let boundingBox = undefined;\n for (let i = 0; i < objectsArray.length; i++) {\n let box = objectsArray[i].getBoundingBox();\n if (box) {\n if (!boundingBox)\n boundingBox = box;\n else\n boundingBox.union(box);\n }\n }\n return boundingBox;\n }\n\n /** \n * Convert the vector3 into screen coordinates.\n * \n * @param {THREE.Vector3} point - Vector 3 containing the point to convert,\n * this vector will be overwritten with the returned value.\n * @param {Array} objectsArray - Groupname to match with.\n * @returns {THREE.Vector3}\n */\n this.vectorToScreenXY = point => {\n point.project(this.camera);\n let width = getDrawingWidth();\n let height = getDrawingHeight();\n let widthHalf = (width / 2);\n let heightHalf = (height / 2);\n point.x = (point.x * widthHalf) + widthHalf;\n point.y = - (point.y * heightHalf) + heightHalf;\n return point;\n }\n\n /** \n * Get the screen coordinate of the centroid of provided list of objects.\n * \n * @param {Array} zincObjects - List of {@link ZincObject}.\n * @returns {THREE.Vector3}\n */\n this.getObjectsScreenXY = zincObjects => {\n if (zincObjects && zincObjects.length > 0) {\n let boundingBox = this.getBoundingBoxOfZincObjects(zincObjects);\n const center = new THREE.Vector3();\n boundingBox.getCenter(center);\n return this.vectorToScreenXY(center);\n }\n return undefined;\n }\n\n /** \n * Get the screen coordinate of the centroid of all objects \n * in scene with the provided name.\n * \n * @param {String} name - List of {@link ZincObject}.\n * @returns {THREE.Vector3}\n */\n this.getNamedObjectsScreenXY = name => {\n let zincObjects = this.findObjectsWithGroupName(name);\n return this.getObjectsScreenXY(zincObjects);\n };\n\n /** \n * Add zinc object into the root {@link Region} of sfcene.\n * \n * @param {ZincObject} - zinc object ot be added.\n * @returns {THREE.Vector3}\n */\n this.addZincObject = zincObject => {\n if (zincObject) {\n rootRegion.addZincObject(zincObject);\n if (zincCameraControls)\n zincCameraControls.calculateMaxAllowedDistance(this);\n }\n }\n\n /**\n * Load a glyphset into this scene object.\n * \n * @param {String} metaurl - Provide informations such as transformations, colours \n * and others for each of the glyph in the glyphsset.\n * @param {String} glyphurl - regular json model file providing geometry of the glyph.\n * @param {String} groupName - name to assign the glyphset's groupname to.\n * @param {Function} finishCallback - Callback function which will be called\n * once the glyphset is succssfully load in.\n */\n this.loadGlyphsetURL = (metaurl, glyphurl, groupName, finishCallback) => {\n sceneLoader.loadGlyphsetURL(rootRegion, metaurl, glyphurl, groupName, finishCallback);\n }\n\n /**\n * Load a pointset into this scene object.\n * \n * @param {String} metaurl - Provide informations such as transformations, colours \n * and others for each of the glyph in the glyphsset.\n * @param {Boolean} timeEnabled - Indicate if morphing is enabled.\n * @param {Boolean} morphColour - Indicate if color morphing is enabled.\n * @param {STRING} groupName - name to assign the pointset's groupname to.\n * @param {Function} finishCallback - Callback function which will be called\n * once the glyphset is succssfully load in.\n */\n this.loadPointsetURL = (url, timeEnabled, morphColour, groupName, finishCallback) => {\n sceneLoader.loadPointsetURL(rootRegion, url, timeEnabled, morphColour, groupName, finishCallback);\n }\n\n /**\n * Load lines into this scene object.\n * \n * @param {String} metaurl - Provide informations such as transformations, colours \n * and others for each of the glyph in the glyphsset.\n * @param {Boolean} timeEnabled - Indicate if morphing is enabled.\n * @param {Boolean} morphColour - Indicate if color morphing is enabled.\n * @param {STRING} groupName - name to assign the pointset's groupname to.\n * @param {Function} finishCallback - Callback function which will be called\n * once the glyphset is succssfully load in.\n */\n this.loadLinesURL = (url, timeEnabled, morphColour, groupName, finishCallback) => {\n sceneLoader.loadLinesURL(rootRegion, url, timeEnabled, morphColour, groupName, finishCallback);\n }\n\n /**\n * Read a STL file into this scene, the geometry will be presented as\n * {@link Zinc.Geometry}. \n * \n * @param {STRING} url - location to the STL file.\n * @param {STRING} groupName - name to assign the geometry's groupname to.\n * @param {Function} finishCallback - Callback function which will be called\n * once the STL geometry is succssfully loaded.\n */\n this.loadSTL = (url, groupName, finishCallback) => {\n sceneLoader.loadSTL(rootRegion, url, groupName, finishCallback);\n }\n\n /**\n * Read a OBJ file into this scene, the geometry will be presented as\n * {@link Zinc.Geometry}. \n * \n * @param {STRING} url - location to the STL file.\n * @param {STRING} groupName - name to assign the geometry's groupname to.\n * @param {Function} finishCallback - Callback function which will be called\n * once the OBJ geometry is succssfully loaded.\n */\n this.loadOBJ = (url, groupName, finishCallback) => {\n sceneLoader.loadOBJ(rootRegion, url, groupName, finishCallback);\n }\n\n /**\n * Load a metadata file from the provided URL into this scene. Once\n * succssful scene proceeds to read each items into scene for visualisations.\n * \n * @param {String} url - Location of the metafile\n * @param {Function} finishCallback - Callback function which will be called\n * for each glyphset and geometry that has been written in.\n * @param {options} Optional settings, it can be used to ignore some regions/groups\n * in the metadata file. Only supports version 1 at this moment.\n */\n this.loadMetadataURL = (url, finishCallback, allCompletedCallback, options) => {\n sceneLoader.loadMetadataURL(rootRegion, url, finishCallback, allCompletedCallback, options);\n }\n\n /**\n * Load a legacy model(s) format with the provided URLs and parameters. This only loads the geometry\n * without any of the metadata. Therefore, extra parameters should be provided.\n * \n * @deprecated\n */\n this.loadModelsURL = (urls, colours, opacities, timeEnabled, morphColour, finishCallback) => {\n sceneLoader.loadModelsURL(rootRegion. urls, colours, opacities, timeEnabled, morphColour, finishCallback);\n }\n\n /**\n * Load the viewport from an external location provided by the url.\n * @param {String} URL - address to the file containing viewport information.\n */\n this.loadViewURL = url => {\n sceneLoader.loadViewURL(url);\n }\n\n /**\n * Load a legacy file format containing the viewport and its meta file from an external \n * location provided by the url. Use the new metadata format with\n * {@link Zinc.Scene#loadMetadataURL} instead.\n * \n * @param {String} URL - address to the file containing viewport and model information.\n * @deprecated\n */\n this.loadFromViewURL = (jsonFilePrefix, finishCallback) => {\n sceneLoader.loadFromViewURL(jsonFilePrefix, finishCallback);\n }\n\n /**\n * Load GLTF into this scene object.\n */\n this.loadGLTF = (url, finishCallback, allCompletedCallback, options) => {\n sceneLoader.loadGLTF(rootRegion, url, finishCallback, allCompletedCallback, options);\n }\n\n //Update the directional light for this scene.\n this.updateDirectionalLight = () => {\n zincCameraControls.updateDirectionalLight();\n }\n\n /**\n * Add any {THREE.Object} into this scene.\n * @param {THREE.Object} object - to be addded into this scene.\n */\n this.addObject = object => {\n scene.add(object);\n }\n\n /**\n * Remove any {THREE.Object} from this scene.\n * @param {THREE.Object} object - to be removed from this scene.\n */\n this.removeObject = object => {\n scene.remove(object);\n }\n\n /**\n * Get the current time of the scene.\n * @return {Number}\n */\n this.getCurrentTime = () => {\n if (videoHandler != undefined) {\n return videoHandler.getCurrentTime(duration);\n }\n const time = rootRegion.getCurrentTime();\n if (time !== -1) \n return time;\n \n return 0;\n }\n\n /**\n * Set the current time of all the geometries and glyphsets of this scene.\n * @param {Number} time - Value to set the time to.\n */\n this.setMorphsTime = (time) => {\n if (videoHandler != undefined) {\n videoHandler.setMorphTime(time, duration);\n }\n rootRegion.setMorphTime(time, true);\n }\n\n /**\n * Check if any object in this scene is time varying.\n * \n * @return {Boolean}\n */\n this.isTimeVarying = () => {\n if (videoHandler && videoHandler.video && !videoHandler.video.error) {\n \treturn true;\n }\n return rootRegion.isTimeVarying();\n }\n\n /**\n * Update geometries and glyphsets based on the calculated time.\n * @private\n */\n this.renderGeometries = (playRate, delta, playAnimation) => {\n // Let video dictates the progress if one is present\n let options = {};\n options.camera = zincCameraControls;\n //Global markers flag, marker can be set at individual zinc object level\n //overriding this flag.\n options.displayMarkers = this.displayMarkers;\n options.markerCluster = markerCluster;\n options.markersList = markerCluster.markers;\n options.ndcToBeUpdated = false;\n //Always set marker cluster update required when playAnimation is true\n //to make sure it is updated when it stops\n if (playAnimation) {\n options.markerCluster.markerUpdateRequired = true;\n }\n\t if (videoHandler) {\n\t\t if (videoHandler.isReadyToPlay()) {\n\t\t\t if (playAnimation) {\n videoHandler.video.play();\n\t\t\t } else {\n\t\t\t\t videoHandler.video.pause();\n\t\t\t }\n const currentTime = videoHandler.video.currentTime /\n videoHandler.getVideoDuration() * duration;\n\t\t\t if (0 == sceneLoader.toBeDownloaded) {\n\t\t\t\t zincCameraControls.setTime(currentTime);\n\t\t\t\t options.ndcToBeUpdated = zincCameraControls.update(0);\n if (options.ndcToBeUpdated) {\n zincCameraControls.calculateHeightPerPixelAtZeroDepth(getDrawingHeight());\n }\n rootRegion.setMorphTime(currentTime, true);\n rootRegion.renderGeometries(0, 0, playAnimation, zincCameraControls, options, true);\n\t\t\t } else {\n\t\t\t\t zincCameraControls.update(0);\n\t\t\t }\n\t\t\t //console.log(videoHandler.video.currentTime / videoHandler.getVideoDuration() * 6000);\n\t\t } else {\n\t\t\t myPlayRate = 0;\n\t\t }\n\t } else {\n\t\t if (0 == sceneLoader.toBeDownloaded) {\n options.ndcToBeUpdated = zincCameraControls.update(delta);\n if (options.ndcToBeUpdated) {\n zincCameraControls.calculateHeightPerPixelAtZeroDepth(getDrawingHeight());\n }\n rootRegion.renderGeometries(playRate, delta, playAnimation, zincCameraControls, options, true);\n\t\t } else {\n\t\t\t zincCameraControls.update(0);\n\t\t }\n }\n }\n\n /**\n * Return the internal {THREE.Scene}.\n * @return {THREE.Scene}\n */\n this.getThreeJSScene = () => {\n return scene;\n }\n\n this.setVideoHandler = (videoHandlerIn) => {\n if (!videoHandler)\n videoHandler = videoHandlerIn;\n }\n\n /**\n * Set a group of scenes into this parent scene. This group of\n * scenes will also be rendered when this scene is rendered.\n * @private\n */\n this.setAdditionalScenesGroup = scenesGroup => {\n scene.add(scenesGroup);\n }\n\n let getWindowsPosition = (align, x_offset, y_offset, width, height,\n renderer_width, renderer_height) => {\n let x = 0;\n let y = 0;\n if (align.includes(\"top\")) {\n y = renderer_height - height - y_offset;\n } else if (align.includes(\"bottom\")) {\n y = y_offset;\n } else {\n y = Math.floor((renderer_height - height) / 2.0);\n }\n if (align.includes(\"left\")) {\n x = x_offset;\n } else if (align.includes(\"right\")) {\n x = renderer_width - x_offset- width;\n } else {\n x = Math.floor((renderer_width - width) / 2.0);\n }\n return {x: x, y: y};\n }\n\n const renderMinimap = renderer => {\n if (this.displayMinimap || this.displayMiniAxes) {\n renderer.setScissorTest(true);\n renderer.getSize(_markerTarget);\n if (this.minimapScissor.updateRequired) {\n scissor = getWindowsPosition(this.minimapScissor.align,\n this.minimapScissor.x_offset, \n this.minimapScissor.y_offset, \n this.minimapScissor.width,\n this.minimapScissor.height,\n _markerTarget.x, _markerTarget.y);\n this.minimapScissor.updateRequired = false;\n }\n renderer.setScissor(\n scissor.x,\n scissor.y,\n this.minimapScissor.width,\n this.minimapScissor.height);\n renderer.setViewport(\n scissor.x,\n scissor.y,\n this.minimapScissor.width,\n this.minimapScissor.height); \n minimap.updateCamera();\n if (this.displayMiniAxes) {\n renderer.render(miniAxesScene, minimap.camera);\n } else {\n scene.add(minimap.mask);\n renderer.render(scene, minimap.camera);\n scene.remove(minimap.mask);\n }\n renderer.setScissorTest(false);\n renderer.setViewport(0, 0, _markerTarget.x, _markerTarget.y);\n }\n }\n\n /**\n * Render the scene.\n * @private\n */\n this.render = renderer => {\n if (this.autoClearFlag)\n renderer.clear();\n if (stereoEffectFlag && stereoEffect) {\n stereoEffect.render(scene, this.camera);\n } else {\n renderer.render(scene, this.camera);\n renderMinimap(renderer);\n }\n }\n\n /**\n * Enable or disable interactive control, this is on by default.\n * \n * @param {Boolean} flag - Indicate either interactive control \n * should be enabled or disabled.\n */\n this.setInteractiveControlEnable = flag => {\n if (flag == true)\n zincCameraControls.enable();\n else\n zincCameraControls.disable();\n }\n\n /**\n * Get the camera control of this scene.\n * @return {Zinc.CameraControls}\n */\n this.getZincCameraControls = () => {\n return zincCameraControls;\n }\n\n /**\n * Get the internal {THREE.Scene}.\n * @return {THREE.Scene}\n */\n this.getThreeJSScene = () => {\n return scene;\n }\n\n /**\n * Set the default duration value for geometries and glyphsets\n * that are to be loaded into this scene.\n * @param {Number} durationIn - duration of the scene.\n */\n this.setDuration = durationIn => {\n rootRegion.setDuration(durationIn);\n duration = durationIn;\n zincCameraControls.setPathDuration(durationIn);\n sceneLoader.duration = durationIn;\n }\n\n /**\n * Get the default duration value.\n * @return {Number}\n */\n this.getDuration = () => {\n return duration;\n }\n\n /**\n * Enable or disable stereo effect of this scene.\n * @param {Boolean} stereoFlag - Indicate either stereo effect control \n * should be enabled or disabled.\n */\n this.setStereoEffectEnable = stereoFlag => {\n if (stereoFlag == true) {\n if (!stereoEffect) {\n stereoEffect = new require('./controls').StereoEffect(rendererIn);\n }\n }\n rendererIn.setSize(getDrawingWidth(), getDrawingHeight());\n this.camera.updateProjectionMatrix();\n stereoEffectFlag = stereoFlag;\n }\n\n\n /**\n * Check rather object is in scene.\n * \n * @return {Boolean}\n */\n this.objectIsInScene = zincObject => {\n return rootRegion.objectIsInRegion(zincObject, true);\n }\n\n /**\n * Rotate the camera view to view the entirety of the \n * bounding box with a smooth transition within the providied\n * transitionTime.\n * \n * @param {THREE.Box3} boundingBox - the bounding box to target\n * @param {Number} transitionTime - Duration to perform the transition.\n */\n this.alignBoundingBoxToCameraView = (boundingBox, transitionTime) => {\n if (boundingBox) {\n boundingBox.getCenter(_v3);\n const viewport = this.getZincCameraControls().getCurrentViewport();\n const target = new THREE.Vector3(viewport.targetPosition[0],\n viewport.targetPosition[1], viewport.targetPosition[2]);\n const eyePosition = new THREE.Vector3(viewport.eyePosition[0],\n viewport.eyePosition[1], viewport.eyePosition[2]);\n const newVec1 = new THREE.Vector3();\n const newVec2 = new THREE.Vector3();\n newVec1.subVectors(target, eyePosition).normalize();\n newVec2.subVectors(target, _v3).normalize();\n const newVec3 = new THREE.Vector3();\n newVec3.crossVectors(newVec1, newVec2);\n const angle = newVec1.angleTo(newVec2);\n if (transitionTime > 0) {\n this.getZincCameraControls().rotateCameraTransition(newVec3,\n angle, transitionTime);\n this.getZincCameraControls().enableCameraTransition();\n } else {\n this.getZincCameraControls().rotateAboutLookAtpoint(newVec3, angle);\n }\n markerCluster.markerUpdateRequired = true;\n }\n }\n\n\n /**\n * Translate the camera view to the center of the \n * bounding box with a smooth transition within the providied\n * transitionTime.\n * \n * @param {THREE.Box3} boundingBox - the bounding box to target\n * @param {Number} transitionTime - Duration to perform the transition.\n */\n this.translateBoundingBoxToCameraView = (boundingBox, scaleRadius, transitionTime) => {\n if (boundingBox) {\n const oldViewport = this.getZincCameraControls().getCurrentViewport();\n const viewport = this.getZincCameraControls().getViewportFromBoundingBox(boundingBox, scaleRadius);\n if (transitionTime > 0) {\n this.getZincCameraControls().cameraTransition(oldViewport,\n viewport, transitionTime);\n this.getZincCameraControls().enableCameraTransition();\n }\n markerCluster.markerUpdateRequired = true;\n }\n }\n\n /**\n * Transition the camera into viewing the zinc object wiexports.Scene.alignBoundingBoxToCameraViewth a \n * smooth transition within the providied transitionTime.\n * \n * @param {ZincObject} zincObject - the bounding box to target\n * @param {Number} transitionTime - Duration to perform the transition.\n */\n this.alignObjectToCameraView = (zincObject, transitionTime) => {\n if (this.objectIsInScene(zincObject)) {\n const boundingBox = zincObject.getBoundingBox();\n this.alignBoundingBoxToCameraView(boundingBox, transitionTime);\n }\n }\n\n /**\n * Set the camera to point to the centroid of the zinc object.\n * \n * @param {ZincObject} zincObject - the bounding box to target\n */\n this.setCameraTargetToObject = zincObject => {\n if (this.objectIsInScene(zincObject)) {\n const boundingBox = zincObject.getBoundingBox();\n const viewport = this.getZincCameraControls().getCurrentViewport();\n boundingBox.getCenter(_v3);\n const target = new THREE.Vector3(viewport.targetPosition[0],\n viewport.targetPosition[1], viewport.targetPosition[2]);\n const eyePosition = new THREE.Vector3(viewport.eyePosition[0],\n viewport.eyePosition[1], viewport.eyePosition[2]);\n const newVec1 = new THREE.Vector3();\n const newVec2 = new THREE.Vector3();\n newVec1.subVectors(eyePosition, target);\n newVec2.addVectors(_v3, newVec1);\n viewport.eyePosition[0] = newVec2.x;\n viewport.eyePosition[1] = newVec2.y;\n viewport.eyePosition[2] = newVec2.z;\n viewport.targetPosition[0] = _v3.x;\n viewport.targetPosition[1] = _v3.y;\n viewport.targetPosition[2] = _v3.z;\n this.getZincCameraControls().setCurrentCameraSettings(viewport);\n markerCluster.markerUpdateRequired = true;\n }\n }\n\n /**\n * Check if stereo effect is enabled.\n * @returns {Boolean}\n */\n this.isStereoEffectEnable = () => {\n return stereoEffectFlag;\n }\n\n /**\n * Remove a ZincObject from this scene if it presents. This will eventually\n * destroy the object and free up the memory.\n * @param {Zinc.Object} zincObject - object to be removed from this scene.\n */\n this.removeZincObject = zincObject => {\n rootRegion.removeZincObject(zincObject);\n if (zincCameraControls) {\n zincCameraControls.calculateMaxAllowedDistance(this);\n }\n markerCluster.markerUpdateRequired = true;\n }\n\n /**\n * Update pickable objects list\n */\n this.updatePickableThreeJSObjects = () => {\n pickableObjectsList.length = 0;\n if (markerCluster.isEnabled) {\n pickableObjectsList.push(markerCluster.group);\n }\n rootRegion.getPickableThreeJSObjects(pickableObjectsList, true);\n this.forcePickableObjectsUpdate = false;\n }\n\n /**\n * Get all pickable objects.\n */\n this.getPickableThreeJSObjects = () => {\n //The list will only be updated if changes have been made\n //in region or a flag has been raise\n if (this.forcePickableObjectsUpdate || \n rootRegion.checkPickableUpdateRequred(true)) {\n this.updatePickableThreeJSObjects();\n }\n return pickableObjectsList;\n }\n\n /**\n * Get the Normalised coordinates on minimap if mouse event is\n * inside the minimap \n */\n this.getNormalisedMinimapCoordinates = (renderer, event) => {\n if (this.displayMinimap) {\n const target = new THREE.Vector2();\n renderer.getSize(target);\n let offsetY = target.y - event.clientY;\n if (((scissor.x + this.minimapScissor.width) > event.clientX) &&\n (event.clientX > scissor.x) && \n ((scissor.y + this.minimapScissor.height) > offsetY) &&\n (offsetY > scissor.y)) {\n let x = ((event.clientX - scissor.x) /\n this.minimapScissor.width) * 2.0 - 1.0;\n let y = ((offsetY - scissor.y) /\n this.minimapScissor.height) * 2.0 - 1.0;\n return {\"x\": x, \"y\": y};\n }\n }\n return undefined;\n }\n\n /**\n * Get the coordinates difference of the current viewing\n * point and projected coordinates.\n */\n this.getMinimapDiffFromNormalised = (x, y) => {\n if (minimap)\n return minimap.getDiffFromNormalised(x, y);\n return undefined;\n }\n\n this.isWebGL2 = () => {\n return rendererIn.isWebGL2();\n }\n\n /**\n * Remove all objects that are created with ZincJS APIs and it will free the memory allocated.\n * This does not remove obejcts that are added using the addObject APIs.\n */\n this.clearAll = () => {\n markerCluster.clear();\n rootRegion.clear(true);\n this.clearZincObjectAddedCallbacks();\n this.clearZincObjectRemovedCallbacks();\n sceneLoader.toBeDwonloaded = 0;\n if (zincCameraControls) {\n zincCameraControls.calculateMaxAllowedDistance(this);\n }\n markerCluster.markerUpdateRequired = true;\n }\n\n /**\n * All time stamp to the metadata TimeStamps field.\n */\n this.addMetadataTimeStamp = (key, time) => {\n metadata[\"TimeStamps\"][key] = convertDurationObjectTomSec(time);\n }\n \n /**\n * Get a specific metadata field.\n */\n this.getMetadataTag = key => {\n return metadata[key];\n }\n\n /**\n * Get all metadata set for the scene.\n */\n this.getMetadata = () => {\n return metadata;\n }\n\n /**\n * Set a specific metadata field.\n */\n this.setMetadataTag = (key, value) => {\n metadata[key] = value;\n }\n\n /**\n * Remove a specific metadata field.\n */\n this.removeMetadataTag = key => {\n delete metadata[key];\n }\n\n /**\n * Reset all metadata fields to original value.\n */\n this.resetMetadata = () => {\n metadata = defaultMetadata();\n }\n\n /**\n * Reset duration of scene to default value.\n */\n this.resetDuration = () => {\n this.setDuration(defaultDuration);\n }\n\n // Turn the object into a readable string {years: years,months: months, \n // weeks: weeks, days: days, hours: hours, mins: mins, secs: secs } \n const convertDurationObjectToString = duration => {\n return [\n ...(duration.years ? [`${duration.years}years`] : []),\n ...(duration.months ? [`${duration.months}months`] : []),\n ...(duration.weeks ? [`${duration.weeks}weeks`] : []),\n ...(duration.days ? [`${duration.days}days`] : []),\n ...(duration.hours ? [`${duration.hours}hours`] : []),\n ...(duration.mins ? [`${duration.mins}mins`] : []),\n ...(duration.secs ? [`${duration.secs}secs`] : []),\n ].join(' ');\n }\n\n // Turn the object into a number representing milliesecond {years: years,months: months, \n // weeks: weeks, days: days, hours: hours, mins: mins, secs: secs } \n const convertDurationObjectTomSec = duration => {\n return duration.years ? duration.years * 31536000000 : 0 +\n duration.months ? duration.months * 2592000000 : 0 +\n duration.weeks ? duration.weeks * 604800000 : 0 +\n duration.days ? duration.days * 86400000 : 0 +\n duration.hours ? duration.hours * 3600000 : 0 +\n duration.mins ? duration.mins * 60000 : 0 +\n duration.secs ? duration.secs * 1000 : 0;\n }\n\n // Set the readable duration and timer using an object\n // with the following format {years: years,months: months, weeks: weeks, days: days,\n // hours: hours, mins: mins, secs: secs } \n this.setDurationFromObject = duration => {\n const string = convertDurationObjectToString(duration);\n const millisec = convertDurationObjectTomSec(duration);\n this.setMetadataTag(\"Duration\", string);\n this.setDuration(millisec);\n }\n\n // Set the readable original duration using an object\n // with the following format {years: years,months: months, weeks: weeks, days: days,\n // hours: hours, mins: mins, secs: secs } \n this.setOriginalDurationFromObject = duration => {\n const string = convertDurationObjectToString(duration);\n this.setMetadataTag(\"OriginalDuration\", string);\n }\n\n /**\n * Export the scene in GLTF format, it can either return it in\n * string or binary form.\n * \n * @param {Boolean} binary - Indicate it should be exported as binary or\n * text.\n * \n * @return {Promise} The exported data if the promise resolve successfully\n */\n this.exportGLTF = (binary) => {\n const exporter = new SceneExporter(this);\n return exporter.exportGLTF(binary);\n }\n\n /**\n * Get the root region of the scene.\n * \n * @return {Region} Return the root region of the scene\n */\n this.getRootRegion = () => {\n return rootRegion;\n }\n\n /**\n * Create points in region specified in the path \n *\n */\n this.createLines = ( regionPath, groupName, coords, colour ) => {\n let region = rootRegion.findChildFromPath(regionPath);\n if (region === undefined) {\n region = rootRegion.createChildFromPath(regionPath);\n }\n return region.createLines(groupName, coords, colour);\n }\n\n /**\n * Create points in region specified in the path \n *\n */\n this.createPoints = ( regionPath, groupName, coords, labels, colour ) => {\n let region = rootRegion.findChildFromPath(regionPath);\n if (region === undefined) {\n region = rootRegion.createChildFromPath(regionPath);\n }\n return region.createPoints(groupName, coords, labels, colour);\n }\n\n\t/**\n\t * Add a callback function which will be called everytime zinc object is added.\n\t * @param {Function} callbackFunction - callbackFunction to be added.\n\t * \n\t * @return {Number}\n\t */\n\tthis.addZincObjectAddedCallbacks = callbackFunction => {\n\t\tzincObjectAddedCallbacks_id = zincObjectAddedCallbacks_id + 1;\n\t\tzincObjectAddedCallbacks[zincObjectAddedCallbacks_id] = callbackFunction;\n\t\treturn zincObjectAddedCallbacks_id;\n\t}\n\n\t/**\n\t * Add a callback function which will be called everytime zinc object is removed.\n\t * @param {Function} callbackFunction - callbackFunction to be added.\n\t * \n\t * @return {Number}\n\t */\n\tthis.addZincObjectRemovedCallbacks = callbackFunction => {\n\t\tzincObjectRemovedCallbacks_id = zincObjectRemovedCallbacks_id + 1;\n\t\tzincObjectRemovedCallbacks[zincObjectRemovedCallbacks_id] = callbackFunction;\n\t\treturn zincObjectRemovedCallbacks_id;\n\t}\n\t\n\t/**\n\t * Remove a callback function that is previously added to the scene.\n\t * @param {Number} id - identifier of the previously added callback function.\n\t */\n\tthis.removeZincObjectAddedCallbacks = id => {\n\t\tif (id in zincObjectAddedCallbacks_id) {\n \t\t\tdelete zincObjectAddedCallbacks[id];\n\t\t}\n\t}\n\n\t/**\n\t * Remove a callback function that is previously added to the scene.\n\t * @param {Number} id - identifier of the previously added callback function.\n\t */\n\tthis.removeZincObjectRemovedCallbacks = id => {\n\t\tif (id in zincObjectRemovedCallbacks_id) {\n \t\t\tdelete zincObjectRemovedCallbacks[id];\n\t\t}\n\t}\n\n /**\n\t * Clear all zinc object callback function\n\t */\n\tthis.clearZincObjectAddedCallbacks = () => {\n\t\tzincObjectAddedCallbacks = {};\n zincObjectAddedCallbacks_id = 0;\n\t}\n\n /**\n\t * Clear all zinc object callback function\n\t */\n\tthis.clearZincObjectRemovedCallbacks = () => {\n\t\tzincObjectRemovedCallbacks = {};\n zincObjectRemovedCallbacks_id = 0;\n\t}\n\n /**\n\t * Used to trigger zinc object added callback\n\t */\n this.triggerObjectAddedCallback = (zincObject) => {\n for (let key in zincObjectAddedCallbacks) {\n if (zincObjectAddedCallbacks.hasOwnProperty(key)) {\n zincObjectAddedCallbacks[key](zincObject);\n }\n }\n }\n\n /**\n\t * Used to trigger zinc object removed callback\n\t */\n this.triggerObjectRemovedCallback= (zincObject) => {\n for (let key in zincObjectRemovedCallbacks) {\n if (zincObjectRemovedCallbacks.hasOwnProperty(key)) {\n zincObjectRemovedCallbacks[key](zincObject);\n }\n }\n }\n\n /*\n\t * Add temporary points to the scene which can be removed\n * with clearTemporaryPrimitives method.\n\t */\n this.addTemporaryPoints = (coords, colour) => {\n const geometry = createBufferGeometry(coords.length, coords);\n let material = new THREE.PointsMaterial({ alphaTest: 0.5, size: 15,\n color: colour, sizeAttenuation: false });\n const texture = getCircularTexture();\n material.map = texture;\n let point = new (require('./three/Points').Points)(geometry, material);\n tempGroup.add(point);\n return point;\n }\n\n /*\n\t * Add temporary lines to the scene which can be removed\n * with clearTemporaryPrimitives method.\n\t */\n this.addTemporaryLines = (coords, colour) => {\n const geometry = createBufferGeometry(coords.length, coords);\n const material = new THREE.LineBasicMaterial({color:colour});\n const line = new (require(\"./three/line/LineSegments\").LineSegments)(geometry, material);\n tempGroup.add(line);\n return line;\n }\n\n /*\n\t * Remove object from temporary objects list\n\t */\n this.removeTemporaryPrimitive = (object) => {\n tempGroup.remove(object);\n object.geometry.dispose();\n object.material.dispose();\n }\n\n /*\n\t * Remove all temporary primitives.\n * Return number of primitives removed;\n\t */\n this.clearTemporaryPrimitives = () => {\n let i = 0;\n const children = tempGroup.children;\n children.forEach(child => {\n child.geometry.dispose();\n child.material.dispose();\n i++;\n });\n tempGroup.clear();\n return i;\n }\n\n /*\n\t * Create primitive based on the bounding box of scene and\n * add to specify region and group name.\n\t */\n this.addBoundingBoxPrimitive = (regionPath, group, colour, opacity,\n visibility, boundingBox = undefined) => {\n let region = rootRegion.findChildFromPath(regionPath);\n if (region === undefined) {\n region = rootRegion.createChildFromPath(regionPath);\n }\n const box = boundingBox ? boundingBox : this.getBoundingBox();\n _v3.set(0.0, 0.0, 0.0);\n const dim = _v3.subVectors(box.max, box.min);\n const boxGeo = new THREE.BoxGeometry(dim.x, dim.y, dim.z);\n const primitive = region.createGeometryFromThreeJSGeometry(\n group, boxGeo, colour, opacity, visibility, 10000);\n dim.addVectors(box.min, box.max).multiplyScalar( 0.5 );\n primitive.setPosition(dim.x, dim.y, dim.z);\n return primitive;\n }\n\n /*\n\t * Create primitive based on the bounding box of scene and\n * add to specify region and group name.\n\t */\n this.addSlicesPrimitive = (regionPath, groups, colours, opacity,\n visibility, boundingBox = undefined) => {\n if (groups && groups.length >= 3 &&\n colours && colours.length >= 3) {\n let region = rootRegion.findChildFromPath(regionPath);\n if (region === undefined) {\n region = rootRegion.createChildFromPath(regionPath);\n }\n const box = boundingBox ? boundingBox : this.getBoundingBox();\n _v3.set(0.0, 0.0, 0.0);\n const dim = _v3.subVectors(box.max, box.min);\n const directions = [\"x\", \"y\", \"z\"];\n const primitives = [];\n let index = 0;\n directions.forEach((direction) => {\n let planeGeo = undefined;\n switch(direction) {\n //YZ plane\n case \"x\":\n planeGeo = new THREE.PlaneGeometry(dim.z, dim.y);\n planeGeo.rotateY(Math.PI / 2);\n // code block\n break;\n //XZ plane\n case \"y\":\n planeGeo = new THREE.PlaneGeometry(dim.x, dim.z);\n planeGeo.rotateX(Math.PI / 2);\n // code block\n break;\n //XY plane\n case \"z\":\n planeGeo = new THREE.PlaneGeometry(dim.x, dim.y);\n // code block\n break;\n default:\n break;\n }\n const primitive = region.createGeometryFromThreeJSGeometry(\n groups[index], planeGeo, colours[index], opacity, visibility, 10001);\n primitives.push(primitive);\n index++;\n });\n\n dim.addVectors(box.min, box.max).multiplyScalar( 0.5 );\n primitives.forEach((primitive) => {\n primitive.setPosition(dim.x, dim.y, dim.z);\n });\n return primitives;\n }\n }\n\n /*\n\t * Enable marker cluster to work with markers\n\t */\n this.enableMarkerCluster = (flag) => {\n if (flag) {\n markerCluster.markerUpdateRequired = true;\n markerCluster.enable();\n } else {\n markerCluster.markerUpdateRequired = false;\n markerCluster.disable();\n }\n this.forcePickableObjectsUpdate = true;\n }\n\n /*\n\t * Destory static axis display object\n\t */\n this.destroyAxisDisplay = () => {\n this.displayMiniAxes = false;\n if (axisDisplay.main) {\n this.enableAxisDisplay(false, false);\n axisDisplay.main.forEach(axis => {\n if (axis.dispose) { \n axis.dispose();\n }\n });\n }\n if (axisDisplay.mini) {\n this.enableAxisDisplay(false, true);\n axisDisplay.mini.forEach(axis => {\n if (axis.dispose) { \n axis.dispose();\n }\n });\n }\n axisDisplay = {\n main: [],\n mini: [],\n };\n }\n\n /*\n\t * Create static axis display object\n\t */\n this.createAxisDisplay = (fitBoundingBox = false) => {\n this.destroyAxisDisplay();\n const XYZ = [\n {\n name: \"x\",\n dir: new THREE.Vector3(1, 0, 0),\n colour: \"red\",\n hex: 0xFF5555\n },\n {\n name: \"y\",\n dir: new THREE.Vector3(0, 1, 0),\n colour: \"green\",\n hex: 0x55FF55\n },\n {\n name: \"z\",\n dir: new THREE.Vector3(0, 0, 1),\n colour: \"blue\",\n hex: 0x5555FF\n }\n ];\n const boundingBox = this.getBoundingBox();\n const size = boundingBox.min.distanceTo(boundingBox.max);\n let origin = new THREE.Vector3(0, 0, 0);\n if (fitBoundingBox) {\n origin.copy(boundingBox.min);\n }\n XYZ.forEach((xyzObj) => {\n const arrowHelper = new THREE.ArrowHelper(xyzObj.dir, origin, size, xyzObj.hex);\n axisDisplay.main.push(arrowHelper);\n const miniArrowHelper = new THREE.ArrowHelper(xyzObj.dir, boundingBox.getCenter(_v3), size / 2, xyzObj.hex);\n axisDisplay.mini.push(miniArrowHelper);\n\n /*\n const miniLabel = createNewSpriteText(xyzObj.name, 0.1, xyzObj.colour, \"Asap\", 120, 400);\n const miniPosition = xyzObj.dir.clone().multiplyScalar(size/2).add(_v3[xyzObj.name]);\n miniLabel.position.set(miniPosition.x, miniPosition.y, miniPosition.z);\n axisDisplay.mini.push(miniLabel);\n */\n\n const axesLabel = createNewSpriteText(xyzObj.name, 0.036, xyzObj.colour, \"Asap\", 120, 700);\n const position = xyzObj.dir.clone().multiplyScalar(size).add(origin);\n axesLabel.position.set(position.x, position.y, position.z);\n axisDisplay.main.push(axesLabel);\n })\n }\n\n /*\n\t * Enable static axis display, createAxisDisplay must be called\n * before the axis can be display.\n\t */\n this.enableAxisDisplay = (enable, miniaxes = false) => {\n if (miniaxes && axisDisplay?.mini?.length) {\n this.displayMiniAxes = enable;\n axisDisplay.mini.forEach(axis => {\n enable ? miniAxesScene.add(axis) : miniAxesScene.remove(axis);\n });\n } else if (!miniaxes && axisDisplay.main) {\n axisDisplay.main.forEach(axis => {\n enable ? scene.add(axis) : scene.remove(axis);\n });\n }\n }\n}\n","const THREE = require('three');\nconst markerImage = new Image(128, 128);\nmarkerImage.src = require(\"../assets/mapMarkerOrange.svg\");\nconst texture = new THREE.Texture();\ntexture.image = markerImage;\ntexture.needsUpdate = true;\nconst size = [0.02, 0.03, 1];\nconst spriteMaterial = new THREE.SpriteMaterial({\n map: texture,\n alphaTest: 0.5,\n transparent: true,\n depthTest: false,\n depthWrite: false,\n sizeAttenuation: false\n});\nconst createNewSpriteText = require('../utilities').createNewSpriteText;\n\n/**\n * A special graphics type with a tear drop shape.\n * It forms a cluster a marker based on distance.\n * \n * @class\n * @author Alan Wu\n * @return {Marker}\n */\nconst MarkerCluster = function(sceneIn) {\n (require('./zincObject').ZincObject).call(this);\n this.texture = texture;\n let sprite = undefined;\n let scene = sceneIn;\n this.morph = new THREE.Group();\n this.group = this.morph;\n this.isMarkerCluster = true;\n let enabled = true;\n let sprites = [];\n this.markers = {};\n let _v21 = new THREE.Vector2();\n let _v22 = new THREE.Vector2();\n let _radius = 0.1;\n let start = Date.now();\n\n /**\n * Set the size of the marker.\n * \n * @param {Number} size - size to be set.\n */ \n this.setSpriteSize = size => {\n sprite.scale.set(0.015, 0.02, 1);\n sprite.scale.multiplyScalar(size);\n }\n\n this.clear = () => {\n this.group.clear();\n this.markers = {};\n }\n\n /**\n * Clean up this object,\n */ \n this.dispose = () => {\n this.clear();\n if (this.morph) {\n this.morph.clear();\n }\n }\n\n const createNewSprite = (index) => {\n //Group is needed to set the position after scaling\n //the sprite\n const localGroup = new THREE.Group();\n const sprite = new THREE.Sprite(spriteMaterial);\n sprite.clusterIndex = index;\n sprite.center.set(0.5, 0);\n sprite.position.set(0, 0, 0);\n sprite.renderOrder = 10000;\n sprite.scale.set(size[0], size[1], size[2]);\n sprite.userData = this;\n localGroup.add(sprite);\n this.group.add(localGroup);\n return {\n \"group\": localGroup,\n \"marker\": sprite,\n \"label\": undefined,\n \"number\": 0,\n \"min\": [0, 0, 0],\n \"max\": [1, 1, 1],\n };\n }\n\n const activateSpriteForCluster = (sprite, cluster, number) => {\n sprite.group.visible = true;\n sprite.group.position.set(\n cluster.coords[0], cluster.coords[1], cluster.coords[2]\n );\n if (sprite.label === undefined || (number !== sprite.number)) {\n if (sprite.label) {\n sprite.group.remove(sprite.label);\n sprite.label.material.map.dispose();\n sprite.label.material.dispose();\n }\n sprite.label = createNewSpriteText(number, 0.012, \"black\", \"Asap\", 120, 700);\n sprite.number = number;\n sprite.group.add(sprite.label);\n }\n sprite.min = cluster.min;\n sprite.max = cluster.max;\n }\n\n const drawClusters = (clusters) => {\n let currentIndex = 0;\n clusters.forEach((cluster) => {\n const length = cluster.members.length;\n let number = 0;\n if (length === 1) {\n cluster.members[0].setVisibility(true);\n } else {\n cluster.members.forEach((marker) => {\n number += marker.getNumber();\n marker.setVisibility(false);\n });\n if (!sprites[currentIndex]) {\n sprites.push(createNewSprite(currentIndex));\n }\n activateSpriteForCluster(sprites[currentIndex], cluster, number);\n currentIndex++;\n }\n });\n for (currentIndex; currentIndex < sprites.length; currentIndex++) {\n sprites[currentIndex].group.visible = false;\n }\n }\n\n //Get clusters based on the ndc coordinate for each cluster.\n const getCluster = (markersObj, clusters) => {\n let first = true;\n let newCluster = {members: [], coords: [0,0,0], min: [0, 0, 0], max: [1, 1, 1]};\n let dist = 0\n for (let prop in markersObj) {\n if (first) {\n _v21.set(markersObj[prop].ndc.x, markersObj[prop].ndc.y);\n this._b1.setFromPoints([markersObj[prop].morph.position]);\n first = false;\n newCluster.members.push(markersObj[prop]);\n newCluster.coords = [\n markersObj[prop].morph.position.x,\n markersObj[prop].morph.position.y,\n markersObj[prop].morph.position.z,\n ]\n clusters.push(newCluster);\n delete markersObj[prop];\n } else {\n _v22.set(markersObj[prop].ndc.x, markersObj[prop].ndc.y);\n dist = _v21.distanceTo(_v22);\n if (_radius > dist) {\n newCluster.members.push(markersObj[prop]);\n this._b1.expandByPoint(markersObj[prop].morph.position);\n delete markersObj[prop];\n }\n }\n }\n newCluster.min = [this._b1.min.x, this._b1.min.y, this._b1.min.z];\n newCluster.max = [this._b1.max.x, this._b1.max.y, this._b1.max.z];\n //this._b1.getCenter(this._v2);\n //newCluster.coords = [this._v2.x, this._v2.y, this._v2.z];\n //The following will not be called if there is object left and\n //thus finishing clustering\n if (first !== true) {\n getCluster(markersObj, clusters);\n }\n }\n\n this.calculate = () => {\n if (enabled) {\n const current = Date.now();\n if ((current - start) > 500) {\n let clusters = [];\n getCluster({...this.markers}, clusters);\n drawClusters(clusters);\n start = Date.now();\n this.markerUpdateRequired = false;\n }\n }\n }\n\n this.isEnabled = () => {\n return enabled;\n }\n\n /**\n * Enable and visualise the marker.\n */ \n this.enable = () => {\n enabled = true;\n this.morph.visible = true;\n }\n\n /**\n * Disable and hide the marker.\n */ \n this.disable = () => {\n enabled = false;\n this.morph.visible = false;\n //turn all markers back on\n for (let prop in this.markers) {\n if (this.markers[prop]?.isMarker &&\n this.markers[prop].isEnabled()) {\n this.markers[prop].setVisibility(true);\n }\n }\n }\n\n this.zoomToCluster = (index) => {\n if (index !== undefined && index > -1) {\n this._v1.set(...sprites[index].min);\n this._v2.set(...sprites[index].max);\n if (Math.abs(this._v1.distanceTo(this._v2) > 0.0)) {\n this._b1.set(this._v1, this._v2);\n scene.translateBoundingBoxToCameraView(this._b1, 3, 300);\n this.markerUpdateRequired = true;\n return true;\n }\n }\n return false;\n }\n\n this.clusterIsVisible = (index) => {\n if (index !== undefined && index > -1) {\n if (sprites[index]) {\n return sprites[index].group?.visible;\n }\n }\n return false;\n }\n}\n\nMarkerCluster.prototype = Object.create((require('./zincObject').ZincObject).prototype);\nexports.MarkerCluster = MarkerCluster;\n","module.exports = \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIiA/Pgo8IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPgo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHZlcnNpb249IjEuMSIgd2lkdGg9IjM2NSIgaGVpZ2h0PSI1NjAiIHZpZXdCb3g9IjAgMCAzNjUgNTYwIiB4bWw6c3BhY2U9InByZXNlcnZlIj4KPGRlc2M+Q3JlYXRlZCB3aXRoIEZhYnJpYy5qcyA1LjIuNDwvZGVzYz4KPGRlZnM+CjwvZGVmcz4KPHJlY3QgeD0iMCIgeT0iMCIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgZmlsbD0idHJhbnNwYXJlbnQiPjwvcmVjdD4KPGcgdHJhbnNmb3JtPSJtYXRyaXgoMCAwIDAgMCAwIDApIiBpZD0iODA4ZWQyODMtMjUyNC00NDBmLTg4YWUtM2JkYjQ3YmI1NzQ5IiAgPgo8L2c+CjxnIHRyYW5zZm9ybT0ibWF0cml4KDEgMCAwIDEgMTgyLjUgMjgwKSIgaWQ9ImRiMzA0MTNkLTViZmYtNGI5OC1hYjU5LTQ2NDQ5N2VlMTk5ZSIgID4KPHJlY3Qgc3R5bGU9InN0cm9rZTogbm9uZTsgc3Ryb2tlLXdpZHRoOiAxOyBzdHJva2UtZGFzaGFycmF5OiBub25lOyBzdHJva2UtbGluZWNhcDogYnV0dDsgc3Ryb2tlLWRhc2hvZmZzZXQ6IDA7IHN0cm9rZS1saW5lam9pbjogbWl0ZXI7IHN0cm9rZS1taXRlcmxpbWl0OiA0OyBmaWxsOiByZ2IoMjU1LDI1NSwyNTUpOyBmaWxsLXJ1bGU6IG5vbnplcm87IG9wYWNpdHk6IDE7IHZpc2liaWxpdHk6IGhpZGRlbjsiIHZlY3Rvci1lZmZlY3Q9Im5vbi1zY2FsaW5nLXN0cm9rZSIgIHg9Ii0xODIuNSIgeT0iLTI4MCIgcng9IjAiIHJ5PSIwIiB3aWR0aD0iMzY1IiBoZWlnaHQ9IjU2MCIgLz4KPC9nPgo8ZyB0cmFuc2Zvcm09Im1hdHJpeCgwIDAgMCAwIDAgOTcuNSkiICA+CjxnIHN0eWxlPSIiICAgPgo8L2c+CjwvZz4KPGcgdHJhbnNmb3JtPSJtYXRyaXgoMCAwIDAgMCAwIDk3LjUpIiAgPgo8ZyBzdHlsZT0iIiAgID4KPC9nPgo8L2c+CjxnIHRyYW5zZm9ybT0ibWF0cml4KDAuOTkgMCAwIDAuOTkgMTgyLjUgMjgwKSIgID4KPGcgc3R5bGU9IiIgdmVjdG9yLWVmZmVjdD0ibm9uLXNjYWxpbmctc3Ryb2tlIiAgID4KCQk8ZyB0cmFuc2Zvcm09Im1hdHJpeCgxIDAgMCAxIDAgMCkiICA+CjxyZWN0IHN0eWxlPSJzdHJva2U6IG5vbmU7IHN0cm9rZS13aWR0aDogMTsgc3Ryb2tlLWRhc2hhcnJheTogbm9uZTsgc3Ryb2tlLWxpbmVjYXA6IGJ1dHQ7IHN0cm9rZS1kYXNob2Zmc2V0OiAwOyBzdHJva2UtbGluZWpvaW46IG1pdGVyOyBzdHJva2UtbWl0ZXJsaW1pdDogNDsgZmlsbDogcmdiKDI1NSwyNTUsMjU1KTsgZmlsbC1ydWxlOiBub256ZXJvOyBvcGFjaXR5OiAxOyB2aXNpYmlsaXR5OiBoaWRkZW47IiB2ZWN0b3ItZWZmZWN0PSJub24tc2NhbGluZy1zdHJva2UiICB4PSItNTQwIiB5PSItNTQwIiByeD0iMCIgcnk9IjAiIHdpZHRoPSIxMDgwIiBoZWlnaHQ9IjEwODAiIC8+CjwvZz4KCQk8ZyB0cmFuc2Zvcm09Im1hdHJpeCgxIDAgMCAxIDAgMCkiICA+CjxwYXRoIHN0eWxlPSJzdHJva2U6IHJnYigwLDAsMCk7IHN0cm9rZS13aWR0aDogMDsgc3Ryb2tlLWRhc2hhcnJheTogbm9uZTsgc3Ryb2tlLWxpbmVjYXA6IGJ1dHQ7IHN0cm9rZS1kYXNob2Zmc2V0OiAwOyBzdHJva2UtbGluZWpvaW46IG1pdGVyOyBzdHJva2UtbWl0ZXJsaW1pdDogNDsgZmlsbDogcmdiKDI1NSwxNjUsMCk7IGZpbGwtcnVsZTogbm9uemVybzsgb3BhY2l0eTogMTsiIHZlY3Rvci1lZmZlY3Q9Im5vbi1zY2FsaW5nLXN0cm9rZSIgIHRyYW5zZm9ybT0iIHRyYW5zbGF0ZSgtMTgyLjksIC0yNzkuODUpIiBkPSJNIDE4Mi45IDU1MS43IEMgMTgyLjkgNTUxLjgwMDAwMDAwMDAwMDEgMTgzLjEgNTUyIDE4My4xIDU1MiBDIDE4My4xIDU1MiAzNTguMyAyODMgMzU4LjMgMTk0LjYgQyAzNTguMyA2NC41IDI2OS41IDcuOTAwMDAwMDAwMDAwMDA2IDE4Mi45IDcuNjk5OTk5OTk5OTk5OTg5IEMgOTYuMyA3LjkgNy41IDY0LjUgNy41IDE5NC42IEMgNy41IDI4MyAxODIuOCA1NTIgMTgyLjggNTUyIEMgMTgyLjggNTUyIDE4Mi45IDU1MS43IDE4Mi45IDU1MS43IHogTSAxMjIuMiAxODcuMiBDIDEyMi4yIDE1My42IDE0OS40IDEyNi4zOTk5OTk5OTk5OTk5OSAxODMgMTI2LjM5OTk5OTk5OTk5OTk5IEMgMjE2LjYgMTI2LjM5OTk5OTk5OTk5OTk5IDI0My44IDE1My42IDI0My44IDE4Ny4yIEMgMjQzLjggMjIwLjc5OTk5OTk5OTk5OTk4IDIxNi41IDI0OCAxODIuOSAyNDggQyAxNDkuNCAyNDggMTIyLjIgMjIwLjggMTIyLjIgMTg3LjIgeiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiAvPgo8L2c+CgkJPGcgdHJhbnNmb3JtPSJtYXRyaXgoMy44MiAwIDAgMy44MiAwIC0xMDAuNzcpIiAgPgo8Y2lyY2xlIHN0eWxlPSJzdHJva2U6IHJnYigwLDAsMCk7IHN0cm9rZS13aWR0aDogMDsgc3Ryb2tlLWRhc2hhcnJheTogbm9uZTsgc3Ryb2tlLWxpbmVjYXA6IGJ1dHQ7IHN0cm9rZS1kYXNob2Zmc2V0OiAwOyBzdHJva2UtbGluZWpvaW46IG1pdGVyOyBzdHJva2UtbWl0ZXJsaW1pdDogNDsgZmlsbDogcmdiKDI1NSwyNTUsMjU1KTsgZmlsbC1ydWxlOiBub256ZXJvOyBvcGFjaXR5OiAxOyIgdmVjdG9yLWVmZmVjdD0ibm9uLXNjYWxpbmctc3Ryb2tlIiAgY3g9IjAiIGN5PSIwIiByPSIzNSIgLz4KPC9nPgo8L2c+CjwvZz4KPC9zdmc+\"","const THREE = require('three');\nconst resolveURL = require('./utilities').resolveURL;\nconst createNewURL = require('./utilities').createNewURL;\nconst isRegionGroup = require('./utilities').isRegionGroup;\n\nconst STLLoader = require('./loaders/STLLoader').STLLoader;\nconst OBJLoader = require('./loaders/OBJLoader').OBJLoader;\nconst PrimitivesLoader = require('./loaders/primitivesLoader').PrimitivesLoader;\n\n/**\n * A helper class to help with reading / importing primitives and\n * settings into a {@link Scene}.\n * \n * @class\n * @param {Object} containerIn - Container to create the renderer on.\n * @author Alan Wu\n * @return {SceneLoader}\n */\nexports.SceneLoader = function (sceneIn) {\n const scene = sceneIn;\n this.toBeDownloaded = 0;\n this.progressMap = {};\n let viewLoaded = false;\n let errorDownload = false;\n const primitivesLoader = new PrimitivesLoader();\n /**\n * This function returns a three component array, which contains\n * [totalsize, totalLoaded and errorDownload] of all the downloads happening\n * in this scene.\n * @returns {Array} \n */\n this.getDownloadProgress = () => {\n let totalSize = 0;\n let totalLoaded = 0;\n let unknownFound = false;\n\n for (const key in this.progressMap) {\n const progress = this.progressMap[key];\n\n totalSize += progress[1];\n totalLoaded += progress[0];\n\n if (progress[1] == 0)\n unknownFound = true;\n }\n if (unknownFound) {\n totalSize = 0;\n }\n return [ totalSize, totalLoaded, errorDownload ];\n }\n\n //Stores the current progress of downloads\n this.onProgress = id => {\n return xhr => {\n this.progressMap[id] = [ xhr.loaded, xhr.total ];\n };\n }\n\n this.onError = finishCallback => {\n return xhr => {\n this.toBeDownloaded = this.toBeDownloaded - 1;\n errorDownload = true;\n console.error(`There is an issue with external resource ${xhr?.responseURL ? \": \" + xhr?.responseURL: \"\"}.`);\n const payload = {\n type: \"Error\",\n xhr\n };\n if (finishCallback) {\n finishCallback(payload);\n }\n }\n };\n\n let loadMultipleViews = (referenceURL, views) => {\n const defaultView = views.Default;\n if (views.Inline) {\n scene.setupMultipleViews(defaultView, views.Entries);\n } else {\n const promises = [];\n for (const [key, value] of Object.entries(views.Entries)) {\n if (referenceURL) {\n newURL = createNewURL(value, referenceURL);\n promises.push(new Promise((resolve, reject) => {\n // Add parameters if we are sent them\n fetch(newURL)\n .then(response => response.json())\n .then(data => resolve({key: key, data: data}))\n .catch(data => reject(data));\n }));\n }\n }\n Promise.all(promises)\n .then(values => {\n const entries = {};\n values.forEach(entry => {\n entries[entry.key] = entry.data;\n });\n scene.setupMultipleViews(defaultView, entries);\n let zincCameraControls = scene.getZincCameraControls();\n if (zincCameraControls)\n zincCameraControls.setCurrentViewport(defaultView);\n viewLoaded = true;\n });\n }\n }\n\n /**\n * Load the viewport from an external location provided by the url.\n * @param {String} URL - address to the file containing viewport information.\n */\n this.loadViewURL = (url, finishCallback) => {\n this.toBeDownloaded += 1;\n const xmlhttp = new XMLHttpRequest();\n xmlhttp.onreadystatechange = () => {\n if (xmlhttp.readyState == 4) {\n if(xmlhttp.status == 200) {\n const viewData = JSON.parse(xmlhttp.responseText);\n scene.setupMultipleViews(\"default\", { \"default\" : viewData });\n scene.resetView();\n viewLoaded = true;\n --this.toBeDownloaded;\n if (finishCallback != undefined && (typeof finishCallback == 'function'))\n finishCallback();\n } else {\n (this.onError(finishCallback))({responseURL: url});\n }\n }\n }\n const requestURL = resolveURL(url);\n xmlhttp.open(\"GET\", requestURL, true);\n xmlhttp.send();\n }\n\n/**\n * Load a legacy model(s) format with the provided URLs and parameters. This only loads the geometry\n * without any of the metadata. Therefore, extra parameters should be provided.\n * \n * @deprecated\n */\n this.loadModelsURL = (region, urls, colours, opacities, timeEnabled, morphColour, finishCallback) => {\n const number = urls.length;\n this.toBeDownloaded += number;\n for (let i = 0; i < number; i++) {\n const filename = urls[i];\n let colour = require('./zinc').defaultMaterialColor;\n let opacity = require('./zinc').defaultOpacity;\n if (colours != undefined && colours[i] != undefined)\n colour = colours[i] ? true : false;\n if (opacities != undefined && opacities[i] != undefined)\n opacity = opacities[i];\n let localTimeEnabled = 0;\n if (timeEnabled != undefined && timeEnabled[i] != undefined)\n localTimeEnabled = timeEnabled[i] ? true : false;\n let localMorphColour = 0;\n if (morphColour != undefined && morphColour[i] != undefined)\n localMorphColour = morphColour[i] ? true : false;\n primitivesLoader.load(resolveURL(filename), meshloader(region, colour, opacity, localTimeEnabled, localMorphColour, undefined, undefined,\n undefined, undefined, finishCallback), this.onProgress(filename), this.onError(finishCallback));\n }\n }\n\n /**\n * Load a legacy file format containing the viewport and its meta file from an external \n * location provided by the url. Use the new metadata format with\n * {@link Zinc.SceneLoader.#loadMetadataURL} instead.\n * \n * @param {String} URL - address to the file containing viewport and model information.\n * @deprecated\n */\n this.loadFromViewURL = (targetRegion, jsonFilePrefix, finishCallback) => {\n const xmlhttp = new XMLHttpRequest();\n xmlhttp.onreadystatechange = () => {\n if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {\n const viewData = JSON.parse(xmlhttp.responseText);\n scene.loadView(viewData);\n const urls = [];\n const filename_prefix = jsonFilePrefix + \"_\";\n for (let i = 0; i < viewData.numberOfResources; i++) {\n const filename = filename_prefix + (i + 1) + \".json\";\n urls.push(filename);\n }\n this.loadModelsURL(targetRegion, urls, viewData.colour, viewData.opacity, viewData.timeEnabled, viewData.morphColour, finishCallback);\n }\n }\n const requestURL = resolveURL(jsonFilePrefix + \"_view.json\");\n xmlhttp.open(\"GET\", requestURL, true);\n xmlhttp.send();\n }\n\n //Internal loader for a regular zinc geometry.\n const linesloader = (region, localTimeEnabled, localMorphColour, groupName,\n anatomicalId, renderOrder, lod, tubeLines, finishCallback) => {\n return (geometry, materials) => {\n const newLines = tubeLines ? new (require('./primitives/tubeLines').TubeLines)() : new (require('./primitives/lines').Lines)();\n let material = undefined;\n if (materials && materials[0]) {\n material = new THREE.LineBasicMaterial({color:materials[0].color.clone()});\n if (1.0 > materials[0].opacity) {\n material.transparent = true;\n }\n material.opacity = materials[0].opacity;\n material.morphTargets = localTimeEnabled;\n material.vertexColors = materials[0].vertexColors;\n }\n let options = {};\n options.localTimeEnabled = localTimeEnabled;\n options.localMorphColour = localMorphColour;\n if (newLines) {\n newLines.createLineSegment(geometry, material, options);\n newLines.setName(groupName);\n newLines.setAnatomicalId(anatomicalId);\n newLines.setRenderOrder(renderOrder);\n region.addZincObject(newLines);\n newLines.setDuration(scene.getDuration());\n if (lod && lod.levels) {\n for (const [key, value] of Object.entries(lod.levels)) {\n newLines.addLOD(primitivesLoader, key, value.URL, value.Index, lod.preload);\n }\n }\n }\n --this.toBeDownloaded;\n geometry.dispose();\n if (finishCallback != undefined && (typeof finishCallback == 'function'))\n finishCallback(newLines);\n };\n } \n\n /**\n * Load lines into this scene object.\n * \n * @param {Boolean} timeEnabled - Indicate if morphing is enabled.\n * @param {Boolean} morphColour - Indicate if color morphing is enabled.\n * @param {STRING} groupName - name to assign the pointset's groupname to.\n * @param {Function} finishCallback - Callback function which will be called\n * once the glyphset is succssfully load in.\n */\n this.loadLinesURL = (region, url, timeEnabled, morphColour, groupName, finishCallback, options) => {\n\t let localTimeEnabled = 0;\n this.toBeDownloaded += 1;\n let isInline = options?.isInline ? options.isInline : false;\n let anatomicalId = options?.anatomicalId ? options.anatomicalId : undefined;\n let renderOrder = options?.renderOrder ? options.renderOrder : undefined;\n\t if (timeEnabled != undefined)\n\t\t localTimeEnabled = timeEnabled ? true : false;\n\t let localMorphColour = 0;\n\t if (morphColour != undefined)\n\t\t localMorphColour = morphColour ? true : false;\n let tubeLines = options.tubeLines && !localTimeEnabled && !localMorphColour;\n if (isInline) {\n let object = primitivesLoader.parse( url );\n (linesloader(region, localTimeEnabled, localMorphColour, groupName, anatomicalId,\n renderOrder, options.lod, tubeLines, finishCallback))( object.geometry, object.materials );\n } else {\n primitivesLoader.load(url, linesloader(region, localTimeEnabled, localMorphColour, groupName, \n anatomicalId, renderOrder, options.lod, tubeLines, finishCallback), this.onProgress(url), this.onError(finishCallback),\n options.loaderOptions);\n }\n }\n\n const loadGlyphset = (region, glyphsetData, glyphurl, groupName, finishCallback, options) => {\n let isInline = (options && options.isInline) ? options.isInline : undefined;\n let anatomicalId = (options && options.anatomicalId) ? options.anatomicalId : undefined;\n let displayLabels = (options && options.displayLabels) ? options.displayLabels : undefined;\n let renderOrder = (options && options.renderOrder) ? options.renderOrder : undefined;\n const newGlyphset = new (require('./primitives/glyphset').Glyphset)();\n newGlyphset.setDuration(scene.getDuration());\n newGlyphset.groupName = groupName;\n let myCallback = () => {\n --this.toBeDownloaded;\n if (finishCallback != undefined && (typeof finishCallback == 'function'))\n finishCallback(newGlyphset);\n }\n ++this.toBeDownloaded;\n if (isInline) {\n newGlyphset.load(glyphsetData, glyphurl, myCallback, isInline, displayLabels);\n }\n else {\n newGlyphset.load(glyphsetData, resolveURL(glyphurl), myCallback, isInline, displayLabels);\n }\n newGlyphset.setAnatomicalId(anatomicalId);\n newGlyphset.setRenderOrder(renderOrder);\n region.addZincObject(newGlyphset);\n };\n\n //Load a glyphset into this scene.\n const onLoadGlyphsetReady = (region, xmlhttp, glyphurl, groupName, finishCallback, options) => {\n return () => {\n if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {\n const glyphsetData = JSON.parse(xmlhttp.responseText);\n loadGlyphset(region, glyphsetData, glyphurl, groupName, finishCallback, options);\n }\n };\n };\n\n //Internal loader for zinc pointset.\n const pointsetloader = (region, localTimeEnabled, localMorphColour, groupName, anatomicalId, renderOrder, finishCallback) => {\n return (geometry, materials) => {\n const newPointset = new (require('./primitives/pointset').Pointset)();\n let material = new THREE.PointsMaterial({ alphaTest: 0.5, size: 10, sizeAttenuation: false });\n if (materials && materials[0]) {\n if (1.0 > materials[0].opacity) {\n material.transparent = true;\n }\n material.opacity = materials[0].opacity;\n material.color = materials[0].color;\n material.morphTargets = localTimeEnabled;\n material.vertexColors = materials[0].vertexColors;\n }\n let options = {};\n options.localTimeEnabled = localTimeEnabled;\n options.localMorphColour = localMorphColour;\n if (newPointset) {\n newPointset.createMesh(geometry, material, options);\n newPointset.setName(groupName);\n newPointset.setAnatomicalId(anatomicalId);\n region.addZincObject(newPointset);\n newPointset.setDuration(scene.getDuration());\n newPointset.setRenderOrder(renderOrder);\n }\n geometry.dispose();\n --this.toBeDownloaded;\n if (finishCallback != undefined && (typeof finishCallback == 'function'))\n finishCallback(newPointset);\n };\n }\n\n /**\n * Read a STL file into this scene, the geometry will be presented as\n * {@link Zinc.Geometry}. \n * \n * @param {STRING} url - location to the STL file.\n * @param {STRING} groupName - name to assign the geometry's groupname to.\n * @param {Function} finishCallback - Callback function which will be called\n * once the STL geometry is succssfully loaded.\n */\n this.loadSTL = (region, url, groupName, finishCallback) => {\n this.toBeDownloaded += 1;\n const colour = require('./zinc').defaultMaterialColor;\n const opacity = require('./zinc').defaultOpacity;\n const loader = new STLLoader();\n loader.crossOrigin = \"Anonymous\";\n loader.load(resolveURL(url), meshloader(region, colour, opacity, false,\n false, groupName, undefined, undefined, undefined, finishCallback));\n }\n\n /**\n * Read a OBJ file into this scene, the geometry will be presented as\n * {@link Zinc.Geometry}. \n * \n * @param {STRING} url - location to the STL file.\n * @param {STRING} groupName - name to assign the geometry's groupname to.\n * @param {Function} finishCallback - Callback function which will be called\n * once the OBJ geometry is succssfully loaded.\n */\n this.loadOBJ = (region, url, groupName, finishCallback) => {\n this.toBeDownloaded += 1;\n const colour = require('./zinc').defaultMaterialColor;\n const opacity = require('./zinc').defaultOpacity;\n const loader = new OBJLoader();\n loader.crossOrigin = \"Anonymous\";\n loader.load(resolveURL(url), meshloader(region, colour, opacity, false,\n false, groupName, undefined, undefined, undefined, finishCallback));\n }\n\n /**\n * Load a geometry into this scene, this is a subsequent called from \n * {@link Zinc.Scene#loadMetadataURL}, although it can be used to read\n * in geometry into the scene externally.\n * \n * @param {String} url - regular json model file providing geometry.\n * @param {Boolean} timeEnabled - Indicate if geometry morphing is enabled.\n * @param {Boolean} morphColour - Indicate if color morphing is enabled.\n * @param {STRING} groupName - name to assign the geometry's groupname to.\n * @param {STRING} fileFormat - name supported formats are STL, OBJ and JSON.\n * @param {Function} finishCallback - Callback function which will be called\n * once the geometry is succssfully loaded in.\n */\n const loadSurfaceURL = (region ,url, timeEnabled, morphColour, groupName, finishCallback, options) => {\n this.toBeDownloaded += 1;\n const colour = require('./zinc').defaultMaterialColor;\n const opacity = require('./zinc').defaultOpacity;\n let localTimeEnabled = 0;\n let isInline = (options && options.isInline) ? options.isInline : false;\n let fileFormat = (options && options.fileFormat) ? options.fileFormat : undefined;\n let anatomicalId = (options && options.anatomicalId) ? options.anatomicalId : undefined;\n let renderOrder = (options && options.renderOrder) ? options.renderOrder : undefined;\n if (timeEnabled != undefined)\n localTimeEnabled = timeEnabled ? true : false;\n let localMorphColour = 0;\n if (morphColour != undefined)\n localMorphColour = morphColour ? true : false;\n let loader = primitivesLoader;\n if (fileFormat !== undefined) {\n if (fileFormat == \"STL\") {\n loader = new STLLoader();\n } else if (fileFormat == \"OBJ\") {\n loader = new OBJLoader();\n loader.crossOrigin = \"Anonymous\";\n loader.load(url, objloader(region, colour, opacity, localTimeEnabled,\n localMorphColour, groupName, anatomicalId, finishCallback), this.onProgress(url), this.onError,\n options.loaderOptions);\n return;\n }\n }\n if (isInline) {\n const object = primitivesLoader.parse( url );\n\t\t\t(meshloader(region, colour, opacity, localTimeEnabled,\n localMorphColour, groupName, anatomicalId, renderOrder, options, finishCallback))( object.geometry, object.materials );\n } else {\n loader.crossOrigin = \"Anonymous\";\n primitivesLoader.load(url, meshloader(region, colour, opacity, localTimeEnabled,\n localMorphColour, groupName, anatomicalId, renderOrder, options, finishCallback),\n this.onProgress(url), this.onError(finishCallback), options.loaderOptions);\n }\n };\n\n //Object to keep track of number of items downloaded and when all items are downloaded\n //allCompletedCallback is called\n const metaFinishCallback = function (numberOfDownloaded, finishCallback, allCompletedCallback) {\n let downloadedItem = 0;\n return zincObject => {\n downloadedItem = downloadedItem + 1;\n if (zincObject && (finishCallback != undefined) && (typeof finishCallback == 'function')) {\n finishCallback(zincObject);\n }\n if (downloadedItem == numberOfDownloaded) {\n if (viewLoaded === false)\n scene.viewAll();\n if (allCompletedCallback != undefined && (typeof allCompletedCallback == 'function')) {\n allCompletedCallback();\n let zincCameraControls = scene.getZincCameraControls();\n if (zincCameraControls) {\n zincCameraControls.calculateMaxAllowedDistance(scene);\n }\n } \n }\n };\n };\n\n /**\n * Load a pointset into this scene object.\n * \n * @param {Boolean} timeEnabled - Indicate if morphing is enabled.\n * @param {Boolean} morphColour - Indicate if color morphing is enabled.\n * @param {STRING} groupName - name to assign the pointset's groupname to.\n * @param {Function} finishCallback - Callback function which will be called\n * once the glyphset is succssfully load in.\n */\n this.loadPointsetURL = (region, url, timeEnabled, morphColour, groupName, finishCallback, options) => {\n let localTimeEnabled = 0;\n this.toBeDownloaded += 1;\n if (timeEnabled != undefined)\n localTimeEnabled = timeEnabled ? true : false;\n let localMorphColour = 0;\n if (morphColour != undefined)\n localMorphColour = morphColour ? true : false;\n let isInline = (options && options.isInline) ? options.isInline : false;\n let anatomicalId = (options && options.anatomicalId) ? options.anatomicalId : undefined;\n let renderOrder = (options && options.renderOrder) ? options.renderOrder : undefined;\n if (isInline) {\n const object = primitivesLoader.parse( url );\n (pointsetloader(region, localTimeEnabled, localMorphColour, groupName,\n anatomicalId, renderOrder, finishCallback))(object.geometry, object.materials );\n } else {\n primitivesLoader.load(url, pointsetloader(region, localTimeEnabled, localMorphColour,\n groupName, anatomicalId, renderOrder, finishCallback),\n this.onProgress(url), this.onError(finishCallback), options.loaderOptions);\n }\n }\n\n const loadTexture = (region, referenceURL, textureData, groupName, finishCallback, options) => {\n let isInline = (options && options.isInline) ? options.isInline : undefined;\n let anatomicalId = (options && options.anatomicalId) ? options.anatomicalId : undefined;\n let renderOrder = (options && options.renderOrder) ? options.renderOrder : undefined;\n let newTexture = undefined;\n if (textureData) {\n if (referenceURL && textureData.images && textureData.images.source) {\n const source = textureData.images.source;\n for (let i = 0; i < source.length; i++) {\n const newURL = createNewURL(source[i], referenceURL);\n textureData.images.source[i] = newURL;\n }\n }\n if (textureData.type === \"slides\") {\n newTexture = new (require('./primitives/textureSlides').TextureSlides)();\n }\n if (newTexture) {\n newTexture.groupName = groupName;\n let myCallback = () => {\n --this.toBeDownloaded;\n if (finishCallback != undefined && (typeof finishCallback == 'function'))\n finishCallback(newTexture);\n }\n ++this.toBeDownloaded;\n newTexture.load(textureData, myCallback, isInline);\n newTexture.setAnatomicalId(anatomicalId);\n newTexture.setRenderOrder(renderOrder);\n region.addZincObject(newTexture);\n }\n }\n };\n\n\n //Load a glyphset into this scene.\n const onLoadTextureReady = (region, xmlhttp, groupName, finishCallback, options) => {\n return () => {\n if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {\n const textureData = JSON.parse(xmlhttp.responseText);\n loadTexture(region, xmlhttp.responseURL, textureData, groupName, finishCallback, options);\n }\n };\n };\n\n /**\n * Load a texture into this scene object.\n * \n * @param {STRING} groupName - name to assign the pointset's groupname to.\n * @param {Function} finishCallback - Callback function which will be called\n * once the glyphset is succssfully load in.\n */\n this.loadTextureURL = (region, url, groupName, finishCallback, options) => {\n const isInline = (options && options.isInline) ? options.isInline : false;\n if (isInline) {\n loadTexture(region, undefined, url, groupName, finishCallback, options);\n } else {\n const xmlhttp = new XMLHttpRequest();\n xmlhttp.onreadystatechange = onLoadTextureReady(region, xmlhttp,\n groupName, finishCallback, options);\n xmlhttp.open(\"GET\", resolveURL(url), true);\n xmlhttp.send();\n }\n }\n\n /**\n * Load a glyphset into this scene object.\n * \n * @param {String} metaurl - Provide informations such as transformations, colours \n * and others for each of the glyph in the glyphsset.\n * @param {String} glyphurl - regular json model file providing geometry of the glyph.\n * @param {String} groupName - name to assign the glyphset's groupname to.\n * @param {Function} finishCallback - Callback function which will be called\n * once the glyphset is succssfully load in.\n */\n this.loadGlyphsetURL = (region, metaurl, glyphurl, groupName, finishCallback, options) => {\n const isInline = (options && options.isInline) ? options.isInline : false;\n if (isInline) {\n loadGlyphset(region, metaurl, glyphurl, groupName, finishCallback, options);\n } else {\n const xmlhttp = new XMLHttpRequest();\n xmlhttp.onreadystatechange = onLoadGlyphsetReady(region, xmlhttp, glyphurl,\n groupName, finishCallback, options);\n xmlhttp.open(\"GET\", resolveURL(metaurl), true);\n xmlhttp.send();\n }\n }\n\n /**\n * Add a user provided {THREE.Geometry} into the scene as zinc geometry.\n * \n * @param {Three.Geometry} geometry - The threejs geometry to be added as {@link Zinc.Geometry}.\n * @param {THREE.Color} color - Colour to be assigned to this geometry, overrided if materialIn is provided.\n * @param {Number} opacity - Opacity to be set for this geometry, overrided if materialIn is provided.\n * @param {Boolean} localTimeEnabled - Set this to true if morph geometry is present, overrided if materialIn is provided.\n * @param {Boolean} localMorphColour - Set this to true if morph colour is present, overrided if materialIn is provided.\n * @param {Boolean} external - Set this to true if morph geometry is present, overrided if materialIn is provided.\n * @param {Function} finishCallback - Callback once the geometry has been added succssfully.\n * @param {THREE.Material} materialIn - Material to be set for this geometry if it is present.\n * \n * @returns {Zinc.Geometry}\n */\n const addZincGeometry = (\n region,\n geometryIn,\n colour,\n opacity,\n localTimeEnabled,\n localMorphColour,\n finishCallback,\n materialIn,\n groupName,\n renderOrder,\n anatomicalId\n ) => {\n let options = {};\n options.colour = colour;\n options.opacity = opacity;\n options.localTimeEnabled = localTimeEnabled;\n options.localMorphColour = localMorphColour\n const newGeometry = new (require('./primitives/geometry').Geometry)();\n newGeometry.createMesh(geometryIn, materialIn, options);\n if (newGeometry.getMorph()) {\n newGeometry.setName(groupName);\n newGeometry.setRenderOrder(renderOrder);\n newGeometry.setAnatomicalId(anatomicalId);\n if (region) region.addZincObject(newGeometry);\n newGeometry.setDuration(scene.getDuration());\n if (finishCallback != undefined && (typeof finishCallback == 'function'))\n finishCallback(newGeometry);\n if (newGeometry.videoHandler)\n scene.setVideoHandler(newGeometry.videoHandler);\n return newGeometry;\n }\n return undefined;\n }\n\n //Internal loader for a regular zinc geometry.\n const meshloader = (\n region,\n colour,\n opacity,\n localTimeEnabled,\n localMorphColour,\n groupName,\n anatomicalId,\n renderOrder,\n options,\n finishCallback\n ) => {\n return (geometry, materials) => {\n let material = undefined;\n if (materials && materials[0]) {\n material = materials[0];\n }\n const zincGeometry = addZincGeometry(region, geometry, colour, opacity, \n localTimeEnabled, localMorphColour, undefined, material, groupName, renderOrder, anatomicalId);\n if (options.lod && options.lod.levels) {\n for (const [key, value] of Object.entries(options.lod.levels)) {\n zincGeometry.addLOD(primitivesLoader, key, value.URL, value.Index, options.lod.preload);\n }\n }\n --this.toBeDownloaded;\n geometry.dispose();\n if (finishCallback != undefined && (typeof finishCallback == 'function')) {\n finishCallback(zincGeometry);\n }\n };\n }\n\n //Turn ISO 8601 duration string into an array.\n const parseDuration = (durationString) => {\n const regex = /P(?:(\\d+)Y)?(?:(\\d+)M)?(?:(\\d+)W)?(?:(\\d+)D)?(?:T(?:(\\d+)H)?(?:(\\d+)M)?(?:(\\d+)S)?)?$/;\n const [, years, months, weeks, days, hours, mins, secs] = \n durationString.match(regex);\n return {years: years,months: months, weeks: weeks, days: days,\n hours: hours, mins: mins, secs: secs };\n }\n\n //Load settings from metadata item.\n this.loadSettings = (item) => {\n if (item) {\n //duration uses the ISO 8601 standard - PnYnMnDTnHnMnS\n if (item.Duration) {\n const duration = parseDuration(item.Duration);\n scene.setDurationFromObject(duration);\n }\n if (item.OriginalDuration) {\n const duration = parseDuration(item.OriginalDuration);\n scene.setOriginalDurationFromObject(duration);\n }\n if (item.TimeStamps) {\n for (const key in item.TimeStamps) {\n const time = parseDuration(item.TimeStamps[key]);\n scene.addMetadataTimeStamp(key, time);\n }\n }\n }\n }\n\n //Function to process each of the graphical metadata item except for view and\n //settings.\n const readPrimitivesItem = (region, referenceURL, item, order, finishCallback) => {\n if (item) {\n let newURL = undefined;\n let isInline = false;\n if (item.URL) {\n //Convert it into an array\n newURL = item.URL;\n if (referenceURL)\n newURL = createNewURL(newURL, referenceURL);\n } else if (item.Inline) {\n newURL = item.Inline.URL;\n isInline = true;\n }\n const lod = {};\n if (item.LOD && item.LOD.Levels) {\n lod.preload = item.LOD.Preload ? true : false;\n lod.levels = {};\n for (const [key, value] of Object.entries(item.LOD.Levels)) {\n lod.levels[key] = {};\n lod.levels[key][\"URL\"] = createNewURL(value.URL, referenceURL);\n lod.levels[key][\"Index\"] = value.Index;\n }\n }\n let groupName = item.GroupName;\n if (groupName === undefined || groupName === \"\") {\n groupName = \"_Unnamed\";\n }\n\n let options = {\n loaderOptions: {\n index: item.Index,\n },\n isInline: isInline,\n fileFormat: item.FileFormat,\n anatomicalId: item.AnatomicalId,\n compression: item.compression,\n tubeLines: item.tubeLines,\n lod: lod,\n renderOrder: order\n };\n \n switch (item.Type) {\n case \"Surfaces\":\n loadSurfaceURL(region, newURL, item.MorphVertices, item.MorphColours, groupName, finishCallback, options);\n break;\n case \"Glyph\":\n let newGeometryURL = undefined;\n if (!isInline) {\n newGeometryURL = item.GlyphGeometriesURL;\n newGeometryURL = createNewURL(item.GlyphGeometriesURL, referenceURL);\n } else {\n newGeometryURL = item.Inline.GlyphGeometriesURL;\n }\n if (item.DisplayLabels) {\n options.displayLabels = true;\n }\n this.loadGlyphsetURL(region, newURL, newGeometryURL, groupName, finishCallback, options);\n break;\n case \"Points\":\n this.loadPointsetURL(region, newURL, item.MorphVertices, item.MorphColours, groupName, finishCallback, options);\n break;\n case \"Lines\":\n this.loadLinesURL(region, newURL, item.MorphVertices, item.MorphColours, groupName, finishCallback, options);\n break;\n case \"Texture\":\n this.loadTextureURL(region, newURL, groupName, finishCallback, options);\n break;\n default:\n break;\n }\n }\n };\n\n //Function to read the view item first\n const readViewAndSettingsItem = (referenceURL, item, finishCallback) => {\n if (item) {\n let newURL = undefined;\n let isInline = false;\n if (item.URL) {\n newURL = item.URL;\n if (referenceURL)\n newURL = createNewURL(item.URL, referenceURL);\n } else if (item.Inline) {\n newURL = item.Inline.URL;\n isInline = true;\n }\n switch (item.Type) {\n case \"View\":\n if (isInline) {\n scene.setupMultipleViews(\"default\", { \"default\" : newURL});\n viewLoaded = true;\n if (finishCallback != undefined && (typeof finishCallback == 'function'))\n finishCallback();\n }\n else\n this.loadViewURL(newURL, finishCallback);\n break;\n case \"Settings\":\n this.loadSettings(item);\n break;\n default:\n break;\n }\n }\n };\n\n /**\n * Load GLTF into this scene object.\n * \n * @param {String} url - URL to the GLTF file\n * @param {Function} finishCallback - Callback function which will be called\n * once the glyphset is succssfully load in.\n */\n this.loadGLTF = (region, url, finishCallback, allCompletedCallback, options) => {\n const GLTFToZincJSLoader = new (require('./loaders/GLTFToZincJSLoader').GLTFToZincJSLoader)();\n GLTFToZincJSLoader.load(scene, region, url, finishCallback, allCompletedCallback, options);\n }\n\n let loadRegions = (currentRegion, referenceURL, regions, callback) => {\n if (regions.Primitives) {\n regions.Primitives.forEach(primitive => {\n let order = 1;\n if (primitive.Order)\n order = primitive.Order;\n readPrimitivesItem(currentRegion, referenceURL, primitive, order, callback);\n });\n }\n if (regions.Transformation) {\n currentRegion.setTransformation(regions.Transformation);\n }\n if (regions.Children) {\n for (const [regionName, value] of Object.entries(regions.Children)) {\n const childRegion = currentRegion.findOrCreateChildFromPath(regionName);\n if (childRegion) {\n loadRegions(childRegion, referenceURL, value, callback);\n }\n }\n }\n }\n\n let supplementPrimitivesArray = (array, options) => {\n let newArray = array;\n const include = options?.enabled?.include;\n const exclude = options?.enabled?.exclude;\n const tubeLines = options?.tubeLines;\n if (include?.length || exclude?.length) {\n if (include) {\n newArray = array.filter((item) => {\n if (item.Type === \"View\") {\n return true;\n }\n for (let i = 0; i < include.length; i++) {\n if (isRegionGroup(item.RegionPath, item.GroupName, include[i])) {\n return true;\n }\n }\n return false;\n });\n }\n if (exclude) {\n newArray = newArray.filter((item) => {\n if (item.Type === \"View\") {\n return true;\n }\n for (let i = 0; i < exclude.length; i++) {\n if (isRegionGroup(item.RegionPath, item.GroupName, exclude[i])) {\n return false;\n }\n }\n return true;\n });\n }\n }\n if (tubeLines) {\n newArray.forEach((item) => {\n if (item.Type === \"Lines\") {\n item.tubeLines = true;\n }\n });\n }\n return newArray;\n }\n\n let supplementMetadataInArray = (metadata, options) => {\n if (Array.isArray(metadata)) {\n return supplementPrimitivesArray(metadata, options);\n }\n return metadata;\n }\n\n let getNumberOfDownloadsInArray = (array, includeViews) => {\n if (Array.isArray(array)) {\n let count = 0;\n for (let i = 0; i < array.length; i++) {\n if (array[i].Type && (\n (includeViews && array[i].Type === \"View\") ||\n array[i].Type === \"Surfaces\" ||\n array[i].Type === \"Glyph\" ||\n array[i].Type === \"Points\" ||\n array[i].Type === \"Lines\" ||\n array[i].Type === \"Texture\"))\n {\n count++;\n }\n }\n return count;\n }\n return 0;\n }\n\n let getNumberOfObjectsInRegions = (regionJson) => {\n let counts = regionJson.Primitives ? \n getNumberOfDownloadsInArray(regionJson.Primitives, false) : 0;\n if (regionJson.Children) {\n Object.values(regionJson.Children).forEach(childRegion => {\n counts += getNumberOfObjectsInRegions(childRegion);\n });\n }\n return counts;\n }\n\n let getNumberOfObjects = (metadata) => {\n if (Array.isArray(metadata)) {\n return getNumberOfDownloadsInArray(metadata, true);\n } else if ((typeof metadata) === \"object\" && metadata !== null) {\n if (metadata.Version === \"2.0\") {\n return getNumberOfObjectsInRegions(metadata.Regions);\n }\n }\n }\n\n let readVersionOneRegionPath = (region, referenceURL, item, order, callback) => {\n let targetRegion = region;\n if (item.RegionPath && item.RegionPath !== \"\") {\n targetRegion = region.findOrCreateChildFromPath(item.RegionPath);\n }\n //Render order is set to i * 2 to account for front and back rendering\n readPrimitivesItem(targetRegion, referenceURL, item, order * 2, callback);\n }\n\n let loadVersionOne = (targetRegion, metadata, referenceURL, finishCallback, allCompletedCallback, options) => {\n const filteredMetada = supplementMetadataInArray(metadata, options);\n let numberOfObjects = getNumberOfObjects(filteredMetada);\n // view file does not receive callback\n let callback = new metaFinishCallback(numberOfObjects, finishCallback, allCompletedCallback);\n // Prioritise the view file and settings before loading anything else\n for (let i = 0; i < metadata.length; i++)\n readViewAndSettingsItem(referenceURL, filteredMetada[i], callback);\n for (let i = 0; i < metadata.length; i++) {\n readVersionOneRegionPath(targetRegion, referenceURL, filteredMetada[i], i, callback);\n }\n }\n\n let loadVersionTwo = (targetRegion, metadata, referenceURL, finishCallback, allCompletedCallback) => {\n let numberOfObjects = getNumberOfObjects(metadata);\n // view file does not receive callback\n let callback = new metaFinishCallback(numberOfObjects, finishCallback, allCompletedCallback);\n if (metadata.Settings)\n this.loadSettings(metadata.Settings);\n if (metadata.Views)\n loadMultipleViews(referenceURL, metadata.Views, referenceURL);\n if (metadata.Regions)\n loadRegions(targetRegion, referenceURL, metadata.Regions, callback);\n }\n\n /**\n * Load a metadata file from the provided URL into this scene. Once\n * succssful scene proceeds to read each items into scene for visualisations.\n * \n * @param {String} url - Location of the metadata file\n * @param {Function} finishCallback - Callback function which will be called\n * @param {options} Optional settings, it can be used to ignore some regions/groups\n * in the metadata file. Only supports version 1 at this moment.\n * for each glyphset and geometry that has been written in.\n */\n this.loadMetadataURL = (targetRegion, url, finishCallback, allCompletedCallback, options) => {\n const xmlhttp = new XMLHttpRequest();\n const requestURL = resolveURL(url);\n xmlhttp.onreadystatechange = () => {\n if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {\n scene.resetMetadata();\n scene.resetDuration();\n viewLoaded = false;\n let referenceURL = xmlhttp.responseURL;\n if (referenceURL === undefined)\n referenceURL = (new URL(requestURL)).href;\n const metadata = JSON.parse(xmlhttp.responseText);\n if (Array.isArray(metadata)) {\n loadVersionOne(targetRegion, metadata, referenceURL, finishCallback, allCompletedCallback, options);\n } else if (typeof metadata === \"object\" && metadata !== null) {\n if (metadata.Version == \"2.0\") {\n loadVersionTwo(targetRegion, metadata, referenceURL, finishCallback, allCompletedCallback);\n }\n }\n }\n }\n\n xmlhttp.open(\"GET\", requestURL, true);\n xmlhttp.send();\n }\n}\n","import {\n\tBufferAttribute,\n\tBufferGeometry,\n\tFileLoader,\n\tFloat32BufferAttribute,\n\tLoader,\n\tLoaderUtils,\n\tVector3\n} from 'three';\n\n/**\n * Description: A THREE loader for STL ASCII files, as created by Solidworks and other CAD programs.\n *\n * Supports both binary and ASCII encoded files, with automatic detection of type.\n *\n * The loader returns a non-indexed buffer geometry.\n *\n * Limitations:\n * Binary decoding supports \"Magics\" color format (http://en.wikipedia.org/wiki/STL_(file_format)#Color_in_binary_STL).\n * There is perhaps some question as to how valid it is to always assume little-endian-ness.\n * ASCII decoding assumes file is UTF-8.\n *\n * Usage:\n * const loader = new STLLoader();\n * loader.load( './models/stl/slotted_disk.stl', function ( geometry ) {\n * scene.add( new THREE.Mesh( geometry ) );\n * });\n *\n * For binary STLs geometry might contain colors for vertices. To use it:\n * // use the same code to load STL as above\n * if (geometry.hasColors) {\n * material = new THREE.MeshPhongMaterial({ opacity: geometry.alpha, vertexColors: true });\n * } else { .... }\n * const mesh = new THREE.Mesh( geometry, material );\n *\n * For ASCII STLs containing multiple solids, each solid is assigned to a different group.\n * Groups can be used to assign a different color by defining an array of materials with the same length of\n * geometry.groups and passing it to the Mesh constructor:\n *\n * const mesh = new THREE.Mesh( geometry, material );\n *\n * For example:\n *\n * const materials = [];\n * const nGeometryGroups = geometry.groups.length;\n *\n * const colorMap = ...; // Some logic to index colors.\n *\n * for (let i = 0; i < nGeometryGroups; i++) {\n *\n *\t\tconst material = new THREE.MeshPhongMaterial({\n *\t\t\tcolor: colorMap[i],\n *\t\t\twireframe: false\n *\t\t});\n *\n * }\n *\n * materials.push(material);\n * const mesh = new THREE.Mesh(geometry, materials);\n */\n\n\nclass STLLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tconst loader = new FileLoader( this.manager );\n\t\tloader.setPath( this.path );\n\t\tloader.setResponseType( 'arraybuffer' );\n\t\tloader.setRequestHeader( this.requestHeader );\n\t\tloader.setWithCredentials( this.withCredentials );\n\n\t\tloader.load( url, function ( text ) {\n\n\t\t\ttry {\n\n\t\t\t\tonLoad( scope.parse( text ) );\n\n\t\t\t} catch ( e ) {\n\n\t\t\t\tif ( onError ) {\n\n\t\t\t\t\tonError( e );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.error( e );\n\n\t\t\t\t}\n\n\t\t\t\tscope.manager.itemError( url );\n\n\t\t\t}\n\n\t\t}, onProgress, onError );\n\n\t}\n\n\tparse( data ) {\n\n\t\tfunction isBinary( data ) {\n\n\t\t\tconst reader = new DataView( data );\n\t\t\tconst face_size = ( 32 / 8 * 3 ) + ( ( 32 / 8 * 3 ) * 3 ) + ( 16 / 8 );\n\t\t\tconst n_faces = reader.getUint32( 80, true );\n\t\t\tconst expect = 80 + ( 32 / 8 ) + ( n_faces * face_size );\n\n\t\t\tif ( expect === reader.byteLength ) {\n\n\t\t\t\treturn true;\n\n\t\t\t}\n\n\t\t\t// An ASCII STL data must begin with 'solid ' as the first six bytes.\n\t\t\t// However, ASCII STLs lacking the SPACE after the 'd' are known to be\n\t\t\t// plentiful. So, check the first 5 bytes for 'solid'.\n\n\t\t\t// Several encodings, such as UTF-8, precede the text with up to 5 bytes:\n\t\t\t// https://en.wikipedia.org/wiki/Byte_order_mark#Byte_order_marks_by_encoding\n\t\t\t// Search for \"solid\" to start anywhere after those prefixes.\n\n\t\t\t// US-ASCII ordinal values for 's', 'o', 'l', 'i', 'd'\n\n\t\t\tconst solid = [ 115, 111, 108, 105, 100 ];\n\n\t\t\tfor ( let off = 0; off < 5; off ++ ) {\n\n\t\t\t\t// If \"solid\" text is matched to the current offset, declare it to be an ASCII STL.\n\n\t\t\t\tif ( matchDataViewAt( solid, reader, off ) ) return false;\n\n\t\t\t}\n\n\t\t\t// Couldn't find \"solid\" text at the beginning; it is binary STL.\n\n\t\t\treturn true;\n\n\t\t}\n\n\t\tfunction matchDataViewAt( query, reader, offset ) {\n\n\t\t\t// Check if each byte in query matches the corresponding byte from the current offset\n\n\t\t\tfor ( let i = 0, il = query.length; i < il; i ++ ) {\n\n\t\t\t\tif ( query[ i ] !== reader.getUint8( offset + i, false ) ) return false;\n\n\t\t\t}\n\n\t\t\treturn true;\n\n\t\t}\n\n\t\tfunction parseBinary( data ) {\n\n\t\t\tconst reader = new DataView( data );\n\t\t\tconst faces = reader.getUint32( 80, true );\n\n\t\t\tlet r, g, b, hasColors = false, colors;\n\t\t\tlet defaultR, defaultG, defaultB, alpha;\n\n\t\t\t// process STL header\n\t\t\t// check for default color in header (\"COLOR=rgba\" sequence).\n\n\t\t\tfor ( let index = 0; index < 80 - 10; index ++ ) {\n\n\t\t\t\tif ( ( reader.getUint32( index, false ) == 0x434F4C4F /*COLO*/ ) &&\n\t\t\t\t\t( reader.getUint8( index + 4 ) == 0x52 /*'R'*/ ) &&\n\t\t\t\t\t( reader.getUint8( index + 5 ) == 0x3D /*'='*/ ) ) {\n\n\t\t\t\t\thasColors = true;\n\t\t\t\t\tcolors = new Float32Array( faces * 3 * 3 );\n\n\t\t\t\t\tdefaultR = reader.getUint8( index + 6 ) / 255;\n\t\t\t\t\tdefaultG = reader.getUint8( index + 7 ) / 255;\n\t\t\t\t\tdefaultB = reader.getUint8( index + 8 ) / 255;\n\t\t\t\t\talpha = reader.getUint8( index + 9 ) / 255;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tconst dataOffset = 84;\n\t\t\tconst faceLength = 12 * 4 + 2;\n\n\t\t\tconst geometry = new BufferGeometry();\n\n\t\t\tconst vertices = new Float32Array( faces * 3 * 3 );\n\t\t\tconst normals = new Float32Array( faces * 3 * 3 );\n\n\t\t\tfor ( let face = 0; face < faces; face ++ ) {\n\n\t\t\t\tconst start = dataOffset + face * faceLength;\n\t\t\t\tconst normalX = reader.getFloat32( start, true );\n\t\t\t\tconst normalY = reader.getFloat32( start + 4, true );\n\t\t\t\tconst normalZ = reader.getFloat32( start + 8, true );\n\n\t\t\t\tif ( hasColors ) {\n\n\t\t\t\t\tconst packedColor = reader.getUint16( start + 48, true );\n\n\t\t\t\t\tif ( ( packedColor & 0x8000 ) === 0 ) {\n\n\t\t\t\t\t\t// facet has its own unique color\n\n\t\t\t\t\t\tr = ( packedColor & 0x1F ) / 31;\n\t\t\t\t\t\tg = ( ( packedColor >> 5 ) & 0x1F ) / 31;\n\t\t\t\t\t\tb = ( ( packedColor >> 10 ) & 0x1F ) / 31;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tr = defaultR;\n\t\t\t\t\t\tg = defaultG;\n\t\t\t\t\t\tb = defaultB;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tfor ( let i = 1; i <= 3; i ++ ) {\n\n\t\t\t\t\tconst vertexstart = start + i * 12;\n\t\t\t\t\tconst componentIdx = ( face * 3 * 3 ) + ( ( i - 1 ) * 3 );\n\n\t\t\t\t\tvertices[ componentIdx ] = reader.getFloat32( vertexstart, true );\n\t\t\t\t\tvertices[ componentIdx + 1 ] = reader.getFloat32( vertexstart + 4, true );\n\t\t\t\t\tvertices[ componentIdx + 2 ] = reader.getFloat32( vertexstart + 8, true );\n\n\t\t\t\t\tnormals[ componentIdx ] = normalX;\n\t\t\t\t\tnormals[ componentIdx + 1 ] = normalY;\n\t\t\t\t\tnormals[ componentIdx + 2 ] = normalZ;\n\n\t\t\t\t\tif ( hasColors ) {\n\n\t\t\t\t\t\tcolors[ componentIdx ] = r;\n\t\t\t\t\t\tcolors[ componentIdx + 1 ] = g;\n\t\t\t\t\t\tcolors[ componentIdx + 2 ] = b;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tgeometry.setAttribute( 'position', new BufferAttribute( vertices, 3 ) );\n\t\t\tgeometry.setAttribute( 'normal', new BufferAttribute( normals, 3 ) );\n\n\t\t\tif ( hasColors ) {\n\n\t\t\t\tgeometry.setAttribute( 'color', new BufferAttribute( colors, 3 ) );\n\t\t\t\tgeometry.hasColors = true;\n\t\t\t\tgeometry.alpha = alpha;\n\n\t\t\t}\n\n\t\t\treturn geometry;\n\n\t\t}\n\n\t\tfunction parseASCII( data ) {\n\n\t\t\tconst geometry = new BufferGeometry();\n\t\t\tconst patternSolid = /solid([\\s\\S]*?)endsolid/g;\n\t\t\tconst patternFace = /facet([\\s\\S]*?)endfacet/g;\n\t\t\tlet faceCounter = 0;\n\n\t\t\tconst patternFloat = /[\\s]+([+-]?(?:\\d*)(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)/.source;\n\t\t\tconst patternVertex = new RegExp( 'vertex' + patternFloat + patternFloat + patternFloat, 'g' );\n\t\t\tconst patternNormal = new RegExp( 'normal' + patternFloat + patternFloat + patternFloat, 'g' );\n\n\t\t\tconst vertices = [];\n\t\t\tconst normals = [];\n\n\t\t\tconst normal = new Vector3();\n\n\t\t\tlet result;\n\n\t\t\tlet groupCount = 0;\n\t\t\tlet startVertex = 0;\n\t\t\tlet endVertex = 0;\n\n\t\t\twhile ( ( result = patternSolid.exec( data ) ) !== null ) {\n\n\t\t\t\tstartVertex = endVertex;\n\n\t\t\t\tconst solid = result[ 0 ];\n\n\t\t\t\twhile ( ( result = patternFace.exec( solid ) ) !== null ) {\n\n\t\t\t\t\tlet vertexCountPerFace = 0;\n\t\t\t\t\tlet normalCountPerFace = 0;\n\n\t\t\t\t\tconst text = result[ 0 ];\n\n\t\t\t\t\twhile ( ( result = patternNormal.exec( text ) ) !== null ) {\n\n\t\t\t\t\t\tnormal.x = parseFloat( result[ 1 ] );\n\t\t\t\t\t\tnormal.y = parseFloat( result[ 2 ] );\n\t\t\t\t\t\tnormal.z = parseFloat( result[ 3 ] );\n\t\t\t\t\t\tnormalCountPerFace ++;\n\n\t\t\t\t\t}\n\n\t\t\t\t\twhile ( ( result = patternVertex.exec( text ) ) !== null ) {\n\n\t\t\t\t\t\tvertices.push( parseFloat( result[ 1 ] ), parseFloat( result[ 2 ] ), parseFloat( result[ 3 ] ) );\n\t\t\t\t\t\tnormals.push( normal.x, normal.y, normal.z );\n\t\t\t\t\t\tvertexCountPerFace ++;\n\t\t\t\t\t\tendVertex ++;\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// every face have to own ONE valid normal\n\n\t\t\t\t\tif ( normalCountPerFace !== 1 ) {\n\n\t\t\t\t\t\tconsole.error( 'THREE.STLLoader: Something isn\\'t right with the normal of face number ' + faceCounter );\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// each face have to own THREE valid vertices\n\n\t\t\t\t\tif ( vertexCountPerFace !== 3 ) {\n\n\t\t\t\t\t\tconsole.error( 'THREE.STLLoader: Something isn\\'t right with the vertices of face number ' + faceCounter );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tfaceCounter ++;\n\n\t\t\t\t}\n\n\t\t\t\tconst start = startVertex;\n\t\t\t\tconst count = endVertex - startVertex;\n\n\t\t\t\tgeometry.addGroup( start, count, groupCount );\n\t\t\t\tgroupCount ++;\n\n\t\t\t}\n\n\t\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\t\tgeometry.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\n\t\t\treturn geometry;\n\n\t\t}\n\n\t\tfunction ensureString( buffer ) {\n\n\t\t\tif ( typeof buffer !== 'string' ) {\n\n\t\t\t\treturn LoaderUtils.decodeText( new Uint8Array( buffer ) );\n\n\t\t\t}\n\n\t\t\treturn buffer;\n\n\t\t}\n\n\t\tfunction ensureBinary( buffer ) {\n\n\t\t\tif ( typeof buffer === 'string' ) {\n\n\t\t\t\tconst array_buffer = new Uint8Array( buffer.length );\n\t\t\t\tfor ( let i = 0; i < buffer.length; i ++ ) {\n\n\t\t\t\t\tarray_buffer[ i ] = buffer.charCodeAt( i ) & 0xff; // implicitly assumes little-endian\n\n\t\t\t\t}\n\n\t\t\t\treturn array_buffer.buffer || array_buffer;\n\n\t\t\t} else {\n\n\t\t\t\treturn buffer;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// start\n\n\t\tconst binData = ensureBinary( data );\n\n\t\treturn isBinary( binData ) ? parseBinary( binData ) : parseASCII( ensureString( data ) );\n\n\t}\n\n}\n\nexport { STLLoader };\n","import {\n\tBufferGeometry,\n\tFileLoader,\n\tFloat32BufferAttribute,\n\tGroup,\n\tLineBasicMaterial,\n\tLineSegments,\n\tLoader,\n\tMaterial,\n\tMesh,\n\tMeshPhongMaterial,\n\tPoints,\n\tPointsMaterial,\n\tVector3\n} from 'three';\n\n// o object_name | g group_name\nconst _object_pattern = /^[og]\\s*(.+)?/;\n// mtllib file_reference\nconst _material_library_pattern = /^mtllib /;\n// usemtl material_name\nconst _material_use_pattern = /^usemtl /;\n// usemap map_name\nconst _map_use_pattern = /^usemap /;\n\nconst _vA = new Vector3();\nconst _vB = new Vector3();\nconst _vC = new Vector3();\n\nconst _ab = new Vector3();\nconst _cb = new Vector3();\n\nfunction ParserState() {\n\n\tconst state = {\n\t\tobjects: [],\n\t\tobject: {},\n\n\t\tvertices: [],\n\t\tnormals: [],\n\t\tcolors: [],\n\t\tuvs: [],\n\n\t\tmaterials: {},\n\t\tmaterialLibraries: [],\n\n\t\tstartObject: function ( name, fromDeclaration ) {\n\n\t\t\t// If the current object (initial from reset) is not from a g/o declaration in the parsed\n\t\t\t// file. We need to use it for the first parsed g/o to keep things in sync.\n\t\t\tif ( this.object && this.object.fromDeclaration === false ) {\n\n\t\t\t\tthis.object.name = name;\n\t\t\t\tthis.object.fromDeclaration = ( fromDeclaration !== false );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tconst previousMaterial = ( this.object && typeof this.object.currentMaterial === 'function' ? this.object.currentMaterial() : undefined );\n\n\t\t\tif ( this.object && typeof this.object._finalize === 'function' ) {\n\n\t\t\t\tthis.object._finalize( true );\n\n\t\t\t}\n\n\t\t\tthis.object = {\n\t\t\t\tname: name || '',\n\t\t\t\tfromDeclaration: ( fromDeclaration !== false ),\n\n\t\t\t\tgeometry: {\n\t\t\t\t\tvertices: [],\n\t\t\t\t\tnormals: [],\n\t\t\t\t\tcolors: [],\n\t\t\t\t\tuvs: [],\n\t\t\t\t\thasUVIndices: false\n\t\t\t\t},\n\t\t\t\tmaterials: [],\n\t\t\t\tsmooth: true,\n\n\t\t\t\tstartMaterial: function ( name, libraries ) {\n\n\t\t\t\t\tconst previous = this._finalize( false );\n\n\t\t\t\t\t// New usemtl declaration overwrites an inherited material, except if faces were declared\n\t\t\t\t\t// after the material, then it must be preserved for proper MultiMaterial continuation.\n\t\t\t\t\tif ( previous && ( previous.inherited || previous.groupCount <= 0 ) ) {\n\n\t\t\t\t\t\tthis.materials.splice( previous.index, 1 );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tconst material = {\n\t\t\t\t\t\tindex: this.materials.length,\n\t\t\t\t\t\tname: name || '',\n\t\t\t\t\t\tmtllib: ( Array.isArray( libraries ) && libraries.length > 0 ? libraries[ libraries.length - 1 ] : '' ),\n\t\t\t\t\t\tsmooth: ( previous !== undefined ? previous.smooth : this.smooth ),\n\t\t\t\t\t\tgroupStart: ( previous !== undefined ? previous.groupEnd : 0 ),\n\t\t\t\t\t\tgroupEnd: - 1,\n\t\t\t\t\t\tgroupCount: - 1,\n\t\t\t\t\t\tinherited: false,\n\n\t\t\t\t\t\tclone: function ( index ) {\n\n\t\t\t\t\t\t\tconst cloned = {\n\t\t\t\t\t\t\t\tindex: ( typeof index === 'number' ? index : this.index ),\n\t\t\t\t\t\t\t\tname: this.name,\n\t\t\t\t\t\t\t\tmtllib: this.mtllib,\n\t\t\t\t\t\t\t\tsmooth: this.smooth,\n\t\t\t\t\t\t\t\tgroupStart: 0,\n\t\t\t\t\t\t\t\tgroupEnd: - 1,\n\t\t\t\t\t\t\t\tgroupCount: - 1,\n\t\t\t\t\t\t\t\tinherited: false\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\tcloned.clone = this.clone.bind( cloned );\n\t\t\t\t\t\t\treturn cloned;\n\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\n\t\t\t\t\tthis.materials.push( material );\n\n\t\t\t\t\treturn material;\n\n\t\t\t\t},\n\n\t\t\t\tcurrentMaterial: function () {\n\n\t\t\t\t\tif ( this.materials.length > 0 ) {\n\n\t\t\t\t\t\treturn this.materials[ this.materials.length - 1 ];\n\n\t\t\t\t\t}\n\n\t\t\t\t\treturn undefined;\n\n\t\t\t\t},\n\n\t\t\t\t_finalize: function ( end ) {\n\n\t\t\t\t\tconst lastMultiMaterial = this.currentMaterial();\n\t\t\t\t\tif ( lastMultiMaterial && lastMultiMaterial.groupEnd === - 1 ) {\n\n\t\t\t\t\t\tlastMultiMaterial.groupEnd = this.geometry.vertices.length / 3;\n\t\t\t\t\t\tlastMultiMaterial.groupCount = lastMultiMaterial.groupEnd - lastMultiMaterial.groupStart;\n\t\t\t\t\t\tlastMultiMaterial.inherited = false;\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// Ignore objects tail materials if no face declarations followed them before a new o/g started.\n\t\t\t\t\tif ( end && this.materials.length > 1 ) {\n\n\t\t\t\t\t\tfor ( let mi = this.materials.length - 1; mi >= 0; mi -- ) {\n\n\t\t\t\t\t\t\tif ( this.materials[ mi ].groupCount <= 0 ) {\n\n\t\t\t\t\t\t\t\tthis.materials.splice( mi, 1 );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// Guarantee at least one empty material, this makes the creation later more straight forward.\n\t\t\t\t\tif ( end && this.materials.length === 0 ) {\n\n\t\t\t\t\t\tthis.materials.push( {\n\t\t\t\t\t\t\tname: '',\n\t\t\t\t\t\t\tsmooth: this.smooth\n\t\t\t\t\t\t} );\n\n\t\t\t\t\t}\n\n\t\t\t\t\treturn lastMultiMaterial;\n\n\t\t\t\t}\n\t\t\t};\n\n\t\t\t// Inherit previous objects material.\n\t\t\t// Spec tells us that a declared material must be set to all objects until a new material is declared.\n\t\t\t// If a usemtl declaration is encountered while this new object is being parsed, it will\n\t\t\t// overwrite the inherited material. Exception being that there was already face declarations\n\t\t\t// to the inherited material, then it will be preserved for proper MultiMaterial continuation.\n\n\t\t\tif ( previousMaterial && previousMaterial.name && typeof previousMaterial.clone === 'function' ) {\n\n\t\t\t\tconst declared = previousMaterial.clone( 0 );\n\t\t\t\tdeclared.inherited = true;\n\t\t\t\tthis.object.materials.push( declared );\n\n\t\t\t}\n\n\t\t\tthis.objects.push( this.object );\n\n\t\t},\n\n\t\tfinalize: function () {\n\n\t\t\tif ( this.object && typeof this.object._finalize === 'function' ) {\n\n\t\t\t\tthis.object._finalize( true );\n\n\t\t\t}\n\n\t\t},\n\n\t\tparseVertexIndex: function ( value, len ) {\n\n\t\t\tconst index = parseInt( value, 10 );\n\t\t\treturn ( index >= 0 ? index - 1 : index + len / 3 ) * 3;\n\n\t\t},\n\n\t\tparseNormalIndex: function ( value, len ) {\n\n\t\t\tconst index = parseInt( value, 10 );\n\t\t\treturn ( index >= 0 ? index - 1 : index + len / 3 ) * 3;\n\n\t\t},\n\n\t\tparseUVIndex: function ( value, len ) {\n\n\t\t\tconst index = parseInt( value, 10 );\n\t\t\treturn ( index >= 0 ? index - 1 : index + len / 2 ) * 2;\n\n\t\t},\n\n\t\taddVertex: function ( a, b, c ) {\n\n\t\t\tconst src = this.vertices;\n\t\t\tconst dst = this.object.geometry.vertices;\n\n\t\t\tdst.push( src[ a + 0 ], src[ a + 1 ], src[ a + 2 ] );\n\t\t\tdst.push( src[ b + 0 ], src[ b + 1 ], src[ b + 2 ] );\n\t\t\tdst.push( src[ c + 0 ], src[ c + 1 ], src[ c + 2 ] );\n\n\t\t},\n\n\t\taddVertexPoint: function ( a ) {\n\n\t\t\tconst src = this.vertices;\n\t\t\tconst dst = this.object.geometry.vertices;\n\n\t\t\tdst.push( src[ a + 0 ], src[ a + 1 ], src[ a + 2 ] );\n\n\t\t},\n\n\t\taddVertexLine: function ( a ) {\n\n\t\t\tconst src = this.vertices;\n\t\t\tconst dst = this.object.geometry.vertices;\n\n\t\t\tdst.push( src[ a + 0 ], src[ a + 1 ], src[ a + 2 ] );\n\n\t\t},\n\n\t\taddNormal: function ( a, b, c ) {\n\n\t\t\tconst src = this.normals;\n\t\t\tconst dst = this.object.geometry.normals;\n\n\t\t\tdst.push( src[ a + 0 ], src[ a + 1 ], src[ a + 2 ] );\n\t\t\tdst.push( src[ b + 0 ], src[ b + 1 ], src[ b + 2 ] );\n\t\t\tdst.push( src[ c + 0 ], src[ c + 1 ], src[ c + 2 ] );\n\n\t\t},\n\n\t\taddFaceNormal: function ( a, b, c ) {\n\n\t\t\tconst src = this.vertices;\n\t\t\tconst dst = this.object.geometry.normals;\n\n\t\t\t_vA.fromArray( src, a );\n\t\t\t_vB.fromArray( src, b );\n\t\t\t_vC.fromArray( src, c );\n\n\t\t\t_cb.subVectors( _vC, _vB );\n\t\t\t_ab.subVectors( _vA, _vB );\n\t\t\t_cb.cross( _ab );\n\n\t\t\t_cb.normalize();\n\n\t\t\tdst.push( _cb.x, _cb.y, _cb.z );\n\t\t\tdst.push( _cb.x, _cb.y, _cb.z );\n\t\t\tdst.push( _cb.x, _cb.y, _cb.z );\n\n\t\t},\n\n\t\taddColor: function ( a, b, c ) {\n\n\t\t\tconst src = this.colors;\n\t\t\tconst dst = this.object.geometry.colors;\n\n\t\t\tif ( src[ a ] !== undefined ) dst.push( src[ a + 0 ], src[ a + 1 ], src[ a + 2 ] );\n\t\t\tif ( src[ b ] !== undefined ) dst.push( src[ b + 0 ], src[ b + 1 ], src[ b + 2 ] );\n\t\t\tif ( src[ c ] !== undefined ) dst.push( src[ c + 0 ], src[ c + 1 ], src[ c + 2 ] );\n\n\t\t},\n\n\t\taddUV: function ( a, b, c ) {\n\n\t\t\tconst src = this.uvs;\n\t\t\tconst dst = this.object.geometry.uvs;\n\n\t\t\tdst.push( src[ a + 0 ], src[ a + 1 ] );\n\t\t\tdst.push( src[ b + 0 ], src[ b + 1 ] );\n\t\t\tdst.push( src[ c + 0 ], src[ c + 1 ] );\n\n\t\t},\n\n\t\taddDefaultUV: function () {\n\n\t\t\tconst dst = this.object.geometry.uvs;\n\n\t\t\tdst.push( 0, 0 );\n\t\t\tdst.push( 0, 0 );\n\t\t\tdst.push( 0, 0 );\n\n\t\t},\n\n\t\taddUVLine: function ( a ) {\n\n\t\t\tconst src = this.uvs;\n\t\t\tconst dst = this.object.geometry.uvs;\n\n\t\t\tdst.push( src[ a + 0 ], src[ a + 1 ] );\n\n\t\t},\n\n\t\taddFace: function ( a, b, c, ua, ub, uc, na, nb, nc ) {\n\n\t\t\tconst vLen = this.vertices.length;\n\n\t\t\tlet ia = this.parseVertexIndex( a, vLen );\n\t\t\tlet ib = this.parseVertexIndex( b, vLen );\n\t\t\tlet ic = this.parseVertexIndex( c, vLen );\n\n\t\t\tthis.addVertex( ia, ib, ic );\n\t\t\tthis.addColor( ia, ib, ic );\n\n\t\t\t// normals\n\n\t\t\tif ( na !== undefined && na !== '' ) {\n\n\t\t\t\tconst nLen = this.normals.length;\n\n\t\t\t\tia = this.parseNormalIndex( na, nLen );\n\t\t\t\tib = this.parseNormalIndex( nb, nLen );\n\t\t\t\tic = this.parseNormalIndex( nc, nLen );\n\n\t\t\t\tthis.addNormal( ia, ib, ic );\n\n\t\t\t} else {\n\n\t\t\t\tthis.addFaceNormal( ia, ib, ic );\n\n\t\t\t}\n\n\t\t\t// uvs\n\n\t\t\tif ( ua !== undefined && ua !== '' ) {\n\n\t\t\t\tconst uvLen = this.uvs.length;\n\n\t\t\t\tia = this.parseUVIndex( ua, uvLen );\n\t\t\t\tib = this.parseUVIndex( ub, uvLen );\n\t\t\t\tic = this.parseUVIndex( uc, uvLen );\n\n\t\t\t\tthis.addUV( ia, ib, ic );\n\n\t\t\t\tthis.object.geometry.hasUVIndices = true;\n\n\t\t\t} else {\n\n\t\t\t\t// add placeholder values (for inconsistent face definitions)\n\n\t\t\t\tthis.addDefaultUV();\n\n\t\t\t}\n\n\t\t},\n\n\t\taddPointGeometry: function ( vertices ) {\n\n\t\t\tthis.object.geometry.type = 'Points';\n\n\t\t\tconst vLen = this.vertices.length;\n\n\t\t\tfor ( let vi = 0, l = vertices.length; vi < l; vi ++ ) {\n\n\t\t\t\tconst index = this.parseVertexIndex( vertices[ vi ], vLen );\n\n\t\t\t\tthis.addVertexPoint( index );\n\t\t\t\tthis.addColor( index );\n\n\t\t\t}\n\n\t\t},\n\n\t\taddLineGeometry: function ( vertices, uvs ) {\n\n\t\t\tthis.object.geometry.type = 'Line';\n\n\t\t\tconst vLen = this.vertices.length;\n\t\t\tconst uvLen = this.uvs.length;\n\n\t\t\tfor ( let vi = 0, l = vertices.length; vi < l; vi ++ ) {\n\n\t\t\t\tthis.addVertexLine( this.parseVertexIndex( vertices[ vi ], vLen ) );\n\n\t\t\t}\n\n\t\t\tfor ( let uvi = 0, l = uvs.length; uvi < l; uvi ++ ) {\n\n\t\t\t\tthis.addUVLine( this.parseUVIndex( uvs[ uvi ], uvLen ) );\n\n\t\t\t}\n\n\t\t}\n\n\t};\n\n\tstate.startObject( '', false );\n\n\treturn state;\n\n}\n\n//\n\nclass OBJLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t\tthis.materials = null;\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tconst loader = new FileLoader( this.manager );\n\t\tloader.setPath( this.path );\n\t\tloader.setRequestHeader( this.requestHeader );\n\t\tloader.setWithCredentials( this.withCredentials );\n\t\tloader.load( url, function ( text ) {\n\n\t\t\ttry {\n\n\t\t\t\tonLoad( scope.parse( text ) );\n\n\t\t\t} catch ( e ) {\n\n\t\t\t\tif ( onError ) {\n\n\t\t\t\t\tonError( e );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.error( e );\n\n\t\t\t\t}\n\n\t\t\t\tscope.manager.itemError( url );\n\n\t\t\t}\n\n\t\t}, onProgress, onError );\n\n\t}\n\n\tsetMaterials( materials ) {\n\n\t\tthis.materials = materials;\n\n\t\treturn this;\n\n\t}\n\n\tparse( text ) {\n\n\t\tconst state = new ParserState();\n\n\t\tif ( text.indexOf( '\\r\\n' ) !== - 1 ) {\n\n\t\t\t// This is faster than String.split with regex that splits on both\n\t\t\ttext = text.replace( /\\r\\n/g, '\\n' );\n\n\t\t}\n\n\t\tif ( text.indexOf( '\\\\\\n' ) !== - 1 ) {\n\n\t\t\t// join lines separated by a line continuation character (\\)\n\t\t\ttext = text.replace( /\\\\\\n/g, '' );\n\n\t\t}\n\n\t\tconst lines = text.split( '\\n' );\n\t\tlet line = '', lineFirstChar = '';\n\t\tlet lineLength = 0;\n\t\tlet result = [];\n\n\t\t// Faster to just trim left side of the line. Use if available.\n\t\tconst trimLeft = ( typeof ''.trimLeft === 'function' );\n\n\t\tfor ( let i = 0, l = lines.length; i < l; i ++ ) {\n\n\t\t\tline = lines[ i ];\n\n\t\t\tline = trimLeft ? line.trimLeft() : line.trim();\n\n\t\t\tlineLength = line.length;\n\n\t\t\tif ( lineLength === 0 ) continue;\n\n\t\t\tlineFirstChar = line.charAt( 0 );\n\n\t\t\t// @todo invoke passed in handler if any\n\t\t\tif ( lineFirstChar === '#' ) continue;\n\n\t\t\tif ( lineFirstChar === 'v' ) {\n\n\t\t\t\tconst data = line.split( /\\s+/ );\n\n\t\t\t\tswitch ( data[ 0 ] ) {\n\n\t\t\t\t\tcase 'v':\n\t\t\t\t\t\tstate.vertices.push(\n\t\t\t\t\t\t\tparseFloat( data[ 1 ] ),\n\t\t\t\t\t\t\tparseFloat( data[ 2 ] ),\n\t\t\t\t\t\t\tparseFloat( data[ 3 ] )\n\t\t\t\t\t\t);\n\t\t\t\t\t\tif ( data.length >= 7 ) {\n\n\t\t\t\t\t\t\tstate.colors.push(\n\t\t\t\t\t\t\t\tparseFloat( data[ 4 ] ),\n\t\t\t\t\t\t\t\tparseFloat( data[ 5 ] ),\n\t\t\t\t\t\t\t\tparseFloat( data[ 6 ] )\n\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// if no colors are defined, add placeholders so color and vertex indices match\n\n\t\t\t\t\t\t\tstate.colors.push( undefined, undefined, undefined );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'vn':\n\t\t\t\t\t\tstate.normals.push(\n\t\t\t\t\t\t\tparseFloat( data[ 1 ] ),\n\t\t\t\t\t\t\tparseFloat( data[ 2 ] ),\n\t\t\t\t\t\t\tparseFloat( data[ 3 ] )\n\t\t\t\t\t\t);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'vt':\n\t\t\t\t\t\tstate.uvs.push(\n\t\t\t\t\t\t\tparseFloat( data[ 1 ] ),\n\t\t\t\t\t\t\tparseFloat( data[ 2 ] )\n\t\t\t\t\t\t);\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t} else if ( lineFirstChar === 'f' ) {\n\n\t\t\t\tconst lineData = line.substr( 1 ).trim();\n\t\t\t\tconst vertexData = lineData.split( /\\s+/ );\n\t\t\t\tconst faceVertices = [];\n\n\t\t\t\t// Parse the face vertex data into an easy to work with format\n\n\t\t\t\tfor ( let j = 0, jl = vertexData.length; j < jl; j ++ ) {\n\n\t\t\t\t\tconst vertex = vertexData[ j ];\n\n\t\t\t\t\tif ( vertex.length > 0 ) {\n\n\t\t\t\t\t\tconst vertexParts = vertex.split( '/' );\n\t\t\t\t\t\tfaceVertices.push( vertexParts );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\t// Draw an edge between the first vertex and all subsequent vertices to form an n-gon\n\n\t\t\t\tconst v1 = faceVertices[ 0 ];\n\n\t\t\t\tfor ( let j = 1, jl = faceVertices.length - 1; j < jl; j ++ ) {\n\n\t\t\t\t\tconst v2 = faceVertices[ j ];\n\t\t\t\t\tconst v3 = faceVertices[ j + 1 ];\n\n\t\t\t\t\tstate.addFace(\n\t\t\t\t\t\tv1[ 0 ], v2[ 0 ], v3[ 0 ],\n\t\t\t\t\t\tv1[ 1 ], v2[ 1 ], v3[ 1 ],\n\t\t\t\t\t\tv1[ 2 ], v2[ 2 ], v3[ 2 ]\n\t\t\t\t\t);\n\n\t\t\t\t}\n\n\t\t\t} else if ( lineFirstChar === 'l' ) {\n\n\t\t\t\tconst lineParts = line.substring( 1 ).trim().split( ' ' );\n\t\t\t\tlet lineVertices = [];\n\t\t\t\tconst lineUVs = [];\n\n\t\t\t\tif ( line.indexOf( '/' ) === - 1 ) {\n\n\t\t\t\t\tlineVertices = lineParts;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tfor ( let li = 0, llen = lineParts.length; li < llen; li ++ ) {\n\n\t\t\t\t\t\tconst parts = lineParts[ li ].split( '/' );\n\n\t\t\t\t\t\tif ( parts[ 0 ] !== '' ) lineVertices.push( parts[ 0 ] );\n\t\t\t\t\t\tif ( parts[ 1 ] !== '' ) lineUVs.push( parts[ 1 ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tstate.addLineGeometry( lineVertices, lineUVs );\n\n\t\t\t} else if ( lineFirstChar === 'p' ) {\n\n\t\t\t\tconst lineData = line.substr( 1 ).trim();\n\t\t\t\tconst pointData = lineData.split( ' ' );\n\n\t\t\t\tstate.addPointGeometry( pointData );\n\n\t\t\t} else if ( ( result = _object_pattern.exec( line ) ) !== null ) {\n\n\t\t\t\t// o object_name\n\t\t\t\t// or\n\t\t\t\t// g group_name\n\n\t\t\t\t// WORKAROUND: https://bugs.chromium.org/p/v8/issues/detail?id=2869\n\t\t\t\t// let name = result[ 0 ].substr( 1 ).trim();\n\t\t\t\tconst name = ( ' ' + result[ 0 ].substr( 1 ).trim() ).substr( 1 );\n\n\t\t\t\tstate.startObject( name );\n\n\t\t\t} else if ( _material_use_pattern.test( line ) ) {\n\n\t\t\t\t// material\n\n\t\t\t\tstate.object.startMaterial( line.substring( 7 ).trim(), state.materialLibraries );\n\n\t\t\t} else if ( _material_library_pattern.test( line ) ) {\n\n\t\t\t\t// mtl file\n\n\t\t\t\tstate.materialLibraries.push( line.substring( 7 ).trim() );\n\n\t\t\t} else if ( _map_use_pattern.test( line ) ) {\n\n\t\t\t\t// the line is parsed but ignored since the loader assumes textures are defined MTL files\n\t\t\t\t// (according to https://www.okino.com/conv/imp_wave.htm, 'usemap' is the old-style Wavefront texture reference method)\n\n\t\t\t\tconsole.warn( 'THREE.OBJLoader: Rendering identifier \"usemap\" not supported. Textures must be defined in MTL files.' );\n\n\t\t\t} else if ( lineFirstChar === 's' ) {\n\n\t\t\t\tresult = line.split( ' ' );\n\n\t\t\t\t// smooth shading\n\n\t\t\t\t// @todo Handle files that have varying smooth values for a set of faces inside one geometry,\n\t\t\t\t// but does not define a usemtl for each face set.\n\t\t\t\t// This should be detected and a dummy material created (later MultiMaterial and geometry groups).\n\t\t\t\t// This requires some care to not create extra material on each smooth value for \"normal\" obj files.\n\t\t\t\t// where explicit usemtl defines geometry groups.\n\t\t\t\t// Example asset: examples/models/obj/cerberus/Cerberus.obj\n\n\t\t\t\t/*\n\t\t\t\t\t * http://paulbourke.net/dataformats/obj/\n\t\t\t\t\t * or\n\t\t\t\t\t * http://www.cs.utah.edu/~boulos/cs3505/obj_spec.pdf\n\t\t\t\t\t *\n\t\t\t\t\t * From chapter \"Grouping\" Syntax explanation \"s group_number\":\n\t\t\t\t\t * \"group_number is the smoothing group number. To turn off smoothing groups, use a value of 0 or off.\n\t\t\t\t\t * Polygonal elements use group numbers to put elements in different smoothing groups. For free-form\n\t\t\t\t\t * surfaces, smoothing groups are either turned on or off; there is no difference between values greater\n\t\t\t\t\t * than 0.\"\n\t\t\t\t\t */\n\t\t\t\tif ( result.length > 1 ) {\n\n\t\t\t\t\tconst value = result[ 1 ].trim().toLowerCase();\n\t\t\t\t\tstate.object.smooth = ( value !== '0' && value !== 'off' );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// ZBrush can produce \"s\" lines #11707\n\t\t\t\t\tstate.object.smooth = true;\n\n\t\t\t\t}\n\n\t\t\t\tconst material = state.object.currentMaterial();\n\t\t\t\tif ( material ) material.smooth = state.object.smooth;\n\n\t\t\t} else {\n\n\t\t\t\t// Handle null terminated files without exception\n\t\t\t\tif ( line === '\\0' ) continue;\n\n\t\t\t\tconsole.warn( 'THREE.OBJLoader: Unexpected line: \"' + line + '\"' );\n\n\t\t\t}\n\n\t\t}\n\n\t\tstate.finalize();\n\n\t\tconst container = new Group();\n\t\tcontainer.materialLibraries = [].concat( state.materialLibraries );\n\n\t\tconst hasPrimitives = ! ( state.objects.length === 1 && state.objects[ 0 ].geometry.vertices.length === 0 );\n\n\t\tif ( hasPrimitives === true ) {\n\n\t\t\tfor ( let i = 0, l = state.objects.length; i < l; i ++ ) {\n\n\t\t\t\tconst object = state.objects[ i ];\n\t\t\t\tconst geometry = object.geometry;\n\t\t\t\tconst materials = object.materials;\n\t\t\t\tconst isLine = ( geometry.type === 'Line' );\n\t\t\t\tconst isPoints = ( geometry.type === 'Points' );\n\t\t\t\tlet hasVertexColors = false;\n\n\t\t\t\t// Skip o/g line declarations that did not follow with any faces\n\t\t\t\tif ( geometry.vertices.length === 0 ) continue;\n\n\t\t\t\tconst buffergeometry = new BufferGeometry();\n\n\t\t\t\tbuffergeometry.setAttribute( 'position', new Float32BufferAttribute( geometry.vertices, 3 ) );\n\n\t\t\t\tif ( geometry.normals.length > 0 ) {\n\n\t\t\t\t\tbuffergeometry.setAttribute( 'normal', new Float32BufferAttribute( geometry.normals, 3 ) );\n\n\t\t\t\t}\n\n\t\t\t\tif ( geometry.colors.length > 0 ) {\n\n\t\t\t\t\thasVertexColors = true;\n\t\t\t\t\tbuffergeometry.setAttribute( 'color', new Float32BufferAttribute( geometry.colors, 3 ) );\n\n\t\t\t\t}\n\n\t\t\t\tif ( geometry.hasUVIndices === true ) {\n\n\t\t\t\t\tbuffergeometry.setAttribute( 'uv', new Float32BufferAttribute( geometry.uvs, 2 ) );\n\n\t\t\t\t}\n\n\t\t\t\t// Create materials\n\n\t\t\t\tconst createdMaterials = [];\n\n\t\t\t\tfor ( let mi = 0, miLen = materials.length; mi < miLen; mi ++ ) {\n\n\t\t\t\t\tconst sourceMaterial = materials[ mi ];\n\t\t\t\t\tconst materialHash = sourceMaterial.name + '_' + sourceMaterial.smooth + '_' + hasVertexColors;\n\t\t\t\t\tlet material = state.materials[ materialHash ];\n\n\t\t\t\t\tif ( this.materials !== null ) {\n\n\t\t\t\t\t\tmaterial = this.materials.create( sourceMaterial.name );\n\n\t\t\t\t\t\t// mtl etc. loaders probably can't create line materials correctly, copy properties to a line material.\n\t\t\t\t\t\tif ( isLine && material && ! ( material instanceof LineBasicMaterial ) ) {\n\n\t\t\t\t\t\t\tconst materialLine = new LineBasicMaterial();\n\t\t\t\t\t\t\tMaterial.prototype.copy.call( materialLine, material );\n\t\t\t\t\t\t\tmaterialLine.color.copy( material.color );\n\t\t\t\t\t\t\tmaterial = materialLine;\n\n\t\t\t\t\t\t} else if ( isPoints && material && ! ( material instanceof PointsMaterial ) ) {\n\n\t\t\t\t\t\t\tconst materialPoints = new PointsMaterial( { size: 10, sizeAttenuation: false } );\n\t\t\t\t\t\t\tMaterial.prototype.copy.call( materialPoints, material );\n\t\t\t\t\t\t\tmaterialPoints.color.copy( material.color );\n\t\t\t\t\t\t\tmaterialPoints.map = material.map;\n\t\t\t\t\t\t\tmaterial = materialPoints;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( material === undefined ) {\n\n\t\t\t\t\t\tif ( isLine ) {\n\n\t\t\t\t\t\t\tmaterial = new LineBasicMaterial();\n\n\t\t\t\t\t\t} else if ( isPoints ) {\n\n\t\t\t\t\t\t\tmaterial = new PointsMaterial( { size: 1, sizeAttenuation: false } );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tmaterial = new MeshPhongMaterial();\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tmaterial.name = sourceMaterial.name;\n\t\t\t\t\t\tmaterial.flatShading = sourceMaterial.smooth ? false : true;\n\t\t\t\t\t\tmaterial.vertexColors = hasVertexColors;\n\n\t\t\t\t\t\tstate.materials[ materialHash ] = material;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tcreatedMaterials.push( material );\n\n\t\t\t\t}\n\n\t\t\t\t// Create mesh\n\n\t\t\t\tlet mesh;\n\n\t\t\t\tif ( createdMaterials.length > 1 ) {\n\n\t\t\t\t\tfor ( let mi = 0, miLen = materials.length; mi < miLen; mi ++ ) {\n\n\t\t\t\t\t\tconst sourceMaterial = materials[ mi ];\n\t\t\t\t\t\tbuffergeometry.addGroup( sourceMaterial.groupStart, sourceMaterial.groupCount, mi );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( isLine ) {\n\n\t\t\t\t\t\tmesh = new LineSegments( buffergeometry, createdMaterials );\n\n\t\t\t\t\t} else if ( isPoints ) {\n\n\t\t\t\t\t\tmesh = new Points( buffergeometry, createdMaterials );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tmesh = new Mesh( buffergeometry, createdMaterials );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tif ( isLine ) {\n\n\t\t\t\t\t\tmesh = new LineSegments( buffergeometry, createdMaterials[ 0 ] );\n\n\t\t\t\t\t} else if ( isPoints ) {\n\n\t\t\t\t\t\tmesh = new Points( buffergeometry, createdMaterials[ 0 ] );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tmesh = new Mesh( buffergeometry, createdMaterials[ 0 ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tmesh.name = object.name;\n\n\t\t\t\tcontainer.add( mesh );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// if there is only the default parser state object with no geometry data, interpret data as point cloud\n\n\t\t\tif ( state.vertices.length > 0 ) {\n\n\t\t\t\tconst material = new PointsMaterial( { size: 1, sizeAttenuation: false } );\n\n\t\t\t\tconst buffergeometry = new BufferGeometry();\n\n\t\t\t\tbuffergeometry.setAttribute( 'position', new Float32BufferAttribute( state.vertices, 3 ) );\n\n\t\t\t\tif ( state.colors.length > 0 && state.colors[ 0 ] !== undefined ) {\n\n\t\t\t\t\tbuffergeometry.setAttribute( 'color', new Float32BufferAttribute( state.colors, 3 ) );\n\t\t\t\t\tmaterial.vertexColors = true;\n\n\t\t\t\t}\n\n\t\t\t\tconst points = new Points( buffergeometry, material );\n\t\t\t\tcontainer.add( points );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn container;\n\n\t}\n\n}\n\nexport { OBJLoader };\n","const JSONLoader = require('./JSONLoader').JSONLoader;\nconst THREE = require('three');\nconst FileLoader = THREE.FileLoader;\n\nconst mergeGeometries = (geometries) => {\n const merge = (geometry1, geometry2) => {\n geometry1.merge(geometry2);\n }\n\n if (geometries && geometries.length > 0) {\n while (geometries.length > 1) {\n const geometry2 = geometries.splice(1,1);\n merge(geometries[0], geometry2[0]);\n }\n return geometries[0];\n }\n return undefined;\n}\n\nconst IndexedSourcesHandler = function(urlIn, crossOrigin, onDownloadedCallback) {\n const loader = new FileLoader();\n const jsonLoader = new JSONLoader();\n loader.crossOrigin = crossOrigin;\n const url = urlIn;\n const onDownloaded = onDownloadedCallback;\n let data = undefined;\n let downloading = false;\n let finished = false;\n let error = undefined;\n const items = [];\n\n const processItemDownloaded = (item) => {\n const modelData = data[item.index];\n if (modelData) {\n let obj = jsonLoader.parse( modelData );\n item.onLoad(obj.geometry, obj.materials);\n } else {\n processItemError(item, {responseURL: url});\n }\n }\n\n const processItemError = (item) => {\n if (item.onError) {\n if (!error) {\n error = {responseURL: url};\n }\n item.onError(error);\n }\n }\n\n this.downloadCompleted = (args) => {\n try {\n data = JSON.parse(args[0]);\n downloading = false;\n finished = true;\n if (Array.isArray(data)) {\n items.forEach(item => processItemDownloaded(item));\n } else {\n items.forEach(item => processItemError(item));\n }\n } catch {\n items.forEach(item => processItemError(item));\n }\n }\n\n const errorHandling = () => {\n return xhr => {\n error = xhr;\n finished = true;\n downloading = false;\n items.forEach((item) => {\n processItemError(item);\n });\n }\n }\n\n const progressHandling = () => {\n return xhr => {\n items.forEach((item) => {\n if (item.onProgress) {\n item.onProgress(xhr);\n }\n });\n }\n }\n\n this.load = (index, onLoad, onProgress, onError) => {\n const item = {\n index,\n onLoad,\n onProgress,\n onError,\n };\n if (finished) {\n if (data) {\n processItemDownloaded(item);\n } else {\n processItemError(error);\n }\n } else if (downloading) {\n //quene it up\n items.push(item);\n } else {\n items.push(item);\n downloading = true;\n loader.load(url, onDownloaded, progressHandling, errorHandling);\n }\n }\n}\n\nconst MultiSourcesHandler = function(numberIn, onLoadCallback) {\n const allData = [];\n const number = numberIn;\n const onLoad = onLoadCallback;\n let totalDownloaded = 0;\n\n this.itemDownloaded = (order, args) => {\n allData[order]= args;\n totalDownloaded++;\n if (totalDownloaded == number) {\n const materials = allData[0][1];\n const geometries = allData.map((data) => data[0]);\n //All geometries will be merged into the first one\n const geometry = mergeGeometries(geometries);\n for (let i = 1; i < number; i++) {\n allData[order][0].dispose();\n allData[order][1].forEach((material) => material.dispose());\n }\n onLoad(geometry, materials);\n }\n }\n}\n\nexports.PrimitivesLoader = function () {\n let concurrentDownloads = 0;\n const MAX_DOWNLOAD = 20;\n this.crossOrigin = \"Anonymous\";\n const loader = new JSONLoader();\n const waitingList = [];\n //URL to loader pair\n const indexedLoaders = {};\n\n //Load the first file then the rest will be handled separately\n const loadFromMultipleSources = (urls, onLoad, onProgress, onError, options) => {\n const number = urls.length;\n const msHandler = new MultiSourcesHandler(number, onLoad);\n //The order here will give us hint on the sequence on merging the primitives\n let order = 0;\n urls.forEach((url) => {\n const newOptions = options ? {...options} : {};\n newOptions.msHandler = msHandler;\n newOptions.order = order;\n order++;\n loadFromSingleSource(url, onLoad, onProgress, onError, newOptions);\n });\n }\n\n const handleIndexedSource = (url, onLoad, onProgress, onError, options) => {\n const newOptions = options ? {...options} : {};\n let indexedLoader = indexedLoaders[url];\n if (!indexedLoader) {\n if (MAX_DOWNLOAD > concurrentDownloads) {\n const onLoadCallback = new onFinally(undefined, this, newOptions);\n ++concurrentDownloads;\n indexedLoader = new IndexedSourcesHandler(url, this.crossOrigin, onLoadCallback);\n indexedLoaders[url] = indexedLoader;\n } else {\n waitingList.push({\n url,\n onLoad,\n onProgress,\n onError,\n options,\n });\n }\n }\n if (indexedLoader) {\n newOptions.isHandler = indexedLoader;\n indexedLoader.load(options.index, onLoad, onProgress, onError);\n }\n }\n\n const loadFromSingleSource = (url, onLoad, onProgress, onError, options) => {\n if (options && (options.index !== undefined) ) {\n handleIndexedSource(url, onLoad, onProgress, onError, options);\n } else {\n //Standard loading\n if (MAX_DOWNLOAD > concurrentDownloads) {\n ++concurrentDownloads;\n const onLoadCallback = new onFinally(onLoad, this, options);\n const onErrorCallback = new onFinally(onError, this, options);\n loader.crossOrigin = this.crossOrigin;\n loader.load(url, onLoadCallback, onProgress, onErrorCallback);\n } else {\n waitingList.push({\n url,\n onLoad,\n onProgress,\n onError,\n options,\n });\n }\n }\n }\n\n this.load = (url, onLoad, onProgress, onError, options) => {\n if (Array.isArray(url)) {\n loadFromMultipleSources(url, onLoad, onProgress, onError, options);\n } else {\n loadFromSingleSource(url, onLoad, onProgress, onError, options);\n }\n }\n\n this.loadFromWaitingList = () => {\n while (MAX_DOWNLOAD > concurrentDownloads) {\n const item = waitingList.shift();\n if (item) {\n this.load(item.url, item.onLoad, item.onProgress, item.onError, item.options);\n } else {\n return;\n }\n }\n }\n\n this.itemRemainingCheck = () => {\n if (waitingList.length === 0 && concurrentDownloads === 0) {\n for (let key in indexedLoaders) {\n if (indexedLoaders.hasOwnProperty(key)) {\n delete indexedLoaders[key];\n }\n }\n }\n }\n\n const onFinally = function(callback, loader, options) {\n return (...args) => {\n --concurrentDownloads;\n if (options?.msHandler) {\n options.msHandler.itemDownloaded(options.order, args);\n } else if (options?.isHandler) {\n options.isHandler.downloadCompleted(args);\n } else {\n if (callback) {\n callback(...args);\n }\n }\n loader.loadFromWaitingList();\n loader.itemRemainingCheck();\n }\n }\n\n this.parse = data => {\n return loader.parse(data);\n }\n\n}\n","const THREE = require('three');\nconst mergeGeometries = require('../utilities').mergeGeometries;\n\n/**\n * Provides an object which stores lines.\n * This is created when a valid json file containing lines is read into a {@link Zinc.Scene}\n * object.\n * \n * @class\n * @author Alan Wu\n * @return {TubeLines}\n */\nconst TubeLines = function () {\n (require('./zincObject').ZincObject).call(this);\n this.isTubeLines = true;\n let dataIn = {};\n let geometryConfig = { radius: 1, radialSegments: 8, smooth: false };\n\n /**\n * Create the line segements using geometry and material.\n * \n * @param {THREE.Geomtry} geometryIn - Geometry of lines to be rendered.\n * @param {THREE.Material} materialIn - Material to be set for the lines.\n * @param {Object} options - Provide various options\n * @param {Boolean} options.localTimeEnabled - A flag to indicate either the lines is\n * time dependent.\n * @param {Boolean} options.localMorphColour - A flag to indicate either the colour is\n * time dependent.\n */\n this.createLineSegment = (geometryIn, materialIn, options) => {\n if (geometryIn && materialIn) {\n dataIn = { geometryIn, materialIn, options };\n const geometry = getTubeLinesGeometry(geometryIn.vertices);\n const material = new THREE.MeshStandardMaterial({ color: materialIn.color });\n const mesh = new THREE.Mesh(geometry, material);\n this.setMesh(mesh, options.localTimeEnabled, options.localMorphColour);\n }\n }\n\n /**\n * Set the width for the lines.\n * \n * @param {Number} width - Width of the lines.\n */\n\tthis.setWidth = width => {\n\t\tif (this.morph && this.morph.material) {\n\t\t\tthis.morph.material.linewidth = width;\n\t\t\tthis.morph.material.needsUpdate = true;\n\t\t}\n\t}\n\n /**\n * Set the opacity of this Geometry. This function will also set the transparent\n * according to the provided alpha value.\n * \n * @param {Number} alpah - Alpha value to set for this geometry, \n * can be any value between from 0 to 1.0.\n */\n this.setAlpha = function (alpha) {\n let mesh = this.getMorph();\n mesh.material.opacity = alpha;\n mesh.material.transparent = alpha < 1.0;\n mesh.material.depthWrite = alpha > 0.5;\n }\n\n /**\n * Set the wireframe mode for this geometry.\n * @param {Boolean} wireframe \n */\n this.setWireframe = (wireframe) => {\n let mesh = this.getMorph();\n mesh.material.wireframe = wireframe;\n }\n\n /**\n * Update tube radius/radialSegments value\n * \n * @param {Float} radius The radius of the tube.\n * @param {Integer} radialSegments The number of segments that make up the cross-section.\n */\n this.setTubeLines = (radius, radialSegments) => {\n if (radius && radialSegments) {\n const { geometryIn } = dataIn;\n let mesh = this.getMorph();\n mesh.geometry.dispose();\n\n geometryConfig = Object.assign(geometryConfig, { radius, radialSegments });\n mesh.geometry = getTubeLinesGeometry(geometryIn.vertices);\n }\n }\n\n /**\n * Get merged geometry from list of geometry vertices\n * \n * @param {Array} vertices - An array of THREE.Vector3 vertices.\n * @returns {Object}\n */\n const getTubeLinesGeometry = (vertices) => {\n const { radius, radialSegments, smooth } = geometryConfig;\n let finalGeometry;\n if (smooth) {\n const curve = new THREE.CatmullRomCurve3(vertices);\n finalGeometry = new THREE.TubeGeometry(curve, vertices.length, radius, radialSegments, false);\n } else {\n const geometries = [];\n for (let i = 0; i + 1 < vertices.length; i = i + 2) {\n const curve = new THREE.LineCurve3(vertices[i], vertices[i+1]);\n const tubeGeometry = new THREE.TubeGeometry(curve, 1, radius, radialSegments, false);\n geometries.push(tubeGeometry);\n }\n finalGeometry = mergeGeometries(geometries, true);\n geometries.forEach(g => g.dispose());\n }\n return finalGeometry;\n }\n}\n\nTubeLines.prototype = Object.create((require('./zincObject').ZincObject).prototype);\nexports.TubeLines = TubeLines;\n","const THREE = require('three');\n\nconst GLTFLoader = require('three/examples/jsm/loaders/GLTFLoader').GLTFLoader;\n\nconst GLTFToZincJSLoader = function () {\n\n const _this = this;\n\n this.parseGLTFObjects = (object, region, depth, finishCallback) => {\n let childRegion = region;\n if (depth !== 0) {\n if (object.type === \"Object3D\") {\n if (object.name !== \"\") {\n if (region)\n childRegion = region.findOrCreateChildFromPath(object.name);\n if (childRegion) {\n const group = childRegion.getGroup();\n group.position.copy(object.position);\n group.rotation.copy(object.rotation);\n group.quaternion.copy(object.quaternion);\n group.matrixAutoUpdate = true;\n }\n }\n } else {\n let zincGeometry = undefined;\n if (object.type === \"Mesh\") {\n zincGeometry = new (require('../primitives/geometry').Geometry)();\n } else if (object.type === \"LineSegments\") {\n zincGeometry = new (require('../primitives/lines').Lines)();\n } else if (object.type === \"Points\") {\n zincGeometry = new (require('../primitives/pointset').Pointset)();\n }\n if (zincGeometry) {\n let localTimeEnabled = false;\n let localMorphColour = false;\n if (object.geometry && object.geometry.morphAttributes) {\n localTimeEnabled = object.geometry.morphAttributes.position ? true : false;\n localMorphColour = object.geometry.morphAttributes.color ? true : false;\n }\n zincGeometry.setMesh(object.clone(), localTimeEnabled, localMorphColour);\n const morph = zincGeometry.getMorph();\n zincGeometry.groupName = morph.name;\n morph.matrixAutoUpdate = true;\n region.addZincObject(zincGeometry);\n if (finishCallback != undefined && (typeof finishCallback == 'function'))\n finishCallback(zincGeometry);\n }\n }\n }\n depth++;\n object.children.forEach( child => {\n _this.parseGLTFObjects(child, childRegion, depth, finishCallback);\n });\n }\n\n this.setCamera = scene => {\n scene.viewAll();\n const cameraControls = scene.getZincCameraControls();\n const viewport = cameraControls.getCurrentViewport();\n cameraControls.addViewport('default', viewport);\n cameraControls.setDefaultViewport('default');\n }\n\n /**\n * Load GLTF into this scene object.\n * \n * @param {String} url - URL to the GLTF file\n * @param {Function} finishCallback - Callback function which will be called\n * once the glyphset is succssfully load in.\n */\n this.load = (scene, region, url, finishCallback, allCompletedCallback, options) => {\n const path = url.substring(0, url.lastIndexOf(\"/\") + 1);\n const filename = url.substring(url.lastIndexOf(\"/\") + 1, url.length);\n const loader = new GLTFLoader().setPath(path);\n \n loader.load( filename, function ( gltf ) {\n console.log(gltf)\n _this.parseGLTFObjects(gltf.scene, region, 0, finishCallback);\n _this.setCamera(scene);\n if (allCompletedCallback != undefined && (typeof allCompletedCallback == 'function'))\n allCompletedCallback();\n });\n }\n}\n\nexports.GLTFToZincJSLoader = GLTFToZincJSLoader;\n","module.exports = require(\"three/examples/jsm/loaders/GLTFLoader\");","const GLTFExporter = require('./three/GLTFExporter').GLTFExporter;\n\n/**\n * Provides an object which uses for exporting the scene\n * \n * @class\n * @author Alan Wu\n * @return {SceneExporter}\n */\nconst SceneExporter = function (sceneIn) {\n const scene = sceneIn;\n\n\tthis.exportGLTF = (binary) => {\n const rootRegion = scene.getRootRegion();\n const zincObjects = rootRegion.getAllObjects(true);\n const animations = [];\n zincObjects.forEach(zincObject => {\n if (zincObject.animationClip) {\n animations.push({clip: zincObject.animationClip[0], mesh: zincObject.getMorph()});\n }\n });\n const exporter = new GLTFExporter();\n const options = { binary, animations };\n return new Promise((resolve, reject) => {\n exporter.parse( scene.getThreeJSScene(), function ( gltf ) {\n resolve(gltf);\n }, options );\n });\n\t}\n}\n\nexports.SceneExporter = SceneExporter;\n","import {\n\tBufferAttribute,\n\tClampToEdgeWrapping,\n\tDoubleSide,\n\tInterpolateDiscrete,\n\tInterpolateLinear,\n\tLinearFilter,\n\tLinearMipmapLinearFilter,\n\tLinearMipmapNearestFilter,\n\tMathUtils,\n\tMatrix4,\n\tMirroredRepeatWrapping,\n\tNearestFilter,\n\tNearestMipmapLinearFilter,\n\tNearestMipmapNearestFilter,\n\tPropertyBinding,\n\tRGBAFormat,\n\tRGBFormat,\n\tRepeatWrapping,\n\tScene,\n\tVector3\n} from 'three';\n\n\nclass GLTFExporter {\n\n\tconstructor() {\n\n\t\tthis.pluginCallbacks = [];\n\n\t\tthis.register( function ( writer ) {\n\n\t\t\treturn new GLTFLightExtension( writer );\n\n\t\t} );\n\n\t\tthis.register( function ( writer ) {\n\n\t\t\treturn new GLTFMaterialsUnlitExtension( writer );\n\n\t\t} );\n\n\t\tthis.register( function ( writer ) {\n\n\t\t\treturn new GLTFMaterialsPBRSpecularGlossiness( writer );\n\n\t\t} );\n\n\t}\n\n\tregister( callback ) {\n\n\t\tif ( this.pluginCallbacks.indexOf( callback ) === - 1 ) {\n\n\t\t\tthis.pluginCallbacks.push( callback );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tunregister( callback ) {\n\n\t\tif ( this.pluginCallbacks.indexOf( callback ) !== - 1 ) {\n\n\t\t\tthis.pluginCallbacks.splice( this.pluginCallbacks.indexOf( callback ), 1 );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Parse scenes and generate GLTF output\n\t * @param {Scene or [THREE.Scenes]} input Scene or Array of THREE.Scenes\n\t * @param {Function} onDone Callback on completed\n\t * @param {Object} options options\n\t */\n\tparse( input, onDone, options ) {\n\n\t\tconst writer = new GLTFWriter();\n\t\tconst plugins = [];\n\n\t\tfor ( let i = 0, il = this.pluginCallbacks.length; i < il; i ++ ) {\n\n\t\t\tplugins.push( this.pluginCallbacks[ i ]( writer ) );\n\n\t\t}\n\n\t\twriter.setPlugins( plugins );\n\t\twriter.write( input, onDone, options );\n\n\t}\n\n}\n\n//------------------------------------------------------------------------------\n// Constants\n//------------------------------------------------------------------------------\n\nconst WEBGL_CONSTANTS = {\n\tPOINTS: 0x0000,\n\tLINES: 0x0001,\n\tLINE_LOOP: 0x0002,\n\tLINE_STRIP: 0x0003,\n\tTRIANGLES: 0x0004,\n\tTRIANGLE_STRIP: 0x0005,\n\tTRIANGLE_FAN: 0x0006,\n\n\tUNSIGNED_BYTE: 0x1401,\n\tUNSIGNED_SHORT: 0x1403,\n\tFLOAT: 0x1406,\n\tUNSIGNED_INT: 0x1405,\n\tARRAY_BUFFER: 0x8892,\n\tELEMENT_ARRAY_BUFFER: 0x8893,\n\n\tNEAREST: 0x2600,\n\tLINEAR: 0x2601,\n\tNEAREST_MIPMAP_NEAREST: 0x2700,\n\tLINEAR_MIPMAP_NEAREST: 0x2701,\n\tNEAREST_MIPMAP_LINEAR: 0x2702,\n\tLINEAR_MIPMAP_LINEAR: 0x2703,\n\n\tCLAMP_TO_EDGE: 33071,\n\tMIRRORED_REPEAT: 33648,\n\tREPEAT: 10497\n};\n\nconst THREE_TO_WEBGL = {};\n\nTHREE_TO_WEBGL[ NearestFilter ] = WEBGL_CONSTANTS.NEAREST;\nTHREE_TO_WEBGL[ NearestMipmapNearestFilter ] = WEBGL_CONSTANTS.NEAREST_MIPMAP_NEAREST;\nTHREE_TO_WEBGL[ NearestMipmapLinearFilter ] = WEBGL_CONSTANTS.NEAREST_MIPMAP_LINEAR;\nTHREE_TO_WEBGL[ LinearFilter ] = WEBGL_CONSTANTS.LINEAR;\nTHREE_TO_WEBGL[ LinearMipmapNearestFilter ] = WEBGL_CONSTANTS.LINEAR_MIPMAP_NEAREST;\nTHREE_TO_WEBGL[ LinearMipmapLinearFilter ] = WEBGL_CONSTANTS.LINEAR_MIPMAP_LINEAR;\n\nTHREE_TO_WEBGL[ ClampToEdgeWrapping ] = WEBGL_CONSTANTS.CLAMP_TO_EDGE;\nTHREE_TO_WEBGL[ RepeatWrapping ] = WEBGL_CONSTANTS.REPEAT;\nTHREE_TO_WEBGL[ MirroredRepeatWrapping ] = WEBGL_CONSTANTS.MIRRORED_REPEAT;\n\nconst PATH_PROPERTIES = {\n\tscale: 'scale',\n\tposition: 'translation',\n\tquaternion: 'rotation',\n\tmorphTargetInfluences: 'weights'\n};\n\n// GLB constants\n// https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#glb-file-format-specification\n\nconst GLB_HEADER_BYTES = 12;\nconst GLB_HEADER_MAGIC = 0x46546C67;\nconst GLB_VERSION = 2;\n\nconst GLB_CHUNK_PREFIX_BYTES = 8;\nconst GLB_CHUNK_TYPE_JSON = 0x4E4F534A;\nconst GLB_CHUNK_TYPE_BIN = 0x004E4942;\n\n//------------------------------------------------------------------------------\n// Utility functions\n//------------------------------------------------------------------------------\n\n/**\n * Compare two arrays\n * @param {Array} array1 Array 1 to compare\n * @param {Array} array2 Array 2 to compare\n * @return {Boolean} Returns true if both arrays are equal\n */\nfunction equalArray( array1, array2 ) {\n\n\treturn ( array1.length === array2.length ) && array1.every( function ( element, index ) {\n\n\t\treturn element === array2[ index ];\n\n\t} );\n\n}\n\n/**\n * Converts a string to an ArrayBuffer.\n * @param {string} text\n * @return {ArrayBuffer}\n */\nfunction stringToArrayBuffer( text ) {\n\n\tif ( window.TextEncoder !== undefined ) {\n\n\t\treturn new TextEncoder().encode( text ).buffer;\n\n\t}\n\n\tconst array = new Uint8Array( new ArrayBuffer( text.length ) );\n\n\tfor ( let i = 0, il = text.length; i < il; i ++ ) {\n\n\t\tconst value = text.charCodeAt( i );\n\n\t\t// Replacing multi-byte character with space(0x20).\n\t\tarray[ i ] = value > 0xFF ? 0x20 : value;\n\n\t}\n\n\treturn array.buffer;\n\n}\n\n/**\n * Is identity matrix\n *\n * @param {Matrix4} matrix\n * @returns {Boolean} Returns true, if parameter is identity matrix\n */\nfunction isIdentityMatrix( matrix ) {\n\n\treturn equalArray( matrix.elements, [ 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1 ] );\n\n}\n\n/**\n * Get the min and max vectors from the given attribute\n * @param {BufferAttribute} attribute Attribute to find the min/max in range from start to start + count\n * @param {Integer} start\n * @param {Integer} count\n * @return {Object} Object containing the `min` and `max` values (As an array of attribute.itemSize components)\n */\nfunction getMinMax( attribute, start, count ) {\n\n\tconst output = {\n\n\t\tmin: new Array( attribute.itemSize ).fill( Number.POSITIVE_INFINITY ),\n\t\tmax: new Array( attribute.itemSize ).fill( Number.NEGATIVE_INFINITY )\n\n\t};\n\n\tfor ( let i = start; i < start + count; i ++ ) {\n\n\t\tfor ( let a = 0; a < attribute.itemSize; a ++ ) {\n\n\t\t\tlet value;\n\n\t\t\tif ( attribute.itemSize > 4 ) {\n\n\t\t\t\t // no support for interleaved data for itemSize > 4\n\n\t\t\t\tvalue = attribute.array[ i * attribute.itemSize + a ];\n\n\t\t\t} else {\n\n\t\t\t\tif ( a === 0 ) value = attribute.getX( i );\n\t\t\t\telse if ( a === 1 ) value = attribute.getY( i );\n\t\t\t\telse if ( a === 2 ) value = attribute.getZ( i );\n\t\t\t\telse if ( a === 3 ) value = attribute.getW( i );\n\n\t\t\t}\n\n\t\t\toutput.min[ a ] = Math.min( output.min[ a ], value );\n\t\t\toutput.max[ a ] = Math.max( output.max[ a ], value );\n\n\t\t}\n\n\t}\n\n\treturn output;\n\n}\n\n/**\n * Get the required size + padding for a buffer, rounded to the next 4-byte boundary.\n * https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#data-alignment\n *\n * @param {Integer} bufferSize The size the original buffer.\n * @returns {Integer} new buffer size with required padding.\n *\n */\nfunction getPaddedBufferSize( bufferSize ) {\n\n\treturn Math.ceil( bufferSize / 4 ) * 4;\n\n}\n\n/**\n * Returns a buffer aligned to 4-byte boundary.\n *\n * @param {ArrayBuffer} arrayBuffer Buffer to pad\n * @param {Integer} paddingByte (Optional)\n * @returns {ArrayBuffer} The same buffer if it's already aligned to 4-byte boundary or a new buffer\n */\nfunction getPaddedArrayBuffer( arrayBuffer, paddingByte = 0 ) {\n\n\tconst paddedLength = getPaddedBufferSize( arrayBuffer.byteLength );\n\n\tif ( paddedLength !== arrayBuffer.byteLength ) {\n\n\t\tconst array = new Uint8Array( paddedLength );\n\t\tarray.set( new Uint8Array( arrayBuffer ) );\n\n\t\tif ( paddingByte !== 0 ) {\n\n\t\t\tfor ( let i = arrayBuffer.byteLength; i < paddedLength; i ++ ) {\n\n\t\t\t\tarray[ i ] = paddingByte;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn array.buffer;\n\n\t}\n\n\treturn arrayBuffer;\n\n}\n\nlet cachedCanvas = null;\n\n/**\n * Writer\n */\nclass GLTFWriter {\n\n\tconstructor() {\n\n\t\tthis.plugins = [];\n\n\t\tthis.options = {};\n\t\tthis.pending = [];\n\t\tthis.buffers = [];\n\n\t\tthis.byteOffset = 0;\n\t\tthis.buffers = [];\n\t\tthis.nodeMap = new Map();\n\t\tthis.skins = [];\n\t\tthis.extensionsUsed = {};\n\n\t\tthis.uids = new Map();\n\t\tthis.uid = 0;\n\n\t\tthis.json = {\n\t\t\tasset: {\n\t\t\t\tversion: '2.0',\n\t\t\t\tgenerator: 'THREE.GLTFExporter'\n\t\t\t}\n\t\t};\n\n\t\tthis.cache = {\n\t\t\tmeshes: new Map(),\n\t\t\tattributes: new Map(),\n\t\t\tattributesNormalized: new Map(),\n\t\t\tmaterials: new Map(),\n\t\t\ttextures: new Map(),\n\t\t\timages: new Map()\n\t\t};\n\n\t}\n\n\tsetPlugins( plugins ) {\n\n\t\tthis.plugins = plugins;\n\n\t}\n\n\t/**\n\t * Parse scenes and generate GLTF output\n\t * @param {Scene or [THREE.Scenes]} input Scene or Array of THREE.Scenes\n\t * @param {Function} onDone Callback on completed\n\t * @param {Object} options options\n\t */\n\twrite( input, onDone, options ) {\n\n\t\tthis.options = Object.assign( {}, {\n\t\t\t// default options\n\t\t\tbinary: false,\n\t\t\ttrs: false,\n\t\t\tonlyVisible: true,\n\t\t\ttruncateDrawRange: true,\n\t\t\tembedImages: true,\n\t\t\tmaxTextureSize: Infinity,\n\t\t\tanimations: [],\n\t\t\tincludeCustomExtensions: false\n\t\t}, options );\n\n\t\tif ( this.options.animations.length > 0 ) {\n\n\t\t\t// Only TRS properties, and not matrices, may be targeted by animation.\n\t\t\tthis.options.trs = true;\n\n\t\t}\n\n\t\tthis.processInput( input );\n\n\t\tconst writer = this;\n\n\t\tPromise.all( this.pending ).then( function () {\n\n\t\t\tconst buffers = writer.buffers;\n\t\t\tconst json = writer.json;\n\t\t\tconst options = writer.options;\n\t\t\tconst extensionsUsed = writer.extensionsUsed;\n\n\t\t\t// Merge buffers.\n\t\t\tconst blob = new Blob( buffers, { type: 'application/octet-stream' } );\n\n\t\t\t// Declare extensions.\n\t\t\tconst extensionsUsedList = Object.keys( extensionsUsed );\n\n\t\t\tif ( extensionsUsedList.length > 0 ) json.extensionsUsed = extensionsUsedList;\n\n\t\t\t// Update bytelength of the single buffer.\n\t\t\tif ( json.buffers && json.buffers.length > 0 ) json.buffers[ 0 ].byteLength = blob.size;\n\n\t\t\tif ( options.binary === true ) {\n\n\t\t\t\t// https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#glb-file-format-specification\n\n\t\t\t\tconst reader = new window.FileReader();\n\t\t\t\treader.readAsArrayBuffer( blob );\n\t\t\t\treader.onloadend = function () {\n\n\t\t\t\t\t// Binary chunk.\n\t\t\t\t\tconst binaryChunk = getPaddedArrayBuffer( reader.result );\n\t\t\t\t\tconst binaryChunkPrefix = new DataView( new ArrayBuffer( GLB_CHUNK_PREFIX_BYTES ) );\n\t\t\t\t\tbinaryChunkPrefix.setUint32( 0, binaryChunk.byteLength, true );\n\t\t\t\t\tbinaryChunkPrefix.setUint32( 4, GLB_CHUNK_TYPE_BIN, true );\n\n\t\t\t\t\t// JSON chunk.\n\t\t\t\t\tconst jsonChunk = getPaddedArrayBuffer( stringToArrayBuffer( JSON.stringify( json ) ), 0x20 );\n\t\t\t\t\tconst jsonChunkPrefix = new DataView( new ArrayBuffer( GLB_CHUNK_PREFIX_BYTES ) );\n\t\t\t\t\tjsonChunkPrefix.setUint32( 0, jsonChunk.byteLength, true );\n\t\t\t\t\tjsonChunkPrefix.setUint32( 4, GLB_CHUNK_TYPE_JSON, true );\n\n\t\t\t\t\t// GLB header.\n\t\t\t\t\tconst header = new ArrayBuffer( GLB_HEADER_BYTES );\n\t\t\t\t\tconst headerView = new DataView( header );\n\t\t\t\t\theaderView.setUint32( 0, GLB_HEADER_MAGIC, true );\n\t\t\t\t\theaderView.setUint32( 4, GLB_VERSION, true );\n\t\t\t\t\tconst totalByteLength = GLB_HEADER_BYTES\n\t\t\t\t\t\t+ jsonChunkPrefix.byteLength + jsonChunk.byteLength\n\t\t\t\t\t\t+ binaryChunkPrefix.byteLength + binaryChunk.byteLength;\n\t\t\t\t\theaderView.setUint32( 8, totalByteLength, true );\n\n\t\t\t\t\tconst glbBlob = new Blob( [\n\t\t\t\t\t\theader,\n\t\t\t\t\t\tjsonChunkPrefix,\n\t\t\t\t\t\tjsonChunk,\n\t\t\t\t\t\tbinaryChunkPrefix,\n\t\t\t\t\t\tbinaryChunk\n\t\t\t\t\t], { type: 'application/octet-stream' } );\n\n\t\t\t\t\tconst glbReader = new window.FileReader();\n\t\t\t\t\tglbReader.readAsArrayBuffer( glbBlob );\n\t\t\t\t\tglbReader.onloadend = function () {\n\n\t\t\t\t\t\tonDone( glbReader.result );\n\n\t\t\t\t\t};\n\n\t\t\t\t};\n\n\t\t\t} else {\n\n\t\t\t\tif ( json.buffers && json.buffers.length > 0 ) {\n\n\t\t\t\t\tconst reader = new window.FileReader();\n\t\t\t\t\treader.readAsDataURL( blob );\n\t\t\t\t\treader.onloadend = function () {\n\n\t\t\t\t\t\tconst base64data = reader.result;\n\t\t\t\t\t\tjson.buffers[ 0 ].uri = base64data;\n\t\t\t\t\t\tonDone( json );\n\n\t\t\t\t\t};\n\n\t\t\t\t} else {\n\n\t\t\t\t\tonDone( json );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} );\n\n\t}\n\n\t/**\n\t * Serializes a userData.\n\t *\n\t * @param {THREE.Object3D|THREE.Material} object\n\t * @param {Object} objectDef\n\t */\n\tserializeUserData( object, objectDef ) {\n\n if (object.userData && object.userData.isZincObject) return;\n\n\t\tif ( Object.keys( object.userData ).length === 0 ) return;\n\n\t\tconst options = this.options;\n\t\tconst extensionsUsed = this.extensionsUsed;\n\n\t\ttry {\n\n\t\t\tconst json = JSON.parse( JSON.stringify( object.userData ) );\n\n\t\t\tif ( options.includeCustomExtensions && json.gltfExtensions ) {\n\n\t\t\t\tif ( objectDef.extensions === undefined ) objectDef.extensions = {};\n\n\t\t\t\tfor ( const extensionName in json.gltfExtensions ) {\n\n\t\t\t\t\tobjectDef.extensions[ extensionName ] = json.gltfExtensions[ extensionName ];\n\t\t\t\t\textensionsUsed[ extensionName ] = true;\n\n\t\t\t\t}\n\n\t\t\t\tdelete json.gltfExtensions;\n\n\t\t\t}\n\n\t\t\tif ( Object.keys( json ).length > 0 ) objectDef.extras = json;\n\n\t\t} catch ( error ) {\n\n\t\t\tconsole.warn( 'THREE.GLTFExporter: userData of \\'' + object.name + '\\' ' +\n\t\t\t\t'won\\'t be serialized because of JSON.stringify error - ' + error.message );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Assign and return a temporal unique id for an object\n\t * especially which doesn't have .uuid\n\t * @param {Object} object\n\t * @return {Integer}\n\t */\n\tgetUID( object ) {\n\n\t\tif ( ! this.uids.has( object ) ) this.uids.set( object, this.uid ++ );\n\n\t\treturn this.uids.get( object );\n\n\t}\n\n\t/**\n\t * Checks if normal attribute values are normalized.\n\t *\n\t * @param {BufferAttribute} normal\n\t * @returns {Boolean}\n\t */\n\tisNormalizedNormalAttribute( normal ) {\n\n\t\tconst cache = this.cache;\n\n\t\tif ( cache.attributesNormalized.has( normal ) ) return false;\n\n\t\tconst v = new Vector3();\n\n\t\tfor ( let i = 0, il = normal.count; i < il; i ++ ) {\n\n\t\t\t// 0.0005 is from glTF-validator\n\t\t\tif ( Math.abs( v.fromBufferAttribute( normal, i ).length() - 1.0 ) > 0.0005 ) return false;\n\n\t\t}\n\n\t\treturn true;\n\n\t}\n\n\t/**\n\t * Creates normalized normal buffer attribute.\n\t *\n\t * @param {BufferAttribute} normal\n\t * @returns {BufferAttribute}\n\t *\n\t */\n\tcreateNormalizedNormalAttribute( normal ) {\n\n\t\tconst cache = this.cache;\n\n\t\tif ( cache.attributesNormalized.has( normal ) )\treturn cache.attributesNormalized.get( normal );\n\n\t\tconst attribute = normal.clone();\n\t\tconst v = new Vector3();\n\n\t\tfor ( let i = 0, il = attribute.count; i < il; i ++ ) {\n\n\t\t\tv.fromBufferAttribute( attribute, i );\n\n\t\t\tif ( v.x === 0 && v.y === 0 && v.z === 0 ) {\n\n\t\t\t\t// if values can't be normalized set (1, 0, 0)\n\t\t\t\tv.setX( 1.0 );\n\n\t\t\t} else {\n\n\t\t\t\tv.normalize();\n\n\t\t\t}\n\n\t\t\tattribute.setXYZ( i, v.x, v.y, v.z );\n\n\t\t}\n\n\t\tcache.attributesNormalized.set( normal, attribute );\n\n\t\treturn attribute;\n\n\t}\n\n\t/**\n\t * Applies a texture transform, if present, to the map definition. Requires\n\t * the KHR_texture_transform extension.\n\t *\n\t * @param {Object} mapDef\n\t * @param {THREE.Texture} texture\n\t */\n\tapplyTextureTransform( mapDef, texture ) {\n\n\t\tlet didTransform = false;\n\t\tconst transformDef = {};\n\n\t\tif ( texture.offset.x !== 0 || texture.offset.y !== 0 ) {\n\n\t\t\ttransformDef.offset = texture.offset.toArray();\n\t\t\tdidTransform = true;\n\n\t\t}\n\n\t\tif ( texture.rotation !== 0 ) {\n\n\t\t\ttransformDef.rotation = texture.rotation;\n\t\t\tdidTransform = true;\n\n\t\t}\n\n\t\tif ( texture.repeat.x !== 1 || texture.repeat.y !== 1 ) {\n\n\t\t\ttransformDef.scale = texture.repeat.toArray();\n\t\t\tdidTransform = true;\n\n\t\t}\n\n\t\tif ( didTransform ) {\n\n\t\t\tmapDef.extensions = mapDef.extensions || {};\n\t\t\tmapDef.extensions[ 'KHR_texture_transform' ] = transformDef;\n\t\t\tthis.extensionsUsed[ 'KHR_texture_transform' ] = true;\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Process a buffer to append to the default one.\n\t * @param {ArrayBuffer} buffer\n\t * @return {Integer}\n\t */\n\tprocessBuffer( buffer ) {\n\n\t\tconst json = this.json;\n\t\tconst buffers = this.buffers;\n\n\t\tif ( ! json.buffers ) json.buffers = [ { byteLength: 0 } ];\n\n\t\t// All buffers are merged before export.\n\t\tbuffers.push( buffer );\n\n\t\treturn 0;\n\n\t}\n\n\t/**\n\t * Process and generate a BufferView\n\t * @param {BufferAttribute} attribute\n\t * @param {number} componentType\n\t * @param {number} start\n\t * @param {number} count\n\t * @param {number} target (Optional) Target usage of the BufferView\n\t * @return {Object}\n\t */\n\tprocessBufferView( attribute, componentType, start, count, target ) {\n\n\t\tconst json = this.json;\n\n\t\tif ( ! json.bufferViews ) json.bufferViews = [];\n\n\t\t// Create a new dataview and dump the attribute's array into it\n\n\t\tlet componentSize;\n\n\t\tif ( componentType === WEBGL_CONSTANTS.UNSIGNED_BYTE ) {\n\n\t\t\tcomponentSize = 1;\n\n\t\t} else if ( componentType === WEBGL_CONSTANTS.UNSIGNED_SHORT ) {\n\n\t\t\tcomponentSize = 2;\n\n\t\t} else {\n\n\t\t\tcomponentSize = 4;\n\n\t\t}\n\n\t\tconst byteLength = getPaddedBufferSize( count * attribute.itemSize * componentSize );\n\t\tconst dataView = new DataView( new ArrayBuffer( byteLength ) );\n\t\tlet offset = 0;\n\n\t\tfor ( let i = start; i < start + count; i ++ ) {\n\n\t\t\tfor ( let a = 0; a < attribute.itemSize; a ++ ) {\n\n\t\t\t\tlet value;\n\n\t\t\t\tif ( attribute.itemSize > 4 ) {\n\n\t\t\t\t\t // no support for interleaved data for itemSize > 4\n\n\t\t\t\t\tvalue = attribute.array[ i * attribute.itemSize + a ];\n\n\t\t\t\t} else {\n\n\t\t\t\t\tif ( a === 0 ) value = attribute.getX( i );\n\t\t\t\t\telse if ( a === 1 ) value = attribute.getY( i );\n\t\t\t\t\telse if ( a === 2 ) value = attribute.getZ( i );\n\t\t\t\t\telse if ( a === 3 ) value = attribute.getW( i );\n\n\t\t\t\t}\n\n\t\t\t\tif ( componentType === WEBGL_CONSTANTS.FLOAT ) {\n\n\t\t\t\t\tdataView.setFloat32( offset, value, true );\n\n\t\t\t\t} else if ( componentType === WEBGL_CONSTANTS.UNSIGNED_INT ) {\n\n\t\t\t\t\tdataView.setUint32( offset, value, true );\n\n\t\t\t\t} else if ( componentType === WEBGL_CONSTANTS.UNSIGNED_SHORT ) {\n\n\t\t\t\t\tdataView.setUint16( offset, value, true );\n\n\t\t\t\t} else if ( componentType === WEBGL_CONSTANTS.UNSIGNED_BYTE ) {\n\n\t\t\t\t\tdataView.setUint8( offset, value );\n\n\t\t\t\t}\n\n\t\t\t\toffset += componentSize;\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst bufferViewDef = {\n\n\t\t\tbuffer: this.processBuffer( dataView.buffer ),\n\t\t\tbyteOffset: this.byteOffset,\n\t\t\tbyteLength: byteLength\n\n\t\t};\n\n\t\tif ( target !== undefined ) bufferViewDef.target = target;\n\n\t\tif ( target === WEBGL_CONSTANTS.ARRAY_BUFFER ) {\n\n\t\t\t// Only define byteStride for vertex attributes.\n\t\t\tbufferViewDef.byteStride = attribute.itemSize * componentSize;\n\n\t\t}\n\n\t\tthis.byteOffset += byteLength;\n\n\t\tjson.bufferViews.push( bufferViewDef );\n\n\t\t// @TODO Merge bufferViews where possible.\n\t\tconst output = {\n\n\t\t\tid: json.bufferViews.length - 1,\n\t\t\tbyteLength: 0\n\n\t\t};\n\n\t\treturn output;\n\n\t}\n\n\t/**\n\t * Process and generate a BufferView from an image Blob.\n\t * @param {Blob} blob\n\t * @return {Promise}\n\t */\n\tprocessBufferViewImage( blob ) {\n\n\t\tconst writer = this;\n\t\tconst json = writer.json;\n\n\t\tif ( ! json.bufferViews ) json.bufferViews = [];\n\n\t\treturn new Promise( function ( resolve ) {\n\n\t\t\tconst reader = new window.FileReader();\n\t\t\treader.readAsArrayBuffer( blob );\n\t\t\treader.onloadend = function () {\n\n\t\t\t\tconst buffer = getPaddedArrayBuffer( reader.result );\n\n\t\t\t\tconst bufferViewDef = {\n\t\t\t\t\tbuffer: writer.processBuffer( buffer ),\n\t\t\t\t\tbyteOffset: writer.byteOffset,\n\t\t\t\t\tbyteLength: buffer.byteLength\n\t\t\t\t};\n\n\t\t\t\twriter.byteOffset += buffer.byteLength;\n\t\t\t\tresolve( json.bufferViews.push( bufferViewDef ) - 1 );\n\n\t\t\t};\n\n\t\t} );\n\n\t}\n\n\t/**\n\t * Process attribute to generate an accessor\n\t * @param {BufferAttribute} attribute Attribute to process\n\t * @param {THREE.BufferGeometry} geometry (Optional) Geometry used for truncated draw range\n\t * @param {Integer} start (Optional)\n\t * @param {Integer} count (Optional)\n\t * @return {Integer|null} Index of the processed accessor on the \"accessors\" array\n\t */\n\tprocessAccessor( attribute, geometry, start, count ) {\n\n\t\tconst options = this.options;\n\t\tconst json = this.json;\n\n\t\tconst types = {\n\n\t\t\t1: 'SCALAR',\n\t\t\t2: 'VEC2',\n\t\t\t3: 'VEC3',\n\t\t\t4: 'VEC4',\n\t\t\t16: 'MAT4'\n\n\t\t};\n\n\t\tlet componentType;\n\n\t\t// Detect the component type of the attribute array (float, uint or ushort)\n\t\tif ( attribute.array.constructor === Float32Array ) {\n\n\t\t\tcomponentType = WEBGL_CONSTANTS.FLOAT;\n\n\t\t} else if ( attribute.array.constructor === Uint32Array ) {\n\n\t\t\tcomponentType = WEBGL_CONSTANTS.UNSIGNED_INT;\n\n\t\t} else if ( attribute.array.constructor === Uint16Array ) {\n\n\t\t\tcomponentType = WEBGL_CONSTANTS.UNSIGNED_SHORT;\n\n\t\t} else if ( attribute.array.constructor === Uint8Array ) {\n\n\t\t\tcomponentType = WEBGL_CONSTANTS.UNSIGNED_BYTE;\n\n\t\t} else {\n\n\t\t\tthrow new Error( 'THREE.GLTFExporter: Unsupported bufferAttribute component type.' );\n\n\t\t}\n\n\t\tif ( start === undefined ) start = 0;\n\t\tif ( count === undefined ) count = attribute.count;\n\n\t\t// @TODO Indexed buffer geometry with drawRange not supported yet\n\t\tif ( options.truncateDrawRange && geometry !== undefined && geometry.index === null ) {\n\n\t\t\tconst end = start + count;\n\t\t\tconst end2 = geometry.drawRange.count === Infinity\n\t\t\t\t? attribute.count\n\t\t\t\t: geometry.drawRange.start + geometry.drawRange.count;\n\n\t\t\tstart = Math.max( start, geometry.drawRange.start );\n\t\t\tcount = Math.min( end, end2 ) - start;\n\n\t\t\tif ( count < 0 ) count = 0;\n\n\t\t}\n\n\t\t// Skip creating an accessor if the attribute doesn't have data to export\n\t\tif ( count === 0 ) return null;\n\n\t\tconst minMax = getMinMax( attribute, start, count );\n\t\tlet bufferViewTarget;\n\n\t\t// If geometry isn't provided, don't infer the target usage of the bufferView. For\n\t\t// animation samplers, target must not be set.\n\t\tif ( geometry !== undefined ) {\n\n\t\t\tbufferViewTarget = attribute === geometry.index ? WEBGL_CONSTANTS.ELEMENT_ARRAY_BUFFER : WEBGL_CONSTANTS.ARRAY_BUFFER;\n\n\t\t}\n\n\t\tconst bufferView = this.processBufferView( attribute, componentType, start, count, bufferViewTarget );\n\n\t\tconst accessorDef = {\n\n\t\t\tbufferView: bufferView.id,\n\t\t\tbyteOffset: bufferView.byteOffset,\n\t\t\tcomponentType: componentType,\n\t\t\tcount: count,\n\t\t\tmax: minMax.max,\n\t\t\tmin: minMax.min,\n\t\t\ttype: types[ attribute.itemSize ]\n\n\t\t};\n\n\t\tif ( attribute.normalized === true ) accessorDef.normalized = true;\n\t\tif ( ! json.accessors ) json.accessors = [];\n\n\t\treturn json.accessors.push( accessorDef ) - 1;\n\n\t}\n\n\t/**\n\t * Process image\n\t * @param {Image} image to process\n\t * @param {Integer} format of the image (e.g. RGBFormat, RGBAFormat etc)\n\t * @param {Boolean} flipY before writing out the image\n\t * @return {Integer} Index of the processed texture in the \"images\" array\n\t */\n\tprocessImage( image, format, flipY ) {\n\n\t\tconst writer = this;\n\t\tconst cache = writer.cache;\n\t\tconst json = writer.json;\n\t\tconst options = writer.options;\n\t\tconst pending = writer.pending;\n\n\t\tif ( ! cache.images.has( image ) ) cache.images.set( image, {} );\n\n\t\tconst cachedImages = cache.images.get( image );\n\t\tconst mimeType = format === RGBAFormat ? 'image/png' : 'image/jpeg';\n\t\tconst key = mimeType + ':flipY/' + flipY.toString();\n\n\t\tif ( cachedImages[ key ] !== undefined ) return cachedImages[ key ];\n\n\t\tif ( ! json.images ) json.images = [];\n\n\t\tconst imageDef = { mimeType: mimeType };\n\n\t\tif ( options.embedImages ) {\n\n\t\t\tconst canvas = cachedCanvas = cachedCanvas || document.createElement( 'canvas' );\n\n\t\t\tcanvas.width = Math.min( image.width, options.maxTextureSize );\n\t\t\tcanvas.height = Math.min( image.height, options.maxTextureSize );\n\n\t\t\tconst ctx = canvas.getContext( '2d' );\n\n\t\t\tif ( flipY === true ) {\n\n\t\t\t\tctx.translate( 0, canvas.height );\n\t\t\t\tctx.scale( 1, - 1 );\n\n\t\t\t}\n\n\t\t\tif ( ( typeof HTMLImageElement !== 'undefined' && image instanceof HTMLImageElement ) ||\n\t\t\t\t( typeof HTMLCanvasElement !== 'undefined' && image instanceof HTMLCanvasElement ) ||\n\t\t\t\t( typeof OffscreenCanvas !== 'undefined' && image instanceof OffscreenCanvas ) ||\n\t\t\t\t( typeof ImageBitmap !== 'undefined' && image instanceof ImageBitmap ) ) {\n\n\t\t\t\tctx.drawImage( image, 0, 0, canvas.width, canvas.height );\n\n\t\t\t} else {\n\n\t\t\t\tif ( format !== RGBAFormat && format !== RGBFormat ) {\n\n\t\t\t\t\tconsole.error( 'GLTFExporter: Only RGB and RGBA formats are supported.' );\n\n\t\t\t\t}\n\n\t\t\t\tif ( image.width > options.maxTextureSize || image.height > options.maxTextureSize ) {\n\n\t\t\t\t\tconsole.warn( 'GLTFExporter: Image size is bigger than maxTextureSize', image );\n\n\t\t\t\t}\n\n\t\t\t\tconst data = new Uint8ClampedArray( image.height * image.width * 4 );\n\n\t\t\t\tif ( format === RGBAFormat ) {\n\n\t\t\t\t\tfor ( let i = 0; i < data.length; i += 4 ) {\n\n\t\t\t\t\t\tdata[ i + 0 ] = image.data[ i + 0 ];\n\t\t\t\t\t\tdata[ i + 1 ] = image.data[ i + 1 ];\n\t\t\t\t\t\tdata[ i + 2 ] = image.data[ i + 2 ];\n\t\t\t\t\t\tdata[ i + 3 ] = image.data[ i + 3 ];\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tfor ( let i = 0, j = 0; i < data.length; i += 4, j += 3 ) {\n\n\t\t\t\t\t\tdata[ i + 0 ] = image.data[ j + 0 ];\n\t\t\t\t\t\tdata[ i + 1 ] = image.data[ j + 1 ];\n\t\t\t\t\t\tdata[ i + 2 ] = image.data[ j + 2 ];\n\t\t\t\t\t\tdata[ i + 3 ] = 255;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tctx.putImageData( new ImageData( data, image.width, image.height ), 0, 0 );\n\n\t\t\t}\n\n\t\t\tif ( options.binary === true ) {\n\n\t\t\t\tpending.push( new Promise( function ( resolve ) {\n\n\t\t\t\t\tcanvas.toBlob( function ( blob ) {\n\n\t\t\t\t\t\twriter.processBufferViewImage( blob ).then( function ( bufferViewIndex ) {\n\n\t\t\t\t\t\t\timageDef.bufferView = bufferViewIndex;\n\t\t\t\t\t\t\tresolve();\n\n\t\t\t\t\t\t} );\n\n\t\t\t\t\t}, mimeType );\n\n\t\t\t\t} ) );\n\n\t\t\t} else {\n\n\t\t\t\timageDef.uri = canvas.toDataURL( mimeType );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\timageDef.uri = image.src;\n\n\t\t}\n\n\t\tconst index = json.images.push( imageDef ) - 1;\n\t\tcachedImages[ key ] = index;\n\t\treturn index;\n\n\t}\n\n\t/**\n\t * Process sampler\n\t * @param {Texture} map Texture to process\n\t * @return {Integer} Index of the processed texture in the \"samplers\" array\n\t */\n\tprocessSampler( map ) {\n\n\t\tconst json = this.json;\n\n\t\tif ( ! json.samplers ) json.samplers = [];\n\n\t\tconst samplerDef = {\n\t\t\tmagFilter: THREE_TO_WEBGL[ map.magFilter ],\n\t\t\tminFilter: THREE_TO_WEBGL[ map.minFilter ],\n\t\t\twrapS: THREE_TO_WEBGL[ map.wrapS ],\n\t\t\twrapT: THREE_TO_WEBGL[ map.wrapT ]\n\t\t};\n\n\t\treturn json.samplers.push( samplerDef ) - 1;\n\n\t}\n\n\t/**\n\t * Process texture\n\t * @param {Texture} map Map to process\n\t * @return {Integer} Index of the processed texture in the \"textures\" array\n\t */\n\tprocessTexture( map ) {\n\n\t\tconst cache = this.cache;\n\t\tconst json = this.json;\n\n\t\tif ( cache.textures.has( map ) ) return cache.textures.get( map );\n\n\t\tif ( ! json.textures ) json.textures = [];\n\n\t\tconst textureDef = {\n\t\t\tsampler: this.processSampler( map ),\n\t\t\tsource: this.processImage( map.image, map.format, map.flipY )\n\t\t};\n\n\t\tif ( map.name ) textureDef.name = map.name;\n\n\t\tthis._invokeAll( function ( ext ) {\n\n\t\t\text.writeTexture && ext.writeTexture( map, textureDef );\n\n\t\t} );\n\n\t\tconst index = json.textures.push( textureDef ) - 1;\n\t\tcache.textures.set( map, index );\n\t\treturn index;\n\n\t}\n\n\t/**\n\t * Process material\n\t * @param {THREE.Material} material Material to process\n\t * @return {Integer|null} Index of the processed material in the \"materials\" array\n\t */\n\tprocessMaterial( material ) {\n\n\t\tconst cache = this.cache;\n\t\tconst json = this.json;\n\n\t\tif ( cache.materials.has( material ) ) return cache.materials.get( material );\n\n\t\tif ( material.isShaderMaterial ) {\n\n\t\t\tconsole.warn( 'GLTFExporter: THREE.ShaderMaterial not supported.' );\n\t\t\treturn null;\n\n\t\t}\n\n\t\tif ( ! json.materials ) json.materials = [];\n\n\t\t// @QUESTION Should we avoid including any attribute that has the default value?\n\t\tconst materialDef = {\tpbrMetallicRoughness: {} };\n\n\t\tif ( material.isMeshStandardMaterial !== true && material.isMeshBasicMaterial !== true ) {\n\n\t\t\tconsole.warn( 'GLTFExporter: Use MeshStandardMaterial or MeshBasicMaterial for best results.' );\n\n\t\t}\n\n\t\t// pbrMetallicRoughness.baseColorFactor\n\t\tconst color = material.color.toArray().concat( [ material.opacity ] );\n\n\t\tif ( ! equalArray( color, [ 1, 1, 1, 1 ] ) ) {\n\n\t\t\tmaterialDef.pbrMetallicRoughness.baseColorFactor = color;\n\n\t\t}\n\n\t\tif ( material.isMeshStandardMaterial ) {\n\n\t\t\tmaterialDef.pbrMetallicRoughness.metallicFactor = material.metalness;\n\t\t\tmaterialDef.pbrMetallicRoughness.roughnessFactor = material.roughness;\n\n\t\t} else {\n\n\t\t\tmaterialDef.pbrMetallicRoughness.metallicFactor = 0.5;\n\t\t\tmaterialDef.pbrMetallicRoughness.roughnessFactor = 0.5;\n\n\t\t}\n\n\t\t// pbrMetallicRoughness.metallicRoughnessTexture\n\t\tif ( material.metalnessMap || material.roughnessMap ) {\n\n\t\t\tif ( material.metalnessMap === material.roughnessMap ) {\n\n\t\t\t\tconst metalRoughMapDef = { index: this.processTexture( material.metalnessMap ) };\n\t\t\t\tthis.applyTextureTransform( metalRoughMapDef, material.metalnessMap );\n\t\t\t\tmaterialDef.pbrMetallicRoughness.metallicRoughnessTexture = metalRoughMapDef;\n\n\t\t\t} else {\n\n\t\t\t\tconsole.warn( 'THREE.GLTFExporter: Ignoring metalnessMap and roughnessMap because they are not the same Texture.' );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// pbrMetallicRoughness.baseColorTexture or pbrSpecularGlossiness diffuseTexture\n\t\tif ( material.map ) {\n\n\t\t\tconst baseColorMapDef = { index: this.processTexture( material.map ) };\n\t\t\tthis.applyTextureTransform( baseColorMapDef, material.map );\n\t\t\tmaterialDef.pbrMetallicRoughness.baseColorTexture = baseColorMapDef;\n\n\t\t}\n\n\t\tif ( material.emissive ) {\n\n\t\t\t// note: emissive components are limited to stay within the 0 - 1 range to accommodate glTF spec. see #21849 and #22000.\n\t\t\tconst emissive = material.emissive.clone().multiplyScalar( material.emissiveIntensity );\n\t\t\tconst maxEmissiveComponent = Math.max( emissive.r, emissive.g, emissive.b );\n\n\t\t\tif ( maxEmissiveComponent > 1 ) {\n\n\t\t\t\temissive.multiplyScalar( 1 / maxEmissiveComponent );\n\n\t\t\t\tconsole.warn( 'THREE.GLTFExporter: Some emissive components exceed 1; emissive has been limited' );\n\n\t\t\t}\n\n\t\t\tif ( maxEmissiveComponent > 0 ) {\n\n\t\t\t\tmaterialDef.emissiveFactor = emissive.toArray();\n\n\t\t\t}\n\n\t\t\t// emissiveTexture\n\t\t\tif ( material.emissiveMap ) {\n\n\t\t\t\tconst emissiveMapDef = { index: this.processTexture( material.emissiveMap ) };\n\t\t\t\tthis.applyTextureTransform( emissiveMapDef, material.emissiveMap );\n\t\t\t\tmaterialDef.emissiveTexture = emissiveMapDef;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// normalTexture\n\t\tif ( material.normalMap ) {\n\n\t\t\tconst normalMapDef = { index: this.processTexture( material.normalMap ) };\n\n\t\t\tif ( material.normalScale && material.normalScale.x !== - 1 ) {\n\n\t\t\t\tif ( material.normalScale.x !== material.normalScale.y ) {\n\n\t\t\t\t\tconsole.warn( 'THREE.GLTFExporter: Normal scale components are different, ignoring Y and exporting X.' );\n\n\t\t\t\t}\n\n\t\t\t\tnormalMapDef.scale = material.normalScale.x;\n\n\t\t\t}\n\n\t\t\tthis.applyTextureTransform( normalMapDef, material.normalMap );\n\t\t\tmaterialDef.normalTexture = normalMapDef;\n\n\t\t}\n\n\t\t// occlusionTexture\n\t\tif ( material.aoMap ) {\n\n\t\t\tconst occlusionMapDef = {\n\t\t\t\tindex: this.processTexture( material.aoMap ),\n\t\t\t\ttexCoord: 1\n\t\t\t};\n\n\t\t\tif ( material.aoMapIntensity !== 1.0 ) {\n\n\t\t\t\tocclusionMapDef.strength = material.aoMapIntensity;\n\n\t\t\t}\n\n\t\t\tthis.applyTextureTransform( occlusionMapDef, material.aoMap );\n\t\t\tmaterialDef.occlusionTexture = occlusionMapDef;\n\n\t\t}\n\n\t\t// alphaMode\n\t\tif ( material.transparent ) {\n\n\t\t\tmaterialDef.alphaMode = 'BLEND';\n\n\t\t} else {\n\n\t\t\tif ( material.alphaTest > 0.0 ) {\n\n\t\t\t\tmaterialDef.alphaMode = 'MASK';\n\t\t\t\tmaterialDef.alphaCutoff = material.alphaTest;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// doubleSided\n\t\tif ( material.side === DoubleSide ) materialDef.doubleSided = true;\n\t\tif ( material.name !== '' ) materialDef.name = material.name;\n\n\t\tthis.serializeUserData( material, materialDef );\n\n\t\tthis._invokeAll( function ( ext ) {\n\n\t\t\text.writeMaterial && ext.writeMaterial( material, materialDef );\n\n\t\t} );\n\n\t\tconst index = json.materials.push( materialDef ) - 1;\n\t\tcache.materials.set( material, index );\n\t\treturn index;\n\n\t}\n\n\t/**\n\t * Process mesh\n\t * @param {THREE.Mesh} mesh Mesh to process\n\t * @return {Integer|null} Index of the processed mesh in the \"meshes\" array\n\t */\n\tprocessMesh( mesh ) {\n\n\t\tconst cache = this.cache;\n\t\tconst json = this.json;\n\n\t\tconst meshCacheKeyParts = [ mesh.geometry.uuid ];\n\n\t\tif ( Array.isArray( mesh.material ) ) {\n\n\t\t\tfor ( let i = 0, l = mesh.material.length; i < l; i ++ ) {\n\n\t\t\t\tmeshCacheKeyParts.push( mesh.material[ i ].uuid\t);\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tmeshCacheKeyParts.push( mesh.material.uuid );\n\n\t\t}\n\n\t\tconst meshCacheKey = meshCacheKeyParts.join( ':' );\n\n\t\tif ( cache.meshes.has( meshCacheKey ) ) return cache.meshes.get( meshCacheKey );\n\n\t\tconst geometry = mesh.geometry;\n\t\tlet mode;\n\n\t\t// Use the correct mode\n\t\tif ( mesh.isLineSegments ) {\n\n\t\t\tmode = WEBGL_CONSTANTS.LINES;\n\n\t\t} else if ( mesh.isLineLoop ) {\n\n\t\t\tmode = WEBGL_CONSTANTS.LINE_LOOP;\n\n\t\t} else if ( mesh.isLine ) {\n\n\t\t\tmode = WEBGL_CONSTANTS.LINE_STRIP;\n\n\t\t} else if ( mesh.isPoints ) {\n\n\t\t\tmode = WEBGL_CONSTANTS.POINTS;\n\n\t\t} else {\n\n\t\t\tmode = mesh.material.wireframe ? WEBGL_CONSTANTS.LINES : WEBGL_CONSTANTS.TRIANGLES;\n\n\t\t}\n\n\t\tif ( geometry.isBufferGeometry !== true ) {\n\n\t\t\tthrow new Error( 'THREE.GLTFExporter: Geometry is not of type THREE.BufferGeometry.' );\n\n\t\t}\n\n\t\tconst meshDef = {};\n\t\tconst attributes = {};\n\t\tconst primitives = [];\n\t\tconst targets = [];\n\n\t\t// Conversion between attributes names in threejs and gltf spec\n\t\tconst nameConversion = {\n\t\t\tuv: 'TEXCOORD_0',\n\t\t\tuv2: 'TEXCOORD_1',\n\t\t\tcolor: 'COLOR_0',\n\t\t\tskinWeight: 'WEIGHTS_0',\n\t\t\tskinIndex: 'JOINTS_0'\n\t\t};\n\n\t\tconst originalNormal = geometry.getAttribute( 'normal' );\n\n\t\tif ( originalNormal !== undefined && ! this.isNormalizedNormalAttribute( originalNormal ) ) {\n\n\t\t\tconsole.warn( 'THREE.GLTFExporter: Creating normalized normal attribute from the non-normalized one.' );\n\n\t\t\tgeometry.setAttribute( 'normal', this.createNormalizedNormalAttribute( originalNormal ) );\n\n\t\t}\n\n\t\t// @QUESTION Detect if .vertexColors = true?\n\t\t// For every attribute create an accessor\n\t\tlet modifiedAttribute = null;\n\n\t\tfor ( let attributeName in geometry.attributes ) {\n\n\t\t\t// Ignore morph target attributes, which are exported later.\n\t\t\tif ( attributeName.substr( 0, 5 ) === 'morph' ) continue;\n\n\t\t\tconst attribute = geometry.attributes[ attributeName ];\n\t\t\tattributeName = nameConversion[ attributeName ] || attributeName.toUpperCase();\n\n\t\t\t// Prefix all geometry attributes except the ones specifically\n\t\t\t// listed in the spec; non-spec attributes are considered custom.\n\t\t\tconst validVertexAttributes =\n\t\t\t\t\t/^(POSITION|NORMAL|TANGENT|TEXCOORD_\\d+|COLOR_\\d+|JOINTS_\\d+|WEIGHTS_\\d+)$/;\n\n\t\t\tif ( ! validVertexAttributes.test( attributeName ) ) attributeName = '_' + attributeName;\n\n\t\t\tif ( cache.attributes.has( this.getUID( attribute ) ) ) {\n\n\t\t\t\tattributes[ attributeName ] = cache.attributes.get( this.getUID( attribute ) );\n\t\t\t\tcontinue;\n\n\t\t\t}\n\n\t\t\t// JOINTS_0 must be UNSIGNED_BYTE or UNSIGNED_SHORT.\n\t\t\tmodifiedAttribute = null;\n\t\t\tconst array = attribute.array;\n\n\t\t\tif ( attributeName === 'JOINTS_0' &&\n\t\t\t\t! ( array instanceof Uint16Array ) &&\n\t\t\t\t! ( array instanceof Uint8Array ) ) {\n\n\t\t\t\tconsole.warn( 'GLTFExporter: Attribute \"skinIndex\" converted to type UNSIGNED_SHORT.' );\n\t\t\t\tmodifiedAttribute = new BufferAttribute( new Uint16Array( array ), attribute.itemSize, attribute.normalized );\n\n\t\t\t}\n\n\t\t\tconst accessor = this.processAccessor( modifiedAttribute || attribute, geometry );\n\n\t\t\tif ( accessor !== null ) {\n\n\t\t\t\tattributes[ attributeName ] = accessor;\n\t\t\t\tcache.attributes.set( this.getUID( attribute ), accessor );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( originalNormal !== undefined ) geometry.setAttribute( 'normal', originalNormal );\n\n\t\t// Skip if no exportable attributes found\n\t\tif ( Object.keys( attributes ).length === 0 ) return null;\n\n\t\t// Morph targets\n\t\tif ( mesh.morphTargetInfluences !== undefined && mesh.morphTargetInfluences.length > 0 ) {\n\n\t\t\tconst weights = [];\n\t\t\tconst targetNames = [];\n\t\t\tconst reverseDictionary = {};\n\n\t\t\tif ( mesh.morphTargetDictionary !== undefined ) {\n\n\t\t\t\tfor ( const key in mesh.morphTargetDictionary ) {\n\n\t\t\t\t\treverseDictionary[ mesh.morphTargetDictionary[ key ] ] = key;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tfor ( let i = 0; i < mesh.morphTargetInfluences.length; ++ i ) {\n\n\t\t\t\tconst target = {};\n\t\t\t\tlet warned = false;\n\n\t\t\t\tfor ( const attributeName in geometry.morphAttributes ) {\n \n\n\t\t\t\t\t// glTF 2.0 morph supports only POSITION/NORMAL/TANGENT.\n\t\t\t\t\t// Three.js doesn't support TANGENT yet.\n\n\t\t\t\t\tif ( attributeName !== 'position' && attributeName !== 'normal' && attributeName !== 'color' ) {\n\n\t\t\t\t\t\tif ( ! warned ) {\n\n\t\t\t\t\t\t\tconsole.warn( 'GLTFExporter: Only POSITION and NORMAL morph are supported.' );\n\t\t\t\t\t\t\twarned = true;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tcontinue;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tconst attribute = geometry.morphAttributes[ attributeName ][ i ];\n\t\t\t\t\tlet gltfAttributeName = attributeName.toUpperCase();\n\n if ( nameConversion[ attributeName ] ) {\n\n gltfAttributeName = nameConversion[ attributeName ];\n\n }\n\n\t\t\t\t\t// Three.js morph attribute has absolute values while the one of glTF has relative values.\n\t\t\t\t\t//\n\t\t\t\t\t// glTF 2.0 Specification:\n\t\t\t\t\t// https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#morph-targets\n\n\t\t\t\t\tconst baseAttribute = geometry.attributes[ attributeName ];\n\n\t\t\t\t\tif ( cache.attributes.has( this.getUID( attribute ) ) ) {\n\n\t\t\t\t\t\ttarget[ gltfAttributeName ] = cache.attributes.get( this.getUID( attribute ) );\n\t\t\t\t\t\tcontinue;\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// Clones attribute not to override\n\t\t\t\t\tconst relativeAttribute = baseAttribute.clone();\n\n\t\t\t\t\tif ( ! geometry.morphTargetsRelative ) {\n\n if (baseAttribute) {\n \n for ( let j = 0, jl = attribute.count; j < jl; j ++ ) {\n\n if (baseAttribute.count > j) {\n\n relativeAttribute.setXYZ(\n j,\n attribute.getX( j ) - baseAttribute.getX( j ),\n attribute.getY( j ) - baseAttribute.getY( j ),\n attribute.getZ( j ) - baseAttribute.getZ( j )\n );\n\n }\n\n }\n\n } else {\n\n for ( let j = 0, jl = attribute.count; j < jl; j ++ ) {\n\n relativeAttribute.setXYZ(\n j,\n 0,\n 0,\n 0\n );\n\n }\n\n }\n\n\t\t\t\t\t}\n\n\t\t\t\t\ttarget[ gltfAttributeName ] = this.processAccessor( relativeAttribute, geometry );\n\t\t\t\t\tcache.attributes.set( this.getUID( baseAttribute ), target[ gltfAttributeName ] );\n\n\t\t\t\t}\n\n\t\t\t\ttargets.push( target );\n\n\t\t\t\tweights.push( mesh.morphTargetInfluences[ i ] );\n\n\t\t\t\tif ( mesh.morphTargetDictionary !== undefined ) targetNames.push( reverseDictionary[ i ] );\n\n\t\t\t}\n\n\t\t\tmeshDef.weights = weights;\n\n\t\t\tif ( targetNames.length > 0 ) {\n\n\t\t\t\tmeshDef.extras = {};\n\t\t\t\tmeshDef.extras.targetNames = targetNames;\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst isMultiMaterial = Array.isArray( mesh.material );\n\n\t\tif ( isMultiMaterial && geometry.groups.length === 0 ) return null;\n\n\t\tconst materials = isMultiMaterial ? mesh.material : [ mesh.material ];\n\t\tconst groups = isMultiMaterial ? geometry.groups : [ { materialIndex: 0, start: undefined, count: undefined } ];\n\n\t\tfor ( let i = 0, il = groups.length; i < il; i ++ ) {\n\n\t\t\tconst primitive = {\n\t\t\t\tmode: mode,\n\t\t\t\tattributes: attributes,\n\t\t\t};\n\n\t\t\tthis.serializeUserData( geometry, primitive );\n\n\t\t\tif ( targets.length > 0 ) primitive.targets = targets;\n\n\t\t\tif ( geometry.index !== null ) {\n\n\t\t\t\tlet cacheKey = this.getUID( geometry.index );\n\n\t\t\t\tif ( groups[ i ].start !== undefined || groups[ i ].count !== undefined ) {\n\n\t\t\t\t\tcacheKey += ':' + groups[ i ].start + ':' + groups[ i ].count;\n\n\t\t\t\t}\n\n\t\t\t\tif ( cache.attributes.has( cacheKey ) ) {\n\n\t\t\t\t\tprimitive.indices = cache.attributes.get( cacheKey );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tprimitive.indices = this.processAccessor( geometry.index, geometry, groups[ i ].start, groups[ i ].count );\n\t\t\t\t\tcache.attributes.set( cacheKey, primitive.indices );\n\n\t\t\t\t}\n\n\t\t\t\tif ( primitive.indices === null ) delete primitive.indices;\n\n\t\t\t}\n\n\t\t\tconst material = this.processMaterial( materials[ groups[ i ].materialIndex ] );\n\n\t\t\tif ( material !== null ) primitive.material = material;\n\n\t\t\tprimitives.push( primitive );\n\n\t\t}\n\n\t\tmeshDef.primitives = primitives;\n\n\t\tif ( ! json.meshes ) json.meshes = [];\n\n\t\tthis._invokeAll( function ( ext ) {\n\n\t\t\text.writeMesh && ext.writeMesh( mesh, meshDef );\n\n\t\t} );\n\n\t\tconst index = json.meshes.push( meshDef ) - 1;\n\t\tcache.meshes.set( meshCacheKey, index );\n\t\treturn index;\n\n\t}\n\n\t/**\n\t * Process camera\n\t * @param {THREE.Camera} camera Camera to process\n\t * @return {Integer} Index of the processed mesh in the \"camera\" array\n\t */\n\tprocessCamera( camera ) {\n\n\t\tconst json = this.json;\n\n\t\tif ( ! json.cameras ) json.cameras = [];\n\n\t\tconst isOrtho = camera.isOrthographicCamera;\n\n\t\tconst cameraDef = {\n\t\t\ttype: isOrtho ? 'orthographic' : 'perspective'\n\t\t};\n\n\t\tif ( isOrtho ) {\n\n\t\t\tcameraDef.orthographic = {\n\t\t\t\txmag: camera.right * 2,\n\t\t\t\tymag: camera.top * 2,\n\t\t\t\tzfar: camera.far <= 0 ? 0.001 : camera.far,\n\t\t\t\tznear: camera.near < 0 ? 0 : camera.near\n\t\t\t};\n\n\t\t} else {\n\n\t\t\tcameraDef.perspective = {\n\t\t\t\taspectRatio: camera.aspect,\n\t\t\t\tyfov: MathUtils.degToRad( camera.fov ),\n\t\t\t\tzfar: camera.far <= 0 ? 0.001 : camera.far,\n\t\t\t\tznear: camera.near < 0 ? 0 : camera.near\n\t\t\t};\n\n\t\t}\n\n\t\t// Question: Is saving \"type\" as name intentional?\n\t\tif ( camera.name !== '' ) cameraDef.name = camera.type;\n\n\t\treturn json.cameras.push( cameraDef ) - 1;\n\n\t}\n\n\t/**\n\t * Creates glTF animation entry from AnimationClip object.\n\t *\n\t * Status:\n\t * - Only properties listed in PATH_PROPERTIES may be animated.\n\t *\n\t * @param {THREE.AnimationClip} clip\n\t * @param {THREE.Object3D} root\n\t * @return {number|null}\n\t */\n\tprocessAnimation( clip, root ) {\n\n\t\tconst json = this.json;\n\t\tconst nodeMap = this.nodeMap;\n\n\t\tif ( ! json.animations ) json.animations = [];\n\n\t\tclip = GLTFExporter.Utils.mergeMorphTargetTracks( clip.clone(), root );\n\n\t\tconst tracks = clip.tracks;\n\t\tconst channels = [];\n\t\tconst samplers = [];\n\n\t\tfor ( let i = 0; i < tracks.length; ++ i ) {\n\n\t\t\tconst track = tracks[ i ];\n\t\t\tconst trackBinding = PropertyBinding.parseTrackName( track.name );\n\t\t\tlet trackNode = PropertyBinding.findNode( root, trackBinding.nodeName );\n\t\t\tconst trackProperty = PATH_PROPERTIES[ trackBinding.propertyName ];\n\n\t\t\tif ( trackBinding.objectName === 'bones' ) {\n\n\t\t\t\tif ( trackNode.isSkinnedMesh === true ) {\n\n\t\t\t\t\ttrackNode = trackNode.skeleton.getBoneByName( trackBinding.objectIndex );\n\n\t\t\t\t} else {\n\n\t\t\t\t\ttrackNode = undefined;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( ! trackNode || ! trackProperty ) {\n\n\t\t\t\tconsole.warn( 'THREE.GLTFExporter: Could not export animation track \"%s\".', track.name );\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t\tconst inputItemSize = 1;\n\t\t\tlet outputItemSize = track.values.length / track.times.length;\n\n\t\t\tif ( trackProperty === PATH_PROPERTIES.morphTargetInfluences ) {\n\n\t\t\t\toutputItemSize /= trackNode.morphTargetInfluences.length;\n\n\t\t\t}\n\n\t\t\tlet interpolation;\n\n\t\t\t// @TODO export CubicInterpolant(InterpolateSmooth) as CUBICSPLINE\n\n\t\t\t// Detecting glTF cubic spline interpolant by checking factory method's special property\n\t\t\t// GLTFCubicSplineInterpolant is a custom interpolant and track doesn't return\n\t\t\t// valid value from .getInterpolation().\n\t\t\tif ( track.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline === true ) {\n\n\t\t\t\tinterpolation = 'CUBICSPLINE';\n\n\t\t\t\t// itemSize of CUBICSPLINE keyframe is 9\n\t\t\t\t// (VEC3 * 3: inTangent, splineVertex, and outTangent)\n\t\t\t\t// but needs to be stored as VEC3 so dividing by 3 here.\n\t\t\t\toutputItemSize /= 3;\n\n\t\t\t} else if ( track.getInterpolation() === InterpolateDiscrete ) {\n\n\t\t\t\tinterpolation = 'STEP';\n\n\t\t\t} else {\n\n\t\t\t\tinterpolation = 'LINEAR';\n\n\t\t\t}\n\n\t\t\tsamplers.push( {\n\t\t\t\tinput: this.processAccessor( new BufferAttribute( track.times, inputItemSize ) ),\n\t\t\t\toutput: this.processAccessor( new BufferAttribute( track.values, outputItemSize ) ),\n\t\t\t\tinterpolation: interpolation\n\t\t\t} );\n\n\t\t\tchannels.push( {\n\t\t\t\tsampler: samplers.length - 1,\n\t\t\t\ttarget: {\n\t\t\t\t\tnode: nodeMap.get( trackNode ),\n\t\t\t\t\tpath: trackProperty\n\t\t\t\t}\n\t\t\t} );\n\n\t\t}\n\n\t\tjson.animations.push( {\n\t\t\tname: clip.name || 'clip_' + json.animations.length,\n\t\t\tsamplers: samplers,\n\t\t\tchannels: channels\n\t\t} );\n\n\t\treturn json.animations.length - 1;\n\n\t}\n\n\t/**\n\t * @param {THREE.Object3D} object\n\t * @return {number|null}\n\t */\n\t processSkin( object ) {\n\n\t\tconst json = this.json;\n\t\tconst nodeMap = this.nodeMap;\n\n\t\tconst node = json.nodes[ nodeMap.get( object ) ];\n\n\t\tconst skeleton = object.skeleton;\n\n\t\tif ( skeleton === undefined ) return null;\n\n\t\tconst rootJoint = object.skeleton.bones[ 0 ];\n\n\t\tif ( rootJoint === undefined ) return null;\n\n\t\tconst joints = [];\n\t\tconst inverseBindMatrices = new Float32Array( skeleton.bones.length * 16 );\n\t\tconst temporaryBoneInverse = new Matrix4();\n\n\t\tfor ( let i = 0; i < skeleton.bones.length; ++ i ) {\n\n\t\t\tjoints.push( nodeMap.get( skeleton.bones[ i ] ) );\n\t\t\ttemporaryBoneInverse.copy( skeleton.boneInverses[ i ] );\n\t\t\ttemporaryBoneInverse.multiply( object.bindMatrix ).toArray( inverseBindMatrices, i * 16 );\n\n\t\t}\n\n\t\tif ( json.skins === undefined ) json.skins = [];\n\n\t\tjson.skins.push( {\n\t\t\tinverseBindMatrices: this.processAccessor( new BufferAttribute( inverseBindMatrices, 16 ) ),\n\t\t\tjoints: joints,\n\t\t\tskeleton: nodeMap.get( rootJoint )\n\t\t} );\n\n\t\tconst skinIndex = node.skin = json.skins.length - 1;\n\n\t\treturn skinIndex;\n\n\t}\n\n\t/**\n\t * Process Object3D node\n\t * @param {THREE.Object3D} node Object3D to processNode\n\t * @return {Integer} Index of the node in the nodes list\n\t */\n\tprocessNode( object ) {\n\n\t\tconst json = this.json;\n\t\tconst options = this.options;\n\t\tconst nodeMap = this.nodeMap;\n\n\t\tif ( ! json.nodes ) json.nodes = [];\n\n\t\tconst nodeDef = {};\n\n\t\tif ( options.trs ) {\n\n\t\t\tconst rotation = object.quaternion.toArray();\n\t\t\tconst position = object.position.toArray();\n\t\t\tconst scale = object.scale.toArray();\n\n\t\t\tif ( ! equalArray( rotation, [ 0, 0, 0, 1 ] ) ) {\n\n\t\t\t\tnodeDef.rotation = rotation;\n\n\t\t\t}\n\n\t\t\tif ( ! equalArray( position, [ 0, 0, 0 ] ) ) {\n\n\t\t\t\tnodeDef.translation = position;\n\n\t\t\t}\n\n\t\t\tif ( ! equalArray( scale, [ 1, 1, 1 ] ) ) {\n\n\t\t\t\tnodeDef.scale = scale;\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tif ( object.matrixAutoUpdate ) {\n\n\t\t\t\tobject.updateMatrix();\n\n\t\t\t}\n\n\t\t\tif ( isIdentityMatrix( object.matrix ) === false ) {\n\n\t\t\t\tnodeDef.matrix = object.matrix.elements;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// We don't export empty strings name because it represents no-name in Three.js.\n\t\tif ( object.name !== '' ) nodeDef.name = String( object.name );\n\n\t\tthis.serializeUserData( object, nodeDef );\n\n\t\tif ( object.isMesh || object.isLine || object.isPoints ) {\n\n\t\t\tconst meshIndex = this.processMesh( object );\n\n\t\t\tif ( meshIndex !== null ) nodeDef.mesh = meshIndex;\n\n\t\t} else if ( object.isCamera ) {\n\n\t\t\tnodeDef.camera = this.processCamera( object );\n\n\t\t}\n\n\t\tif ( object.isSkinnedMesh ) this.skins.push( object );\n\n\t\tif ( object.children.length > 0 ) {\n\n\t\t\tconst children = [];\n\n\t\t\tfor ( let i = 0, l = object.children.length; i < l; i ++ ) {\n\n\t\t\t\tconst child = object.children[ i ];\n\n\t\t\t\tif ( child.visible || options.onlyVisible === false ) {\n\n\t\t\t\t\tconst nodeIndex = this.processNode( child );\n\n\t\t\t\t\tif ( nodeIndex !== null ) children.push( nodeIndex );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( children.length > 0 ) nodeDef.children = children;\n\n\t\t}\n\n\t\tthis._invokeAll( function ( ext ) {\n\n\t\t\text.writeNode && ext.writeNode( object, nodeDef );\n\n\t\t} );\n\n\t\tconst nodeIndex = json.nodes.push( nodeDef ) - 1;\n\t\tnodeMap.set( object, nodeIndex );\n\t\treturn nodeIndex;\n\n\t}\n\n\t/**\n\t * Process Scene\n\t * @param {Scene} node Scene to process\n\t */\n\tprocessScene( scene ) {\n\n\t\tconst json = this.json;\n\t\tconst options = this.options;\n\n\t\tif ( ! json.scenes ) {\n\n\t\t\tjson.scenes = [];\n\t\t\tjson.scene = 0;\n\n\t\t}\n\n\t\tconst sceneDef = {};\n\n\t\tif ( scene.name !== '' ) sceneDef.name = scene.name;\n\n\t\tjson.scenes.push( sceneDef );\n\n\t\tconst nodes = [];\n\n\t\tfor ( let i = 0, l = scene.children.length; i < l; i ++ ) {\n\n\t\t\tconst child = scene.children[ i ];\n\n\t\t\tif ( child.visible || options.onlyVisible === false ) {\n\n\t\t\t\tconst nodeIndex = this.processNode( child );\n\n\t\t\t\tif ( nodeIndex !== null ) nodes.push( nodeIndex );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( nodes.length > 0 ) sceneDef.nodes = nodes;\n\n\t\tthis.serializeUserData( scene, sceneDef );\n\n\t}\n\n\t/**\n\t * Creates a Scene to hold a list of objects and parse it\n\t * @param {Array} objects List of objects to process\n\t */\n\tprocessObjects( objects ) {\n\n\t\tconst scene = new Scene();\n\t\tscene.name = 'AuxScene';\n\n\t\tfor ( let i = 0; i < objects.length; i ++ ) {\n\n\t\t\t// We push directly to children instead of calling `add` to prevent\n\t\t\t// modify the .parent and break its original scene and hierarchy\n\t\t\tscene.children.push( objects[ i ] );\n\n\t\t}\n\n\t\tthis.processScene( scene );\n\n\t}\n\n\t/**\n\t * @param {THREE.Object3D|Array} input\n\t */\n\tprocessInput( input ) {\n\n\t\tconst options = this.options;\n\n\t\tinput = input instanceof Array ? input : [ input ];\n\n\t\tthis._invokeAll( function ( ext ) {\n\n\t\t\text.beforeParse && ext.beforeParse( input );\n\n\t\t} );\n\n\t\tconst objectsWithoutScene = [];\n\n\t\tfor ( let i = 0; i < input.length; i ++ ) {\n\n\t\t\tif ( input[ i ] instanceof Scene ) {\n\n\t\t\t\tthis.processScene( input[ i ] );\n\n\t\t\t} else {\n\n\t\t\t\tobjectsWithoutScene.push( input[ i ] );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( objectsWithoutScene.length > 0 ) this.processObjects( objectsWithoutScene );\n\n\t\tfor ( let i = 0; i < this.skins.length; ++ i ) {\n\n\t\t\tthis.processSkin( this.skins[ i ] );\n\n\t\t}\n\n\t\tfor ( let i = 0; i < options.animations.length; ++ i ) {\n\n\t\t\tthis.processAnimation( options.animations[ i ].clip, options.animations[i].mesh);\n\n\t\t}\n\n\t\tthis._invokeAll( function ( ext ) {\n\n\t\t\text.afterParse && ext.afterParse( input );\n\n\t\t} );\n\n\t}\n\n\t_invokeAll( func ) {\n\n\t\tfor ( let i = 0, il = this.plugins.length; i < il; i ++ ) {\n\n\t\t\tfunc( this.plugins[ i ] );\n\n\t\t}\n\n\t}\n\n}\n\n/**\n * Punctual Lights Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_lights_punctual\n */\nclass GLTFLightExtension {\n\n\tconstructor( writer ) {\n\n\t\tthis.writer = writer;\n\t\tthis.name = 'KHR_lights_punctual';\n\n\t}\n\n\twriteNode( light, nodeDef ) {\n\n\t\tif ( ! light.isLight ) return;\n\n\t\tif ( ! light.isDirectionalLight && ! light.isPointLight && ! light.isSpotLight ) {\n\n\t\t\tconsole.warn( 'THREE.GLTFExporter: Only directional, point, and spot lights are supported.', light );\n\t\t\treturn;\n\n\t\t}\n\n\t\tconst writer = this.writer;\n\t\tconst json = writer.json;\n\t\tconst extensionsUsed = writer.extensionsUsed;\n\n\t\tconst lightDef = {};\n\n\t\tif ( light.name ) lightDef.name = light.name;\n\n\t\tlightDef.color = light.color.toArray();\n\n\t\tlightDef.intensity = light.intensity;\n\n\t\tif ( light.isDirectionalLight ) {\n\n\t\t\tlightDef.type = 'directional';\n\n\t\t} else if ( light.isPointLight ) {\n\n\t\t\tlightDef.type = 'point';\n\n\t\t\tif ( light.distance > 0 ) lightDef.range = light.distance;\n\n\t\t} else if ( light.isSpotLight ) {\n\n\t\t\tlightDef.type = 'spot';\n\n\t\t\tif ( light.distance > 0 ) lightDef.range = light.distance;\n\n\t\t\tlightDef.spot = {};\n\t\t\tlightDef.spot.innerConeAngle = ( light.penumbra - 1.0 ) * light.angle * - 1.0;\n\t\t\tlightDef.spot.outerConeAngle = light.angle;\n\n\t\t}\n\n\t\tif ( light.decay !== undefined && light.decay !== 2 ) {\n\n\t\t\tconsole.warn( 'THREE.GLTFExporter: Light decay may be lost. glTF is physically-based, '\n\t\t\t\t+ 'and expects light.decay=2.' );\n\n\t\t}\n\n\t\tif ( light.target\n\t\t\t\t&& ( light.target.parent !== light\n\t\t\t\t|| light.target.position.x !== 0\n\t\t\t\t|| light.target.position.y !== 0\n\t\t\t\t|| light.target.position.z !== - 1 ) ) {\n\n\t\t\tconsole.warn( 'THREE.GLTFExporter: Light direction may be lost. For best results, '\n\t\t\t\t+ 'make light.target a child of the light with position 0,0,-1.' );\n\n\t\t}\n\n\t\tif ( ! extensionsUsed[ this.name ] ) {\n\n\t\t\tjson.extensions = json.extensions || {};\n\t\t\tjson.extensions[ this.name ] = { lights: [] };\n\t\t\textensionsUsed[ this.name ] = true;\n\n\t\t}\n\n\t\tconst lights = json.extensions[ this.name ].lights;\n\t\tlights.push( lightDef );\n\n\t\tnodeDef.extensions = nodeDef.extensions || {};\n\t\tnodeDef.extensions[ this.name ] = { light: lights.length - 1 };\n\n\t}\n\n}\n\n/**\n * Unlit Materials Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_unlit\n */\nclass GLTFMaterialsUnlitExtension {\n\n\tconstructor( writer ) {\n\n\t\tthis.writer = writer;\n\t\tthis.name = 'KHR_materials_unlit';\n\n\t}\n\n\twriteMaterial( material, materialDef ) {\n\n\t\tif ( ! material.isMeshBasicMaterial ) return;\n\n\t\tconst writer = this.writer;\n\t\tconst extensionsUsed = writer.extensionsUsed;\n\n\t\tmaterialDef.extensions = materialDef.extensions || {};\n\t\tmaterialDef.extensions[ this.name ] = {};\n\n\t\textensionsUsed[ this.name ] = true;\n\n\t\tmaterialDef.pbrMetallicRoughness.metallicFactor = 0.0;\n\t\tmaterialDef.pbrMetallicRoughness.roughnessFactor = 0.9;\n\n\t}\n\n}\n\n/**\n * Specular-Glossiness Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_pbrSpecularGlossiness\n */\nclass GLTFMaterialsPBRSpecularGlossiness {\n\n\tconstructor( writer ) {\n\n\t\tthis.writer = writer;\n\t\tthis.name = 'KHR_materials_pbrSpecularGlossiness';\n\n\t}\n\n\twriteMaterial( material, materialDef ) {\n\n\t\tif ( ! material.isGLTFSpecularGlossinessMaterial ) return;\n\n\t\tconst writer = this.writer;\n\t\tconst extensionsUsed = writer.extensionsUsed;\n\n\t\tconst extensionDef = {};\n\n\t\tif ( materialDef.pbrMetallicRoughness.baseColorFactor ) {\n\n\t\t\textensionDef.diffuseFactor = materialDef.pbrMetallicRoughness.baseColorFactor;\n\n\t\t}\n\n\t\tconst specularFactor = [ 1, 1, 1 ];\n\t\tmaterial.specular.toArray( specularFactor, 0 );\n\t\textensionDef.specularFactor = specularFactor;\n\t\textensionDef.glossinessFactor = material.glossiness;\n\n\t\tif ( materialDef.pbrMetallicRoughness.baseColorTexture ) {\n\n\t\t\textensionDef.diffuseTexture = materialDef.pbrMetallicRoughness.baseColorTexture;\n\n\t\t}\n\n\t\tif ( material.specularMap ) {\n\n\t\t\tconst specularMapDef = { index: writer.processTexture( material.specularMap ) };\n\t\t\twriter.applyTextureTransform( specularMapDef, material.specularMap );\n\t\t\textensionDef.specularGlossinessTexture = specularMapDef;\n\n\t\t}\n\n\t\tmaterialDef.extensions = materialDef.extensions || {};\n\t\tmaterialDef.extensions[ this.name ] = extensionDef;\n\t\textensionsUsed[ this.name ] = true;\n\n\t}\n\n}\n\n/**\n * Static utility functions\n */\nGLTFExporter.Utils = {\n\n\tinsertKeyframe: function ( track, time ) {\n\n\t\tconst tolerance = 0.001; // 1ms\n\t\tconst valueSize = track.getValueSize();\n\n\t\tconst times = new track.TimeBufferType( track.times.length + 1 );\n\t\tconst values = new track.ValueBufferType( track.values.length + valueSize );\n\t\tconst interpolant = track.createInterpolant( new track.ValueBufferType( valueSize ) );\n\n\t\tlet index;\n\n\t\tif ( track.times.length === 0 ) {\n\n\t\t\ttimes[ 0 ] = time;\n\n\t\t\tfor ( let i = 0; i < valueSize; i ++ ) {\n\n\t\t\t\tvalues[ i ] = 0;\n\n\t\t\t}\n\n\t\t\tindex = 0;\n\n\t\t} else if ( time < track.times[ 0 ] ) {\n\n\t\t\tif ( Math.abs( track.times[ 0 ] - time ) < tolerance ) return 0;\n\n\t\t\ttimes[ 0 ] = time;\n\t\t\ttimes.set( track.times, 1 );\n\n\t\t\tvalues.set( interpolant.evaluate( time ), 0 );\n\t\t\tvalues.set( track.values, valueSize );\n\n\t\t\tindex = 0;\n\n\t\t} else if ( time > track.times[ track.times.length - 1 ] ) {\n\n\t\t\tif ( Math.abs( track.times[ track.times.length - 1 ] - time ) < tolerance ) {\n\n\t\t\t\treturn track.times.length - 1;\n\n\t\t\t}\n\n\t\t\ttimes[ times.length - 1 ] = time;\n\t\t\ttimes.set( track.times, 0 );\n\n\t\t\tvalues.set( track.values, 0 );\n\t\t\tvalues.set( interpolant.evaluate( time ), track.values.length );\n\n\t\t\tindex = times.length - 1;\n\n\t\t} else {\n\n\t\t\tfor ( let i = 0; i < track.times.length; i ++ ) {\n\n\t\t\t\tif ( Math.abs( track.times[ i ] - time ) < tolerance ) return i;\n\n\t\t\t\tif ( track.times[ i ] < time && track.times[ i + 1 ] > time ) {\n\n\t\t\t\t\ttimes.set( track.times.slice( 0, i + 1 ), 0 );\n\t\t\t\t\ttimes[ i + 1 ] = time;\n\t\t\t\t\ttimes.set( track.times.slice( i + 1 ), i + 2 );\n\n\t\t\t\t\tvalues.set( track.values.slice( 0, ( i + 1 ) * valueSize ), 0 );\n\t\t\t\t\tvalues.set( interpolant.evaluate( time ), ( i + 1 ) * valueSize );\n\t\t\t\t\tvalues.set( track.values.slice( ( i + 1 ) * valueSize ), ( i + 2 ) * valueSize );\n\n\t\t\t\t\tindex = i + 1;\n\n\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\ttrack.times = times;\n\t\ttrack.values = values;\n\n\t\treturn index;\n\n\t},\n\n\tmergeMorphTargetTracks: function ( clip, root ) {\n\n\t\tconst tracks = [];\n\t\tconst mergedTracks = {};\n\t\tconst sourceTracks = clip.tracks;\n\n\t\tfor ( let i = 0; i < sourceTracks.length; ++ i ) {\n\n\t\t\tlet sourceTrack = sourceTracks[ i ];\n\t\t\tconst sourceTrackBinding = PropertyBinding.parseTrackName( sourceTrack.name );\n\t\t\tconst sourceTrackNode = PropertyBinding.findNode( root, sourceTrackBinding.nodeName );\n\n\t\t\tif ( sourceTrackBinding.propertyName !== 'morphTargetInfluences' || sourceTrackBinding.propertyIndex === undefined ) {\n\n\t\t\t\t// Tracks that don't affect morph targets, or that affect all morph targets together, can be left as-is.\n\t\t\t\ttracks.push( sourceTrack );\n\t\t\t\tcontinue;\n\n\t\t\t}\n\n\t\t\tif ( sourceTrack.createInterpolant !== sourceTrack.InterpolantFactoryMethodDiscrete\n\t\t\t\t&& sourceTrack.createInterpolant !== sourceTrack.InterpolantFactoryMethodLinear ) {\n\n\t\t\t\tif ( sourceTrack.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline ) {\n\n\t\t\t\t\t// This should never happen, because glTF morph target animations\n\t\t\t\t\t// affect all targets already.\n\t\t\t\t\tthrow new Error( 'THREE.GLTFExporter: Cannot merge tracks with glTF CUBICSPLINE interpolation.' );\n\n\t\t\t\t}\n\n\t\t\t\tconsole.warn( 'THREE.GLTFExporter: Morph target interpolation mode not yet supported. Using LINEAR instead.' );\n\n\t\t\t\tsourceTrack = sourceTrack.clone();\n\t\t\t\tsourceTrack.setInterpolation( InterpolateLinear );\n\n\t\t\t}\n\n\t\t\tconst targetCount = sourceTrackNode.morphTargetInfluences.length;\n\t\t\tconst targetIndex = sourceTrackNode.morphTargetDictionary[ sourceTrackBinding.propertyIndex ];\n\n\t\t\tif ( targetIndex === undefined ) {\n\n\t\t\t\tthrow new Error( 'THREE.GLTFExporter: Morph target name not found: ' + sourceTrackBinding.propertyIndex );\n\n\t\t\t}\n\n\t\t\tlet mergedTrack;\n\n\t\t\t// If this is the first time we've seen this object, create a new\n\t\t\t// track to store merged keyframe data for each morph target.\n\t\t\tif ( mergedTracks[ sourceTrackNode.uuid ] === undefined ) {\n\n\t\t\t\tmergedTrack = sourceTrack.clone();\n\n\t\t\t\tconst values = new mergedTrack.ValueBufferType( targetCount * mergedTrack.times.length );\n\n\t\t\t\tfor ( let j = 0; j < mergedTrack.times.length; j ++ ) {\n\n\t\t\t\t\tvalues[ j * targetCount + targetIndex ] = mergedTrack.values[ j ];\n\n\t\t\t\t}\n\n\t\t\t\t// We need to take into consideration the intended target node\n\t\t\t\t// of our original un-merged morphTarget animation.\n\t\t\t\tmergedTrack.name = ( sourceTrackBinding.nodeName || '' ) + '.morphTargetInfluences';\n\t\t\t\tmergedTrack.values = values;\n\n\t\t\t\tmergedTracks[ sourceTrackNode.uuid ] = mergedTrack;\n\t\t\t\ttracks.push( mergedTrack );\n\n\t\t\t\tcontinue;\n\n\t\t\t}\n\n\t\t\tconst sourceInterpolant = sourceTrack.createInterpolant( new sourceTrack.ValueBufferType( 1 ) );\n\n\t\t\tmergedTrack = mergedTracks[ sourceTrackNode.uuid ];\n\n\t\t\t// For every existing keyframe of the merged track, write a (possibly\n\t\t\t// interpolated) value from the source track.\n\t\t\tfor ( let j = 0; j < mergedTrack.times.length; j ++ ) {\n\n\t\t\t\tmergedTrack.values[ j * targetCount + targetIndex ] = sourceInterpolant.evaluate( mergedTrack.times[ j ] );\n\n\t\t\t}\n\n\t\t\t// For every existing keyframe of the source track, write a (possibly\n\t\t\t// new) keyframe to the merged track. Values from the previous loop may\n\t\t\t// be written again, but keyframes are de-duplicated.\n\t\t\tfor ( let j = 0; j < sourceTrack.times.length; j ++ ) {\n\n\t\t\t\tconst keyframeIndex = this.insertKeyframe( mergedTrack, sourceTrack.times[ j ] );\n\t\t\t\tmergedTrack.values[ keyframeIndex * targetCount + targetIndex ] = sourceTrack.values[ j ];\n\n\t\t\t}\n\n\t\t}\n\n\t\tclip.tracks = tracks;\n\n\t\treturn clip;\n\n\t}\n\n};\n\nexport { GLTFExporter };\n","const THREE = require('three');\nconst resolveURL = require('./utilities').resolveURL;\n\n/**\n * Object with containg viewport information used in ZincJS.\n * \n * @class\n * @author Alan Wu\n * @return {Viewport}\n */\nconst Viewport = function () {\n /** @property {Number} */\n\tthis.nearPlane = 0.168248;\n /** @property {Number} */\n\tthis.farPlane = 6.82906;\n /**@property {Array} */\n\tthis.eyePosition = [0.5, -2.86496, 0.5];\n /** @property {Array} */\n\tthis.targetPosition = [0.5, 0.5, 0.5];\n /** @property {Array} */\n\tthis.upVector = [ 0.0, 0.0, 1.0];\n\tconst _this = this;\n\n this.setFromObject = ({ nearPlane, farPlane, eyePosition, targetPosition, upVector }) => {\n _this.nearPlane = nearPlane;\n _this.farPlane = farPlane;\n _this.eyePosition = eyePosition;\n _this.targetPosition = targetPosition;\n _this.upVector = upVector;\n }\n};\n\n/**\n * Provides the basic controls for a scene.\n * \n * @class\n * @author Alan Wu\n * @return {CameraControls}\n */\nconst CameraControls = function ( object, domElement, renderer, scene ) {\n\tconst MODE = { NONE: -1, DEFAULT: 0, PATH: 1, SMOOTH_CAMERA_TRANSITION: 2, AUTO_TUMBLE: 3, ROTATE_TRANSITION: 4, MINIMAP: 5, SYNC_CONTROL: 6 };\n /** \n * Actions states.\n * Available states are NONE, ROTATE, ZOOM, PAN, TOUCH_ROTATE, TOUCH_ZOOM, TOUCH_PAN and SCROLL.\n * @property {Object} \n */\n\tconst STATE = { NONE: -1, ROTATE: 0, ZOOM: 1, PAN: 2, TOUCH_ROTATE: 3, TOUCH_ZOOM: 4, TOUCH_PAN: 5, SCROLL: 6, KEYBOARD_ZOOM: 7, KEYBOARD_ROTATE: 8, KEYBOARD_PAN: 9 };\n const ROTATE_DIRECTION = { NONE: -1, FREE: 1, HORIZONTAL: 2, VERTICAL: 3 };\n\tconst KEYBOARD = { ARROWLEFT: 37, ARROWUP: 38, ARROWRIGHT: 39, ARROWDOWN: 40, NUMPADADD: 107, NUMPADSUBTRACT: 109, EQUAL: 187, MINUS: 189 };\n /** \n * Available click actions are MAIN, AUXILIARY and SECONARY.\n * @property {Object} \n */\n\tconst CLICK_ACTION = {};\n\tCLICK_ACTION.MAIN = STATE.ROTATE;\n\tCLICK_ACTION.AUXILIARY = STATE.ZOOM;\n\tCLICK_ACTION.SECONDARY = STATE.PAN;\n\tthis.cameraObject = object;\n\tthis.domElement = ( domElement !== undefined ) ? domElement : document;\n\tthis.renderer = renderer;\n\tthis.scene = scene ;\n\tthis.tumble_rate = 1.5;\n\tthis.pointer_x = 0;\n\tthis.pointer_y = 0;\n\tthis.pointer_x_start = 0;\n\tthis.pointer_y_start = 0;\n\tthis.previous_pointer_x = 0;\n\tthis.previous_pointer_y = 0;\n\tthis.near_plane_fly_debt = 0.0;\n\tthis.touchZoomDistanceStart = 0;\n\tthis.touchZoomDistanceEnd = 0;\n\tthis.directionalLight = 0;\n\tthis.zoomRate = 50;\n\tthis.rotateRate = 50;\n\tthis.panRate = 100;\n\tthis.pixelHeight = 1;\n\tlet duration = 6000;\n let enabled = true;\n\tlet inbuildTime = 0;\n\tlet cameraPath = undefined;\n\tlet numberOfCameraPoint = undefined;\n\tlet updateLightWithPathFlag = false;\n\tlet playRate = 500;\n\tlet deviceOrientationControl = undefined;\n\tlet defaultViewport = \"default\";\n\tlet currentMode = MODE.DEFAULT;\n\tlet smoothCameraTransitionObject = undefined;\n\tlet rotateCameraTransitionObject = undefined;\n\tlet cameraAutoTumbleObject = undefined;\n\tlet zoomSize = 0;\n let rotateMode = ROTATE_DIRECTION.FREE;\n\tthis._state = STATE.NONE;\n\tlet zincRayCaster = undefined;\n\tthis.targetTouchId = -1;\n let rect = undefined;\n const _a = new THREE.Vector3();\n const _b = new THREE.Vector3();\n const _c = new THREE.Vector3();\n const _new_b = new THREE.Vector3();\n const _new_c = new THREE.Vector3();\n const _axis = new THREE.Vector3();\n const _v = new THREE.Vector3();\n const _rel_eye = new THREE.Vector3();\n const sceneSphere = new THREE.Sphere();\n const _tempEye = new THREE.Vector3();\n let hasUpdated = false;\n let ndcControl = undefined;\n let maxDist = 0;\n const viewports = {\n \"default\" : new Viewport()\n };\n viewports.default.nearPlane = 0.1;\n\tviewports.default.farPlane = 2000;\n\tviewports.default.eyePosition = [0, 0, 0];\n\tviewports.default.targetPosition = [0, 0, -1.0];\n\tviewports.default.upVector = [ 0.0, 1.0, 0.0];\n\n //Add the target property\n\tif (this.cameraObject.target === undefined)\n\t\tthis.cameraObject.target = new THREE.Vector3( ...viewports.default.targetPosition );\n\n //Calculate the max distanc allowed, it is the longer\n //of 6 times the radius of the current scene and\n //the current distance between scene centroid and the postion\n //of the camera.\n this.calculateMaxAllowedDistance = (scene) => {\n const box = scene.getBoundingBox();\n if (box) {\n box.getBoundingSphere(sceneSphere);\n maxDist = sceneSphere.radius * 6;\n let currentDist = 0;\n if (this.cameraObject) {\n currentDist = this.cameraObject.position.distanceTo(sceneSphere.center);\n }\n maxDist = currentDist > maxDist ? currentDist * 1.5: maxDist;\n } else {\n maxDist = 0;\n }\n }\n\n /**\n * Add a viewport to the list of available named viewports.\n * \n * @param {String} name - Name of the viewport\n * @param {Viewport} viewportName - Viewport to be added\n */\n this.addViewport = (viewportName, viewport) => {\n if (viewportName && viewport)\n viewports[viewportName] = viewport;\n }\n\n /**\n * Set the default viewport for this {@link CameraControls}.\n * \n * @param {String} defaultName - Name of the viewport\n * \n * @return {Boolean} true if set successfully, false otherwise.\n */\n this.setDefaultViewport = defaultName => {\n\t\tif (defaultName && (defaultName in viewports)) {\n defaultViewport = defaultName;\n return true;\n }\n return false\n\t}\n\n /**\n * Get the name of the default viewport.\n * \n * \n * @return {String}\n */\n this.getDefaultViewport = () => {\n\t\treturn defaultViewport;\n\t}\n\t\n /**\n * Get the viewport with the provied name stored in this object.\n * @param {String} name - Name of the viewport\n * \n * @return {Viewport}\n */\n\tthis.getViewportOfName = name => {\n\t\treturn viewports[name];\n\t}\n\n /**\n * Set the viewport with a name if it is found in the list.\n * @param {String} name - Name of the viewport\n * \n * @return {Boolean} if viewport is found and set, otherwise false.\n */\n this.setCurrentViewport = name => {\n if (name in viewports) {\n this.setCurrentCameraSettings(viewports[name])\n return true;\n }\n return false;\n\t}\n\n /**\n * Set the direction of rotation allowed with this control.\n * \n * @param {String} mode - available options are none, horizontal,\n * vertical and free.\n */\n this.setRotationMode = mode => {\n switch (mode) {\n case \"none\":\n rotateMode = ROTATE_DIRECTION.NONE;\n break;\n case \"horizontal\":\n rotateMode = ROTATE_DIRECTION.HORIZONTAL;\n break;\n case \"vertical\":\n rotateMode = ROTATE_DIRECTION.VERTICAL;\n break;\n case \"free\":\n default:\n rotateMode = ROTATE_DIRECTION.FREE;\n }\n }\n\t\n\tthis.onResize = () => {\n\t\tif (rect)\n\t\t\trect = undefined;\n if (ndcControl)\n ndcControl.setCurrentCameraSettings(this.cameraObject,\n viewports[defaultViewport]);\n\t}\n\n\tthis.getVisibleHeightAtZDepth = ( depth ) => {\n\t\t// compensate for cameras not positioned at z=0\n\t\t\n\t\tconst cameraOffset = this.cameraObject.position.distanceTo(this.cameraObject.target);\n\t\tif ( depth < cameraOffset ) depth -= cameraOffset;\n\t\telse depth += cameraOffset;\n\t\n\t\t// vertical fov in radians\n\t\tconst vFOV = this.cameraObject.fov * Math.PI / 180; \n\t\n\t\t// Math.abs to ensure the result is always positive\n\t\treturn 2 * Math.tan( vFOV / 2 ) * Math.abs( depth );\n\t};\n\n\tthis.calculateHeightPerPixelAtZeroDepth = ( wHeight ) => {\n\t\tconst height = this.getVisibleHeightAtZDepth(0);\n\t\tthis.pixelHeight = height / wHeight;\n\t\treturn this.pixelHeight;\n\t}\n\n /**\n * Get normalised coordinates from windows coordinates.\n * \n * @param {String} x\n * @param {String} y\n * @param {THREE.Vector2} positionIn - Optional, write the value into\n * this object if it is provided, otherwise a new object will \n * be created and returned.\n * \n * @return {THREE.Vector2} containing the normalised x and y coordinates.\n */\n this.getNDCFromDocumentCoords = (x, y, positionIn) => {\n updateRect(false);\n const position = positionIn ? positionIn : new THREE.Vector2();\n const out_x = ((x - rect.left) / rect.width) * 2 - 1;\n const out_y = -((y - rect.top) / rect.height) * 2 + 1;\n return position.set(out_x, out_y);\n }\n\n /**\n * Get the relative windows coordinates from normalised coordiantes.\n * \n * @param {String} x \n * @param {String} y\n * @param {THREE.Vector2} positionIn - Optional, write the value into\n * this object if it is provided, otherwise a new object will \n * be created and returned.\n * \n * @return {THREE.Vector2} containing the relative x and y coordinates.\n */\n this.getRelativeCoordsFromNDC = (x, y, positionIn) => {\n updateRect(false);\n const position = positionIn ? positionIn : new THREE.Vector2();\n position.x = (x + 1) * rect.width / 2.0;\n position.y = (1 - y) * rect.height / 2.0;\n return position;\n }\n\n /**\n * Map a mouse click to the specified action.\n * \n * @param {String} buttonName - please see {@link CLICK_ACTION}\n * @param {String} actionName - please see {@link STATE}\n */\n\tthis.setMouseButtonAction = (buttonName, actionName) => {\n\t\tCLICK_ACTION[buttonName] = STATE[actionName];\n }\n\n\t/**\n\t * \n\t * @param {HTML} element \n\t * @param {Number} index \n\t */\n\tconst setCanvasTabindex = (element, index) => {\n\t\tif (element instanceof HTMLCanvasElement)\n\t\t\telement.tabIndex = index\n\t}\n\n //Make sure the camera does not travel beyond limit\n const checkTravelDistance = () => {\n if (maxDist > 0) {\n const newDist = _tempEye.distanceTo(sceneSphere.center);\n return (maxDist > newDist || \n this.cameraObject.position.distanceTo(sceneSphere.center) > newDist );\n }\n return true;\n }\n \n const translateViewport = translation => {\n _tempEye.copy(this.cameraObject.position).add(translation);\n if (checkTravelDistance()) {\n this.cameraObject.target.add(translation);\n this.cameraObject.position.add(translation);\n this.updateDirectionalLight();\n }\n }\n\t\n\tconst onDocumentMouseDown = event => {\n updateRect(false);\n // Check if mouse event hapens inside the minimap\n let minimapCoordinates = undefined;\n if (currentMode === MODE.DEFAULT)\n minimapCoordinates = this.scene.getNormalisedMinimapCoordinates(\n this.renderer, event);\n if (!minimapCoordinates) {\n if (event.button == 0) {\n if (event.ctrlKey)\n this._state = CLICK_ACTION.AUXILIARY;\n else if (event.shiftKey)\n this._state = CLICK_ACTION.SECONDARY;\n else\n this._state = CLICK_ACTION.MAIN;\n } else if (event.button == 1) {\n event.preventDefault();\n this._state = CLICK_ACTION.AUXILIARY;\n } \n else if (event.button == 2) {\n this._state = CLICK_ACTION.SECONDARY;\n }\n this.pointer_x = event.clientX - rect.left;\n this.pointer_y = event.clientY - rect.top;\n this.pointer_x_start = this.pointer_x;\n this.pointer_y_start = this.pointer_y;\n this.previous_pointer_x = this.pointer_x;\n this.previous_pointer_y= this.pointer_y;\n } else {\n currentMode = MODE.MINIMAP;\n let translation = this.scene.getMinimapDiffFromNormalised(\n minimapCoordinates.x, minimapCoordinates.y);\n translateViewport(translation);\n }\n }\n\n\tconst onDocumentMouseMove = event => {\n updateRect(false);\n\t\tif (rect) {\n\t\t\tthis.pointer_x = event.clientX - rect.left;\n\t\t\tthis.pointer_y = event.clientY - rect.top;\n\t\t\tif (currentMode === MODE.MINIMAP) {\n\t\t\t\tlet minimapCoordinates = this.scene.getNormalisedMinimapCoordinates(this.renderer, event);\n\t\t\t\tif (minimapCoordinates) {\n\t\t\t\t\tlet translation = this.scene.getMinimapDiffFromNormalised(\n\t\t\t\t\t\tminimapCoordinates.x, minimapCoordinates.y);\n\t\t\t\t\ttranslateViewport(translation);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif ((this._state === STATE.NONE) && (zincRayCaster !== undefined)) {\n\t\t\t\t\tzincRayCaster.move(this, event.clientX, event.clientY, this.renderer);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\t\n\tconst onDocumentMouseUp = event => {\n this._state = STATE.NONE;\n if (currentMode == MODE.MINIMAP)\n currentMode = MODE.DEFAULT;\n\t\tif (zincRayCaster !== undefined) {\n\t\t\tif (this.pointer_x_start==(event.clientX - rect.left) && this.pointer_y_start==(event.clientY- rect.top)) {\n\t\t\t\tzincRayCaster.pick(this, event.clientX, event.clientY, this.renderer);\n\t\t\t}\n\t\t}\n\t}\n\t\n\tconst onDocumentMouseLeave = event => {\n\t\tthis._state = STATE.NONE;\n\t}\n\t\n\tconst onDocumentTouchStart = event => {\n updateRect(false);\n\t\tconst len = event.touches.length;\n\t\tif (len == 1) {\n\t\t\tthis._state = STATE.TOUCH_ROTATE;\n\t\t\tthis.pointer_x = event.touches[0].clientX - rect?.left;\n\t\t\tthis.pointer_y = event.touches[0].clientY - rect?.top;\n\t\t\tthis.pointer_x_start = this.pointer_x;\n\t\t\tthis.pointer_y_start = this.pointer_y;\n\t\t\tthis.previous_pointer_x = this.pointer_x;\n\t\t\tthis.previous_pointer_y= this.pointer_y;\n\t\t} else if (len == 2) {\n\t\t\tthis._state = STATE.TOUCH_ZOOM;\n\t\t\tconst dx = event.touches[ 0 ].clientX - event.touches[ 1 ].clientX;\n\t\t\tconst dy = event.touches[ 0 ].clientY - event.touches[ 1 ].clientY;\n\t\t\tthis.touchZoomDistanceEnd = this.touchZoomDistanceStart = Math.sqrt( dx * dx + dy * dy );\n\t\t} else if (len == 3) {\n\t\t\tthis._state = STATE.TOUCH_PAN;\n\t\t\tthis.targetTouchId = event.touches[0].identifier;\n\t\t\tthis.pointer_x = event.touches[0].clientX - rect?.left;\n\t\t\tthis.pointer_y = event.touches[0].clientY - rect?.top;\n\t\t\tthis.previous_pointer_x = this.pointer_x;\n\t\t\tthis.previous_pointer_y= this.pointer_y;\t\t\t\n\t\t}\n\t}\n\t\n\tconst onDocumentTouchMove = event => {\n\t\tevent.preventDefault();\n\t\tevent.stopPropagation();\n\t\tconst len = event.touches.length;\n\t\tif (len == 1) {\n\t\t\tthis.pointer_x = event.touches[0].clientX - rect.left;\n\t\t\tthis.pointer_y = event.touches[0].clientY - rect.top;\n\t\t} else if (len == 2) {\n\t\t\tif (this._state === STATE.TOUCH_ZOOM) {\n\t\t\t\tconst dx = event.touches[ 0 ].clientX - event.touches[ 1 ].clientX;\n\t\t\t\tconst dy = event.touches[ 0 ].clientY - event.touches[ 1 ].clientY;\n\t\t\t\tthis.touchZoomDistanceEnd = Math.sqrt( dx * dx + dy * dy );\n\t\t\t}\n\t\t} else if (len == 3) {\n\t\t\tif (this._state === STATE.TOUCH_PAN) {\n\t\t\t\tfor (let i = 0; i < 3; i++) {\n\t\t\t\t\tif (event.touches[i].identifier == this.targetTouchId) {\n\t\t\t\t\t\tthis.pointer_x = event.touches[0].clientX - rect.left;\n\t\t\t\t\t\tthis.pointer_y = event.touches[0].clientY - rect.top;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\t\t\t\t\n\t\t}\n\t}\n\t\n\tconst onDocumentTouchEnd = event => {\n\t\tconst len = event.touches.length;\n\t\tthis.touchZoomDistanceStart = this.touchZoomDistanceEnd = 0;\n\t\tthis.targetTouchId = -1;\n\t\tthis._state = STATE.NONE;\n\t\tif (len == 1) {\n\t\t\tif (zincRayCaster !== undefined) {\n\t\t\t\tif (this.pointer_x_start==(event.touches[0].clientX- rect.left) && this.pointer_y_start==(event.touches[0].clientY- rect.top)) {\n\t\t\t\t\tzincRayCaster.pick(this.cameraObject, event.touches[0].clientX, event.touches[0].clientY, this.renderer);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n const onDocumentEnter = () => {\n\t\tupdateRect(true);\n\t}\n\n const updateRect = forced => {\n //Use intersectionObserver to reset the rect for ray tracing.\n if (forced || rect === undefined) {\n const observer = new IntersectionObserver((entries) => {\n for (const entry of entries) {\n rect = entry.boundingClientRect;\n }\n observer.disconnect();\n });\n \n observer.observe(this.domElement);\n }\n }\n\t\n\tconst onDocumentWheelEvent = event => {\n updateRect(false);\n\t\tthis._state = STATE.SCROLL;\n\t\tlet changes = 0;\n\t\tif (event.deltaY > 0)\n\t\t\tchanges = this.zoomRate;\n\t\telse if (event.deltaY < 0)\n\t\t\tchanges = this.zoomRate * -1;\n\t\tzoomSize = zoomSize + changes;\n\t\tevent.preventDefault(); \n\t\tevent.stopImmediatePropagation(); \n\t}\t\n\n\tconst onDocumentKeydownEvent = event => {\n\t\tupdateRect(false);\n\t\tlet changes = 0;\n\t\tif (\n\t\t\t(event.keyCode === KEYBOARD.EQUAL) ||\n\t\t\t(event.keyCode === KEYBOARD.MINUS) ||\n\t\t\t(event.keyCode === KEYBOARD.NUMPADADD) ||\n\t\t\t(event.keyCode === KEYBOARD.NUMPADSUBTRACT)\n\t\t) {\n\t\t\tthis._state = STATE.KEYBOARD_ZOOM\n\t\t\tlet unit = 1;\n\t\t\tif (event.shiftKey) {\n\t\t\t\tunit = unit * 2\n\t\t\t}\n\t\t\tif (\n\t\t\t\t(event.keyCode === KEYBOARD.EQUAL) ||\n\t\t\t\t(event.keyCode === KEYBOARD.NUMPADADD)\n\t\t\t) {\n\t\t\t\tchanges = this.zoomRate * unit * -1;\n\t\t\t} else if (\n\t\t\t\t(event.keyCode === KEYBOARD.MINUS) ||\n\t\t\t\t(event.keyCode === KEYBOARD.NUMPADSUBTRACT)\n\t\t\t) {\n\t\t\t\tchanges = this.zoomRate * unit;\n\t\t\t}\n\t\t\tzoomSize = zoomSize + changes;\n\t\t} else if (\n\t\t\t(event.keyCode === KEYBOARD.ARROWLEFT) ||\n\t\t\t(event.keyCode === KEYBOARD.ARROWUP) ||\n\t\t\t(event.keyCode === KEYBOARD.ARROWRIGHT) ||\n\t\t\t(event.keyCode === KEYBOARD.ARROWDOWN)\n\t\t) {\n\t\t\tif (event.shiftKey) {\n\t\t\t\tthis._state = STATE.KEYBOARD_ROTATE\n\t\t\t\tthis.pointer_x_start = this.pointer_x;\n\t\t\t\tthis.pointer_y_start = this.pointer_y;\n\t\t\t\tchanges = this.rotateRate\n\t\t\t} else {\n\t\t\t\tthis._state = STATE.KEYBOARD_PAN\n\t\t\t\tchanges = this.panRate\n\t\t\t}\n\t\t\tthis.previous_pointer_x = this.pointer_x;\n\t\t\tthis.previous_pointer_y = this.pointer_y;\n\t\t\tif (event.keyCode === KEYBOARD.ARROWLEFT) {\n\t\t\t\tthis.pointer_x = this.pointer_x - changes;\n\t\t\t} else if (event.keyCode === KEYBOARD.ARROWUP) {\n\t\t\t\tthis.pointer_y = this.pointer_y - changes;\n\t\t\t} else if (event.keyCode === KEYBOARD.ARROWRIGHT) {\n\t\t\t\tthis.pointer_x = this.pointer_x + changes;\n\t\t\t} else if (event.keyCode === KEYBOARD.ARROWDOWN) {\n\t\t\t\tthis.pointer_y = this.pointer_y + changes;\n\t\t\t}\n\t\t}\n\t\tif (Object.values(KEYBOARD).includes(event.keyCode)) {\n\t\t\tevent.preventDefault();\n\t\t}\n\t}\n\n\tconst onDocumentKeyupEvent = event => {\n\t\tthis._state = STATE.NONE;\n\t}\n\n\tconst translate = () => {\n\t\tif (typeof this.cameraObject !== \"undefined\")\n\t\t{\n\t\t\tconst height = rect.height;\n\t\t\tconst distance = this.cameraObject.position.distanceTo(this.cameraObject.target);\n\t\t\tlet fact = 0.0;\n\t\t\tif ((this.cameraObject.far > this.cameraObject.near) && (distance >= this.cameraObject.near) &&\n\t\t\t\t(distance <= this.cameraObject.far))\n\t\t\t{\n\t\t\t\t fact = (distance-this.cameraObject.near)/(this.cameraObject.far-this.cameraObject.near);\n }\n //_b == old_near, _c = old_far, _new_b = new_near, _new_c = new_far\n\t\t\t_b.set(this.previous_pointer_x,height - this.previous_pointer_y,0.0);\n\t\t\t_c.set(this.previous_pointer_x, height - this.previous_pointer_y,1.0);\n\t\t\t_new_b.set(this.pointer_x,height - this.pointer_y,0.0);\n\t\t\t_new_c.set(this.pointer_x,height - this.pointer_y,1.0);\n\t\t\t_b.unproject(this.cameraObject);\n\t\t\t_c.unproject(this.cameraObject);\n\t\t\t_new_b.unproject(this.cameraObject);\n\t\t\t_new_c.unproject( this.cameraObject);\n const translate_rate = -0.002;\n _new_b.sub(_b).multiplyScalar(1.0-fact);\n _new_c.sub(_c).multiplyScalar(fact);\n _new_b.add(_new_c).multiplyScalar(translate_rate);\n translateViewport(_new_b);\n\t\t}\n\t\tthis.previous_pointer_x = this.pointer_x;\n\t\tthis.previous_pointer_y = this.pointer_y;\n\t}\n\n\tthis.getVectorsFromRotateAboutLookAtPoints = (axis, angle) => {\n axis.normalize();\n\t _v.copy(this.cameraObject.position).sub(this.cameraObject.target);\n\t _rel_eye.copy(_v);\n\t _v.normalize()\n\t if (0.8 < Math.abs(_v.dot(axis))) {\n\t _v.copy(this.cameraObject.up);\n }\n _b.crossVectors(axis, _v).normalize();\n _c.crossVectors(axis, _b);\n\t const rel_eyea = axis.dot(_rel_eye);\n\t const rel_eyeb = _b.dot(_rel_eye);\n\t const rel_eyec = _c.dot(_rel_eye);\n\t const upa = axis.dot(this.cameraObject.up); \n\t const upb = _b.dot(this.cameraObject.up);\n\t const upc = _c.dot(this.cameraObject.up);\n\t const cos_angle = Math.cos(angle);\n\t const sin_angle = Math.sin(angle);\n _new_b.set(cos_angle*_b.x+sin_angle*_c.x,\n\t cos_angle*_b.y+sin_angle*_c.y,\n\t cos_angle*_b.z+sin_angle*_c.z);\n\t _new_c.set(cos_angle*_c.x-sin_angle*_b.x,\n\t cos_angle*_c.y-sin_angle*_b.y,\n\t cos_angle*_c.z-sin_angle*_b.z); \n _v.copy(this.cameraObject.target);\n\t _v.x = _v.x + axis.x*rel_eyea + _new_b.x*rel_eyeb+_new_c.x*rel_eyec;\n\t _v.y = _v.y + axis.y*rel_eyea + _new_b.y*rel_eyeb+_new_c.y*rel_eyec;\n\t _v.z = _v.z + axis.z*rel_eyea + _new_b.z*rel_eyeb+_new_c.z*rel_eyec;\n\t _a.set(axis.x*upa+_new_b.x*upb+_new_c.x*upc,\n axis.y*upa+_new_b.y*upb+_new_c.y*upc,\n axis.z*upa+_new_b.z*upb+_new_c.z*upc);\n\t return {position: _v, up: _a};\n\t}\n\t\n /**\n * Rotate around the axis with the amount specified by angle.\n * \n * @param {THREE.Vector3} axis - The rotational axis.\n * @param {Number} Angle - Specify how much the camera shoudl rotate by.\n */\n\tthis.rotateAboutLookAtpoint = (axis, angle) => {\n\t const returned_values = this.getVectorsFromRotateAboutLookAtPoints(axis, angle);\n\t this.cameraObject.position.copy(returned_values.position);\n\t this.updateDirectionalLight();\n\t this.cameraObject.up.copy(returned_values.up);\n\t}\n\n\tconst tumble = () => {\n\t\tif (typeof this.cameraObject !== \"undefined\")\n\t\t{\n\t\t\tconst width = rect?.width;\n\t\t\tconst height = rect?.height;\n\t\t\tif ((0 0)\n\t\t\t\t{\n\t\t\t\t\tconst dx=-delta_y*1.0/tangent_dist;\n\t\t\t\t\tconst dy=delta_x*1.0/tangent_dist;\n let d = 0;\n // Do not allow rotation on other direction around the origin if rotateMode is not free\n if (rotateMode === ROTATE_DIRECTION.FREE) {\n let d=dx*(this.pointer_x-0.5*(width-1))+dy*(0.5*(height-1)-this.pointer_y);\n if (d > radius)\t{\n d = radius;\n }\n else {\n if (d < -radius) {\n d = -radius;\n }\n }\n }\n\t\t\t\t\tconst phi=Math.acos(d/radius)-0.5*Math.PI;\n\t\t\t\t\tconst angle=this.tumble_rate*tangent_dist/radius;\n\t\t\t\t\t_a.copy(this.cameraObject.position).sub(this.cameraObject.target).normalize();\n\t\t\t\t\t_b.copy(this.cameraObject.up).normalize();\n _c.copy(_b).cross(_a).normalize().multiplyScalar(dx);\n _b.multiplyScalar(dy);\n _axis.addVectors(_c, _b).multiplyScalar(Math.cos(phi));\n _a.multiplyScalar(Math.sin(phi));\n _axis.add(_a);\n\t\t\t\t\tthis.rotateAboutLookAtpoint(_axis, -angle);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tthis.previous_pointer_x = this.pointer_x;\n\t\tthis.previous_pointer_y = this.pointer_y;\n\t}\n\t\n\tconst calculateZoomDelta = () => {\n\t\tlet delta = 0;\n\t\tif (this._state === STATE.ZOOM)\n\t\t{\n\t\t\tdelta = this.previous_pointer_y-this.pointer_y;\n\t\t} else if ((this._state === STATE.SCROLL) || (this._state === STATE.KEYBOARD_ZOOM)) {\n\t\t\tdelta = zoomSize;\n\t\t} else {\n\t\t\tdelta = -1.0 * (this.touchZoomDistanceEnd - this.touchZoomDistanceStart);\n\t\t\tthis.touchZoomDistanceStart = this.touchZoomDistanceEnd;\n\t\t}\n\t\treturn delta;\n }\n\n this.changeZoomByScrollRateUnit = unit => {\n const delta_y = unit * this.zoomRate;\n this.changeZoomByValue(delta_y);\n }\n\n this.changeZoomByValue = delta_y => {\n\t\tif (typeof this.cameraObject !== \"undefined\")\n\t\t{\n const height = rect.height;\n\n\t\t\tconst a = this.cameraObject.position.clone();\n\t\t\ta.sub(this.cameraObject.target);\n\t\t\tconst dist = a.length();\n\t\t\tconst dy = 1.5 * delta_y/height;\n\t\t\tif ((dist + dy*dist) > 0.01) {\n\t\t\t\ta.normalize()\n _tempEye.copy(this.cameraObject.position);\n\t\t\t\t_tempEye.x += a.x*dy*dist;\n\t\t\t\t_tempEye.y += a.y*dy*dist;\n\t\t\t\t_tempEye.z += a.z*dy*dist;\n if (checkTravelDistance()) {\n this.cameraObject.position.copy(_tempEye);\n this.updateDirectionalLight();\n const near_far_minimum_ratio = 0.00001;\n if ((near_far_minimum_ratio * this.cameraObject.far) <\n (this.cameraObject.near + dy*dist + this.near_plane_fly_debt)) {\n if (this.near_plane_fly_debt != 0.0)\t{\n this.near_plane_fly_debt += dy*dist;\n if (this.near_plane_fly_debt > 0.0) {\n this.cameraObject.near += this.near_plane_fly_debt;\n this.cameraObject.far += this.near_plane_fly_debt;\n this.near_plane_fly_debt = 0.0;\n }\n else {\n this.cameraObject.near += dy*dist;\n this.cameraObject.far += dy*dist;\n }\n }\t\t\t\n }\n else {\n if (this.near_plane_fly_debt == 0.0) {\n const diff = this.cameraObject.near - near_far_minimum_ratio * this.cameraObject.far;\n this.cameraObject.near = near_far_minimum_ratio * this.cameraObject.far;\n this.cameraObject.far -= diff;\n this.near_plane_fly_debt -= near_far_minimum_ratio * this.cameraObject.far;\n }\n this.near_plane_fly_debt += dy*dist;\n }\n hasUpdated = true;\n }\n\t\t\t}\n\t\t}\n }\n\t\n\tconst flyZoom = () => {\n const delta_y = calculateZoomDelta();\n this.changeZoomByValue(delta_y);\n \n\t\tif (this._state === STATE.ZOOM) {\n\t\t\tthis.previous_pointer_x = this.pointer_x;\n\t\t\tthis.previous_pointer_y = this.pointer_y;\n\t\t}\n\t\tif ((this._state === STATE.SCROLL) || (this._state === STATE.KEYBOARD_ZOOM)) {\n\t\t\tzoomSize = 0;\n this._state = STATE.NONE;\n\t\t}\n\t}\n\t\n\tthis.setDirectionalLight = directionalLightIn => {\n\t\tthis.directionalLight = directionalLightIn;\n\t};\n\n /**\n * Force an update to the position of the directional light.\n */\n\tthis.updateDirectionalLight = () => {\n\t\tif (this.directionalLight != 0) {\n\t\t\tthis.directionalLight.position.set(this.cameraObject.position.x,\n\t\t\t\t\tthis.cameraObject.position.y,\n\t\t\t\t\tthis.cameraObject.position.z);\n\t\t}\n\t}\n\t\n\t/**\n * Enable the camera control.\n */\n\tthis.enable = function () {\n\t\tenabled = true;\n\t\tif (this.domElement && this.domElement.addEventListener) {\n\t\t\tsetCanvasTabindex(this.domElement, 0)\n\t\t\tthis.domElement.addEventListener( 'mousedown', onDocumentMouseDown, false );\n\t\t\tthis.domElement.addEventListener( 'mousemove', onDocumentMouseMove, false );\n\t\t\tthis.domElement.addEventListener( 'mouseup', onDocumentMouseUp, false );\n\t\t\tthis.domElement.addEventListener( 'mouseleave', onDocumentMouseLeave, false );\n\t\t\tthis.domElement.addEventListener( 'touchstart', onDocumentTouchStart, false);\n\t\t\tthis.domElement.addEventListener( 'touchmove', onDocumentTouchMove, false);\n\t\t\tthis.domElement.addEventListener( 'touchend', onDocumentTouchEnd, false);\n\t\t\tthis.domElement.addEventListener( 'wheel', onDocumentWheelEvent, false);\n\t\t\tthis.domElement.addEventListener( 'mouseenter', onDocumentEnter, false );\n\t\t\tthis.domElement.addEventListener( 'contextmenu', event => { event.preventDefault(); }, false );\n\t\t\tthis.domElement.addEventListener( 'keydown', onDocumentKeydownEvent, false );\n\t\t\tthis.domElement.addEventListener( 'keyup', onDocumentKeyupEvent, false );\n\t }\n\t}\n\n /**\n * Disable the camera control.\n */\n\tthis.disable = function () {\n\t\tenabled = false;\n\t\tif (this.domElement && this.domElement.removeEventListener) {\n\t\t\tthis.domElement.removeEventListener( 'mousedown', onDocumentMouseDown, false );\n\t\t\tthis.domElement.removeEventListener( 'mousemove', onDocumentMouseMove, false );\n\t\t\tthis.domElement.removeEventListener( 'mouseup', onDocumentMouseUp, false );\n\t\t\tthis.domElement.removeEventListener( 'mouseleave', onDocumentMouseLeave, false );\n\t\t\tthis.domElement.removeEventListener( 'touchstart', onDocumentTouchStart, false);\n\t\t\tthis.domElement.removeEventListener( 'touchmove', onDocumentTouchMove, false);\n\t\t\tthis.domElement.removeEventListener( 'touchend', onDocumentTouchEnd, false);\n\t\t\tthis.domElement.removeEventListener( 'wheel', onDocumentWheelEvent, false);\n\t\t\tthis.domElement.removeEventListener( 'mouseenter', onDocumentEnter, false );\n\t\t\tthis.domElement.removeEventListener( 'contextmenu', event => { event.preventDefault(); }, false );\n\t\t\tthis.domElement.removeEventListener( 'keydown', onDocumentKeydownEvent, false );\n\t\t\tthis.domElement.removeEventListener( 'keyup', onDocumentKeyupEvent, false );\n\t\t\tsetCanvasTabindex(this.domElement, -1)\n\t }\n\t}\n\n\tthis.loadPath = pathData => {\n\t\tcameraPath = pathData.CameraPath;\n\t\tnumberOfCameraPoint = pathData.NumberOfPoints;\n\t}\n\t\n /**\n * This is an experimental feature. It loads a path - point to point which\n * the camera will travel.\n * \n * @param {String} path_url - The path.\n * @param {requestCallback} finishCallback - The callback once the path is load.\n */\n\tthis.loadPathURL = (path_url, finishCallback) => {\n\t\tconst xmlhttp = new XMLHttpRequest();\n\t\txmlhttp.onreadystatechange = () => {\n\t\t if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {\n\t\t const pathData = JSON.parse(xmlhttp.responseText);\n\t\t this.loadPath(pathData);\n\t if (finishCallback != undefined && (typeof finishCallback == 'function'))\n\t finishCallback();\n\t\t }\n\t\t}\n\t\tconst requestURL = resolveURL(path_url);\n\t\txmlhttp.open(\"GET\", requestURL, true);\n\t\txmlhttp.send();\n\t}\n\n /**\n * Set the duration for the camera to travel along the path.\n * \n * @param {Number} durationIn - the duration for the path.\n */\n\tthis.setPathDuration = durationIn => {\n duration = durationIn;\n if (smoothCameraTransitionObject)\n smoothCameraTransitionObject.setDuration(duration);\n if (rotateCameraTransitionObject)\n rotateCameraTransitionObject.setDuration(duration);\n\t}\n\t\n /**\n * Get the playRate - this determines how fast it takes to \n * finish one duration.\n * \n * @return {Number}\n */\n\t this.getPlayRate = () => {\n\t return playRate;\n\t }\n\t\n /**\n * Set the playRate - this determines how fast it takes to \n * finish one duration.\n * \n * @param {Number} playRateIn - The play rate speed.\n */\n\tthis.setPlayRate = playRateIn => {\n\t\tplayRate = playRateIn;\n\t}\n\n /**\n * Update the internal timer by the set amount, this can\n * be used to force a time update by setting delta to zero.\n * \n * @param {Number} delta - The amount of time to increment\n * the time by.\n */\n\tconst updateTime = delta => {\n\t\tlet targetTime = inbuildTime + delta;\n\t\tif (targetTime > duration)\n\t\t\ttargetTime = targetTime - duration\n\t\tinbuildTime = targetTime;\n\t};\n\t\n /**\n * Get the current inbuild time,\n * \n * @return {Number}\n */\n\t this.getTime = () => {\n\t return inbuildTime;\n\t }\n\t\n /**\n * Set the current inbuild time,\n * \n * @param {Number} timeIn - this will be used as the current time,\n * it should be between the range of zero and the set duration.\n */\n\tthis.setTime = timeIn => {\n\t if (timeIn > duration)\n\t inbuildTime = duration;\n\t else if (timeIn < 0.0)\n\t inbuildTime = 0.0;\n\t else\n\t inbuildTime = timeIn;\n\t}\n\t\n /**\n * Get the number of frame which is determine by number of points\n * in the camera path.\n * \n * @return {Number}\n */\n\tthis.getNumberOfTimeFrame = () => {\n\t\treturn numberOfCameraPoint;\n\t}\n\n /**\n * Get the current time frame and it will return three values in\n * an array.\n * \n * @return {Array} - bottom frame, top frame and the proportion.\n */\n\tthis.getCurrentTimeFrame = () => {\n\t if (numberOfCameraPoint > 2) {\n \t\tconst current_time = inbuildTime/duration * (numberOfCameraPoint - 1);\n \t\tconst bottom_frame = Math.floor(current_time);\n \t\tconst proportion = 1 - (current_time - bottom_frame);\n \t\tconst top_frame = Math.ceil(current_time);\n \t\tif (bottom_frame == top_frame) {\n \t\t\tif (bottom_frame == numberOfCameraPoint - 1) {\n \t\t\t\treturn [bottom_frame - 1, top_frame, 0];\n \t\t\t} else {\n \t\t\t\treturn [bottom_frame, top_frame + 1, 1.0];\n \t\t\t}\n \t\t}\n \t\treturn [bottom_frame, top_frame, proportion];\n\t } else if (numberOfCameraPoint == 1) {\n\t return [0, 0, 0];\n\t }\n\t \n\t return undefined;\n\t}\n\t\n /**\n * Set the current time frame.\n * \n * @param {Number} targetTimeFrame - bottom frame, top frame and the proportion.\n */\n\tthis.setCurrentTimeFrame = targetTimeFrame => {\n\t if (numberOfCameraPoint > 2) {\n \t\tinbuildTime = duration * targetTimeFrame / (numberOfCameraPoint - 1);\n \t\tif (inbuildTime < 0.0)\n \t\t\tinbuildTime = 0.0;\n \t\tif (inbuildTime > duration)\n \t\t\tinbuildTime = duration;\n\t }\n\t}\n\n /**\n * Update the progress on the path by the specified amount - delta.\n * \n * @param {Number} delta - The amount of time to increment\n */\n\tconst updatePath = delta => {\n\t\tif (currentMode === MODE.PATH) {\n\t\t\tupdateTime(delta);\n\t\t\tif (cameraPath) {\n\t\t\t\tconst time_frame = this.getCurrentTimeFrame();\n\t\t\t\tconst bottom_frame = time_frame[0];\n\t\t\t\tconst top_frame = time_frame[1];\n\t\t\t\tconst proportion = time_frame[2];\n\t\t\t\tconst bot_pos = [cameraPath[bottom_frame*3], cameraPath[bottom_frame*3+1], cameraPath[bottom_frame*3+2]];\n\t\t\t\tconst top_pos = [cameraPath[top_frame*3], cameraPath[top_frame*3+1], cameraPath[top_frame*3+2]];\n\t\t\t\tconst current_positions = [];\n\t\t\t\tfor (let i = 0; i < bot_pos.length; i++) {\n\t\t\t\t\tcurrent_positions.push(proportion * bot_pos[i] + (1.0 - proportion) * top_pos[i]);\n\t\t\t\t}\n\t\t\t\tthis.cameraObject.position.set(current_positions[0], current_positions[1], current_positions[2]);\n\t\t\t\tthis.cameraObject.target.set(top_pos[0], top_pos[1], top_pos[2]);\n\t\t\t\tif (deviceOrientationControl)\n\t\t\t\t\tthis.cameraObject.lookAt( this.cameraObject.target );\n\t\t\t\tif (updateLightWithPathFlag) {\n\t\t\t\t\tthis.directionalLight.position.set(current_positions[0], current_positions[1], current_positions[2]);\n\t\t\t\t\tthis.directionalLight.target.position.set(top_pos[0], top_pos[1], top_pos[2]);\n\t\t\t\t}\t\t\t\t\t\n\t\t\t}\n\t\t}\n\t};\n\t\n /**\n * Force recalculation of the current path.\n */\n\tthis.calculatePathNow = () => {\n\t updatePath(0.0);\n\t}\n\n // handle synchronised control based on information in the idc\n const handleSyncControl = () => {\n if ((this._state === STATE.ROTATE) || (this._state === STATE.TOUCH_ROTATE) || (this._state === STATE.KEYBOARD_ROTATE)){\n //rotateion does not trigger callback\n tumble();\n } else if ((this._state === STATE.PAN) || (this._state === STATE.TOUCH_PAN) || (this._state === STATE.KEYBOARD_PAN)){\n translate();\n ndcControl.triggerCallback();\n } else if ((this._state === STATE.ZOOM) || (this._state === STATE.TOUCH_ZOOM) || (this._state === STATE.SCROLL) || (this._state === STATE.KEYBOARD_ZOOM)){\n ndcControl.zoom(calculateZoomDelta());\n this.previous_pointer_x = this.pointer_x;\n this.previous_pointer_y = this.pointer_y;\n if ((this._state === STATE.SCROLL) || (this._state === STATE.KEYBOARD_ZOOM)) {\n this._state = STATE.NONE;\n }\n zoomSize = 0;\n ndcControl.triggerCallback();\n }\n }\n\t\n /**\n * Update all controls related changes - including calculation of the viewport.\n * \n * @param {Number} timeChanged - Time eclipse since last called.\n */\n\tthis.update = timeChanged => {\n\t\tconst delta = timeChanged * playRate;\n\t\tlet controlEnabled = enabled;\n\t\tlet updated = true;\n\t\tif (currentMode === MODE.PATH) {\n\t\t\tupdatePath(delta);\n\t\t} else if (currentMode === MODE.SMOOTH_CAMERA_TRANSITION && smoothCameraTransitionObject) {\n\t\t\tsmoothCameraTransitionObject.update(delta);\n\t\t\tif (smoothCameraTransitionObject.isTransitionCompleted()) {\n\t\t\t\tsmoothCameraTransitionObject == undefined;\n\t\t\t\tcurrentMode = MODE.DEFAULT;\n\t\t\t}\n\t\t\tcontrolEnabled = false;\n\t\t} else if (currentMode === MODE.ROTATE_CAMERA_TRANSITION && rotateCameraTransitionObject) {\n\t\t\trotateCameraTransitionObject.update(delta);\n\t\t\tif (rotateCameraTransitionObject.isTransitionCompleted()) {\n\t\t\t\trotateCameraTransitionObject == undefined;\n\t\t\t\tcurrentMode = MODE.DEFAULT;\n\t\t\t}\n\t\t\tcontrolEnabled = false;\n\t\t} else if (currentMode === MODE.AUTO_TUMBLE && cameraAutoTumbleObject) {\n\t\t\tcameraAutoTumbleObject.update(delta);\n\t\t} else if (currentMode === MODE.SYNC_CONTROL && ndcControl) {\n handleSyncControl();\n controlEnabled = false;\n } else {\n\t\t\tupdated = false;\n\t\t}\n\t\tif (controlEnabled) {\n\t\t\tif (this._state !== STATE.NONE) {\n\t\t\t\tupdated = true;\n\t\t\t}\n\t\t\tif ((this._state === STATE.ROTATE) || (this._state === STATE.TOUCH_ROTATE) || (this._state === STATE.KEYBOARD_ROTATE)){\n\t\t\t\ttumble();\n\t\t\t} else if ((this._state === STATE.PAN) || (this._state === STATE.TOUCH_PAN) || (this._state === STATE.KEYBOARD_PAN)){\n\t\t\t\ttranslate();\n\t\t\t} else if ((this._state === STATE.ZOOM) || (this._state === STATE.TOUCH_ZOOM) || (this._state === STATE.SCROLL) || (this._state === STATE.KEYBOARD_ZOOM)){\n\t\t\t\tflyZoom();\n\t\t\t}\n\t\t\tif (this._state !== STATE.NONE) {\n\t\t\t\tif (currentMode === MODE.AUTO_TUMBLE && cameraAutoTumbleObject &&\n\t\t\t\t\t\tcameraAutoTumbleObject.stopOnCameraInput) {\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this._state === STATE.SCROLL)\n\t\t\t\tthis._state = STATE.NONE;\n\t\t}\n\t\tif (deviceOrientationControl) {\n\t\t\tupdated = true;\n\t\t\tdeviceOrientationControl.update();\n\t\t\t//this.directionalLight.target.position.set(this.cameraObject.target.x, \n\t\t\t//\tthis.cameraObject.target.y, this.cameraObject.target.z);\n\t\t} else {\n\t\t\tthis.cameraObject.lookAt( this.cameraObject.target );\n\t\t}\n\n\t\tupdated = updated || hasUpdated;\n\t\thasUpdated = false;\n\n\t\treturn updated;\n\t};\n\t\n /**\n * Switch to path mode and begin traveling through the camera path.\n */\n\tthis.playPath = () => {\n\t\tcurrentMode = MODE.PATH;\n\t}\n\n /**\n * Stop playing path and switch back to normal control.\n */\n\tthis.stopPath = () => {\n\t\tcurrentMode = MODE.DEFAULT;\n\t}\n\t\n /**\n * Check rather the control is currently in path mode.\n * \n * @return {Boolean}\n */\n\tthis.isPlayingPath = () => {\n\t\treturn (currentMode === MODE.PATH);\n\t}\n\t\n /**\n * Enable directional light update as the camera\n * is traveling through path.\n * \n * @param {Boolean} flag\n */\n\tthis.enableDirectionalLightUpdateWithPath = flag => {\n\t\tupdateLightWithPathFlag = flag;\n\t}\n\t\n /**\n * Enable rotation using the devices's accelerometer.\n */\n\tthis.enableDeviceOrientation = () => {\n\t\tif (!deviceOrientationControl)\n\t\t\tdeviceOrientationControl = new ModifiedDeviceOrientationControls(this.cameraObject);\n\t}\n\n /**\n * Disable rotation using the devices's accelerometer.\n */\n\tthis.disableDeviceOrientation = () => {\n\t\tif (deviceOrientationControl) {\n\t\t\tdeviceOrientationControl.dispose();\n\t\t\tdeviceOrientationControl = undefined;\n\t\t}\n\t}\n\n /**\n * Check rather device orientation based on accelerometer is on.\n */\n\tthis.isDeviceOrientationEnabled = () => {\n\t\tif (deviceOrientationControl) {\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\n /**\n * Reset the viewport settings to the one provided by default viewport.\n */\n\tthis.resetView = () => {\n const viewport = viewports[defaultViewport];\n\t\tthis.cameraObject.near = viewport.nearPlane;\n\t\tthis.cameraObject.far = viewport.farPlane;\n\t\tthis.cameraObject.position.set( viewport.eyePosition[0], viewport.eyePosition[1],\n viewport.eyePosition[2]);\n\t\tthis.cameraObject.target.set( viewport.targetPosition[0],\n viewport.targetPosition[1], viewport.targetPosition[2] );\n\t\tthis.cameraObject.up.set( viewport.upVector[0], viewport.upVector[1],\n viewport.upVector[2]);\n\t\tthis.cameraObject.updateProjectionMatrix();\n\t\tthis.updateDirectionalLight();\n\t}\n\n /**\n * Set the current camera settings with the provided viewport.\n * \n * @param {Viewport} newViewport - viewport settings.\n */\n\tthis.setCurrentCameraSettings = newViewport => {\n\t\tif (newViewport.nearPlane)\n\t\t\tthis.cameraObject.near = newViewport.nearPlane;\n\t\tif (newViewport.farPlane)\n\t\t\tthis.cameraObject.far = newViewport.farPlane;\n\t\tif (newViewport.eyePosition)\n\t\t\tthis.cameraObject.position.set( newViewport.eyePosition[0], \n\t\t\t\t\tnewViewport.eyePosition[1], newViewport.eyePosition[2]);\n\t\tif (newViewport.targetPosition)\n\t\t\tthis.cameraObject.target.set( newViewport.targetPosition[0],\n\t\t\t\t\tnewViewport.targetPosition[1], newViewport.targetPosition[2] );\n\t\tif (newViewport.upVector)\n\t\t\tthis.cameraObject.up.set( newViewport.upVector[0], newViewport.upVector[1],\n\t\t\t\t\tnewViewport.upVector[2]);\n\t\tthis.cameraObject.updateProjectionMatrix();\n\t\tthis.updateDirectionalLight();\n\t\thasUpdated = true;\n\t}\n\n /**\n * Get the viewport based on centre, radius, view_angle and clip distance.\n * \n * @param {Number} centreX - x coordinate of the centre.\n * @param {Number} centreY - y coordinate of the centre.\n * @param {Number} centreZ - z coordinate of the centre.\n * @param {Number} radius - radius if the viewport.\n * @param {Number} view_angle - view angle.\n * @param {Number} clip_distance - clip_distance between the near and far plane.\n * \n * @return {Viewport}\n */\t\n\tthis.getViewportFromCentreAndRadius = (centreX, centreY, centreZ, radius, view_angle, clip_distance) => {\n\t\tlet eyex = this.cameraObject.position.x-this.cameraObject.target.x;\n\t\tlet eyey = this.cameraObject.position.y-this.cameraObject.target.y;\n\t\tlet eyez = this.cameraObject.position.z-this.cameraObject.target.z;\n\t\tconst fact = 1.0/Math.sqrt(eyex*eyex+eyey*eyey+eyez*eyez);\n\t\teyex = eyex * fact;\n\t\teyey = eyey * fact;\n\t\teyez = eyez * fact;\n\t\t/* look at the centre of the sphere */\n\t\tconst localTargetPosition = [centreX, centreY, centreZ];\n\t\t/* shift the eye position to achieve the desired view_angle */\n\t\tconst eye_distance = radius/Math.tan(view_angle*Math.PI/360.0);\n\t\tconst localEyePosition = [ centreX + eyex*eye_distance, centreY + eyey*eye_distance,\n\t\t centreZ + eyez*eye_distance];\n\t\tconst localFarPlane = eye_distance+clip_distance;\n\t\tlet localNearPlane = 0.0;\n\t\tconst nearClippingFactor = 0.95;\n\t\tif (clip_distance > nearClippingFactor*eye_distance)\n\t\t{\n\t\t\tlocalNearPlane = (1.0 - nearClippingFactor)*eye_distance;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tlocalNearPlane = eye_distance - clip_distance;\n\t\t}\n\t\tconst newViewport = new Viewport();\n\t\tnewViewport.nearPlane = localNearPlane;\n\t\tnewViewport.farPlane = localFarPlane;\n\t\tnewViewport.eyePosition = localEyePosition;\n\t\tnewViewport.targetPosition = localTargetPosition;\n\t\tnewViewport.upVector = [this.cameraObject.up.x, this.cameraObject.up.y,\n\t\t this.cameraObject.up.z];\n\t\t\n\t\treturn newViewport;\n\t}\n\n\t /**\n * Get the viewport for the boudning box\n * \n * @param {Number} boundingBox - y coordinate of the centre.\n * @return {Viewport}\n */\t\n\tthis.getViewportFromBoundingBox = (boundingBox, radiusScale) => {\n\t\tconst radius = boundingBox.min.distanceTo(boundingBox.max) / 2.0 * radiusScale;\n\t\tconst centreX = (boundingBox.min.x + boundingBox.max.x) / 2.0;\n\t\tconst centreY = (boundingBox.min.y + boundingBox.max.y) / 2.0;\n\t\tconst centreZ = (boundingBox.min.z + boundingBox.max.z) / 2.0;\n\t\tconst clip_factor = 4.0;\n\t\tconst viewport = this.getViewportFromCentreAndRadius(\n\t\t\tcentreX, centreY, centreZ, radius, 40, radius * clip_factor);\n\t\treturn viewport;\n\t}\n\n /**\n * Get the current camera viewport.\n * \n * @return {Viewport}\n */\n\tthis.getCurrentViewport = () => {\n\t\tconst currentViewport = new Viewport();\n\t\tcurrentViewport.nearPlane = this.cameraObject.near;\n\t\tcurrentViewport.farPlane = this.cameraObject.far;\n\t\tcurrentViewport.eyePosition[0] = this.cameraObject.position.x;\n\t\tcurrentViewport.eyePosition[1] = this.cameraObject.position.y;\n\t\tcurrentViewport.eyePosition[2] = this.cameraObject.position.z;\n\t\tcurrentViewport.targetPosition[0] = this.cameraObject.target.x;\n\t\tcurrentViewport.targetPosition[1] = this.cameraObject.target.y;\n\t\tcurrentViewport.targetPosition[2] = this.cameraObject.target.z;\n\t\tcurrentViewport.upVector[0] = this.cameraObject.up.x;\n\t\tcurrentViewport.upVector[1] = this.cameraObject.up.y;\n\t\tcurrentViewport.upVector[2] = this.cameraObject.up.z;\n\t\treturn currentViewport;\n\t}\n\t\n\tthis.getDefaultEyePosition = () => {\n\t\treturn eyePosition;\n\t}\n\t\n\tthis.getDefaultTargetPosition = () => {\n\t\treturn targetPosition;\n\t}\n\n /**\n * Setup a smooth transition object which transition the camera from one \n * viewport to the other in the specified duration. This will not work if \n * {@link rotateCameraTransition} is active.\n * To use this object, the transition must be enabled using\n * {@link enableCameraTransition}.\n * \n * @param {Viewport} startingViewport - the starting viewport\n * @param {Viewport} endingViewport - the viewport ti end the transistion with.\n * @param {Number} durationIn - duration of the smooth transition.\n */\n\tthis.cameraTransition = (startingViewport, endingViewport, durationIn) => {\n\t if (rotateCameraTransitionObject == undefined)\n\t smoothCameraTransitionObject = new SmoothCameraTransition(startingViewport, endingViewport,\n\t this, durationIn);\n\t}\n\n /**\n * Setup a rotate camera transition object which rotate the \n * camera by the specified the angle in the specified \n * duration. This will not work if {@link cameraTransition}\n * is active.\n * To use this object, the transition must be enabled using\n * {@link enableCameraTransition}.\n * \n * @param {THREE.Vector3} axis - the starting viewport\n * @param {Number} angle - the viewport ti end the transistion with.\n * @param {Number} duration - duration of the smooth transition.\n */\n\tthis.rotateCameraTransition = (axis, angle, duration) => {\n\t if (smoothCameraTransitionObject == undefined)\n\t rotateCameraTransitionObject = new RotateCameraTransition(axis, angle,\n\t this, duration);\n\t}\n\n /**\n * Enable camera transition, {@link rotateCameraTransition} amd\n * {@link cameraTransition} must be called before camera transition can\n * be enabled.\n */\n\tthis.enableCameraTransition = () => {\n\t if (smoothCameraTransitionObject)\n\t currentMode = MODE.SMOOTH_CAMERA_TRANSITION;\n\t if (rotateCameraTransitionObject)\n\t currentMode = MODE.ROTATE_CAMERA_TRANSITION;\n\t}\n\n /**\n * Pause the camera transition.\n */\n\tthis.pauseCameraTransition = () => {\n\t\tcurrentMode = MODE.DEFAULT;\n\t}\n\n /**\n * Stop the camera transition and remove camera transition\n * and rotate camera transition.\n */\n\tthis.stopCameraTransition = () => {\n\t\tcurrentMode = MODE.DEFAULT;\n\t\tsmoothCameraTransitionObject = undefined;\n\t\trotateCameraTransitionObject = undefined;\n\t}\n\n /**\n * Check if camera transition is active.\n */\n\tthis.isTransitioningCamera = () => {\n\t\treturn (currentMode === MODE.SMOOTH_CAMERA_TRANSITION ||\n\t\t currentMode === MODE.ROTATE_CAMERA_TRANSITION);\n\t}\n \n /**\n * Setup auto tumble object of the camera which will rotate the camera\n * around the target as if the user is rotating the camera by mouse/touch\n * interaction.\n * The tumbling will only be enabled with {@link enabelAutoTumble}. \n * \n * @param {Array} tumbleDirectionIn - direction of the mouse/touch.\n * @param {Number} tumbleRateIn - Speed of the tumbling.\n * @param {Boolean} stopOnCameraInputIn - Disable the tumbling once the user\n * start interacting with the scene.\n */\n\tthis.autoTumble = (tumbleDirectionIn, tumbleRateIn, stopOnCameraInputIn) => {\n\t\tcameraAutoTumbleObject = new CameraAutoTumble(tumbleDirectionIn, tumbleRateIn, stopOnCameraInputIn, this);\n\t}\n\n /**\n * Enable autotumble.\n */\n\tthis.enableAutoTumble = () => {\n\t\tcurrentMode = MODE.AUTO_TUMBLE;\n\t}\n\n /**\n * Disable the autotumble.\n */\n\tthis.stopAutoTumble = () => {\n\t\tcurrentMode = MODE.DEFAULT;\n\t\tcameraAutoTumbleObject = undefined;\n\t}\n\n /**\n * Update the autotumble object.\n */\n\tthis.updateAutoTumble = () => {\n\t\tif (cameraAutoTumbleObject)\n\t\t\tcameraAutoTumbleObject.requireUpdate = true;\n\t}\n\n /**\n * Check rather autotumble is active.\n * \n * @return {Boolean}\n */\n\tthis.isAutoTumble = () => {\n\t\treturn (currentMode === MODE.AUTO_TUMBLE);\n\t}\n\t\n /**\n * Create an internal raycaster object and enable it for picking.\n * \n * @param {Scene} sceneIn - The scene to pick from, it can be different from the\n * camera's scene.\n * @param {requestCallback} callbackFunctionIn - The callback for pick event.\n * @param {requestCallback} hoverCallbackFunctionIn - The callback for hover\n * over event.\n */\n this.enableRaycaster = (sceneIn, callbackFunctionIn, hoverCallbackFunctionIn) => {\n if (zincRayCaster == undefined)\n zincRayCaster = new RayCaster(sceneIn, this.scene, callbackFunctionIn, hoverCallbackFunctionIn, this.renderer);\n }\n\n /**\n * Disable raycaster and remove the internal ray caster object.\n */\n this.disableRaycaster = () => {\n zincRayCaster.disable();\n zincRayCaster = undefined;\n }\n\n /**\n * Check rather the camera is in syncControl mode.\n * \n * @return {Boolean}\n */\n this.isSyncControl = () => {\n return currentMpde === MODE.SYNC_CONTROL;\n }\n\n /**\n * Enable syncControl.\n */\n this.enableSyncControl = () => {\n currentMode = MODE.SYNC_CONTROL;\n if (!ndcControl)\n ndcControl = new NDCCameraControl();\n ndcControl.setCurrentCameraSettings(this.cameraObject,\n viewports[defaultViewport]);\n return ndcControl;\n }\n\n /**\n * Disable syncControl.\n */\n this.disableSyncControl = () => {\n currentMode = MODE.DEFAULT;\n this.cameraObject.zoom = 1;\n this.cameraObject.updateProjectionMatrix();\n }\n\t\n\tthis.enable();\n\n};\n\nconst SmoothCameraTransition = function(startingViewport, endingViewport, targetCameraIn, durationIn) {\n\tconst startingEyePosition = startingViewport.eyePosition;\n\tconst startingTargetPosition = startingViewport.targetPosition;\n\tconst startingUp = startingViewport.upVector;\n\tconst endingEyePosition = endingViewport.eyePosition;\n\tconst endingTargetPosition = endingViewport.targetPosition;\n\tconst endingUp = endingViewport.upVector;\n\tconst targetCamera = targetCameraIn;\n\tlet duration = durationIn;\n\tlet inbuildTime = 0;\n\tconst enabled = true;\n\tconst updateLightWithPathFlag = true;\n\tlet completed = false;\n\ttargetCamera.near = Math.min(startingViewport.nearPlane, endingViewport.nearPlane);\n\ttargetCamera.far = Math.max(startingViewport.farPlane, endingViewport.farPlane);\n\ttargetCamera.cameraObject.up.set( endingViewport.upVector[0], endingViewport.upVector[1],\n endingViewport.upVector[2]);\n \n this.setDuration = newDuration => {\n duration = newDuration;\n }\n\t\n\tconst updateTime = delta => {\n\t\tlet targetTime = inbuildTime + delta;\n\t\tif (targetTime > duration)\n\t\t\ttargetTime = duration;\n\t\tinbuildTime = targetTime;\n\t};\n\t\n\tconst updateCameraSettings = () => {\n\t\tconst ratio = inbuildTime / duration;\n\t\tconst eyePosition = [startingEyePosition[0] * (1.0 - ratio) + endingEyePosition[0] * ratio,\n\t\t startingEyePosition[1] * (1.0 - ratio) + endingEyePosition[1] * ratio,\n\t\t startingEyePosition[2] * (1.0 - ratio) + endingEyePosition[2] * ratio];\n\t\tconst targetPosition = [startingTargetPosition[0] * (1.0 - ratio) + endingTargetPosition[0] * ratio,\n\t\t startingTargetPosition[1] * (1.0 - ratio) + endingTargetPosition[1] * ratio,\n\t\t startingTargetPosition[2] * (1.0 - ratio) + endingTargetPosition[2] * ratio];\n const upVector = [startingUp[0] * (1.0 - ratio) + endingUp[0] * ratio,\n startingUp[1] * (1.0 - ratio) + endingUp[1] * ratio,\n startingUp[2] * (1.0 - ratio) + endingUp[2] * ratio];\n\t\ttargetCamera.cameraObject.position.set( eyePosition[0], eyePosition[1], eyePosition[2]);\n\t\ttargetCamera.cameraObject.target.set( targetPosition[0], targetPosition[1], targetPosition[2] );\n\t};\n\t\n\tthis.update = delta => {\n\n\t\tif ( this.enabled === false ) return;\n\t\t\n\t\tupdateTime(delta);\n\t\t\n\t\tupdateCameraSettings();\n\t\t\n\t\tif (inbuildTime == duration) {\n\t\t\tcompleted = true;\n\t\t}\n\n\t}\n\t\n\tthis.isTransitionCompleted = () => {\n\t\treturn completed;\n\t}\n\t\n};\n\nconst RotateCameraTransition = function(axisIn, angleIn, targetCameraIn, durationIn) {\n const axis = axisIn;\n const angle = angleIn;\n const targetCamera = targetCameraIn;\n let duration = durationIn;\n let inbuildTime = 0;\n const enabled = true;\n const ratio = inbuildTime / duration;\n let completed = false;\n\n this.setDuration = newDuration => {\n duration = newDuration;\n }\n\n const updateCameraSettings = delta => {\n const previousTime = inbuildTime;\n let targetTime = inbuildTime + delta;\n if (targetTime > duration)\n targetTime = duration;\n inbuildTime = targetTime;\n const actualDelta = inbuildTime - previousTime;\n const ratio = actualDelta / duration;\n const alpha = ratio * angle;\n targetCamera.rotateAboutLookAtpoint(axis, alpha);\n };\n \n this.update = delta => {\n\n if ( this.enabled === false ) return;\n \n updateCameraSettings(delta);\n \n if (inbuildTime == duration) {\n completed = true;\n }\n\n }\n \n this.isTransitionCompleted = () => {\n return completed;\n }\n}\n\nconst RayCaster = function (sceneIn, hostSceneIn, callbackFunctionIn, hoverCallbackFunctionIn, rendererIn) {\n const scene = sceneIn;\n const hostScene = hostSceneIn;\n\tconst renderer = rendererIn;\n\tconst callbackFunction = callbackFunctionIn;\n\tconst hoverCallbackFunction = hoverCallbackFunctionIn;\n\tconst enabled = true;\n\tconst raycaster = new THREE.Raycaster();\n\traycaster.params.Line.threshold = 0.1;\n\traycaster.params.Points.threshold = 1;\n const mouse = new THREE.Vector2();\n let awaiting = false;\n let lastHoveredDate = new Date();\n let lastHoveredEmpty = false;\n let timeDiff = 0;\n let pickedObjects = new Array();\n let lastPosition = { zincCamera: undefined, x: -1 ,y: -1};\n\tlet pickableObjects = undefined;\n\n\tthis.enable = () => {\n\t\tenable = true;\n\t}\n\n\tthis.disable = () => {\n\t\tenable = false;\n\t}\n\n\tthis.getIntersectsObject = (zincCamera) => {\n if (hostScene !== scene) {\n const threejsScene = scene.getThreeJSScene();\n renderer.render(threejsScene, zincCamera.cameraObject);\n }\n let objects = pickableObjects ? pickableObjects : scene.getPickableThreeJSObjects();\n //Reset pickedObjects array \n pickedObjects.length = 0;\n\t\treturn raycaster.intersectObjects( objects, true, pickedObjects );\n\t}\n\n\tthis.setPickableObjects = (zincObjects) => {\n\t\tif (zincObjects === undefined) {\n\t\t\tpickableObjects = undefined;\n\t\t} else {\n\t\t\tpickableObjects = [];\n\t\t\tzincObjects.forEach(zincObject => {\n\t\t\t\tif (zincObject.getGroup() && zincObject.getGroup().visible) {\n\t\t\t\t\tpickableObjects.push(zincObject.getGroup());\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\n\tthis.getIntersectsObjectWithOrigin = (zincCamera, origin, direction) => {\n\t\traycaster.set(origin, direction);\n\t\treturn this.getIntersectsObject(zincCamera);\n\t}\n\n\tthis.getIntersectsObjectWithCamera = (zincCamera, x, y) => {\n zincCamera.getNDCFromDocumentCoords(x, y, mouse);\n\t\traycaster.setFromCamera(mouse, zincCamera.cameraObject);\n\t\treturn this.getIntersectsObject(zincCamera);\n\t};\n\t\n\tthis.pick = (zincCamera, x, y) => { \n\t\tif (enabled && renderer && scene && zincCamera && callbackFunction) {\n\t\t\tthis.getIntersectsObjectWithCamera(zincCamera, x, y);\n\t\t\tconst length = pickedObjects.length;\n\t\t\tfor (let i = 0; i < length; i++) {\n\t\t\t\tlet zincObject = pickedObjects[i].object ? pickedObjects[i].object.userData : undefined;\n\t\t\t\tif (zincObject && zincObject.isMarkerCluster && zincObject.visible\n\t\t\t\t\t&& zincObject.clusterIsVisible(pickedObjects[i].object.clusterIndex)) {\n\t\t\t\t\t//Can zoom into cluster\n\t\t\t\t\tif (zincObject.zoomToCluster(pickedObjects[i].object.clusterIndex)) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tcallbackFunction(pickedObjects, x, y);\n\t\t}\n }\n \n let hovered = (zincCamera, x, y) => {\n if (enabled && renderer && scene && zincCamera && hoverCallbackFunction) {\n this.getIntersectsObjectWithCamera(zincCamera, x, y);\n lastHoveredDate.setTime(Date.now());\n if (pickedObjects.length === 0) {\n //skip hovered callback if the previous one is empty\n if (lastHoveredEmpty)\n return\n lastHoveredEmpty = true;\n } else {\n lastHoveredEmpty = false;\n }\n hoverCallbackFunction(pickedObjects, x, y);\n }\n }\n\t\n\tthis.move = (zincCamera, x, y) => {\n if (enabled && renderer && scene && zincCamera && hoverCallbackFunction) {\n if (scene.displayMarkers) {\n hovered(zincCamera, x, y);\n } else {\n lastPosition.zincCamera = zincCamera;\n lastPosition.x = x;\n lastPosition.y = y;\n if (!awaiting) {\n timeDiff = lastHoveredDate ? Date.now() - lastHoveredDate.getTime() : 250;\n if (timeDiff >= 250) {\n hovered(zincCamera, x, y);\n } else {\n awaiting = true;\n setTimeout(awaitMove(lastPosition), timeDiff);\n }\n }\n }\n }\n }\n \n let awaitMove = (lastPosition) => {\n return function() {\n awaiting = false;\n hovered(lastPosition.zincCamera, lastPosition.x, lastPosition.y);\n }\n }\n};\n\nconst CameraAutoTumble = function (tumbleDirectionIn, tumbleRateIn, stopOnCameraInputIn, targetCameraIn) {\n\tconst tumbleAxis = new THREE.Vector3();\n\tconst angle = -tumbleRateIn;\n\tconst targetCamera = targetCameraIn;\n\tconst enabled = true;\n\tconst updateLightWithPathFlag = true;\n\tconst tumbleDirection = tumbleDirectionIn;\n\tthis.stopOnCameraInput = stopOnCameraInputIn;\n this.requireUpdate = true;\n const b = new THREE.Vector3();\n const c = new THREE.Vector3();\n\t\n\tconst computeTumbleAxisAngle = tumbleDirection => {\n\t\tconst tangent_dist = Math.sqrt(tumbleDirection[0]*tumbleDirection[0] +\n\t\t\ttumbleDirection[1]*tumbleDirection[1]);\n\t\tconst width = Math.abs(tumbleDirection[0]) * 4.0;\n\t\tconst height = Math.abs(tumbleDirection[1]) * 4.0;\n\t\tconst radius = 0.25 * (width + height);\n\t\tconst dx = -tumbleDirection[1]/tangent_dist;\n\t\tconst dy = tumbleDirection[0]/tangent_dist;\n\t\tlet d = dx*(tumbleDirection[0])+dy*(-tumbleDirection[1]);\n\t\t\n\t\tif (d > radius)\n\t\t{\n\t\t\td = radius;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tif (d < -radius)\n\t\t\t{\n\t\t\t\td = -radius;\n\t\t\t}\n\t\t}\n\t\t\n\t\tconst phi=Math.acos(d/radius)-0.5*Math.PI;\n\t\t/* get axis to rotate about */\n\t\ttumbleAxis.copy(targetCamera.cameraObject.position).sub(\n targetCamera.cameraObject.target).normalize();\n\t\tb.copy(targetCamera.cameraObject.up).normalize();\n c.crossVectors(b, tumbleAxis).normalize().multiplyScalar(dx);\n b.multiplyScalar(dy);\n b.add(c).multiplyScalar(Math.cos(phi));\n tumbleAxis.multiplyScalar(Math.sin(phi)).add(b);\n\t};\n\t\t\n\tthis.update = delta => {\n\n\t\tif ( this.enabled === false ) return;\n\t\t\n\t\tif (this.requireUpdate) {\n\t\t\tcomputeTumbleAxisAngle(tumbleDirection);\n\t\t\tthis.requireUpdate = false;\n\t\t}\n\t\ttargetCamera.rotateAboutLookAtpoint(tumbleAxis, angle * delta/1000);\n\n\t}\n\t\n};\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\nconst StereoCameraZoomFixed = function () {\n\n\tthis.type = 'StereoCamera';\n\n\tthis.aspect = 1;\n\n\tthis.cameraL = new THREE.PerspectiveCamera();\n\tthis.cameraL.layers.enable( 1 );\n\tthis.cameraL.matrixAutoUpdate = false;\n\n\tthis.cameraR = new THREE.PerspectiveCamera();\n\tthis.cameraR.layers.enable( 2 );\n\tthis.cameraR.matrixAutoUpdate = false;\n\n};\n\nObject.assign( StereoCameraZoomFixed.prototype, {\n\n\tupdate: (() => {\n\n\t\tlet focus, fov, aspect, near, far, zoom;\n\n\t\tconst eyeRight = new THREE.Matrix4();\n\t\tconst eyeLeft = new THREE.Matrix4();\n\n\t\treturn function update( camera ) {\n\n\t\t\tconst needsUpdate = focus !== camera.focus || fov !== camera.fov ||\n\t\t\t\t\t\t\t\t\t\t\t\taspect !== camera.aspect * this.aspect || near !== camera.near ||\n\t\t\t\t\t\t\t\t\t\t\t\tfar !== camera.far || zoom !== camera.zoom;\n\n\t\t\tif ( needsUpdate ) {\n\n\t\t\t\tfocus = camera.focus;\n\t\t\t\tfov = camera.fov;\n\t\t\t\taspect = camera.aspect * this.aspect;\n\t\t\t\tnear = camera.near;\n\t\t\t\tfar = camera.far;\n\t\t\t\tzoom = camera.zoom;\n\n\t\t\t\t// Off-axis stereoscopic effect based on\n\t\t\t\t// http://paulbourke.net/stereographics/stereorender/\n\n\t\t\t\tconst projectionMatrix = camera.projectionMatrix.clone();\n\t\t\t\tconst eyeSep = 0.064 / 2;\n\t\t\t\tconst eyeSepOnProjection = eyeSep * near / focus;\n\t\t\t\tconst ymax = near * Math.tan( THREE.Math.DEG2RAD * fov * 0.5 ) / camera.zoom;\n\t\t\t\tlet xmin, xmax;\n\n\t\t\t\t// translate xOffset\n\n\t\t\t\teyeLeft.elements[ 12 ] = - eyeSep;\n\t\t\t\teyeRight.elements[ 12 ] = eyeSep;\n\n\t\t\t\t// for left eye\n\n\t\t\t\txmin = - ymax * aspect + eyeSepOnProjection;\n\t\t\t\txmax = ymax * aspect + eyeSepOnProjection;\n\n\t\t\t\tprojectionMatrix.elements[ 0 ] = 2 * near / ( xmax - xmin );\n\t\t\t\tprojectionMatrix.elements[ 8 ] = ( xmax + xmin ) / ( xmax - xmin );\n\n\t\t\t\tthis.cameraL.projectionMatrix.copy( projectionMatrix );\n\n\t\t\t\t// for right eye\n\n\t\t\t\txmin = - ymax * aspect - eyeSepOnProjection;\n\t\t\t\txmax = ymax * aspect - eyeSepOnProjection;\n\n\t\t\t\tprojectionMatrix.elements[ 0 ] = 2 * near / ( xmax - xmin );\n\t\t\t\tprojectionMatrix.elements[ 8 ] = ( xmax + xmin ) / ( xmax - xmin );\n\n\t\t\t\tthis.cameraR.projectionMatrix.copy( projectionMatrix );\n\n\t\t\t}\n\n\t\t\tthis.cameraL.matrixWorld.copy( camera.matrixWorld ).multiply( eyeLeft );\n\t\t\tthis.cameraR.matrixWorld.copy( camera.matrixWorld ).multiply( eyeRight );\n\n\t\t};\n\n\t})()\n\n} );\n\n/** the following StereoEffect is written by third party */\n/**\n * @author alteredq / http://alteredqualia.com/\n * @authod mrdoob / http://mrdoob.com/\n * @authod arodic / http://aleksandarrodic.com/\n * @authod fonserbc / http://fonserbc.github.io/\n*/\nconst StereoEffect = function ( renderer ) {\n\n\tconst _stereo = new StereoCameraZoomFixed();\n\t_stereo.aspect = 0.5;\n\n\tthis.setSize = (width, height) => {\n\n\t\trenderer.setSize( width, height );\n\n\t};\n\n\tthis.render = (scene, camera) => {\n\n\t\tscene.updateMatrixWorld();\n\n\t\tif ( camera.parent === null ) camera.updateMatrixWorld();\n\n\t\t_stereo.update( camera );\n\n\t\tconst size = renderer.getSize();\n\n\t\trenderer.setScissorTest( true );\n\t\trenderer.clear();\n\n\t\trenderer.setScissor( 0, 0, size.width / 2, size.height );\n\t\trenderer.setViewport( 0, 0, size.width / 2, size.height );\n\t\trenderer.render( scene, _stereo.cameraL );\n\n\t\trenderer.setScissor( size.width / 2, 0, size.width / 2, size.height );\n\t\trenderer.setViewport( size.width / 2, 0, size.width / 2, size.height );\n\t\trenderer.render( scene, _stereo.cameraR );\n\n\t\trenderer.setScissorTest( false );\n\n\t};\n\n};\n\n\n/**\n * @author richt / http://richt.me\n * @author WestLangley / http://github.com/WestLangley\n *\n * W3C Device Orientation control (http://w3c.github.io/deviceorientation/spec-source-orientation.html)\n */\n\nconst ModifiedDeviceOrientationControls = function ( object ) {\n\n\tconst scope = this;\n\n\tthis.object = object; \n\tthis.object.rotation.reorder( \"YXZ\" );\n\n\tthis.enabled = true;\n\n\tthis.deviceOrientation = {};\n\tthis.screenOrientation = 0;\n\n\tconst onDeviceOrientationChangeEvent = event => {\n\n\t\tscope.deviceOrientation = event;\n\n\t};\n\n\tconst onScreenOrientationChangeEvent = () => {\n\t if (typeof(window) !== 'undefined')\n\t scope.screenOrientation = window.orientation || 0;\n\n\t};\n\n\t// The angles alpha, beta and gamma form a set of intrinsic Tait-Bryan angles of type Z-X'-Y''\n\n\tconst setObjectQuaternion = (() => {\n\n\t\tconst zee = new THREE.Vector3( 0, 0, 1 );\n\n\t\tconst euler = new THREE.Euler();\n\n\t\tconst q0 = new THREE.Quaternion();\n\n\t\tconst q1 = new THREE.Quaternion( - Math.sqrt( 0.5 ), 0, 0, Math.sqrt( 0.5 ) ); // - PI/2 around the x-axis\n\n\t\treturn (cameraObject, alpha, beta, gamma, orient) => {\n\t\t\t\n\t\t\tconst vector = new THREE.Vector3(0, 0, 1);\n\t\t\t\n\t\t\tvector.subVectors(cameraObject.target, cameraObject.position);\n\n\t\t\teuler.set( beta, alpha, - gamma, 'YXZ' ); // 'ZXY' for the device, but 'YXZ' for us\n\n\t\t\tconst quaternion = new THREE.Quaternion();\n\t\t\t\n\t\t\tquaternion.setFromEuler( euler ); // orient the device\n\n\t\t\tquaternion.multiply( q1 ); // camera looks out the back of the device, not the top\n\n\t\t\tquaternion.multiply( q0.setFromAxisAngle( zee, - orient ) ); // adjust for screen orientation\n\t\t\t\n\t\t\tvector.applyQuaternion(quaternion);\n\t\t\t\t\n\t\t\tvector.addVectors(cameraObject.position, vector);\n\t\t\t\n\t\t\tcameraObject.lookAt(vector);\n\n\t\t};\n\n\t})();\n\n\tthis.connect = () => {\n\n\t\tonScreenOrientationChangeEvent(); // run once on load\n\t\tif (typeof(window) !== 'undefined') {\n\t\t window.addEventListener( 'orientationchange', onScreenOrientationChangeEvent, false );\n\t\t window.addEventListener( 'deviceorientation', onDeviceOrientationChangeEvent, false );\n\t\t}\n\t\tscope.enabled = true;\n\n\t};\n\n\tthis.disconnect = () => {\n\t if (typeof(window) !== 'undefined') {\n\t window.removeEventListener( 'orientationchange', onScreenOrientationChangeEvent, false );\n\t\t window.removeEventListener( 'deviceorientation', onDeviceOrientationChangeEvent, false );\n\t }\n\t\tscope.enabled = false;\n\n\t};\n\n\tthis.update = () => {\n\n\t\tif ( scope.enabled === false ) return;\n\n\t\tconst alpha = scope.deviceOrientation.alpha ? THREE.Math.degToRad( scope.deviceOrientation.alpha ) : 0; // Z\n\t\tconst beta = scope.deviceOrientation.beta ? THREE.Math.degToRad( scope.deviceOrientation.beta ) : 0; // X'\n\t\tconst gamma = scope.deviceOrientation.gamma ? THREE.Math.degToRad( scope.deviceOrientation.gamma ) : 0; // Y''\n\t\tconst orient = scope.screenOrientation ? THREE.Math.degToRad( scope.screenOrientation ) : 0; // O\n\n\t\tsetObjectQuaternion( scope.object, alpha, beta, gamma, orient );\n\n\t};\n\n\tthis.dispose = function () {\n\n\t\tthis.disconnect();\n\n\t};\n\n\tthis.connect();\n\n};\n\nconst NDCCameraControl = function () {\n\tlet camera = undefined;\n let targetCamera = undefined;\n let defaultViewport = undefined;\n const position = new THREE.Vector3();\n const target = new THREE.Vector3();\n const v1 = new THREE.Vector3();\n const v2 = new THREE.Vector3();\n let eventCallback = undefined;\n\n this.setCurrentCameraSettings = (cameraIn, defaultViewportIn) => {\n camera = cameraIn.clone();\n targetCamera = cameraIn;\n defaultViewport = defaultViewportIn;\n camera.near = defaultViewport.nearPlane;\n if (defaultViewport.farPlane)\n camera.far = defaultViewport.farPlane;\n if (defaultViewport.eyePosition)\n camera.position.set(defaultViewport.eyePosition[0],\n defaultViewport.eyePosition[1], defaultViewport.eyePosition[2]);\n if (defaultViewport.upVector)\n camera.up.set(defaultViewport.upVector[0], defaultViewport.upVector[1],\n defaultViewport.upVector[2]);\n if (defaultViewport.targetPosition) {\n camera.target = new THREE.Vector3(defaultViewport.targetPosition[0],\n defaultViewport.targetPosition[1], defaultViewport.targetPosition[2]);\n camera.lookAt(camera.target);\n }\n camera.updateProjectionMatrix();\n position.copy(camera.position).project(camera);\n target.copy(camera.target).project(camera);\n }\n\t\n this.getCurrentPosition = () => {\n target.copy(targetCamera.target).project(camera);\n return [target.x, target.y];\n }\n\n this.zoom = delta => {\n let scaledDelta = delta * 0.002;\n let zoom = Math.max(targetCamera.zoom - scaledDelta, 1.0);\n targetCamera.zoom = zoom;\n targetCamera.updateProjectionMatrix();\n }\n\n this.zoomToBox = (box, zoom) => {\n box.getCenter(v1);\n v1.project(camera);\n this.setCenterZoom([v1.x, v1.y], zoom);\n }\n\t \n //return top left and size\n this.getPanZoom = () => {\n return {target: this.getCurrentPosition(), zoom: targetCamera.zoom };\n }\n\n this.setCenterZoom = (center, zoom) => {\n v1.set(center[0], center[1], target.z).unproject(camera);\n v2.copy(v1).sub(targetCamera.target);\n targetCamera.target.copy(v1);\n targetCamera.lookAt(targetCamera.target);\n targetCamera.position.add(v2);\n targetCamera.zoom = zoom;\n targetCamera.updateProjectionMatrix();\n }\n\n this.setEventCallback = (callback) => {\n if (callback === undefined || (typeof callback == 'function'))\n eventCallback = callback;\n }\n\n this.triggerCallback = () => {\n if (eventCallback !== undefined && (typeof eventCallback == 'function'))\n eventCallback();\n }\n};\n\nexports.Viewport = Viewport\nexports.CameraControls = CameraControls\nexports.SmoothCameraTransition = SmoothCameraTransition\nexports.RotateCameraTransition = RotateCameraTransition\nexports.RayCaster = RayCaster\nexports.CameraAutoTumble = CameraAutoTumble\nexports.StereoEffect = StereoEffect\nexports.NDCCameraControl = NDCCameraControl\n","const { Group, Matrix4 } = require('three');\nconst Pointset = require('./primitives/pointset').Pointset;\nconst Lines = require('./primitives/lines').Lines;\nconst Lines2 = require('./primitives/lines2').Lines2;\nconst Geometry = require('./primitives/geometry').Geometry;\nconst THREE = require('three');\nlet uniqueiId = 0;\n\nconst getUniqueId = function () {\n return \"re\" + uniqueiId++;\n}\n\n/**\n * Provides a hierachical structure to objects, Each region\n * may contain multiple child regions and {@link ZincObject}.\n * \n * @class\n * @author Alan Wu\n * @return {Region}\n */\nlet Region = function (parentIn, sceneIn) {\n let parent = parentIn;\n let group = new Group();\n group.matrixAutoUpdate = false;\n group.userData = this;\n let children = [];\n let name = \"\";\n let zincObjects = [];\n let scene = sceneIn;\n const tMatrix = new Matrix4();\n let duration = 3000;\n tMatrix.set(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);\n this.pickableUpdateRequired = true;\n this.isRegion = true;\n this.uuid = getUniqueId();\n \n\n /**\n * Hide all primitives belong to this region.\n */\n this.hideAllPrimitives = () => {\n children.forEach(child => child.hideAllPrimitives());\n zincObjects.forEach(zincObject => zincObject.setVisibility(false));\n }\n\n /**\n * Show all primitives belong to this region.\n */\n this.showAllPrimitives = () => {\n children.forEach(child => child.showAllPrimitives());\n zincObjects.forEach(zincObject => zincObject.setVisibility(true));\n }\n\n /**\n * Set the visibility and propagate it down the hierarchies\n * depending on the flag.\n * \n * @param {Boolean} flag - A flag indicating either the visibilty to be on/off.\n */\n this.setVisibility = (flag) => {\n if (flag != group.visible) {\n group.visible = flag;\n this.pickableUpdateRequired = true;\n }\n }\n\n /**\n * Get the visibility of the region and its children.\n * \n * @return {Boolean}\n */\n this.getVisibility = () => {\n return group.visible;\n }\n\n /**\n * Get the {THREE.Group} containing all child regions and their\n * primitives.\n * \n * @return {THREE.Group}\n */\n this.getGroup = () => {\n return group;\n }\n\n /**\n * Set the transformation with a {THREE.Matrix4} matrix, this will affect\n * all primitives in this and its child regions\n * \n * @param {THREE.Matrix4} transformation - The transformation matrix\n * used for the transformation.\n */\n this.setTransformation = transformation => {\n tMatrix.set(...transformation);\n group.matrix.copy(tMatrix);\n group.updateMatrixWorld();\n }\n\n /**\n * Set the name of this region.\n * \n * @param {String} nameIn - Name to be set for this region. It must be defined\n * and non-empty.\n */\n this.setName = (nameIn) => {\n if (nameIn && nameIn !== \"\") {\n name = nameIn;\n }\n }\n\n /**\n * Get the name of this region.\n * \n * @return {String}\n */\n this.getName = () => {\n return name;\n }\n\n /**\n * Get the parent region.\n * \n * @return {Region}\n */\n this.getParent = () => {\n return parent;\n }\n\n /**\n * Get the array of each hierarachy from the root region to this region.\n * \n * @return {Array}\n */\n this.getFullSeparatedPath = () => {\n const paths = [];\n if (name !== \"\") {\n paths.push(name);\n for (let p = parent; p !== undefined;) {\n const parentName = p.getName();\n if (parentName !== \"\") {\n paths.unshift(parentName);\n }\n p = p.getParent();\n }\n }\n return paths;\n }\n\n /**\n * Get the full paths from the root region to this region.\n * \n * @return {String}\n */\n this.getFullPath = () => {\n const paths = this.getFullSeparatedPath();\n if (paths.length > 0) {\n let fullPath = paths.shift();\n paths.forEach(path => {\n fullPath = fullPath.concat(\"/\", path);\n });\n return fullPath;\n }\n return \"\";\n }\n\n /**\n * Create a new child region with the provided name.\n * @param {String} nameIn - Name to be set for the new child region.\n * \n * @return {Region}\n */\n this.createChild = (nameIn) => {\n let childRegion = new Region(this, scene);\n childRegion.setName(nameIn);\n children.push(childRegion);\n group.add(childRegion.getGroup());\n return childRegion;\n }\n\n /**\n * Get the child region with matching childName.\n * @param {String} childName - Name to be matched.\n * \n * @return {Region}\n */\n this.getChildWithName = childName => {\n if (childName) {\n const lowerChildName = childName.toLowerCase();\n for (let i = 0; i < children.length; i++) {\n if (children[i].getName().toLowerCase() === lowerChildName)\n return children[i];\n }\n }\n return undefined;\n }\n\n /**\n * Find a child region using the path array.\n * @param {Array} pathArray - Array containing regions' name at each\n * hierarchy to match.\n * \n * @return {Region}\n */\n this.findChildFromSeparatedPath = pathArray => {\n if (pathArray && pathArray.length > 0) {\n if (pathArray[0] === \"\") {\n pathArray.shift();\n }\n }\n if (pathArray && pathArray.length > 0) {\n const childRegion = this.getChildWithName(pathArray[0]);\n if (childRegion) {\n pathArray.shift();\n return childRegion.findChildFromSeparatedPath(pathArray);\n } else {\n return undefined;\n }\n }\n return this;\n }\n\n /**\n * Find the region using the provided relative path.\n * \n * @param {String} path - Relative paths from this region\n * to the child region.\n * \n * @return {Region}\n */\n this.findChildFromPath = (path) => {\n const pathArray = path.split(\"/\");\n return this.findChildFromSeparatedPath(pathArray);\n }\n\n /**\n * Create a new child using the path array. All required new regions\n * down the path will be created.\n * \n * @param {Array} pathArray - Array containing regions' name, new regions\n * will be created along the path if not found.\n * \n * @return {Region}\n */\n this.createChildFromSeparatedPath = pathArray => {\n if (pathArray.length > 0) {\n if (pathArray[0] === \"\") {\n pathArray.shift();\n }\n }\n if (pathArray.length > 0) {\n let childRegion = this.getChildWithName(pathArray[0]);\n if (!childRegion) {\n childRegion = this.createChild(pathArray[0]);\n }\n pathArray.shift();\n return childRegion.createChildFromSeparatedPath(pathArray);\n }\n return this;\n }\n\n /**\n * Create a new child using the path. All required new regions\n * down the path will be created.\n * \n * @param {String} path - Relative paths from the region\n * to the child region.\n * \n * @return {Region}\n */\n this.createChildFromPath = (path) => {\n const pathArray = path.split(\"/\");\n return this.createChildFromSeparatedPath(pathArray);\n }\n\n\n /**\n * Return existing region if it exists, otherwise, create a new\n * region with the provided path.\n * \n * @param {String} path - Relative paths from the region\n * to the child region.\n * \n * @return {Region}\n */\n this.findOrCreateChildFromPath = (path) => {\n let childRegion = this.findChildFromPath(path);\n if (!childRegion) {\n childRegion = this.createChildFromPath(path);\n }\n return childRegion;\n }\n\n /**\n * Add a zinc object into this region, the morph will be added\n * to the group.\n * \n * @param {ZincObject} zincObject - Zinc object to be added into\n * this region.\n */\n this.addZincObject = zincObject => {\n if (zincObject) {\n zincObject.setRegion(this);\n group.add(zincObject.getGroup());\n zincObjects.push(zincObject);\n this.pickableUpdateRequired = true;\n if (scene) {\n scene.triggerObjectAddedCallback(zincObject);\n }\n }\n }\n\n\n /**\n * Remove a ZincObject from this region if it presents. This will eventually\n * destroy the object and free up the memory.\n * \n * @param {ZincObject} zincObject - object to be removed from this region.\n */\n this.removeZincObject = zincObject => {\n for (let i = 0; i < zincObjects.length; i++) {\n if (zincObject === zincObjects[i]) {\n group.remove(zincObject.getGroup());\n zincObjects.splice(i, 1);\n if (scene) {\n scene.triggerObjectRemovedCallback(zincObject);\n }\n zincObject.dispose();\n this.pickableUpdateRequired = true;\n return;\n }\n }\n }\n\n /**\n * Return true if pickable objects require an update.\n * \n * @param {Boolean} transverse - Check child regions as well\n * if this is set to true.\n * \n * @return {Boolean}\n */\n this.checkPickableUpdateRequred = (transverse) => {\n if (this.pickableUpdateRequired) return true;\n if (transverse) {\n let flag = false;\n for (let i = 0; i < children.length; i++) {\n flag = children[i].checkPickableUpdateRequred(transverse);\n if (flag) return true;\n }\n }\n return false;\n }\n\n /**\n * Get all pickable objects.\n */\n this.getPickableThreeJSObjects = (objectsList, transverse) => {\n if (group.visible) {\n zincObjects.forEach(zincObject => {\n if (zincObject.isPickable && zincObject.getGroup() && zincObject.getGroup().visible) {\n let marker = zincObject.marker;\n if (marker && marker.isEnabled()) {\n objectsList.push(marker.getMorph());\n }\n objectsList.push(zincObject.getGroup());\n }\n });\n if (transverse) {\n children.forEach(childRegion => {\n childRegion.getPickableThreeJSObjects(objectsList, transverse);\n });\n }\n this.pickableUpdateRequired = false;\n }\n return objectsList;\n }\n\n /**\n * Set the default duration value for all zinc objects\n * that are to be loaded into this region.\n * \n * @param {Number} durationIn - duration of the scene.\n */\n this.setDuration = durationIn => {\n duration = durationIn;\n zincObjects.forEach(zincObject => zincObject.setDuration(durationIn));\n children.forEach(childRegion => childRegion.setDuration(durationIn));\n }\n\n /**\n * Get the default duration value.\n * returns {Number}\n */\n this.getDuration = () => {\n return duration;\n }\n\n /**\n * Get the bounding box of all the object in this and child regions only.\n * Do not include the matrix transformation here, it is done at the primitives\n * level.\n * \n * @returns {THREE.Box3} \n */\n this.getBoundingBox = transverse => {\n let boundingBox1 = undefined, boundingBox2 = undefined;\n zincObjects.forEach(zincObject => {\n boundingBox2 = zincObject.getBoundingBox();\n if (boundingBox2) {\n if (boundingBox1 == undefined) {\n boundingBox1 = boundingBox2.clone();\n } else {\n boundingBox1.union(boundingBox2);\n }\n }\n });\n if (transverse) {\n children.forEach(childRegion => {\n boundingBox2 = childRegion.getBoundingBox(transverse);\n if (boundingBox2) {\n if (boundingBox1 == undefined) {\n boundingBox1 = boundingBox2.clone();\n } else {\n boundingBox1.union(boundingBox2);\n }\n }\n });\n }\n return boundingBox1;\n }\n\n /**\n * Clear and dispose all objects belong to this region.\n * \n * @param {Boolean} transverse - Clear and dispose child regions as well\n * if this is set to true.\n */\n this.clear = transverse => {\n if (transverse) {\n children.forEach(childRegion => childRegion.clear(transverse));\n }\n zincObjects.forEach(zincObject => {\n group.remove(zincObject.getGroup());\n zincObject.dispose();\n });\n children = [];\n zincObjects = [];\n }\n\n /**\n * Check if a zincObject is a member of this region.\n * \n * @param {ZincObject} zincObject - The ZincObject to be checked.\n * @param {Boolean} transverse - Also check the child regions.\n * \n * @return {Boolean}\n */\n this.objectIsInRegion = (zincObject, transverse) => {\n for (let i = 0; i < zincObjects.length; i++) {\n if (zincObject === zincObjects[i]) {\n return true;\n }\n }\n if (transverse) {\n for (let i = 0; i < children.length; i++) {\n if (children[i].objectIsInRegion(zincObject, transverse))\n return true;\n }\n }\n\n return false;\n }\n\n /**\n * A function which iterates through the list of geometries and call the callback\n * function with the geometries as the argument.\n * \n * @param {Function} callbackFunction - Callback function with the geometry\n * as an argument.\n * @param {Boolean} transverse - Also perform the same callback function for\n * all child regions if this is set to be true.\n */\n this.forEachGeometry = (callbackFunction, transverse) => {\n zincObjects.forEach(zincObject => {\n if (zincObject.isGeometry)\n callbackFunction(zincObject);\n });\n if (transverse)\n children.forEach(childRegion => childRegion.forEachGeometry(\n callbackFunction, transverse));\n }\n\n /**\n * A function which iterates through the list of glyphsets and call the callback\n * function with the glyphset as the argument.\n * \n * @param {Function} callbackFunction - Callback function with the glyphset\n * as an argument.\n * @param {Boolean} transverse - Also perform the same callback function for\n * all child regions if this is set to be true.\n */\n this.forEachGlyphset = (callbackFunction, transverse) => {\n zincObjects.forEach(zincObject => {\n if (zincObject.isGlyphset)\n callbackFunction(zincObject);\n });\n if (transverse)\n children.forEach(childRegion => childRegion.forEachGlyphset(\n callbackFunction, transverse));\n }\n\n /**\n * A function which iterates through the list of pointsets and call the callback\n * function with the pointset as the argument.\n * \n * @param {Function} callbackFunction - Callback function with the pointset\n * as an argument.\n * @param {Boolean} transverse - Also perform the same callback function for\n * all child regions if this is set to be true.\n */\n this.forEachPointset = (callbackFunction, transverse) => {\n zincObjects.forEach(zincObject => {\n if (zincObject.isPointset)\n callbackFunction(zincObject);\n });\n if (transverse)\n children.forEach(childRegion => childRegion.forEachPointset(\n callbackFunction, transverse));\n }\n\n /**\n * A function which iterates through the list of lines and call the callback\n * function with the lines as the argument.\n * \n * @param {Function} callbackFunction - Callback function with the lines\n * as an argument.\n * @param {Boolean} transverse - Also perform the same callback function for\n * all child regions if this is set to be true.\n */\n this.forEachLine = (callbackFunction, transverse) => {\n zincObjects.forEach(zincObject => {\n if (zincObject.isLines)\n callbackFunction(zincObject);\n });\n if (transverse)\n children.forEach(childRegion => childRegion.forEachLine(\n callbackFunction, transverse));\n }\n\n this.findObjectsWithAnatomicalId = (anatomicalId, transverse) => {\n const objectsArray = [];\n zincObjects.forEach(zincObject => {\n if (zincObject.anatomicalId === anatomicalId)\n objectsArray.push(zincObject);\n });\n if (transverse) {\n children.forEach(childRegion => {\n let childObjects = childRegion.findObjectsWithAnatomicalId(anatomicalId, transverse);\n objectsArray.push(...childObjects);\n });\n }\n\n return objectsArray;\n }\n\n /** \n * Find and return all zinc objects in this and child regions with \n * the matching GroupName.\n * \n * @param {String} groupName - Groupname to match with.\n * @param {Boolean} transverse - Also look for the object with groupName\n * in child regions if set to true.\n * @returns {Array}\n */\n this.findObjectsWithGroupName = (groupName, transverse) => {\n const objectsArray = [];\n zincObjects.forEach(zincObject => {\n const lowerObjectName = zincObject.groupName ? zincObject.groupName.toLowerCase() : zincObject.groupName;\n const lowerGroupName = groupName ? groupName.toLowerCase() : groupName;\n if (lowerObjectName === lowerGroupName)\n objectsArray.push(zincObject);\n });\n if (transverse) {\n children.forEach(childRegion => {\n let childObjects = childRegion.findObjectsWithGroupName(groupName, transverse);\n objectsArray.push(...childObjects);\n });\n }\n return objectsArray;\n }\n\n /** \n * Find and return all geometries in this and child regions with \n * the matching GroupName.\n * \n * @param {String} groupName - Groupname to match with.\n * @param {Boolean} transverse - Also look for the object with groupName\n * in child regions if set to true.\n * @returns {Array}\n */\n this.findGeometriesWithGroupName = (groupName, transverse) => {\n const primitivesArray = this.findObjectsWithGroupName(groupName, transverse);\n const geometriesArray = primitivesArray.filter(primitive => primitive.isGeometry);\n return geometriesArray;\n }\n\n /** \n * Find and return all pointsets in this and child regions with\n * the matching groupName.\n * \n * @param {String} groupName - Groupname to match with.\n * @param {Boolean} transverse - Also look for the object with groupName\n * in child regions if set to true.\n * @returns {Array}\n */\n this.findPointsetsWithGroupName = (groupName, transverse) => {\n const primitivesArray = this.findObjectsWithGroupName(groupName, transverse);\n const pointsetsArray = primitivesArray.filter(primitive => primitive.isPointset);\n return pointsetsArray;\n }\n\n /** \n * Find and return all glyphsets in this and child regions with\n * the matching groupName.\n * \n * @param {String} groupName - Groupname to match with.\n * @param {Boolean} transverse - Also look for the object with groupName\n * in child regions if set to true.\n * @returns {Array}\n */\n this.findGlyphsetsWithGroupName = (groupName, transverse) => {\n const primitivesArray = this.findObjectsWithGroupName(groupName, transverse);\n const glyphsetsArray = primitivesArray.filter(primitive => primitive.isGlyphset);\n return glyphsetsArray;\n }\n\n /** \n * Find and return all lines in this and child regions with\n * the matching groupName.\n * \n * @param {String} groupName - Groupname to match with.\n * @param {Boolean} transverse - Also look for the object with groupName\n * in child regions if set to true.\n * @returns {Array}\n */\n this.findLinesWithGroupName = (groupName, transverse) => {\n const primitivesArray = this.findObjectsWithGroupName(groupName, transverse);\n const linesArray = primitivesArray.filter(primitive => primitive.isLines);\n return linesArray;\n }\n\n /** \n * Get all zinc objects in this region.\n * \n * @param {Boolean} transverse - Include zinc objects in child regions if this is\n * set to true.\n * @returns {Array}\n */\n this.getAllObjects = transverse => {\n const objectsArray = [...zincObjects];\n if (transverse) {\n children.forEach(childRegion => {\n let childObjects = childRegion.getAllObjects(transverse);\n objectsArray.push(...childObjects);\n });\n }\n return objectsArray;\n }\n\n /** \n * Get all child regions.\n * \n * @param {Boolean} transverse - Include all regions which are descendants of \n * this reigon when this is set to true.\n * @returns {Array}\n */\n this.getChildRegions = transverse => {\n const objectsArray = [...children];\n if (transverse) {\n children.forEach(childRegion => {\n const childObjects = childRegion.getChildRegions(transverse);\n objectsArray.push(...childObjects);\n });\n }\n return objectsArray;\n }\n\n /**\n * Get the current time of the region.\n * Return -1 if no graphics in the region.\n * \n * @return {Number}\n */\n this.getCurrentTime = () => {\n if (zincObjects[0] != undefined) {\n return zincObjects[0].getCurrentTime();\n } else {\n for (let i = 0; i < children.length; i++) {\n const time = children[i].getCurrentTime();\n if (time !== -1)\n return time;\n }\n }\n return -1;\n }\n\n /**\n * Set the current time of all the objects of this region.\n * \n * @param {Number} time - Value to set the time to.\n * @param {Boolean} transverse - Set the time for chidl regions if\n * this is set to true.\n */\n this.setMorphTime = (time, transverse) => {\n zincObjects.forEach(zincObject => {\n zincObject.setMorphTime(time);\n });\n if (transverse) {\n children.forEach(childRegion => {\n childRegion.setMorphTime(time);\n });\n }\n }\n\n /**\n * Check if any object in this region is time varying.\n * \n * @return {Boolean}\n */\n this.isTimeVarying = () => {\n for (let i = 0; i < zincObjects.length; i++) {\n if (zincObjects[i].isTimeVarying()) {\n return true;\n }\n }\n for (let i = 0; i < children.length; i++) {\n if (children[i].isTimeVarying()) {\n return true;\n }\n }\n\n return false;\n }\n\n /**\n * Update geometries and glyphsets based on the calculated time.\n * @private\n */\n this.renderGeometries = (playRate, delta, playAnimation, cameraControls, options, transverse) => {\n // Let video dictates the progress if one is present\n const allObjects = this.getAllObjects(transverse);\n allObjects.forEach(zincObject => {\n zincObject.render(playRate * delta, playAnimation, cameraControls, options);\n });\n //process markers visibility and size, as long as there are more than\n //one entry in markersList is greater than 1, markers have been enabled.\n if (options && (playAnimation === false) &&\n options.markerCluster?.markerUpdateRequired) {\n /** \n const markerDepths = Object.values(options.markersList)\n .map((marker) => marker.ndc.z);\n if (markerDepths.length > 1) {\n const min = Math.min(...markerDepths);\n const max = Math.max(...markerDepths);\n allObjects.forEach(zincObject => {\n zincObject.processMarkerVisual(min, max);\n });\n }\n */\n options.markerCluster.calculate();\n }\n }\n\n /**\n * Update geometries and glyphsets based on the calculated time.\n */\n this.createPoints = ( groupName, coords, labels, colour ) => {\n let isNew = false;\n const zincObjects = this.findObjectsWithGroupName(groupName, false);\n const index = zincObjects.findIndex((zincObject) => zincObject.isPointset);\n const pointset = index > -1 ? zincObjects[index] : new Pointset();\n pointset.addPoints(coords, labels, colour);\n if (index === -1) {\n pointset.setName(groupName);\n this.addZincObject(pointset);\n isNew = true;\n } else {\n this.pickableUpdateRequired = true;\n }\n return { zincObject: pointset, isNew };\n }\n\n /**\n * Update geometries and glyphsets based on the calculated time.\n */\n this.createLines = ( groupName, coords, colour ) => {\n let isNew = false;\n const zincObjects = this.findObjectsWithGroupName(groupName, false);\n const index = zincObjects.findIndex((zincObject) => zincObject.isLines);\n const lines = index > -1 ? zincObjects[index] : new Lines2();\n lines.addLines(coords, colour);\n if (index === -1) {\n lines.setName(groupName);\n this.addZincObject(lines);\n isNew = true;\n } else {\n this.pickableUpdateRequired = true;\n }\n return { zincObject: lines, isNew };\n }\n\n /**\n * Add a new geometry\n */\n this.createGeometryFromThreeJSGeometry = (\n groupName, geometry, colour, opacity, visibility, renderOrder) => {\n const zincGeometry = new Geometry();\n const material = new THREE.MeshPhongMaterial({\n color : colour,\n morphTargets : false,\n morphNormals : false,\n transparent : true,\n opacity : opacity,\n side : THREE.DoubleSide\n });\n zincGeometry.createMesh(\n geometry,\n material,\n {localTimeEnabled: false, localMorphColour: false,},\n );\n if (zincGeometry.getMorph()) {\n zincGeometry.setVisibility(false);\n zincGeometry.setName(groupName);\n zincGeometry.setRenderOrder(renderOrder);\n this.addZincObject(zincGeometry);\n return zincGeometry;\n }\n return undefined;\n }\n}\n\nexports.Region = Region;\n","const THREE = require('three');\nconst toBufferGeometry = require('../utilities').toBufferGeometry;\nconst LineSegments2 = require(\"../three/line/LineSegments2\").LineSegments2;\nconst LineMaterial = require(\"../three/line/LineMaterial\").LineMaterial;\nconst LineSegmentsGeometry = require(\"../three/line/LineSegmentsGeometry\").LineSegmentsGeometry;\n\n/**\n * Provides an object which stores lines.\n * This is created when a valid json file containing lines is read into a {@link Zinc.Scene}\n * object.\n * \n * @class\n * @author Alan Wu\n * @return {Lines}\n */\nconst Lines2 = function () {\n (require('./lines').Lines).call(this);\n\tthis.isLines2 = true;\n let positions = new Array(300);\n\n /**\n * Create the line segements using geometry and material.\n * \n * @param {Array} arrayIn - Geometry of lines to be rendered.\n * @param {THREE.Material} materialIn - Material to be set for the lines.\n * @param {Object} options - Provide various options\n * @param {Boolean} options.localTimeEnabled - A flag to indicate either the lines is\n * time dependent.\n * @param {Boolean} options.localMorphColour - A flag to indicate either the colour is\n * time dependent.\n */\n\tthis.createLineSegment = (arrayIn, materialIn, options) => {\n\t\tif (arrayIn && materialIn) {\n const linesGeometry = new LineSegmentsGeometry();\n linesGeometry.setPositions(arrayIn);\n linesGeometry.colorsNeedUpdate = true;\n const line = new LineSegments2(linesGeometry, materialIn);\n line.scale.set(1, 1, 1);\n line.computeLineDistances();\n this.setMesh(line, options.localTimeEnabled, options.localMorphColour);\n\t\t}\n\t}\n\n /**\n * Set the width for the lines.\n * \n * @param {Number} width - Width of the lines.\n */\n\tthis.setWidth = width => {\n\t\tif (this.morph && this.morph.material) {\n\t\t\tthis.morph.material.linewidth = width;\n\t\t\tthis.morph.material.needsUpdate = true;\n\t\t}\n\t}\n\n /**\n * Add new vertices into the array\n */\n this.addVertices = function(coords) {\n if (coords && coords.length) {\n let mesh = this.getMorph();\n if (!mesh) {\n this.drawRange = 0;\n }\n let index = this.drawRange * 3;\n coords.forEach(coord => {\n positions[index++] = coord[0];\n positions[index++] = coord[1];\n positions[index++] = coord[2];\n this.drawRange++;\n });\n //fill the rest of the array.\n if (!mesh) {\n while (index < 300) {\n positions[index++] = coords[0][0];\n positions[index++] = coords[0][1];\n positions[index++] = coords[0][2];\n }\n }\n\n if (mesh) {\n mesh.geometry.setPositions(positions);\n mesh.computeLineDistances();\n this.boundingBoxUpdateRequired = true;\n }\n }\n return positions;\n }\n\n /**\n * Get the vertices by face index\n */\n this.getVerticesByFaceIndex = function(faceIndex) {\n let vIndex = faceIndex * 2 * 3;\n const mesh = this.getMorph();\n if (mesh && (this.drawRange * 3) > vIndex) {\n const position = mesh.geometry.getAttribute( 'instanceStart' );\n return [\n [\n position.data.array[vIndex],\n position.data.array[++vIndex],\n position.data.array[++vIndex],\n ],\n [\n position.data.array[++vIndex],\n position.data.array[++vIndex],\n position.data.array[++vIndex],\n ],\n ];\n }\n return [];\n }\n\n /**\n * Edit Vertice in index.\n */\n this.editVertices = function(coords, i) {\n if (coords && coords.length) {\n let mesh = this.getMorph();\n const maxIndex = i + coords.length - 1;\n if (!mesh || 0 > i || maxIndex >= this.drawRange) {\n return;\n } else {\n let index = i * 3;\n coords.forEach(coord => {\n positions[index++] = coord[0];\n positions[index++] = coord[1];\n positions[index++] = coord[2];\n });\n index = this.drawRange * 3;\n while (index < 300) {\n positions[index++] = coords[0][0];\n positions[index++] = coords[0][1];\n positions[index++] = coords[0][2];\n }\n mesh.geometry.setPositions(positions);\n mesh.computeLineDistances();\n this.boundingBoxUpdateRequired = true;\n }\n }\n return positions;\n }\n\n /**\n * Add new lines to existing lines if it exists, otherwise\n * create a new one and add to it.\n * @param {Array} coords -An array of three components coordinates.\n\n * @param {Number} colour - A hex value of the colour for the points\n */\n\tthis.addLines = (coords, colour) => {\n if (coords && coords.length > 0) {\n this.addVertices(coords);\n let mesh = this.getMorph();\n if (!mesh) {\n const material = new LineMaterial( {\n color: colour,\n linewidth:1,\n vertexColors: false,\n worldUnits: false,\n });\n material.resolution.set( window.innerWidth, window.innerHeight );\n const options = { localTimeEnabled: false, localMorphColour: false};\n this.createLineSegment(positions, material, options);\n }\n if (this.region) this.region.pickableUpdateRequired = true;\n }\n\t}\n\n this.render = (delta, playAnimation, cameraControls, options) => {\n const material = this.getMorph().material;\n material.resolution.set( window.innerWidth, window.innerHeight );\n }\n}\n\nLines2.prototype = Object.create((require('./lines').Lines).prototype);\nLines2.prototype.constructor = Lines2;\nexports.Lines2 = Lines2;\n","import {\n\tBox3,\n\tInstancedInterleavedBuffer,\n\tInterleavedBufferAttribute,\n\tLine3,\n\tMathUtils,\n\tMatrix4,\n\tMesh,\n\tSphere,\n\tVector3,\n\tVector4\n} from 'three';\nimport { LineSegmentsGeometry } from './LineSegmentsGeometry.js';\nimport { LineMaterial } from './LineMaterial.js';\n\nconst _start = new Vector3();\nconst _end = new Vector3();\n\nconst _start4 = new Vector4();\nconst _end4 = new Vector4();\n\nconst _ssOrigin = new Vector4();\nconst _ssOrigin3 = new Vector3();\nconst _mvMatrix = new Matrix4();\nconst _line = new Line3();\nconst _closestPoint = new Vector3();\n\nconst _box = new Box3();\nconst _sphere = new Sphere();\nconst _clipToWorldVector = new Vector4();\n\nclass LineSegments2 extends Mesh {\n\n\tconstructor( geometry = new LineSegmentsGeometry(), material = new LineMaterial( { color: Math.random() * 0xffffff } ) ) {\n\n\t\tsuper( geometry, material );\n\n\t\tthis.type = 'LineSegments2';\n\n\t}\n\n\t// for backwards-compatability, but could be a method of LineSegmentsGeometry...\n\n\tcomputeLineDistances() {\n\n\t\tconst geometry = this.geometry;\n\n\t\tconst instanceStart = geometry.attributes.instanceStart;\n\t\tconst instanceEnd = geometry.attributes.instanceEnd;\n\t\tconst lineDistances = new Float32Array( 2 * instanceStart.count );\n\n\t\tfor ( let i = 0, j = 0, l = instanceStart.count; i < l; i ++, j += 2 ) {\n\n\t\t\t_start.fromBufferAttribute( instanceStart, i );\n\t\t\t_end.fromBufferAttribute( instanceEnd, i );\n\n\t\t\tlineDistances[ j ] = ( j === 0 ) ? 0 : lineDistances[ j - 1 ];\n\t\t\tlineDistances[ j + 1 ] = lineDistances[ j ] + _start.distanceTo( _end );\n\n\t\t}\n\n\t\tconst instanceDistanceBuffer = new InstancedInterleavedBuffer( lineDistances, 2, 1 ); // d0, d1\n\n\t\tgeometry.setAttribute( 'instanceDistanceStart', new InterleavedBufferAttribute( instanceDistanceBuffer, 1, 0 ) ); // d0\n\t\tgeometry.setAttribute( 'instanceDistanceEnd', new InterleavedBufferAttribute( instanceDistanceBuffer, 1, 1 ) ); // d1\n\n\t\treturn this;\n\n\t}\n\n\traycast( raycaster, intersects ) {\n\n\t\tif ( raycaster.camera === null ) {\n\n\t\t\tconsole.error( 'LineSegments2: \"Raycaster.camera\" needs to be set in order to raycast against LineSegments2.' );\n\n\t\t}\n\n\t\tconst threshold = ( raycaster.params.Line2 !== undefined ) ? raycaster.params.Line2.threshold || 0 : 0;\n\n\t\tconst ray = raycaster.ray;\n\t\tconst camera = raycaster.camera;\n\t\tconst projectionMatrix = camera.projectionMatrix;\n\n\t\tconst matrixWorld = this.matrixWorld;\n\t\tconst geometry = this.geometry;\n\t\tconst material = this.material;\n\t\tconst resolution = material.resolution;\n\t\tconst lineWidth = material.linewidth + threshold;\n\n\t\tconst instanceStart = geometry.attributes.instanceStart;\n\t\tconst instanceEnd = geometry.attributes.instanceEnd;\n\n\t\t// camera forward is negative\n\t\tconst near = - camera.near;\n\n\t\t// clip space is [ - 1, 1 ] so multiply by two to get the full\n\t\t// width in clip space\n\t\tconst ssMaxWidth = 2.0 * Math.max( lineWidth / resolution.width, lineWidth / resolution.height );\n\n\t\t//\n\n\t\t// check if we intersect the sphere bounds\n\t\tif ( geometry.boundingSphere === null ) {\n\n\t\t\tgeometry.computeBoundingSphere();\n\n\t\t}\n\n\t\t_sphere.copy( geometry.boundingSphere ).applyMatrix4( matrixWorld );\n\t\tconst distanceToSphere = Math.max( camera.near, _sphere.distanceToPoint( ray.origin ) );\n\n\t\t// get the w component to scale the world space line width\n\t\t_clipToWorldVector.set( 0, 0, - distanceToSphere, 1.0 ).applyMatrix4( camera.projectionMatrix );\n\t\t_clipToWorldVector.multiplyScalar( 1.0 / _clipToWorldVector.w );\n\t\t_clipToWorldVector.applyMatrix4( camera.projectionMatrixInverse );\n\n\t\t// increase the sphere bounds by the worst case line screen space width\n\t\tconst sphereMargin = Math.abs( ssMaxWidth / _clipToWorldVector.w ) * 0.5;\n\t\t_sphere.radius += sphereMargin;\n\n\t\tif ( raycaster.ray.intersectsSphere( _sphere ) === false ) {\n\n\t\t\treturn;\n\n\t\t}\n\n\t\t//\n\n\t\t// check if we intersect the box bounds\n\t\tif ( geometry.boundingBox === null ) {\n\n\t\t\tgeometry.computeBoundingBox();\n\n\t\t}\n\n\t\t_box.copy( geometry.boundingBox ).applyMatrix4( matrixWorld );\n\t\tconst distanceToBox = Math.max( camera.near, _box.distanceToPoint( ray.origin ) );\n\n\t\t// get the w component to scale the world space line width\n\t\t_clipToWorldVector.set( 0, 0, - distanceToBox, 1.0 ).applyMatrix4( camera.projectionMatrix );\n\t\t_clipToWorldVector.multiplyScalar( 1.0 / _clipToWorldVector.w );\n\t\t_clipToWorldVector.applyMatrix4( camera.projectionMatrixInverse );\n\n\t\t// increase the sphere bounds by the worst case line screen space width\n\t\tconst boxMargin = Math.abs( ssMaxWidth / _clipToWorldVector.w ) * 0.5;\n\t\t_box.max.x += boxMargin;\n\t\t_box.max.y += boxMargin;\n\t\t_box.max.z += boxMargin;\n\t\t_box.min.x -= boxMargin;\n\t\t_box.min.y -= boxMargin;\n\t\t_box.min.z -= boxMargin;\n\n\t\tif ( raycaster.ray.intersectsBox( _box ) === false ) {\n\n\t\t\treturn;\n\n\t\t}\n\n\t\t//\n\n\t\t// pick a point 1 unit out along the ray to avoid the ray origin\n\t\t// sitting at the camera origin which will cause \"w\" to be 0 when\n\t\t// applying the projection matrix.\n\t\tray.at( 1, _ssOrigin );\n\n\t\t// ndc space [ - 1.0, 1.0 ]\n\t\t_ssOrigin.w = 1;\n\t\t_ssOrigin.applyMatrix4( camera.matrixWorldInverse );\n\t\t_ssOrigin.applyMatrix4( projectionMatrix );\n\t\t_ssOrigin.multiplyScalar( 1 / _ssOrigin.w );\n\n\t\t// screen space\n\t\t_ssOrigin.x *= resolution.x / 2;\n\t\t_ssOrigin.y *= resolution.y / 2;\n\t\t_ssOrigin.z = 0;\n\n\t\t_ssOrigin3.copy( _ssOrigin );\n\n\t\t_mvMatrix.multiplyMatrices( camera.matrixWorldInverse, matrixWorld );\n\n\t\tfor ( let i = 0, l = instanceStart.count; i < l; i ++ ) {\n\n\t\t\t_start4.fromBufferAttribute( instanceStart, i );\n\t\t\t_end4.fromBufferAttribute( instanceEnd, i );\n\n\t\t\t_start4.w = 1;\n\t\t\t_end4.w = 1;\n\n\t\t\t// camera space\n\t\t\t_start4.applyMatrix4( _mvMatrix );\n\t\t\t_end4.applyMatrix4( _mvMatrix );\n\n\t\t\t// skip the segment if it's entirely behind the camera\n\t\t\tvar isBehindCameraNear = _start4.z > near && _end4.z > near;\n\t\t\tif ( isBehindCameraNear ) {\n\n\t\t\t\tcontinue;\n\n\t\t\t}\n\n\t\t\t// trim the segment if it extends behind camera near\n\t\t\tif ( _start4.z > near ) {\n\n\t\t\t\tconst deltaDist = _start4.z - _end4.z;\n\t\t\t\tconst t = ( _start4.z - near ) / deltaDist;\n\t\t\t\t_start4.lerp( _end4, t );\n\n\t\t\t} else if ( _end4.z > near ) {\n\n\t\t\t\tconst deltaDist = _end4.z - _start4.z;\n\t\t\t\tconst t = ( _end4.z - near ) / deltaDist;\n\t\t\t\t_end4.lerp( _start4, t );\n\n\t\t\t}\n\n\t\t\t// clip space\n\t\t\t_start4.applyMatrix4( projectionMatrix );\n\t\t\t_end4.applyMatrix4( projectionMatrix );\n\n\t\t\t// ndc space [ - 1.0, 1.0 ]\n\t\t\t_start4.multiplyScalar( 1 / _start4.w );\n\t\t\t_end4.multiplyScalar( 1 / _end4.w );\n\n\t\t\t// screen space\n\t\t\t_start4.x *= resolution.x / 2;\n\t\t\t_start4.y *= resolution.y / 2;\n\n\t\t\t_end4.x *= resolution.x / 2;\n\t\t\t_end4.y *= resolution.y / 2;\n\n\t\t\t// create 2d segment\n\t\t\t_line.start.copy( _start4 );\n\t\t\t_line.start.z = 0;\n\n\t\t\t_line.end.copy( _end4 );\n\t\t\t_line.end.z = 0;\n\n\t\t\t// get closest point on ray to segment\n\t\t\tconst param = _line.closestPointToPointParameter( _ssOrigin3, true );\n\t\t\t_line.at( param, _closestPoint );\n\n\t\t\t// check if the intersection point is within clip space\n\t\t\tconst zPos = MathUtils.lerp( _start4.z, _end4.z, param );\n\t\t\tconst isInClipSpace = zPos >= - 1 && zPos <= 1;\n\n\t\t\tconst isInside = _ssOrigin3.distanceTo( _closestPoint ) < lineWidth * 0.5;\n\n\t\t\tif ( isInClipSpace && isInside ) {\n\n\t\t\t\t_line.start.fromBufferAttribute( instanceStart, i );\n\t\t\t\t_line.end.fromBufferAttribute( instanceEnd, i );\n\n\t\t\t\t_line.start.applyMatrix4( matrixWorld );\n\t\t\t\t_line.end.applyMatrix4( matrixWorld );\n\n\t\t\t\tconst pointOnLine = new Vector3();\n\t\t\t\tconst point = new Vector3();\n\n\t\t\t\tray.distanceSqToSegment( _line.start, _line.end, point, pointOnLine );\n\n\t\t\t\tintersects.push( {\n\n\t\t\t\t\tpoint: point,\n\t\t\t\t\tpointOnLine: pointOnLine,\n\t\t\t\t\tdistance: ray.origin.distanceTo( point ),\n\n\t\t\t\t\tobject: this,\n\t\t\t\t\tface: null,\n\t\t\t\t\tfaceIndex: i,\n\t\t\t\t\tuv: null,\n\t\t\t\t\tuv2: null,\n\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n}\n\nLineSegments2.prototype.LineSegments2 = true;\n\nexport { LineSegments2 };\n","import {\n\tBox3,\n\tFloat32BufferAttribute,\n\tInstancedBufferGeometry,\n\tInstancedInterleavedBuffer,\n\tInterleavedBufferAttribute,\n\tSphere,\n\tVector3,\n\tWireframeGeometry\n} from 'three';\n\nconst _box = new Box3();\nconst _vector = new Vector3();\n\nclass LineSegmentsGeometry extends InstancedBufferGeometry {\n\n\tconstructor() {\n\n\t\tsuper();\n\n\t\tthis.type = 'LineSegmentsGeometry';\n\n\t\tconst positions = [ - 1, 2, 0, 1, 2, 0, - 1, 1, 0, 1, 1, 0, - 1, 0, 0, 1, 0, 0, - 1, - 1, 0, 1, - 1, 0 ];\n\t\tconst uvs = [ - 1, 2, 1, 2, - 1, 1, 1, 1, - 1, - 1, 1, - 1, - 1, - 2, 1, - 2 ];\n\t\tconst index = [ 0, 2, 1, 2, 3, 1, 2, 4, 3, 4, 5, 3, 4, 6, 5, 6, 7, 5 ];\n\n\t\tthis.setIndex( index );\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( positions, 3 ) );\n\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\t}\n\n\tapplyMatrix4( matrix ) {\n\n\t\tconst start = this.attributes.instanceStart;\n\t\tconst end = this.attributes.instanceEnd;\n\n\t\tif ( start !== undefined ) {\n\n\t\t\tstart.applyMatrix4( matrix );\n\n\t\t\tend.applyMatrix4( matrix );\n\n\t\t\tstart.needsUpdate = true;\n\n\t\t}\n\n\t\tif ( this.boundingBox !== null ) {\n\n\t\t\tthis.computeBoundingBox();\n\n\t\t}\n\n\t\tif ( this.boundingSphere !== null ) {\n\n\t\t\tthis.computeBoundingSphere();\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tsetPositions( array ) {\n\n\t\tlet lineSegments;\n\n\t\tif ( array instanceof Float32Array ) {\n\n\t\t\tlineSegments = array;\n\n\t\t} else if ( Array.isArray( array ) ) {\n\n\t\t\tlineSegments = new Float32Array( array );\n\n\t\t}\n\n\t\tconst instanceBuffer = new InstancedInterleavedBuffer( lineSegments, 6, 1 ); // xyz, xyz\n\n\t\tthis.setAttribute( 'instanceStart', new InterleavedBufferAttribute( instanceBuffer, 3, 0 ) ); // xyz\n\t\tthis.setAttribute( 'instanceEnd', new InterleavedBufferAttribute( instanceBuffer, 3, 3 ) ); // xyz\n\n\t\t//\n\n\t\tthis.computeBoundingBox();\n\t\tthis.computeBoundingSphere();\n\n\t\treturn this;\n\n\t}\n\n\tsetColors( array ) {\n\n\t\tlet colors;\n\n\t\tif ( array instanceof Float32Array ) {\n\n\t\t\tcolors = array;\n\n\t\t} else if ( Array.isArray( array ) ) {\n\n\t\t\tcolors = new Float32Array( array );\n\n\t\t}\n\n\t\tconst instanceColorBuffer = new InstancedInterleavedBuffer( colors, 6, 1 ); // rgb, rgb\n\n\t\tthis.setAttribute( 'instanceColorStart', new InterleavedBufferAttribute( instanceColorBuffer, 3, 0 ) ); // rgb\n\t\tthis.setAttribute( 'instanceColorEnd', new InterleavedBufferAttribute( instanceColorBuffer, 3, 3 ) ); // rgb\n\n\t\treturn this;\n\n\t}\n\n\tfromWireframeGeometry( geometry ) {\n\n\t\tthis.setPositions( geometry.attributes.position.array );\n\n\t\treturn this;\n\n\t}\n\n\tfromEdgesGeometry( geometry ) {\n\n\t\tthis.setPositions( geometry.attributes.position.array );\n\n\t\treturn this;\n\n\t}\n\n\tfromMesh( mesh ) {\n\n\t\tthis.fromWireframeGeometry( new WireframeGeometry( mesh.geometry ) );\n\n\t\t// set colors, maybe\n\n\t\treturn this;\n\n\t}\n\n\tfromLineSegments( lineSegments ) {\n\n\t\tconst geometry = lineSegments.geometry;\n\n\t\tif ( geometry.isGeometry ) {\n\n\t\t\tconsole.error( 'THREE.LineSegmentsGeometry no longer supports Geometry. Use THREE.BufferGeometry instead.' );\n\t\t\treturn;\n\n\t\t} else if ( geometry.isBufferGeometry ) {\n\n\t\t\tthis.setPositions( geometry.attributes.position.array ); // assumes non-indexed\n\n\t\t}\n\n\t\t// set colors, maybe\n\n\t\treturn this;\n\n\t}\n\n\tcomputeBoundingBox() {\n\n\t\tif ( this.boundingBox === null ) {\n\n\t\t\tthis.boundingBox = new Box3();\n\n\t\t}\n\n\t\tconst start = this.attributes.instanceStart;\n\t\tconst end = this.attributes.instanceEnd;\n\n\t\tif ( start !== undefined && end !== undefined ) {\n\n\t\t\tthis.boundingBox.setFromBufferAttribute( start );\n\n\t\t\t_box.setFromBufferAttribute( end );\n\n\t\t\tthis.boundingBox.union( _box );\n\n\t\t}\n\n\t}\n\n\tcomputeBoundingSphere() {\n\n\t\tif ( this.boundingSphere === null ) {\n\n\t\t\tthis.boundingSphere = new Sphere();\n\n\t\t}\n\n\t\tif ( this.boundingBox === null ) {\n\n\t\t\tthis.computeBoundingBox();\n\n\t\t}\n\n\t\tconst start = this.attributes.instanceStart;\n\t\tconst end = this.attributes.instanceEnd;\n\n\t\tif ( start !== undefined && end !== undefined ) {\n\n\t\t\tconst center = this.boundingSphere.center;\n\n\t\t\tthis.boundingBox.getCenter( center );\n\n\t\t\tlet maxRadiusSq = 0;\n\n\t\t\tfor ( let i = 0, il = start.count; i < il; i ++ ) {\n\n\t\t\t\t_vector.fromBufferAttribute( start, i );\n\t\t\t\tmaxRadiusSq = Math.max( maxRadiusSq, center.distanceToSquared( _vector ) );\n\n\t\t\t\t_vector.fromBufferAttribute( end, i );\n\t\t\t\tmaxRadiusSq = Math.max( maxRadiusSq, center.distanceToSquared( _vector ) );\n\n\t\t\t}\n\n\t\t\tthis.boundingSphere.radius = Math.sqrt( maxRadiusSq );\n\n\t\t\tif ( isNaN( this.boundingSphere.radius ) ) {\n\n\t\t\t\tconsole.error( 'THREE.LineSegmentsGeometry.computeBoundingSphere(): Computed radius is NaN. The instanced position data is likely to have NaN values.', this );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\ttoJSON() {\n\n\t\t// todo\n\n\t}\n\n\tapplyMatrix( matrix ) {\n\n\t\tconsole.warn( 'THREE.LineSegmentsGeometry: applyMatrix() has been renamed to applyMatrix4().' );\n\n\t\treturn this.applyMatrix4( matrix );\n\n\t}\n\n}\n\nLineSegmentsGeometry.prototype.isLineSegmentsGeometry = true;\n\nexport { LineSegmentsGeometry };\n","import {\n\tShaderLib,\n\tShaderMaterial,\n\tUniformsLib,\n\tUniformsUtils,\n\tVector2\n} from 'three';\n\n/**\n * parameters = {\n * color: ,\n * linewidth: ,\n * dashed: ,\n * dashScale: ,\n * dashSize: ,\n * dashOffset: ,\n * gapSize: ,\n * resolution: , // to be set by renderer\n * }\n */\n\nUniformsLib.line = {\n\n\tlinewidth: { value: 1 },\n\tresolution: { value: new Vector2( 1, 1 ) },\n\tdashScale: { value: 1 },\n\tdashSize: { value: 1 },\n\tdashOffset: { value: 0 },\n\tgapSize: { value: 1 }, // todo FIX - maybe change to totalSize\n\topacity: { value: 1 }\n\n};\n\nShaderLib[ 'line' ] = {\n\n\tuniforms: UniformsUtils.merge( [\n\t\tUniformsLib.common,\n\t\tUniformsLib.fog,\n\t\tUniformsLib.line\n\t] ),\n\n\tvertexShader: /* glsl */`\n\t\t#include \n\t\t#include \n\t\t#include \n\t\t#include \n\t\t#include \n\n\t\tuniform float linewidth;\n\t\tuniform vec2 resolution;\n\n\t\tattribute vec3 instanceStart;\n\t\tattribute vec3 instanceEnd;\n\n\t\tattribute vec3 instanceColorStart;\n\t\tattribute vec3 instanceColorEnd;\n\n\t\tvarying vec2 vUv;\n\n\t\t#ifdef USE_DASH\n\n\t\t\tuniform float dashScale;\n\t\t\tattribute float instanceDistanceStart;\n\t\t\tattribute float instanceDistanceEnd;\n\t\t\tvarying float vLineDistance;\n\n\t\t#endif\n\n\t\tvoid trimSegment( const in vec4 start, inout vec4 end ) {\n\n\t\t\t// trim end segment so it terminates between the camera plane and the near plane\n\n\t\t\t// conservative estimate of the near plane\n\t\t\tfloat a = projectionMatrix[ 2 ][ 2 ]; // 3nd entry in 3th column\n\t\t\tfloat b = projectionMatrix[ 3 ][ 2 ]; // 3nd entry in 4th column\n\t\t\tfloat nearEstimate = - 0.5 * b / a;\n\n\t\t\tfloat alpha = ( nearEstimate - start.z ) / ( end.z - start.z );\n\n\t\t\tend.xyz = mix( start.xyz, end.xyz, alpha );\n\n\t\t}\n\n\t\tvoid main() {\n\n\t\t\t#ifdef USE_COLOR\n\n\t\t\t\tvColor.xyz = ( position.y < 0.5 ) ? instanceColorStart : instanceColorEnd;\n\n\t\t\t#endif\n\n\t\t\t#ifdef USE_DASH\n\n\t\t\t\tvLineDistance = ( position.y < 0.5 ) ? dashScale * instanceDistanceStart : dashScale * instanceDistanceEnd;\n\n\t\t\t#endif\n\n\t\t\tfloat aspect = resolution.x / resolution.y;\n\n\t\t\tvUv = uv;\n\n\t\t\t// camera space\n\t\t\tvec4 start = modelViewMatrix * vec4( instanceStart, 1.0 );\n\t\t\tvec4 end = modelViewMatrix * vec4( instanceEnd, 1.0 );\n\n\t\t\t// special case for perspective projection, and segments that terminate either in, or behind, the camera plane\n\t\t\t// clearly the gpu firmware has a way of addressing this issue when projecting into ndc space\n\t\t\t// but we need to perform ndc-space calculations in the shader, so we must address this issue directly\n\t\t\t// perhaps there is a more elegant solution -- WestLangley\n\n\t\t\tbool perspective = ( projectionMatrix[ 2 ][ 3 ] == - 1.0 ); // 4th entry in the 3rd column\n\n\t\t\tif ( perspective ) {\n\n\t\t\t\tif ( start.z < 0.0 && end.z >= 0.0 ) {\n\n\t\t\t\t\ttrimSegment( start, end );\n\n\t\t\t\t} else if ( end.z < 0.0 && start.z >= 0.0 ) {\n\n\t\t\t\t\ttrimSegment( end, start );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// clip space\n\t\t\tvec4 clipStart = projectionMatrix * start;\n\t\t\tvec4 clipEnd = projectionMatrix * end;\n\n\t\t\t// ndc space\n\t\t\tvec2 ndcStart = clipStart.xy / clipStart.w;\n\t\t\tvec2 ndcEnd = clipEnd.xy / clipEnd.w;\n\n\t\t\t// direction\n\t\t\tvec2 dir = ndcEnd - ndcStart;\n\n\t\t\t// account for clip-space aspect ratio\n\t\t\tdir.x *= aspect;\n\t\t\tdir = normalize( dir );\n\n\t\t\t// perpendicular to dir\n\t\t\tvec2 offset = vec2( dir.y, - dir.x );\n\n\t\t\t// undo aspect ratio adjustment\n\t\t\tdir.x /= aspect;\n\t\t\toffset.x /= aspect;\n\n\t\t\t// sign flip\n\t\t\tif ( position.x < 0.0 ) offset *= - 1.0;\n\n\t\t\t// endcaps\n\t\t\tif ( position.y < 0.0 ) {\n\n\t\t\t\toffset += - dir;\n\n\t\t\t} else if ( position.y > 1.0 ) {\n\n\t\t\t\toffset += dir;\n\n\t\t\t}\n\n\t\t\t// adjust for linewidth\n\t\t\toffset *= linewidth;\n\n\t\t\t// adjust for clip-space to screen-space conversion // maybe resolution should be based on viewport ...\n\t\t\toffset /= resolution.y;\n\n\t\t\t// select end\n\t\t\tvec4 clip = ( position.y < 0.5 ) ? clipStart : clipEnd;\n\n\t\t\t// back to clip space\n\t\t\toffset *= clip.w;\n\n\t\t\tclip.xy += offset;\n\n\t\t\tgl_Position = clip;\n\n\t\t\tvec4 mvPosition = ( position.y < 0.5 ) ? start : end; // this is an approximation\n\n\t\t\t#include \n\t\t\t#include \n\t\t\t#include \n\n\t\t}`,\n\n\tfragmentShader: /* glsl */`\n\t\tuniform vec3 diffuse;\n\t\tuniform float opacity;\n\n\t\t#ifdef USE_DASH\n\n\t\t\tuniform float dashSize;\n\t\t\tuniform float dashOffset;\n\t\t\tuniform float gapSize;\n\n\t\t#endif\n\n\t\tvarying float vLineDistance;\n\n\t\t#include \n\t\t#include \n\t\t#include \n\t\t#include \n\t\t#include \n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\t#include \n\n\t\t\t#ifdef USE_DASH\n\n\t\t\t\tif ( vUv.y < - 1.0 || vUv.y > 1.0 ) discard; // discard endcaps\n\n\t\t\t\tif ( mod( vLineDistance + dashOffset, dashSize + gapSize ) > dashSize ) discard; // todo - FIX\n\n\t\t\t#endif\n\n\t\t\tfloat alpha = opacity;\n\n\t\t\t#ifdef ALPHA_TO_COVERAGE\n\n\t\t\t// artifacts appear on some hardware if a derivative is taken within a conditional\n\t\t\tfloat a = vUv.x;\n\t\t\tfloat b = ( vUv.y > 0.0 ) ? vUv.y - 1.0 : vUv.y + 1.0;\n\t\t\tfloat len2 = a * a + b * b;\n\t\t\tfloat dlen = fwidth( len2 );\n\n\t\t\tif ( abs( vUv.y ) > 1.0 ) {\n\n\t\t\t\talpha = 1.0 - smoothstep( 1.0 - dlen, 1.0 + dlen, len2 );\n\n\t\t\t}\n\n\t\t\t#else\n\n\t\t\tif ( abs( vUv.y ) > 1.0 ) {\n\n\t\t\t\tfloat a = vUv.x;\n\t\t\t\tfloat b = ( vUv.y > 0.0 ) ? vUv.y - 1.0 : vUv.y + 1.0;\n\t\t\t\tfloat len2 = a * a + b * b;\n\n\t\t\t\tif ( len2 > 1.0 ) discard;\n\n\t\t\t}\n\n\t\t\t#endif\n\n\t\t\tvec4 diffuseColor = vec4( diffuse, alpha );\n\n\t\t\t#include \n\t\t\t#include \n\n\t\t\tgl_FragColor = vec4( diffuseColor.rgb, alpha );\n\n\t\t\t#include \n\t\t\t#include \n\t\t\t#include \n\t\t\t#include \n\n\t\t}`\n\n};\n\nclass LineMaterial extends ShaderMaterial {\n\n\tconstructor( parameters ) {\n\n\t\tsuper( {\n\n\t\t\ttype: 'LineMaterial',\n\n\t\t\tuniforms: UniformsUtils.clone( ShaderLib[ 'line' ].uniforms ),\n\n\t\t\tvertexShader: ShaderLib[ 'line' ].vertexShader,\n\t\t\tfragmentShader: ShaderLib[ 'line' ].fragmentShader,\n\n\t\t\tclipping: true // required for clipping support\n\n\t\t} );\n\n\t\tObject.defineProperties( this, {\n\n\t\t\tcolor: {\n\n\t\t\t\tenumerable: true,\n\n\t\t\t\tget: function () {\n\n\t\t\t\t\treturn this.uniforms.diffuse.value;\n\n\t\t\t\t},\n\n\t\t\t\tset: function ( value ) {\n\n\t\t\t\t\tthis.uniforms.diffuse.value = value;\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\tlinewidth: {\n\n\t\t\t\tenumerable: true,\n\n\t\t\t\tget: function () {\n\n\t\t\t\t\treturn this.uniforms.linewidth.value;\n\n\t\t\t\t},\n\n\t\t\t\tset: function ( value ) {\n\n\t\t\t\t\tthis.uniforms.linewidth.value = value;\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\tdashed: {\n\n\t\t\t\tenumerable: true,\n\n\t\t\t\tget: function () {\n\n\t\t\t\t\treturn Boolean( 'USE_DASH' in this.defines );\n\n\t\t\t\t},\n\n\t\t\t\tset( value ) {\n\n\t\t\t\t\tif ( Boolean( value ) !== Boolean( 'USE_DASH' in this.defines ) ) {\n\n\t\t\t\t\t\tthis.needsUpdate = true;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( value === true ) {\n\n\t\t\t\t\t\tthis.defines.USE_DASH = '';\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tdelete this.defines.USE_DASH;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\tdashScale: {\n\n\t\t\t\tenumerable: true,\n\n\t\t\t\tget: function () {\n\n\t\t\t\t\treturn this.uniforms.dashScale.value;\n\n\t\t\t\t},\n\n\t\t\t\tset: function ( value ) {\n\n\t\t\t\t\tthis.uniforms.dashScale.value = value;\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\tdashSize: {\n\n\t\t\t\tenumerable: true,\n\n\t\t\t\tget: function () {\n\n\t\t\t\t\treturn this.uniforms.dashSize.value;\n\n\t\t\t\t},\n\n\t\t\t\tset: function ( value ) {\n\n\t\t\t\t\tthis.uniforms.dashSize.value = value;\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\tdashOffset: {\n\n\t\t\t\tenumerable: true,\n\n\t\t\t\tget: function () {\n\n\t\t\t\t\treturn this.uniforms.dashOffset.value;\n\n\t\t\t\t},\n\n\t\t\t\tset: function ( value ) {\n\n\t\t\t\t\tthis.uniforms.dashOffset.value = value;\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\tgapSize: {\n\n\t\t\t\tenumerable: true,\n\n\t\t\t\tget: function () {\n\n\t\t\t\t\treturn this.uniforms.gapSize.value;\n\n\t\t\t\t},\n\n\t\t\t\tset: function ( value ) {\n\n\t\t\t\t\tthis.uniforms.gapSize.value = value;\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\topacity: {\n\n\t\t\t\tenumerable: true,\n\n\t\t\t\tget: function () {\n\n\t\t\t\t\treturn this.uniforms.opacity.value;\n\n\t\t\t\t},\n\n\t\t\t\tset: function ( value ) {\n\n\t\t\t\t\tthis.uniforms.opacity.value = value;\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\tresolution: {\n\n\t\t\t\tenumerable: true,\n\n\t\t\t\tget: function () {\n\n\t\t\t\t\treturn this.uniforms.resolution.value;\n\n\t\t\t\t},\n\n\t\t\t\tset: function ( value ) {\n\n\t\t\t\t\tthis.uniforms.resolution.value.copy( value );\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\talphaToCoverage: {\n\n\t\t\t\tenumerable: true,\n\n\t\t\t\tget: function () {\n\n\t\t\t\t\treturn Boolean( 'ALPHA_TO_COVERAGE' in this.defines );\n\n\t\t\t\t},\n\n\t\t\t\tset: function ( value ) {\n\n\t\t\t\t\tif ( Boolean( value ) !== Boolean( 'ALPHA_TO_COVERAGE' in this.defines ) ) {\n\n\t\t\t\t\t\tthis.needsUpdate = true;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( value === true ) {\n\n\t\t\t\t\t\tthis.defines.ALPHA_TO_COVERAGE = '';\n\t\t\t\t\t\tthis.extensions.derivatives = true;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tdelete this.defines.ALPHA_TO_COVERAGE;\n\t\t\t\t\t\tthis.extensions.derivatives = false;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} );\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n}\n\nLineMaterial.prototype.isLineMaterial = true;\n\nexport { LineMaterial };\n","const THREE = require('three');\n\n/**\n * This provide a full scale minimap. It will always\n * display the whole map.\n * \n * @class\n * @author Alan Wu\n * @return {Minimap}\n */\nexports.Minimap = function (sceneIn) {\n let targetScene = sceneIn;\n this.camera = new THREE.OrthographicCamera(\n -0.5, 0.5, 0.5, -0.5, 0.01, 10);\n this.helper = undefined;\n let geometry = new THREE.BufferGeometry();\n var vertices = new Float32Array( [\n -1.0, -1.0, 1.0,\n 1.0, -1.0, 1.0,\n 1.0, 1.0, 1.0,\n 1.0, 1.0, 1.0,\n -1.0, 1.0, 1.0,\n -1.0, -1.0, 1.0\n ] );\n let positionAttributes = new THREE.BufferAttribute( vertices, 3 );\n geometry.setAttribute( 'position', positionAttributes);\n var material = new THREE.MeshBasicMaterial( { color: 0x333333, \n depthTest: false,\n depthWrite: false,\n opacity: 0.5,\n transparent: true } );\n this.mask = new THREE.Mesh( geometry, material );\n let _box = new THREE.Box3();\n let _center = new THREE.Vector3();\n\n this.getDiffFromNormalised = (x, y) => {\n _box.setFromBufferAttribute(positionAttributes).getCenter(_center);\n let coord = _center.clone().project(this.camera);\n let new_coord = new THREE.Vector3(x, y, coord.z).unproject(this.camera);\n return new_coord.sub(_center);\n }\n\n let setCurrentCameraSettings = (diameter, newViewport) => {\n if (targetScene.camera.near)\n this.camera.near = targetScene.camera.near;\n if (newViewport.farPlane)\n this.camera.far = newViewport.farPlane;\n if (newViewport.eyePosition)\n this.camera.position.set(newViewport.eyePosition[0],\n newViewport.eyePosition[1], newViewport.eyePosition[2]);\n if (newViewport.upVector)\n this.camera.up.set(newViewport.upVector[0], newViewport.upVector[1],\n newViewport.upVector[2]);\n if (newViewport.targetPosition)\n this.camera.lookAt(new THREE.Vector3(newViewport.targetPosition[0],\n newViewport.targetPosition[1], newViewport.targetPosition[2]));\n this.camera.zoom = 1 / diameter;\n this.camera.updateProjectionMatrix();\n }\n\n this.getBoundary = () => {\n let target = new THREE.Vector3().copy(\n targetScene.camera.target).project(targetScene.camera);\n let v1 = new THREE.Vector3(-1, -1, target.z).unproject(targetScene.camera);\n let v2 = new THREE.Vector3(1, -1, target.z).unproject(targetScene.camera);\n let v3 = new THREE.Vector3(1, 1, target.z).unproject(targetScene.camera);\n let v4 = new THREE.Vector3(-1, 1, target.z).unproject(targetScene.camera);\n let array = [v1, v2, v3, v3, v4, v1];\n positionAttributes.copyVector3sArray(array);\n positionAttributes.needsUpdate = true;\n }\n\n this.updateCamera = () => {\n this.getBoundary();\n let cameraControl = targetScene.getZincCameraControls();\n let boundingBox = targetScene.getBoundingBox();\n if (boundingBox) {\n // enlarge radius to keep image within edge of window\n const diameter = boundingBox.min.distanceTo(boundingBox.max);\n const radius = diameter / 2.0;\n const centreX = (boundingBox.min.x + boundingBox.max.x) / 2.0;\n const centreY = (boundingBox.min.y + boundingBox.max.y) / 2.0;\n const centreZ = (boundingBox.min.z + boundingBox.max.z) / 2.0;\n const clip_factor = 4.0;\n const viewport = cameraControl.getViewportFromCentreAndRadius(\n centreX, centreY, centreZ, radius, 40, radius * clip_factor);\n setCurrentCameraSettings(diameter, viewport);\n }\n }\n}\n","const THREE = require('three');\nconst ThreeBSP = require('./three-js-csg')(THREE);\nconst Geometry = require('./primitives/geometry').Geometry;\nconst work = require('webworkify-webpack');\nconst Promise = require('promise-polyfill').default;\n//const work = undefined;\nconst JSONLoader = THREE.BufferGeometryLoader;\n\nconst GeometryCSG = function (hostIn) {\n //ZincGeoemtry of the main geometry\n let host = undefined;\n if (hostIn && hostIn.isGeometry)\n\thost = hostIn;\n let core = undefined;\n let worker = undefined;\n let onProgress = false;\n let myResolve = undefined;\n \n var createGeometryFromJSON = json => {\n\t const material = host.getMorph().material.clone();\n\t material.morphTargets = false;\n\t const newGeometry = new Geometry();\n\t\tconst JSONParser = new JSONLoader();\n\t\tconst geometry = JSONParser.parse(json);\n const mesh = new THREE.Mesh(geometry.geometry, material);\n\t newGeometry.geometry = mesh.geometry;\n mesh.userData = newGeometry;\n\t newGeometry.setMorph(mesh);\n\t return newGeometry;\n }\n \n var workerEventHandler = ev => {\n\t switch (ev.data.action) {\n\t \tcase 'message':\n\t console.log(ev.data.message);\n\t break;\n\t \tcase 'result':\n\t \tconst csg = new GeometryCSG(createGeometryFromJSON(ev.data.object));\n\t \tif (myResolve)\n\t \t\tmyResolve(csg);\n\t \tmyResolve = undefined;\n\t \tonProgress = false;\n\t break;\n\t \tdefault:\n\t \tthrow 'Cannot handle specified action.';\n }\n }\n \n var initialise = hostIn => {\n\t if (work !== undefined) {\n\t\tworker = work(require.resolve('./workers/geometryCSG.worker.js'));\n\t }\n\t if (!worker) {\n\t core = new (require('./workers/geometryCSGInternal').GeometryCSGInternal)(hostIn);\n\t } else {\n\t\tif (hostIn && hostIn.isGeometry) {\n\t\t let mesh = hostIn.getMorph();\n\t\t let json = mesh.geometry.clone().applyMatrix(mesh.matrix).toJSON();\n\t\t worker.addEventListener('message', function (ev) {\n\t\t\t workerEventHandler(ev);\n\t\t });\n\t\t worker.postMessage({action: \"initialise\", object: json});\n\t\t}\n\t }\n }\n \n this.getHostGeometry = () => {\n\tconst tempCSG = new ThreeBSP(host.getMorph());\n return new createZincGeometry(tempCSG);\n }\n \n this.getGeometry = () => host;\n \n const createZincGeometry = csgMesh => {\n\t\tconst material = host.getMorph().material.clone();\n\t\tmaterial.morphTargets = false;\n\t\tconst newMesh = csgMesh.toMesh(material);\n\t const newGeometry = new Geometry();\n\t newGeometry.geometry = newMesh.geometry;\n\t newMesh.userData = newGeometry;\n\t newGeometry.setMorph(newMesh);\n\t return newGeometry;\n }\n \n this.setCSG = CSG => {\n\t core.setCSG(CSG);\n } \n \n const sendToWork = (guestGeometry, action, resolve, reject) => {\n\t if (!onProgress) {\n\t\t let mesh = guestGeometry.getMorph();\n\t\t const json = mesh.geometry.clone().applyMatrix(mesh.matrix).toJSON();\n\t\t myResolve = resolve;\n\t\t onProgress = true;\n\t\t worker.postMessage({action: action, object: json});\n\t } else {\n\t\t reject(\"On progress\");\n\t }\n }\n \n this.intersect = guestGeometry => {\n\t return new Promise((resolve, reject) => {\n\t\t if (worker) {\n\t\t\t sendToWork(guestGeometry, \"intersect\", resolve, reject);\n\t\t } else {\n\t\t\t const result = core.intersect(guestGeometry);\n\t\t\t const newCSG = new GeometryCSG(createZincGeometry(result));\n\t\t\t newCSG.setCSG(result);\n\t\t\t resolve(newCSG);\n\t\t }\n\t });\n\t};\n \n this.subtract = guestGeometry => {\n\t return new Promise((resolve, reject) => {\n\t\t if (worker) {\n\t\t\t sendToWork(guestGeometry, \"intersect\", resolve, reject);\n\t\t } else {\n\t\t\t const result = core.subtract(guestGeometry);\n\t\t\t const newCSG = new GeometryCSG(createZincGeometry(result));\n\t\t\t newCSG.setCSG(result);\n\t\t\t resolve(newCSG);\n\t\t }\n\t });\n }\n \n this.union = guestGeometry => {\n\t return new Promise((resolve, reject) => {\n\t\t if (worker) {\n\t\t\t sendToWork(guestGeometry, \"intersect\", resolve, reject);\n\t\t } else {\n\t\t\t const result = core.union(guestGeometry);\n\t\t\t const newCSG = new GeometryCSG(createZincGeometry(result));\n\t\t\t newCSG.setCSG(result);\n\t\t\t resolve(newCSG);\n\t\t }\n\t });\n }\n \n this.terminateWorker = () => {\n\t if (worker)\n\t\t worker.terminate();\n }\n \n initialise(hostIn);\n};\n\nexports.GeometryCSG = GeometryCSG;\n","'use strict';\n\t\n\tvar ThreeBSP,\n\t\tEPSILON = 1e-5,\n\t\tCOPLANAR = 0,\n\t\tFRONT = 1,\n\t\tBACK = 2,\n\t\tSPANNING = 3;\n\t\n module.exports = function( THREE ) {\n var ThreeBSP = function( geometry ) {\n // Convert THREE.Geometry to ThreeBSP\n var i, _length_i,\n face, vertex, faceVertexUvs, uvs,\n polygon,\n polygons = [],\n tree;\n \n if (geometry.isBufferGeometry)\n geometry = new THREE.Geometry().fromBufferGeometry(geometry);\n if ( geometry instanceof THREE.Geometry ) {\n this.matrix = new THREE.Matrix4;\n } else if ( geometry.isMesh ) {\n // #todo: add hierarchy support\n geometry.updateMatrix();\n this.matrix = geometry.matrix.clone();\n geometry = geometry.geometry;\n if (geometry.isBufferGeometry)\n geometry = new THREE.Geometry().fromBufferGeometry(geometry);\n geometry.mergeVertices();\n geometry.computeVertexNormals(false);\n } else if ( geometry instanceof ThreeBSP.Node ) {\n this.tree = geometry;\n this.matrix = new THREE.Matrix4;\n return this;\n } else {\n throw 'ThreeBSP: Given geometry is unsupported';\n }\n \n for ( i = 0, _length_i = geometry.faces.length; i < _length_i; i++ ) {\n face = geometry.faces[i];\n faceVertexUvs = geometry.faceVertexUvs[0][i];\n polygon = new ThreeBSP.Polygon;\n \n if ( face instanceof THREE.Face3 ) {\n vertex = geometry.vertices[ face.a ];\n uvs = faceVertexUvs ? new THREE.Vector2( faceVertexUvs[0].x, faceVertexUvs[0].y ) : null;\n vertex = new ThreeBSP.Vertex( vertex.x, vertex.y, vertex.z, face.vertexNormals[0], uvs );\n vertex.applyMatrix4(this.matrix);\n polygon.vertices.push( vertex );\n \n vertex = geometry.vertices[ face.b ];\n uvs = faceVertexUvs ? new THREE.Vector2( faceVertexUvs[1].x, faceVertexUvs[1].y ) : null;\n vertex = new ThreeBSP.Vertex( vertex.x, vertex.y, vertex.z, face.vertexNormals[2], uvs );\n vertex.applyMatrix4(this.matrix);\n polygon.vertices.push( vertex );\n \n vertex = geometry.vertices[ face.c ];\n uvs = faceVertexUvs ? new THREE.Vector2( faceVertexUvs[2].x, faceVertexUvs[2].y ) : null;\n vertex = new ThreeBSP.Vertex( vertex.x, vertex.y, vertex.z, face.vertexNormals[2], uvs );\n vertex.applyMatrix4(this.matrix);\n polygon.vertices.push( vertex );\n } else if ( typeof THREE.Face4 ) {\n vertex = geometry.vertices[ face.a ];\n uvs = faceVertexUvs ? new THREE.Vector2( faceVertexUvs[0].x, faceVertexUvs[0].y ) : null;\n vertex = new ThreeBSP.Vertex( vertex.x, vertex.y, vertex.z, face.vertexNormals[0], uvs );\n vertex.applyMatrix4(this.matrix);\n polygon.vertices.push( vertex );\n \n vertex = geometry.vertices[ face.b ];\n uvs = faceVertexUvs ? new THREE.Vector2( faceVertexUvs[1].x, faceVertexUvs[1].y ) : null;\n vertex = new ThreeBSP.Vertex( vertex.x, vertex.y, vertex.z, face.vertexNormals[1], uvs );\n vertex.applyMatrix4(this.matrix);\n polygon.vertices.push( vertex );\n \n vertex = geometry.vertices[ face.c ];\n uvs = faceVertexUvs ? new THREE.Vector2( faceVertexUvs[2].x, faceVertexUvs[2].y ) : null;\n vertex = new ThreeBSP.Vertex( vertex.x, vertex.y, vertex.z, face.vertexNormals[2], uvs );\n vertex.applyMatrix4(this.matrix);\n polygon.vertices.push( vertex );\n \n vertex = geometry.vertices[ face.d ];\n uvs = faceVertexUvs ? new THREE.Vector2( faceVertexUvs[3].x, faceVertexUvs[3].y ) : null;\n vertex = new ThreeBSP.Vertex( vertex.x, vertex.y, vertex.z, face.vertexNormals[3], uvs );\n vertex.applyMatrix4(this.matrix);\n polygon.vertices.push( vertex );\n } else {\n throw 'Invalid face type at index ' + i;\n }\n \n polygon.calculateProperties();\n polygons.push( polygon );\n };\n \n this.tree = new ThreeBSP.Node( polygons );\n };\n ThreeBSP.prototype.subtract = function( other_tree ) {\n var a = this.tree.clone(),\n b = other_tree.tree.clone();\n \n a.invert();\n a.clipTo( b );\n b.clipTo( a );\n b.invert();\n b.clipTo( a );\n b.invert();\n a.build( b.allPolygons() );\n a.invert();\n a = new ThreeBSP( a );\n a.matrix = this.matrix;\n return a;\n };\n ThreeBSP.prototype.union = function( other_tree ) {\n var a = this.tree.clone(),\n b = other_tree.tree.clone();\n \n a.clipTo( b );\n b.clipTo( a );\n b.invert();\n b.clipTo( a );\n b.invert();\n a.build( b.allPolygons() );\n a = new ThreeBSP( a );\n a.matrix = this.matrix;\n return a;\n };\n ThreeBSP.prototype.intersect = function( other_tree ) {\n var a = this.tree.clone(),\n b = other_tree.tree.clone();\n \n a.invert();\n b.clipTo( a );\n b.invert();\n a.clipTo( b );\n b.clipTo( a );\n a.build( b.allPolygons() );\n a.invert();\n a = new ThreeBSP( a );\n a.matrix = this.matrix;\n return a;\n };\n ThreeBSP.prototype.toGeometry = function() {\n var i, j,\n matrix = new THREE.Matrix4().getInverse( this.matrix ),\n geometry = new THREE.Geometry(),\n polygons = this.tree.allPolygons(),\n polygon_count = polygons.length,\n polygon, polygon_vertice_count,\n vertice_dict = {},\n vertex_idx_a, vertex_idx_b, vertex_idx_c,\n vertex, face,\n verticeUvs;\n \n for ( i = 0; i < polygon_count; i++ ) {\n polygon = polygons[i];\n polygon_vertice_count = polygon.vertices.length;\n \n for ( j = 2; j < polygon_vertice_count; j++ ) {\n verticeUvs = [];\n \n vertex = polygon.vertices[0];\n verticeUvs.push( new THREE.Vector2( vertex.uv.x, vertex.uv.y ) );\n vertex = new THREE.Vector3( vertex.x, vertex.y, vertex.z );\n vertex.applyMatrix4(matrix);\n \n if ( typeof vertice_dict[ vertex.x + ',' + vertex.y + ',' + vertex.z ] !== 'undefined' ) {\n vertex_idx_a = vertice_dict[ vertex.x + ',' + vertex.y + ',' + vertex.z ];\n } else {\n geometry.vertices.push( vertex );\n vertex_idx_a = vertice_dict[ vertex.x + ',' + vertex.y + ',' + vertex.z ] = geometry.vertices.length - 1;\n }\n \n vertex = polygon.vertices[j-1];\n verticeUvs.push( new THREE.Vector2( vertex.uv.x, vertex.uv.y ) );\n vertex = new THREE.Vector3( vertex.x, vertex.y, vertex.z );\n vertex.applyMatrix4(matrix);\n if ( typeof vertice_dict[ vertex.x + ',' + vertex.y + ',' + vertex.z ] !== 'undefined' ) {\n vertex_idx_b = vertice_dict[ vertex.x + ',' + vertex.y + ',' + vertex.z ];\n } else {\n geometry.vertices.push( vertex );\n vertex_idx_b = vertice_dict[ vertex.x + ',' + vertex.y + ',' + vertex.z ] = geometry.vertices.length - 1;\n }\n \n vertex = polygon.vertices[j];\n verticeUvs.push( new THREE.Vector2( vertex.uv.x, vertex.uv.y ) );\n vertex = new THREE.Vector3( vertex.x, vertex.y, vertex.z );\n vertex.applyMatrix4(matrix);\n if ( typeof vertice_dict[ vertex.x + ',' + vertex.y + ',' + vertex.z ] !== 'undefined' ) {\n vertex_idx_c = vertice_dict[ vertex.x + ',' + vertex.y + ',' + vertex.z ];\n } else {\n geometry.vertices.push( vertex );\n vertex_idx_c = vertice_dict[ vertex.x + ',' + vertex.y + ',' + vertex.z ] = geometry.vertices.length - 1;\n }\n \n face = new THREE.Face3(\n vertex_idx_a,\n vertex_idx_b,\n vertex_idx_c,\n new THREE.Vector3( polygon.normal.x, polygon.normal.y, polygon.normal.z )\n );\n \n geometry.faces.push( face );\n geometry.faceVertexUvs[0].push( verticeUvs );\n }\n \n }\n return geometry;\n };\n ThreeBSP.prototype.toBufferGeometry = function( ) {\n var geometry = this.toGeometry();\n var bufferGeometry = new THREE.BufferGeometry().fromGeometry(geometry);\n\n return bufferGeometry;\n };\n ThreeBSP.prototype.toMesh = function( material ) {\n var geometry = this.toBufferGeometry(),\n mesh = new THREE.Mesh( geometry, material );\n \n mesh.position.setFromMatrixPosition( this.matrix );\n mesh.rotation.setFromRotationMatrix( this.matrix );\n \n return mesh;\n };\n \n \n ThreeBSP.Polygon = function( vertices, normal, w ) {\n if ( !( vertices instanceof Array ) ) {\n vertices = [];\n }\n \n this.vertices = vertices;\n if ( vertices.length > 0 ) {\n this.calculateProperties();\n } else {\n this.normal = this.w = undefined;\n }\n };\n ThreeBSP.Polygon.prototype.calculateProperties = function() {\n var a = this.vertices[0],\n b = this.vertices[1],\n c = this.vertices[2];\n \n this.normal = b.clone().subtract( a ).cross(\n c.clone().subtract( a )\n ).normalize();\n \n this.w = this.normal.clone().dot( a );\n \n return this;\n };\n ThreeBSP.Polygon.prototype.clone = function() {\n var i, vertice_count,\n polygon = new ThreeBSP.Polygon;\n \n for ( i = 0, vertice_count = this.vertices.length; i < vertice_count; i++ ) {\n polygon.vertices.push( this.vertices[i].clone() );\n };\n polygon.calculateProperties();\n \n return polygon;\n };\n \n ThreeBSP.Polygon.prototype.flip = function() {\n var i, vertices = [];\n \n this.normal.multiplyScalar( -1 );\n this.w *= -1;\n \n for ( i = this.vertices.length - 1; i >= 0; i-- ) {\n vertices.push( this.vertices[i] );\n };\n this.vertices = vertices;\n \n return this;\n };\n ThreeBSP.Polygon.prototype.classifyVertex = function( vertex ) { \n var side_value = this.normal.dot( vertex ) - this.w;\n \n if ( side_value < -EPSILON ) {\n return BACK;\n } else if ( side_value > EPSILON ) {\n return FRONT;\n } else {\n return COPLANAR;\n }\n };\n ThreeBSP.Polygon.prototype.classifySide = function( polygon ) {\n var i, vertex, classification,\n num_positive = 0,\n num_negative = 0,\n vertice_count = polygon.vertices.length;\n \n for ( i = 0; i < vertice_count; i++ ) {\n vertex = polygon.vertices[i];\n classification = this.classifyVertex( vertex );\n if ( classification === FRONT ) {\n num_positive++;\n } else if ( classification === BACK ) {\n num_negative++;\n }\n }\n \n if ( num_positive > 0 && num_negative === 0 ) {\n return FRONT;\n } else if ( num_positive === 0 && num_negative > 0 ) {\n return BACK;\n } else if ( num_positive === 0 && num_negative === 0 ) {\n return COPLANAR;\n } else {\n return SPANNING;\n }\n };\n ThreeBSP.Polygon.prototype.splitPolygon = function( polygon, coplanar_front, coplanar_back, front, back ) {\n var classification = this.classifySide( polygon );\n \n if ( classification === COPLANAR ) {\n \n ( this.normal.dot( polygon.normal ) > 0 ? coplanar_front : coplanar_back ).push( polygon );\n \n } else if ( classification === FRONT ) {\n \n front.push( polygon );\n \n } else if ( classification === BACK ) {\n \n back.push( polygon );\n \n } else {\n \n var vertice_count,\n i, j, ti, tj, vi, vj,\n t, v,\n f = [],\n b = [];\n \n for ( i = 0, vertice_count = polygon.vertices.length; i < vertice_count; i++ ) {\n \n j = (i + 1) % vertice_count;\n vi = polygon.vertices[i];\n vj = polygon.vertices[j];\n ti = this.classifyVertex( vi );\n tj = this.classifyVertex( vj );\n \n if ( ti != BACK ) f.push( vi );\n if ( ti != FRONT ) b.push( vi );\n if ( (ti | tj) === SPANNING ) {\n t = ( this.w - this.normal.dot( vi ) ) / this.normal.dot( vj.clone().subtract( vi ) );\n v = vi.interpolate( vj, t );\n f.push( v );\n b.push( v );\n }\n }\n \n \n if ( f.length >= 3 ) front.push( new ThreeBSP.Polygon( f ).calculateProperties() );\n if ( b.length >= 3 ) back.push( new ThreeBSP.Polygon( b ).calculateProperties() );\n }\n };\n \n ThreeBSP.Vertex = function( x, y, z, normal, uv ) {\n this.x = x;\n this.y = y;\n this.z = z;\n this.normal = normal || new THREE.Vector3;\n this.uv = uv || new THREE.Vector2;\n };\n ThreeBSP.Vertex.prototype.clone = function() {\n return new ThreeBSP.Vertex( this.x, this.y, this.z, this.normal.clone(), this.uv.clone() );\n };\n ThreeBSP.Vertex.prototype.add = function( vertex ) {\n this.x += vertex.x;\n this.y += vertex.y;\n this.z += vertex.z;\n return this;\n };\n ThreeBSP.Vertex.prototype.subtract = function( vertex ) {\n this.x -= vertex.x;\n this.y -= vertex.y;\n this.z -= vertex.z;\n return this;\n };\n ThreeBSP.Vertex.prototype.multiplyScalar = function( scalar ) {\n this.x *= scalar;\n this.y *= scalar;\n this.z *= scalar;\n return this;\n };\n ThreeBSP.Vertex.prototype.cross = function( vertex ) {\n var x = this.x,\n y = this.y,\n z = this.z;\n\n this.x = y * vertex.z - z * vertex.y;\n this.y = z * vertex.x - x * vertex.z;\n this.z = x * vertex.y - y * vertex.x;\n \n return this;\n };\n ThreeBSP.Vertex.prototype.normalize = function() {\n var length = Math.sqrt( this.x * this.x + this.y * this.y + this.z * this.z );\n \n this.x /= length;\n this.y /= length;\n this.z /= length;\n \n return this;\n };\n ThreeBSP.Vertex.prototype.dot = function( vertex ) {\n return this.x * vertex.x + this.y * vertex.y + this.z * vertex.z;\n };\n ThreeBSP.Vertex.prototype.lerp = function( a, t ) {\n this.add(\n a.clone().subtract( this ).multiplyScalar( t )\n );\n \n this.normal.add(\n a.normal.clone().sub( this.normal ).multiplyScalar( t )\n );\n \n this.uv.add(\n a.uv.clone().sub( this.uv ).multiplyScalar( t )\n );\n \n return this;\n };\n ThreeBSP.Vertex.prototype.interpolate = function( other, t ) {\n return this.clone().lerp( other, t );\n };\n ThreeBSP.Vertex.prototype.applyMatrix4 = function ( m ) {\n\n // input: THREE.Matrix4 affine matrix\n\n var x = this.x, y = this.y, z = this.z;\n\n var e = m.elements;\n\n this.x = e[0] * x + e[4] * y + e[8] * z + e[12];\n this.y = e[1] * x + e[5] * y + e[9] * z + e[13];\n this.z = e[2] * x + e[6] * y + e[10] * z + e[14];\n\n return this;\n\n };\n \n \n ThreeBSP.Node = function( polygons ) {\n var i, polygon_count,\n front = [],\n back = [];\n\n this.polygons = [];\n this.front = this.back = undefined;\n \n if ( !(polygons instanceof Array) || polygons.length === 0 ) return;\n\n this.divider = polygons[0].clone();\n \n for ( i = 0, polygon_count = polygons.length; i < polygon_count; i++ ) {\n this.divider.splitPolygon( polygons[i], this.polygons, this.polygons, front, back );\n } \n \n if ( front.length > 0 ) {\n this.front = new ThreeBSP.Node( front );\n }\n \n if ( back.length > 0 ) {\n this.back = new ThreeBSP.Node( back );\n }\n };\n ThreeBSP.Node.isConvex = function( polygons ) {\n var i, j;\n for ( i = 0; i < polygons.length; i++ ) {\n for ( j = 0; j < polygons.length; j++ ) {\n if ( i !== j && polygons[i].classifySide( polygons[j] ) !== BACK ) {\n return false;\n }\n }\n }\n return true;\n };\n ThreeBSP.Node.prototype.build = function( polygons ) {\n var i, polygon_count,\n front = [],\n back = [];\n \n if ( !this.divider ) {\n this.divider = polygons[0].clone();\n }\n\n for ( i = 0, polygon_count = polygons.length; i < polygon_count; i++ ) {\n this.divider.splitPolygon( polygons[i], this.polygons, this.polygons, front, back );\n } \n \n if ( front.length > 0 ) {\n if ( !this.front ) this.front = new ThreeBSP.Node();\n this.front.build( front );\n }\n \n if ( back.length > 0 ) {\n if ( !this.back ) this.back = new ThreeBSP.Node();\n this.back.build( back );\n }\n };\n ThreeBSP.Node.prototype.allPolygons = function() {\n var polygons = this.polygons.slice();\n if ( this.front ) polygons = polygons.concat( this.front.allPolygons() );\n if ( this.back ) polygons = polygons.concat( this.back.allPolygons() );\n return polygons;\n };\n ThreeBSP.Node.prototype.clone = function() {\n var node = new ThreeBSP.Node();\n \n node.divider = this.divider.clone();\n node.polygons = this.polygons.map( function( polygon ) { return polygon.clone(); } );\n node.front = this.front && this.front.clone();\n node.back = this.back && this.back.clone();\n \n return node;\n };\n ThreeBSP.Node.prototype.invert = function() {\n var i, polygon_count, temp;\n \n for ( i = 0, polygon_count = this.polygons.length; i < polygon_count; i++ ) {\n this.polygons[i].flip();\n }\n \n this.divider.flip();\n if ( this.front ) this.front.invert();\n if ( this.back ) this.back.invert();\n \n temp = this.front;\n this.front = this.back;\n this.back = temp;\n \n return this;\n };\n ThreeBSP.Node.prototype.clipPolygons = function( polygons ) {\n var i, polygon_count,\n front, back;\n\n if ( !this.divider ) return polygons.slice();\n \n front = [], back = [];\n \n for ( i = 0, polygon_count = polygons.length; i < polygon_count; i++ ) {\n this.divider.splitPolygon( polygons[i], front, back, front, back );\n }\n\n if ( this.front ) front = this.front.clipPolygons( front );\n if ( this.back ) back = this.back.clipPolygons( back );\n else back = [];\n\n return front.concat( back );\n };\n \n ThreeBSP.Node.prototype.clipTo = function( node ) {\n this.polygons = node.clipPolygons( this.polygons );\n if ( this.front ) this.front.clipTo( node );\n if ( this.back ) this.back.clipTo( node );\n };\n \n \n return ThreeBSP;\n }\n","module.exports = require(\"webworkify-webpack\");","module.exports = require(\"promise-polyfill\");","const Geometry = require('../primitives/geometry').Geometry;\nconst THREE = require('three');\nconst JSONLoader = THREE.BufferGeometryLoader;\n\nmodule.exports = function (self) {\n\tlet core = undefined;\n\t\n\tvar geometryFromJSON = function(object) {\n\t\tvar JSONParser = new JSONLoader();\n\t\tvar geometry = JSONParser.parse(object);\n\t\tvar material = new THREE.MeshPhongMaterial();\n var mesh = new THREE.Mesh(geometry.geometry, material);\n var host = new Geometry();\n host.setMorph(mesh);\n return host;\n\t}\n\n\tvar initialise = function(object) {\n\t\tvar host = geometryFromJSON(object);\n\t\tcore = new (require('./geometryCSGInternal').GeometryCSGInternal)(host);\n\t\tself.postMessage({action:\"message\", message: \"Initialised\"});\n\t}\n\t\n\tvar intersect = function(object) {\n\t\tif (core) {\n\t\t\tvar guest = geometryFromJSON(object);\n\t\t\tvar result = core.intersect(guest);\n\t\t\tvar json = result.toBufferGeometry().toJSON();\n\t\t\tself.postMessage({action: \"result\", object: json});\n\t\t}\n\t}\n\t\n\tvar subtract = function(object) {\n\t\tif (core) {\n\t\t\tvar guest = geometryFromJSON(object);\n\t\t\tvar result = core.subtract(guest);\n\t\t\tvar json = result.toBufferGeometry().toJSON();\n\t\t\tself.postMessage({action: \"result\", object: json});\n\t\t}\n\t}\n\t\n\tvar union = function(object) {\n\t\tif (core) {\n\t\t\tvar guest = geometryFromJSON(object);\n\t\t\tvar result = core.union(guest);\n\t\t\tvar json = result.toBufferGeometry().toJSON();\n\t\t\tself.postMessage({action: \"result\", object: json});\n\t\t}\n\t}\n\t\n\tself.addEventListener('message',function (ev){\n\t switch (ev.data.action) {\n \tcase 'initialise':\n initialise(ev.data.object);\n break;\n \tcase 'intersect':\n \t\tintersect(ev.data.object);\n break;\n \tcase 'subtract':\n \t\tsubtract(ev.data.object);\n break;\n \tcase 'union':\n \t\tunion(ev.data.object);\n break;\n \tdefault:\n \t\tthrow 'Cannot handle specified action.';\n\t }\n\t});\n\t\t\n //var test = ev.data;\n //self.postMessage(test, [test]);\n};\n\n","const THREE = require('three');\nconst ThreeBSP = require('../three-js-csg')(THREE);\nconst Geometry = require('../primitives/geometry').Geometry;\nconst GeometryCSG = require('../geometryCSG').GeometryCSG;\n\nconst GeometryCSGInternal = function (hostIn) {\n //ZincGeoemtry of the main geometry\n let host = undefined;\n if (hostIn && hostIn.isGeometry)\n host = hostIn;\n let hostCSG = undefined;\n \n this.setGeometry = hostIn => {\n if (hostIn && hostIn.isGeometry)\n\t host = hostIn;\n hostCSG = undefined;\n }\n \n this.setCSG = csg => {\n\t hostCSG = csg;\n }\n \n const prepareCSG = guestGeometry => {\n\t if (host && host.morph && guestGeometry && guestGeometry.morph) {\n\t if (hostCSG === undefined)\n\t hostCSG = new ThreeBSP(host.morph);\n\t const guestCSG = new ThreeBSP(guestGeometry.morph);\n\t return guestCSG;\n\t }\n\t return undefined;\n };\n \n this.intersect = guestGeometry => {\n\t const guestCSG = prepareCSG(guestGeometry);\n\t if (hostCSG && guestCSG) {\n\t return hostCSG.intersect(guestCSG);\n\t }\n\t return undefined;\n }\n \n this.subtract = guestGeometry => {\n\t const guestCSG = prepareCSG(guestGeometry);\n\t if (hostCSG && guestCSG) {\n\t\t return hostCSG.subtract(guestCSG);\n\t }\n\t return undefined;\n }\n \n this.union = guestGeometry => {\n\t const guestCSG = prepareCSG(guestGeometry);\n\t if (hostCSG && guestCSG) {\n\t\t return hostCSG.union(guestCSG);\n\t }\n\t return undefined;\n }\n};\n\nexports.GeometryCSGInternal = GeometryCSGInternal;\n","const THREE = require('three');\nconst ThreeBSP = require('./three-js-csg')(THREE);\nconst Glyphset = require('./primitives/glyphset').Glyphset;\n\n/**\n * Provides an object which takes in a glyphset, convert it into a CSG and further\n * action such as intersect with another geometry may be performed.\n * \n * @class\n * @author Alan Wu\n * @return {GlyphsetCSG}\n */\nconst GlyphsetCSG = function (hostIn) {\n let host = undefined;\n if (hostIn && hostIn.isGlyphset)\n\t host = hostIn;\n const hostCSGs = new Array();\n const currentIntersect = undefined;\n \n this.setGlyphset = hostIn => {\n\t if (hostIn && hostIn.isGlyphset)\n\t\t host = hostIn;\n\t hostCSG = undefined;\n }\n \n this.getGlyphset = () => {\n\t return host;\n }\n \n const prepareCSGForGlyphs = () => {\n\t return glyph => {\n\t\t const mesh = glyph.getMesh();\n\t\t const label = glyph.getLabel();\n\t\t if (mesh) {\n\t\t\t const csg = new ThreeBSP(mesh.geometry.clone().applyMatrix(mesh.matrix));\n\t\t\t const store = [];\n\t\t\t store.csg = csg;\n\t\t\t store.label = label;\n\t\t\t if (mesh.material)\n\t\t\t\t store.material = mesh.material.clone();\n\t\t\t hostCSGs.push(store);\n\t\t }\n\t };\n };\n \n const prepareCSG = guestGeometry => {\n\t if (host && guestGeometry && guestGeometry.getMorph()) {\n\t if (hostCSGs.length == 0) {\n\t \t host.forEachGlyph(prepareCSGForGlyphs());\n\t }\n\t const guestCSG = new ThreeBSP(guestGeometry.getMorph());\n\t return guestCSG;\n\t }\n\t return undefined;\n };\n \n this.intersect = guestGeometry => {\n\t const guestCSG = prepareCSG(guestGeometry);\n\t if ((hostCSGs.length > 0) && guestCSG) {\n\t\tconst glyphset = new (require('./primitives/glyphset').Glyphset)();\n\t\tfor (let i = 0; i < hostCSGs.length; i++) {\n\t\t\tconst hostCSG = hostCSGs[i];\n\t\t const intersect = hostCSG.csg.intersect(guestCSG);\n\t\t const mesh = intersect.toMesh();\n\t\t if (mesh && mesh.geometry && (mesh.geometry.vertices.length > 0)) {\n\t\t \tif (hostCSG.material) {\n\t\t \t\tmesh.material = hostCSG.material;\n\t\t \t\tmesh.material.side = THREE.DoubleSide;\n\t\t \t\tmesh.material.clippingPlanes = null;\n\t\t \t}\n\t\t\t const glyph = glyphset.addMeshAsGlyph(mesh, i+1);\n\t\t\t glyph.setLabel(hostCSG.label);\n\t\t }\n\t\t}\n\t const newCSG = new GlyphsetCSG(glyphset);\t\n\t return newCSG;\n\t }\n\n\t return undefined;\n }\n \n};\n\nexports.GlyphsetCSG = GlyphsetCSG;\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].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","","// startup\n// Load entry module and return exports\n// This entry module is referenced by other modules so it can't be inlined\nvar __webpack_exports__ = __webpack_require__(0);\n",""],"names":["require","PACKAGE","version","Zinc","Revision","defaultMaterialColor","defaultOpacity","modelPrefix","Geometry","Glyph","Glyphset","Pointset","Label","Lines","TextureArray","TextureSlides","Renderer","Scene","GeometryCSG","GlyphsetCSG","Viewport","CameraControls","SmoothCameraTransition","RayCaster","CameraAutoTumble","StereoEffect","loadExternalFile","loadExternalFiles","THREE","module","exports","toBufferGeometry","createMeshForGeometry","geometryIn","materialIn","options","geometry","isTransparent","opacity","material","_video","morphTargets","localTimeEnabled","localMorphColour","morphNormals","BufferGeometry","attributes","color","MeshPhongMaterial","colour","transparent","side","DoubleSide","vertexColors","VertexColors","morphAttributes","onBeforeCompile","augmentMorphColor","videoTexture","createCanvasVideoTexture","MeshBasicMaterial","Color","map","videoHandler","Mesh","ZincObject","call","isGeometry","createMesh","morph","mesh","setMesh","calculateUVs","computeBoundingBox","max","boundingBox","min","offset","Vector2","x","y","range","faceVertexUvs","i","faces","length","v1","vertices","a","v2","b","v3","c","push","uvsNeedUpdate","checkTransparentMesh","_lod","setWireframe","wireframe","editVertices","coords","getMorph","attribute","getAttribute","index","forEach","coord","array","needsUpdate","computeBoundingSphere","boundingBoxUpdateRequired","prototype","Object","create","THREEGeometry","SpriteText","default","resolveURL","url","actualURL","prefix","_readOnlyError","test","createNewURL","target","reference","getNewURL","newURL","URL","href","split","paramsStrings","_unused","console","error","concat","Array","isArray","urls","getBoundingBox","cachedBox","b1","influences","morphTargetInfluences","found","position","set","setFromArray","add","multiplyScalar","setFromBufferAttribute","updateWorldMatrix","applyMatrix4","matrixWorld","data","callback","errorCallback","request","XMLHttpRequest","open","onreadystatechange","readyState","status","responseText","send","partialCallback","text","urlIndex","result","numComplete","numUrls","getColorsRGB","colors","index_in_colors","Math","floor","remainder","hex_value","r","g","mycolor","updateMorphColorAttribute","targetGeometry","morphColors","deleteAttribute","bound","morphArray","setAttribute","morphNormalsReady","computeMorphNormals","toIndexedBufferGeometry","copyMorphColorsToIndexedBufferGeometry","clone","colorsNeedUpdate","copyMorphColorsToBufferGeometry","bufferGeometry","l","morphColor","colorArray","j","face","Float32BufferAttribute","name","copyArray","mergeAttributes","TypedArray","itemSize","normalized","gpuType","arrayLength","constructor","count","BufferAttribute","isInterleavedBufferAttribute","tupleOffset","value","getComponent","setComponent","mergeGeometries","geometries","useGroups","arguments","isIndexed","attributesUsed","Set","keys","morphAttributesUsed","morphTargetsRelative","mergedGeometry","attributesCount","has","size","addGroup","indexOffset","mergedIndex","getX","setIndex","mergedAttribute","numMorphTargets","morphAttributesToMerge","mergedMorphAttribute","mergeVertices","tolerance","Number","EPSILON","hashToIndex","indices","getIndex","positions","vertexCount","nextIndex","attributeNames","attrArrays","morphAttrsArrays","newIndices","getters","morphAttr","fill","decimalShift","log10","shiftMultiplier","pow","hash","k","getterFunc","newarray","newMorphArrays","m","ml","oldAttribute","buffer","setArray","morphAttribute","cons","Uint8Array","Uint16Array","Uint32Array","newIndexBuffer","PhongToToon","isMeshPhongMaterial","MeshToonMaterial","createBufferGeometry","Float32Array","setDrawRange","getCircularTexture","image","Image","src","texture","Texture","createNewSpriteText","height","font","pixel","weight","sprite","fontFace","fontSize","fontWeight","generateMipmaps","anisotropy","sizeAttenuation","alphaTest","depthWrite","depthTest","center","renderOrder","isRegionGroup","regionPath","groupName","comparePath","region","group","n","lastIndexOf","substring","toLowerCase","Box3","EventDispatcher","Matrix3","Matrix4","MathUtils","Object3D","Sphere","Vector3","_m1","_obj","_offset","_temp","uuid","generateUUID","type","normals","uvs","skinWeights","skinIndices","lineDistances","boundingSphere","elementsNeedUpdate","verticesNeedUpdate","normalsNeedUpdate","lineDistancesNeedUpdate","groupsNeedUpdate","assign","matrix","vertex","normalMatrix","getNormalMatrix","il","normal","applyMatrix3","normalize","jl","vertexNormals","rotateX","angle","makeRotationX","rotateY","makeRotationY","rotateZ","makeRotationZ","translate","z","makeTranslation","scale","makeScale","lookAt","vector","updateMatrix","fromBufferGeometry","addFace","materialIndex","scope","fromBufferAttribute","Face3","uv","uv2","groups","start","computeFaceNormals","getCenter","negate","radius","s","cb","ab","f","fl","vA","vB","vC","subVectors","cross","copy","computeVertexNormals","areaWeighted","v","vl","computeFlatVertexNormals","__originalFaceNormal","__originalVertexNormals","tmpGeo","faceNormals","dstNormalsFace","dstNormalsVertex","faceNormal","setFromPoints","mergeMorph","morphTargets1","morphTargets2","morphColors1","morphColors2","morphTarget1","morphTarget2","kl","vertexCopy","normals2","morphColor1","morphColor2","merge","materialIndexOffset","vertexOffset","vertices1","vertices2","faces1","faces2","colors1","colors2","faceVertexNormals","faceVertexColors","faceCopy","faceVertexUvs2","uvs2","uvsCopy","mergeMesh","isMesh","matrixAutoUpdate","precisionPoints","verticesMap","unique","changes","precision","key","round","faceIndicesToRemove","idx","splice","diff","points","point","sortFacesByMaterialIndex","_id","sort","newUvs1","newUvs2","uvs1","id","toJSON","setBit","enabled","getNormalIndex","toString","normalsHash","getColorIndex","colorsHash","getHex","getUvIndex","uvsHash","metadata","generator","parameters","hasMaterial","hasFaceUv","hasFaceVertexUv","hasFaceNormal","hasFaceVertexNormal","hasFaceColor","hasFaceVertexColor","faceType","source","morphTarget","morphNormal","srcVertexNormal","destVertexNormal","computeGroups","DirectGeometry","fromGeometry","buffergeometry","copyVector3sArray","copyColorsArray","copyVector2sArray","copyVector4sArray","colorsArray","normalsArray","computeTangents","computeLineDistances","applyMatrix","warn","dispose","dispatchEvent","createBufferGeometryFromObject","object","isPoints","isLine","morphTargetsPosition","hasFaceVertexUv2","morphTargetsLength","morphTargetsNormal","morphNormalsLength","hasSkinIndices","hasSkinWeights","vertexUvs","isVector3","isColor","shader","vertexShader","replace","join","uniqueiId","getUniqueId","isZincObject","Group","LOD","timeEnabled","morphColour","inbuildTime","mixer","animationGroup","duration","clipAction","userData","marker","markerNumber","markerUpdateRequired","closestVertexIndex","cachedBoundingBox","anatomicalId","animationClip","markerMode","_v1","_v2","_b1","visible","drawRange","origColour","origVertexColors","isPickable","setDuration","durationIn","getDuration","setRegion","getRegion","getCurrentMorph","getGroup","setMorph","distance","calculateDistance","addLevel","setMaterial","AnimationObjectGroup","AnimationMixer","AnimationClip","CreateClipsFromMorphTargetSequences","loop","loopOnce","clampWhenFinished","play","setFrustumCulled","setIsPickable","pickableUpdateRequired","setAnatomicalId","setName","groupNameIn","getCurrentTime","ratio","time","_clip","setMorphTime","timeChanged","actualDuration","newTime","isTimeVarying","update","getVisibility","setVisibility","setAlpha","alpha","_material","flag","setVertexColors","getColour","setColour","setGreyScale","setHex","getColourHex","getHexString","setColourHex","hex","_secondaryMaterial","setEmissiveRGB","emissive","setRGB","getClosestVertexIndex","closestIndex","geoemtry","currentDistance","fromArray","distanceTo","getClosestVertex","applyMatrixWorld","markerIsRequired","displayMarkers","updateMarker","playAnimation","ndcToBeUpdated","Marker","setPosition","isEnabled","markersList","enable","setNumber","markerImgURL","loadUserSprite","setDefaultSprite","camera","markerCluster","updateNDC","cameraObject","disable","remove","processMarkerVisual","updateVisual","initiateMorphColor","setRenderOrder","getClosestVertexDOMElementCoords","scene","inView","project","getZincCameraControls","getRelativeCoordsFromNDC","setMarkerMode","mode","number","imgURL","render","delta","cameraControls","targetTime","addLOD","loader","level","preload","addLevelFromURL","addVertices","positionAttribute","setXYZ","loadAdditionalSources","primitivesLoader","load","filename","meshloader","finishCallback","onProgress","onError","setScaleAll","parent","levels","_currentLevel","_renderOrder","_loader","_parent","distanceIn","abs","loaded","loading","levelLoaded","loadLevel","lodLoader","containsLevels","FrontSide","secondaryMesh","BackSide","uncache","getCurrentLevel","isLines","LineSegments","currentOnly","updateGeometryColour","frustumCulled","order","visibleIndex","optimalIndex","toggleMarker","Line","_start","_end","isBufferGeometry","isLineSegments","LineBasicMaterial","Ray","_inverseMatrix","_ray","_sphere","_morphA","_morphB","_tempA","_tempB","updateMorphTargets","raycast","raycaster","intersects","threshold","params","morphPosition","ray","intersectsSphere","invert","localThreshold","localThresholdSq","vStart","vEnd","interSegment","interRay","step","end","calculatePosition","distSq","distanceSqToSegment","origin","near","far","faceIndex","morphTargetDictionary","morphInfluences","influence","addScaledVector","sub","markerImage","spriteMaterial","SpriteMaterial","zincObject","userTexture","userMaterial","userSprite","userUrl","defaultDisplay","isMarker","ndc","label","initialise","Sprite","porportion","setSpriteSize","setUserSprite","setImageForUserSprite","userImage","crossOrigin","onload","clear","numberIn","getNumber","idIn","glyphsetIn","FaceColors","labelString","isGlyph","_position","fromMesh","meshIn","getGlyphset","setLabel","String","showLabel","getPosition","getSprite","hideLabel","getLabel","getMesh","setTransformation","axis1","axis2","axis3","elements","textIn","getStyle","setScale","scaling","getString","JSONLoader","glyphList","axis1s","axis2s","axis3s","scales","labels","numberOfTimeSteps","numberOfVertices","baseSize","scaleFactors","repeat_mode","ready","morphColours","morphVertices","isGlyphset","_transformMatrix","_bot_colour","_top_colour","_boundingBox1","_boundingBox2","_boundingBox3","_points","_current_positions","_current_axis1s","_current_axis2s","_current_axis3s","_current_scales","_current_colors","_glyph_axis_array","globalScale","glyphsetData","glyphURL","isInline","displayLabels","MorphColours","MorphVertices","number_of_time_steps","number_of_vertices","base_size","scale_factors","instancedMesh","InstancedMesh","parse","materials","resolve_glyph_axes","return_arrays","sign","axis_scale","final_axis1","final_axis2","final_axis3","final_point","mirrored_axis1","mirrored_axis2","mirrored_axis3","mirrored_point","number_of_glyphs","glyph_repeat_mode","use_axis1","use_axis2","use_scale","final_scale1","magnitude","sqrt","updateGlyphsetTransformation","current_positions","current_axis1s","current_axis2s","current_axis3s","current_scales","numberOfGlyphs","numberOfPositions","current_glyph_index","current_index","current_position","current_axis1","current_axis2","current_axis3","current_scale","arrays","setMatrixAt","glyph","instanceMatrix","updateGlyphsetHexColors","current_colors","hex_values","numberOfColours","setColorAt","instanceColor","updateMorphGlyphsets","current_time","bottom_frame","proportion","top_frame","ceil","bottom_positions","top_positions","bottom_axis1","top_axis1","bottom_axis2","top_axis2","bottom_axis3","top_axis3","bottom_scale","top_scale","bottom_colors","top_colors","createGlyphs","addCustomGlyph","addMeshAsGlyph","forEachGlyph","callbackFunction","tempGeometry","getMatrixAt","setFromMatrixPosition","union","Loader","LoaderUtils","Vector4","FileLoader","DefaultLoadingManager","VideoHandler","manager","withCredentials","paramsString","onLoad","texturePath","extractUrlBase","setWithCredentials","json","JSON","e","responseURL","setTexturePath","parseModel","isBitSet","fi","zLength","colorIndex","normalIndex","uvIndex","isQuad","faceA","faceB","uvLayer","u","nUvLayers","parseSkin","influencesPerVertex","w","d","bones","parseMorphing","dstVertices","srcVertices","dstNormals","srcNormals","cl","dstColors","srcColors","parseAnimations","outputAnimations","animations","animation","clip","parseAnimation","morphAnimationClips","initMaterials","video","fullPath","singleSided","flipSided","specularCoef","shininess","NoBlending","NormalBlending","AdditiveBlending","SubtractiveBlending","MultiplyBlending","CustomBlending","MirroredRepeatWrapping","RepeatWrapping","MaterialLoader","TextureLoader","Handlers","handlers","regex","get","file","onLoadStart","onLoadProgress","onLoadComplete","createMaterial","BlendingMode","textureLoader","materialLoader","loadTexture","path","repeat","wrap","setCrossOrigin","wrapS","wrapT","textures","blending","specular","mapDiffuseRepeat","mapDiffuseOffset","mapDiffuseWrap","mapDiffuseAnisotropy","emissiveMap","mapEmissiveRepeat","mapEmissiveOffset","mapEmissiveWrap","mapEmissiveAnisotropy","lightMap","mapLightRepeat","mapLightOffset","mapLightWrap","mapLightAnisotropy","aoMap","mapAORepeat","mapAOOffset","mapAOWrap","mapAOAnisotropy","bumpMap","mapBumpRepeat","mapBumpOffset","mapBumpWrap","mapBumpAnisotropy","bumpScale","normalMap","mapNormalRepeat","mapNormalOffset","mapNormalWrap","mapNormalAnisotropy","normalScale","specularMap","mapSpecularRepeat","mapSpecularOffset","mapSpecularWrap","mapSpecularAnisotropy","metalnessMap","mapMetalnessRepeat","mapMetalnessOffset","mapMetalnessWrap","mapMetalnessAnisotropy","roughnessMap","mapRoughnessRepeat","mapRoughnessOffset","mapRoughnessWrap","mapRoughnessAnisotropy","alphaMap","mapAlphaRepeat","mapAlphaOffset","mapAlphaWrap","mapAlphaAnisotropy","setTextures","srcIn","_this","lastPlayPos","currentPlayPos","bufferingDetected","actualTime","currentTime","getVideoDuration","VideoTexture","minFilter","LinearFilter","magFilter","format","RGBFormat","isReadyToPlay","document","createElement","Points","isPointset","labelSets","addLabel","labelText","colourHex","addPoints","current","PointsMaterial","setSize","setSizeAttenuation","getVerticesByIndex","getY","getZ","maxIndex","sizePerPixel","pixelHeight","testPoint","rayPointDistanceSq","distanceSqToPoint","intersectPoint","closestPointToPoint","distanceToRay","createLineSegment","line","setWidth","width","linewidth","addLines","isTextureArray","loadFromImages","_ref","_asyncToGenerator","srcArrays","h","isLoading","canvas","dataStacks","imageToUint8Array","fullArray","impl","DataTexture2DArray","depth","apply","getMaterial","vs","fs","ShaderMaterial","uniforms","fragmentShader","glslVersion","isTexture","loadImage","img","Promise","resolve","reject","onerror","instance","ctx","getContext","drawImage","getImageData","_ref2","isReady","textureIn","TexturePrimitive","isTextureSlides","textureSettings","idTextureMap","edgesLine","flipY","createSlides","slideSettings","slide","createSlide","setUniformSlideSettingsOfMesh","settings","rotation","direction","PI","modifySlideSettings","PlaneGeometry","getUniforms","diffuse","getTextureSettings","getTextureSettingsWithId","_objectSpread","getSlides","children","removeSlide","removeSlideWithId","getObjectById","findIndex","item","expandBoxWithSettings","box","expandByPoint","setY","setZ","setX","makeEmpty","updateMatrixWorld","applyTransformation","quaternion","Quaternion","setFromRotationMatrix","textureData","locations","orientation","slides","showEdges","BoxGeometry","edges","EdgesGeometry","hideEdges","GLSL3","discardAlpha","isTexturePrimitive","images","imgArray","then","ResizeSensor","containerIn","container","renderer","currentScene","clock","Clock","playRate","preRenderCallbackFunctions","preRenderCallbackFunctions_id","postRenderCallbackFunctions","postRenderCallbackFunctions_id","animated_id","cameraOrtho","sceneOrtho","logoSprite","sceneMap","additionalActiveScenes","scenesGroup","sensor","isRendering","currentSize","currentOffset","getDrawingWidth","clientWidth","getDrawingHeight","clientHeight","onWindowResize","localRect","getBoundingClientRect","left","top","getSize","initialiseVisualisation","antialias","onMobile","navigator","userAgent","err","WebGLRenderer","appendChild","domElement","setClearColor","style","autoClear","createScene","setCurrentScene","getCurrentScene","sceneIn","removeActiveScene","oldScene","setInteractiveControlEnable","setAdditionalScenesGroup","getSceneByName","new_scene","sceneName","resetView","viewAll","boundingBox2","viewAllWithBoundingBox","loadModelsURL","colours","opacities","loadViewURL","loadFromViewURL","jsonFilePrefix","updateDirectionalLight","runAnimation","requestAnimationFrame","cancelAnimationFrame","stopAnimate","stop","animate","Date","now","addPreRenderCallbackFunction","removePreRenderCallbackFunction","addPostRenderCallbackFunction","removePostRenderCallbackFunction","getPlayRate","setPlayRate","playRateIn","setMorphsTime","getZincGeometryByID","addToScene","addObject","addToOrthoScene","OrthographicCamera","createHUDSprites","imagewidth","imageheight","addLogo","ImageUtils","getDelta","renderGeometries","sceneItem","clearDepth","hasOwnProperty","getThreeJSRenderer","isSceneActive","addActiveScene","additionalScene","getThreeJSScene","clearAllActiveScene","clearAll","transitionScene","endingScene","currentCamera","centreX","centreY","centreZ","endingViewport","getViewportFromCentreAndRadius","startingViewport","getCurrentViewport","cameraTransition","enableCameraTransition","isWebGL2","capabilities","MarkerCluster","SceneLoader","SceneExporter","defaultMetadata","Duration","OriginalDuration","TimeStamps","defaultDuration","rendererIn","sceneLoader","minimap","zincObjectAddedCallbacks","zincObjectAddedCallbacks_id","zincObjectRemovedCallbacks","zincObjectRemovedCallbacks_id","miniAxesScene","rootRegion","Region","tempGroup","directionalLight","ambient","zincCameraControls","stereoEffectFlag","stereoEffect","autoClearFlag","displayMinimap","displayMiniAxes","minimapScissor","x_offset","y_offset","align","updateRequired","scissor","_markerTarget","pickableObjectsList","forcePickableObjectsUpdate","axisDisplay","main","mini","_v3","getDownloadProgress","wHeight","aspect","updateProjectionMatrix","onResize","calculateHeightPerPixelAtZeroDepth","changeZoomByScrollRateUnit","unit","setupCamera","PerspectiveCamera","AmbientLight","DirectionalLight","setDirectionalLight","Minimap","loadView","viewPort","setFromObject","setCurrentCameraSettings","setupMultipleViews","defaultView","entries","viewport","addViewport","setDefaultViewport","getViewportFromBoundingBox","forEachGeometry","forEachGlyphset","forEachPointset","forEachLine","findGeometriesWithGroupName","GroupName","findPointsetsWithGroupName","findGlyphsetsWithGroupName","findLinesWithGroupName","findObjectsWithGroupName","findObjectsWithAnatomicalId","getBoundingBoxOfZincObjects","objectsArray","vectorToScreenXY","widthHalf","heightHalf","getObjectsScreenXY","zincObjects","getNamedObjectsScreenXY","addZincObject","calculateMaxAllowedDistance","loadGlyphsetURL","metaurl","glyphurl","loadPointsetURL","loadLinesURL","loadSTL","loadOBJ","loadMetadataURL","allCompletedCallback","loadGLTF","removeObject","markers","toBeDownloaded","pause","setTime","myPlayRate","setVideoHandler","videoHandlerIn","getWindowsPosition","renderer_width","renderer_height","includes","renderMinimap","setScissorTest","setScissor","setViewport","updateCamera","mask","setPathDuration","setStereoEffectEnable","stereoFlag","objectIsInScene","objectIsInRegion","alignBoundingBoxToCameraView","transitionTime","targetPosition","eyePosition","newVec1","newVec2","newVec3","crossVectors","angleTo","rotateCameraTransition","rotateAboutLookAtpoint","translateBoundingBoxToCameraView","scaleRadius","oldViewport","alignObjectToCameraView","setCameraTargetToObject","addVectors","isStereoEffectEnable","removeZincObject","updatePickableThreeJSObjects","getPickableThreeJSObjects","checkPickableUpdateRequred","getNormalisedMinimapCoordinates","event","offsetY","clientY","clientX","getMinimapDiffFromNormalised","getDiffFromNormalised","clearZincObjectAddedCallbacks","clearZincObjectRemovedCallbacks","toBeDwonloaded","addMetadataTimeStamp","convertDurationObjectTomSec","getMetadataTag","getMetadata","setMetadataTag","removeMetadataTag","resetMetadata","resetDuration","convertDurationObjectToString","years","months","weeks","days","hours","mins","secs","setDurationFromObject","string","millisec","setOriginalDurationFromObject","exportGLTF","binary","exporter","getRootRegion","createLines","findChildFromPath","createChildFromPath","createPoints","addZincObjectAddedCallbacks","addZincObjectRemovedCallbacks","removeZincObjectAddedCallbacks","removeZincObjectRemovedCallbacks","triggerObjectAddedCallback","triggerObjectRemovedCallback","addTemporaryPoints","addTemporaryLines","removeTemporaryPrimitive","clearTemporaryPrimitives","child","addBoundingBoxPrimitive","visibility","dim","boxGeo","primitive","createGeometryFromThreeJSGeometry","addSlicesPrimitive","primitives","planeGeo","enableMarkerCluster","destroyAxisDisplay","enableAxisDisplay","axis","createAxisDisplay","fitBoundingBox","XYZ","dir","xyzObj","arrowHelper","ArrowHelper","miniArrowHelper","axesLabel","_axisDisplay","miniaxes","isMarkerCluster","sprites","_v21","_v22","createNewSprite","localGroup","clusterIndex","activateSpriteForCluster","cluster","drawClusters","clusters","currentIndex","members","getCluster","markersObj","first","newCluster","dist","prop","calculate","_this$markers$prop","zoomToCluster","clusterIsVisible","_sprites$index$group","STLLoader","OBJLoader","PrimitivesLoader","progressMap","viewLoaded","errorDownload","totalSize","totalLoaded","unknownFound","progress","xhr","total","loadMultipleViews","referenceURL","views","Default","Inline","Entries","promises","_loop","fetch","response","catch","all","values","entry","setCurrentViewport","xmlhttp","viewData","requestURL","targetRegion","filename_prefix","numberOfResources","linesloader","lod","tubeLines","newLines","TubeLines","Index","loaderOptions","loadGlyphset","newGlyphset","myCallback","onLoadGlyphsetReady","pointsetloader","newPointset","loadSurfaceURL","fileFormat","objloader","metaFinishCallback","numberOfDownloaded","downloadedItem","newTexture","onLoadTextureReady","loadTextureURL","addZincGeometry","newGeometry","zincGeometry","parseDuration","durationString","match","loadSettings","readPrimitivesItem","Levels","Preload","FileFormat","AnatomicalId","compression","Type","newGeometryURL","GlyphGeometriesURL","DisplayLabels","readViewAndSettingsItem","GLTFToZincJSLoader","loadRegions","currentRegion","regions","Primitives","Order","Transformation","Children","regionName","childRegion","findOrCreateChildFromPath","supplementPrimitivesArray","_options$enabled","_options$enabled2","newArray","include","exclude","filter","RegionPath","supplementMetadataInArray","getNumberOfDownloadsInArray","includeViews","getNumberOfObjectsInRegions","regionJson","counts","getNumberOfObjects","Version","Regions","readVersionOneRegionPath","loadVersionOne","filteredMetada","numberOfObjects","loadVersionTwo","Settings","Views","setPath","setResponseType","setRequestHeader","requestHeader","itemError","matchDataViewAt","query","reader","getUint8","binData","array_buffer","charCodeAt","DataView","n_faces","getUint32","byteLength","solid","off","defaultR","defaultG","defaultB","hasColors","normalX","getFloat32","normalY","normalZ","packedColor","getUint16","vertexstart","componentIdx","patternSolid","patternFace","faceCounter","patternFloat","patternVertex","RegExp","patternNormal","groupCount","startVertex","endVertex","exec","vertexCountPerFace","normalCountPerFace","parseFloat","decodeText","Material","_object_pattern","_material_library_pattern","_material_use_pattern","_map_use_pattern","_vA","_vB","_vC","_ab","_cb","ParserState","state","objects","materialLibraries","startObject","fromDeclaration","previousMaterial","currentMaterial","_finalize","hasUVIndices","smooth","startMaterial","libraries","previous","inherited","mtllib","groupStart","groupEnd","cloned","bind","lastMultiMaterial","mi","declared","finalize","parseVertexIndex","len","parseInt","parseNormalIndex","parseUVIndex","addVertex","dst","addVertexPoint","addVertexLine","addNormal","addFaceNormal","addColor","addUV","addDefaultUV","addUVLine","ua","ub","uc","na","nb","nc","vLen","ia","ib","ic","nLen","uvLen","addPointGeometry","vi","addLineGeometry","uvi","setMaterials","indexOf","lines","lineFirstChar","lineLength","trimLeft","trim","charAt","lineData","substr","vertexData","faceVertices","vertexParts","lineParts","lineVertices","lineUVs","parts","li","llen","pointData","hasPrimitives","hasVertexColors","createdMaterials","miLen","sourceMaterial","materialHash","materialLine","materialPoints","flatShading","geometry1","geometry2","IndexedSourcesHandler","urlIn","onDownloadedCallback","jsonLoader","onDownloaded","downloading","finished","items","processItemDownloaded","modelData","obj","processItemError","downloadCompleted","args","errorHandling","progressHandling","MultiSourcesHandler","onLoadCallback","allData","totalDownloaded","itemDownloaded","concurrentDownloads","MAX_DOWNLOAD","waitingList","indexedLoaders","loadFromMultipleSources","msHandler","newOptions","loadFromSingleSource","handleIndexedSource","indexedLoader","onFinally","isHandler","onErrorCallback","loadFromWaitingList","shift","itemRemainingCheck","_len","_key","isTubeLines","dataIn","geometryConfig","radialSegments","getTubeLinesGeometry","MeshStandardMaterial","setTubeLines","finalGeometry","curve","CatmullRomCurve3","TubeGeometry","LineCurve3","tubeGeometry","GLTFLoader","parseGLTFObjects","setCamera","gltf","log","GLTFExporter","getAllObjects","ClampToEdgeWrapping","InterpolateDiscrete","InterpolateLinear","LinearMipmapLinearFilter","LinearMipmapNearestFilter","NearestFilter","NearestMipmapLinearFilter","NearestMipmapNearestFilter","PropertyBinding","RGBAFormat","pluginCallbacks","register","writer","GLTFLightExtension","GLTFMaterialsUnlitExtension","GLTFMaterialsPBRSpecularGlossiness","unregister","input","onDone","GLTFWriter","plugins","setPlugins","write","WEBGL_CONSTANTS","POINTS","LINES","LINE_LOOP","LINE_STRIP","TRIANGLES","TRIANGLE_STRIP","TRIANGLE_FAN","UNSIGNED_BYTE","UNSIGNED_SHORT","FLOAT","UNSIGNED_INT","ARRAY_BUFFER","ELEMENT_ARRAY_BUFFER","NEAREST","LINEAR","NEAREST_MIPMAP_NEAREST","LINEAR_MIPMAP_NEAREST","NEAREST_MIPMAP_LINEAR","LINEAR_MIPMAP_LINEAR","CLAMP_TO_EDGE","MIRRORED_REPEAT","REPEAT","THREE_TO_WEBGL","PATH_PROPERTIES","GLB_HEADER_BYTES","GLB_HEADER_MAGIC","GLB_VERSION","GLB_CHUNK_PREFIX_BYTES","GLB_CHUNK_TYPE_JSON","GLB_CHUNK_TYPE_BIN","equalArray","array1","array2","every","element","stringToArrayBuffer","window","TextEncoder","encode","ArrayBuffer","isIdentityMatrix","getMinMax","output","POSITIVE_INFINITY","NEGATIVE_INFINITY","getW","getPaddedBufferSize","bufferSize","getPaddedArrayBuffer","arrayBuffer","paddingByte","paddedLength","cachedCanvas","pending","buffers","byteOffset","nodeMap","Map","skins","extensionsUsed","uids","uid","asset","cache","meshes","attributesNormalized","trs","onlyVisible","truncateDrawRange","embedImages","maxTextureSize","includeCustomExtensions","processInput","blob","Blob","extensionsUsedList","FileReader","readAsArrayBuffer","onloadend","binaryChunk","binaryChunkPrefix","setUint32","jsonChunk","stringify","jsonChunkPrefix","header","headerView","totalByteLength","glbBlob","glbReader","readAsDataURL","base64data","uri","serializeUserData","objectDef","gltfExtensions","extensionName","extensions","extras","message","getUID","isNormalizedNormalAttribute","createNormalizedNormalAttribute","applyTextureTransform","mapDef","didTransform","transformDef","toArray","KHR_texture_transform","processBuffer","processBufferView","componentType","bufferViews","componentSize","dataView","setFloat32","setUint16","setUint8","bufferViewDef","byteStride","processBufferViewImage","processAccessor","Error","end2","bufferViewTarget","minMax","bufferView","accessorDef","accessors","processImage","cachedImages","mimeType","imageDef","HTMLImageElement","HTMLCanvasElement","OffscreenCanvas","ImageBitmap","Uint8ClampedArray","putImageData","ImageData","toBlob","bufferViewIndex","toDataURL","processSampler","samplers","samplerDef","processTexture","textureDef","sampler","_invokeAll","ext","writeTexture","processMaterial","isShaderMaterial","materialDef","pbrMetallicRoughness","isMeshStandardMaterial","isMeshBasicMaterial","baseColorFactor","metallicFactor","metalness","roughnessFactor","roughness","metalRoughMapDef","metallicRoughnessTexture","baseColorMapDef","baseColorTexture","emissiveIntensity","maxEmissiveComponent","emissiveFactor","emissiveMapDef","emissiveTexture","normalMapDef","normalTexture","occlusionMapDef","texCoord","aoMapIntensity","strength","occlusionTexture","alphaMode","alphaCutoff","doubleSided","writeMaterial","processMesh","meshCacheKeyParts","meshCacheKey","isLineLoop","meshDef","targets","nameConversion","skinWeight","skinIndex","originalNormal","modifiedAttribute","attributeName","toUpperCase","validVertexAttributes","accessor","weights","targetNames","reverseDictionary","warned","gltfAttributeName","baseAttribute","relativeAttribute","isMultiMaterial","cacheKey","writeMesh","processCamera","cameras","isOrtho","isOrthographicCamera","cameraDef","orthographic","xmag","right","ymag","zfar","znear","perspective","aspectRatio","yfov","degToRad","fov","processAnimation","root","Utils","mergeMorphTargetTracks","tracks","channels","track","trackBinding","parseTrackName","trackNode","findNode","nodeName","trackProperty","propertyName","objectName","isSkinnedMesh","skeleton","getBoneByName","objectIndex","inputItemSize","outputItemSize","times","interpolation","createInterpolant","isInterpolantFactoryMethodGLTFCubicSpline","getInterpolation","node","processSkin","nodes","rootJoint","joints","inverseBindMatrices","temporaryBoneInverse","boneInverses","multiply","bindMatrix","skin","processNode","nodeDef","translation","meshIndex","isCamera","nodeIndex","writeNode","processScene","scenes","sceneDef","processObjects","beforeParse","objectsWithoutScene","afterParse","func","light","isLight","isDirectionalLight","isPointLight","isSpotLight","lightDef","intensity","spot","innerConeAngle","penumbra","outerConeAngle","decay","lights","isGLTFSpecularGlossinessMaterial","extensionDef","diffuseFactor","specularFactor","glossinessFactor","glossiness","diffuseTexture","specularMapDef","specularGlossinessTexture","insertKeyframe","valueSize","getValueSize","TimeBufferType","ValueBufferType","interpolant","evaluate","slice","mergedTracks","sourceTracks","sourceTrack","sourceTrackBinding","sourceTrackNode","propertyIndex","InterpolantFactoryMethodDiscrete","InterpolantFactoryMethodLinear","setInterpolation","targetCount","targetIndex","mergedTrack","sourceInterpolant","keyframeIndex","nearPlane","farPlane","upVector","MODE","NONE","DEFAULT","PATH","SMOOTH_CAMERA_TRANSITION","AUTO_TUMBLE","ROTATE_TRANSITION","MINIMAP","SYNC_CONTROL","STATE","ROTATE","ZOOM","PAN","TOUCH_ROTATE","TOUCH_ZOOM","TOUCH_PAN","SCROLL","KEYBOARD_ZOOM","KEYBOARD_ROTATE","KEYBOARD_PAN","ROTATE_DIRECTION","FREE","HORIZONTAL","VERTICAL","KEYBOARD","ARROWLEFT","ARROWUP","ARROWRIGHT","ARROWDOWN","NUMPADADD","NUMPADSUBTRACT","EQUAL","MINUS","CLICK_ACTION","MAIN","AUXILIARY","SECONDARY","tumble_rate","pointer_x","pointer_y","pointer_x_start","pointer_y_start","previous_pointer_x","previous_pointer_y","near_plane_fly_debt","touchZoomDistanceStart","touchZoomDistanceEnd","zoomRate","rotateRate","panRate","cameraPath","numberOfCameraPoint","updateLightWithPathFlag","deviceOrientationControl","defaultViewport","currentMode","smoothCameraTransitionObject","rotateCameraTransitionObject","cameraAutoTumbleObject","zoomSize","rotateMode","_state","zincRayCaster","targetTouchId","rect","_a","_b","_c","_new_b","_new_c","_axis","_v","_rel_eye","sceneSphere","_tempEye","hasUpdated","ndcControl","maxDist","viewports","getBoundingSphere","currentDist","viewportName","defaultName","getDefaultViewport","getViewportOfName","setRotationMode","getVisibleHeightAtZDepth","cameraOffset","vFOV","tan","getNDCFromDocumentCoords","positionIn","updateRect","out_x","out_y","setMouseButtonAction","buttonName","actionName","setCanvasTabindex","tabIndex","checkTravelDistance","newDist","translateViewport","onDocumentMouseDown","minimapCoordinates","button","ctrlKey","shiftKey","preventDefault","onDocumentMouseMove","move","onDocumentMouseUp","pick","onDocumentMouseLeave","onDocumentTouchStart","touches","_rect","_rect2","dx","dy","_rect3","_rect4","identifier","onDocumentTouchMove","stopPropagation","onDocumentTouchEnd","onDocumentEnter","forced","observer","IntersectionObserver","boundingClientRect","disconnect","observe","onDocumentWheelEvent","deltaY","stopImmediatePropagation","onDocumentKeydownEvent","keyCode","onDocumentKeyupEvent","fact","unproject","translate_rate","getVectorsFromRotateAboutLookAtPoints","dot","up","rel_eyea","rel_eyeb","rel_eyec","upa","upb","upc","cos_angle","cos","sin_angle","sin","returned_values","tumble","_rect5","_rect6","delta_x","delta_y","tangent_dist","phi","acos","calculateZoomDelta","changeZoomByValue","near_far_minimum_ratio","flyZoom","directionalLightIn","addEventListener","removeEventListener","loadPath","pathData","CameraPath","NumberOfPoints","loadPathURL","path_url","updateTime","getTime","timeIn","getNumberOfTimeFrame","getCurrentTimeFrame","setCurrentTimeFrame","targetTimeFrame","updatePath","time_frame","bot_pos","top_pos","calculatePathNow","handleSyncControl","triggerCallback","zoom","controlEnabled","updated","isTransitionCompleted","ROTATE_CAMERA_TRANSITION","stopOnCameraInput","playPath","stopPath","isPlayingPath","enableDirectionalLightUpdateWithPath","enableDeviceOrientation","ModifiedDeviceOrientationControls","disableDeviceOrientation","isDeviceOrientationEnabled","newViewport","view_angle","clip_distance","eyex","eyey","eyez","localTargetPosition","eye_distance","localEyePosition","localFarPlane","localNearPlane","nearClippingFactor","radiusScale","clip_factor","currentViewport","getDefaultEyePosition","getDefaultTargetPosition","RotateCameraTransition","pauseCameraTransition","stopCameraTransition","isTransitioningCamera","autoTumble","tumbleDirectionIn","tumbleRateIn","stopOnCameraInputIn","enableAutoTumble","stopAutoTumble","updateAutoTumble","requireUpdate","isAutoTumble","enableRaycaster","callbackFunctionIn","hoverCallbackFunctionIn","disableRaycaster","isSyncControl","currentMpde","enableSyncControl","NDCCameraControl","disableSyncControl","targetCameraIn","startingEyePosition","startingTargetPosition","startingUp","endingEyePosition","endingTargetPosition","endingUp","targetCamera","completed","newDuration","updateCameraSettings","axisIn","angleIn","previousTime","actualDelta","hostSceneIn","hostScene","hoverCallbackFunction","Raycaster","mouse","awaiting","lastHoveredDate","lastHoveredEmpty","timeDiff","pickedObjects","lastPosition","zincCamera","pickableObjects","getIntersectsObject","threejsScene","intersectObjects","setPickableObjects","getIntersectsObjectWithOrigin","getIntersectsObjectWithCamera","setFromCamera","hovered","setTimeout","awaitMove","tumbleAxis","tumbleDirection","computeTumbleAxisAngle","StereoCameraZoomFixed","cameraL","layers","cameraR","focus","eyeRight","eyeLeft","xmin","xmax","projectionMatrix","eyeSep","eyeSepOnProjection","ymax","DEG2RAD","_stereo","reorder","deviceOrientation","screenOrientation","onDeviceOrientationChangeEvent","onScreenOrientationChangeEvent","setObjectQuaternion","zee","euler","Euler","q0","q1","beta","gamma","orient","setFromEuler","setFromAxisAngle","applyQuaternion","connect","eventCallback","cameraIn","defaultViewportIn","getCurrentPosition","scaledDelta","zoomToBox","setCenterZoom","getPanZoom","setEventCallback","Lines2","parentIn","tMatrix","isRegion","hideAllPrimitives","showAllPrimitives","transformation","nameIn","getName","getParent","getFullSeparatedPath","paths","parentName","p","unshift","getFullPath","createChild","getChildWithName","childName","lowerChildName","findChildFromSeparatedPath","pathArray","createChildFromSeparatedPath","transverse","objectsList","boundingBox1","childObjects","lowerObjectName","lowerGroupName","primitivesArray","geometriesArray","pointsetsArray","glyphsetsArray","linesArray","getChildRegions","_options$markerCluste","allObjects","isNew","pointset","LineSegments2","LineMaterial","LineSegmentsGeometry","isLines2","arrayIn","linesGeometry","setPositions","getVerticesByFaceIndex","vIndex","worldUnits","resolution","innerWidth","innerHeight","InstancedInterleavedBuffer","InterleavedBufferAttribute","Line3","_start4","_end4","_ssOrigin","_ssOrigin3","_mvMatrix","_line","_closestPoint","_box","_clipToWorldVector","random","instanceStart","instanceEnd","instanceDistanceBuffer","Line2","lineWidth","ssMaxWidth","distanceToSphere","distanceToPoint","projectionMatrixInverse","sphereMargin","distanceToBox","boxMargin","intersectsBox","at","matrixWorldInverse","multiplyMatrices","isBehindCameraNear","deltaDist","t","lerp","param","closestPointToPointParameter","zPos","isInClipSpace","isInside","pointOnLine","InstancedBufferGeometry","WireframeGeometry","_vector","lineSegments","instanceBuffer","setColors","instanceColorBuffer","fromWireframeGeometry","fromEdgesGeometry","fromLineSegments","maxRadiusSq","distanceToSquared","isNaN","isLineSegmentsGeometry","ShaderLib","UniformsLib","UniformsUtils","dashScale","dashSize","dashOffset","gapSize","common","fog","clipping","defineProperties","enumerable","dashed","defines","USE_DASH","alphaToCoverage","ALPHA_TO_COVERAGE","derivatives","setValues","isLineMaterial","targetScene","helper","positionAttributes","_center","new_coord","diameter","getBoundary","v4","cameraControl","ThreeBSP","work","BufferGeometryLoader","hostIn","host","core","worker","myResolve","createGeometryFromJSON","JSONParser","workerEventHandler","ev","action","csg","GeometryCSGInternal","postMessage","getHostGeometry","tempCSG","createZincGeometry","getGeometry","csgMesh","newMesh","toMesh","setCSG","CSG","sendToWork","guestGeometry","intersect","newCSG","subtract","terminateWorker","terminate","COPLANAR","FRONT","BACK","SPANNING","_length_i","polygon","polygons","Node","tree","Polygon","Vertex","Face4","calculateProperties","other_tree","clipTo","build","allPolygons","toGeometry","polygon_vertice_count","vertex_idx_a","vertex_idx_b","vertex_idx_c","verticeUvs","getInverse","polygon_count","vertice_dict","vertice_count","flip","classifyVertex","side_value","classifySide","classification","num_positive","num_negative","splitPolygon","coplanar_front","coplanar_back","front","back","ti","tj","vj","interpolate","scalar","other","divider","isConvex","temp","clipPolygons","self","geometryFromJSON","guest","hostCSG","setGeometry","prepareCSG","guestCSG","hostCSGs","setGlyphset","prepareCSGForGlyphs","store","glyphset","clippingPlanes"],"sourceRoot":""}