{"version":3,"file":"Support.Main.min.js","mappings":"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MAAO,MAAO,CAAC,MAAO,MAAO,CAAC,MAAO,MACpE,CAAC,MAAO,MAAO,CAAC,MAAO,MAAO,CAAC,MAAO,MAAO,CAAC,MAAO,MAAO,CAAC,MAAO,MACpE,CAAC,MAAO,MAAO,CAAC,MAAO,MAAO,CAAC,MAAO,MAAO,CAAC,MAAO,MAAO,CAAC,MAAO,MACpE,CAAC,MAAO,MAAO,CAAC,MAAO,MAAO,CAAC,MAAO,MAAO,CAAC,MAAO,MAAO,CAAC,MAAO,MACpE,CAAC,MAAO,MAAO,CAAC,MAAO,MAAO,CAAC,MAAO,MAAO,CAAC,MAAO,MAAO,CAAC,MAAO,MACpE,CAAC,MAAO,MAAO,CAAC,MAAO,MAAO,CAAC,MAAO,MAAO,CAAC,MAAO,MAAO,CAAC,MAAO,MACpE,CAAC,MAAO,MAAO,CAAC,MAAO,MAAO,CAAC,MAAO,MAAO,CAAC,MAAO,MAAO,CAAC,MAAO,MACpE,CAAC,MAAO,MAAO,CAAC,MAAO,MAAO,CAAC,MAAO,MAAO,CAAC,MAAO,MAAO,CAAC,MAAO,MACpE,CAAC,MAAO,MAAO,CAAC,MAAO,MAAO,CAAC,MAAO,MAAO,CAAC,MAAO,MAAO,CAAC,MAAO,MACpE,CAAC,MAAO,MAAO,CAAC,MAAO,MAAO,CAAC,MAAO,MAAO,CAAC,MAAO,MAAO,CAAC,MAAO,MACpE,CAAC,MAAO,MAAO,CAAC,MAAO,MAAO,CAAC,MAAO,MAAO,CAAC,MAAO,MAAO,CAAC,MAAO,MACpE,CAAC,MAAO,MAAO,CAAC,MAAO,MAAO,CAAC,MAAO,MAAO,CAAC,MAAO,MAAO,CAAC,MAAO,MACpE,CAAC,MAAO,MAAO,CAAC,MAAO,MAAO,CAAC,MAAO,MAAO,CAAC,MAAO,MAAO,CAAC,MAAO,MACpE,CAAC,MAAO,MAAO,CAAC,MAAO,MAAO,CAAC,MAAO,MAAO,CAAC,MAAO,MAAO,CAAC,MAAO,MACpE,CAAC,MAAO,MAAO,CAAC,MAAO,MAAO,CAAC,MAAO,MAAO,CAAC,MAAO,MAAO,CAAC,MAAO,MACpE,CAAC,MAAO,MAAO,CAAC,MAAO,MAAO,CAAC,MAAO,MAAO,CAAC,MAAO,MAAO,CAAC,MAAO,MACpE,CAAC,MAAO,MAAO,CAAC,MAAO,MAAO,CAAC,MAAO,MAAO,CAAC,MAAO,MAAO,CAAC,MAAO,MACpE,CAAC,MAAO,MAAO,CAAC,MAAO,MAAO,CAAC,MAAO,MAAO,CAAC,MAAO,MAAO,CAAC,MAAO,MACpE,CAAC,MAAO,MAAO,CAAC,MAAO,MAAO,CAAC,MAAO,MAAO,CAAC,MAAO,MAAO,CAAC,MAAO,MACpE,CAAC,MAAO,MAAO,CAAC,MAAO,MAAO,CAAC,MAAO,MAAO,CAAC,MAAO,MAAO,CAAC,MAAO,MACpE,CAAC,MAAO,MAAO,CAAC,MAAO,MAAO,CAAC,MAAO,MAAO,CAAC,MAAO,MAAO,CAAC,MAAO,MACpE,CAAC,MAAO,MAAO,CAAC,MAAO,MAAO,CAAC,MAAO,MAAO,CAAC,MAAO,MAAO,CAAC,MAAO,MACpE,CAAC,MAAO,MAAO,CAAC,MAAO,MAAO,CAAC,MAAO,MAAO,CAAC,MAAO,MAAO,CAAC,MAAO,MACpE,CAAC,MAAO,MAAO,CAAC,MAAO,MAAO,CAAC,MAAO,MAAO,CAAC,MAAO,MAAO,CAAC,MAAO,MACpE,CAAC,MAAO,MAAO,CAAC,MAAO,MAAO,CAAC,MAAO,MAAO,CAAC,MAAO,MAAO,CAAC,MAAO,MACpE,CAAC,MAAO,MAAO,CAAC,MAAO,MAAO,CAAC,MAAO,MAAO,CAAC,MAAO,MAAO,CAAC,MAAO,MACpE,CAAC,MAAO,MAAO,CAAC,MAAO,MAAO,CAAC,MAAO,MAAO,CAAC,MAAO,MAAO,CAAC,MAAO,MACpE,CAAC,MAAO,MAAO,CAAC,MAAO,MAAO,CAAC,MAAO,MAAO,CAAC,MAAO,MAAO,CAAC,MAAO,MACpE,CAAC,MAAO,MAAO,CAAC,MAAO,MAAO,CAAC,MAAO,MAAO,CAAC,MAAO,QCvd9B,eAWvBwzB,SAAO,GAA8BC,EAAUC,EAC3CC,EAAsBC,EAA6BC,GAIrD,GAAIA,EAAqBzqD,OAAQ,CAE/B,IADA,IAAI0qD,EAASL,EAASM,YACGF,GAAAA,EAAAj6B,EAAAi6B,IAAAA,OAAzB,sCAQE,GARF,cACQG,EAAWF,EAAOv2B,OAAO,4BAAC02B,GAC9B,SAAIA,EAAW9J,OAAOlV,WAAWif,EAAAA,MAC7BD,EAAW1xB,SAAS0S,WAAWif,EAAAA,IAFU,CAAhB,OAOlB9qD,OAAQ,CACnB0qD,EAASE,EACT,KAFmB,CAKvBP,EAASM,YAAcD,CAfQ,CAyBjC,GAPIK,EAAWV,EAASU,UAEpBT,EAAqBtqD,QAAUuqD,EAAqBvqD,UACtD+qD,EAyLJC,SAA6BD,EAAUT,EACnCC,GAEF,IAAyBD,IAAAA,GAAAA,EAAA95B,EAAA85B,IAAAA,OAAzB,sCAIE,GAJF,aACQM,EAAWF,EAAOv2B,OAAO,4BAAC60B,GAC9B,OAAOA,EAAQE,OAASF,EAAQE,MAAMnI,OAAOlV,WAAWof,EAAAA,GADd,CAAb,MAG3BL,EAAS5qD,OAAQ,CACnB0qD,EAASE,EACT,KAFmB,CAMvB,IAAyBL,GAAAA,EAAA/5B,EAAA+5B,IAAAA,OAAzB,sCAIE,GAJF,aACQK,EAAWF,EAAOv2B,OAAO,4BAAC60B,GAC9B,OAAOA,EAAQC,OAASD,EAAQC,MAAMlI,OAAOlV,WAAWqf,EAAAA,GADd,CAAb,MAG3BN,EAAS5qD,OAAQ,CACnB0qD,EAASE,EACT,KAFmB,CAKvB,OAAOF,CArBiB,CA1LCS,CAAsBJ,EACzCT,EAAsBC,IAGxBC,EAA4BxqD,OAAQ,CAItC,IADMorD,EAA0B,IAAer3B,EACzBg3B,GAAAA,EAAAv6B,EAAAu6B,IAAAA,QAAtBviD,EAAA,KAAAA,EAAA,SAAAA,EAAAA,EAAA,MACE4iD,EACK7rD,KAAKC,OAAOwpD,EAAQE,MAAMttB,OAAS,GAAIotB,GAE9C,IAAMqC,EAAe,GACrBD,EAAwB/xC,SAAQ,SAACuiB,EAAO0vB,GAClCC,EAAe,EAEnB,IADA,IAAIC,EAAmB,GACDF,GAAAA,EAAA96B,EAAA86B,IAAAA,OAAtB,oDACQG,EAAajB,EAA4Br2B,OAC3C,4BAAC3O,GAAc,OAAAwjC,EAAAA,GAAQ0C,cAAc,GAAGlmC,EAAzB,CAAf,MACFxlB,QACeurD,GACfA,EAAeE,EACfD,EAAmB,CAACxC,EAAAA,KACXyC,GAAcF,GACvBC,EAAiBjsD,KAAKypD,EAAAA,IAG1BqC,EAAa9rD,KAAb,MAAA8rD,EAAA54B,EAAqB+4B,GAd0C,IAgBjET,EAAWM,CAzB2B,CA8BxC,IAFMM,EAAkB,IAAI/3B,IACtBg4B,EAAkB,IAAIh4B,IACNm3B,GAAAA,EAAAv6B,EAAAu6B,IAAAA,QAAtB,SAAAviD,EAAA,mBACcygD,OACV0C,EAAgBr5B,IAAI02B,EAAQC,OAE1BD,EAAQE,OACV0C,EAAgBt5B,IAAI02B,EAAQE,OAI1B2C,EAAe9lD,MAAM24B,KAAKitB,GAAiBpyC,MAAK,SAACuyC,EAAIC,GACzD,OAAOD,EAAGt4B,UAAYu4B,EAAGv4B,SADuC,IAGlE,IAAMw4B,EAAgB,GAOtB,IANMC,EAAuB,IAAIr1B,IAMZi1B,GAAAA,EAAAr7B,EAAAq7B,IAAAA,QAArB,SAAArjD,EAAA,OAAmC,CAGjC,GAFM0jD,GADR,WAJgB7lD,UAKa09C,EALMoI,eAAiB,IAKvBpI,EAJjBqI,mBAAqB,GAIJrI,EAJgBsI,MAAM3sD,KAAK,KAI3BqkD,EAHlBpjC,MAGkBojC,EAHHmI,QAGGnI,EAHcuI,eAInCC,EAAoBN,EAAqBn7C,IAAIo7C,IAAY,IACxClsD,OAGhB,CACL,IAAMwsD,EAAiBD,EAAkBA,EAAkBvsD,OAAS,GAC9DysD,EACMC,GAAmBF,EAAezL,QACxC4L,EACMD,GAAmB3I,EAAOhD,QAClC0L,GAAiBE,GACd5I,EAAOvwB,WAAcg5B,EAAeh5B,aACrCuwB,EAAOvwB,UAAYg5B,EAAeh5B,aACpC+4B,EAAkBhtD,KAAKwkD,GACvBiI,EAAczsD,KAAKwkD,EAAOziC,IAVzB,MAFLirC,EAAkBhtD,KAAKwkD,GACvBiI,EAAczsD,KAAKwkD,EAAOziC,IAe5B2qC,EAAqBjmD,IAAIkmD,EAASK,EApBD,CAwBnC,IAAMK,EAAuB,CAC3B,IAAO,EACP,IAAO,EACP,WAAY,IACZ,IAAO,GACP,KAAQ,GACR,KAAQ,IACR,YAAa,GACb,KAAQ,IACR,WAAY,GACZ,IAAO,KAGHC,EAAe9mD,MAAM24B,KAAKktB,GAC3BryC,MAAK,SAACuyC,EAAIC,GACT,IAAKD,EAAGt4B,YAAcu4B,EAAGv4B,WAAas4B,EAAGt4B,WAAau4B,EAAGv4B,UAAW,CAClE,GAAIs4B,EAAG/K,QAAUgL,EAAGhL,QAAU+K,EAAG/K,QAAUgL,EAAGhL,QAC1C+K,EAAGlwB,OAASmwB,EAAGnwB,MAAO,CACxB,IAAMkxB,EAAqBJ,GAAmBZ,EAAG/K,QAC3CgM,EAAqBL,GAAmBX,EAAGhL,QACjD,GAAI+L,GAAYC,EAGd,OAFgBH,EAAqBE,IAAa,IAClCF,EAAqBG,IAAa,EAL5B,CAS1B,OAAOjB,EAAGlwB,MAAQmwB,EAAGnwB,KAX6C,CAapE,OAAOkwB,EAAGt4B,UAAYu4B,EAAGv4B,SAdT,IAiBhBgD,EACqBw2B,KAE3B,IAAMC,EAAgB,GAMtB,IALMC,EAAuB,IAAIt2B,IAKZi2B,GAAAA,EAAAr8B,EAAAq8B,IAAAA,QAArB,SAAArkD,EAAA,OAAmC,CAGjC,GAHF,UACQ0jD,EAJCloD,KAAKmpD,MAIoBpJ,EAJPqJ,WAAa,IAINrJ,EAJmBK,KAAO,IAI1BL,EAHrBuI,eAILe,EAAoBH,EAAqBp8C,IAAIo7C,IAAY,IACxClsD,OAGhB,CAEL,GADMwsD,EAAiBa,EAAkBA,EAAkBrtD,OAAS,IAC/Dw2B,IACGi2B,EACMC,GAAmBF,EAAezL,YACxC4L,EACMD,GAAmB3I,EAAOhD,SAEpC,SAGAgD,EAAOnoB,MAAQ4wB,EAAe5wB,OAChCmoB,EAAOpoB,OAAS6wB,EAAe7wB,QAC/B0xB,EAAkB9tD,KAAKwkD,GACvBkJ,EAAc1tD,KAAKwkD,EAAOziC,KACjByiC,EAAOnoB,OAAS4wB,EAAe5wB,OACxCmoB,EAAOpoB,QAAU6wB,EAAe7wB,UAC1B8wB,EACMC,GAAmBF,EAAezL,WACxC4L,EACMD,GAAmB3I,EAAOhD,UAE/BgD,EAAOvwB,WAAcg5B,EAAeh5B,aACrCuwB,EAAOvwB,UAAYg5B,EAAeh5B,aACpC65B,EAAkB9tD,KAAKwkD,GACvBkJ,EAAc1tD,KAAKwkD,EAAOziC,KAzB3B,MAFL+rC,EAAkB9tD,KAAKwkD,GACvBkJ,EAAc1tD,KAAKwkD,EAAOziC,IA+B5B4rC,EAAqBlnD,IAAIkmD,EAASmB,EApCD,CAyCnChD,EAASU,SAAWV,EAASU,SAAS52B,QAAO,SAAC60B,GAC5C,IAAMC,EAAQD,EAAQC,MAQtB,OAPMC,EAAQF,EAAQE,QAClBD,IACG+C,EAAcrhD,SAASs+C,EAAM3nC,KAKhC4nC,IACG+D,EAActiD,SAASu+C,EAAM5nC,IAVoB,GAvLiB,CAqQ7EgsC,SAAO,GAAkBtE,EAASuE,EAAcC,GAE9BC,SAAA,EAACC,EAAGlpD,EAAKoG,GACvB,OAAO8iD,GAAKlpD,GAAOkpD,GAAK9iD,CADO,CAIjC,IAAMs+C,EAAQF,EAAQE,MAItB,GAAIA,GAASA,EAAMttB,OAASstB,EAAMvtB,OAAQ,CACxC,IAAIgyB,EAAazE,EAAMttB,MACnBgyB,EAAc1E,EAAMvtB,OAkBxB,GAjBIiyB,EAAcD,IAEfA,GAAD,EAAAn9B,EAA4B,CAACo9B,EAAaD,KAA1C,aAAaC,EAAb,iBAGGH,EAAQE,EACTJ,EAAaM,SACb7pD,KAAKQ,IAAI+oD,EAAaO,SAAUN,EAAS5xB,UAIxC6xB,EAAQG,EACTL,EAAaQ,UACb/pD,KAAKQ,IAAI+oD,EAAaS,UAAWR,EAAS7xB,WAIzC8xB,EAAQvE,EAAMttB,MAAQstB,EAAMvtB,OAC7B4xB,EAAaU,UACbV,EAAaW,WACf,OAAO,CAvB+B,CA+C1C,QAlBIlF,GAAWA,EAAQE,OAASF,EAAQE,MAAMkE,YACvCK,EAAQzE,EAAQE,MAAMkE,UACvBG,EAAaY,aACbZ,EAAaa,eAOfpF,GAAWA,EAAQC,OAASD,EAAQC,MAAMkD,gBACvCsB,EAAQzE,EAAQC,MAAMkD,cACvBoB,EAAac,iBACbd,EAAae,oBAKdb,EAAQzE,EAAQx1B,UACjB+5B,EAAagB,aACbhB,EAAaiB,cA3DuC,CAmH7CC,SAAA,GACTC,EAAWrE,EAAUsE,EAAuBC,GAW9C,IAAIzwB,EAEI2hB,EAb2D,OAAAxc,GAAA,sBAOnE,OAHwBxB,MAqC1B+sB,SAAiC9D,GAY/B,IAVA,IAAM+D,EAAW,CACf,KAAQ,OACR,KAAQ,OACR,KAAQ,OACR,KAAQ,OACR,KAAQ,OACR,KAAQ,QAGJC,EAAU,IAAIn7B,IACEm3B,GAAAA,EAAAv6B,EAAAu6B,IAAAA,QAAtB,8BACc7B,OACV6F,EAAQz8B,IAAI02B,EAAQE,OAGxB,IAAoB6F,GAAAA,EAAAv+B,EAAAu+B,IAAAA,QAApB,kBAA6B,CAA7B,UACE,IAAsB,SAAAv+B,EAAA5jB,OAAOU,KAAKwhD,KAAZ,QAAtB,kBACE,GADF,UACM5F,EAAMnI,OAAOp2C,SAASqkD,GAAU,CAClC9F,EAAMnI,OAASmI,EAAMnI,OAAO9oC,QAAQ+2C,EAASF,EAASE,IACtD,KAFkC,CAFX,CAjBY,CApChBC,CAA0B5E,EAASU,UAE5D,IAA6BmE,GACzB7E,EAASU,SAAU4D,GAAwC,EAC3DC,GAFJ,GAIIzwB,EAAY,KACZuwB,IACI5O,EAAU4O,EC4aNS,KD1aRhxB,EAAY2hB,EAAQ3hB,WAMxBksB,EAASU,SAAWV,EAASU,SAAS52B,QAAO,SAAC60B,GAC5C,IAAMoG,EAqDVC,SAA8BrG,EAAS7qB,GAOrC,IAAMmC,EAAgCwB,KAChCwtB,Ed/MqB/uB,GAAmB,YcgNtBgvB,KAGlBrG,EAAQF,EAAQE,MAChByE,EAAczE,GAASA,EAAMttB,OAAU,EACvCgyB,EAAe1E,GAASA,EAAMvtB,QAAW,EAI/C,GAAI2E,GAAa4oB,IAAuB,KAAbyE,GAAmC,KAAdC,KAC3C1E,EAAMnI,OAAOp2C,SAAS,UAAYu+C,EAAMnI,OAAOp2C,SAAS,UAC3D,OAAO,EAGT,GAAIu+C,EAAO,CAIT,GAHIsG,EAA0BC,GAAsBvG,EAAMnI,QAGtDmI,EAAMnI,OAAOp2C,SAAS,KAAM,CAc9B,GATA6kD,EAA0BC,GAF1BD,EAAkCE,GJ7QjC9M,QI2QKlB,EAAYwH,EAAMnI,OAAOptC,MAAM,OAOrCg8C,EAA0BC,GAFtBD,EAAkCD,GJ/QrC7M,QIgRsBnB,GAENwH,EAAM/vB,WAKL02B,GAHZC,EAA0BC,GAC5B7G,EAAM/vB,SAAUw2B,EJrRnB9M,UIwRC,OAAO,EAIT2M,EAAc,CAACA,EAAaG,GAAajwD,MAnBX,CAyBhC,IAAkBmwD,GAHZG,EAAqBD,GACvB7G,EAAM/vB,SAAUq2B,EJjSjB5M,UIoSD,OAAO,EAITsG,EAAMnI,OAASyO,CAlCN,CA2CX,GANMvG,EAAQD,EAAQC,MAMlBqG,GAAoBrG,GAASA,EAAMgH,WACnChH,EAAMlI,OAAO7oC,cAAcvN,SAAS,QACtC,OAAO,KAGLs+C,EAAO,CAMT,GALMlI,EAAqB6O,GACvB3G,EAAMlI,OAAQkI,EAAM9vB,WAIN02B,GAHZG,EAAqBD,GACvB9G,EAAM9vB,SAAU4nB,EJzTjB8B,UI4TD,OAAO,EAIToG,EAAMlI,OAASA,CAXN,CAcX,OAAOiI,EAAQ0C,cAAcwE,MAAK,SAACC,GAIjC,SAHKA,EAAaf,WAGdjxB,IACIiyB,EAAkBD,EAAaC,kBAE/BA,EAAgBjyB,WAAaA,EAPa,GArFJ,CArDhBkyB,CAAuBrH,EAAS7qB,GAE9D,IAAKixB,EAAL,CAi+CF,IAAMkB,EAAY,GA/9C2BtH,EAg+CjCC,OACVqH,EAAU/wD,KAA4BgxD,GAj+CKvH,EAk+C/BC,QAl+C+BD,EAo+CjCE,OACVoH,EAAU/wD,KAA4BgxD,GAr+CKvH,EAs+C/BE,OAx+CZ,CAIA,OAAOkG,CAPiD,IArBS,QA0LrEoB,SAAO,GAA+B53C,GACpC,IAAMtL,EAAO,GACb,IAAW5E,KAAOkQ,EAChBtL,EAAK/N,KAAKmJ,GAGZ4E,EAAKiM,OAGL,IADMk3C,IAAAA,EAAQ,GACInjD,GAAAA,EAAAkjB,EAAAljB,IAAAA,QAAlB,kBAAwB,CAAxB,cACQojD,EAAanzB,KAAKC,UAAU90B,IAC5BzD,EAAQ2T,EAAIlQ,cACGkE,QACb+jD,EACqBC,GAA+B3rD,GAC1DwrD,EAAMlxD,KAAKmxD,EAAa,IAAMC,KAExBE,EAAetzB,KAAKC,UAAUv4B,GACpCwrD,EAAMlxD,KAAKmxD,EAAa,IAAMG,GATV,CAYxB,MAAO,IAAMJ,EAAM/wD,KAAK,KAAO,GArBU,CAiC9BoxD,SAAA,GAA4B9H,EAAS+H,GAMhD,IAAMvlD,EAiBFwlD,EACEC,EACuBF,EAAAA,EAA7B,IAzBiE,OAAAztB,GAAA,uBAyBjE,IAnBM93B,EAAQA,SAACtM,EAAGkb,GAChB,GAAKlb,EAEE,CACL,IAAM6wC,EAA6B4B,GAAmBzyC,GAOtD,OANA6wC,EAAIqf,UAAYlwD,EAAEkwD,WAAah1C,EAAEg1C,UACjCrf,EAAImhB,eAAiBhyD,EAAEgyD,gBAAkB92C,EAAE82C,eAC3CnhB,EAAIohB,OAASjyD,EAAEiyD,QAAU/2C,EAAE+2C,OACvB/2C,EAAEg2C,kBAAoBrgB,EAAIqgB,kBAC5BrgB,EAAIqgB,gBAAkBh2C,EAAEg2C,iBAEnBrgB,CARF,CADL,OAAO31B,CAFa,EAiBpB42C,EAAc,KACZC,EAAW,GACYF,EAAAvgC,EAAAugC,GAAAA,EAAAA,EAAAA,OAA7B,0CAAAvoD,EAAA,iBACQ4oD,EAAAA,GACUR,GAA+BS,GAEzCC,EAAAA,MAAoBC,GACtBD,EAAAA,MAAMF,EAAAA,IAGRJ,EAAcxlD,EAAMwlD,EAAaM,EAAAA,MAAMF,EAAAA,KASvCH,EAAS1xD,KACJiyD,GAAoCH,GAAgBI,KAAK,4BAAC1hB,GAGzD,IADA,IAAI1C,EAAM,KACY,KAAA7c,EAAAuf,GAAO,KAAP,QAAtB,kBACE1C,EAAM7hC,EAAM6hC,EADd,EAAA9rC,OAGI8rC,IACFikB,EAAAA,MAAMF,EAAAA,IAAY/jB,EAClB2jB,EAAcxlD,EAAMwlD,EAAa3jB,GAR8B,CAAT,OAalE,WAAMyZ,QAAQE,IAAIiK,GAAlB,EAxDiE,CAyD7DD,GACFhI,EAAQ0C,cAAcnsD,KAAKyxD,GA1DoC,QAmEnEU,SAAO,GAAoCL,GACzC,IAAI7B,EAAc,CAAC,IACf6B,EAAenI,QACjBsG,EAAmCmC,GAC/BN,EAAenI,MAAMrQ,aAAallC,MAAM,MAE9C,IAAIg8C,EAAc,CAAC,IACf0B,EAAepI,QACjB0G,EAAmCgC,GAC/BN,EAAepI,MAAMpQ,aAAallC,MAAM,MAG9C,IADA,IAAMs9C,EAAW,GACQzB,GAAAA,EAAAh/B,EAAAg/B,IAAAA,QAAzB,kBAAsC,CAAtC,UACE,IAAyBG,IAAAA,EAAAn/B,EAAAm/B,GAAAA,EAAAA,EAAAA,OAAzB,6BAAAnnD,EAAA,iBACQi0B,EAAAA,GAA8Bm1B,GAAYP,GAC5CA,EAAenI,QAGjBzsB,EAAAA,GAAKysB,MAAMrQ,YAAmC4K,GAFRoO,GAClCp1B,EAAAA,GAAKysB,MAAMrQ,aAEDoS,IAEZoG,EAAepI,QAGjBxsB,EAAAA,GAAKwsB,MAAMpQ,YAAmC4K,GAFRoO,GAClCp1B,EAAAA,GAAKwsB,MAAMpQ,aAEDqS,IAEhB+F,EAAS1xD,KAAK,IAAIunD,QAAQ,4BAAC7J,EAAS6U,GAClCzxB,UAAU0xB,kBAAkB5B,aAAa1zB,EAAAA,IAAMg1B,MAAK,SAAC1hB,GACnDkN,EAAQlN,EADmD,IAE1DiiB,MAAMF,EAHoC,CAArB,MAfQ,CAsBtC,OAAOhL,QAAQE,IAAIiK,GAAUe,OAAM,kBAE7Bz0B,KAAKC,UAAU6zB,GACZ,IAHiC,GAlCe,CAqD9CY,SAAA,GAA4BlH,EAAU4D,EAC/CuD,EAAWtD,GACb,IAQiCA,EAAAA,EAAjC,EACMuD,EACkBpH,EAAAA,EAAtB,EAEQgG,EAagBA,EAAAA,EAAtB,EAekBhG,EAAAA,EAAtB,EAEQgG,EAcgBA,EAAAA,EAAtB,EAzDgC,OAAAztB,GAAA,+BAGlC,GAFwBynB,EAASmF,MAAK,SAAClH,GACfhpD,OAAtBgpD,EAAQ0C,cAAc1rD,MAAAA,IAGtB,SAAAklC,SAI+B0pB,EAAAp+B,EAAAo+B,GAAAA,EAAAA,EAAAA,OAAjC,KATkC,OASlC,qCACMuD,GAAqB,EACHpH,EAAAv6B,EAAAu6B,GAAAA,EAAAA,EAAAA,OAXU,OAWhC,kCAEQgG,EAAyCqB,GAC3CpJ,EAAS2F,EAAuBuD,GAC/B/9B,QAAO,aAACk+B,GAKP,QAHMp/B,EAASo/B,EAAQ,IACEC,wBACvBr/B,EAAOq/B,uBAAuBn0B,aACXo0B,EAAAA,EALF,IAWHxB,EAAAvgC,EAAAugC,GAAAA,EAAAA,EAAAA,OA1BQ,OA0B9B,0CAEE,IAA6ByB,GACzBxJ,EAASqJ,GADb,GA5B4B,OA0B9B,wBA1B8B,QA+B1BrJ,EAAQ0C,cAAc1rD,SACxBmyD,GAAqB,GArBzB,wBAXgC,OAmChC,GAAIA,EAEF,SAAAjtB,SA5BJ,gBAAA18B,EAAA,oBATkC,OAyCZuiD,EAAAv6B,EAAAu6B,GAAAA,EAAAA,EAAAA,OAzCY,QAyClC,kCAEQgG,EAAyCqB,GAC3CpJ,EAAS2F,EAAuBuD,GAC/B/9B,QAAO,SAACk+B,GAMP,QAHMl0B,GADAlL,EAASo/B,EAAQ,IACEC,wBACvBr/B,EAAOq/B,uBAAuBn0B,aAEVywB,EAAoBjkD,SAASwzB,EANhC,IAYH4yB,EAAAvgC,EAAAugC,GAAAA,EAAAA,EAAAA,OAzDU,QAyDhC,UAzDgC,CAyClC,wBAzCkC,CA2D9B,OAFF,UAEE,IAA6ByB,GACzBxJ,EAASqJ,GADb,IA3D8B,QAyDhC,mBA1Cc,KAfkB,IA6EpCI,SAAO,GAAoBzJ,EAAS2F,EAAuBuD,GACzD,IAAMjJ,EAAQD,EAAQC,MAChBC,EAAQF,EAAQE,MAOhBwJ,EAAe,GACfC,EAAe,GACrB,GAAIzJ,EACF,IAAiC0J,IAAAA,EAAApiC,EAAN04B,EAAM0J,eAAAA,EAAAA,EAAAA,QAAjC,kBAAgD,CAC9C,IAAIpD,EAAwBmC,GAD9B,WAME,GAAInC,EAAY7kD,SAAS,OAASs+C,EAAO,CACvC,IAAMvH,EAAY8N,EAAY77C,MAAM,KAC9Bk/C,EAAyBhB,GAAaxO,GAE5CmM,EAAkCE,GJ3lBnC9M,QI4lBwBlB,GAOjBoO,EAA0BC,GAC5B8C,EAJJlD,EAA0BC,GAFtBD,EAAkCD,GJ7lBvC7M,QI8lBwBnB,GAENmR,GJhmBlBhQ,SIqmBC8P,EAAapzD,KAAK,CAChBs5C,YAAaiX,EACbgD,SAAU,EACVC,QAAS/J,EAAQx1B,WAAa,EAC9Bw/B,WAAY,EACZC,kBAAkB,GApBmB,CA8CzC,GAtBAzD,EAA0BC,GAAsBD,GAM1C0D,EAAc,CAClBra,YANyBkX,GACb8B,GAAaxO,GAAemM,EJjnBzC5M,SI8nBChnB,MAAOstB,EAAMttB,OAAS,GACtBD,OAAQutB,EAAMvtB,QAAU,GAExBo3B,QAAS7J,EAAM11B,WAAaw1B,EAAQx1B,WAAa,EAEjD2/B,UAAWjK,EAAMkE,WAAa,GAE5BlE,EAAM9E,IACR,OAAQ8E,EAAM9E,KACZ,IAAK,MACH8O,EAAYE,iBAAmB,OAC/B,MACF,IAAK,KACHF,EAAYE,iBAAmB,KAC/B,MACF,IAAK,MACHF,EAAYE,iBAAmB,MAIjClK,EAAMmK,aACRH,EAAYG,WAAanK,EAAMmK,YAEjCX,EAAanzD,KAAK2zD,EApE4B,CAuElD,GAAIjK,EACF,IAAiC2J,GAAAA,EAAApiC,EAANy4B,EAAM2J,gBAAAA,QAAjC,kBAIQ5C,EAAqBD,GAHrB8C,EAAyBhB,GADjC,WAEQ9Q,EAAqB6O,GACb+B,GAAUtO,GAAewP,GJ3pBtChQ,SIgqBD8P,EAAapzD,KAAK,CAChBs5C,YAAamX,EACb8C,SAAU7J,EAAMkD,eAAiB,EACjC4G,QAAS9J,EAAMz1B,WAAaw1B,EAAQx1B,WAAa,EACjDw/B,WAAY/J,EAAMmD,mBAAqB,EACvC6G,iBAAkBhK,EAAMqK,eAe9B,IAPMC,EAA2B,GACN,GAAvBb,EAAa1yD,QACf0yD,EAAanzD,KAAK,MAEO,GAAvBozD,EAAa3yD,QACf2yD,EAAapzD,KAAK,MAEMmzD,GAAAA,EAAAliC,EAAAkiC,IAAAA,QAA1B,SAAAlqD,EAAA,OACE,IADF,UAC4BmqD,GAAAA,EAAAniC,EAAAmiC,IAAAA,QAA1B,4BAEQa,EAAsB,CAC1B11D,KAAMo0D,EAAY,OAAS,gBAEzBgB,IACFM,EAAoBtK,MAAQgK,GAE1BO,IACFD,EAAoBvK,MAAQwK,GAE9BF,EAAyBh0D,KAAKi0D,GASlC,KAHME,GAFgB1K,EAAQE,MAAQF,EAAQE,MAAMyK,SAAW,IAE7Bx5C,OADZ6uC,EAAQC,MAAQD,EAAQC,MAAM0K,SAAW,KAI9C3zD,OACf,MAAO,CAACuzD,GASV,IALMlB,EAAU,GAIVuB,EAAsB,IAAIh9B,IACb88B,GAAAA,EAAAljC,EAAAkjC,IAAAA,QAAnBlrD,EAAA,KAAAA,EAAA,SAAAA,EAAAA,EAAA,MACOorD,EAAoB9iD,IAAI+iD,EAAK11B,YAChCy1B,EAAoB5tD,IAAI6tD,EAAK11B,UAAW,IAE1Cy1B,EAAoB9iD,IAAI+iD,EAAK11B,WAAW5+B,KAAKs0D,GAQ/C,IALMC,EACFnF,EAAwB,WAAa,WACnCoF,EACFpF,EAAwB,CAAC,sBAAwB,CAAC,aAE9B,KAAAn+B,EAAAojC,EAAoBtmD,SAApB,QAAxB,SAAA9E,EAAA,OAAoD,CAElD,IAFF,UACQwrD,EAAmC,GACtBT,GAAAA,EAAA/iC,EAAA+iC,IAAAA,QAAnB,kBAA6C,CAErCtgC,EACDrmB,OAAOsN,OAAO,CAAC,EAHtB,EAAAyF,OAgBE,IAXA,IAAMg0C,EAAWC,EAAoB9iD,IAAIqtB,GAGnC81B,EAAkB,CACtB91B,UAAWA,EACX0iB,aAAc,OACdiT,gBAAiBA,EACjBI,sBAAuB,WACvBH,aAAcA,GAGGJ,GAAAA,EAAAnjC,EAAAmjC,IAAAA,QAAnB,kBAA6B,CAC3B,IADF,WACWp1B,UAAYs1B,EAAKt1B,SAASv+B,OAAQ,CAEzC,IADA,IAAMm0D,EAAgB,IAAIvgC,IACE2K,EAAA/N,EAALqjC,EAAKt1B,UAAAA,EAAAA,EAAAA,QAA5B,kBACE41B,EAAc7hC,IADhB,EAAAiM,MAC6BsiB,cAO7BoT,EAAgBpT,aAAegT,EAAKt1B,SAAS,GAAGsiB,YAVP,CAavCgT,EAAK/0B,gCACPm1B,EAAgBC,sBAAwB,YAEtCL,EAAK90B,0BACPk1B,EAAgBH,gBAAkB,cAE3B/T,cACPkU,EAAgBF,aAAe,CAACF,EAAK9T,cAGnCkJ,IACGgL,EAAgBhL,OASf4K,EAAKjU,mBACPqU,EAAgBhL,MAAMrJ,iBAClBqU,EAAgBhL,MAAMrJ,kBACtBiU,EAAKjU,kBAEXqU,EAAgBhL,MAAMmL,WAClBH,EAAgBhL,MAAMmL,YACtBP,EAAK50B,kBAdTg1B,EAAgBhL,MAAQ,CACtBmL,WAAYP,EAAK50B,iBAEf40B,EAAKjU,mBACPqU,EAAgBhL,MAAMrJ,iBAAmBiU,EAAKjU,mBAaV,IAApCqU,EAAgBhL,MAAMmL,mBACjBH,EAAgBhL,MAAMmL,YAI7BlL,IACG+K,EAAgB/K,OASf2K,EAAKjU,mBACPqU,EAAgB/K,MAAMtJ,iBAClBqU,EAAgB/K,MAAMtJ,kBACtBiU,EAAKjU,kBAEXqU,EAAgB/K,MAAMkL,WAClBH,EAAgB/K,MAAMkL,YACtBP,EAAK70B,kBAdTi1B,EAAgB/K,MAAQ,CACtBkL,WAAYP,EAAK70B,iBAEf60B,EAAKjU,mBACPqU,EAAgB/K,MAAMtJ,iBAAmBiU,EAAKjU,mBAaV,IAApCqU,EAAgB/K,MAAMkL,mBACjBH,EAAgB/K,MAAMkL,WAtEN,CA0E7BnhC,EAAOq/B,uBAAyB2B,EAChCD,EAAiCz0D,KAAK0zB,EA3FK,CA6F7Co/B,EAAQ9yD,KAAKy0D,EA/FqC,CAiGpD,OAAO3B,CA5P6D,CAuQtEgC,SAAO,GAAsBtT,EAAQ5nB,GAMnC,MAA4B,QAAxB4nB,EAAO7oC,cdxpBkBo8C,Kc4pBlB,OAFA,OAOkB,SAAzBvT,EAAO7oC,cdjqBkBo8C,McqqB8B,OAA9BC,GAAiBp7B,GACjC,OAHF,OAUJ4nB,CA3BsC,CAqC/CyT,SAAO,GAAsBjT,GAC3B,GAAIA,EAAM52C,SAAS,QAAS,CAI1B,IAAM8pD,EAAUlT,EAAM5tC,MAAM,KAC5B,GAAsB,GAAlB8gD,EAAQz0D,OAKV,OAJIuB,EAASkzD,EAAQ1wC,QAAU,KAC/BxiB,GAAUylB,SAASytC,EAAQ1wC,QAAS,IAAIzX,SAAS,MAE5C,MAAQ0a,SAASytC,EAAQ1wC,QAAS,IAAIzX,SAAS,KAAKE,OAAO,EATxC,MAYrB,GAAa,OAAT+0C,EAgBT,MAAO,gBAET,OAAOA,CA/B2B,CAwLpCmT,SAAO,GAAe1L,GAEpB,IAAMC,EAAQD,EAAQC,MAEhBC,EAAQF,EAAQE,MAGhByL,EAAgB1L,EAAQA,EAAM9vB,SAAW,KAEzCy7B,EAAgB1L,EAAQA,EAAM/vB,SAAW,KAGzC+xB,EAAajC,EAAQA,EAAMlI,OAAS,KAEpCkK,EAAa/B,EAAQA,EAAMnI,OAAS,KAGpCA,EAAS,GACXkK,GACFlK,EAAOxhD,KAAK0rD,GAEVC,GACFnK,EAAOxhD,KAAK2rD,GAId,IAAM2J,EAAY,GACd3L,GACF2L,EAAUt1D,KAAK2pD,EAAM/vB,UAEnB8vB,GACF4L,EAAUt1D,KAAK0pD,EAAM9vB,UAGjBA,EAAW07B,EAAU,IAAM,KAGjC,IAAMC,EAAQ,GACV7L,GACF6L,EAAMv1D,KAAK0pD,EAAM5wC,MAEf6wC,GACF4L,EAAMv1D,KAAK2pD,EAAM7wC,MAGbA,EAAOy8C,EAAM,IAAM,KAGzB,IAAMzI,EAAQ,IAAIz4B,IAClB,GAAIq1B,EACF,IAAyBoD,IAAAA,EAAA77B,EAANy4B,EAAMoD,OAAAA,EAAAA,EAAAA,QAAzB,kBACEA,EAAM/5B,IADR,EAAAyiC,OAIF,GAAI7L,EACF,IAAyBmD,GAAAA,EAAA77B,EAAN04B,EAAMmD,QAAAA,QAAzB,kBACEA,EAAM/5B,IADR,EAAAyiC,OAgFF,OA1EMC,EAAQ,CACZ1zC,GAAI0nC,EAAQ1nC,GACZ2zC,QAAQ,EACRn3D,KAAM,UACN01B,UAAWw1B,EAAQx1B,UACnBntB,SAAU2iD,EAAQ3iD,SAClBsa,MAAO,KACPtI,KAAMA,EACNujB,MAAO,KACPD,OAAQ,KACRyxB,UAAW,KACX8H,iBAAkB,KAClB9Q,IAAK,KACLiP,WAAY,KACZ8B,YAAa,KACbh8B,SAAUA,EACVw7B,cAAeA,EACfC,cAAeA,EACf7T,OAAQA,EAAOrhD,KAAK,MACpBwrD,WAAYA,EACZD,WAAYA,EACZmK,QAASpM,EAAQoM,QACjB/I,MAAOtmD,MAAM24B,KAAK2tB,GAClBgJ,WAAY,KACZxkD,QAAQ,EACRykD,QAAS,KACTC,QAAS,KACTpJ,cAAe,KACfC,kBAAmB,KACnBkH,cAAc,EACdkC,YAAa,KACbC,eAAgB,KAChBC,eAAgB,KAChBC,gBAAiB,KACjBC,gBAAiB,KACjBC,eAAgB,KAChBC,gBAAiB,KACjBC,qBAAsB,KACtBC,iBAAkB,MAGhB9M,IACF8L,EAAMM,QAAUpM,EAAM5nC,GACtB0zC,EAAMW,gBAAkBzM,EAAM+M,WAC9BjB,EAAMp5B,MAAQstB,EAAMttB,OAAS,KAC7Bo5B,EAAMr5B,OAASutB,EAAMvtB,QAAU,KAC/Bq5B,EAAM5H,UAAYlE,EAAMkE,WAAa,KACrC4H,EAAME,iBAAmBhM,EAAMgM,kBAAoB,KACnDF,EAAMU,eAAiBxM,EAAM11B,WAAa,KAC1CwhC,EAAM5Q,IAAM8E,EAAM9E,KAAO,KACzB4Q,EAAM3B,WAAanK,EAAMmK,YAAc,KACvC2B,EAAMG,YAAcjM,EAAMiM,aAAe,KAErClK,EAAWtgD,SAAS,OACtBqqD,EAAM7I,cAAgBjD,EAAMiD,cAC5B6I,EAAM5I,kBAAoBlD,EAAMkD,kBAChC4I,EAAM1B,aAAepK,EAAMoK,aAC3B0B,EAAMgB,iBAAmB9M,EAAM8M,mBAI/B/M,IACF+L,EAAMO,QAAUtM,EAAM3nC,GACtB0zC,EAAMY,gBAAkB3M,EAAMgN,WAC9BjB,EAAM7I,cAAgBlD,EAAMkD,cAC5B6I,EAAM5I,kBAAoBnD,EAAMmD,kBAChC4I,EAAMS,eAAiBxM,EAAMz1B,WAAa,KAC1CwhC,EAAM1B,aAAerK,EAAMqK,aAC3B0B,EAAMr0C,MAAQsoC,EAAMtoC,MACpBq0C,EAAMK,WAAapM,EAAMoD,MACzB2I,EAAMe,qBAAuB9M,EAAM8M,qBACnCf,EAAMgB,iBAAmB/M,EAAM+M,kBAG1BhB,CAvIsB,CA+I/BkB,SAAO,GAAkBnS,GA6CvB,MAzCciR,CACZ1zC,GAAIyiC,EAAOziC,GACX2zC,QAAQ,EACRn3D,KAAkB0jD,GAClBhuB,UAAW,EACXntB,SAAU09C,EAAO19C,SACjBsa,MAAOojC,EAAOpjC,MACdtI,KAAM0rC,EAAO1rC,MAAQ,KACrBujB,MAAO,KACPD,OAAQ,KACRyxB,UAAW,KACX8H,iBAAkB,KAClB9Q,IAAK,KACLiP,WAAY,KACZ8B,YAAa,KACbh8B,SAAU4qB,EAAO5qB,SACjBw7B,cAAe,KACfC,cAAe,KACf7T,OAAQgD,EAAOhD,QAAU,KACzBmK,WAAY,KACZD,WAAY,KACZmK,QAASrR,EAAOqR,QAChB/I,MAAOtI,EAAOsI,MACdgJ,WAAY,KACZxkD,OAAQkzC,EAAOlzC,OACfykD,QAAS,KACTC,QAAS,KACTpJ,cAAe,KACfC,kBAAmB,KACnBkH,cAAc,EACdkC,YAAa,KACbC,eAAgB,KAChBC,eAAgB,KAChBC,gBAAiB,KACjBC,gBAAiB,KACjBC,eAAgB9R,EAAOkS,WACvBH,gBAAiB,KACjBC,qBAAsBhS,EAAOgS,qBAC7BC,iBAAkBjS,EAAOiS,iBA1CI,CAqDjCG,SAAO,GAAmBpS,GAGxB,IAAInoB,EAAQmoB,EAAOnoB,OAAS,KACxBD,EAASooB,EAAOpoB,QAAU,KAI1Bj1B,EAAY,KAIZq9C,EAAOqS,eACT1vD,EAAgC2vD,GAApBtS,EAAOqS,eAErB,IAAIE,EAASvS,EAAOyR,YAuDpB,OAtDI9uD,IACF4vD,EAAS5vD,EEvlCC8uD,aFulC6Bc,GAErCA,GAAmB,MAAT16B,IACZA,GAASwN,OAAOktB,EAAO3iD,MAAM,KAAK,KAEhC2iD,GAAoB,MAAV36B,IACZA,GAAUyN,OAAOktB,EAAO3iD,MAAM,KAAK,KAMvBqhD,CACZ1zC,GAAIyiC,EAAOziC,GACX2zC,QAAQ,EACRn3D,KJ1wCGglD,QI2wCHtvB,UAAWuwB,EAAOvwB,WAAa,EAC/BntB,SAAU,GACVsa,MAAO,KACPtI,KAAM,KACNujB,MAAAA,EACAD,OAAAA,EACAyxB,UAAW,KACX8H,iBAAkB,KAClB9Q,IAAK,KACLiP,WAAY,KACZ8B,YAAa,KACbh8B,SAAU4qB,EAAO5qB,SACjBw7B,cAAe,KACfC,cAAe,KACf7T,OAAQgD,EAAOhD,QAAU,KACzBmK,WAAY,KACZD,WAAY,KACZmK,SAAS,EACT/I,MAAO,GACPgJ,WAAY,KACZxkD,QAAQ,EACRykD,QAAS,KACTC,QAAS,KACTpJ,cAAe,KACfC,kBAAmB,KACnBkH,cAAc,EACdkC,YAAac,GAAU,KACvBb,eAAgB,KAChBC,eAAgB,KAChBC,gBAAiB,KACjBC,gBAAiB,KACjBC,eAAgB,KAChBC,gBAAiB/R,EAAOkS,WACxBF,qBAAsB,KACtBC,iBAAkB,KAnEY,CAgFlCO,SAAO,GAAaC,GAIlB,OAHKA,EAAA,aACHA,EAAA,WAAkDC,MAE7CD,EAAA,UAJuB,CAYhCE,SAAO,GAAsBC,GAI3B,IAAM3B,EAAoB4B,GAA+BD,GAkBzD,OAjBA3B,EAAMC,OAA2B,YAAlB0B,EAAUt4C,KACzB22C,EAAMl3D,KAAO,OACbk3D,EAAMa,eAAiBc,EAAUr1C,GACX,YAAlBq1C,EAAUt+C,OAEZ28C,EAAM77B,SAAW,WAEG,aAAlBw9B,EAAUt+C,OACZ28C,EAAM77B,SAAW,YAEfw9B,EAAUt+C,OACZ28C,EAAM3I,MAAQ,CAACsK,EAAUt+C,OAEL,UAAlBs+C,EAAUt+C,OACZ28C,EAAMnkD,QAAS,GAGVmkD,CAtB+B,CA8BxC6B,SAAO,GAAuBC,GAI5B,IAAM9B,EAAoB4B,GAA+BE,GAczD,OAbA9B,EAAMC,OAAS6B,EAAWC,QAC1B/B,EAAMl3D,KAAO,UACbk3D,EAAMY,gBAAkBkB,EAAWx1C,GAEZ,QAAnBw1C,EAAWz+C,OACb28C,EAAMI,SAAU,GAEd0B,EAAWz+C,OACb28C,EAAM3I,MAAQ,CAACyK,EAAWz+C,MAC1B28C,EAAMK,WAAa,CAACyB,EAAWz+C,MAC/B28C,EAAMr0C,MAAQm2C,EAAWn2C,OAGpBq0C,CAlBiC,CA+B1CgC,SAAO,GAA+BR,GACpC,IAAMnwD,EAAWmwD,EAAWnwD,SA4C5B,MAzCc2uD,CACZ1zC,GAA2B21C,GAAaT,GACxCvB,QAAQ,EACRn3D,KAAM,GACN01B,UAAW,EACXntB,SAAmCghD,GAAUhhD,GAAY,OACzDsa,MAAO61C,EAAW71C,MAClBtI,KAAMm+C,EAAWn+C,KACjBujB,MAAO,KACPD,OAAQ,KACRyxB,UAAW,KACX8H,iBAAkB,KAClB9Q,IAAK,KACLiP,WAAY,KACZ8B,YAAa,KACbh8B,SAAU,KACVw7B,cAAe,KACfC,cAAe,KACf7T,OAAQ,KACRmK,WAAY,KACZD,WAAY,KACZmK,SAAS,EACT/I,MAAO,GACPx7C,QAAQ,EACRwkD,WAAY,KACZC,QAAS,KACTC,QAAS,KACTpJ,cAAe,KACfC,kBAAmB,KACnBkH,cAAc,EACdkC,YAAa,KACbC,eAAgB,KAChBC,eAAgB,KAChBC,gBAAiB,KACjBC,gBAAiB,KACjBC,eAAgB,KAChBC,gBAAiB,KACjBC,qBAAsB,KACtBC,iBAAkB3vD,EA1C4B,CAsDlD6wD,SAAO,GAAWlO,GAChB,OAAOA,EAAQmO,sBACXnO,EAAQoO,oBACqB,GAA7BpO,EAAQqO,iBAHa,CAY3BC,SAAO,GAAoBvM,GACzB,OAAOA,EAAS52B,QAAO,SAAC60B,GACtB,OAA8BuO,GAAWvO,EADP,GADD,CAiBrCwO,SAAO,GACHzI,EAAS0I,EAAmBC,EAAeC,GAI7C,IAAIC,EAAS7I,EAIPqG,EAAUrG,EAAQ56B,QAAO,SAAC4vB,GAC9B,OAAOA,EAAOqR,OAD2B,IAIvCA,EAAQp1D,SACV43D,EAASxC,GAKX,IAAMyC,EAAgBD,EAAO53D,OAAS43D,EAAO,GAAGvxD,SAAW,GAO3D,GANAuxD,EAASA,EAAOzjC,QAAO,SAAC4vB,GACtB,OAAOA,EAAO19C,UAAYwxD,CADO,IAM/BJ,EAAmB,CACrB,IAAMK,EAA8BrO,GAClBpC,GAAUoQ,GACxB1I,EAAQxP,KAAI,SAACwE,GAAkB19C,OAAP09C,EAAO19C,QAAAA,KAI/ByxD,IACFF,EAAS7I,EAAQ56B,QAAO,SAAC4vB,GAEvB,OAD6BsD,GAAUtD,EAAO19C,WAC7ByxD,CAFiB,IARjB,CAqBvB,GALAF,EAASA,EAAOzjC,QAAO,SAAC4vB,GACtB,OAAOA,EAAOlzC,QAAU8mD,CADS,IAK/BD,GAGF,IAFMK,EAAqCC,GACvCJ,EAAQF,IACI13D,OACd,OAAO+3D,OAST,GAHME,EAAgBL,EAAOzjC,QAAO,SAAC4vB,GACnC,OAA8B,GAAvBA,EAAOsI,MAAMrsD,MAD0B,IAG5Ci4D,EAAcj4D,OAChB,OAAOi4D,EAYX,OAJMC,EAAWN,EAAOrY,KAAI,SAACwE,GAC3B,OAAOA,EAAOsI,KADwB,IAErCjf,OAA6B+qB,GAAgB,IAE3CD,EAASl4D,OAGgBg4D,GAAqBJ,EAAQM,EAAS,IAF3DN,CAzEqD,CAwFhEQ,SAAO,GAAqBrJ,EAAS2I,GACnC,OAAO3I,EAAQ56B,QAAO,SAAC4vB,GACrB,OAAOA,EAAOsI,MAAM1hD,SAAS+sD,EADG,GADgB,CA0EpDW,SAAO,GAAsBtU,EAAQuU,GAC9BA,EAAct4D,SAGbu4D,EAAeD,EAAcnkC,QAAO,SAACqkC,GACzC,OAAqB9L,GAAmB3I,EAAOhD,SAC1B2L,GAAmB8L,EAAazX,OADrD,IAEGxnC,MAAK,SAACra,EAAGkb,GACR,OAAKlb,EAAEs0B,WAAcpZ,EAAEoZ,WAAat0B,EAAEs0B,WAAapZ,EAAEoZ,UAG9Ct0B,EAAEs0B,UAAYpZ,EAAEoZ,WAFbt0B,EAAE08B,OAAS,IAAMxhB,EAAEwhB,OAAS,EAFxB,IAMpBmoB,EAAO0U,eAAiBF,EAAa,GACX,EAAtBA,EAAav4D,SACT04D,EAAuBH,EAAaj0C,MAAK,SAACk0C,GAC9C,OAAAzU,EAAOnoB,OAAS48B,EAAa58B,OAC7BmoB,EAAOpoB,QAAU68B,EAAa78B,MAD9B,QAGAooB,EAAO0U,eAAiBC,EAnBsB,CAmDpDC,SAAO,GAAwB5U,GAI7B,MJlrDKlB,SIkrD8BkB,EAlHrBjmD,KAmHL,qBACaimD,EAAOhD,OACpB,cAAegD,EAAOvwB,UACtB,kBAAoBuwB,EAAOoI,cAC3B,sBAAwBpI,EAAOqI,kBJxrDnCxJ,SI2rD8BmB,EA9GrBjmD,KA+GL,qBACaimD,EAAOhD,OACpB,cAAgBgD,EAAOvwB,UACvB,cAAgBuwB,EAAOqJ,UACvB,UAAYrJ,EAAOnoB,MACnB,WAAamoB,EAAOpoB,OAGtB,wBArB8B,CAh5DzC7F,EAAA,yBAAA8iC,IAiRSA,GnF++CP,kBmF/+COC,OAwqDTtH,GAA8C,CAAC,EAI/CkF,GAAsC,EAatCqC,IACK9yD,IADiD4wB,KACjD5wB,IAAI,iBAAiB,GACrBA,IAAI,aAAa,GACjBA,IAAI,cAAc,GAClBA,IAAI,aAAa,GA0BtB+yD,IACK/yD,IADkC4wB,KAClC5wB,IAAI,aArB8BgzD,mHAsBlChzD,IAAI,aAd8BizD,2bG38DrCtrD,SAAA,KAAe,IAAD,OAEZvM,KAAK83D,EAAU,KAGf93D,KAAK+3D,GAAW,EAGhB/3D,KAAKg4D,EAAsB,IAAcrmC,EAGzC3xB,KAAKi4D,EAAgB,IAAetjC,EAMhCsK,UAAUi5B,YAAcj5B,UAAUi5B,WAAW9kC,kBAC/CpzB,KAAKi4D,EAAc9jC,EACY8K,UAAUi5B,WACrC,UACA,WACE,GAAI,EAAKH,GAAY,EAAKI,EAAQC,sBAAuB,CACvD,EAAKJ,EAAsB,IAAcrmC,EACrC,EAAKwmC,GACP,EAAKH,EAAoBpmC,UAAU,EAAKumC,EAAQE,UAElD,IAAMC,EAAgB,EAAKC,gBACvBD,GAAiBr5B,UAAUu5B,QAC7B,EAAKV,EAAQQ,EAAe,EAAKH,EAAQM,kBACrC,EAAKN,EAAQO,iBARoC,CADrD,IAmBZ14D,KAAK24D,EAAY,GAGjB34D,KAAK44D,EAAgB,EAGrB54D,KAAK64D,GAAmB,EAgBxB74D,KAAK84D,EAHL94D,KAAK+4D,EAHL/4D,KAAKm4D,EAHLn4D,KAAKg5D,EAAoB,KAYzBh5D,KAAKi5D,EAAuB,IAAe/3B,IAAM,WAC/C,GAAI,EAAK62B,GAAY,EAAKI,EAAQe,sBAAuB,CACvD,IAAMZ,EAAgB,EAAKC,mBAEzB,EAAKT,EAAQQ,EAAe,EAAKH,EAAQM,kBACrC,EAAKN,EAAQO,iBAJoC,CADJ,IAWvD14D,KAAKm5D,EAAe,IA5ER,UA+Xd,GAAAC,GAKE,IAAK,EAAKP,EAAkB,CAEhBb,IAAAA,EAALA,EAAKA,EAAV,KrCnTK,EAAKvnC,GAAiB,EAAKC,GqCqT9B,OAEF,EAAKmoC,GAAmB,EAExB,EAAKG,GAC8D,KAA9D,EAAKb,EAAQkB,eAAiB,EAAKlB,EAAQmB,gBATtB,CAahB5rB,KAAK6rB,MACG,EAAKP,EACiB,IAA9B,EAAKb,EAAQkB,iBAKnBf,EAAgB,EAAKC,gBACD,EAAKlmC,uBAG3BimC,GAKF,EAAKR,EAAQQ,EAAe,EAAKH,EAAQM,kBACrC,EAAKN,EAAQO,kBAnCH,CAoElBc,SAAA,GAAAA,EAAuBrN,EAAcxC,EAAUiD,EAAWF,GACxD,GAAI,EAAKyM,EAAc,CACrB,IAAMM,EAAa,EAAKN,EAAaO,KACjCD,IACF9P,EAAWA,EAAS52B,QAAO,SAAC60B,GAC1B,OAAKA,EAAQx1B,YAAcqnC,GAGpB7R,EAAQx1B,WAAaqnC,CAJU,IAHrB,CAwBvB,OAZItN,IACFxC,EAAWA,EAAS52B,QAAO,SAAC60B,GAK1B,OAA8B6P,GAC1B7P,EAASuE,EACO,CAAC3xB,MAAOkyB,EAAUnyB,OAAQqyB,GAPR,KAWnCjD,EAASxxC,MAAK,SAACuyC,EAAIC,GACxB,OAAOD,EAAGt4B,UAAYu4B,EAAGv4B,SADM,GAzBiC,EA/WpE6R,EAAAA,GAAAA,WAAAA,KAAAA,WACEjkC,KAAK83D,EAAU,KACf93D,KAAK+3D,GAAW,EAChB/3D,KAAK24D,EAAY,GACjB34D,KAAK44D,EAAgB,EAErB54D,KAAK+4D,EADL/4D,KAAKg5D,EAAoB,KAGrBh5D,KAAK84D,IACP94D,KAAK84D,EAAgBa,aACrB35D,KAAK84D,EAAkB,MAGzB94D,KAAKi5D,EAAqBh1B,OAE1BjkC,KAAKm5D,EAAe,IAff,EAyBPS,EAAA5lC,QAAAA,WAEEh0B,KAAKi4D,EAAcjkC,UACnBh0B,KAAKi5D,EAAuB,IAHpB,EAWVW,EAAAh2C,KAAAA,SAAKi2C,GACH75D,KAAK83D,EAAU+B,CADI,IAUrBtB,cAAAA,WACE,IAAI3L,EAAYt1B,IACZo1B,EAAWp1B,IAEf,GAAIt3B,KAAKm4D,EAAQ2B,qBAAsB,CACrC,IAAMC,EACF/5D,KAAKm4D,EAAQ6B,uBAAyB,EAAIzlD,EAAOwlD,iBACrDnN,EAAYr4C,EAAO0lD,OAAO1/B,OAASw/B,EACnCrN,EAAWn4C,EAAO0lD,OAAOz/B,MAAQu/B,CAJI,CAOnC/5D,KAAK84D,GAAmB94D,KAAKm4D,EAAQe,wBACjCa,EACF/5D,KAAKm4D,EAAQ6B,uBAAyB,EAAIzlD,EAAOwlD,iBACrDnN,EAAYhqD,KAAKQ,IACbwpD,EAAW5sD,KAAK+4D,EAAcmB,aAAeH,GACjDrN,EAAW9pD,KAAKQ,IACZspD,EAAU1sD,KAAK+4D,EAAcoB,YAAcJ,KAG7CK,EAAiBp6D,KAAK24D,EAAU5lC,QAAO,SAAC60B,GAC1C,OAAOA,KAAmDA,EHqqDhDC,OGrqDgDD,EHqqD/BC,MAAMqD,eGrqDyBtD,EHwqDhDE,OGxqDgDF,EHwqD/BE,MAAMoD,cGzqDqB,KAGpCtsD,SAClBw7D,EAAiBp6D,KAAK24D,GAGxB,IAAIhP,EAAWyQ,EAYf,GAXIA,EAAex7D,QAAUoB,KAAK24D,EAAU/5D,SAC1C+qD,EAAW3pD,KAAK24D,EAAU5lC,QAAO,SAAC60B,GAChC,OAAOA,MAAkDA,EH4pDjDC,OG5pDiDD,EH4pDhCC,MAAMqD,eG5pD0BtD,EH+pDjDE,OG/pDiDF,EH+pDhCE,MAAMoD,cGhqDa,KAM5CmP,EAAsBb,GAALA,KACjBx5D,KAAKm4D,EAAQhM,aAAcxC,EACVryB,IAA0BA,KAE9BA,KAAbs1B,GAAqCt1B,KAAZo1B,EAAsB,CAC3C4N,EA4TVC,SAAmB5Q,GAEjB,IADA,IAAM2Q,EAAc,GACE3Q,GAAAA,EAAAv6B,EAAAu6B,IAAAA,QAAtB,mBACQ7B,EADR,EAAAF,MACwBE,QACPA,EAAMvtB,QAAWutB,EAAMttB,OAGtC8/B,EAAYn8D,KAAK,CACfo8B,OAAQutB,EAAMvtB,OACdC,MAAOstB,EAAMttB,QAIjB,OAAO8/B,EAAYniD,MAAK,SAACuyC,EAAIC,GAC3B,OAAOD,EAAGlwB,MAAQmwB,EAAGnwB,KADa,GAbT,CA5TA+/B,CAAmBF,GAC5C,IAAyBC,IAAAA,GAAAA,EAAAlrC,EAAAkrC,IAAAA,QAAzB,kBACE,IADF,WACiB//B,QAAUqyB,GAAahpB,EAAWpJ,OAASkyB,EAAU,CAClEE,EAAYhpB,EAAWrJ,OACvBmyB,EAAW9oB,EAAWpJ,MACtB,KAHkE,CAOtE6/B,EAAsBb,GAALA,KACbx5D,KAAKm4D,EAAQhM,aAAcxC,EAAUiD,EAAWF,EAXH,CAiCnD,IAnBM8N,EAAmBx6D,KAAKqyB,uBAE1Bs3B,EAAS/qD,SAAWy7D,EAAez7D,SAWrCy7D,EAAiB,EAHjBA,EAAsBb,GAALA,KACO,KAAM7P,EACTryB,IAA0BA,MACd,KAI/Bk/B,EAAS6D,EAAe,IAAM,KAEzBt8D,EAAI,EAAGA,EAAIs8D,EAAez7D,OAAQb,IAAK,CACxCy9B,EAAO6+B,EAAet8D,OAC5B,IAAM08D,EACD/oC,MAAM1xB,KAAK44D,GAAgD,EAA/Bh2D,KAAK83D,IAAI16D,KAAK44D,GAEzCzL,EADgBsN,EAAej/B,EAAKpJ,UAEtBpyB,KAAKm4D,EAAQwC,yBAC7B9xD,EAAO,CAACupB,UAAWkF,KACdhtB,EAAIvM,EAAI,EAAGuM,EAAI+vD,EAAez7D,OAAQ0L,IAC7C,GAAIkxB,EAAKpJ,WAAaioC,EAAe/vD,GAAG8nB,UAAW,CACjDvpB,EAAOwxD,EAAe/vD,GACtB,KAFiD,CAM/C8iD,EADgBqN,EAAe5xD,EAAKupB,UACLpyB,KAAKm4D,EAAQyC,uBAM9CJ,GAAoBrN,GACpBqN,GAAoBpN,IACnBoJ,EAAOpkC,WAAaoJ,EAAKpJ,WACeokC,EA6R7BpkC,WA7RqCoJ,EA6RbpJ,WA7RKokC,EAgS5B1O,OAhSoCtsB,EAgSfssB,QAhSO0O,EAmS1B1O,MAAMttB,MAnS4BgB,EAmSTssB,MAAMttB,OAnSLg8B,EAoS7B1O,MAAMvtB,OApS+BiB,EAoSXssB,MAAMvtB,WAnS9Ci8B,EAASh7B,EAzBmC,CA8BhD,OADAx7B,KAAKg5D,EAAoBtrB,KAAK6rB,MACvB/C,CAtGO,EA8GhBoD,EAAAiB,OAAAA,WACE76D,KAAK+3D,GAAW,CADT,EAST6B,EAAAkB,QAAAA,WACE96D,KAAK+3D,GAAW,CADR,IAgBVgD,kBAAAA,SAAkBC,EAAa7oC,EAAU8oC,GACnCD,EAAch7D,KAAKm4D,EAAQ+C,qBAY/Bl7D,KAAKg4D,EAAoBxxD,OAAOw0D,EAAa7oC,GAEzC8oC,GAA0C,MAA1Bj7D,KAAKg5D,GAA8Bh5D,KAAK+3D,GACrDqB,GAALA,MAhB2D,EAyB/DQ,EAAAuB,kBAAAA,WACiC,MAA1Bn7D,KAAKg5D,GAA8Bh5D,KAAK+3D,GACtCqB,GAALA,KAFgB,IAWpB/mC,qBAAAA,WA8HM+oC,IAAAA,EA7H6BC,KA6HGlD,EAAQiD,yBA5H5C,OAiIIn8B,UAAUi5B,YAAcj5B,UAAUi5B,WAAWoD,UAlIhBD,KAmIxBlD,EAAQC,wBAGfgD,EAA2D,IAAhCn8B,UAAUi5B,WAAWoD,UArI9Cr8B,UAAUi5B,YAAcj5B,UAAUi5B,WAAWoD,UAC7Ct7D,KAAKm4D,EAAQC,uBACbp4D,KAAKm4D,EAAQoD,kCAHgBH,GAM3BI,EAAoBx7D,KAAKg4D,EAAoB3lC,qBANlB+oC,GAQ7Bp7D,KAAKm5D,EACAn5D,KAAKm5D,EAAa9mC,qBAAqBmpC,GAEzCA,EAZc,EAoBvB5B,EAAA6B,YAAAA,SAAY9R,GACV3pD,KAAK24D,EAAYhP,CADG,EAStBiQ,EAAA8B,oBAAAA,SAAoBC,GAClB37D,KAAK44D,EAAgB+C,CADG,IAS1BC,gBAAAA,SAAgBC,GAAe,IAAD,OAC5B77D,KAAK+4D,EAAgB8C,EACjB77D,KAAK84D,IACP94D,KAAK84D,EAAgBa,aACrB35D,KAAK84D,EAAkB,MAErB94D,KAAK+4D,GAAiB,mBAAoBxkD,IAC5CvU,KAAK84D,EAAkB,IAAIgD,gBAAe,WAGxC,EAAK7C,EAAqB53B,EACU06B,GAJU,IAMhD/7D,KAAK84D,EAAgBkD,QAAQh8D,KAAK+4D,GAbR,EAsB9Ba,EAAAqC,eAAAA,SAAeC,GACbl8D,KAAKm5D,EAAe+C,CADM,EAS5BtC,EAAAhoC,UAAAA,SAAUC,GACR7xB,KAAKm4D,EAAUtmC,EACX7xB,KAAKg4D,GAAuBh4D,KAAKm4D,GACnCn4D,KAAKg4D,EAAoBpmC,UAAU5xB,KAAKm4D,EAAQE,SAHlC,EApXpB3jC,EAAA,6BAAAynC,IAoXEA,GAAAvnC,UtF63CA,UsF73CAunC,GAAA,UAAAvnC,UATAunC,GAAAvnC,UtFs4CA,esFt4CAunC,GAAA,UAAAvnC,eAtBAunC,GAAAvnC,UtF45CA,gBsF55CAunC,GAAA,UAAAvnC,gBATAunC,GAAAvnC,UtFq6CA,oBsFr6CAunC,GAAA,UAAAvnC,oBATAunC,GAAAvnC,UtF86CA,YsF96CAunC,GAAA,UAAAvnC,eApBAA,UtFk8CA,qBsFl8CAunC,GAAA,UAAAvnC,qBAXAunC,GAAAvnC,UtF68CA,kBsF78CAunC,GAAA,UAAAvnC,kBAzBAunC,GAAAvnC,UtFs+CA,kBsFt+CAunC,GAAA,UAAAvnC,kBAhBAunC,GAAAvnC,UtFs/CA,QsFt/CAunC,GAAA,UAAAvnC,QATAunC,GAAAvnC,UtF+/CA,OsF//CAunC,GAAA,UAAAvnC,OA9GAunC,GAAAvnC,UtF6mDA,csF7mDAunC,GAAA,UAAAvnC,cAVAunC,GAAAvnC,UtFunDA,KsFvnDAunC,GAAA,UAAAvnC,KAXAunC,GAAAvnC,UtFkoDA,QsFloDAunC,GAAA,UAAAvnC,QAzBAunC,GAAAvnC,UtF2pDA,KsF3pDAunC,GAAA,UAAAvnC,KA4bF,IAAAmnC,GAAwD,EC7hBtDxvD,SAAA,GAAY6vD,EAAMC,EAAYC,GAS5B,IAT4BA,OAAA,IAAAA,GAAAA,EAE5Bt8D,KAAKu8D,EAAQH,EAEbp8D,KAAK24D,EAAY,IAAInmC,IAAI,CAAC4pC,IAKFC,GAAAA,EAAAjtC,EADxBitC,EAAaA,GAAc,KACHA,QAAxB,kBACEr8D,KAAKkxB,IADP,EAAAm2B,MACsBiV,EAV4B,CA8KpDE,SAAO,GAAsB1+D,EAAGkb,GAC9B,GAAIlb,EAAEi6B,UAAY/e,EAAE+e,SAClB,OAAO,EAmBT,GAdM0kC,EAA2C3+D,EAAE6hD,OPjFrCptC,MAAM,KOiFuC4rC,KAAI,SAACgC,GAC9D,OAA4Buc,GAAavc,EAD+B,IAGpEwc,EAA2C3jD,EAAE2mC,OPpFrCptC,MAAM,KOoFuC4rC,KAAI,SAACgC,GAC9D,OAA4Buc,GAAavc,EAD+B,IAWtEsc,EAAQ79D,QAAU+9D,EAAQ/9D,OAC5B,OAAO,EAKT69D,EAAQtkD,OACRwkD,EAAQxkD,OAER,IAAK,IAAIpa,EAAI,EAAGA,EAAI0+D,EAAQ79D,OAAQb,IAClC,GAAI0+D,EAAQ1+D,IAAM4+D,EAAQ5+D,GACxB,OAAO,EAIX,OAAO,CApC0B,CAgDnC6+D,SAAO,GAAe9+D,EAAGkb,GAYvB,GAXM6jD,EAAO,IAAIrqC,IAAI10B,GACfg/D,EAAO,IAAItqC,IAAIxZ,GAKrB6jD,EAAKE,OADYC,QAEjBF,EAAKC,OAFYC,QAMbH,EAAK17D,MAAQ27D,EAAK37D,KACpB,OAAO,EAKT,IAAgB07D,IAAAA,GAAAA,EAAAztC,EAAAytC,IAAAA,QAAhB,kBACE,IAAKC,EAAK/nD,IADZ,EAAAu3C,OAEI,OAAO,EAIX,OAAO,CAxBmB,CC/M5B//C,SAAA,GAAY0wD,EAASC,GAkBnBl9D,KAAKm9D,EAA2B,IAAgBC,GAC5CH,EAAQh4D,SAhBC0uD,GASQsJ,EAAQpV,OAASoV,EAAQpV,MAAMkD,cAChDkS,EAAQpV,MAAMkD,cAAgB,EAPjBkS,EAAQnV,OAASmV,EAAQnV,MAAM9E,IAC5Cia,EAAQnV,MAAM9E,IAAM,MACHia,EAAQpV,QAASoV,EAAQpV,MAAMqK,eAChD+K,EAAQpV,MAAMqK,aACE+K,EAAQnV,OAASmV,EAAQnV,MAAMiM,YAC/CkJ,EAAQnV,MAAMiM,YAAc,GAPbsJ,GACAC,GAgBfJ,EAPeD,EAAQpV,OAASoV,EAAQpV,MAAMlI,OAC9Csd,EAAQpV,MAAMlI,OAAS,GAfgB,CAgD7CpzC,SAAA,GAAYtH,EAAU0uD,EAAM4J,EAAcC,EAAUtL,EAChD6B,EAAasJ,EAAYC,EAAYJ,EAAwBpT,GAE/D9pD,KAAKy9D,EAAYx4D,EAEjBjF,KAAK09D,EAAQ/J,EAEb3zD,KAAK29D,EAAgBJ,EAErBv9D,KAAK49D,EAAYJ,EAEjBx9D,KAAK69D,EAAgB3L,EAErBlyD,KAAK89D,EAAe/J,EAEpB/zD,KAAK+9D,EAAcV,EAEnBr9D,KAAKg+D,EAAcV,EAEnBt9D,KAAKi+D,EAA0Bf,EAE/Bl9D,KAAKk+D,EAAcpU,CApBwD,CC1E7Ev9C,SAAA,KAIEvM,KAAKm+D,EAAuBC,GAG5Bp+D,KAAKq+D,GACAz5D,IADkB4wB,KAClB5wB,IAAUw5D,GCugH6CE,GDtgHvD15D,IAAU25D,GCsgH0CC,GDngHzDx+D,KAAKy+D,EAAoB,CAZgC,CAmB3DC,SAAA,GAAAA,EAAcF,EAAuBF,GAEnC,EAAKD,EACAz5D,IAAUw5D,GAAWE,GACrB15D,IAAU25D,GAAUC,EAJkC,CE3B/D9pC,EAAA,4BAA4BiqC,CAE1B,MAAS,EAET,OAAU,EAKV,2BAA8B,EAU9B,2BAA8B,ICnBhCjqC,EAAA,sCAAsCkqC,CAKpC,OAAU,SASV,OAAU,WLuBVC,GAAA,UAAA3tC,IAAAA,SAAI02B,EAAS0U,GAsBYC,IA8BnB,EA9BmBA,EArBnBuC,KAqBmBvC,EA8BnB,GAhCcD,OAAAA,IAnBWA,GAAAA,IA4CzB,eA5CgB1U,EA4ChB,oBA5CgBA,EA4ChB,mBA5CgBA,EA4ChB,YAOA,WAnDgBA,EAmDhB,wBAnDgBA,EAmDhB,cAsCC9pD,EAAEitD,gBAAkB/xC,EAAE+xC,eACL,EAAlBjtD,EAAEitD,eAAuC,EAAlB/xC,EAAE+xC,gBACvBjtD,EAAEitD,eAAiB/xC,EAAE+xC,eAOvBjtD,EAAEo0D,eAAiBl5C,EAAEk5C,cA/CrBoK,IAoDgCyC,GAAsBjhE,EAAGkb,KAK1CgmD,GAAelhE,EAAEmtD,MAAOjyC,EAAEiyC,QAKzCntD,EAAEgtD,UAAY9xC,EAAE8xC,QA9DhB,CAnDJ,OAmDI,IAQA,WA3DgBlD,EA2DhB,qBA3DgBA,EA2DhB,YAAA0U,GA0EgCyC,GAAsBjhE,EAAGkb,KAK1CgmD,GAAelhE,EAAEmtD,MAAOjyC,EAAEiyC,UA/EzC,IA1DFjrD,KAAK24D,EAAUznC,IAAI02B,IACZ,EAHiB,EAuE5BiX,GAAA,UAAAtvD,OAAAA,WACE,OAAOvP,KAAK24D,EAAUppD,QADf,EClDT0vD,GAAA,UAAA/hE,OAAAA,SAAOysD,GACL,OAAO3pD,KAAKm9D,EAAyBjgE,OAAOysD,EAD7B,EAgDjByT,GAAA,UAAAlgE,OAAAA,SAAOysD,GAGL,IAAIuV,EAAU,GAERC,WAyGiBxV,EAAU0M,GAOjC,IAAMK,EAA8BrO,GAH9B+W,EAAgCnZ,GAAUoQ,GAK5C1M,EAASxL,KAAI,SAACyJ,GAAY,OAAcU,GAAoBV,EAAlC,KAG9B,OAAK8O,EAKE/M,EAAS52B,QAAO,SAAC60B,GACtB,OAAO8O,GAA+BpO,GAAoBV,EADxB,IAJ3B,EAb2C,CAzG3ByX,CAAkB1V,EAAU3pD,KAAKy9D,GAC1D,IAAM6B,EAAY3V,EAAS52B,QAAO,SAAC60B,GAAoBoM,OAARpM,EAAQoM,OAAAA,IA8FvD,OAlFMuL,EA0HRC,SAA6B7V,EAAU2M,GACrC,OAAO3M,EAAS52B,QAAO,SAAC60B,GACtB,QAAKA,EAAQC,QAITyO,EACK1O,EAAQC,MAAMoD,MAAM1hD,SAAS+sD,GAEC,GAA9B1O,EAAQC,MAAMoD,MAAMrsD,OARK,GADgB,CA1H/B6gE,CATnBP,EADEC,EAAWvgE,OACHugE,EACDG,EAAU1gE,OACT0gE,EAEA3V,EAKwC3pD,KAAK09D,GACrD6B,EAAO3gE,SACTsgE,EAAUK,GAKRv/D,KAAK89D,IACD4B,EAiOVC,SAAoChW,EAAUoK,GAC5C,OAAOpK,EAAS52B,QAAO,SAAC60B,GACtB,OAAIA,EAAQE,QAASF,EAAQE,MAAMiM,aAC/BnM,EAAQE,MAAMiM,aAAeA,CAFC,GADqB,CAjO3B6L,CACxBV,EAASl/D,KAAK89D,GACd4B,EAAc9gE,SAChBsgE,EAAUQ,IAOV1/D,KAAK49D,IACDiC,EAsLVC,SAAiCnW,EAAU6T,GAgBzC,MAfgB,QAAZA,IAUAA,EAREjpD,EAAOwrD,WAAW,qBAAqBlyB,QACzB8b,EAASmF,MAAK,SAAClH,GAC7B,SAAIA,EAAQE,QAASF,EAAQE,MAAM9E,KACV,OAArB4E,EAAQE,MAAM9E,IAFuB,IAOtB,MAAQ,KAElB,OAGR2G,EAAS52B,QAAO,SAAC60B,GACtB,OAAIA,EAAQE,QAASF,EAAQE,MAAM9E,KAAO4E,EAAQE,MAAM9E,KAAOwa,CAD7B,GAhBe,CAtLxBwC,CACrBd,EAASl/D,KAAK49D,GACdiC,EAAWjhE,SACbsgE,EAAUW,IAOV7/D,KAAK29D,IACDsC,EA0JVC,SAA0CvW,EAAU4T,GAClD,OAAO5T,EAAS52B,QAAO,SAAC60B,GACtB,OAAIA,EAAQC,QAASD,EAAQC,MAAMkD,eAC/BnD,EAAQC,MAAMkD,eAAiBwS,CAFD,GAD4B,CA1JtC4C,CACpBjB,EAASl/D,KAAK29D,GACdsC,EAAUrhE,SACZsgE,EAAUe,IAOVjgE,KAAK+9D,IACDqC,EAuGVC,SAAmC1W,EAAU2W,GAC3C,OAAO3W,EAAS52B,QAAO,SAAC60B,GACtB,SAAKA,EAAQC,QAAUD,EAAQC,MAAMtoC,QAItBqoC,EAAQC,MAAMtoC,MAAMzI,eACpBwpD,EAAexpD,aANI,GADuB,CAvGnCypD,CAClBrB,EAASl/D,KAAK+9D,GACdqC,EAAQxhE,SACVsgE,EAAUkB,IAMVpgE,KAAKg+D,IACDoC,EAiHVI,SAAmC7W,EAAU2W,GAC3C,OAAO3W,EAAS52B,QAAO,SAAC60B,GACtB,SAAKA,EAAQE,QAAUF,EAAQE,MAAMvoC,QAItBqoC,EAAQE,MAAMvoC,MAAMzI,eACpBwpD,EAAexpD,aANI,GADuB,CAjHnC2pD,CAClBvB,EAASl/D,KAAKg+D,GACdoC,EAAQxhE,SACVsgE,EAAUkB,IAMRM,EA+LRC,SAAqChX,EAAUuI,GAC7C,OAAOvI,EAAS52B,QAAO,SAAC60B,GACtB,OAAIA,EAAQC,OAASD,EAAQC,MAAMqK,cAAgBA,CADjB,GADuB,CA/L9B0O,CACzB1B,EAASl/D,KAAK69D,GACd6C,EAAe9hE,SACjBsgE,EAAUwB,GAKR1gE,KAAKk+D,IACD2C,EAuMVC,SAAmCnX,EAAUG,GAC3C,OAAOH,EAAS52B,QAAO,SAAC60B,GACtB,OAAIA,EAAQC,OAASD,EAAQC,MAAMlI,QAAUmK,CADX,GADmB,CAvM1BiX,CACvB7B,EAASl/D,KAAKk+D,GACd2C,EAAajiE,SACfsgE,EAAU2B,IAUP,IAAgBhC,GAAcK,EAAQ,GAAIA,IIhMzC8B,UJ4L+BhhE,KAAKi+D,GAEfrS,MAlGd,ECUjBqV,IAAAA,GAAUA,EACVC,GAAWA,EIvGX30D,SAAA,GAAY40D,EAAYC,GAItB,IAAMC,EA2GS,EA3GTA,EA4GO,IA5GPA,EA6GW,EA7GXA,EA8GQ,GAxGdrhE,KAAKshE,EAA0C,MAA1BH,EAAWI,YAC5BF,EAAuBF,EAAWI,YAQtCvhE,KAAKwhE,EAAsC,MAAxBL,EAAWM,UAC1BJ,EAAqBF,EAAWM,UAQpCzhE,KAAK0hE,EAAwC,MAAzBP,EAAWQ,WAC3BN,EAAsBF,EAAWQ,WAQrC3hE,KAAK4hE,EAA8C,MAA5BT,EAAWU,cAC9BR,EAAyBF,EAAWU,cAMxC7hE,KAAK8hE,EAAe,EAGpB9hE,KAAK+hE,EAAqB/hE,KAAKwhE,GAG/BxhE,KAAKgiE,OAlDiB,IAAAZ,GAAAA,KA2DpBphE,KAAK8hE,EAAe,EA3DmB,CAmErCG,SAAA,GAAAA,GAYJ,IAAMC,EAYAC,EAxBQ,OAAAjgC,GAAA,uBACd,GADc,EACL4/B,GADK,EACgBR,EAC5B,KAFY,EAEHU,EAGP,MAAM,IAAe9lC,G7BuDfiJ,EA4BFi9B,EA0FYC,M6BlLNC,EAgFTR,EAAe,EAhFNQ,EAiFTP,EAjFSO,EAiFiBd,CA5E3B,CAUJ,OAHMU,EAZQ,EAYcJ,EAZd,EAaTA,IAEiB,GAAlBI,EAEF,EAAAp+B,UAOIq+B,EAxBQ,EAyBLJ,GA8CO,GANqB,EAAhBn/D,KAAKwd,SAAkB,GAjE9B,EAyBoBshD,GAElC,IAAM,IAAIhc,SAAQ,SAAC7J,GAkEbxa,IADuBH,GAhEY2a,GAiEnCxa,EAjEoB8gC,EAiEE,IAlEG,IAA/B,GA3Bc,GAgCTJ,GAhCS,EAgCkBH,EAhClB,QCxEhBr1D,SAAA,KACE,IAAIg2D,EACAC,EAkBEC,EAPUC,IAAIhd,SAAS,SAAC7J,EAAS6U,GACrC6R,EAAiB1mB,EACjB2mB,EAAgB9R,CAFgC,IAWlD,OAHA+R,EAAc5mB,QAAU0mB,EACxBE,EAAc/R,OAAS8R,EAEhBC,CAxBK,CCadl2D,SAAA,GAAYm2D,EAASC,GAEnB3iE,KAAK0iE,QAAUA,EAGf1iE,KAAK4iE,EAAWD,EAGhB3iE,KAAK6iE,EAAgB,IARO,CAyB9BC,SAAO,GAAO93D,GACZ,OAAO,IAAe+3D,GAClBrd,QAAQgL,OAAO1lD,IACf,WAAM,OAAA06C,QAAQ7J,SAAR,GAHS,CAWrBmnB,SAAO,KACL,IAAMC,EAAIvd,QAAQgL,OASX,IAAex0B,G/ByEZiJ,EA4BFi9B,EA+vBWc,O+Bz2BnB,OADAD,EAAErS,OAAM,WAAO,IACR,IAAemS,GAAmBE,GAAG,WAAM,OAAAvd,QAAQ7J,SAAR,GALnC,CAuBjBsnB,SAAO,GAAUt/D,GACf,OAAO,IAAek/D,GAClBrd,QAAQ7J,QAAQh4C,IAChB,WAAM,OAAA6hD,QAAQ7J,SAAR,GAHY,CAcxBunB,SAAO,GAAaV,GAClB,OAAO,IAAeK,GAClBL,GAGA,WAAM,OAAAA,EAAQ9R,OAAM,WAAO,GAArB,GALiB,UA0BtB,GAAIyS,GACT,OAAO,IAAeN,GAClBrd,QAAQE,IAAIyd,EAAWllB,KAAI,SAACmlB,GAAUZ,OAAHY,EAAGZ,OAAAA,MACtC,WAAM,OAAAhd,QAAQE,IAAIyd,EAAWllB,KAAI,SAACmlB,GAAO,OAAAA,EAAGC,OAAH,IAAnC,GAHW,CCjFvBh3D,SAAA,GAAY7P,EAAM8mE,GAChB,GAAIA,EACF,GAAIA,aAAgBhuC,IAElB,IAAkB,MAAApG,EAAAo0C,EAAKt3D,QAALkxB,EAAA,UAAlB,4BACE5xB,OAAOW,eAAenM,KAAMsH,EAAK,CAC/BzD,MAAO2/D,EAAK9zD,IAAIpI,GAChB+F,UAAU,EACVD,YAAY,SAOhB,IAAW9F,KAD0Ck8D,EAEnDh4D,OAAOW,eAAenM,KAAMsH,EAAK,CAC/BzD,MAHiD2/D,EAGtCl8D,GACX+F,UAAU,EACVD,YAAY,IAgBpBpN,KAAKyjE,iBAHLzjE,KAAK0jE,WAHL1jE,KAAK2jE,SAAU,EAef3jE,KAAK4jE,UAAYrvD,EAAOsvD,aAAetvD,EAAOsvD,YAAYtK,IACtDhlD,EAAOsvD,YAAYtK,MAAQ7rB,KAAK6rB,MAGpCv5D,KAAKtD,KAAOA,EAGZsD,KAAK8jE,WAAY,EAMjB9jE,KAAKgM,OAHLhM,KAAK+jE,cAAgB,KAUrB/jE,KAAKgkE,GAAU,CAhEO,CA7BxBC,SAAO,GAAczvC,GACnB,IACWltB,EADL48D,EAAY,IAAeC,GAAU3vC,EAAM93B,MACjD,IAAW4K,KAAOktB,EAChBhpB,OAAOW,eAAe+3D,EAAW58D,EAAK,CACpCzD,MAAO2wB,EAAMltB,GACb+F,UAAU,EACVD,YAAY,IAGhB,OAAO82D,CATmB,CF2B5BE,GAAA,UAAAvoB,QAAAA,WAAgB,EAIhBuoB,GAAA,UAAA1T,OAAAA,WAAgB,ECiEhBqS,GAAA,UAAAQ,MAAAA,WAIE,OAHKvjE,KAAK6iE,IACR7iE,KAAK6iE,EAAgB7iE,KAAK4iE,KAErB5iE,KAAK6iE,CAJN,EAwBRE,GAAA,UAAAsB,QAAAA,SAAQC,GAEN,OADAtkE,KAAK0iE,QAAQrS,MAAK,WAAW,OAAAiU,GAAQ,EAAR,IAAe,WAAO,OAAAA,GAAQ,EAAR,IAC5CtkE,IAFQ,KAuBjB,aAAAukE,SAAMC,EAAWC,GAUMC,SAAA,EAACC,GACpB,OAAO,SAAC9gE,GACN,GAAI,EAAKg/D,GAAiB8B,EAIxBC,EAAWlU,OAAOmU,OAJpB,CAQA,IAAMC,EAAKH,EAAYH,EAAYC,EAC9BK,EASLvB,WA0BoB5+C,EAAU9gB,EAAO+gE,GACzC,IACE,IAAM19B,EAAMviB,EAAS9gB,GAErB,OAAIqjC,GAAOA,EAAIw7B,SAAWx7B,EAAIq8B,OAK5BqB,EAAW/oB,QAAQ3U,EAAIw7B,SAIhB,WAAM,OAAAx7B,EAAIq8B,OAAJ,IAGbqB,EAAW/oB,QAAQ3U,GAGZ,WAAM,OAAAwe,QAAQ7J,QAAQ3U,GAAKmpB,MAAK,WAAO,IAAG,WAAO,GAA3C,EAlBb,CAoBF,MAAO0U,GAIP,OADAH,EAAWlU,OAAOqU,GACX,WAAM,OAAArf,QAAQ7J,SAAR,CAJK,CArBiC,CA1BXmpB,CAClCF,EAAIjhE,EAAO+gE,IARAD,EAAYC,EAAW/oB,QAAU+oB,EAAWlU,QACpD7sD,EAZP,CADgB,CADgB,CALxB0/D,SAAA,IAEV,OADAqB,EAAWlU,OAAOmU,GACX,EAAKtB,OAFI,CALM,WAClBqB,EAAa,IAAeR,GAC5BS,EAxFC,IAAe3oC,G/ByEZiJ,EA4BFi9B,EA+vBWc,M+B1uBnB,OAFAljE,KAAK0iE,QAAQrS,KAAKqU,GAAa,GAAOA,GAAa,IAE5C,IAAe3B,GAClB6B,GAGA,WAAM,OAAArB,GAAA,GAxCc,EAlJI0B,EAAA,wBAArBlC,GAAqB,mBA6B1B,mCAAUC,WACZ,OAA8B,OAAvBhjE,KAAK6iE,CADA,KA7BhBnuC,EAAA,gCAAAquC,IAkJEA,GAAAnuC,U/FonDA,M+FpnDAmuC,GAAA,UAAAnuC,GAvBAmuC,GAAAnuC,U/F2oDA,Q+F3oDAmuC,GAAA,UAAAnuC,W/F2oDA,I+FrpDOswC,GAdPnC,GAAAnuC,U/FmqDA,M+FnqDAmuC,GAAA,UAAAnuC,MAZOmuC,G/F+qDP,a+F/qDOoC,GAdApC,G/F6rDP,U+F7rDOqC,GAvBArC,G/FotDP,Q+FptDOsC,GAXAtC,G/F+tDP,O+F/tDOuC,GCiEPnB,GAAA,UAAAoB,eAAAA,WACMvlE,KAAK0jE,aACP1jE,KAAKyjE,kBAAmB,EAFX,EAWjBU,GAAA,UAAAqB,yBAAAA,WACExlE,KAAKgkE,GAAU,CADU,EAS3BG,GAAA,UAAAsB,gBAAAA,WAAmB,EA9HrB/wC,EAAA,uBAAAyvC,QAwIAuB,GAAiC,CAC/BC,GAAkBA,mBAClBC,GAAYA,aACZC,GAAmBA,oBACnBC,GAAWA,YACXC,GAAUA,WACVC,GAAgBA,iBAChBC,GAAyBA,0BACzBC,GAAkBA,mBAClBC,GAAMA,OACNC,GAAMA,OACNrqC,MAAOA,QACPsqC,GAAmBA,oBACnBC,GAAeA,gBACfC,GAAWA,YACXC,GAAkBA,mBAClBC,GAAQA,SACRC,GAASA,UACTC,GAAgBA,iBAChBC,GAAiBA,kBACjBC,GAAqBA,sBACrBC,GAAsBA,uBACtBC,SAAUA,WACVC,GAAUA,WACVC,GAAyBA,qBACzBC,GAAeA,gBACfC,GAAYA,aACZC,GAAiBA,kBACjBC,GAAkBA,cAClBC,GAAuBA,mBACvBC,GAAeA,gBACfC,GAASA,UACTC,GAAcA,eACdC,GAAWA,YACXC,GAAaA,cACbC,GAAqBA,sBACrBC,GAAeA,gBACfC,GAAqBA,sBACrBC,GAAqBA,sBACrBC,GAAoBA,qBACpBC,GAAeA,gBACfC,GAAWA,YACXC,GAAgBA,kBC1KhB57D,SAAA,KAIEvM,KAAKooE,GAAa,IAAez1C,EAMjC3yB,KAAKqoE,GAAiBroE,IAVV,CCPduM,SAAA,KAEEvM,KAAKsoE,EAAc,EAFP,CAWdC,SAAA,GAAAA,EAAOC,GACL,EAAKF,EAAYnqE,KAAKqqE,EAAUnE,SAAQ,WAChBoE,GAFR,EAEoBH,EAAaE,EADH,IAD9B,CCkClBj8D,SAAA,GAAYm8D,EAAmBC,EAAmBC,EAC9CC,EAAWC,EAASC,GACtBC,GAAA,WAGAhpE,KAAKipE,GAAa,EAGlBjpE,KAAKkpE,EAAoB,IAAeC,GAGxCnpE,KAAKopE,EAAkB,IAAI52C,IAG3BxyB,KAAKqpE,EAAmB,IAAI72C,IAG5BxyB,KAAKspE,EAAqBZ,GAAqB,KAG/C1oE,KAAKupE,EAAqBZ,GAAqB,KAG/C3oE,KAAKwpE,EAAoBZ,GAAoB,KAG7C5oE,KAAKypE,EAAaZ,GAAa,KAG/B7oE,KAAK0pE,EAAWZ,GAAW,KAG3B9oE,KAAK2pE,EAAcZ,GAAc,KAMjC/oE,KAAK4pE,EAHL5pE,KAAK6pE,GAAa,EAMlB7pE,KAAK8pE,EAA6B,IAxCA,CAgFpCC,SAAO,GAAep/C,EAAQoP,EAAQud,EAAU0yB,GAG9C1yB,EACIA,GAAsD2yB,GAC1D,IAAMC,EAAsCC,GAASx/C,KAChDu/C,GAAY5yB,GAAY4yB,EAAS5yB,YACT6yB,GAASx/C,GAAU,CAC5C2sB,SAAUA,EACVvd,GAAQA,EACRiwC,QAV0C,IAAAA,GAAAA,GAAyB,CA6BzEI,SAAA,GAAAA,EAAgBh0C,GACd,IAA0BgzC,IAAAA,EAAAh6C,EAALg6C,EAAKA,GAAAA,EAAAA,EAAAA,QAA1B,kBACEhzC,EAAMgzC,EAAgBl4C,IADxB,EAAA6B,OAGA,IAA0Bs2C,GAAAA,EAAAj6C,EAALi6C,EAAKA,IAAAA,QAA1B,kBACEjzC,EAAMizC,EAAiBn4C,IADzB,EAAA6B,MAJqB,UA4FhB,GAAYs3C,EAAMC,EAAaC,GACpC,MAAO,CACLF,KAAMA,EACNv2D,OAAQ,MACRmR,KAAM,KACND,QAAS,CAAC,EACVwlD,2BAA2B,EAC3BC,gBAAiBH,EACjBI,mBAAoB,KACpBC,UAAW,KACXjsB,QAAS,KACTvhB,SAAU,KACVsiB,aAAc,KACd8qB,wBAbkC,IAAAA,EAAqB,KAArBA,EAA2B,CA2NjEK,SAAA,GAAAA,EAAMluE,EAAMmuE,EAASC,EAASC,EAASzrE,EAAO0rE,EAC1CC,GACE,EAAKpB,IACPgB,EAAQR,KAAK/qE,GAASurE,EAAQR,KAAK/qE,GAAOuX,QAAQ,WAAY,YAE5D,EAAK+yD,IACPiB,EAAQR,KAAK/qE,GAASurE,EAAQR,KAAK/qE,GAAOuX,QAAQ,UAAW,aAGnD,EAARvX,GAAa,EAAKoqE,GAGpB,EAAKA,EAAShtE,EAAMouE,EAFLD,EAAQR,KAAK/qE,GACburE,EAAQR,KAAK/qE,EAAQ,IAItC,IAAMo5C,EAAM,IAASD,GAAIoyB,EAAQR,KAAK/qE,IAClCqrB,EAAS+tB,EtBxMHE,GsB0MNsyB,GAAc,EACbvgD,IAUCguB,GAAJD,EAHA/tB,GALAA,EA6QKwgD,SAASt+C,UAxQEzhB,MAAM,GAAI,IAI1By/D,EAAQR,KAAK/qE,GAASo5C,EAAIxtC,YAM5Byf,EAASA,EAAO7T,cAGhB,IAAMijB,GADA7sB,EAAoCi9D,GAASx/C,IAC3Bzd,EAAO6sB,GAAS,KACxC,IAAKA,EACH,OAAqCurC,GACjC,IAAeppC,GnCtXXiJ,EAUDimC,EAwCWC,ImCwUV3yB,IAEV,IAkBI4yB,EAlBEtB,EAAkB98D,EAAO88D,GAS3BuB,EAAkB,KAGlBC,EAAa,KAEbxI,GAAU,EAEVyI,GAAwB,EAoJ5B,OA9JkCtG,GAAqBlD,GAAR8I,IAaRxG,IAAM,WAC3C,GAnEsB,EAmEb0E,EACP,OAAqC5D,KAGvCiG,EAAc59B,KAAK6rB,MAEnB,IAAImS,EAAe,EA0BnBb,EAAQc,iBAAmBj+B,KAAK6rB,UAE1BqS,EAAgB7xC,EAClB8wC,EAAQR,KAAK/qE,GAAQurE,EAASnuE,GA3BVmvE,SAAC5jC,EAAMvnC,EAAOorE,GAChCP,GACFA,EAAgBtnC,OAEdunC,GACFA,EAAWnqC,EAAU0qC,EAAiB,KAhFpB,EAkFXzC,GAAsB5sE,GAAQsvE,KACrCN,IACAb,EAAQa,aAAeA,EApFL,EAsFbpC,EAAmBrhC,EAAMvnC,EADLurE,GAAanB,GACYD,GAClDK,GAAc,EACdD,EAmODiB,EAnO+BJ,EAb0B,IAgBpCK,SAACnnD,GACvBymD,GAAwB,EACxBZ,EAAQuB,gBAAkB1+B,KAAK6rB,MACRsR,EAAQc,iBA9FX,EA+FXpC,GA/FW,EAgGbA,EAAmBvkD,EAAS6lD,EAASnuE,EALT,GAYjC,CACE2vE,0BAxGgB,EAwGgBvC,IAGtC,IAAKE,EACH,OAAO4B,EAGT,IAAMU,EAAsBzB,EAAQJ,gBAAgB8B,kBAChDD,IACFf,EAAkB,IAAerqC,IAAM,WACrC8hC,GAAU,EACV4I,EAAcrI,OAF6B,KAK7BliC,EAAUirC,EAAsB,KAGlD,IAAMP,EAAiBlB,EAAQJ,gBAAgB+B,aAQ/C,OAPIT,IACFP,EAAa,IAAetqC,IAAM,WAChC8hC,GAAU,EACV4I,EAAcrI,OAFwB,KAMnCqI,CA/D0C,IAgEhDrH,IAAM,SAACkI,GACJlB,GACFA,EAAgBtnC,OAEdunC,GACFA,EAAWvnC,OAEU98B,MAAnBslE,EAASC,SACXD,EAASC,OAASh/B,KAAK6rB,MAAQ+R,GAEjC,IAAMqB,EAAyB,CAC7BF,SAAUA,EACVvB,GAAaA,GAUf,OARKO,GAhJiB,EAmJXlC,GAnJW,EAoJbA,EAAmBkD,EAASznD,QAAS6lD,EAASnuE,GAIhDiwE,CAtBc,IAuBpB,SAAC3hE,GAOF,GANIugE,GACFA,EAAgBtnC,OAEdunC,GACFA,EAAWvnC,OA9JS,EAgKbulC,EAAmB,CAC1B,IAAIoD,EAAa,KACbC,EAAmB,EACnB7hE,aAA4BkxB,KAC9B0wC,EAAa5hE,EnCjbF8hE,MmCkbP9hE,EAAM4c,OACRilD,EAA0C7hE,EAAM9H,KAAK,KAtKrC,EAyKfsmE,EAAkBqB,EAAS+B,EAAYC,EAAkB7J,EATpC,CAW5B,GA3KsB,EA2KbiG,EACP,OAAqC5D,KAavC,GAVIrC,IAGFh4D,EAAQ,IAAekxB,GnCtgBd6wC,EAiBJ3B,EAsEA4B,KmCmbDnC,EAAQR,KAAK/qE,GAAQ5C,IAGvBsO,aAA4BkxB,GAAO,CACrC,GnCoRegnC,MmCpRXl4D,EAAM4c,KAER,MAAM5c,EACD,GnCpZSq3D,MmCoZLr3D,EAAM4c,KAEf,MAAMojD,EAGR,GnCthBS+B,GmCshBL/hE,EAAMywB,SAOR,OALMjH,EAAQ,IAAe2vC,GAAU,QADjCjhE,GAAmB0B,IAAP4wB,KAAO5wB,IAAI,QAASoG,IAnMpB,EAqMbiiE,cAAcz4C,GAGnBl1B,GAASA,EAAQ,GAAKurE,EAAQR,KAAKzrE,OACvBgsE,GAzMMA,EA0MdluE,EAAMmuE,EAASC,EAASC,EAASzrE,EAAO0L,EACxCigE,EAlB+B,CAuBvC,MAAMjgE,CAvDM,GAzJU,CA4Q1BihE,SAAA,GAAanB,GACX,GAAIA,EAAS,CACX,IAAMriD,EAAUqiD,EAAQriD,QAExB,GADMk6B,EAASmoB,EAAQnoB,OACnBl6B,GAAWk6B,GAAUA,EAAOuI,eAC1BziC,Ed9PIykD,Ec+PN,OAAO,CALA,CASb,OAAO,CAVa,CAsCtB3gE,SAAA,KAEEvM,KAAKksE,EAAe,CAFR,CA6Cd3/D,SAAA,GAAYm2D,EAASC,EAASsI,GAC5BkC,GAAA,UAAMzK,EAASC,GAGf3iE,KAAKotE,EAAkBnC,CAJ2B,CFpxBpDoC,GAAA,UAAAj6C,iBAAAA,SAAiB12B,EAAMk2B,GAChB5yB,KAAKooE,IAGVpoE,KAAKooE,GAAWjqE,KAAKzB,EAAMk2B,EAJa,EA8B1Cy6C,GAAA,UAAAh6C,oBAAAA,SAAoB32B,EAAMk2B,GACnB5yB,KAAKooE,IAGVpoE,KAAKooE,GAAWr0C,OAAOr3B,EAAMk2B,EAJc,EAe7Cy6C,GAAA,UAAAJ,cAAAA,SAAcz4C,GAMZ,IAAKx0B,KAAKooE,GACR,OAAO,EAGT,IAAIkF,EAAYttE,KAAKooE,GAAW14D,IAAI8kB,EAAM93B,OAAS,GAC7C6wE,EACJvtE,KAAKooE,GAAW14D,IA2DmB89D,OApDrC,IANID,IACFD,EAAYA,EAAUv0D,OAAOw0D,IAKRD,GAAAA,EAAAl+C,EAAAk+C,IAAAA,QAAvB,kBAAkC,CAAlC,UAEE94C,EAAMxoB,OAAShM,KAAKqoE,GACpB7zC,EAAMuvC,cAAgB/jE,KAAKqoE,GAE3B,IAGMz1C,EAAS66C,YACX76C,EAAS66C,YAAYj5C,GAGrB5B,EAASryB,KAAKP,KAAMw0B,EAPpB,CASF,MAAOuwC,GAAY,CASrB,GAAIvwC,EAAMwvC,EACR,KAxB8B,CA4BlC,OAAOxvC,EAAMivC,gBA/CM,KAsDrB,UAAAzvC,QAAAA,WACEh0B,KAAKooE,GAAa,IADV,EC/GVe,GAAA,UAAAjxB,QAAAA,WAEE,IADA,IAAMw1B,EAAU,GACMpF,EAAAl5C,EAALk5C,KAAKA,GAAAA,EAAAA,EAAAA,QAAtB,8BAGK5F,QAAQ9R,OAAM,WAAO,IAGxB8c,EAAQvvE,KAAKmlE,EAAGC,SAIlB,OADAvjE,KAAKsoE,EAAc,GACZ5iB,QAAQE,IAAI8nB,EAZX,ECS0CC,EAA5CC,GAA4CP,KAkEpDQ,EAAAA,GAAAA,WAAAA,GAAAA,SAAaC,GACX9tE,KAAK6pE,EAAaiE,CADI,EAQxBC,EAAAC,GAAAA,SAAcC,GACZjuE,KAAK4pE,EAAcqE,CADK,EAsE1BF,EAAAG,GAAAA,SAAsBn7C,GACpB/yB,KAAKopE,EAAgBl4C,IAAI6B,EADG,EAU9Bg7C,EAAAI,GAAAA,SAAwBp7C,GACtB/yB,KAAKopE,EAAgBrM,OAAOhqC,EADE,EAShCg7C,EAAAK,GAAAA,WACEpuE,KAAKopE,EAAgB3wC,OADE,EAWzBs1C,EAAAM,GAAAA,SAAuBt7C,GACrB/yB,KAAKqpE,EAAiBn4C,IAAI6B,EADG,EAU/Bg7C,EAAAO,GAAAA,SAAyBv7C,GACvB/yB,KAAKqpE,EAAiBtM,OAAOhqC,EADE,EASjCg7C,EAAAQ,GAAAA,WACEvuE,KAAKqpE,EAAiB5wC,OADE,EAgD1Bs1C,EAAA71B,QAAAA,WAQE,OAPAl4C,KAAKipE,GAAa,EAClBjpE,KAAKopE,EAAgB3wC,QACrBz4B,KAAKqpE,EAAiB5wC,QAGtB40C,GAAAmB,UAAMx6C,QAAAA,KAAAA,MAECh0B,KAAKkpE,EAAkBhxB,SARtB,IAoBV2yB,QAAAA,SAAQnuE,EAAMmuE,EAASC,GAAU,IAAD,OAExBG,EACF,IAA+BwD,GAGnC,GAAIzuE,KAAKipE,EAAY,CACnB,IAAMhG,EAAIvd,QAAQgL,OAAO,IAAex0B,GnCjKhCiJ,EA4BFi9B,EA+vBWc,OmCnnBjB,OADAD,EAAErS,OAAM,WAAO,IACR,IAA+B8d,GAClCzL,GAAG,WAAM,OAAAvd,QAAQ7J,SAAR,GAAmBovB,EATb,CAqBrBJ,EAAQ/2D,OAAS+2D,EAAQ/2D,QAAU,MACnC+2D,EAAQ7lD,QAAU6lD,EAAQ7lD,SAAW,CAAC,EACtC6lD,EAAQJ,gBAAkBI,EAAQJ,gBAClBja,GAAYqa,EAAQJ,iBNzM7B,CACLlJ,YAAa,EACbE,UAAW,IACXI,cAAe,EACfF,WAAY,GACZgN,QAAS,IACTnC,aAAc,IACdD,kBAAmB,KMoMrB1B,EAAQR,KAAmB7Z,GAAYqa,EAAQR,MAGzCuE,WAmERC,EAAenyE,EAAMmuE,EAASC,GAGRgE,SAAA,EAACC,GACnBC,EAAkBA,EAAgBzK,IAAM,WAStC,OARIsG,EAAQ5lD,OAMV4lD,EAAQ5lD,KAA8B6T,GAAc+xC,EAAQ5lD,OAEvD8pD,EAAcryE,EAAMmuE,EAASC,EATQ,GADT,CAFvC,IAAIkE,EAAgD5J,QAAUj+D,GAgB1D,EAAKsiE,GACPqF,EAAY,EAAKrF,GAGnB,IAAiCL,IAAAA,GAAAA,EAAAh6C,EAALg6C,EAAKA,IAAAA,QAAjC,kBAEE0F,EAFF,EAAAC,OAOA,OAAOC,EAAgBzK,QAAMp9D,GAAW,SAACmsB,GACvC,GAAIA,aAAwB4I,InC8fXgnC,MmC7fb5vC,EAAE1L,KAEJ,MAAM0L,EAGR,MAAM,IAAe4I,GnCnSbiJ,EAUDimC,EAoFa6D,KmCwM4B37C,EAVH,GA5BV,CAnEDu7C,CAALA,KAAoBnyE,EAAMmuE,EAASC,GAClE,IAAMoE,EAAmBN,EAAuBrK,IAC5C,WAAM,OAyHEqG,GAzHFuE,EAA2BzyE,EAAMmuE,EAASC,EAsHpCC,IAAcqE,GAtHavE,EAuH/BJ,iBAAkC,GAChCnrE,EAE+C,KAzHrD2rE,EADE,IAEJoE,EAA0BH,EAAiB3K,IAC7C,SAACoI,GACC,OAyWR2C,SAAAA,EAAgB5yE,EAAMiwE,EAAwB7B,GAE5C,IADA,IAAIkE,EAAgD5J,QAAUj+D,GAC5BkiE,GAAAA,EAAAj6C,EAALi6C,EAAKA,IAAAA,OAAlC,MAAAjiE,EAAA,mBAAAA,EAAA,cAAAA,EAAA,MAEE4nE,EAAkBA,EAAgBzK,GAAM,8BACtC,IAAMgL,EAAO5C,EAAuBF,SAKpC,OAJI8C,EAAKrsE,OAEPqsE,EAAKrsE,KAA8B41B,GAAcy2C,EAAKrsE,QAEjD,EAAAssE,EAAAA,IAAe9yE,EAAM6yE,EAAMzE,EANU,CAAN,MAW1C,OAAOkE,EAAgBzK,IAAM,WAC3B,OAAOoI,CAD0B,IAEhC,SAACr5C,GAMF,IAAImI,EnCnkBI0J,EmCokBR,GAAI7R,aAAwB4I,GAAO,CACjC,GnCsNegnC,MmCtNX5vC,EAAE1L,KAEJ,MAAM0L,EAGRmI,EAAWnI,EAAEmI,QANoB,CASnC,MAAM,IAAeS,GACjBT,EnCpkBG2vC,EA0FcqE,KmC4e4Bn8C,EAnBzC,GAjB2C,CAzW1Cg8C,CAALA,EAAqB5yE,EAAMiwE,EAAwB7B,EAAnD,IAGA4E,EAAyBhiC,KAAK6rB,MAChCoW,EAAkB,EACtBf,EAAuBlM,QAAQrS,MAAK,WAClCsf,EAAkBjiC,KAAK6rB,MAAQmW,CADS,IAEvC,WAAO,QAENE,EAA0B,EAC9BV,EAAiBxM,QAAQrS,MAAK,WAC5Buf,EAA0BliC,KAAK6rB,KADG,IAEjC,WAAO,IAEV,IAAM+J,EAAK+L,EAAwB9K,IAAM,SAACoI,GACxC,IAAMkD,EAAmBniC,KAAK6rB,MAAQqW,EAChCnD,EAAWE,EAAuBF,SAexC,OAdAA,EAASC,QAAUiD,EACnBlD,EAASC,QAAUmD,EACdlD,EAAuBzB,KACxB,EAAK5B,GACJmD,EAASqD,WACQ,QAAlBjF,EAAQ/2D,QACRpX,GAA+CsvE,IAEjD,EAAK1C,EACDmD,EAASC,OAAQD,EAASvpE,KAAKlF,WAFViuE,GAAanB,IAIpC,EAAKnB,GACP,EAAKA,EAAYjtE,EAAM+vE,EAAU3B,GAE5B2B,CAjB4D,IAkBlE,SAACn5C,GASF,MALIA,IAEFA,EAAEmI,SnCzOI0J,GmC4OF7R,CATE,IAmBV,OAJMy8C,EACF,IAA+BrB,GAC3BpL,EAAGZ,SAAS,WAAM,OAAAY,EAAGC,OAAH,GAAY0H,GACf1C,GAAvBvoE,KAAKkpE,EAAyB6G,GACvBA,CA5FuB,EArQlCr7C,EAAA,6BAAAk5C,OAqQEh5C,UnGu+CA,QmGv+CAg5C,GAAA,UAAAh5C,QApBAg5C,GAAAh5C,UnG2/CA,QmG3/CAg5C,GAAA,UAAAh5C,QArBOg5C,GnGghDP,YmGhhDOoC,GAbApC,GnG6hDP,uBmG7hDAqC,WACE,MNtHO,CACL1O,YAAa,EACbE,UAAW,IACXI,cAAe,EACfF,WAAY,GACZgN,QAAS,IACTnC,aAAc,IACdD,kBAAmB,IM8GS,EAdhCqB,GAAAh5C,UnG2iDA,wBmG3iDAg5C,GAAA,UAAAh5C,GATAg5C,GAAAh5C,UnGojDA,yBmGpjDAg5C,GAAA,UAAAh5C,GAVAg5C,GAAAh5C,UnG8jDA,uBmG9jDAg5C,GAAA,UAAAh5C,GAXAg5C,GAAAh5C,UnGykDA,uBmGzkDAg5C,GAAA,UAAAh5C,GATAg5C,GAAAh5C,UnGklDA,wBmGllDAg5C,GAAA,UAAAh5C,GAVAg5C,GAAAh5C,UnG4lDA,sBmG5lDAg5C,GAAA,UAAAh5C,GAxBOg5C,GnGonDP,iBmGpnDAsC,SAAwBvlD,UACYw/C,GAASx/C,EADbulD,KnGonDhC,emGzoDOC,GAzBPvC,GAAAh5C,UnGkqDA,cmGlqDAg5C,GAAA,UAAAh5C,GARAg5C,GAAAh5C,UnG0qDA,amG1qDAg5C,GAAA,UAAAh5C,GAoqBFg5C,GnGsgCE,uBmGtgCFa,GAiCyBd,EADEe,GACF3L,IADzB6K,GnGs+BE,emGt+BFc,GAwCE,OAAW,EAFbd,GnGg8BE,YmGh8BuCwC,CACvCA,SAAYA,EACZA,QAAWA,GACXA,QAAWA,EACXA,IAAOA,EACPA,OAAUA,EACVA,mBAAsBA,EACtBA,IAAOA,EACPA,IAAOA,EACPA,iBAAoBA,MnGu7BpB,oBmG16B+CC,CAC/CA,aAAgBA,EAChBA,cAAiBA,EACjBA,eAAkBA,EAClBA,gBAAmBA,EACnBA,IAAOA,EACPA,IAAOA,EACPA,UAAaA,EACbA,yBAA4BA,EAC5BA,0BAA6BA,EAC7BA,4BAA+BA,EAC/BA,2BAA8BA,GAC9BA,wBAA2BA,GAC3BA,oBAAuBA,IAevB,OAAe,EAHjBzC,GnGi5BE,emGj5B0C0C,CAC1CA,SAAYA,EACZA,UAAaA,EACbA,YAAeA,IAyBjB,IAAAnG,GAAsC,CAAC,EC74BrC59D,SAAA,GAAYoY,GAEV3kB,KAAKipE,GAAa,EAGlBjpE,KAAKuwE,EAAiB,IAAenM,GAGrCpkE,KAAKwwE,EAAa7rD,CARE,CAgDtB8rD,SAAA,GAAAA,EAAmBzlE,GACjB,GAAI,EAAKi+D,EAAY,CACnB,GAAIj+D,aAA4BkxB,IpCs3BhBw0C,MoCr3BZ1lE,EAAM4c,KACR,MAAM5c,EAER,MASK,IAAekxB,GpCkEZiJ,EA4BFi9B,EA2wBUsO,KoCl3B0B1lE,EALvB,CADG,CCnD1BmzC,SAAO,GAAIwyB,EAAUjoE,GAEnB,IADA,IAAMsB,EAAQ,GACE2mE,GAAAA,EAAAvhD,EAAAuhD,IAAAA,QAAhB,kBACE3mE,EAAM7L,KAAKuK,EADb,EAAA4jD,QAGA,OAAOtiD,CALqB,CCH9B4mE,SAAO,GAAM1jE,GAEX,IADA,IAAMixC,EAAM,IAAI3oB,IACE,EAAApG,EAAA5jB,OAAOU,KAAKgB,IAAZ,YAAlB,4BACEixC,EAAIv5C,IAAI0C,EAAK4F,EAAO5F,IAGtB,OAAO62C,CANY,CAerB0yB,SAAO,GAAS1yB,GACd,IAAM3mC,EAAM,CAAC,EAKb,OAJA2mC,EAAIlmC,SAAQ,SAACpU,EAAOyD,GAClBkQ,EAAIlQ,GAAOzD,CADe,IAIrB2T,CANY,CCVrBjL,SAAA,GAAYrJ,EAAM4tE,GAEhB9wE,KAAK+wE,EAAmCn4C,GAAW11B,GAGnDlD,KAAKgxE,EACDF,GAAmDG,GAGvDjxE,KAAKonC,EAAY,CATW,CAkP9B8pC,SAAA,KACE,OAAO,IAAeh1C,GvCjHZiJ,EAgBHgsC,EA+MoBC,IuC/Gd,CHnNfC,GAAA,UAAAn5B,QAAAA,WAAW,IAAD,OACR,OAAIl4C,KAAKipE,EACAjpE,KAAKuwE,GAKdvwE,KAAKipE,GAAa,EAEXjpE,KAAKwwE,IAAangB,MACrB,WAAQ,EAAKkgB,EAAe10B,SAAtB,IACN,WAAQ,EAAK00B,EAAe10B,SAAtB,IAXF,GGRVy1B,EAAAA,GAAAA,WAAAA,GAAAA,WACE,OAAOtxE,KAAKonC,EAAYpnC,KAAK+wE,EAAU/yE,UAD3B,EAUduzE,EAAAC,GAAAA,WACE,OAAOxxE,KAAKonC,CADA,EAUdmqC,EAAA9wE,UAAAA,WACE,OAAOT,KAAK+wE,EAAU/yE,UADZ,EAUZuzE,EAAAE,EAAAA,WACE,IACE,IAAM5tE,EAAQ7D,KAAK+wE,EAAU7yE,SAAS8B,KAAKonC,GAE3C,OADApnC,KAAKonC,GAAa,EACXvjC,CAHL,CAIF,MAAOkhE,GACP,MAAWmM,IADO,CALV,EAgBZK,EAAAG,GAAAA,WACE,IACE,IAAM7tE,EACF7D,KAAK+wE,EAAUjuE,UAAU9C,KAAKonC,EAAWpnC,KAAKgxE,GAElD,OADAhxE,KAAKonC,GAAa,EACXvjC,CAJL,CAKF,MAAOkhE,GACP,MAAWmM,IADO,CANT,EAiBbK,EAAAI,EAAAA,WACE,IACE,IAAM9tE,EACF7D,KAAK+wE,EAAUhuE,UAAU/C,KAAKonC,EAAWpnC,KAAKgxE,GAElD,OADAhxE,KAAKonC,GAAa,EACXvjC,CAJL,CAKF,MAAOkhE,GACP,MAAWmM,IADO,CANT,IAiBbU,GAAAA,WACE,IACE,IAAM/tE,EAAQ7D,KAAK+wE,EAAUtuE,SAASzC,KAAKonC,EAAWpnC,KAAKgxE,GAE3D,OADAhxE,KAAKonC,GAAa,EACXvjC,CAHL,CAIF,MAAOkhE,GACP,MAAWmM,IADO,CALV,EAgBZK,EAAAM,GAAAA,WAME,IACE,GAAI7xE,KAAKgxE,EACP,IAAAc,EAAM9xE,KAAK+wE,EAAUhuE,UAAU/C,KAAKonC,GAAW,GAC/C2qC,EAAO/xE,KAAK+wE,EAAUhuE,UAAU/C,KAAKonC,EAAY,GAAG,QAEpD2qC,EAAO/xE,KAAK+wE,EAAUhuE,UAAU/C,KAAKonC,GAAW,GAChD0qC,EAAM9xE,KAAK+wE,EAAUhuE,UAAU/C,KAAKonC,EAAY,GAAG,EANnD,CAQF,MAAO29B,GACP,MAAWmM,IADO,CAIpB,GAAW,QAAPa,EACF,MAAM,IAAe71C,GvCRbiJ,EAgBHgsC,EAsNca,MuCnNrB,OALAhyE,KAAKonC,GAAa,EAKV2qC,EAAOnvE,KAAKC,IAAI,EAAG,IAAOivE,CA9BvB,EAwCbP,EAAAU,GAAAA,SAAUvxE,GAER,GAAIV,KAAKonC,EAAY1mC,EAAQV,KAAK+wE,EAAU/yE,WAC1C,MAAWkzE,KAGb,IAAMrtE,EACqBizB,GAAQ92B,KAAK+wE,EAAW/wE,KAAKonC,EAAW1mC,GAEnE,OADAV,KAAKonC,GAAa1mC,EACXmD,CATQ,IAkBjBquE,KAAAA,SAAKxxE,GAEH,GAAIV,KAAKonC,EAAY1mC,EAAQV,KAAK+wE,EAAU/yE,WAC1C,MAAWkzE,KAEblxE,KAAKonC,GAAa1mC,CALR,EAcZ6wE,EAAAY,GAAAA,SAAOzxE,GAEL,GAAIV,KAAKonC,EAAY1mC,EACnB,MAAWwwE,KAEblxE,KAAKonC,GAAa1mC,CALN,EAcd6wE,EAAAa,KAAAA,SAAK30D,GAEH,GAAe,EAAXA,GAAgBA,EAAWzd,KAAK+wE,EAAU/yE,WAC5C,MAAWkzE,KAEblxE,KAAKonC,EAAY3pB,CALJ,EAef8zD,EAAAc,GAAAA,WAEE,IADA,IAAM5oE,EAAQzJ,KAAKonC,EACZpnC,KAAKsxE,MAEG,GADCtxE,KAAK+wE,EAAU7yE,SAAS8B,KAAKonC,IAI3CpnC,KAAKonC,GAAa,EAOpB,OAJMF,EAA6BpQ,GAC/B92B,KAAK+wE,EAAWtnE,EAAOzJ,KAAKonC,EAAY39B,GAE5CzJ,KAAKonC,GAAa,EACY1B,GAASwB,EAdlB,EAjOzBxS,EAAA,4BAAA49C,IAiOEA,GAAA19C,UvGuiDA,qBuGviDA09C,GAAA,UAAA19C,GAfA09C,GAAA19C,UvGsjDA,KuGtjDA09C,GAAA,UAAA19C,KAdA09C,GAAA19C,UvGokDA,OuGpkDA09C,GAAA,UAAA19C,MAdAA,UvGklDA,KuGllDA09C,GAAA,UAAA19C,KAlBA09C,GAAA19C,UvGomDA,UuGpmDA09C,GAAA,UAAA19C,GAxCA09C,GAAA19C,UvG4oDA,WuG5oDA09C,GAAA,UAAA19C,GAhBA09C,GAAA19C,UvG4pDA,UuG5pDA09C,GAAA,UAAA19C,GAjBA09C,GAAA19C,UvG6qDA,WuG7qDA09C,GAAA,UAAA19C,EAjBA09C,GAAA19C,UvG8rDA,WuG9rDA09C,GAAA,UAAA19C,GAhBA09C,GAAA19C,UvG8sDA,UuG9sDA09C,GAAA,UAAA19C,EAVA09C,GAAA19C,UvGwtDA,UuGxtDA09C,GAAA,UAAA19C,UAVA09C,GAAA19C,UvGkuDA,YuGluDA09C,GAAA,UAAA19C,GAVA09C,GAAA19C,UvG4uDA,YuG5uDA09C,GAAA,UAAA19C,GA0OA,OAAiB,ECtQjBroB,SAAA,KAEEvM,KAAKuyE,EAAW,GAGhBvyE,KAAKwyE,EAAkB,GAGvBxyE,KAAKyyE,GAAQ,CARD,CA4LdnpC,SAAO,GAASvqC,GAId,IADA,IAAM2zE,EAAkCC,GAAW5zE,GAC5CA,EAAI6zE,OAAOtB,OAAkBvyE,EAAIpC,OAAO81E,GAC7C1zE,EAAIpC,OAAOk2E,GAAU9zE,EAAI0K,MAAQipE,EAAY3zE,EAAI6zE,OAAQ7zE,EAAI+zE,YAL5C,CAmBrBC,SAAO,GAAkBh0E,GAKvB,IAFA,IAAM2zE,EAAkCC,GAAW5zE,GAC7Ci0E,EAAQj0E,EAAI6zE,OAAOjB,IAChB5zE,EAAI,EAAGA,EAAIi1E,IAClBj0E,EAAIpC,OAAOk2E,GAAU9zE,EAAI0K,MAAQipE,EAAY3zE,EAAI6zE,OAAQ7zE,EAAI+zE,cACzD/zE,EAAIpC,OAAO81E,GAFU10E,KALC,CAuB9Bk1E,SAAO,GAAkBl0E,GAGvB,IAAM2zE,EAAkCC,GAAW5zE,GAgBnD,IAFAA,EAAI6zE,OAAOV,KAAK,IAETnzE,EAAI6zE,OAAOtB,OAAkBvyE,EAAIpC,OAAO81E,GAC7C1zE,EAAIpC,OAAOk2E,GAAU9zE,EAAI0K,MAAQipE,EAAY3zE,EAAI6zE,OAAQ7zE,EAAI+zE,YApBnC,CAkC9BI,SAAO,GAAiBn0E,GAGtB,IAAM2zE,EAAkCC,GAAW5zE,GAInDA,EAAI6zE,OAAOV,KAAK,GAEhB,IAAM70E,EAAU0B,EAAI6zE,OAAOlB,KAiC3B,IA9BA3yE,EAAI6zE,OAAOV,KAAK,GAED,GAAX70E,EASF0B,EAAI6zE,OAAOV,KAAK,IAQhBnzE,EAAI6zE,OAAOV,KAAK,IAGH,GAAX70E,GAKF0B,EAAI6zE,OAAOV,KAAK,IAGXnzE,EAAI6zE,OAAOtB,OAAkBvyE,EAAIpC,OAAO81E,GAC7C1zE,EAAIpC,OAAOk2E,GAAU9zE,EAAI0K,MAAQipE,EAAY3zE,EAAI6zE,OAAQ7zE,EAAI+zE,YA3CpC,CAwD7BK,SAAO,GAAQxuD,GACb,OAAO,SAAC5lB,GAEN4lB,EAAS5lB,EAAI6zE,OAAOX,GADRlzE,EAAI6zE,OAAOnyE,YAAc1B,EAAI6zE,OAAOpB,MADlC,CADO,CAgBzB4B,SAAO,GAAgBlyE,GAMrB,IADA,IAAI0mB,EAAO,EACO1mB,GAAAA,EAAAkuB,EAAAluB,IAAAA,QAAlB,kBACE0mB,EAAQA,GAAQ,EADlB,EAAAxO,MAC2Bva,WAAW,GAEtC,OAAO+oB,CAToB,CAqB7ByrD,SAAO,GAAa32E,GAMlB,OALa0B,OAAOC,aACf3B,GAAQ,GAAM,IACdA,GAAQ,GAAM,IACdA,GAAQ,EAAK,IACP,IAAPA,EALoB,CAiB1Bg2E,SAAO,GAAW3zE,GAIhB,OAHwBu0E,GACAv0E,EAAIw0E,aAAe,EAAI,IACN,MAAbx0E,EAAIzB,MAAgB,EAAI,EAH/B,CDlHzBg1E,GvGogDE,WuGpgDqCkB,CACrCA,WAAcA,EACdA,cAAiBA,KClPjBz0E,EAAAA,GAAAA,WAAAA,IAAAA,SAAIrC,EAAM+2E,GAIR,OAHMC,EAAgCC,GAAgBj3E,GACtDsD,KAAKuyE,EAASmB,GAA0CE,GACxD5zE,KAAKwyE,EAAgBkB,GAAYD,EAC1BzzE,IAJa,EAgBtB6zE,EAAAC,EAAAA,SAAQp3E,EAAM+2E,GAIZ,OAHMC,EAAgCC,GAAgBj3E,GACtDsD,KAAKuyE,EAASmB,GAA0CK,GACxD/zE,KAAKwyE,EAAgBkB,GAAYD,EAC1BzzE,IAJiB,EAc1B6zE,EAAA5vC,KAAAA,WACEjkC,KAAKyyE,GAAQ,CADR,EAgBPoB,EAAAp3E,MAAAA,SAAMyG,EAAM4vE,EAAakB,GAKvB,IAJMpB,EAAS,IAAeN,GAC1BpvE,EDiMQ+wE,GC/LZj0E,KAAKyyE,GAAQ,EACNG,EAAOtB,OAAkBtxE,KAAKyyE,GACnCzyE,KAAK6yE,GAAU,EAAGD,EAAQE,EAAakB,EANH,IAwBxCnB,GAAAA,SAAUqB,EAAUtB,EAAQE,EAAakB,GACvC,IAAMvqE,EAAQmpE,EAAOpB,KAGrB,GAAIwC,GAAiBvqE,EAAQ,EAAImpE,EAAOnyE,YACtCT,KAAKyyE,GAAQ,MADf,CAKA,IAAItxE,EAAOyxE,EAAOjB,IACZj1E,EAAOk2E,EAAOjB,IACdzwE,EAA4BizE,GAAaz3E,GAC3C62E,GAAe,EAGnB,OAAQpyE,GACN,KAAK,EACHA,EAAOyxE,EAAOnyE,YAAcgJ,EAC5B,MACF,KAAK,EACH,GAAIuqE,GAAiBpB,EAAOpB,KAAgB,EAAIoB,EAAOnyE,YAErD,YADAT,KAAKyyE,GAAQ,GAGftxE,EAAOyxE,EAAOf,KACd0B,GAAe,EAInB,IAAMa,EAAgBp0E,KAAKwyE,EAAgB91E,GAE3C,GAAI03E,EAAe,CACjB,IAAI/2E,EAAU,KACVC,EAAQ,KAEZ,GAAI0C,KAAKuyE,EAAS71E,IAAuCq3E,GAAU,CACjE,GAAIC,GAAiBpB,EAAOpB,KAAgB,EAAIoB,EAAOnyE,YAErD,YADAT,KAAKyyE,GAAQ,GAIfp1E,GADMg3E,EAAkBzB,EAAOjB,OACD,GACtB0C,GAAkB,QAPuC,CAY/D3qE,EAAMD,EAAQtI,EACd2xE,GAAeppE,EAAMkpE,EAAOnyE,cAE9BiJ,EAAMkpE,EAAOnyE,aAGXuzE,GAAiBtqE,EAAMkpE,EAAOnyE,YAChCT,KAAKyyE,GAAQ,GAGT6B,EAAc5qE,EAAMkpE,EAAOpB,KAoBjC4C,EAZYr1E,CACVmC,KAAAA,EACAvE,OAAQqD,KACR8yE,YAAaA,IAAe,EAC5Bz1E,QAAAA,EACAC,MAAAA,EACAs1E,OAVI2B,EAAgB,IAAejC,GAH/BxhC,EACS,EAAdwjC,EAAmB1B,EAAOX,GAAUqC,GAAe,IAAI3zE,WAAW,GDgHzDszE,GCnGR9yE,KAAAA,EACAsI,MAAOA,EAAQyqE,EACfX,aAAAA,IA3Ce,MAuDjBX,EAAOV,KAHYtvE,KAAKQ,IACpBqG,EAAQtI,EAAOyxE,EAAOpB,KACtBoB,EAAOnyE,YAAcmyE,EAAOpB,MAjFlC,CAJsD,EA5F1D98C,EAAA,uBAAA8/C,IAwXSA,GxGk5CP,WwGl5CO7B,GAjBA6B,GxGm6CP,awGn6COL,GArCAK,GxGw8CP,QwGx8COC,GAxDAD,GxGggDP,iBwGhgDOE,GAlCAF,GxGkiDP,kBwGliDOG,GAvBAH,GxGyjDP,kBwGzjDOI,GAnBAJ,GxG4kDP,SwG5kDOK,GAlGPL,GAAA5/C,UxG8qDA,UwG9qDA4/C,GAAA,UAAA5/C,GAxBA4/C,GAAA5/C,UxGssDA,MwGtsDA4/C,GAAA,UAAA5/C,MAhBA4/C,GAAA5/C,UxGstDA,KwGttDA4/C,GAAA,UAAA5/C,KAdA4/C,GAAA5/C,UxGouDA,QwGpuDA4/C,GAAA,UAAA5/C,EAhBA4/C,GAAA5/C,UxGovDA,IwGpvDA4/C,GAAA,UAAA5/C,IA0XAkgD,IAAAA,GAAWA,EACXC,GAAUA,EC1YVxoE,SAAA,GAAYyoE,GAAU,IAAD,OAKnBh1E,KAAKi1E,EAAY,GAMjBj1E,KAAKk1E,EAAa,GAMlBl1E,KAAKkD,KAAO,IAGPnE,IADUy1E,IACVz1E,IAAI,OAA6B81E,IACjC91E,IAAI,OAA6B81E,IACjCf,EAAQ,QAAQ,SAAC/0E,GAsBtB,KAAkB,EAtB+BA,EAsBzC1B,SAAR,CAUA,IAAM83E,EAA8Br+C,GAhCa/3B,EA6B5B6zE,OFpCT7B,GEuC2C,GAhCNhyE,EAgCcoC,MAK/D,GArC8Bi0E,EAiCzBlyE,KAAK/E,KAAKg3E,GAjCeC,EAmCzBH,EAAU92E,KACgBijD,GApCkBriD,EAoCR6zE,OAAOX,GAAU,MACxC,EArC+BlzE,EAqCzC1B,QAAa,CACbg4E,EAtCyCt2E,EAsCzB6zE,OAAOjB,IAC7B,IAAK,IAAI5zE,EAAI,EAAGA,EAAIs3E,EAAWt3E,IAAK,CAClC,IAAMs/B,EACyB+jB,GAzCcriD,EAyCJ6zE,OAAOX,GAAU,KAzChCmD,EA0CrBF,EAAW/2E,KAAKk/B,EAHa,CAFjB,CAfrB,CAtB8B,IACzB5gC,MAAMu4E,EAvBQ,CA8ErBM,SAAO,GAAWpyE,EAAMqyE,EAAUh4C,EAAQlgC,GAExC,IAAMm4E,EAAatyE,EAAKtE,OACpB62E,EAA6BF,EAAS32E,OAAS,GAAM42E,EAC3C,EAAVn4E,IACFo4E,GAAY,EAAO,GAAKl4C,EAAOp8B,MAIjC,IAAM6zE,EAAU,IAAIr0E,WAAW80E,GAEzBC,EAAkC98C,GAAWo8C,GAE/CW,EAAa,EAYjB,GAXAD,EAASxxE,UAAUyxE,EAAYF,GAC/BE,GAAc,EACdD,EAASxxE,UAAUyxE,EAAY,YAC/BA,GAAc,EACH,EAAVt4E,EAAeq4E,EAASxxE,UAAUyxE,EAAY,GAC3CD,EAASxxE,UAAUyxE,EAAY,UACnCA,GAAc,EACdX,EAAQpwE,IAAI2wE,EAAUI,GACtBA,GAAcJ,EAAS32E,OAGT,EAAVvB,EAIF,IAHAq4E,EAASxxE,UAAUyxE,EAAYp4C,EAAOp8B,MACtCw0E,GAAc,EAEMp4C,GAAAA,EAAAnO,EAAAmO,IAAAA,QAApB,kBACQq4C,EAAsB12B,GAD9B,EAAA7hB,OAEE23C,EAAQpwE,IAAIgxE,EAAKD,GACjBA,GAAcC,EAAIh3E,OAUtB,OANA82E,EAASxxE,UAAUyxE,EAAYH,GAE/BR,EAAQpwE,IAAI1B,EADZyyE,EAAc,GAKPX,CA1C0C,CrBhEnDzoE,SAAA,GAAYspE,GAAkB,IAAD,OAE3B71E,KAAK81E,EAAmBD,EAMxB71E,KAAK+1E,EAHL/1E,KAAKg2E,EAAa,KASlBh2E,KAAKi2E,GAHLj2E,KAAKk2E,IAAe,EAMpBl2E,KAAKm2E,EAAsB,EAG3Bn2E,KAAK+tD,EAAkB,KAGvB/tD,KAAKi4D,EAAgB,IAAetjC,EAMpC30B,KAAKo2E,EAAkB,IAAI5gD,IAM3Bx1B,KAAKq2E,EAA4B,IAAI7gD,IAGrCx1B,KAAKs2E,EAAqB,IAAelS,GAGzCpkE,KAAKm4D,EAAU,KAGfn4D,KAAKu2E,EAAWC,SAACC,GpBwEPtxC,GoBvEJsxC,EAAIh7C,UACN,EAAK66C,EAAmB5lB,OAAO+lB,GAGjCZ,EAAgBpR,QAAQgS,EALD,EAezBz2E,KAAK02E,EAAoB,IAAIlhD,IAQ7Bx1B,KAAK22E,GAA6B,IAAInhD,IAGtCx1B,KAAK42E,EACD,IAAe11C,IAAM,WAAM,OAuiDjC21C,SAAAA,GACE,IAAMC,EAAa,EAAKJ,EAClBK,EAAY,EAAKJ,GAGvBI,EAAUt+C,QACVq+C,EAAW7+D,SAAQ,SAAC++D,EAAQ35C,GAAU,OAAA05C,EAAUnyE,IAAIy4B,EAAO25C,EAArB,KAIhCC,EAAWtyE,MAAM24B,KAAKy5C,EAAUxnE,WACV3Q,QACTq4E,EAAS7qC,OAAM,SAAC4qC,GAAW,MAAU,WAAVA,CAAA,KAG5C,EAAKT,EAAS,IAAer6C,GpBzgDrBiJ,EAyBL+xC,EAwtBIC,OoB8xBT,EAAKrB,EAAiBsB,GAAgCC,GAASN,GArBtC,CAviDWF,CAALA,EAAA,IAG/B72E,KAAKs3E,GAAyB,EAG9Bt3E,KAAKu3E,EAAyB,GAG9Bv3E,KAAKw3E,GAAuB,EAG5Bx3E,KAAKy3E,EAAmB,IAAev2C,IAAM,YA03D/Cw2C,SAAAA,GACE,EAAKtB,EAAgBn+D,SAAQ,SAACvC,EAAUiiE,GACtC,IAAMC,EAAUliE,EAASmiE,GACrBC,EAAUH,EAAQI,WAClBrmD,MAAMomD,KACRA,EAAUxgD,KAGRwgD,GAAWF,IARD,EASP9B,EAAiBkC,oBAAoBL,EAAQhN,UAAWmN,GAC7DpiE,EAASmiE,GAAgBC,EATuB,GADpC,CAz3DTJ,CAALA,EADiD,IAMnD13E,KAAKs2E,EAAmB1lB,OADX56C,WAAO,IAIpBhW,KAAKi4E,EAAa,IAAe5G,IAAU,WAAM,OA0B7C6G,SAAAA,GAAe,OAADh2C,GAAA,+BAmBlB,OAnBkB,EAGb+1B,EAAcjkC,UAHD,EAIbikC,EAAgB,KAJH,EAQbqe,EAAmB5lB,SARN,EAYb+mB,EAAiBxzC,OAZJ,EAabwzC,EAAmB,KAbN,EAebb,EAAgB3yC,OAfH,EAgBb2yC,EAAkB,KAGvB,IAAWuB,GAnBOA,GAmBlB,GAnBkB,OAsBlB,IAtBkB,EAsBTpC,EAAT,cAWI,OADE,OACF,IAjCc,EAiCHA,EAAOqC,aAAa,MAA/B,GAjCc,OAgCZ,aAhCY,OAkCPptE,EAAAA,GAlCO,SAuCX+qE,EAAS,KAvCE,SA2CbhoB,EAAkB,KA3CL,EA4CbioB,EAAa,KA5CA,EA6CbK,EAA4B,IAAI7gD,IA7CnB,EA8Cb2iC,EAAU,KA9CG,EA+Cboe,EAAWC,WAAO,EA/CL,EAgDbV,EAAmB,KAhDN,EAiDbuC,GAAa,EAjDA,EAkDbC,EAAqB,KAlDR,SA1BoCJ,CAALA,EAAA,IAGjDl4E,KAAKq4E,GAAa,EAMlBr4E,KAAKu4E,EAHLv4E,KAAKs4E,EAAqB,KAM1Bt4E,KAAKw4E,EAAaC,WAAM,SAxGG,CAwO7BC,SAAA,GAAAA,EAAgB/uB,EAAUgvB,GACxB,EAAKtC,EAA4B,IAAI7gD,IAErC,IAAwBmjD,IAAAA,GAAAA,EAAAvpD,EAAAupD,IAAAA,QAAxB,kBACE,EAAKtC,EAA0BzxE,IADjC,EAAA+lE,MAEiB,CAACxtC,SAAU,KAAMsiB,aAAc,OAGhD,IAAoCm5B,GAAAA,EAAAxpD,EAAbwpD,EAAKzgB,EAAQygB,6BAAAA,QAApC,4BACE,EAAKvC,EAA0BzxE,IAC3B8Q,EAASi1D,UACT,CAACxtC,SAAUznB,EAASynB,SAAUsiB,aAAc/pC,EAAS+pC,eAK3D,OAFA,EAAK63B,EAA+D,EAAtC,EAAKjB,EAA0Bl1E,KAEjD03E,GAALA,EAAWlvB,EAhByB,CA4EvCkvB,SAAA,GAAAA,EAAMlvB,GAQV,IAAMmvB,EAEkBnvB,EAAAA,EAAtBviD,EAUI2xE,EAkBEC,EAKFzmB,EACgB5I,EAAAA,EAAtB,EACQsvB,EACaA,EAAAA,EAAnB,EAKiB1mB,EAAAA,EAyBb0Q,EA5Ec,OAAA/gC,GAAA,uBASpB,GADM42C,EAoxBRI,SAAAA,GAEE,OAAsB,IADhBp6B,EAAgCq6B,GAAM,EAAKhhB,EAAQrZ,YAC3C39C,KACL,KAIkBi4E,GAA2Bt6B,EAPnC,CApxBUo6B,CARTA,GAUlB,IAAsBvvB,EAAAv6B,EAAAu6B,GAAAA,EAAAA,EAAAA,QAAtB,mBAAAviD,EAAA,SACc0gD,QACVF,EAAQE,MAAMyK,SAAW,CAACumB,IAExBlxB,EAAQC,QACVD,EAAQC,MAAM0K,SAAW,CAACumB,IA6BhC,KAxBMC,EAAapvB,EAASmF,MAAK,SAAClH,GAIhC,SAHIA,EAAQE,OAASF,EAAQE,MAAMyK,SAAS3zD,QAGxCgpD,EAAQC,OAASD,EAAQC,MAAM0K,SAAS3zD,OAJA,OAkBtCo6E,EAA8BG,GAtClB,EAsC6BhhB,EAAQ6gB,SAsqD3DK,SAAuB1vB,EAAU2vB,GAC/B,IAAM/mB,EAAW,GAiBjB,IAfA+mB,EAAWrhE,SAAQ,SAACygC,EAAK3b,GACvBw1B,EAASp0D,KAAK,CACZ4+B,UAAWA,EACXU,iBAAkBib,EAClBhb,+BAA+B,EAC/BC,yBAAyB,EACzBE,gBAAiB,GACjBD,gBAAiB,GACjBE,kBAAmB,KACnBC,qBAAsB,GACtBZ,SAAU,GACVI,OAAQ,IAAI/K,KAXuB,IAejBm3B,GAAAA,EAAAv6B,EAAAu6B,IAAAA,QAAtB,8BACc7B,QACVF,EAAQE,MAAMyK,SAAWA,GAEvB3K,EAAQC,QACVD,EAAQC,MAAM0K,SAAWA,EAvBc,CArqDnBgnB,CAAgB5vB,EAAUqvB,IAI5CzmB,EAAW,IAAI//B,IACCm3B,EAAAv6B,EAAAu6B,GAAAA,EAAAA,EAAAA,QAAtB,kBAEE,IAFF,UACQsvB,EAAuBO,GAAoB5xB,GAC9BqxB,EAAA7pD,EAAA6pD,GAAAA,EAAAA,EAAAA,QAAnB,4BACE1mB,EAASrhC,IAAIuhC,GAIjB,IAAmBF,EAAAnjC,EAAAmjC,GAAAA,EAAAA,EAAAA,QAAnB,kBACwBknB,GADxB,QAG0BN,GAtDN,EAsDiBhhB,EAAQ6gB,SACnBG,GAvDN,EAuDiBhhB,EAAQE,UAAY,CAAC,GAvDtC,EAwDTF,EAAQuhB,mBAQnB,WAA6B5rB,GAA4BnE,EAhErC,EAiEX2tB,EAjEW,EAiEkBe,EAjElB,EAkEXlgB,EAAQ3K,qBAFjB,EAhEoB,CAuEpB,OAJgBijB,GAnEI,EAmEfwH,GAEcc,GAAcvtE,OAAOU,KArEpB,EAqE8BisD,EAAQ6gB,SAASp6E,QAO7DqkE,EAAS0W,GA5EKA,OA4DhBC,EAgB+CjwB,GAYnD,EAAA7lB,OAAOi1C,EAAa9V,EAAIA,EAAErS,OAAM,WAAO,OAxFnB,EAwEbslB,IAAe,EACpB,EAAApyC,OAAO4hB,QAAQ7J,WAzEG,IAgGhBg+B,SAAA,GAAAA,GAiBK9U,IAAAA,EAjBc,OAAA7iC,GAAA,+BACvB,GADuB,EACd6zC,EAAO+D,UACd,SAAAh2C,SAIF,IANuB,EAMdw0C,EAAT,cACE,WAPqB,EAOVA,EAAX,GAPqB,OAUrB,OADgB7H,GATK,EAShBwH,GACL,EAAAn0C,SAVqB,OAgBrB,OAHE,OAbmB,EAchBw0C,EAdgB,EAcUvC,EAAOqC,aAdjB,EAcmCpC,GAExD,IAhBqB,EAgBVsC,EAAX,GAhBqB,OAanB,aAbmB,OAiBdvT,EAAAA,EAAAA,GAjBc,EAoBhBwR,EAAS,IAAer6C,GpBpTrBiJ,EAyBL+xC,EAqpBsB6C,KoBtXrBhV,EAAUlpC,UAxBO,OA2BP40C,GA3BO,EA2BlBwH,GA3BkB,SAuPnB+B,SAAA,GAAAA,GAQF,IAgBIx6B,EAEyBA,EAAAA,EAA/Bp4C,EA1BmB,OAAA86B,GAAA,sBACnB,OADmB,EACVm0C,EAA0Bl1E,MADhB,EAEZk1E,EAA0Bp+D,SAAQ,SAACvC,EAAUi1D,GAC3CsP,GAHUA,EAGUtP,EAAWj1D,EAD0B,IAIhE,IANiB,EAMN4gE,EAAX,IALF,OADmB,WAajB,GAAkB,GAbD,EAQIvoB,GARJ,EAQ4BA,EAAgBxwB,QACzD,IAAI/K,IAAI,KAIDrxB,MAi1Cf+4E,SAAAA,GAIE,IAAoB38C,IAAAA,EAAAnO,EAHJ,EAAK2+B,GAAmB,EAAKA,EAAgBxwB,QACzD,IAAI/K,IAAI,KAEQ+K,EAAAA,EAAAA,QAApB,kBAGE,GAAe,WAFA,EAAKm5C,EAAkBhnE,IADxC,EAAA2tB,OAII,OAAO,EAIX,OAAO,CAZW,CAj1CY68C,CAbXA,GAcf,OAAO,EAAPp2C,OAde,EAcHwyC,GAdG,EAmBZA,EAAqB,IAAelS,GAnBxB,EAoBZkS,EAAmB1lB,OAAM,WAAO,GApBpB,CA0BnB,IAFMpR,GAxBa,EAyBTuO,EAzBS,EAyBcA,EAAgB5wB,SAAW,KAAO,GACpCqiB,EAAApwB,EAAAowB,GAAAA,EAAAA,EAAAA,QAA/B,kBAAAp4C,EAAA,QACO+yE,GA3BYA,EA4BbC,EAAiB36B,aAAc26B,EAAiBj9C,UAYtD,OAJSk9C,GApCUA,IAAA,EAqCZ/D,EAAmBz6B,UAG1B,EAAA/X,OAxCmB,EAwCPwyC,EAxCO,IAkDrB6D,SAAA,GAAAA,EAAY16B,EAActiB,GACxB,GAAKA,EAASv+B,OAAd,CAQA,GAAI,EAAKu5D,EAAQmiB,wBAAyB,CAExC,IADA,IAAMC,EAAY,EAAKnE,EAAgB7mE,SAChBgrE,GAAAA,EAAAnrD,EAAAmrD,IAAAA,QAAvB,kBACE,GAA2BxhD,GAAMoE,EADnC,EAAAznB,MACsDynB,UAElD,OAGJ,IAAIq9C,GAAY,EAOhB,GANA,EAAKnE,EAA0Bp+D,SAAQ,SAACvC,IACjC8kE,GACsBzhD,GAAMoE,EAAUznB,EAASynB,YAClDq9C,GAAY,EAHgD,IAM5DA,EAEF,MAjBsC,CAwBV,EAA5B,EAAKpE,EAAgBj1E,MAAiBk5E,GAALA,KACnC,EAAK/D,EAAmBz6B,UACxB,EAAKy6B,EAAqB,IAAelS,GACzC,EAAKkS,EAAmB1lB,OAAM,WAAO,KAifzC6pB,SAAAA,EAAch7B,EAActiB,EAAUwhB,GAMpC,IAGE,IAAAg5B,EAAU,EAAK3B,EAAWyE,cAAc97B,EAHtC,CAIF,MAAOomB,GAMP,YALA,EAAKwR,EAAS,IAAer6C,GpBzmCrBiJ,EAyBL+xC,EAkqBqBwD,KoBkbpB3V,EAAUlpC,SALI,CASpB,EAAKo8B,EAAc9jC,EAAOwjD,EAAS,WAE7B,SAACnjD,GArB0CmmD,EAsGvC5E,GAtGuC4E,EA2GpCxiB,EAAQyiB,gCA3G4BD,EA4GpC5E,EAAO8E,SA5G6BF,EA4GbnD,EA5GamD,EA2F1CpD,EAAuBp5E,KAtEUq2B,GAwEjCsmD,GA7F0CH,EAqBTnmD,EAAvB,IACjB,EAAKyjC,EAAc9jC,EAAOwjD,EAAS,qBAC/B,SAACnjD,GAAU,OAAKumD,GAvB6BA,EAuBRvmD,EAA1B,IAUf,EAAK4hD,EAAgBxxE,IAAI+yE,EARRjiE,CACfynB,SAAUA,EACVsiB,aAAcA,EACdu7B,QAAQ,EACRnD,GAAevgD,IACf2jD,GAAe,KACfv+E,KAAMiiD,IAIR,IACExhB,EAAW,EAAKg7B,EAAQ+iB,kBACpB/9C,EAAUsiB,EAAc,EAAKsO,EAF/B,CAGF,MAAO/iD,GAUP,OATI4hE,EAAa5hE,EACXA,aAA4BkxB,KAChC0wC,EAAa,IAAe1wC,GpBvoCtBiJ,EAyBL+xC,EAouBsBiE,KoB8YnBnwE,SAEN,EAAKurE,EAAS3J,EATA,CAaZ,EAAKzU,EAAQijB,oBACwBn8B,GAAS9hB,GAIlDw6C,EAAQ0D,gBAAgB57B,EAActiB,GAAUyzB,OAAM,SAAC5lD,GACrD,IAzD+C,EAyDtCitE,EgBrwCChP,EhBqwCV,CAzD+C,EA8D1CmN,EAAgBrZ,OAAO4a,OAItB2D,EAAYtwE,EAAA,UAGlB,GAAIswE,GAAaA,EAAUC,WAAY,CACrC,IAAAC,EAAWF,EAAUC,WACN,EAAXC,IACFA,GAAY54E,KAAKC,IAAI,EAAG,KAE1B24E,EAAW,KAAOA,EAAStwE,SAAS,GALC,CArEQ,EA6E1CqrE,EAAS,IAAer6C,GpB3qCrBiJ,EAyBL+xC,EA4qB+BuE,KoB0e9BzwE,EAAM6wB,QAAS7wB,EAAOwwE,GAxB1B,CAD+D,GAxDhB,CA/e5Cf,CAALA,EAAmBh7B,EAActiB,EAC7B,EAAK4wB,EAAgBpP,YAtCzB,CADkC,CAoDpC+8B,SAAA,GAAAA,GAKE,OAHMC,EAA2BC,GAD3BC,EAAW,EAAKzF,EAAgBlqE,QACS,SAAC4vE,GAAQnR,OAAFmR,EAAEnR,SAAAA,IAGjDhmE,MAAM24B,KAAKq+C,EALJ,UAuGV,GAAAhC,EAAgBC,EAAoBjwB,GACxC,IAAMoyB,EAEuB,EAAvBC,EAqCElC,EAmBKxmD,EAeJyxC,EA1EyC,OAAA7iC,GAAA,+BAGrB,GAFvB65C,EAAsB,IAAIvmD,IAEHm0B,EAAS/qD,OAAT,CACzB,EAgGNq9E,SAAAA,EAAgCtyB,EAAUoyB,GACxC,IAAsBpyB,IAAAA,EAAAv6B,EAAAu6B,GAAAA,EAAAA,EAAAA,QAAtB,kBAGE,IAAmB4I,IAAAA,GAAAA,EAAAnjC,EADGoqD,GAFxB,EAAA5xB,SAGqB2K,QAAnBnrD,EAAA,KAAAA,EAAA,SAAAA,EAAAA,EAAA,MACO20E,EAAoBhnE,IAAI09C,EAAK11B,YAChCg/C,EAAoBn3E,IAAI6tD,EAAK11B,UAAW,IAE1Cg/C,EAAoBrsE,IAAI+iD,EAAK11B,WAAW5+B,KAAKs0D,GAIjD,GAAgC,GAA5BspB,EAAoB56E,MAAa46E,EAAoBhnE,IAAI,IAC3D,MAAM,IAAemnB,GpBr1BbiJ,EAyBL+xC,EAwnBsBgF,KoB4M3B,IAA8C1uB,GAAAA,EAAAp+B,EAAbo+B,EAAK2K,EAAQ3K,sBAAAA,OAA9C,sCACE,IADF,aACwB7D,GAAAA,EAAAv6B,EAAAu6B,IAAAA,QAAtBviD,EAAA,KAAAA,EAAA,SAME,GALM2nD,EADR3nD,EAAAwgD,MAC+B0C,cAAcpnC,KAAK,4BAAC6rC,GAC/C,OAAOA,EAAaf,WACgB,MAAhCe,EAAaC,iBACbD,EAAaC,gBAAgBjyB,WAAao0B,EAAAA,EAHkB,CAAlB,MAM9C,OAAOpC,EAAaC,gBAU1B,IAAsC,KAAA5/B,EAAA,EAAC,GAAM,KAAP,QAAtC,kBACE,IADF,UACwBu6B,GAAAA,EAAAv6B,EAAAu6B,IAAAA,QAAtBviD,EAAA,KAAAA,EAAA,SACE,IAAmCkjD,IAAAA,GAAAA,EAAAl7B,EADrChoB,EAAAwgD,MACqC0C,gBAAAA,QAAnC,SAAAljD,EAAA,OACE,IADF,WACoB4mD,WAAce,EAAaC,gBAK7C,IAFA,IAAMuD,EACFwpB,EAAoBrsE,IAAIq/C,EAAaC,gBAAgBjyB,WACtCw1B,GAAAA,EAAAnjC,EAAAmjC,IAAAA,QAAnB,kBACE,KADF,EAAAE,MACah1B,kBAAoB0+C,EAC7B,OAAOptB,EAAaC,gBAM9B,OAAO,IAvDsD,CAhGzD,CAJ8C,EAI9C,KADyB,aAEzB,WAkKAotB,SAAAA,EAA6BxC,GAEjC,IAAIoC,EAWiB,IAArB50E,EAWqComD,EAAAA,EAArC,EAEU37B,EAqB4B,IAAtC,EAC0B,IAAxB,EACQA,EAGAwqD,EApD2C,OAAAn6C,GAAA,+BAIrD,GAA+B,GAA3B03C,EAAmBz4E,MAAay4E,EAAmB7kE,IAAI,IACzD,MAAM,IAAemnB,GpBh5BbiJ,EAyBL+xC,EAwnBsBgF,KoBuQ3B,IAAqB,EAAA9sD,EAAAwqD,EAAmBrqE,UAAnB,YAArB,kBACyC,IADzCnI,EAAA,SACak1E,kBAAkB19E,eACpBizB,EAAOyqD,kBAEuB,GAAnCzqD,EAAO0qD,kBAAkB39E,eACpBizB,EAAO0qD,kBAMmB/uB,EAAAp+B,EAxBgBo+B,EAwBxB2K,EAAQ3K,qBAAAA,EAAAA,EAAAA,OAxBgB,OAwBrD,wBACE,GADF,WACMosB,EAAmB7kE,IAAIgoB,GAA3B,cAIQ,OAHAlL,EAAS+nD,EAAmBlqE,IAAIqtB,GAClC,OAEE,IAAMkC,UAAUu9C,4BAA4Bz/C,EAAW,CAAClL,IAAxD,GA7B2C,OA8B/C,OAFAmqD,EACI,IACJ,EAAAl4C,OAAOk4C,GA9BwC,OA+BxChxE,EAAAA,GA/BwC,OAoCjCylE,GApCiC,EAoC5CwH,GApC4C,OAwBrD,wBAxBqD,OA+Cf,EAAA7oD,EAAA,EAAC,GAAM,IAAP,WA/Ce,OA+CrD,mCAC0B,EAAAA,EAAAwqD,EAAmB1tE,QAAnB,WAhD2B,QAgDnD,UAhDmD,CA+CrD,uBA/CqD,CAuDjD,GAPF,UACQ2lB,EAAS+nD,EAAmBlqE,IAAIqtB,GAGhCs/C,EAAmBxqD,EAAA,SAAmBi9B,MAAK,SAAC2D,GAChD,QAASA,EAAKh1B,gBAD2C,IAGvD4+C,GAAoBF,EAAyB,CAC/C,aAD+C,CAM3C,OAFF,QAEE,IAAMl9C,UAAUu9C,4BAA4Bz/C,EAAW,CAAClL,IAAxD,IA7D2C,QA8D/C,OAFAmqD,EACI,IACJ,EAAAl4C,OAAOk4C,GA9DwC,QA+DxChxE,EAAAA,GA/DwC,QAoEjCylE,GApEiC,EAoE5CwH,GApE4C,QAgDnD,yBAhDmD,QAuErD,OAAO,EAAPn0C,OAAOk4C,GAvE8C,IAlKjD,CAL8C,EAK9C,MAL8C,OAK9C,MAL8C,OAOlD,KAJMA,EAAuB,GAK3B,MAAM,IAAe9/C,GpB5uBbiJ,EAyBL+xC,EAsoBoCuF,MoB4FvC,GAVchM,GAbkC,EAa7CwH,GAED,OAEiB+D,EAAqBU,mBAMpC/yB,EAAS/qD,OAAb,CACyB,uCAyrCrB+9E,EAAoB,GAGpBC,EAAiB,GAGjBC,EAAwB,GAGxBC,EAAc,GAGdt9B,EAAY,GAGZjiB,EAAS,IAAI/K,IAGbosB,EAAgB,IAAIpsB,IAEJuqD,GAClBxqB,EAAUoqB,EAAmBC,EAAgBE,EAC7CD,EAAuBr9B,EAAWjiB,EAAQqhB,GAsB9C,IAAMo+B,EA7vC4C,EA8vCzC1F,EAAyB,qBAAuB,YAsBzD,IAnBM3oC,EAAM,CACV5R,UAAAA,EACAyhB,iBAAkBm+B,EAAkB,GACpCl/C,iBAAkBm/C,EAAe,GACjCl/C,8BAA+B60B,EAAS,GAAG70B,8BAC3CC,wBAAyB40B,EAAS,GAAG50B,wBACrCghB,YAAa4T,EAAS,GAAG5T,aAAeq+B,EACxCn/C,gBAAiB00B,EAAS,GAAG10B,iBAAmB,GAChDD,gBAAiB20B,EAAS,GAAG30B,iBAAmB,GAChDE,kBAAmBg/C,EAAY,GAC/B/+C,qBAAsB8+C,EAAsB,GAC5C1/C,SAAUqiB,EACVjiB,OAAAA,GAGuB,EAArBqhB,EAAcz9C,OAChBwtC,EAAIiQ,cAAgBA,GAGH2T,GAAAA,EAAAnjC,EAAAmjC,IAAAA,QAAnB,8BACW70B,gCACPiR,EAAIjR,8BAAgC+0B,EAAK/0B,+BAGvC+0B,EAAK90B,0BACPgR,EAAIhR,wBAA0B80B,EAAK90B,yBAIvC,EAAOgR,CAvwCL,MAKyB,mCAixCrBguC,EAAoB,GAGpBC,EAAiB,GAGjBC,EAAwB,GAGxBC,EAAc,GAGdt9B,EAAY,GAGZjiB,EAAS,IAAI/K,IAGGuqD,GAClBlrD,EAAA,SAAoB8qD,EAAmBC,EAAgBE,EACvDD,EAAuBr9B,EAAWjiB,GA6BtC,EAAO,CACLR,UAAAA,EACAyhB,iBAAkBm+B,EAAkB,GACpCl/C,iBAAkBm/C,EAAe,GACjCl/C,8BAAyD,YAL7B7L,EAAOihC,sBAMnCn1B,wBAAoD,YAA1B9L,EAAO6gC,gBACjC/T,YAAa9sB,EAAO8gC,aAAa,IAAM,YACvC90B,iBAZEhM,EAAOyqD,kBAAoBzqD,EAAOyqD,kBAAkB,GAAGtpB,WAAa,KAYlC,GACpCp1B,iBAXE/L,EAAO0qD,kBAAoB1qD,EAAO0qD,kBAAkB,GAAGvpB,WAAa,KAWlC,GACpCl1B,kBAAmBg/C,EAAY,GAC/B/+C,qBAAsB8+C,EAAsB,GAC5C1/C,SAAUqiB,EACVjiB,OAAAA,GA10CA,GAhCgD,EAwBzCwwB,EADP,GAvBgD,EAgCtCA,EAAgBtwB,iBACxB,MAAM,IAAevB,GpBrwBfiJ,EAyBL+xC,EA4sBoB+F,KoBDyB,EAqCrClvB,EAAgBhxB,WAGT,WAAMi/C,EAAqBkB,kBAA3B,GAxC8B,OA8ChD,GANMpD,EAAY,IACFrJ,GAzCgC,EAyC3CwH,GAzC2C,EA6C3CjC,EAAa8D,EACiB,IA9Ca,EA8CvC3hB,EAAQglB,kBACb,uBA/C4C,EA+CfnH,GADjC,cAGmB,OADb,OACa,IAjD6B,EAiDlBA,EAAWoH,mBAAmB,CACtDD,eAlD0C,EAkDrBhlB,EAAQglB,iBADhB,IAjD6B,QAoD5C,GAAc,UAHC,IAIb,MAAM,IAAejhD,GpBzxBnBiJ,EAyBL+xC,EA+uBuBmG,MoBsBN5M,GA1D4B,EA0DvCwH,GAVH,eAhD0C,OA4D5C,IADO3kD,EAAAA,EAAAA,EAAAA,cACqB4I,GAC1B,MAAM5I,EAER,MAAM,IAAe4I,GpBnyBjBiJ,EAyBL+xC,EAqvBwBoG,KoByBnBhqD,EAAEuI,SAnEsC,OAwEhD,OAxEgD,EAsE3Cq6C,IAAe,EAEpB,aAnYEqH,GAWF,IAAM1S,EAQE4B,EAnBiB,OAAAvqC,GAAA,+BAI3B,IAJ2B,EAIjB8zC,IAJiB,EAIGjoB,EAC5B,SAAAjqB,SAGF,IAR2B,EAQlBiqB,EAAgBhwB,sBARE,EASjBgwB,EAAgBjwB,mBATC,EAUlBiwB,EAAgBjwB,kBAAkBl/B,OAF3C,cAWqB,OARbisE,EAAqCmF,GACvC,CAZqB,EAYfjiB,EAAgBhwB,sBAZD,EAahBo6B,EAAQsS,iBAEb,OAIe,IAnBM,EAgBAqL,EAAiB0H,GAAU3S,Qe8QlC4S,Ef5QZ5S,EAAS,CAAC6S,UAlBS,EAkBOlF,MACG9V,QAAhB,GAnBM,OAmBjB+J,EAAW,IAnBM,EAqBlB1e,EAAgBjwB,kBACIhH,GAAQ21C,EAASvpE,MAPxC,aAfqB,OA4BvB,MAAM,IAAeg5B,GpBrcfiJ,EAyBL+xC,EA0uB8ByG,KoBnUxB3yE,EAAAA,IAvBgB,OAmCzB,GAnCyB,EAmChBitE,EgB1jBChP,EhB2jBR,SAAAnlC,SApCuB,OAwC3B,OAxC2B,EAwCjBiqB,EAAgBjwB,mBAxCC,EAyCjBiwB,EAAgBjwB,kBAAkBl/B,UAIxC,KACgB,IA9CO,EA8CIo3E,EAAWuH,qBA9Cf,EA+ChBxvB,EAAgBjwB,mBADP,IAJlB,EAAAgG,SA1CyB,OA6CvB,aA7CuB,OAuDzB,MAAM,IAAe5H,GpBhebiJ,EAyBL+xC,EA4pBuB0G,KoBtNnB7Y,EAAAA,GAKOlpC,SA3DW,IAmYd0hD,CAxEqCA,GAwEhD,IAxEgD,QAyEhC9M,GAzEgC,EAyE3CwH,KA1DH,WAf8C,OA+EhD,GALOlT,EAAAA,EAAAA,GACS0L,GA3EgC,EA2E3CwH,EAA8BlT,GA3Ea,EA8E3ChX,EAAkB,KACnBgX,aAAgC7oC,GAClC,MAAM6oC,EAIR,MAAM,IAAe7oC,GpBxzBbiJ,EAyBL+xC,EA6oBiB2G,KoBsJhB9Y,EAAUlpC,SAxFkC,IAuQpDiiD,SAAA,GAAAA,GACWzD,GAALA,IACF,EAAK/D,EAAmBz6B,SAFL,CAavBkiC,SAAA,GAAAA,EAA4BroE,GAMpB2rB,IALuBH,IAAM,WACjCxrB,EAASslE,QAAS,EACb8C,GAH6BA,EACK,IAKnCz8C,EACmC28C,GAPL,CAgBhC/D,SAAA,GAAAA,EAAoBtP,EAAWsT,GACnC,IAAItG,EAQI3sE,EAeF0K,EAWEwoE,EAOEziD,EAgBDzwB,EAKDywB,EA/D4C,OAAAyG,GAAA,+BAKpD,IAEEy1C,EAPkD,EAOnC3B,EAAWyE,cAJR97B,qBAEhB,CAGF,MAAOomB,GAOP,OANM/5D,EAAQ,IAAekxB,GpBjhCrBiJ,EAyBL+xC,EAkqBqBwD,KoB0VpB3V,EAAUlpC,SAboC,EAc7C06C,EAASvrE,GACd,EAAA84B,OAAO4hB,QAAQgL,OAAO1lD,GAPJ,CA2BF,OAnCkC,EAkB/CitD,EAAc9jC,EAAOwjD,EAAS,WAE7B,SAACnjD,GApB6CmmD,EA4L1C5E,GA5L0C4E,EAiMvCxiB,EAAQyiB,gCAjM+BD,EAkMvC5E,EAAO8E,SAlMgCF,EAkMhBnD,EAlMgBmD,EAiL7CpD,EAAuBp5E,KA7JUq2B,GA+JjCsmD,GAnL6CH,EAoBZnmD,EAAvB,IApBmC,EAqB/CyjC,EAAc9jC,EAAOwjD,EAAS,qBAC/B,SAACnjD,GAAU,OAAKumD,GAtBgCA,EAsBXvmD,EAA1B,IAET9e,EAAW,CACfynB,SAAU8gD,EAAgB9gD,SAC1BsiB,aAAcw+B,EAAgBx+B,aAC9Bu7B,QAAQ,EACRnD,GAAevgD,IACf2jD,GAAe,KACfv+E,KA3BkBiiD,sBAHgC,EAgC/Cy3B,EAAgBxxE,IAAI+yE,EAASjiE,GAE9B,OACc,IAAMiiE,EAAQwG,KAAKxT,GAAnB,GAnCkC,OAyDlD,OAtBMuT,EAAU,IACAzN,GApCkC,EAoC7CwH,GAGAiG,IAvC6C,EAwC3C9H,EAAgBrZ,OAAO4a,GAEtBl8C,EA1C0C,EA0C1B08B,EAAQimB,gCpBzjCrBrR,EAOH5nC,EoBwgC0C,EA8C3CoxC,EAAS,IAAer6C,GACzBT,EpB9hCHy7C,EAktBoBmH,OoBgVrB3oE,EAASslE,QAAS,GAGf+C,GAtD6CA,EAsDjBroE,GAC5BooE,GAvD6CA,GAyDlD,EAAAh6C,OAAO6zC,GAzD2C,OA0D3C3sE,EAAAA,EAAAA,GACSylE,GA3DkC,EA2D7CwH,EAA8BjtE,GA3De,EA6D7CorE,EAAgBrZ,OAAO4a,GAEtBl8C,EA/D4C,EA+D5B08B,EAAQimB,gCpB9kCnBrR,EAOH5nC,EoBwgC0C,EAmE7CoxC,EAAS,IAAer6C,GACzBT,EpBnjCDy7C,EAkqBqBwD,KoBoZpB1vE,EAAM6wB,UAEVnmB,EAASslE,QAAS,EAEb8C,GA3E6CA,GAAA,OA8EpD,OAAO,EAAPh6C,OAAO4hB,QAAQ7J,WA9EqC,IA0MhDi/B,SAAA,GAAAA,EAAoBtmD,GAExB,IAAMmjD,EASAjiE,EAEFmC,EACEymE,EASAzT,EAcO0T,EAWPC,EAEF/R,EAKKzhE,EAODyzE,EAqCCzzE,EAEDyzE,EAeFC,EApHyBx8C,GAAA,+BAkC/B,GAhCMy1C,EAAUnjD,EAAMxoB,OAFS,EAMtBmsD,EAAQijB,oBACwBn8B,GAASzqB,EAAMqH,SAIlDnmB,EAXyB,EAWT0gE,EAAgB1mE,IAAIioE,GAEtC9/D,EAb2B,EAahBk2C,EAAgBtwB,iBACzB6gD,EAdyB,EAetBnmB,EAAQE,SAfc,EAeAtK,EAAgBhxB,WAEtB,6BAArBvI,EAAMmqD,aAA8CL,GACpDA,EAAeM,0BACjB/mE,EAAMymE,EAAeM,0BAIjB/T,EAAqCmF,GACvC,CAACn4D,GAxB0B,EAwBfsgD,EAAQsS,kBAChBxlD,KAAOuP,EAAMqH,QACrBgvC,EAAQ/2D,OAAS,OACjB+2D,EAAQH,mBAAqBl2C,EAAMmqD,YACnC9T,EAAQF,UAAYgN,EAAQhN,UAC5BE,EAAQnsB,QA7BuB,EA6BRqP,EACnBr4C,IACFm1D,EAAQ1tC,SAAWznB,EAASynB,SAC5B0tC,EAAQprB,aAAe/pC,EAAS+pC,cAE9B6+B,GAAkBA,EAAet5D,QAGnC,IAAWu5D,KAAUD,EAAet5D,QAClC6lD,EAAQ7lD,QAAQu5D,GAAUD,EAAet5D,QAAQu5D,GAKrD,GAAwBM,GA3CO,EA4CtB9wB,EAAgBhxB,WADzB,CAmHA,IAAM+hD,EAA6Bn5C,GAjHJklC,EAkHnB5lD,MAA0B,GAAqB,GAC3D,GAAK65D,EAAIv1E,SAAS,uBAAlB,CAeA,IADA,IAAMyb,EAAesnB,GAJfyyC,EAAWj2C,GAAeg2C,EAAK,uBAIU,cAC1B95D,GAAAA,EAAAoK,EAAApK,IAAAA,QAArB,kBAA8B,CAA9B,cACQ9jB,EAAYorC,GAAqBiyC,EAAQ,QAAQ,GACjD16E,EAAayoC,GAAqBiyC,EAAQ,SAAS,GApI5B1T,EAsIrB7lD,QACkCqnB,GAAgBnrC,IAClBmrC,GAAgBxoC,EAN5B,CAUxBm7E,EAAiB1yC,GAAqByyC,EAAK,aAAa,GA5I/BlU,EAiJvB5lD,KAAkCo8B,GACDhV,GAAgB2yC,GA/BzD,MAnH+BnU,EAyHrB7lD,QAAQ,gBAAkB,yBA3HpC,CAWa,OANPw5D,EAAmB9wC,KAAK6rB,MAG1B,OAGS,IAtDkB,EAoDZuc,EAAiB0H,GAAU3S,QelkBrCoU,EfmkBUpU,EAAS,CAAC6S,UArDE,EAqDclF,MACtB9V,QAAV,GAtDkB,OAsD7B+J,EAAW,IAHT,aAnD2B,OAwD7B,OADOzhE,EAAAA,EAAAA,GAvDsB,EAwDpBitE,EgBx3CChP,MhB83CO,IAAe/sC,GpBhxCxBiJ,EAyBL+xC,EAmrBmBgI,KoBwkBlBl0E,GAC6B,GAnEJ,EAmEpBorE,EAAgBj1E,MAnEI,EAoEtBo1E,EAASkI,GACV/oE,GAAYA,EAASulE,IACvBvlE,EAASulE,GAAcvqB,OAAO+tB,KAG5B/oE,GAAYA,EAASulE,IACvBvlE,EAASulE,GAAcvqB,OAAO+tB,GA1EL,EA4EtBrI,EAAgBrZ,OAAO4a,GACnB0C,GA7EkBA,KAAA,EA8EpB/D,EAAmBz6B,UA9EC,EA+EpB+6B,EAAgBv1C,EAAyB,OAtBhD,EAAAyC,SAzD2B,OAoF/B,OApF+B,EAoFtBm0C,EgBp5CGhP,EhBq5CV,EAAAnlC,UArF6B,EAwF1BqyC,IAAwBzoC,KAAK6rB,MAAQilB,GAAoB,IAxF/B,EA0FtBrmB,EAAQijB,oBACwBn8B,GAASwtB,EAASvpE,MAKvD,OAEF,IAAMy0E,EAAQ3zD,OAAOyoD,EAASvpE,MAA9B,IAlG6B,OAgG3B,aAhG2B,OA8G7B,OAXO8H,EAAAA,EAAAA,GAEDyzE,EAAW,IAAeviD,GpBvzCxBiJ,EAyBL+xC,EA2rBsBiI,KoBumBrBn0E,EAAM6wB,SAzGmB,EA0GxB06C,EAASkI,GACV/oE,GAAYA,EAASulE,IACvBvlE,EAASulE,GAAcvqB,OAAO+tB,GAEhC,EAAA36C,SA9G6B,OAgH/B,GAhH+B,EAgHtBm0C,EgBh7CGhP,EhBi7CV,SAAAnlC,SAGI46C,EAAc,IAAeva,GAAU,oBApHd,EAqH1B2R,EAAiBsJ,QAAQV,GAE1BhpE,IACEA,EAASulE,IACXvlE,EAASulE,GAAcp/B,UAGpBkiC,GA5HwBA,EA4HIroE,IA5HJ,SAuMjCqlE,SAAA,GAAAA,EAAqBvmD,GACbmjD,EAA0CnjD,EAAMxoB,OAGtD,IAAM0Y,EAAQ,EAAK0xD,EAAgB1mE,IAAIioE,GAEnC0H,GAAiB,EADA1H,EAAQ2H,YAGhBrnE,SAAQ,SAAC++D,EAAQ35C,GAK5B,GAAoB,iBAATA,EAAmB,CAC5B,IAAMkiD,EAAMliD,EACZA,EAAoC25C,EACpCA,EAA+BuI,CAHH,CAgB9B,GAAwBV,GA7BA,EA8Bf9wB,EAAgBhxB,YACD,IAApBM,EAAMr/B,aACewhF,MAAgC3/C,MAAU,CAGjE,IAAM4/C,GADAhiF,EAAkCm7B,GAAWyE,IAC5Bt6B,UAAU,GAAa,GACxC28E,EAAQjiF,EAASqF,UAAU,GAAa,GACxC68E,EAAQliF,EAASqF,UAAU,GAAa,GAE9CrF,EAASyG,UAAU,EAAGu7E,GAAiB,GACvChiF,EAAS4G,UAAU,EAAGq7E,GAAiB,GACvCjiF,EAAS4G,UAAU,EAAGs7E,GAAiB,EAT0B,CAYrD,kBAAV3I,IACFtyD,EAAMs2D,QAAS,GAWH,WAAVhE,IACFqI,GAAiB,GAGbO,EAAsCx+B,GAAM/jB,GAAOjyB,MAAM,EAAG,IA5D1C,EA8DnBsrE,EAAkB9xE,IAAIg7E,EAAU5I,EAtDC,IA4DxC,IAAM6I,EAAoBlI,EAAQI,WAAarqC,KAAK6rB,OAC5B,EAApBsmB,GAA0BR,GAAsC,IAApBQ,IAG1Cn7D,IAAUA,EAAMu2D,KAElB,EAAK7E,EAAgBrZ,OAAO4a,GAC5BA,EAAQx9D,QAAQy2C,OAAM,WAAO,KAIvBypB,GAALA,KAML,EAAK/D,EAAmBz6B,UAOxB,EAAK+6B,EAAgBv1C,EACoBy+C,IA7Ff,CA2YtB3H,SAAA,GAAAA,GAEJ,IAAM4H,EAFmB,OAAA79C,GAAA,YAMzB,OAJM69C,EAAep7E,MAAM24B,KAFF,EAEY84C,EAAgB9mE,WAF5B,EAGpB8mE,EAAgB39C,QAGrB,IAAMitB,QAAQE,IAAIm6B,EAAa5hC,KAAI,SAAO,OAACw5B,GAAD,EAAAvoD,EAAA,iBAAU1Z,EAAV,eAAwB,OAAAwsB,GAAA,2BAC5D,OAPmB,EAcX+zC,IAdW,EAeXI,EAA0BthE,IAAI4iE,EAAQhN,YAC1B,uBAAlBj1D,EAAShZ,MAhBQ,EAiBXy7D,EAAQimB,gCAOhB,IA3CF4B,SAAcrI,GAGlB,IAAMhJ,EAHqB,OAAAzsC,GAAA,2BAGrBysC,EAAU,IAAIjpB,SAAQ,SAAC7J,EAAS6U,GAE9BrvB,IADuBH,GAAMwvB,GAC7BrvB,EAAoB4+C,GAFqB,IAK7C,OACF,IAAMv6B,QAAQw6B,KAAK,CACjBx6B,QAAQE,IAAI,CAAC+xB,EAAQx9D,QAASw9D,EAAQwI,SACtCxR,IAFF,IATyB,OAQvB,QAKKr7C,EAAAA,QAbkB,SA2CV0sD,CAAcrI,GAAzB,GAJA,IAAMA,EAAQ5jD,SAAd,IAd4D,OAC5D,QAmBK/oB,EAAAA,QApBuD,aAAlE,EANyB,IAyC3BwuE,SAAA,GAAoB5xB,GAGlB,OAFsBA,EAAQE,MAAQF,EAAQE,MAAMyK,SAAW,IAE1Cx5C,OADC6uC,EAAQC,MAAQD,EAAQC,MAAM0K,SAAW,GAFpC,CA+B7B8nB,SAAA,GAAAA,GAEE,OiBp+DFjuC,SAAaukC,EAAUr5D,GACrB,IAAgBq5D,IAAAA,GAAAA,EAAAvhD,EAAAuhD,IAAAA,QAAhB,kBACE,IAAKr5D,EADP,EAAAg1C,OAEI,OAAO,EAGX,OAAO,CANoB,CjBo+DC8zB,CADtB7F,EAAY,EAAKnE,EAAgB7mE,UACM,SAACrM,GAAc83E,OAAL93E,EAAK83E,MAAAA,GAFtC,CAoPxBqF,SAAO,GACH9tB,EAAUoqB,EAAmBC,EAAgBE,EAC7CD,EAAuBr9B,EAAWjiB,EAAQqhB,GAgB5C,IAFA,IAAM0hC,EAAyB,GAET/tB,GAAAA,EAAAnjC,EAAAmjC,IAAAA,OAAtB,sCAAgC,CAgC9B,GAhCF,aAEOoqB,EAAkBpzE,SAASm1C,EAAAA,GAAQF,mBACtCm+B,EAAkBx+E,KAAKugD,EAAAA,GAAQF,kBAIR,mBAArBE,EAAAA,GAAQ3hB,WACR2hB,EAAAA,GAAQjhB,iBAAiBgN,WAXL81C,iCAYjBD,EAAuB/2E,SAASm1C,EAAAA,GAAQjhB,mBAC3C6iD,EAAuBniF,KAAKugD,EAAAA,GAAQjhB,kBAE5Bm/C,EAAerzE,SAASm1C,EAAAA,GAAQjhB,mBAC1Cm/C,EAAez+E,KAAKugD,EAAAA,GAAQjhB,kBAIzBo/C,EAAsBtzE,SAASm1C,EAAAA,GAAQ3gB,uBAC1C8+C,EAAsB1+E,KAAKugD,EAAAA,GAAQ3gB,sBAIjC2gB,EAAAA,GAAQ5gB,oBACIg/C,EAAYhuB,KACtB,4BAAC0xB,GAAS,OAAuBznD,GAC7BynD,EAAM9hC,EAAAA,GAAQ5gB,kBADR,CAAV,OAGFg/C,EAAY3+E,KAAKugD,EAAAA,GAAQ5gB,oBAKzB4gB,EAAAA,GAAQvhB,SACV,IAAuCA,IAAAA,GAAAA,EAAA/N,EAARsvB,EAAAA,GAAQvhB,WAAAA,OAAvC,mDACgBqiB,EAAUsP,KACpB,4BAAC3xB,GACiCi9C,IAAAA,EAAAA,EAAAA,GAAhC,SAAsBj9C,EAhD1BE,OAgD0BF,EAhDfE,OAASrkB,EAAEqkB,QAgDIF,EA3CvBsiB,cAAgBzmC,EAAEymC,cACD1mB,GA0CMoE,EA1CEA,SAAUnkB,EAAEmkB,SA0CpC,CADF,OAGFqiB,EAAUrhD,KAAKi8E,EAAAA,IAKrB,GAAI17B,EAAAA,GAAQnhB,OACV,IAA4BA,GAAAA,EAAAnO,EAARsvB,EAAAA,GAAQnhB,SAAAA,QAA5B,kBACEA,EAAOrM,IADT,EAAAmM,OAKF,GAAIqhB,EAAAA,GAAQE,eAAiBA,EAC3B,IAAmCA,GAAAA,EAAAxvB,EAARsvB,EAAAA,GAAQE,gBAAAA,QAAnC,kBACEA,EAAc1tB,IADhB,EAAAutB,MAlD4B,CAwDhC,GAAqC,GAAjC6hC,EAAuB1hF,OACzBg+E,EAAez+E,KAAKmiF,EAAuB,SACtC,GAAoC,EAAhCA,EAAuB1hF,OAAY,CAE5C,IADMsN,EAAO,GACuBo0E,GAAAA,EAAAlxD,EAAAkxD,IAAAA,QAApC,kBACQjhC,EAAU9qC,EAAOgpC,KADzB,EAAAkjC,MAE4BluE,MAjEJguE,iCAiE6Bz6D,OAC7Cw5B,EAAuCnjB,KAAK1/B,MAAM4iD,GACxDnzC,EAAK/N,KAAL,MAAA+N,EAAAmlB,EAAaiuB,EAAOpzC,OAGhBw0E,EAAavkD,KAAKC,UADNukD,CAACz0E,KAAMA,IAEzB0wE,EAAez+E,KAvESoiF,gCAuEgBhsE,EAAO0oC,KAAKyjC,GAVR,CA1Ea,CAsG7DE,SAAO,GAAuBliC,EAASs6B,EAAS6H,EAC5CnH,GACF,IAAMoH,EAAoBpiC,EAAQ3hB,WAE7B+jD,GAqBoB,mBAArBA,GAA0CpiC,EAAQjhB,mBAI3Cu7C,EAAQ73E,OAGX4/E,EAAS/H,EAAQtpE,IAAIoxE,IAAsB,GAEjDpiC,EAAQjhB,iBAAmBsjD,GAMxBriC,EAAQnhB,SACXmhB,EAAQnhB,OAAS,IAAI/K,MAGjB8rD,EAAiBuC,EAAgBnxE,IAAIoxE,MAGpCpiC,EAAQhhB,gCACXghB,EAAQhhB,8BACJ4gD,EAAe5gD,+BAGhBghB,EAAQ/gB,0BACX+gB,EAAQ/gB,wBACJ2gD,EAAe3gD,yBAGhB+gB,EAAQ9gB,kBACX8gB,EAAQ9gB,gBAAkB0gD,EAAe1gD,iBAGtC8gB,EAAQ7gB,kBACX6gB,EAAQ7gB,gBAAkBygD,EAAezgD,iBAGtC6gB,EAAQ5gB,oBACX4gB,EAAQ5gB,kBAAoBwgD,EAAexgD,mBAGzCwgD,EAAe3/B,cACjBD,EAAQC,YAAc2/B,EAAe3/B,aAGlCD,EAAQ3gB,uBACX2gB,EAAQ3gB,qBAAuBugD,EAAevgD,uBAI9C27C,EAAkBoH,KACpBpiC,EAAQ3hB,UAAY28C,EAAkBoH,IAUpCvsE,EAAO4tB,MAAQ5tB,EAAO4tB,KAAKC,cACJ,2BAArB0+C,IACFpiC,EAAQ3hB,UAAY,4BA1FH,EAjtEvBmb,EAAAA,GAAAA,WAAAA,QAAAA,WACE,OAAOl4C,KAAKi4E,EAAW//B,SADf,EAuEV8oC,EAAApvD,UAAAA,SAAUC,EAAQ6rD,GAChB19E,KAAKm4D,EAAUtmC,EACX6rD,IACF19E,KAAKw4E,EAAakF,GAEhB19E,KAAKy3E,GACPz3E,KAAKy3E,EAAiBhzC,GACHzkC,KAAKm4D,EAAQ8oB,qBAPP,EAsRvBD,EAAAE,GAAAA,SAAOp5B,GAAQ,IAAD,cAAA5lB,GAAA,sBAClB,OAAK,EAAK8zC,GAmBV,EAAKD,EAASjuB,EAEd,EAAKmQ,EAAc3jC,GAAW,EAAKyhD,EAAQ,QAAQ,WAq5CnD,IAAyBwB,IAAAA,EAAAnoD,EAr5CgC+xD,EAq5ChC5J,GAAAA,EAAAA,EAAAA,QAAzB,kBACOuD,GAt5CkDqG,EAq5CzD,EAAA3sD,OAr5CyD2sD,EAy5CpD3J,GAAuB,EAz5C6B2J,EA05CpD5J,EAAyB,EA15C2B,IACrD,EAAKxB,EAAOqL,QACd,EAAKnpB,EAAc9jC,EAAO,EAAK4hD,EAAOqL,OAAQ,WAC1C,WAAM,OAAKjJ,GAALA,EAAA,IACV,EAAKlgB,EAAc9jC,EAAO,EAAK4hD,EAAOqL,OAAQ,cAC1C,WAAM,OAAKjJ,GAALA,EAAA,IACV,EAAKlgB,EAAc9jC,EAAO,EAAK4hD,EAAOqL,OAAQ,cAC1C,WAAM,OAAKjJ,GAALA,EAAA,KACD,0CAA2C,EAAKpC,GACzD,EAAK9d,EAAc9jC,EAAO,EAAK4hD,EAC3B,gDACA,WAAM,OAAKoC,GAALA,EAAA,IAGZ,EAAKI,EAAoB,EAAKxqB,GAC3B,EAAKA,EAAgB5wB,SAASja,MAC3B,SAACk3D,GAAqB,OAAmC,EAAnCA,EAAiBj9C,SAASv+B,MAA1B,KACb,KAQX,EAAK25E,GAC8B,kBAAnC,EAAKxqB,EAAgBhxB,WACrB,EAAKs5C,EAA0Bl1E,KACjC,IAAW04E,GAALA,GAAN,GAHF,SApCE,EAAK5hB,EAAc3jC,GAAWwzB,EAAO,aAAa,WAChD,EAAKyuB,EAAS,IAAer6C,GpBjWvBiJ,EAyBL+xC,EAmsB+BmK,MoB5X2B,IAM7D,EAAAv9C,UAoCGk2C,GAALA,GAAoBppB,OAAM,WAAO,IAU5B,EAAK2nB,GAAsB,EAAKlC,EAA0Bl1E,MAC1D,EAAKg3D,EAAQmpB,wBAChB,EAAKrpB,EAAc9jC,EACf,EAAK4hD,EAAQ,aAAa,SAACziD,GAAM,OApFnCiuD,SAAAA,EAAkB/sD,GAAQ,OAAD0N,GAAA,sBAM7B,WAAW23C,GANkBA,GAM7B,GAEKM,GARwBA,EASzB3lD,EAAMirB,aACiB3oB,GAAQtC,EAAM2I,WAVZ,QAoFeokD,CAALA,EAAuBjuD,EAAvB,IAlErB,SAqTpB0tD,EAAAQ,GAAAA,WAA6B,IAAD,OACpB3F,EAAW77E,KAAKo2E,EAAgBlqE,OAatC,OAXMwJ,EAAgCkmE,GAAIC,GAAU,SAAClE,GACnD,IAAMjiE,EAAW,EAAK0gE,EAAgB1mE,IAAIioE,GAE1C,MAAO,CACLhN,UAAWgN,EAAQhN,UACnBhsB,YAAajpC,EAAShZ,KACtBygC,SAAUznB,EAASynB,SACnBsiB,aAAc/pC,EAAS+pC,aAPsC,IAW1D96C,MAAM24B,KAAK5nB,EAdQ,EAqB5BsrE,EAAAS,GAAAA,WAKE,IAHA,IAAIr+E,EAAMk0B,IAEJukD,EAAW77E,KAAKo2E,EAAgBlqE,OAChB2vE,GAAAA,EAAAzsD,EAAAysD,IAAAA,QAAtB,4BACOnqD,MAAMimD,EAAQI,cACjB30E,EAAMR,KAAKQ,IAAIA,EAAKu0E,EAAQI,aAIhC,OAAO30E,CAXO,EAgDhB49E,EAAAU,GAAAA,WACE,OAA2BrK,GAASr3E,KAAK22E,GAD1B,EA+rDnB,IAAAsJ,GAAuC,EASvCjC,GAA8C,EAQ9C8B,GAA8C,GsBhiF5CvzE,SAAA,GAAYslB,EAAQu6B,EAAUkB,GAI5BttD,KAAKm4D,EAAUtmC,EAGf7xB,KAAK2hF,EAAYv1B,EAGjBpsD,KAAK4hF,EAAat0B,CAVqB,CAyBnCu0B,SAAA,GAAAA,EAAe54B,GAAW,OAAD/mB,GAAA,sBAE7B,WvByVW2/C,SAAev0B,EAAWrE,EAAUuE,GAA0B,OAA1BA,OAAA,IAAAA,EAAsB,GAAtBA,EAA0BtrB,GAAA,0BACzE,IAA6B4/C,GACzBx0B,EAAWrE,EAA8C,EAApCA,EAAS0vB,kBAAkB/5E,OAChD4uD,GAFJ,IA8yBFu0B,SAA0B94B,GAExBA,EAASM,YAAcN,EAASM,YAAYx2B,QAAO,SAAC4vB,GAUlD,OAPmCq/B,GAF7B//B,EAAoCI,GACtCM,EAAO5qB,SAAU4qB,EAAOhD,QAFiC,GAF7B,CA3yBXsiC,CAAmBh5B,GAC1C,IAi0BWi5B,SAAoBj5B,GAC/B,IAAMk5B,EACwBA,EAAAA,EAA9B,EACMpqD,EAKIqqD,EAGEzzC,EAX6B,OAAAzM,GAAA,+BACnCigD,EAAe,GACSA,EAAA/yD,EAAT65B,EAASk5B,cAAAA,EAAAA,EAAAA,OAFW,OAEzC,wBAKE,GALF,UAEkB,oBADZpqD,EAAW4qB,EAAO5qB,WACgC,QAAjB4qB,EAAOhD,SAC1C5nB,EAAW,aAEesqD,GAAyBttE,IAAIgjB,GAAzD,cAEE,KADMqqD,EAAkCE,GAAU5yE,IAAIqoB,IAK/C,CACkBwqD,GAAyB39E,IAAImzB,GAAU,GADzD,aAFO,WAyBpByqD,SAAyBJ,GACvB,OAAO,IAAI18B,SAAQ,SAAC7J,GAClB,IAAM4mC,EAA+C,IAAIC,MACzDD,EAAa1nE,IAAMqnE,EACf,WAAYK,EACdA,EAAa5kF,SAASwyD,MAAK,WACzBxU,GAAQ,EADuB,IAE9B+U,OAAM,WACP/U,GAAQ,EADK,IAIf4mC,EAAaE,OAASF,EAAaG,QAAUC,WAC3ChnC,EAAgC,IAAxB4mC,EAAaloD,OAD4B,CAVvB,GADC,CAzBcuoD,CAAkBV,GAA/C,GAXuB,OAW7BzzC,EAAM,IACW4zC,GAAyB39E,IAAImzB,EAAU4W,GAZ3B,OAmBZo0C,GAAyBrzE,IAAIqoB,IAMtDoqD,EAAahkF,KAAKwkD,GAvBtB,wBAFyC,OA4BzCsG,EAASk5B,aAAeA,EA5BiB,SAj0BZa,CAAoB/5B,GAAjD,GALyE,IuBzV5Cg6B,CAFA,EAEoBrB,EAAY34B,EAFhC,EAGpBkP,EAAQ+qB,IAAI11B,qBADrB,GA8DA,GAhE6B,EAInB2K,EAAQgrB,UAAUC,kBACHC,GACnBp6B,EANuB,EAOlBkP,EAAQjP,qBAPU,EAQlBiP,EAAQhP,qBARU,EASlBgP,EAAQ/O,4BATU,EAUlB+O,EAAQ9O,uBAESJ,EAgDLU,SAASmF,KAA4BqH,IAK1D,MAAM,IAAej6B,G1CuCbiJ,EAmBA0a,EAqgBsByjC,M0CnnBhC,OAAO,EAAPx/C,OAAYy/C,GAbiBA,EAact6B,GAbd,IAqB/Bu6B,SAAA,GAAAA,EAAkBv6B,GAEoBkD,IAAAA,EAAbA,EAAKgM,EAAQhM,aAAmBw1B,EAALA,EAAKA,EvB+SvD,IAFA,IAAI8B,GAAgB,EAEE95B,GAAAA,EAAAv6B,EuB/SlB65B,EAASU,WvB+SSA,QAAtB,kBAAgC,CAC9B,IAAM+5B,GADR,WACkC3tB,qBAChCnO,EAAQmO,qBAA8C0B,GAClD7P,EAASuE,EAAcC,GAEvBs3B,GAAmB97B,EAAQmO,uBAC7B0tB,GAAgB,EANY,CuBhThC,OvB0TOA,CuB3TmB,CAa5BF,SAAA,GAAAA,EAA+Bt6B,GAC7B,IAAMw6B,EAAqBD,GAALA,EAAuBv6B,GAE7C,GAAIA,EAAU,CAEZ,IAAM06B,EACF,EAAK/B,EAAa,EAAKA,EtB+vBjB7zB,EsB/vB2C,KAErD,GAAI41B,GAAkB,EAAK/B,EtBqwBjB5L,EsBpwBR,IAA+BrsB,IAAAA,EAAAv6B,EAAT65B,EAASU,UAAAA,EAAAA,EAAAA,QAA/BviD,EAAA,KAAAA,EAAA,SAAAA,EAAAA,EAAA,MACOw8E,GAALA,EAAqBD,EAAe5mD,UAAW6qB,EAAQE,OAClD87B,GAALA,EAAqBD,EAAe5mD,UAAW6qB,EAAQC,OAGtDg8B,GAALA,EAA6B56B,EAXjB,CAcd,OAAOw6B,CAjBgC,CA0CzCG,SAAA,GAAAA,EAAgB7mD,EAAW4lB,GACzB,GAAKA,EAIL,IAA6B4P,IAAAA,GAAAA,EAAAnjC,EAAPuzB,EAAO4P,WAAAA,QAA7B,kBAEE,IAFF,WAEcx1B,WAAaA,EACvB,IAAwB,OAAAK,EAAAhO,EAAAsvB,EAAQvhB,UAAY,KAApB,QAAxB,4BACkBg9C,GAAhB,EAAKyH,EACDzkD,EAASsiB,aAActiB,EAASA,SAVT,CAsBnC0mD,SAAA,GAAAA,EAAwB56B,GAEhB66B,EACF,EAAKlC,EAAa,EAAKA,EAAWF,KAAmB,CAAC,EAC1D,IAAMnkD,EAAS/xB,OAAOU,KAAK43E,GACrBC,EAAiBxmD,EAAO3+B,QAAuB,MAAb2+B,EAAO,GAW/C,IATA,IAAIymD,GAAc,EACdC,GAAqB,EAGnBC,EAAc,IAAI1xD,IAGlB2xD,EAAiB,IAAI3xD,IAEIm3B,GAAAA,EAAAv6B,EAAT65B,EAASU,WAAAA,QAA/B,kBAAyC,CAEvC,IAAMgE,EAAU,IAFlB,WAGc9F,OACV8F,EAAQxvD,KAAKypD,EAAQC,OAEnBD,EAAQE,OACV6F,EAAQxvD,KAAKypD,EAAQE,OAGvB,IAAqB6F,IAAAA,GAAAA,EAAAv+B,EAAAu+B,IAAAA,QAArB,kBACE,IADF,WACapwB,OAAOp8B,KAChB,IAA2Bo8B,IAAAA,GAAAA,EAAAnO,EAAPuzB,EAAOplB,SAAAA,QAA3B,kBAAmC,CAAnC,UACE,IAAM6mD,EAAYN,EAAaC,EAAiB,KAAO1mD,GAClD+mD,EAEMC,GAAmB96E,SAAS66E,IACrCD,EAAejzD,IAAIkzD,GAFnBF,EAAYhzD,IAAImM,EAHe,CAWlCuqB,EAAQmO,qBAEFnO,EAAQoO,qBACjBguB,GAAc,GAFdC,GAAqB,CAxBgB,CA8BzC,IAAKD,EAOH,MAAM,IAAe9nD,G1C/CbiJ,EAmBA0a,EAuakBykC,K0ChZpBphF,EAAO,CACX+gF,mBAAAA,EACAC,YAAav/E,MAAM24B,KAAK4mD,GACxBK,sBAAuB5/E,MAAM24B,KAAK6mD,IAnDN,CAsEpC,IAAAK,GACI,CAAC,oBAAqB,kBCvMG,eA0F3BC,SAAO,GAAW/rC,EAAK3gB,GAIrB,GAAIA,EAAU,CACZ,IAAM2sD,EAAyBC,GAAc5sD,EAASjhB,eACtD,GAAI4tE,EACF,OAAOA,CAHG,CAUd,MAAM,IAAexoD,G3C8BXiJ,EAmBA0a,EA2WqB+kC,I2CxZ3BlsC,EACA3gB,EAnB2B,CA1FnCrD,EAAA,6BAAAmwD,IAkCSA,G3GquDP,uB2GruDAC,SAA8B/sD,UACM4sD,GAAc5sD,EADV+sD,EAVjCD,G3G+uDP,qB2G/uDAE,SAA4BhtD,EAAUG,GACTysD,GAAc5sD,GAAYG,CADF,EAf9C2sD,G3G8vDP,0B2G9vDAG,WACkBC,GACZD,2CACAA,mEAHqDA,EA4J7DH,G3GkmDE,qB2GlmDgDK,CAChDC,GAAmBA,oBACnBC,GAAiBA,mBASnB,IAAAT,GAA2C,CAAC,ECoB1CU,SAAO,GACHjsD,EAAaksD,EAASC,EAAWC,EAAeC,GAgElD,IAAMC,EAAkCC,GAAiB9hF,QAGnD+hF,EAhEFxsD,EAgE+BwL,SAhElB2gD,EAiEU97E,MAjEV87E,EAkEQ97E,MAlER87E,EAkE0BpkF,MAGrC0kF,EAAuCjtD,GAAWgtD,GAIlDE,EAAmB,IAAInlF,WAzEZ4kF,EA0EHpkF,KAAOukF,EAAa1nF,YA7ClC,IAgDA8nF,EAAiBlhF,IAAIghF,EAAoC,IAGnDG,EAAyCntD,GAAWktD,IAC1C5hF,UA+J8B8hF,EAhPlBP,GAqF5BK,EAAiBlhF,IAAI8gF,EArFJH,EAqFgDpkF,MAI3D8kF,EAAgBJ,EAAc9iF,UAuJUijF,GArJ9CD,EAAgB7hF,UA3FCqhF,EA4FHpkF,KAoI8C+kF,GAnIxDD,GAGeE,GACfL,EAAkC,EAAGA,EAAiB9nF,YA7FpDooF,EACF,IAAIzlF,WAAWy4B,EAAYp7B,WA8FxB8nF,EA9FsD9nF,YAMvDqoF,EACiB3lD,MAAmC8+C,KACtD+F,EAAU97E,MACV87E,EAAU97E,MAAQ87E,EAAUpkF,KAM1BmlF,EAAYltD,EAAYwL,SAASyhD,GAEvCD,EAAexhF,IAHIw0B,EAAYwL,SAAS,EAAGyhD,IAI3CD,EAAexhF,IA4ERkhF,EA5E8BO,GACrCD,EAAexhF,IAAI0hF,EAAWD,EA2EvBP,EA3EmD9nF,YAKxCwnF,GAAAA,EAAAp2D,EAAAo2D,IAAAA,QAAlB,kBAIqBW,GACfC,GALN,WAK0B38E,MAAO1K,EAAIoC,KAiE9B2kF,EAjEsD9nF,YAW7D,OANMuoF,EAAqC3tD,GACvCwtD,EAAgBd,EAAQ77E,OACtB+8E,EAAyC7T,GAAW2S,KACvCiB,EAAYxjF,UAAUyjF,GACzCD,EAAYriF,UAAUsiF,EAAmBC,EAAa,GAE/CL,CAhD4D,CAiHrEM,SAAO,GAAeC,EAAWC,EAAUC,GAIxB,IADXC,GADAC,EAAiCnuD,GAAW+tD,EAAWC,IACnC7jF,UAuHoBikF,MApHtB,GAAbF,GAITC,EAAQ7iF,UAgIuC+iF,EA/H3CJ,GAAc,IAClBE,EAAQ7iF,UAAU,GACD,WAAb2iF,IAIJE,EAAQ7iF,UAyGoC8iF,EAzGWH,GAjBJ,CA8BzD,IAAAK,GACI,IAAe9oD,IAAK,WAAM,WAAIz9B,WAAW,CAGvC,EAAM,EAAM,EAAM,GAGlB,IAAM,IAAM,IAAM,IAMlB,EAAM,EAAM,EAAM,GAGlB,IAAM,IAAM,IAAM,GAGlB,EAAM,EAAM,EAAM,EAKlB,EAAM,EAAM,EAAM,GAGlB,IAAM,GAAM,IAAM,IAGlB,EAAM,EAAM,EAAM,EAGlB,GAAM,IAAM,IAAM,GAGlB,EAAM,EAAM,EAAM,EAKlB,EAAM,EAAM,EAAM,GAGlB,IAAM,GAAM,IAAM,IAMlB,EAAM,EAAM,EAAM,GAGlB,IAAM,IAAM,IAAM,GAGlB,EAAM,EAAM,EAAM,EAGlB,EAAM,EAGN,EAGA,EAGA,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAC1C,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,GApElB,IvBnU5B4L,SAAA,GAAY89D,EAAM8c,EAAWC,EAASC,EAAqBC,EACvDC,EAAoBC,GAEtBxnF,KAAKynF,EAAUpd,EAGfrqE,KAAKmnF,GAAYA,EAGjBnnF,KAAKonF,GAAUA,EAGfpnF,KAAKqnF,QAZ+B,IAAAA,EAAe,KAAfA,EAepCrnF,KAAKsnF,eAfoD,IAAAA,EAAY,KAAZA,EAkBzDtnF,KAAKunF,OAjBH,IAAAA,EAAc,KAAdA,EAoBFvnF,KAAKwnF,YApBiB,IAAAA,EAAS,KAATA,EA0BtBxnF,KAAK+3B,SAHL/3B,KAAK2/C,OAAS,IAvBuB,CA0FvClpB,SAAO,GAAMixD,EAAYC,GAIvB,OAAID,IAAeC,IAEPD,GAAeC,EAGlBD,EAAWE,MAAkBD,EAAWC,MAC3CF,EAAWG,MAAgBF,EAAWE,MAC3B/zC,GACP4zC,EAAWD,IAAUtvE,OAAQwvE,EAAWF,IAAUtvE,SAC1C4gB,GAAM2uD,EAAWI,KACzBH,EAAWG,MAPZJ,GAAcC,EAPY,UAqFrC,GACI/2C,EAAWC,EAASw5B,EAAM8c,EAAWC,EAASW,EAC9CC,EAAiBC,EAAmBC,EACpCC,EAAwB/zB,EAAkBg0B,EAC1CC,EAAiBrR,EACjBwQ,EAAec,GA0FjB,IA5FEH,OAAA,IAAAA,EAAoB,GAApBA,EACiBnR,OAAA,IAAAA,EAA6CuR,GAA7CvR,EASnBh3E,KAAK4wC,UAAYA,EAWjB5wC,KAAKwoF,EARLxoF,KAAK6wC,QAAUA,EAWf7wC,KAAKyoF,EAAepe,EAGpBrqE,KAAKmnF,GAAYA,EAGjBnnF,KAAKonF,GAAUA,EAGfpnF,KAAK+nF,GAAuBA,EAG5B/nF,KAAKgoF,gBAAkBA,EAGvBhoF,KAAKioF,kBAAoBA,EAGzBjoF,KAAKkoF,gBAAkBA,EAGvBloF,KAAKmoF,EAAoBA,EAGzBnoF,KAAKo0D,iBAhDqB,IAAAA,EAAc,GAAdA,EAmD1Bp0D,KAAKooF,OAnDuC,IAAAA,EAAe,KAAfA,EA4D5CpoF,KAAKqoF,OA3DH,IAAAA,EAAW,KAAXA,EA8DFroF,KAAKg3E,OAASA,EAGdh3E,KAAK0oF,SAAU,EAGf1oF,KAAK2oF,GAAc,EAGnB3oF,KAAK4oF,GAAwB,EAG7B5oF,KAAKwnF,YAzEH,IAAAA,EAAS,KAATA,EA4EFxnF,KAAK6oF,gBAAkB,KAGvB7oF,KAAK8oF,GAAyB,EAG9B9oF,KAAKsoF,OAlFY,IAAAA,GAAAA,EAwFjBtoF,KAAK+oF,EAHL/oF,KAAKktE,GAAU,EAKYib,GAAAA,EAAA/4D,EAAL+4D,KAAKA,IAAAA,QAA3B,oBAAAjb,MACU8b,KAENhpF,KAAKsoF,GAAsBtoF,KAAKmoF,EAAkBvpF,QAEhDoB,KAAKmoF,EAAkBnoF,KAAKmoF,EAAkBvpF,OAAS,GAC/CqqF,KAadjpF,KAAKunF,EAHLvnF,KAAKoyB,UAHLpyB,KAAK+3B,SAHL/3B,KAAK2/C,OAAS,IApG+B,CA8Z/CupC,SAAA,GAAAA,EAA2BnB,GACzB,EAAKA,GAAuBA,EAC5B,IAAoCI,IAAAA,GAAAA,EAAA/4D,EAAL+4D,EAAKA,IAAAA,QAApC,kBACmBe,GADnB,EAAAC,MAC8CpB,EAHC,CA9iBjDqB,GAAA,aAAAxB,WACE,OAAO5nF,KAAKmnF,EADC,EAYfiC,GAAA,aAAAvB,WACE,OAAO7nF,KAAKonF,EADD,EA+BbgC,GAAA,aAAAtB,WACE,OAAO9nF,KAAKunF,CADG,EAhGnB7yD,EAAA,mCAAA00D,OAiEEx0D,UrFosDA,WqFpsDAw0D,GAAA,UAAAx0D,GAZAw0D,GAAAx0D,UrFgtDA,aqFhtDAw0D,GAAA,UAAAx0D,IAsQA6yD,EAAAA,GAAAA,WAAAA,EAAAA,WACE,OAAOznF,KAAKyoF,GADJ,EAUVY,EAAAC,aAAAA,WACE,OAAOtpF,KAAK4wC,SADC,EAUfy4C,EAAAE,GAAAA,WACE,OAAOvpF,KAAK6wC,OADD,EAWbw4C,EAAAzB,GAAAA,WACE,OAAO5nF,KAAKmnF,EADC,EAYfkC,EAAAxB,GAAAA,WACE,OAAO7nF,KAAKonF,EADD,EAsCbiC,EAAAG,GAAAA,WACE,OAAOxpF,KAAKo0D,WADG,EAWjBi1B,EAAAI,GAAAA,WACE,OAAOzpF,KAAKooF,CADI,EAUlBiB,EAAAK,GAAAA,WACE,OAAO1pF,KAAKg3E,MADF,EASZqS,EAAAM,GAAAA,WACE3pF,KAAKg3E,OAA6C4S,EADhC,EASpBP,EAAAQ,GAAAA,WACE7pF,KAAK0oF,SAAU,CADD,IAUhBhL,UAAAA,WACE,OAAO19E,KAAK0oF,OADF,EASZW,EAAAS,GAAAA,WACE9pF,KAAK2oF,GAAc,CADE,EAUvBU,EAAAU,GAAAA,WACE,OAAO/pF,KAAK2oF,CADE,EAShBU,EAAAL,GAAAA,WACEhpF,KAAKktE,GAAU,CADD,EAUhBmc,EAAAW,GAAAA,WACE,OAAOhqF,KAAKktE,CADF,EASZmc,EAAAJ,GAAAA,WACEjpF,KAAK+oF,GAAc,CADD,EAUpBM,EAAAY,GAAAA,WACE,OAAOjqF,KAAK+oF,CADE,EAYhBM,EAAAa,GAAAA,WACElqF,KAAK4oF,GAAwB,CADD,EAU9BS,EAAAc,GAAAA,WACE,OAAOnqF,KAAK4oF,CADa,EAU3BS,EAAAe,GAAAA,SAAmBvB,GACjB7oF,KAAK6oF,gBAAkBA,CADW,EAUpCQ,EAAAgB,GAAAA,WACE,OAAOrqF,KAAK6oF,eADO,IAWrB3pF,OAAAA,SAAOA,GACLc,KAAK4wC,WAAa1xC,EAClBc,KAAK6wC,SAAW3xC,EAChBc,KAAKwoF,GAAetpF,EAEpB,IAA2BipF,IAAAA,EAAA/4D,EAAL+4D,KAAKA,GAAAA,EAAAA,EAAAA,QAA3B,8BACUv3C,WAAa1xC,EACrBguE,EAAQr8B,SAAW3xC,EACnBguE,EAAQsb,GAAetpF,CARZ,EAmBfmqF,EAAAiB,GAAAA,SAAYC,GACW,MAAjBvqF,KAAKqoF,EACGz0D,EAAY,sCAIlB10B,EADec,KAAKqoF,EAAWkC,EACPvqF,KAAK4wC,UACX,MAApBhuC,KAAK83D,IAAIx7D,IACXc,KAAKd,OAAOA,GARY,EAkB5BmqF,EAAAmB,GAAAA,SAAejD,GACbvnF,KAAKunF,EAAcA,CADO,EAU5B8B,EAAAvB,GAAAA,WACE,OAAO9nF,KAAKunF,CADG,EArdnB7yD,EAAA,+BAAA+1D,OAqdE71D,UrF2qCA,eqF3qCA61D,GAAA,UAAA71D,GAVA61D,GAAA71D,UrFqrCA,eqFrrCA61D,GAAA,UAAA71D,GAlBA61D,GAAA71D,UrFusCA,YqFvsCA61D,GAAA,UAAA71D,GAnBA61D,GAAA71D,UrF0tCA,OqF1tCA61D,GAAA,UAAA71D,OAXA61D,GAAA71D,UrFquCA,mBqFruCA61D,GAAA,UAAA71D,GAVA61D,GAAA71D,UrF+uCA,mBqF/uCA61D,GAAA,UAAA71D,GAVA61D,GAAA71D,UrFyvCA,yBqFzvCA61D,GAAA,UAAA71D,GAVA61D,GAAA71D,UrFmwCA,4BqFnwCA61D,GAAA,UAAA71D,GAZA61D,GAAA71D,UrF+wCA,cqF/wCA61D,GAAA,UAAA71D,GAVA61D,GAAA71D,UrFyxCA,kBqFzxCA61D,GAAA,UAAA71D,GATA61D,GAAA71D,UrFkyCA,UqFlyCA61D,GAAA,UAAA71D,MAVAA,UrF4yCA,cqF5yCA61D,GAAA,UAAA71D,GATA61D,GAAA71D,UrFqzCA,cqFrzCA61D,GAAA,UAAA71D,GAVA61D,GAAA71D,UrF+zCA,qBqF/zCA61D,GAAA,UAAA71D,GATA61D,GAAA71D,UrFw0CA,UqFx0CA61D,GAAA,UAAA71D,UAVA61D,GAAA71D,UrFk1CA,cqFl1CA61D,GAAA,UAAA71D,GATA61D,GAAA71D,UrF21CA,kBqF31CA61D,GAAA,UAAA71D,GATA61D,GAAA71D,UrFo2CA,UqFp2CA61D,GAAA,UAAA71D,GAVA61D,GAAA71D,UrF82CA,gBqF92CA61D,GAAA,UAAA71D,GAXA61D,GAAA71D,UrFy3CA,eqFz3CA61D,GAAA,UAAA71D,GAtCA61D,GAAA71D,UrF+5CA,WqF/5CA61D,GAAA,UAAA71D,GAZA61D,GAAA71D,UrF26CA,aqF36CA61D,GAAA,UAAA71D,MAXAA,UrFs7CA,WqFt7CA61D,GAAA,UAAA71D,GAVA61D,GAAA71D,UrFg8CA,aqFh8CA61D,GAAA,UAAA71D,aAVA61D,GAAA71D,UrF08CA,QqF18CA61D,GAAA,UAAA71D,EAyTA81D,IAAAA,GAAWA,EACXC,GAAaA,EwBtnBbC,SAAO,GAAoB5xE,GAGzB,OAAmB,GAAZA,EAAEpa,QAAuC,KAAxBoa,EAAEtP,IAAI,GAAKsP,EAAEvP,MAAM,EAHf,CAmC9BohF,SAAO,GAAU7xE,GAIf,OAHKA,GAG2B8xE,GAAoB9xE,GAC3C,KAEFA,EAAEpa,OAASoa,EAAEtP,IAAIsP,EAAEpa,OAAS,GAAK,IAPtB,CAkBpBmsF,SAAO,GAAW/xE,EAAGivB,GAQnB,SAPKjvB,IAAMA,EAAEpa,QAGmBksF,GAAoB9xE,IAIhDivB,EAAOjvB,EAAEtP,IAAIsP,EAAEpa,OAAS,KAIrBqpC,GAAQjvB,EAAEvP,MAAM,EAZE,CA2B3BuhF,SAAO,GAAgBhyE,EAAGivB,GAIxB,IAHKjvB,IAAMA,EAAEpa,QAGmBksF,GAAoB9xE,GAClD,OAAO,EAQT,IADA,IAAI7Y,EAAS,EACc,KAAAivB,EAA4B67D,GAAgBjyE,KAA5C,QAA3B,kBAA2E,CAAhE,MAAX,QAAYvP,EAAA,EAAAA,OAAOC,EAAA4pB,EAAA5pB,KACPu+B,IACR9nC,GAAUuJ,EAAM9G,KAAK4G,IAAIC,EAAOw+B,GAFuC,CAM3E,OAAO9nC,CAnBuB,CAuDhC+qF,SAAO,GAAgBlyE,GACrB,IAAKA,EACH,MAAO,GAGT,IADA,IAAMkuB,EAAM,GACHnpC,EAAI,EAAGA,EAAIib,EAAEpa,OAAQb,IAC5BmpC,EAAI/oC,KAAK,CAACsL,MAAOuP,EAAEvP,MAAM1L,GAAI2L,IAAKsP,EAAEtP,IAAI3L,KAE1C,OAAOmpC,CARiB,CC7IX,eAmCfikD,SAAO,GAAoBtzE,EAAKkgB,GAC9B,IAAM9rB,EAC8B0D,SAASE,cAAc,UAG3D,OAFA5D,EAAO8O,IAAMlD,EACb5L,EAAOvP,UAJuB,IAAAq7B,EAAW,GAAXA,EAKvB9rB,CALsC,CA+D/Cm/E,SAAO,GAAkB/gF,GACvB,KAAOA,EAAQghF,YACbhhF,EAAQihF,YAAYjhF,EAAQghF,WAFE,CC/Fd,eAOpBE,SAAO,GAAUroF,EAAMhE,GAcrB,OAAIA,EAAS,IAAMgE,EAAKtE,QAED,KAAjBsE,EAAKhE,IACgB,KAArBgE,EAAKhE,EAAS,IACO,KAArBgE,EAAKhE,EAAS,IAEO,IAAnBgE,EAAKhE,EAAS,IAAgC,IAAnBgE,EAAKhE,EAAS,IAEpB,IAAnBgE,EAAKhE,EAAS,IACK,IAAnBgE,EAAKhE,EAAS,IACK,IAAnBgE,EAAKhE,EAAS,IACK,IAAnBgE,EAAKhE,EAAS,EAzBK,CAyC/BssF,SAAO,GAAUtoF,EAAMhE,GAIrB,OAAIA,EAAS,IAAMgE,EAAKtE,QAED,KAAjBsE,EAAKhE,IACgB,KAArBgE,EAAKhE,EAAS,IACO,KAArBgE,EAAKhE,EAAS,IAEO,IAAnBgE,EAAKhE,EAAS,IAAgC,IAAnBgE,EAAKhE,EAAS,IAEpB,IAAnBgE,EAAKhE,EAAS,IACK,IAAnBgE,EAAKhE,EAAS,IACK,IAAnBgE,EAAKhE,EAAS,IACK,IAAnBgE,EAAKhE,EAAS,EAfK,CA+B/BusF,SAAO,GAAUvoF,EAAMhE,GAErB,IAAAiC,GAAuB,IAAf+B,EAAKhE,KAAmB,GAIhC,OAHAiC,IAA4B,IAAnB+B,EAAKhE,EAAS,KAAc,IACrCiC,IAA4B,IAAnB+B,EAAKhE,EAAS,KAAc,GACV,IAAnBgE,EAAKhE,EAAS,EALO,CAsC/BwsF,SAAO,GAAaC,GAIlB,IAAMC,EAAgB,CACpBtkF,IAAKqkF,EAAMjvF,KACXgkB,YAAa,GACbxd,KAAM,GACN60B,SAAU,KACV8zD,YAAa,MAGf,GAAmB,SAAfF,EAAMjvF,KAAiB,CAYzB,GAHiB,EAAbivF,EAAMxqF,MAsPoB2qF,IAnP1BH,EAAMzoF,KAAK,GAGb,OAAO,KAGT,IAAM6oF,EAAmBJ,EAAMzoF,KAAK0hC,SAAS,GAAGrhC,QAAQ,GACxD,IAA0B,IAAtBwoF,EACF,OAAO,KAET,IAAMh0D,EAAuB2N,GACb5O,GAAQ60D,EAAMzoF,KAAM,EAAG6oF,IACjCF,EAAcF,EAAMzoF,KAAK,EAAI6oF,GAC7BC,EAAsBL,EAAMzoF,KAAK0hC,SAAS,EAAImnD,GAC/CxoF,QAAQ,GACb,IAA6B,IAAzByoF,EACF,OAAO,KAET,IAGI9oF,EAHEwd,EAA0BglB,GAChB5O,GAAQ60D,EAAMzoF,KAAM,EAAI6oF,EAChCC,IAcR,OAXE9oF,EADe,WAAb60B,EACiB2N,GACH5O,GACR60D,EAAMzoF,KAAM,EAAI6oF,EAAmBC,IAExBlzD,GACf6yD,EAAMzoF,KAAK0hC,SAAS,EAAImnD,EAAmBC,IAEjDJ,EAAc7zD,SAAWA,EACzB6zD,EAAcC,YAAcA,EAC5BD,EAAclrE,YAAcA,EAC5BkrE,EAAc1oF,KAAOA,EACd0oF,CA9CkB,CA+CpB,MAAmB,SAAfD,EAAMjvF,MA4BS,SAAfivF,EAAMjvF,KAtBE,EAAbivF,EAAMxqF,MA0MoB2qF,IAvM1BH,EAAMzoF,KAAK,KAOc,OAFDyoF,EAAMzoF,KAAK0hC,SAAS,GAAGrhC,QAAQ,IAFlD,MAOHmd,EAA0BglB,GAChB5O,GAAQ60D,EAAMzoF,KAAM,EAAG8oF,IACjC9oF,EAAmBwiC,GACT5O,GAAQ60D,EAAMzoF,KAAM,EAAI8oF,IACnCn1E,QAAQ,OAAQ,IAErB+0E,EAAclrE,YAAcA,EAC5BkrE,EAAc1oF,KAAOA,EACd0oF,GA6BiB,SAAfD,EAAMjvF,KAIE,EAAbivF,EAAMxqF,OAIY,KADhB8qF,EAAeN,EAAMzoF,KAAKK,QAAQ,IAF/B,MAMH0nC,EAAmBvF,GACT5O,GAAQ60D,EAAMzoF,KAAM,EAAG+oF,IACvCL,EAAclrE,YAAcuqB,EAChB,gDAARA,GACI/nC,EAAOyoF,EAAMzoF,KAAK0hC,SAASqG,EAAKrsC,OAAS,GAGzCstF,EAAqB,EAAVhpF,EAAK,GAClBipF,GACDjpF,EAAK,IAAM,KAAOA,EAAK,IAAM,KAAOA,EAAK,IAAM,GAAKA,EAAK,GAC5DipF,GAAa,GAETD,IACFC,GAAa,aAGfP,EAAc1oF,KAAOipF,IAEfjpF,EAAmB41B,GACrB6yD,EAAMzoF,KAAK0hC,SAASqG,EAAKrsC,OAAS,IACtCgtF,EAAc1oF,KAAOA,GAEhB0oF,GACoB,MAAlBD,EAAMjvF,KAAK,GAMH,EAAbivF,EAAMxqF,MAgHoB2qF,IA7G1BH,EAAMzoF,KAAK,GAGN,MAEH+nC,EAAmBvF,GAASimD,EAAMzoF,KAAK0hC,SAAS,IACjD/tB,QAAQ,OAAQ,IACrB+0E,EAAc1oF,KAAO+nC,EACd2gD,GACoB,MAAlBD,EAAMjvF,KAAK,IAKdmb,EAAkB6tB,GAASimD,EAAMzoF,MAClC2T,QAAQ,OAAQ,IACrB+0E,EAAc1oF,KAAO2U,EACd+zE,GACED,EAAMzoF,MAEf0oF,EAAc1oF,KAAmB41B,GAAc6yD,EAAMzoF,MAC9C0oF,GAGF,IAtLkB,CA+L3BQ,SAAO,GAAaC,GAIlB,IAFA,IAAIntF,EAAS,EACPotF,EAAS,GACCC,GAAUF,EAASntF,IAAS,CAC1C,IAAMiC,EAAgBqrF,GAAUH,EAASntF,EAAS,GAWlD,IATKmtF,EAAQntF,EAAS,IAAM,EAAK,IAE/BA,GAAU,IAKNwK,GAFNxK,GAAU,IAEWiC,EAEdjC,EAAS,GAAKwK,GAAK,CACiB,MAAA2iF,EAAQznD,SAAS1lC,GAjOxDiC,EAA2BqrF,GAAUtpF,EAAM,IAkOvCyoF,EAAiBc,GADjBC,EA5NH,CACLhwF,KAPW0B,OAAOC,aAAa6E,EAAK,GAAIA,EAAK,GAAIA,EAAK,GAAIA,EAAK,IAQ/D/B,KAAAA,EACA+B,KAAMA,EAAK0hC,SALE1lC,GAAAA,GAKwBiC,OA4NjCmrF,EAAOnuF,KAAKwtF,GAIdzsF,GAAUwtF,EAAUvrF,KAAO,EARH,CAWbwrF,GAAUN,EAASntF,KAC9BA,GAAU,GAxB8B,CA2B5C,OAAOotF,CA/BoB,CA0C7BM,SAAO,GAAWP,EAASntF,GAKzB,IAHA,IAAM2tF,EAFmB3tF,OAAA,IAAAA,EAAS,EAATA,EAGrBN,EAAS,EAEG2tF,GAAUF,EAASntF,IAC5BmtF,EAAQntF,EAAS,IAAM,EAAK,IAE/BN,GAAU,IAGZA,GAAU,GAGVA,GADsB4tF,GAAUH,EAASntF,EAAS,GAGrCytF,GAAUN,EAASntF,EAAS,MAEvCN,GAAU,IAEZM,GAAUN,EAGZ,OAAa,EAATA,EACKytF,EAAQznD,SAASioD,EAAOA,EAAQjuF,GAElC,IAAI+B,WAAW,GA1Be,CC5VvCmsF,SAAO,GAAUla,EAAQt1E,GACvB,IAAIyvF,EAAwB,KACxBC,EAAoB,KACpBC,EAAiB,KAEfC,EAAUta,EAAOjB,IAsBvB,OAnBY,EAARr0E,IACF2vF,EAAiBra,EAAOf,MAId,EAARv0E,GACFs1E,EAAOV,KAAK,GAIF,EAAR50E,IACFyvF,EAAwBna,EAAOjB,KAIrB,GAARr0E,IACF0vF,EAAoBpa,EAAOjB,KAGtB,CACLub,QAAAA,EACAH,GAAAA,EACAC,GAAAA,EACAC,GAAAA,EA/B4B,CA2DhCE,SAAO,GAAoBva,EAAQv1E,GACjC,OAAe,GAAXA,GACI00E,EAAOa,EAAOjB,IACdG,EAAMc,EAAOjB,IACZ,CACLyb,oBAAsBrb,EAAOnvE,KAAKC,IAAI,EAAG,IAAOivE,IAG3C,CACLsb,oBAAqBxa,EAAOjB,IATU,CAkD5C0b,SAAO,GAAUza,EAAQv1E,GAuBvB,OAtBe,GAAXA,GACFu1E,EAAOV,KAAK,GACZU,EAAOV,KAAK,KAEZU,EAAOV,KAAK,GACZU,EAAOV,KAAK,IAGRoV,EAAY1U,EAAOjB,IAEzBiB,EAAOV,KAAK,GAENjtE,EAAW2tE,EAAOlB,KAUjB,CACL4V,UAAAA,EACAriF,SANE7G,OAAOC,aAAgC,IAAlB4G,GAAY,KACjC7G,OAAOC,aAA0C,KAAhB,IAAX4G,IAAsB,IAC5C7G,OAAOC,aAAiC,IAAR,GAAX4G,IArBO,CAqDlCqoF,SAAO,GAAU1a,EAAQv1E,EAASC,GAChC,IAAMiwF,EAAc3a,EAAOjB,IACrB6b,EAAa,GACfC,EAAa,KAGL,EAARnwF,IACFmwF,EAAa7a,EAAOjB,KAIV,EAARr0E,GACFs1E,EAAOV,KAAK,GAGd,IAAK,IAAIn0E,EAAI,EAAGA,EAAIwvF,EAAaxvF,IAAK,CAEpC,IAAMyI,EAAS,CACbknF,GAAgB,KAChBC,WAAY,KACZC,GAA6B,MAInB,IAARtwF,IACFkJ,EAAOknF,GAAiB9a,EAAOjB,KAIrB,IAARr0E,IACFkJ,EAAOmnF,WAAa/a,EAAOjB,KAIjB,KAARr0E,GACFs1E,EAAOV,KAAK,GAIF,KAAR50E,IACFkJ,EAAOonF,GAAyC,GAAXvwF,EAC/Bu1E,EAAOjB,IACPiB,EAAOhB,MAGf4b,EAAWrvF,KAAKqI,EA9BoB,CAiCtC,MAAO,CACL+mF,GAAAA,EACAC,GAAAA,EACAC,GAAAA,EAnDqC,CAiIzCva,SAAO,GAAiBN,GACtBA,EAAOV,KAAK,GACZU,EAAOV,KAAK,GACZU,EAAOV,KAAK,GACZ,IAAM3U,EAAeqV,EAAOlB,KAM5B,OALAkB,EAAOV,KAAK,GACZU,EAAOV,KAAK,GACZU,EAAOV,KAAK,GAGL,CACL3U,aAAAA,EACAswB,WAJIA,EAAajb,EAAOlB,KAAgBkB,EAAOlB,KAAe,MARlC,CA2OhCoc,SAAO,GAAUlb,GAGf,MAAO,CAACzyB,MAD2Bg0B,GAD7B4Z,EAASnb,EAAOjB,KADC,CA0JzBqc,SAAO,GAAO1hC,EAAG2hC,GAEf,OAFeA,OAAA,IAAAA,GAAAA,EACTpqF,EAAQyoD,EAAEphD,SAAS,IAAIi8C,cACzB8mC,EACKpqF,GAED,IAAMA,GAAOuH,OAAO,EALc,CAkC5C8iF,SAAO,GAAgB5hC,GACrB,OAAY,GAAJA,EAAS,IAAM,IAAMA,CADL,CCzrB1B//C,SAAA,GAAYrJ,EAAMirF,GAGhB,GADAnuF,KAAKmnC,EAAQjkC,OAFG,IAAAirF,GAAAA,EAGM,CAsBhBjnD,EAAM,IAAIvmC,WArBeuC,EAqBClF,YAGhC,IAFA,IAAIowF,EAAW,EAENrwF,EAAI,EAAGA,EAxBemF,EAwBNlF,WAAYD,IAC1B,GAALA,GAEa,GA3BYmF,EA2BlBnF,IAA6B,GA3BXmF,EA2BCnF,EAAI,IAA6B,GA3BlCmF,EA2BwBnF,EAAI,KAIzDmpC,EAAIknD,GA/ByBlrF,EA+BRnF,GACrBqwF,KAhCApuF,KAAKmnC,EAmCuBrQ,GAAQoQ,EAAK,EAAGknD,EApCxB,CAKtBpuF,KAAKquF,EAAyBruF,KAAKmnC,EAAMnpC,WAQzCgC,KAAKsuF,EAJLtuF,KAAKuuF,EAAe,CAZsB,CA+C5CC,SAAA,GAAAA,GACE,IAAM/wE,EAAW,EAAK0pB,EAAMnpC,WAAa,EAAKqwF,EACxC3tF,EAAQ,IAAIC,WAAW,GACvB8tF,EAAiB7rF,KAAKQ,IAAI,EAAG,EAAKirF,GAEjB,IAAnBI,IAIJ/tF,EAAMkE,IAAI,EAAKuiC,EAAMvC,SAASnnB,EAAUA,EAAWgxE,IAGnD,EAAKF,EAAwB5c,IAFGW,GAC5B5xE,EVyLQuzE,GUxLiBtC,IAG7B,EAAK2c,EAAyC,EAAjBG,EAC7B,EAAKJ,GAA0BI,EAhBrB,CAwBZC,SAAA,GAAAA,EAAS1b,GACP,GAAI,EAAKsb,GAAyBtb,EAAO,CACvCA,GAAS,EAAKsb,EACd,IAAMK,EAAY/rF,KAAKqB,MAAM+uE,EAAQ,GACrCA,GAAsB,EAAZ2b,EACV,EAAKL,GAAyBK,EACzBH,GAALA,EALuC,CAOzC,EAAKD,IAAiBvb,EACtB,EAAKsb,GAAyBtb,CAThB,CAkBhB4b,SAAA,GAAAA,EAASztF,GACP,IAAI0tF,EAAOjsF,KAAKQ,IAAI,EAAKkrF,EAAuBntF,GAC1C2tF,EAAO,EAAKP,IAAkB,GAAKM,EAQzC,OAPA,EAAKP,GAAyBO,EACG,EAA7B,EAAKP,EACP,EAAKC,IAAiBM,EACiB,EAA9B,EAAKR,GACTG,GAALA,GAGS,GADXK,EAAO1tF,EAAO0tF,GAEJC,GAAQD,EAAaD,GAALA,EAAcC,GAEjCC,CAbM,CAsBfC,SAAA,GAAAA,GACE,IAAIhxF,EACJ,IAAKA,EAAI,EAAGA,EAAI,EAAKuwF,IAAyBvwF,EAC5C,GAAK,EAAKwwF,EAAgB,aAAexwF,EAIvC,OAFA,EAAKwwF,IAAiBxwF,EACtB,EAAKuwF,GAAyBvwF,EACvBA,EAMX,OADKywF,GAALA,GACOzwF,EAASgxF,GAALA,EAbO,CAmBpBC,SAAA,GAAAA,GACON,GAALA,EAAc,EAASK,GAALA,GADJ,CAShBE,SAAA,GAAAA,GAEE,OAAYL,GAALA,EADUG,GAALA,GACe,GAAK,CAFV,CAUxBG,SAAA,GAAAA,GAEE,OAAI,GADEJ,EAAYG,GAALA,IAIH,EAAIH,IAAU,GAGhB,GAAKA,IAAS,EARR,CAgBhBK,SAAA,GAAAA,GACE,OAA4B,IAAhBP,GAALA,EAAc,EADT,CASdQ,SAAA,GAAAA,GACE,OAAYR,GAALA,EAAc,EADJ,CAWnBS,SAAA,GAAAA,EAAgBrc,GAId,IAHA,IAAIsc,EAAY,EACZC,EAAY,EAEPjlF,EAAI,EAAGA,EAAI0oE,EAAO1oE,IACP,IAAdilF,IAEFA,GAAaD,GADPE,EAAkBN,GAALA,IACmB,KAAO,KAE/CI,EAA2B,IAAdC,EAAmBD,EAAYC,CATzB,CAkBvBE,SAAA,GAAAA,GAME,OAJKL,GAALA,GAEKH,GAALA,GAEYA,GAALA,EANO,CCxNhB1iF,SAAA,KAEEvM,KAAK0vF,EAAS,KAGd1vF,KAAK2vF,GAAa,EAMlB3vF,KAAK4vF,EAHL5vF,KAAK6vF,EAAY,KAMjB7vF,KAAK8vF,EAAa,GAGlB9vF,KAAK+vF,EAAY,GAMjB/vF,KAAKk+D,EAHLl+D,KAAKgwF,EAAY,KAMjBhwF,KAAKiwF,EAAa,GAGlBjwF,KAAKkwF,EAAY,GAGjBlwF,KAAKmwF,EAAU,KAGfnwF,KAAKowF,EAAW,GAShBpwF,KAAKqwF,EAHLrwF,KAAKswF,EAHLtwF,KAAKuwF,EAAgB,IAtCT,UA4Yd,GAAAC,EAAUttF,GAKR,GAAoB,IAJCA,EAAK,IAAM,GAAOA,EAAK,IAAM,EAAKA,EAAK,IAK1D,OAAO,KAGT,IAAMutF,EAAM,CACVvtF,KAAM,IAAIvC,WAAW,GAErB+vF,aAAgBxtF,EAAK,IAAM,EAAKA,EAAK,GACrCy2B,IAAK,KACLg3D,IAAK,KACLC,MAAO,IAKT,GAAIH,EAAIC,cAAgBD,EAAIC,aAAextF,EAAKlF,WAAa,EAC3D,OAAO,KAMT,IAAM6yF,EAAc3tF,EAAK,GAUzB,GAAkB,IAAd2tF,EAAoB,CAItB,IAAMl3D,EACe,WAAR,GAAVz2B,EAAK,IACc,SAAR,IAAXA,EAAK,KACc,OAAR,IAAXA,EAAK,KACc,KAAR,IAAXA,EAAK,MACM,IAAXA,EAAK,KAAc,EAEI,MAAtB,EAAKqtF,IACP,EAAKA,EAAgB52D,GAGvB82D,EAAI92D,IAAWm3D,GAAgBn3D,EAAK,EAAK42D,GACzC,EAAKA,EAAgBE,EAAI92D,IAEzB82D,EAAIE,IAAMF,EAAI92D,IACI,GAAdk3D,IACIF,EACgB,WAAR,GAAXztF,EAAK,KACc,SAAR,IAAXA,EAAK,KACc,OAAR,IAAXA,EAAK,KACc,KAAR,IAAXA,EAAK,MACM,IAAXA,EAAK,KAAc,EAEI,MAAtB,EAAKotF,IACP,EAAKA,EAAgBK,GAGvBF,EAAIE,IAAWG,GAAgBH,EAAK,EAAKL,IAE3C,EAAKA,EAAgBG,EAAIE,GAjCH,CAuCxB,OADMI,EAFY7tF,EAAK,GAEgB,EACnCA,EAAKlF,YAAc+yF,EACd,MAGTN,EAAIvtF,KAAOA,EAAK0hC,SAASmsD,GAElBN,EAlFO,CA6chBO,SAAA,GAAAA,GAEE,IAAMC,EAAY,EAAKC,KACvB,OAAuB,EAAnBD,EAAUryF,SACNuyF,EAAWF,EAAU,GAAGt3D,IAGxBy3D,EAAYH,EAAU,GAAGt3D,KAG1BjI,MAAM0/D,EAAYD,IACd/yF,OAAO,GAAKgzF,EAAYD,GAiYPE,KA9XrB,IAdO,CA4ThBP,SAAA,GAAgBjtF,EAAOyB,GAIrB,IAAI8rC,EAAY,EAiBhB,IAfIvtC,EAAQyB,IAUV8rC,GAAa,GAdGkgD,WAmBX1uF,KAAK83D,IAAIp1D,EAAYzB,IAC1BA,GArBa0tF,WAqBHngD,EAGZ,OAAOvtC,CAzByB,CAmClC2tF,SAAO,GAAMtuF,GAEX,QAAiB,EADsBuuF,GAAWvuF,GADjC,CAoBnBwuF,SAAO,GAAWxuF,GAKhB,IAFA,IAAMyuF,EAAa/uF,KAAKQ,IAAI,IAAMF,EAAKtE,OAAS,KAC5Cb,EAAI,EACDA,EAAI4zF,GAAY,CAGrB,GAAe,IAAXzuF,EAAKnF,IACqB,IAA1BmF,EAAKnF,EAuBqB6zF,MAtBI,IAA9B1uF,EAAKnF,EAAI,KACX,OAAOA,EAEPA,GARmB,CAWvB,OAAQ,CAhBc,C7B3lB1B0sF,GrFkpCE,OqFlpCoCoH,CACpCnH,GAAWmH,GACXlH,GAAakH,GACbC,GAASA,GyB7nBXp9D,EAAA,iBAAAq9D,IAkGSA,G9G0qDP,kB8G1qDOC,GC/FTt9D,EAAA,sBAAAu9D,IA8VSA,G/G26CP,W+G36COC,M/G26CP,a+Gr9COC,GEtSTz9D,EAAA,uBAAA09D,KC4CEC,EAAAA,GAAAA,WAAAA,UAAAA,WACEryF,KAAK8vF,EAAa,GAClB9vF,KAAK+vF,EAAY,GACjB/vF,KAAKiwF,EAAa,GAClBjwF,KAAKkwF,EAAY,GACjBlwF,KAAKowF,EAAW,EALN,IAeZ3zF,MAAAA,SAAMyG,GAKJ,GAAkB,IAAdA,EAAKtE,OACP,OAAOoB,KAST,IAPA,IAAM0xF,EAAa9uF,KAAK4G,IAAI,EAAuBioF,GAAWvuF,IAExDtE,EAASsE,EAAKtE,QAAUsE,EAAKtE,OAAS8yF,GA+pCZE,IA7pC5BU,GAAc,EAGT7oF,EAAQioF,EAAYjoF,EAAQ7K,EAAQ6K,GA0pCbmoF,IAzpC9B,GAAmB,IAAf1uF,EAAKuG,GAAgB,CACvB,IAAM8oF,KAAiD,GAAlBrvF,EAAKuG,EAAQ,IAE5C+oF,IAA0B,GAAlBtvF,EAAKuG,EAAQ,KAAc,GAAKvG,EAAKuG,EAAQ,GAM3D,GAA6B,GALqB,GAAlBvG,EAAKuG,EAAQ,KAAc,EAK3B,CAC9B,IAAAvK,EAASuK,EAAQ,EAAIvG,EAAKuG,EAAQ,GAElC,GAAIvK,GAAUuK,EA6oCYmoF,IA5oCxB,QAJ4B,MAO9B1yF,EAASuK,EAAQ,EAEnB,OAAQ+oF,GACN,KAAK,EACCD,IACFrzF,GAAUgE,EAAKhE,GAAU,GAG3Bc,KAAK0vF,GAkGgB,GAlGQxsF,EAAMhE,EAkGpB,MAAe,EAlGDgE,EAAMhE,EAkGc,IAjGjD,MACF,KAAK,GACL,KAAK,KACH,MACF,KAAKc,KAAK0vF,EACJ6C,IACFrzF,GAAUgE,EAAKhE,GAAU,GAwG7BiB,EAAS,CACb0nD,OAAQ,EACRC,OAAQ,EACR2qC,IAAM,EACN3oC,WAAY,GACZD,WAAY,IAGd,IAAM6oC,EAAWxzF,EAAS,IADiB,IA5GDgE,EAAAA,GA4GbhE,EAAS,KAAc,EAAKgE,EAAKhE,EAAS,IACzB,EAO9C,IADAA,GAAU,KAFc,GAApBgE,EAAKhE,EAAS,MAAe,EAAKgE,EAAKhE,EAAS,KAG7CA,EAASwzF,GAAU,CACxB,IAAMF,GAA2B,GAAnBtvF,EAAKhE,EAAS,KAAc,EAAKgE,EAAKhE,EAAS,GACvDyzF,GAAoC,GAAnBzvF,EAAKhE,EAAS,KAAc,EAAKgE,EAAKhE,EAAS,GACtE,OAAQgE,EAAKhE,IACX,KAAK,EAIH,GAAmB,EAAfyzF,EAIF,IAHA,IAAIC,EAAW1zF,EAAS,EACpB2zF,EAAYF,EAEG,EAAZE,GAAe,CAEpB,IAAMC,EAAgB5vF,EAAK0vF,EAAW,GAAK,EAC3C,OAFqB1vF,EAAK0vF,IAIxB,KAAK,EAGH,IAAMG,EACUxtD,GAFZriC,EAAK0hC,SAASguD,EAAW,EAAGA,EAAWE,KAGtB,GAAjB3yF,EAAO0nD,OAAgC,SAAjBkrC,GACxB5yF,EAAO0nD,MAAQ2qC,EACfryF,EAAO2pD,WAAa,SACM,GAAjB3pD,EAAO2nD,OAAgC,SAAjBirC,IAC/B5yF,EAAO2nD,MAAQ0qC,EACfryF,EAAO0pD,WAAa,OAEtB,MAGF,KAAK,KACkB,GAAjB1pD,EAAO0nD,QACT1nD,EAAO0nD,MAAQ2qC,EACfryF,EAAO2pD,WAAa,OAEtB,MAEF,KAAK,KACkB,GAAjB3pD,EAAO0nD,QACT1nD,EAAO0nD,MAAQ2qC,EACfryF,EAAO2pD,WAAa,OAEtB,MAEF,KAAK,KACkB,GAAjB3pD,EAAO0nD,QACT1nD,EAAO0nD,MAAQ2qC,EACfryF,EAAO2pD,WAAa,OAEtB,MAEF,KAAK,IACsB,QAArB3pD,EAAO2pD,aAELkpC,EAAoB,KAEM,MAHA9vF,EAAK0vF,EAAW,KAI5CI,EAAoB9vF,EAAK0vF,EAAW,IAGb,MAArBI,IAlLOC,KAwLN5C,EAAgB,CACnB9yB,aAHwC,GAApBy1B,EACO,GAApBA,EAAL,EAGFA,GAAAA,EACAnF,WAAY,QAKpB+E,GAAYE,EACZD,GAAaC,CAjEO,CAoExB,MAKF,KAAK,IACkB,GAAjB3yF,EAAO0nD,QACT1nD,EAAO0nD,MAAQ2qC,EACfryF,EAAO2pD,WAAa,OAEtB,MAEF,KAAK,IACkB,GAAjB3pD,EAAO0nD,QACT1nD,EAAO0nD,MAAQ2qC,EACfryF,EAAO2pD,WAAa,YAEtB,MAEF,KAAK,IACgB,GAAf3pD,EAAOsyF,KACTtyF,EAAOsyF,GAAMD,GAEf,MAKF,KAAK,IACkB,GAAjBryF,EAAO2nD,QACT3nD,EAAO2nD,MAAQ0qC,EACfryF,EAAO0pD,WAAa,OAEtB,MAGF,KAAK,EACL,KAAK,GACkB,GAAjB1pD,EAAO0nD,QACT1nD,EAAO0nD,MAAQ2qC,EACfryF,EAAO2pD,WAAa,OAEtB,MAEF,KAAK,IACkB,GAAjB3pD,EAAO2nD,QACT3nD,EAAO2nD,MAAQ0qC,EACfryF,EAAO0pD,WAAa,OAEtB,MAEF,KAAK,KACkB,GAAjB1pD,EAAO0nD,QACT1nD,EAAO0nD,MAAQ2qC,EACfryF,EAAO2pD,WAAa,aAIxB,KAAK,IACL,KAAK,KACkB,GAAjB3pD,EAAO0nD,QACT1nD,EAAO0nD,MAAQ2qC,EACfryF,EAAO2pD,WAAa,OAS1B5qD,GAAUyzF,EAAe,CAvJD,EA3GO,IATnBO,EA6QP/yF,GApQgB2nD,QACb9nD,KAAK6vF,EAAYqD,EAAWprC,MAC5B9nD,KAAK4vF,EAAcsD,EAAWrpC,aAEP,GAArBqpC,EAAWrrC,QACb7nD,KAAKgwF,EAAYkD,EAAWrrC,MAC5B7nD,KAAKk+D,EAAcg1B,EAAWppC,aAET,GAAnBopC,EAAWT,KACbzyF,KAAKmwF,EAAU+C,EAAWT,IAGxBH,IAAgBtyF,KAAK2vF,IAEvB2C,GAAc,EAGd7oF,EAAQioF,EA6lCcE,KA3lCxB5xF,KAAK2vF,GAAa,EAClB,MAEF,KAAK3vF,KAAK6vF,EACFoB,EAAY/tF,EAAK0hC,SAAS1lC,EAAQuK,EAulChBmoF,KAtlCpBW,EACFvyF,KAAK8vF,EAAW3xF,KAAK,CAAC8yF,IACbjxF,KAAK8vF,EAAWlxF,QACHoB,KAAK8vF,EAAW9vF,KAAK8vF,EAAWlxF,OAAS,IAE7DoB,KAAK8vF,EAAW9vF,KAAK8vF,EAAWlxF,OAAS,GAAGT,KAAK8yF,GAGrD,MAEF,KAAKjxF,KAAKgwF,EACFmD,EAAYjwF,EAAK0hC,SAAS1lC,EAAQuK,EA2kChBmoF,KA1kCpBW,EACFvyF,KAAKiwF,EAAW9xF,KAAK,CAACg1F,IACbnzF,KAAKiwF,EAAWrxF,QACHoB,KAAKiwF,EAAWjwF,KAAKiwF,EAAWrxF,OAAS,IAE7DoB,KAAKiwF,EAAWjwF,KAAKiwF,EAAWrxF,OAAS,GAAGT,KAAKg1F,SAKvD,KAAKnzF,KAAKmwF,EACF9D,EAAUnpF,EAAK0hC,SAAS1lC,EAAQuK,EA+jCdmoF,KA9jCpBW,EACFvyF,KAAKowF,EAASjyF,KAAK,CAACkuF,IACXrsF,KAAKowF,EAASxxF,QACHoB,KAAKowF,EAASpwF,KAAKowF,EAASxxF,OAAS,IAEvDoB,KAAKowF,EAASpwF,KAAKowF,EAASxxF,OAAS,GAAGT,KAAKkuF,GAGjD,MAEF,QACEiG,GAAc,EAtGK,CA6G3B,OAAOtyF,IA7HG,EAyaZozF,EAAAC,GAAAA,SAAc5C,GAIZ,OAHgBxL,GACZ,yBACA,2CACGjlF,KAAKszF,GAAW7C,EAJG,IAmB5B6C,GAAAA,SAAW7C,EAAK8C,EAAUC,GAExB,IAAMvrD,EAAOwoD,EAAI92D,IAAM82D,EAAI92D,IAouBC03D,IApuBiB,KAEvCoC,GADAvwF,EAAOutF,EAAIvtF,MACAlF,WAEb01F,EAAiB,EACG,OAApB1zF,KAAK4vF,IACP8D,EAAiB,GAsBnB,IAdA,IAYIC,EAZAC,EAAWJ,GAAa,EAGtB5C,EAAQ,GAIViD,GAAiB,EAEjBC,EAAe,EAKV/1F,EAAI,EAAGA,EAAI01F,IAAO11F,EAAG,CAC5B,IAAM8F,EAAQX,EAAKnF,GACnB,GAAK8F,EAEE,IAAgB,GAAZ+vF,GAA0B,GAAT/vF,EAAY,CA+CtC,GA9CI0vF,IAAa3C,EAAMhyF,SAA4B,GAAlBi1F,IAIzBE,EAAiBh2F,GADU,EAAX61F,EAAe,EAAIA,GAGrCJ,GAA+B,GAAlBO,IACTC,EAAW9wF,EAAK0hC,SAAS,EAAGmvD,GAClCR,EAASrwF,KAAkCi+C,GACvCoyC,EAASrwF,KAAM8wF,GACnBT,EAASU,SAAsC9yC,GAC3CoyC,EAASU,SAAUD,KAIN,GAAjBH,GAOIE,EAAiBh2F,IADW,EAAX61F,EAAe,EAAIA,GAAY,GAWtDhD,EAAMzyF,KAPO+1F,CAEXhxF,KAAMA,EAAK0hC,SAVWivD,EAAgBH,EAUDK,EAAiB,GACtDE,SAAU/wF,EAAK0hC,SAASivD,EAAeE,EAAiB,GACxDr3F,KAAMo3F,EACN7rD,KAAMA,KAGCsrD,IAAa3C,EAAMhyF,QAEb,GADTu1F,EAAWp2F,EAAI61F,KAEbI,EAAW9wF,EAAK0hC,SAAS,EAAGuvD,GAClCZ,EAASrwF,KAAkCi+C,GACvCoyC,EAASrwF,KAAM8wF,GACnBT,EAASU,SAAsC9yC,GAC3CoyC,EAASU,SAAUD,IAMvBj2F,GAAK01F,EAAMC,EAEb,OAAO9C,EAKTiD,MAEEC,EADsB,OAApB9zF,KAAK4vF,EACS1sF,EAAKnF,IAAM,EAAK,GAEP,GAAVmF,EAAKnF,EA1DgB,CA4DtC61F,EAAW,CA5DN,MADLA,IAoEE71F,GAAM01F,EAAM,GAAuB,GAAjBI,GAAkC,GAAZD,IAI1CD,EAAiB,CACfzwF,KAAMA,EAAK0hC,SAFWivD,EAAgBH,EAEDD,GACrCQ,SAAU/wF,EAAK0hC,SAASivD,EAAeJ,GACvC/2F,KAAMo3F,EACN7rD,KAAMA,GA/EkB,CA8F9B,OAVI0rD,GACF/C,EAAMzyF,KAAKw1F,IAER/C,EAAMhyF,QAAU20F,IACnBA,EAASrwF,KAAkCi+C,GACvCoyC,EAASrwF,KAAMA,GACnBqwF,EAASU,SAAsC9yC,GAC3CoyC,EAASU,SAAU/wF,IAGlB0tF,CA5H4B,EAqIrCwC,EAAAgB,YAAAA,WAGE,IADA,IAAM1+E,EAAW,GACe06E,EAAAhhE,EAALghE,KAAKA,GAAAA,EAAAA,EAAAA,QAAhC,mBAEQK,EAAWD,GAALA,KADNnE,EAAqCgI,GAA3B,MAAWnzC,GAAX7vB,EADlB,EAAAijE,WAII5+E,EAASvX,KAAK,CACZg4C,QAASs6C,EAAI92D,IAAM82D,EAAI92D,IAylBD03D,IAzlBmB,KACzCnuF,KAAMutF,EAAIvtF,KACVopF,OAA4B6F,GAAa1B,EAAIvtF,MAC7CytF,IAAKF,EAAIE,IACTh3D,IAAK82D,EAAI92D,MAIf,OAAOjkB,CAhBK,IAyBd6+E,GAAAA,WACE,GAAIv0F,KAAKiwF,EAAWrxF,SAAWoB,KAAKkwF,EAAUtxF,OAAQ,CAEpD,IADA,IAAIuZ,GAAO,EACuB83E,EAAA7gE,EAAL6gE,KAAKA,GAAAA,EAAAA,EAAAA,QAAlC,kBAA8C,CAC5C,IAAMkD,EAAuCkB,GAA3B,MAAWnzC,GAAX7vB,EADpB,EAAAmjE,QAEQ/D,EAAWD,GAALA,KAAe2C,GACvBsB,EAAcz0F,KAAKkwF,EAAUtxF,OAC7BoB,KAAKkwF,EAAUlwF,KAAKkwF,EAAUtxF,OAAS,GAAK,KAC5C6xF,GAAkB,MAAXA,EAAI92D,KAA0B,MAAX82D,EAAIE,OAAiB8D,GAC9CA,EAAY96D,KAAO82D,EAAI92D,KAAO86D,EAAY9D,KAAOF,EAAIE,MACpD3wF,KAAKkwF,EAAUtxF,QAAU6xF,EAAIE,KAAO8D,EAAY9D,KAAO,KACzDx4E,GAAO,GAETnY,KAAKkwF,EAAU/xF,KAAKsyF,IACXzwF,KAAKkwF,EAAUtxF,SAClBsE,EAAOutF,EAAMA,EAAIvtF,KAAOiwF,MAI9BsB,EAAcz0F,KAAKkwF,EAAUpqE,OACjB5iB,KACmBi+C,GAAOszC,EAAYvxF,KAAMA,GACxDlD,KAAKkwF,EAAU/xF,KAAKs2F,GAnBsB,CAsB1Ct8E,IACFnY,KAAKkwF,EAAYlwF,KAAKkwF,EAAU/3E,MAAK,SAACra,EAAGkb,GAEvC,IAAM07E,GAAY52F,EAAE67B,KAAO,IAAM3gB,EAAE2gB,KAAO,GAC1C,OAFkB77B,EAAE6yF,KAAO,IAAM33E,EAAE23E,KAAO,IAEvB+D,CAH0B,IAzBG,CAgCtD,OAAO10F,KAAKkwF,CAjCC,IA2CfgB,GAAAA,SAAayD,GACX,GADWA,OAAA,IAAAA,GAAAA,EACP30F,KAAK8vF,EAAWlxF,SAAWoB,KAAK+vF,EAAUnxF,OAAQ,CAEpD,IADA,IAAIuZ,GAAO,EACuB23E,EAAA1gE,EAAL0gE,KAAKA,GAAAA,EAAAA,EAAAA,QAAlC,kBAA8C,CAC5C,IAAMmB,EAAuCoD,GAA3B,MAAWnzC,GAAX7vB,EADpB,EAAAujE,QAEQnE,EAAWD,GAALA,KAAeS,GACvBwD,EAAcz0F,KAAK+vF,EAAUnxF,OAC7BoB,KAAK+vF,EAAU/vF,KAAK+vF,EAAUnxF,OAAS,GAAK,KAC5C6xF,GAAkB,MAAXA,EAAI92D,KAA0B,MAAX82D,EAAIE,OAAiB8D,GAC9CA,EAAY96D,KAAO82D,EAAI92D,KAAO86D,EAAY9D,KAAOF,EAAIE,MACpD3wF,KAAK+vF,EAAUnxF,QAAU6xF,EAAIE,KAAO8D,EAAY9D,KAAO,KACzDx4E,GAAO,GAETnY,KAAK+vF,EAAU5xF,KAAKsyF,IACXzwF,KAAK+vF,EAAUnxF,SAClBsE,EAAOutF,EAAMA,EAAIvtF,KAAO+tF,MAI9BwD,EAAcz0F,KAAK+vF,EAAUjqE,OACjB5iB,KACmBi+C,GAAOszC,EAAYvxF,KAAMA,GACxDlD,KAAK+vF,EAAU5xF,KAAKs2F,GAnBsB,CAsB9C,GAAIE,EAAgB,CAIlB,IADME,EAAgB,GACC9E,GAAAA,EAAA3gE,EAAL2gE,KAAKA,IAAAA,QAAvB,kBAEE,IAFF,WACMa,MAAQ5wF,KAAKszF,GAAW7C,EAAK8C,OAH/BC,GAIE/C,EAAIG,MAAMhyF,OAAQ,CACpBi2F,EAAc12F,KAAKsyF,GACnB,IAAA8C,EAAW9C,EAAIG,MAAMH,EAAIG,MAAMhyF,OAAS,EAFpB,CAKxBoB,KAAK+vF,EAAY8E,CAXC,CAahB18E,IACFnY,KAAK+vF,EAAY/vF,KAAK+vF,EAAU53E,MAAK,SAACra,EAAGkb,GAEvC,IAAM07E,GAAY52F,EAAE67B,KAAO,IAAM3gB,EAAE2gB,KAAO,GAC1C,OAFkB77B,EAAE6yF,KAAO,IAAM33E,EAAE23E,KAAO,IAEvB+D,CAH0B,IAtCG,CA6CtD,OAAKC,EAKE30F,KAAK+vF,GAJJ+E,EAAe90F,KAAK+vF,EAC1B/vF,KAAK+vF,EAAY,GACV+E,EAjDyB,EA6DpC1B,EAAA9J,aAAAA,SAAa7xC,GAEX,GAAmB,SAAfA,EAAwB,CACtBs9C,EAAiB,KACrB,IAAM5B,EAAYnzF,KAAKu0F,KAKvB,OAJIpB,EAAUv0F,SACN6xF,EAAM0C,EAAU,GACtB4B,EAAiBnyF,KAAKQ,IAAIqtF,EAAIE,IAAKF,EAAI92D,KAydf03D,KAvdnB0D,CAPmB,CAQrB,MAAmB,SAAft9C,GACLu9C,EAAiB,MACf/D,EAAYjxF,KAAKkxF,IAAmC,IAC5CtyF,SACN6xF,EAAMQ,EAAU,GACtB+D,EAAiBpyF,KAAKQ,IAAIqtF,EAAIE,IAAKF,EAAI92D,KAidf03D,KA/cnB2D,GAEF,IAnBiB,EA4B1B5B,EAAA3vC,GAAAA,WACE,MAAO,CACLoE,MAAO7nD,KAAKk+D,EACZpW,MAAO9nD,KAAK4vF,EAHJ,IAaZqF,GAAAA,WAEE,IADA,IAAMrE,EAAQ,GACI,EAAAxhE,EAAApvB,KAAKkxF,MAAL,YAAlB,kBACEN,EAAMzyF,KAAN,MAAAyyF,EAAAv/D,EADF,EAAAo/D,MACoBG,QAEpB,OAAOA,CALO,EAchBwC,EAAA8B,GAAAA,WACkBjQ,GACZ,8BACA,6CACJ,IAAMkQ,EAAYn1F,KAAKo1F,KACvB,MAAO,CACL76D,OAAQ46D,EAAU56D,OAClBC,MAAO26D,EAAU36D,MAPA,EAkBrB44D,EAAAgC,GAAAA,WACE,MAAwB,OAApBp1F,KAAK4vF,EAoKXyF,SAAAA,GAEE,IAAMF,EAAY,CAChB56D,OAAQ,KACRC,MAAO,KACP2lB,MAAO,KACP6L,UAAW,MAEPspC,EAAa,EAAKL,KACxB,IAAKK,EAAW12F,OACd,OAAOu2F,EAKT,KAHMI,EAAUD,EAAWpyE,MAAK,SAACgxE,GAC/B,OA4PoCsB,IA5P7BtB,EAAKx3F,IAD4B,KAIxC,OAAOy4F,EAGT,IAAMM,EAAK,IAAerD,GACtBmD,EAAQtB,UAAkC,GAG3C7E,GAAHqG,GACGrG,GAAHqG,GAGG7G,GAAH6G,EAAY,GACZ,IAAMC,EAAwB9G,GAAH6G,EAAY,GACpCtG,GAAHsG,GAGA,IAAME,EAAyB/G,GAAH6G,EAAY,GAClCG,EAAqBhH,GAAH6G,EAAY,GAC9BI,EAAuBjH,GAAH6G,EAAY,GAChCK,EAAsClH,GAAH6G,EAAY,IAC/CM,EAAsC3G,GAAHqG,GASzC,IARA,IAAMO,EAAsC5G,GAAHqG,GACnCQ,EAAsC7G,GAAHqG,GACnCS,EAAsC9G,GAAHqG,GACnCU,EAAsC/G,GAAHqG,GACnCW,EAAsChH,GAAHqG,GACnCY,EAAqBjH,GAAHqG,GAClBa,EAA6B,GAC7BC,EAA2B,GACxBx4F,EAAI,EAAGA,EAAI23F,EAAoB33F,IACtCu4F,EAA2Bn4F,KAAQgxF,GAAHsG,IAChCc,EAAyBp4F,KAAQgxF,GAAHsG,IAEhC,GAAyB,EAArBC,EACF,IAAS33F,EAAI23F,EAAwB,EAAJ33F,EAAOA,IACnC6wF,GAAH6G,EAAY,GAGhB,IAAS13F,EAAI,EAAGA,EAAI23F,EAAoB33F,IAClCu4F,EAA2Bv4F,IAC1B6wF,GAAH6G,EAAY,IAEVc,EAAyBx4F,IACxBqxF,GAAHqG,GAKDxG,GAAHwG,GAEuB,IADjBe,EAAqBvH,GAAHwG,KAEnB7G,GAAH6G,EAAY,GAERgB,EAA2BxH,GAAHwG,GACxBiB,EAA4BzH,GAAHwG,GAE/B,IAAIkB,EADAC,EAAa,EAEbC,EAAY,EACZC,EAAe,EA2DnB,OA1DiC3H,GAAHsG,KAE5BmB,GAAiB3H,GAAHwG,GACdkB,GAAkB1H,GAAHwG,GACfoB,GAAgB5H,GAAHwG,GACbqB,GAAmB7H,GAAHwG,IAKlBN,EAAU36D,MACNp8B,OAAOq4F,GAAyBG,EAAaD,IAHf,IAApBH,GAA6C,IAApBA,EAAwB,EAAI,IAInErB,EAAU56D,OACNn8B,OAAOs4F,GAA0BG,EAAYC,IAJf,IAApBN,EAAwB,EAAI,IAepCO,EATcC,SAACt3E,GAEnB,IADA,IAAIvf,EAAS,EACJpC,EAAI,EAAO,GAAJA,EAAQA,IACtBoC,IAAYuf,GAAW3hB,EAAK,IAAO,GAAKA,EAE1C,OAAOoC,IAAW,CALa,CAAb62F,CASqBlB,GACnCmB,EAA8B,GAAnBrB,EAAuB,IAAM,IAG9Cz1C,EADYA,QAJS,CAAC,GAAI,IAAK,IAAK,KAAKw1C,GAKXE,EAC9B11C,GAAS,IAAM42C,EAAqB7rF,SAAS,IAAIi8C,cACjDhH,GAAS,IAAM82C,EAAWZ,EACtBD,IACFj2C,GAAS,IACLi2C,EAAiClrF,SAAS,IAAIi8C,eAEhDgvC,IACFh2C,GAAS,IACLg2C,EAAiCjrF,SAAS,IAAIi8C,eAEhD+uC,IACF/1C,GAAS,IACL+1C,EAAiChrF,SAAS,IAAIi8C,eAEhD8uC,IACF91C,GAAS,IACL81C,EAAiC/qF,SAAS,IAAIi8C,eAEhD6uC,IACF71C,GAAS,IACL61C,EAAiC9qF,SAAS,IAAIi8C,mBAGlDhH,GAAS,IACL41C,EAAiC7qF,SAAS,IAAIi8C,eAEpDguC,EAAUh1C,MAAQA,EAClBg1C,EAAUnpC,UAAiBglC,GAALA,GAEfmE,CArIK,CAnKEE,CAALA,MAiCX6B,SAAAA,GAEE,IAAM/B,EAAY,CAChB56D,OAAQ,KACRC,MAAO,KACP2lB,MAAO,KACP6L,UAAW,MAEPspC,EAAa,EAAKL,KACxB,IAAKK,EAAW12F,OACd,OAAOu2F,EAKT,KAHMI,EAAUD,EAAWpyE,MAAK,SAACgxE,GAC/B,OAsXoCiD,GAtX7BjD,EAAKx3F,IAD4B,KAIxC,OAAOy4F,EAKT,IAAMiC,EAA8BhI,GAF9BiI,EAAmB,IAAejF,GAAUmD,EAAQryF,OAIpD6zF,EAAwC3H,GAAjBiI,GAEvBC,EAA4BlI,GAAjBiI,GAKjB,GAHiBrI,GAAjBqI,GAGaE,GAAiChuF,SAAS6tF,GAAa,CAClE,IAAMZ,EAAmCvH,GAAjBoI,GAYxB,GAXwB,IAApBb,GAEe9H,GAAjB2I,EAA0B,GAGXrI,GAAjBqI,GAEiBrI,GAAjBqI,GAEiB3I,GAAjB2I,EAA0B,GAELlI,GAAjBkI,GAAgC,CAC5BG,EAAwC,IAApBhB,EAAyB,EAAI,GACvD,IAAK,IAAIz4F,EAAI,EAAGA,EAAIy5F,EAAkBz5F,IAEfoxF,GAAjBkI,IAEiBhI,GAAjBgI,EADM,EAAJt5F,EAC+B,GAEA,GARL,CAb8B,CAgCpE,GAHiBixF,GAAjBqI,GAGwB,KAFlBI,EAAmCxI,GAAjBoI,IAILpI,GAAjBoI,QACK,GAAwB,IAApBI,EAST,IAPiB/I,GAAjB2I,EAA0B,GAETrI,GAAjBqI,GAEiBrI,GAAjBqI,GACMK,EACezI,GAAjBoI,GACKt5F,EAAI,EAAGA,EAAI25F,EAAgC35F,IAEjCixF,GAAjBqI,GAKarI,GAAjBqI,GAEiB3I,GAAjB2I,EAA0B,GAEpBM,EACe1I,GAAjBoI,GACEO,EACe3I,GAAjBoI,GAEJ,IAAMQ,EAAoCjJ,GAAjByI,EAA0B,GAC1B,IAArBQ,GAEenJ,GAAjB2I,EAA0B,GAGX3I,GAAjB2I,EAA0B,GAE1B,IAAIS,EAAsB,EACtBC,EAAuB,EACvBC,EAAqB,EACrBC,EAAwB,EAmB5B,OAhBqB9I,GAAjBkI,KACFS,EAAuC7I,GAAjBoI,GACtBU,EAAwC9I,GAAjBoI,GACvBW,EAAsC/I,GAAjBoI,GACrBY,EAAyChJ,GAAjBoI,IAG1BlC,EAAU56D,OAASn8B,QAAS,EAAIy5F,IAC3BD,EAA4B,GAAK,GAA4B,EAArBI,EAChB,EAAxBC,GACL9C,EAAU36D,MAAQp8B,OAAoC,IAA3Bu5F,EAAsB,GACvB,EAAtBG,EAAiD,EAAvBC,GAC9B5C,EAAUh1C,MAAQ,SAuKV,IAvKoCi3C,EAuK5BlsF,SAAS,IAAIi8C,eAAe/7C,OAAO,IAA3C,IAtKY2rF,EAsKJ7rF,SAAS,IAAIi8C,eAAe/7C,OAAO,IAA3C,IAtKoDksF,EAsK5CpsF,SAAS,IAAIi8C,eAAe/7C,OAAO,GArKnD+pF,EAAUnpC,UAAiBglC,GAALA,GAEfmE,CAxHK,CA/BA+B,CAALA,KAJM,EAh1BjBxiE,EAAA,sBAAAwjE,IA8sCSA,GlHujBP,WkHvjBOzG,GApBAyG,GlH2kBP,MkH3kBOC,GA1WPD,GAAAtjE,UlHq7BA,akHr7BAsjE,GAAA,UAAAtjE,GAlBAsjE,GAAAtjE,UlHu8BA,mBkHv8BAsjE,GAAA,UAAAtjE,MAdAA,UlHq9BA,ckHr9BAsjE,GAAA,UAAAtjE,GAbAsjE,GAAAtjE,UlHk+BA,UkHl+BAsjE,GAAA,UAAAtjE,GA5BAsjE,GAAAtjE,UlH8/BA,akH9/BAsjE,GAAA,UAAAtjE,aA7DAsjE,GAAAtjE,UlH2jCA,akH3jCAsjE,GAAA,UAAAtjE,GA3CAsjE,GAAAtjE,UlHsmCA,akHtmCAsjE,GAAA,UAAAtjE,GAzBAsjE,GAAAtjE,UlH+nCA,YkH/nCAsjE,GAAA,UAAAtjE,YArIAsjE,GAAAtjE,UlHowCA,WkHpwCAsjE,GAAA,UAAAtjE,GAnBAsjE,GAAAtjE,UlHuxCA,ckHvxCAsjE,GAAA,UAAAtjE,GAzaAsjE,GAAAtjE,UlHgsDA,MkHhsDAsjE,GAAA,UAAAtjE,MAfAsjE,GAAAtjE,UlH+sDA,UkH/sDAsjE,GAAA,UAAAtjE,UAirCFsjE,GlH8hBE,UkH9hB8B7G,QAmChC+G,GACI,CAAC,IAAK,IAAK,IAAK,IAAK,GAAI,GAAI,GAAI,IAAK,IAAK,IAAK,IAAK,KCpwCvD7rF,SAAA,GAAY8rF,EAAOC,EAAQC,GASzBv4F,KAAKw4F,EAAO,KAGZx4F,KAAKy4F,GAAc,EAGnBz4F,KAAK04F,EAASL,EAGdr4F,KAAK24F,EAAUL,EAGft4F,KAAK44F,EAAaL,EAGlBv4F,KAAK64F,GAAkB,EAsEV,GASb,GAR4B,oBAAjBC,cACCplE,EACN,0DAMkB,oBAAbqlE,SA7EXC,KA8EOC,EAAYF,aAEjB,IAAwB,oBAAbG,SAMJ,CACKxlE,EAAW,6CACrB,GAAO,EAAP,OAFK,CAtFTslE,KAiFSC,EAAYC,SAjFrBF,KAkFSH,GAAkB,EACP5T,GACZ,WACA,8DACC,MAOmC,IA7F5C+T,KA6FgBC,EAAUE,eACdzlE,EAAW,6CACrB,GAAO,IA/FTslE,KAiGYC,EAAUE,cAAcC,eACtB1lE,EAlGdslE,KAkG8BC,EAAUE,cAAcE,cAItD,OAAiC,IAtGjCL,KAsGmBC,GACO,oBAAjBH,cAvGTE,KAwGOL,aAAmBW,mBAxG1BN,KAyGOC,EAAUE,cAAcC,cArClB,CArCT,IA/BJJ,KA+BiCR,GA/BjCQ,KAgCWC,EAAUE,cAAcI,aAhCnCP,KAgCqDL,KAhCrDK,KAkCSL,EAAQ9mF,UAAUkiB,OAAO,gBAlClCilE,KAqCWR,EArCXQ,KAoCaH,EACK,IArClBG,KAqC2BC,EAAUC,SArCrCF,KAsCeN,EAtCfM,KAuCeL,EAvCfK,KAwCeJ,GAEG,IA1ClBI,KA0C2BC,EAAUF,SA1CrCC,KA2CeN,EA3CfM,KA4CeL,EA5CfK,KA6CeJ,GAvEuB,CA8CxCY,SAAA,GAAAA,GACM,EAAKhB,GACP,EAAKG,EAAQ9mF,UAAUqf,IAAI,eAFlB,CA4FbuoE,SAAA,GAAAA,EAAc7lC,EAAO8lC,GACnB,IAAIC,EAuCIC,EAtCJC,GAkDEC,EAjDN,OAAQlmC,EAAM77B,UACZ,IAAK,aACH4hE,EAoCAI,EAnCA,MAEF,IAAK,YACHJ,EAiCDK,EA7BH,OAAQN,GACN,IAAK,OACHG,EAoCAI,EAnCA,MAEF,IAAK,MACHJ,EA+BDK,EA3BC,EAAK1B,IACP,EAAKC,EAAa7kC,EAAM1zC,GACxB,EAAKs4E,EAAK2B,kBAAkBvmC,EAAM1zC,IAAI,GACtC,EAAKs4E,EAAK4B,mBAAmBT,GAExB,EAAKd,GACR,EAAKL,EAAK6B,mBAAmBR,GA7BA,CCzGnCttF,SAAA,GAAYu7C,EAAOwyC,EAAezkB,EAAiB0kB,GAAW,IAAD,OAE3Dv6F,KAAK+1E,EAASjuB,EAGd9nD,KAAK81E,EAAmBD,EAGxB71E,KAAKm4D,EAAU,KAGfn4D,KAAKw6F,GAAiBF,EAItBt6F,KAAKy6F,EAAiB,CAAC,EAIvBz6F,KAAK06F,EAAqB,CAAC,EAK3B16F,KAAK26F,GAAsB,CAAC,EAG5B36F,KAAK46F,EAAc,KAGnB56F,KAAKokD,IAA4B,EAGjCpkD,KAAK66F,GAAYN,GAAY,KAM7Bv6F,KAAK86F,EAAU,CAAC,EAGhB96F,KAAKi4D,EAAgB,IAAetjC,EAGpC30B,KAAK+6F,EAAe,CAAC,EAGrB/6F,KAAKg7F,EAAiB,KAGtBh7F,KAAKi7F,EAAmB,IAAe72B,GAGvCpkE,KAAKk7F,GAAO,GAGZl7F,KAAKm7F,IAAoB,EAGzBn7F,KAAKo7F,IAAoB,EAGzBp7F,KAAKq7F,GAAuB,EAU5Br7F,KAAKs7F,EAPLt7F,KAAKu7F,EAAU,KAUfv7F,KAAKw7F,EAAoBC,GAALA,KAAuBz7F,KAAKi7F,GAGhDj7F,KAAK07F,GAAwB,EAG7B17F,KAAKi4E,EAAa,IAAe5G,IAAU,WAAM,gBAyS7CsqB,GAGJ,IAAMjuB,EAEKj2B,EAEHt4B,EACA9iB,EAWa,IASVo7C,EA5BM,OAAAvV,GAAA,uBAKjB,IAAWuV,KAFLi2B,EAAU,GAHC,EAKcotB,EAc7B,IAZM37E,EAPS,EAOA27E,EAAQrjD,GACjBp7C,EAAa8iB,EAAE,GARN,EAWV27E,EAAQrjD,GAAet4B,EAAE/T,MAAM,EAAG,GAGnC/O,GACFqxE,EAAQvvE,KAAK9B,EAAW4mE,EAAErS,MAAiBgrC,KAI1B,EAAAxsE,EAAAjQ,EAAE/T,MAAM,IAAR,YAAnB,SAAAhE,EAAA,eACO67D,EAAEvS,OhBrXJ,IAAex0B,GpCkEZiJ,EA4BFi9B,EA2wBUsO,UoDpfA1lE,IAQlB,IAAWysC,KA5BM,EAwBRmjD,GACPltB,EAAQvvE,KAzBO,EAyBGy8F,EAAY1iD,WAzBf,EA4Bc6iD,EAC7BrtB,EAAQvvE,KA7BO,EA6BG48F,EAAatjD,GAAaS,WAI9C,WAAMwN,QAAQE,IAAI8nB,GAAlB,EAjCiB,GAkCRzV,IAlCQ,EAmCVA,EAAcjkC,UAnCJ,EAoCVikC,EAAgB,MApCN,EAuCR8d,GAvCQ,EAuCOulB,GAvCP,EAwCVvlB,EAAOuV,YAxCG,EAwCcgQ,GAxCd,EA0CRvlB,GA1CQ,EA0COwlB,IA1CP,EA4CVxlB,EAAOuV,YA5CG,EA4CciQ,GA5Cd,EA6CVxlB,EAAOoI,OA7CG,EA8CVpI,EAAO8lB,uBAAwB,GA9CrB,EAiDZ9lB,EAAS,KAjDG,EAkDZwlB,EAAU,KAlDE,EAmDZD,EAAmB,KAnDP,EAoDZnjC,EAAU,OACVqjC,EAAe,KArDH,EAsDZZ,EAAc,KAtDF,EAuDZJ,GAAiB,KAvDL,EAwDZC,EAAiB,CAAC,EAxDN,EAyDZM,EAAe,CAAC,EAzDJ,EA0DZC,EAAiB,KA1DL,EAkEZF,EAAU,CAAC,EAlEC,EAqEZD,GAAY,KArEA,EAuEZiB,EAAa,CAAC,EAvEF,EAwEZhmB,EAAmB,KAxEP,QAzSqC6lB,CAALA,EAAA,IAGjD37F,KAAK+7F,GAAgB,EAGrB/7F,KAAKg8F,GT4B4BC,UStBjCj8F,KAAKk8F,GAHLl8F,KAAKm8F,IAA0C,EAM/Cn8F,KAAKo8F,GAA0B,IAAeh4B,GAG9CpkE,KAAKq8F,GAAyB,EAG9Br8F,KAAKs8F,GAAgB,KAIrBt8F,KAAK87F,EAAa,CAAC,EAYnB97F,KAAKu8F,GAHLv8F,KAAKw8F,EAHLx8F,KAAKy8F,GAHLz8F,KAAK08F,EAAuB,KAY5B18F,KAAK28F,GAAqB,IAAev4B,GAErCpkE,KAAK+1E,EAAOqL,SACdphF,KAAKq7F,EAAmD,gBAA5Br7F,KAAK+1E,EAAOqL,OAAO9rE,MAE/CtV,KAAKi4D,EAAc9jC,EAAOn0B,KAAK+1E,EAAOqL,OAAQ,WAAW,WACvD,EAAKia,EAAmD,gBAA5B,EAAKtlB,EAAOqL,OAAO9rE,KADc,IAI/DtV,KAAKi4D,EAAc9jC,EAAOn0B,KAAK+1E,EAAOqL,OAAQ,cAAc,WAC1D,EAAKia,EAAmD,gBAA5B,EAAKtlB,EAAOqL,OAAO9rE,KADiB,IAIlEtV,KAAKi4D,EAAc9jC,EAAOn0B,KAAK+1E,EAAOqL,OAAQ,cAAc,WAC1D,EAAKia,EAAmD,gBAA5B,EAAKtlB,EAAOqL,OAAO9rE,KADiB,IAvIT,CAsJ7DmmF,SAAA,GAAAA,EAAkBx4B,GAMhB,GALA,EAAKm4B,IAAoB,EAKrB7mF,EAAOygB,mBAAoB,CACxB,EAAKsmE,IACR,EAAKvlB,EAAO8lB,uBAAwB,GAGtC,IAAAj9D,EAAc,IAAI5J,mBAElB,EAAKijC,EAAc9jC,EACfyK,EAAa,kBAAkB,WAdlB,EAgBNw8D,IAAoB,CAFU,IAKzC,EAAKnjC,EAAc9jC,EACfyK,EAAa,gBAAgB,WApBhB,EAsBNw8D,IAAoB,CAFQ,GAdV,MAmB7Bx8D,EAAc,IAAIzJ,mBAIpB,EAAK8iC,EAAc3jC,GACfsK,EAAa,cAAc,WA2D/B9mB,IAAIyW,gBAzFequE,EAyFM1B,IA3D+Bj4B,EA4DtDpnB,SA5DmC,IAGrC,EAAKoc,EAAc3jC,GAAW,EAAKyhD,EAAQ,WAAW,WAjCnC,EAkCZolB,IAAoB,CADiC,IAK5D,EAAKD,GAAqC2B,GAAgBj+D,GAE1D,EAAKm3C,EAAO+mB,gBAAgB,OACxB,EAAKvB,GACP,EAAKxlB,EAAOuV,YAAY,EAAKiQ,GAE3B,EAAKD,GACP,EAAKvlB,EAAOuV,YAAY,EAAKgQ,GAE/B,EAAKC,EAAyBwB,GAAoB,EAAK7B,IACvD,EAAKnlB,EAAOj7D,YAAY,EAAKygF,GACzB,EAAKD,GACP,EAAKvlB,EAAOj7D,YAAY,EAAKwgF,GAE/B,EAAKvlB,EAAOoI,OAELv/C,CAtDY,UAiYf,GAAAo+D,EAAkBvlD,EAAakL,EAAQhD,GAC3C,IAAMs9C,EAEDC,EAAQptE,EAKTiI,EAKEolE,EAMEC,EAIEtzC,EAEAD,EAQArH,EAGExK,EAMJt7C,EAIF2gG,EA9C6C,OAAAn7D,GAAA,+BAI/C,OAHE+6D,EAA6C17C,GAE9C27C,EAAAI,EAAQxtE,EAAAytE,EACT,IAjSOC,SAAkB76C,EAAQlL,GAYrC,IAAMwlD,EAEAQ,EAOmBzoC,EAAAA,EAAzB,EACQj9B,EACF4nB,EAEE+9C,EAgBEC,EAEA17C,EA3CwC,OAAA/f,GAAA,sBAClD,OAAIygB,EAAOi7C,mBACT,IAAMj7C,EAAOi7C,qBAAb,GADF,OAGA,IAAKj7C,EAAOqS,aACV,OAAO,EAAPlxB,QAAO,GAET,GCkLkC,GDlL9B6e,EAAOqS,aCkLC6oC,mBDjLV,OAAO,EAAP/5D,QAAO,GAaT,IATMm5D,EAA6C17C,GAE7Ck8C,EAAa,IAAIjrE,IAOEwiC,EAAA5lC,EAAPuzB,EAAOqS,cAAAA,EAAAA,EAAAA,QAAzB5tD,EAAA,KAAAA,EAAA,SAKE,GALF,EAAAA,EAAA,MACQ2wB,EAAW+lE,EAAI/lE,UAAY4qB,EAAO5qB,UAAY,GAChD4nB,EAASm+C,EAAIn+C,QAAUgD,EAAOhD,QAAU,GAEtC+9C,EAAQ3lE,EAAW,IAAM4nB,GAC3B89C,EAAW1oF,IAAI2oF,GAInB,GADAD,EAAWvsE,IAAIwsE,GACXjmD,GAAewlD,EAAY37C,IAE7B,IAA2B0gC,GADI3/B,GAAYtqB,EAAU4nB,IAEnD,OAAO,EAAP7b,QAAO,QAYT,GATI2T,GAAewlD,EAAYz7C,GAC7B7B,EAAqB0O,GAAsB1O,GAClClI,GAAewlD,EAAYx7C,IACpC9B,EAAqB6O,GAAsB7O,EAAQ5nB,IAE/C4lE,EAA6BI,GAC/Bp7C,EAAQ5qB,EAAU4nB,GAChBsC,EAAyBM,GAC3BxqB,EAAU4nB,IACgB8O,GAAgBkvC,KzChQRvlD,GyCiQJ6J,GAChC,OAAO,EAAPne,QAAO,GAIb,SAAAA,QAAO,EAnD2C,IAiSVk6D,CAChCr7C,EAAQlL,GADZ,GAJ+C,OAUnD,GAPa3nB,EAAb,KAAKotE,EACD,IAEA,iEAEAnlE,EAAgCsqB,GAChCM,EAAO5qB,SAAU4nB,GACjBlI,GAAewlD,EAAY37C,GAAM,CAC9B28C,GAX4CA,EAWjClmE,EAXiC,EAWlBgkE,EAAep5C,EAAOu7C,UADlB,aAYnC,GATIf,EAb6C,EAazBhlC,EAAQgmC,gBACF1vC,GAAgB12B,KAdG,EAetCgkE,GACc75C,GAAY34C,SAASwuB,MAC5ColE,GAAe,GAEXC,EACmB76C,GACjBI,EAAO5qB,SAAU4nB,IACrBw9C,EAAJ,cAKE,GAJMrzC,EAA4ClK,GAC9Cq9C,EAAYx7C,GAAQ9B,GAAU,IAAIptC,MAAM,MACtCs3C,EAA4CjK,GAC9Cq9C,EAAYz7C,IAAQ7B,GAAU,IAAIptC,MAAM,OACxCu3C,IAAcD,EAAlB,cAEE,OA7B6C,EA4BxCwyC,GAAyB,EAC9B,IAAWW,GA7BkCA,EA6BhBC,EAAYx7C,EAAOkB,EAAQmH,GAAxD,GA7B6C,OA8B7C,WAAWkzC,GA9BkCA,EA8BhBC,EAAYz7C,GAAOmB,EAAQkH,GAAxD,GA9B6C,OA+B7C,SAAA/lB,SA/B6C,QAiCzC0e,EACDpK,GAAeglD,MAEZplD,EAAawK,IApC0B,EAqCxCu4C,EAAatjD,GAAeO,EACjCjgB,EACIigB,EAAWyK,cAAchL,EAAa2lD,IAvCG,OA0C3C1gG,EAAwCq7B,EA1CGqmE,EAw1DxBjmC,EAAQkmC,+BA9yDatmE,GAE9B04C,GA5CiC,EA4C5CwH,GAIL,IACEolB,EAjD+C,EAiD3B7B,EAAa8C,gBAAgB5hG,EAD/C,CAEF,MAAOqoE,GACP,MAAM,IAAe7oC,GpD9efiJ,EAgBHgsC,EA2SuBotB,KoDuLtBx5B,EACA,+BAxD2C,EAwDLy2B,EAAagD,WACnD,mBACA,KARc,CAlD6B,EA6DxCzC,IACPsB,EAAapgF,KACuCwhF,IA/DL,EAkE5CxmC,EAAc9jC,EACfkpE,EAAc,SACd,WAqmCN,IAAM70B,EAzqC6C+N,EAyqC5BukB,EArmCGrjD,GAqmCkB,GAK5C+wB,EAAUvF,EAAEvS,OAAO,IAAex0B,GpDzmDxBiJ,EAgBHgsC,EAmSwButB,KoDwIoBnoB,EA6qCjCR,EAAO/qE,MA7qC0BurE,EA6qCbR,EAAO/qE,MAAM4c,KAAO,EAKhD4gD,EAAU9vB,KA9mCR,IApEuC,EAqE5Cuf,EAAc9jC,EACfkpE,EAAc,aACd,WAAM,OAAKsB,GAvEkCA,EAuErBlnD,EAAlB,IAvEuC,EAwE5CgjD,EAAehjD,GAAe4lD,EAxEc,EAyE5C3C,EAAmBjjD,GAAe1f,EAzEU,EA0E5C4iE,GAAoBljD,KAAiBkL,EAAO4P,SAAS3zD,SA1ET,OA2GrDq/F,SAAA,GAAAA,EAAWlmE,EAAU6mE,EAAcV,GAC5B,EAAKtD,IACR,EAAKA,EAAc,IAAen1C,GAAW,EAAK+0C,IAC9C,EAAKI,IACP,EAAKA,E5DxhBJj2C,E4DwhBqC,EAAKwT,EAAQ0mC,oBAGlDjE,IAAAA,EAALA,EAAKA,EACD,EAAAsD,GAAY,EAAK95C,GAAgC43C,EAALA,EAAKA,GpCjaHj3C,uBoCgatBhtB,GpC1ZsBitB,uBoC0ZtBjtB,E5DtjB1B,EAAKmsB,EAAU,MAOjB,EAAKA,GAAU,EAHuBY,G4DkjBV/sB,M5D9iBxB,EAAKmsB,EAAQ46C,gBACf,EAAK56C,EAAQ46C,gB4D6iBuBF,G5D3iBpB3Z,GACZ,kCACA,wDAEF,EAAK/gC,EAAQ66C,gBACf,EAAK76C,EAAQ66C,gBAAgBrF,GAEbzU,GACZ,kCACA,wDAEN,EAAK7gC,EAA4B46C,E4DyhBU,CAe7CC,SAAA,GAAAA,GACE,QAAI,EAAKvD,GAGF,EAAKF,GAA+C,SAAhC,EAAKA,EAAagD,WAJvC,CAaRU,SAAA,GAAAA,EAAYznD,GACV,OAIA,EAJKjsC,OAAOU,KAAK,EAAKuuF,GAAgB77F,OAItC,QAAAb,E5DjbY0mD,I4DibZ,YP3rBgCqmC,GAAoB9xE,GAC3C,KAGO,GAAZA,EAAEpa,QAA4B,EAAboa,EAAEvP,MAAM,GACpB,EAEFuP,EAAEpa,OAASoa,EAAEvP,MAAM,GAAK,KOirBtB,IAFc,CAkBzBohF,SAAA,GAAAA,EAAUpzC,GACR,OAAKjsC,OAAOU,KAAK,EAAKuuF,GAAgB77F,OAIlC64C,GAA2B2I,GACtB,EAAKw6C,E5D5bFp2C,E4D8buB26C,GAC1BC,GAALA,EAAkB3nD,IAPb,IAFY,CAmFvB2nD,SAAA,GAAAA,EAAa3nD,GACX,GAAI,EAAKikD,GAAyB,EAAKL,EACrC,OAAO,KAET,IACE,OAAO,EAAKZ,EAAehjD,GAAa4nD,QADtC,CAEF,MAAOt6B,GAOP,OAAO,IAPW,CANI,CA+SpBu6B,SAAA,GAAAA,EACF7nD,EAAav0C,EAAMoC,EAAWq9C,EAAQ48C,EAAmBC,EACzDnmE,EAAoBomE,EAAuBC,GAC7C,IAAMzC,EAMI/9F,EA0BN8oF,EAEAjwD,EAKI,EAACo0D,EAAWz2E,EAQRiqF,EAgBAA,EAWFC,EAuCAC,EAQAC,EAyBF9X,EAOI2X,EA1JoD,OADLH,OAAA,IAAAA,GAAAA,EACzDnmE,OAAA,IAAAA,GAAAA,EAAoBomE,OAAA,IAAAA,GAAAA,EAAuBC,OAAA,IAAAA,GAAAA,EAAmBx9D,GAAA,+BAGhE,GAAIuV,IAFEwlD,EAA6C17C,IAEpBD,GAA/B,cACE,KTt9B2By+C,OSk9BmC,EAIrD/D,IAC8B,GAAnC12F,EAAUwjF,GADd,cAGiB,WAP6C,EAOlCsT,GAAX,GAP6C,OAOtDl9F,EAAS,IAP6C,EAQvD07F,E5D31BJt2C,E4D21BmCplD,EARwB,OAU9D,oB5Dt8BEogG,EAAaz+F,EAAQ+vC,EAAWC,EAAS6H,GAiB7C,IAAMsnD,EAIA/3D,EAQAg4D,EAEYA,EAAAA,EAAlB,EAGMC,EAlC4C,OAAAh+D,GAAA,sBAKlD,WAAMwjB,QAAQ7J,UAAd,GAGA,IARkD,EAQxCqI,IARwC,EAQvBC,EACzB,SAAArgB,SAGF,GAAiB,MAAb8M,GAAgC,MAAXC,EAEvB,OAdgD,EAa3CqT,EAAQi8C,UAAiCrpE,GAAQj2B,IACtD,EAAAijC,SAiBF,IAdMk8D,EAjB4C,EAiB3B57C,EACnBxT,EAlB8C,EAkB7B0T,EAGfrc,EAAO,CACXm4D,YAtBgD,EAsB9B97C,EAClB+7C,aAAczvD,EACd0vD,WAAYzvD,EACZmvD,UAAWA,GAIPC,EA7B4C,EA6B7B/7C,EAAQq8C,WACFzpE,GAAQj2B,GAASonC,EAAMyQ,EAAmB,IACnDunD,EAAA7wE,EAAA6wE,GAAAA,EAAAA,EAAAA,QAAlB,4BA/BkD,EAgC3Ct7C,EAAmBjR,EAAKgF,GAAO,KAAMzQ,GAEtCi4D,EAAeD,EAAQltE,QAAO,SAAC2gB,GACnC,OAAOA,EAAI9C,WAnCqC,EAmCnByT,GACzB3Q,EAAI9C,UApCwC,EAoCvB2T,CAFkB,IAlCK,EAuC7CJ,EAAWhnD,OAAO+iG,GAOE,MA9CyB,EA8CzCz7C,IA9CyC,EA+C3CA,EAAe7hD,KAAK4G,IAAIonC,EA/CmB,EA+CHyT,IA/CG,EA0D7CG,EAAa5hD,KAAKQ,IAAIytC,EA1DuB,EA0DT0T,GA1DS,Q4Ds8BzB+6C,CAVuC,EAUnD1E,EACP13F,EACAoC,EAAYA,EAAUsrC,UAAY,KAClCtrC,EAAYA,EAAUurC,QAAU,KAChCvrC,EAAYA,EAAUmiF,IAAU,GAAK,MAJzC,GAV8D,OAe9D,SAAA3jD,SAf8D,OAkBhE,GAAK47D,IAlB2D,EAkBzCrD,EAAvB,cACE,WAAWiD,GAnBmDA,EAmBtCrC,EAAYx7C,EAAOv+C,EAAMoC,EAAWq9C,EACxD48C,EAAmBC,EAAQnmE,EAAYomE,GACtB,GAFrB,GAnB8D,OAsB9D,WAAWH,GAtBmDA,EAsBtCrC,EAAYz7C,GAAOt+C,EAAMoC,EAAWq9C,EACxD48C,EAAmBC,EAAQnmE,EAAYomE,GACtB,GAFrB,GAtB8D,OAyB9D,SAAA37D,SAzB8D,OA4BhE,IA5BgE,EA4BtD22D,EAAehjD,GAEvB,SAAA3T,SAuGF,GApGIkkD,EAjC4D,EAiCrCyS,EAAehjD,GAAauwC,gBAEnDjwD,EAnC4D,EAmC5C2iE,EAAmBjjD,GAnCyB,EAoCvDsjD,EAAatjD,KACpB1f,EArC8D,EAqC9CgjE,EAAatjD,GAAa+oD,uBAExCl7F,IACI,EAlTVm7F,SAAAA,EAAgChpD,EAAav0C,EAAMoC,EAAWq9C,EAC1D5qB,GACF,IAAIo0D,EAAY,KACZz2E,EAAW,GAET8jB,EAAwC1C,GAAQ5zB,GACtD,GAAyBg/C,GAAY34C,SAASwuB,IACtCu0D,EAA6B6F,GAAa34D,IACrC56B,QAAU0G,KACbo7F,EAAoBpU,EAAOppE,MAAK,SAACyoE,GACrC,MACI,iDADGA,EAAMjrE,WADkC,MAIxBggF,EAAkBx9F,OACzCipF,EAAYvpF,KAAKmpD,MAAM20C,EAAkBx9F,MAAQ,KAUnD,EAAK4yE,EAAiB6qB,WAClB,CARgBC,CAClBzqD,QAAS7wC,EAAUsrC,UACnB1tC,KAAMs2B,EACN8yD,OAAQA,EACRqE,IAAKrrF,EAAUsrC,UACfjX,IAAKr0B,EAAUsrC,YAGgB,EAAGtrC,EAAUurC,eAE3C,GAAI9Y,EAASxuB,SAAS,SACzBjE,GACAA,EAAUyiF,IACVziF,EAAUyiF,GAAqBT,UAAW,CAC5C,IAAMA,EAAYhiF,EAAUyiF,GAAqBT,UACjD,IAAK51D,MAAM41D,GAAY,CAKrB,IAAI12C,EAAY,EACZiwD,GAAc,EACZlkG,EAAS,IAAI63E,IAN0B,MAA3B7xB,EAAOm+C,kBACY,EAAjCn+C,EAAOm+C,iBAAiBliG,QACxB,EAAKu5D,EAAQ4oC,uBAMfpkG,EAAOm3E,EAAQ,QAAQ,SAAC/0E,GACY+hG,IAAAA,EAAPn+C,EAAOm+C,iBA0E1C,GAAoB,IA1EwC/hG,EA0EpD1B,QACN,IAAA2jG,EA3E0DjiG,EA2E3C6zE,OAAOP,KACtBxuE,EA5E0D9E,EA4E9C6zE,OAAOP,KACnBiV,EA7E0DvoF,EA6E1C6zE,OAAOjB,IACvBsvB,EA9E0DliG,EA8E9B6zE,OAAOjB,IACnCuvB,EA/E0DniG,EA+EtC6zE,OAAOjB,IAC3BzxD,EAhF0DnhB,EAgFjD6zE,OAAOjB,IAChB/gC,EAjFsBtrC,EAiFAsrC,UAAaqwD,EAAwB3Z,OAE3DA,EAnF0DvoF,EAmF1C6zE,OAAOjB,IAGvBsvB,GADArwD,EArF0D7xC,EAoF1C6zE,OAAOf,KACJyV,EArFGhiF,EAqFoB0iF,iBArFpB1iF,EAsFwBsrC,UAC9CswD,EAvF0DniG,EAuFtC6zE,OAAOjB,IAC3BzxD,EAxF0DnhB,EAwFjD6zE,OAAOjB,IAChBqvB,EAzF0DjiG,EAyF3C6zE,OAAOP,KACtBxuE,EA1F0D9E,EA0F9C6zE,OAAOP,KAEf8uB,EA5FsDpiG,EA4FpC6zE,OAAOX,GA5F6BlzE,EA6FpD6zE,OAAOnyE,YA7F6C1B,EA6F3B6zE,OAAOpB,OAKnCsvB,GAAoBA,EAAiBv3F,SAASy3F,IA3IvCI,EA4IHjpC,EAAQ4oC,wBAGC,4BAAZC,EA/IMI,EAgJHtrB,EAAiBurB,MAGhBxwD,EAAUD,EAAaswD,EAAgB5Z,GAiBvC9yD,EAAQ,IAAe2vC,GpBz2B7BgC,OoBw2BMjjE,GAAmB0B,IAAP4wB,KAAO5wB,IAAI,SAdhB08F,CACX1wD,UAAWA,EACXC,QAASA,EACT0wD,YAAaP,EACbn9F,MAAOA,EACPyjF,UAAWA,EACX2Z,sBAAuBA,EACvBC,cAAeA,EACfhhF,GAAIA,EACJihF,YAAaA,MAQTz9B,YAAa,EAtKX09B,EAwKHtrB,EAAiBsJ,QAAQ5qD,GAE1BA,EAAMivC,kBAUM,gCAAZu9B,GACY,kDAAZA,KAEI1U,EAA6B6F,GAAagP,IACrCviG,QAxLLwiG,EAiMCtrB,EAAiB6qB,WAClB,CARajrF,CACfygC,QAASvF,EACT1tC,KAAMi+F,EACN7U,OAAQA,EACRqE,IAAK//C,EACLjX,IAAKiX,IAGuB,EAAGC,IAzJjC,IAEJl0C,EAAOm3E,EAAQ,QAAQ,SAAC/0E,GAyKpB6zE,IAAAA,EAzKuD7zE,EAyKvD6zE,OAAYv1E,EAzK2C0B,EAyK3C1B,QJt9BpBu1E,EAAOjB,IAGD6vB,EAAiC,KAFjCC,EAAkB7uB,EAAOjB,KACNiB,EAAOjB,IAET,WAAG,IAAK,IAGf,IAAZt0E,EACFqkG,EAAY9uB,EAAOjB,KAEbI,EAAOa,EAAOjB,IACdG,EAAMc,EAAOjB,IACnB+vB,EAAa3vB,EAAOnvE,KAAKC,IAAI,EAAG,IAAOivE,GI48BnC6vB,EA0B0CC,IAArCl0D,KAAWk0D,IADJl0D,KAAKA,KAAKm0D,IAAI,KAAM,EAAG,EAAG,EAAG,EAAG,IAC5BD,UJl+BpBJ,GIk+B8CI,UAf1CptE,EAAQ,IAAe2vC,GpBr6BzBiC,OoBo6BEljE,GAAmB0B,IAAP4wB,KAAO5wB,IAAI,SANZk9F,CACfH,cAAAA,EACAI,iBALuBA,IAAIr0D,KAAKi0D,EJ18BhCD,EI8xBkDpa,EA6KjB,QAxNvB0a,EAmOPlsB,EAAiBsJ,QAAQ5qD,EAxLM,IAC3Bz1B,IAAI,OAAkB81E,IACtB91E,IAAI,OAAkB81E,IACtBf,EAAQ,QAAQ,SAAC/0E,GAMhB6xC,EAFwCqxD,GACpCljG,EAAI6zE,OAAQ7zE,EAAI1B,SACD+vF,oBAAsB9F,EACzCuZ,GAAc,EACd9hG,EAAIpC,OAAOsnC,MARa,IASvBxnC,MAAMyG,GAAyB,GAClC29F,GAA4C,GAA7Bv7F,EAAU0iF,kBAC3BmE,EAAYv7C,EA1BO,CAFqB,MA+BlC7Y,EAASxuB,SAAS,SAAYwuB,EAASxuB,SAAS,WACpC4uF,GAAM3+D,KACvB,EAAKsiE,EAAWrkD,GAGnB,EAAKqkD,EAAWrkD,GAAa46C,YAF7B,EAAKyJ,EAAWrkD,GAAe,IAAeygD,GAM/B,OADXtnD,GADAsxD,EAAW,EAAKpG,EAAWrkD,GAAah7C,MAAM+8B,IACzB8vD,aAAa7xC,MAEtC00C,EAAYv7C,GAEdl7B,EAAWwsF,EAAS9N,eAEtB,MAAO,CAACjI,UAAAA,EAAWz2E,SAAAA,EA1EP,CAiTyB+qF,CAxC2BA,EAyC1DhpD,EAAav0C,EAAMoC,EAAWq9C,EAAQ5qB,GADnCo0D,EAAA,EAAAA,UAAWz2E,EAAA,EAAAA,SAED,MAAby2E,IAC+B,MA3C2B,EA2CnDuQ,GACLjlD,GAAewlD,EAAYz7C,KA5C6B,EA6CrDk7C,EAAuBvQ,EA7C8B,EA8CrDsQ,GAAgCn3F,EAAUsrC,UACd,MA/CyB,EA+CjD4rD,IACHmD,EAAe,EAhDqC,EAmD/ClD,IAnD+C,EAoD/CF,KACPoD,EArDsD,EAsD7CjD,EAtD6C,EAsDjBF,GAtDiB,EAwDnDG,GAAmB9gD,QAAQ8jD,KAGH,MA3D2B,EA2DnDnD,GACL/kD,GAAewlD,EAAYx7C,IA5D6B,EA6DrD+6C,EAAuBrQ,EA7D8B,EA8DrDoQ,GAAgCj3F,EAAUsrC,UACd,MA/DyB,EA+DjD8rD,IACHiD,EAAe,EAhEqC,EAmE/ClD,IAnE+C,EAoE/CF,KACPoD,EArEsD,EAsE7CjD,EAtE6C,EAsEjBF,GAtEiB,EAwEnDG,GAAmB9gD,QAAQ8jD,KAG9BC,EAA4Bt6F,EAAUsrC,UAAYu7C,GAGtB,MAD9BvpF,KAAK83D,IAAIstB,EAAkB4X,IACYJ,GAAUnmE,MAC/ComE,GAA6C,EAA5BG,IAClB5X,KACHA,EAAkB4X,EAjFwC,EAkFjD1D,KACFiG,GAnFmDA,EAoFpD1qD,GACA,WAAM,OAAK2qD,GArFyCA,EAqFlC3qD,EAAZ,GACN,MACC0qD,GAvFmDA,EAwFpD1qD,GACA,WAAM,OAAK4qD,GAzFyCA,EAyFrB5qD,EAAauwC,EAAtC,GACN,SAOJvwC,GAAewlD,EAAYz7C,MACzBy7C,EAAYz7C,MAlG0C,EAkG5Bi5C,KAlG4B,EAoGrD2B,GAAwBvgD,QAAQmsC,IAGrCtyE,EAAS9W,SAvGiD,EAwGvDk3E,EAAiB6qB,WAAWjrF,EAAUsyE,EACvC1iF,EAAYA,EAAUurC,QAAU,MAGpC0uD,GAAqB9nD,GAAewlD,EAAYz7C,KA5GY,EA6GpDo5C,GACHqD,GA9GuDA,EpC30Bdl5C,sBoC20Bc,EA+GnDg3C,GAA+B,GA/GoB,EAiHpDf,IACF6E,EAAY9nE,EAASxlB,MAAM,IAAK,GAAG,GAlHmB,EAmHvDyoF,EA3YF,IAAgB7hE,GA2YyB0mE,IAIzCv6F,GAGGw6F,EA1HsD,EA0HhC9E,EAAe/hE,EAAU/1B,IAClCtE,Q5Dt2BzB0jG,SAAAA,EACIxC,EAAgBlvD,EAAWC,EAAS0U,GAKtC,IAJA,IAAMF,EAAkBzU,EAAY,IAAMC,EAEpCsU,EAAc,IAAI3vB,IAEFsqE,GAAAA,EAAA1wE,EAAA0wE,IAAAA,QAAtB,kBAAsC,CAAtC,cACQ5/E,EAAKqiF,EAAQ5/C,OACbjP,EAAM6uD,EAAQ7uD,IACfyR,EAAYpwC,IAAImL,IACnBilC,EAAYvgD,IAAIsb,EAAI,IAAIsV,KAErB2vB,EAAYz1C,IAAIwQ,GAAInL,IAAIswC,IAC3BF,EAAYz1C,IAAIwQ,GAAItb,IAAIygD,EAAiB,IAKtCC,GAALA,EAAyC5R,EAAK6R,GAG1C7R,EAAI9C,WAAa,EAAKyT,GACtB3Q,EAAI9C,UAAY,EAAK2T,IAKzBY,EAAYz1C,IAAIwQ,GAAIxQ,IAAI21C,GAAiBlnD,KAAKu1C,GAC1CxzB,GAAM,EAAKwkC,GACb,EAAKP,EAAWhnD,OAAO,CAACu2C,IAvBU,CA2BtC,IAAiB,KAAAtkB,EAAA+1B,EAAYj5C,SAAZ,QAAjB9E,EAAA,KAAAA,EAAA,SAIE,IAJFA,EAAAA,EAAA,MACO,EAAKy9C,EAAmB9vC,IAAImL,IAC/B,EAAK2kC,EAAmBjgD,IAAIsb,EAAI,IAAIsV,KAER,KAAApG,EAAA+1B,EAAYz1C,IAAIwQ,GAAIhU,SAApB,QAA9B,4BACQk5C,EAAOD,EAAYz1C,IAAIwQ,GAAIxQ,IAAI21C,GACrC,EAAKR,EAAmBn1C,IAAIwQ,GAAItb,IAAIygD,EAAiBD,GAKvD,EAAKX,EADkB,MAArB,EAAKA,EACa7hD,KAAK4G,IAAIonC,EAAW,EAAKyT,GAEzBzhD,KAAKQ,IACrB,EAAKqhD,EAAc7hD,KAAK4G,IAAIonC,EAAW,EAAKyT,IAGlD,EAAKG,EAAa5hD,KAAK4G,IACnB,EAAKg7C,EAAY5hD,KAAKQ,IAAIytC,EAAS,EAAK0T,GAlDgB,C4Ds2BrC+9C,CA5HyC,EA4HrD1H,EACDkF,EACAx6F,EAAUsrC,UACVtrC,EAAUurC,QACVm3C,GAhIsD,EAwHvDgT,EAAep3E,KAAK1gB,EAAMm2B,KAxH6B,EAqIvD0hE,EAAatjD,GAAtB,cACS,WAtIuD,EAsI5CsjD,EAAatjD,GAAa+qD,SACxCt/F,EAAMy/C,EAAQr9C,EAvI4C,EAuI5Bk2F,EAAaiH,SAAUhrD,GADlD,IAtIuD,QAsI9Dv0C,EAAO,IAtIuD,OA8IhE,GAJAA,EA0uBFw/F,SAAAA,EAA2Bj6E,EAASmoB,EAAW6G,EAAaiB,GAG1D,IAAMiqD,EAA6B,MAAb/xD,EAChBgyD,EAAqB,EAAKjI,GAAoBljD,GAuBpD,OAtBM1a,EAAY,EAAK+4C,EAAiB+sB,MAYpC,0C/C73CEC,EAAkCjkB,G+Cg4CpC9hD,G/C/3CJ,EAAgB4C,MAAsBe,MAAwBd,MAClD4/C,MAAqBujB,MAAeD,G+C23C5C,GAK6C,OADxB3vC,GACjB,EAAKunC,EAAmBjjD,MAE9BhvB,ERz9DJu6E,SAAsBC,EAAmBvqD,GAcPwqD,SAAA,IAC9BC,GAAc,CADyB,CALbC,SAAA,EAACrkG,GAC3BymF,EAAcrnF,KAAKY,GACE81E,GAAS91E,EAFK,CANrC,IAGIumF,EAHA+d,EADEjqE,EAAqCtC,GAAQmsE,GAE/CE,GAAc,EAGZ3d,EAAgB,GAehB8d,EAAgB,GAoGtB,IAjGKvkG,IADUy1E,IACVz1E,IAAI,OAAQqkG,GACZrkG,IAAI,OAAQqkG,GACZrkG,IAAI,OAAQqkG,GACZrkG,IAAI,OAAQqkG,GACZrkG,IAAI,OAAQqkG,GACZtvB,EAAQ,QAAQ,SAAC/0E,GAChBumF,EAAUvmF,EACVymF,EAAcrnF,KAAKY,GACE61E,GAAkB71E,EAHf,IAKzB+0E,EAAQ,OAAQovB,GAChBpvB,EAAQ,OAAQovB,GAChBpvB,EAAQ,QAAQ,SAAC/0E,GAChBukG,EAAcnlG,KAAK,CACjBY,IAAAA,EACAwkG,GA+YoCC,YAlZd,IAMzB1vB,EAAQ,QAAQ,SAAC/0E,GAChBukG,EAAcnlG,KAAK,CACjBY,IAAAA,EACAwkG,GAyYoCC,YA5Yd,IAMzB1vB,EAAQ,QAAQ,SAAC/0E,GAChBukG,EAAcnlG,KAAK,CACjBY,IAAAA,EACAwkG,GAmYoCC,YAtYd,IAMzB1vB,EAAQ,QAAQ,SAAC/0E,GAChBukG,EAAcnlG,KAAK,CACjBY,IAAAA,EACAwkG,GA6XoCC,YAhYd,IAMzB1vB,EAAQ,QAAQ,SAAC/0E,GAChBukG,EAAcnlG,KAAK,CACjBY,IAAAA,EACAwkG,GAuXoCC,YA1Xd,IAMzB1vB,EAAQ,QAAQ,SAAC/0E,GAChBukG,EAAcnlG,KAAK,CACjBY,IAAAA,EACAwkG,GAiXoCC,YApXd,IAMzB1vB,EAAQ,QAAQ,SAAC/0E,GAChBukG,EAAcnlG,KAAK,CACjBY,IAAAA,EACAwkG,GA2WoCC,YA9Wd,IAMzB1vB,EAAQ,QAAQ,SAAC/0E,GAChBukG,EAAcnlG,KAAK,CACjBY,IAAAA,EACAwkG,GAqWoCC,YAxWd,IAMzB1vB,EAAQ,QAAQ,SAAC/0E,GAChBukG,EAAcnlG,KAAK,CACjBY,IAAAA,EACAwkG,GA+VoCC,YAlWd,IAMzB1vB,EAAQ,QAAQ,SAAC/0E,GAChBukG,EAAcnlG,KAAK,CACjBY,IAAAA,EACAwkG,GAyVoCC,YA5Vd,IAMzB1vB,EAAQ,QAAQ,SAAC/0E,GAChBukG,EAAcnlG,KAAK,CACjBY,IAAAA,EACAwkG,GA2VoCE,YA9Vd,IAMzB3vB,EAAQ,QAAQ,SAAC/0E,GAChBukG,EAAcnlG,KAAK,CACjBY,IAAAA,EACAwkG,GAqVoCE,YAxVd,IAMzB3vB,EAAQ,QAAQ,SAAC/0E,GAChBukG,EAAcnlG,KAAK,CACjBY,IAAAA,EACAwkG,GA+UoCE,YAlVd,IAMzB3vB,EAAQ,QAAQ,SAAC/0E,GAChBukG,EAAcnlG,KAAK,CACjBY,IAAAA,EACAwkG,GAyUoCE,YA5Ud,IAKvBhnG,MAAM28B,GAET+pE,EAEF,OAAO/pE,EAGT,GAA4B,GAAxBkqE,EAAc1kG,SAAgB0mF,EAIhC,MAD+BlkC,GAAMhoB,GAC/B,IAAe8C,G5CdbiJ,EAgBHgsC,EA2UwBuyB,K4CzUzBhrD,GAKN4qD,EAAcK,UACd,IAAuBL,IAAAA,GAAAA,EAAAl0E,EAAAk0E,IAAAA,QAAvB,4BAIED,EAAyCO,GACrCP,EAAqB/d,EAASue,EAAS9kG,IAAKymF,EAC5Cqe,EAASN,IAOf,OAAwB/jB,MAAgCujB,OAC/BriE,OACjBojE,EAAoB,IAAInjG,WAAWy4B,EAAYp7B,WACnDqlG,EAAoBrlG,aACJ4G,IAAIy+F,GACtBS,EAAkBl/F,IAAIw0B,EAAaiqE,EAAoBrlG,YAChD8lG,GAGFT,CAnKqC,CQy9DDU,CAAet7E,EAASiwB,IAG5DjwB,CA3BwD,CA1uBnDi6E,CA1IoDA,EA2I5Dx/F,EAAMoC,EAAYA,EAAUsrC,UAAY,KAAM6G,EAC9CnyC,EAAYA,EAAUmiF,IAAU,GAAK,OAErCniF,IA9I4D,EA8I1Cy2F,GAAiBtkD,GAAewlD,EAAY37C,GAAlE,eAIE,IAAIk+C,IAAUnmE,EAAd,eAIE,GAHI2uD,EAAkB1iF,EAAUsrC,UTrmCPmvD,OSk9BmC,EAsJnD/D,IAtJmD,EAuJlDK,GACN5kD,GAAewlD,EAAYx7C,IAxJ6B,EAyJnDg5C,EAAewC,EAAYz7C,IAHpC,eAIuB,WA1JqC,EA0J1Bm7C,GAAX,IA1JqC,QA0JpDgD,EAAe,IAEQ,GAAzB/8F,KAAK83D,IAAIilC,KACX3X,GAAmB2X,GA7JqC,QAoKvDwC,GApKuDA,EAqKxD1qD,GACA,WAAM,OAAK2qD,GAtK6CA,EAsKtC3qD,EAAZ,GACN,MACC0qD,GAxKuDA,EAyKxD1qD,GACA,WAAM,OAAK4qD,GA1K6CA,EA0KzB5qD,EAAauwC,EAAtC,GACN,MA3KwD,QAiLhE,WAAWma,GAjLqDA,EAiLnC1qD,GAAa,WAIdv0C,IAAAA,EAAAA,EA+V5B,GrC14CKs+C,SqC2iCU/J,GArLiDusD,EAohBnBnJ,GAA7C,CAGOA,IAAAA,EAvhByDmJ,EAuhBzDnJ,GDzkDH,EAAKrC,GAIP,EAAKA,EAAK8G,aCqkDkBp8F,EDrkDC,QAAS,EAAKu1F,GCmuCXzQ,EA+VlC,CAphBgEgc,EA2hB3DvJ,EAtWUhjD,GAsWkB6nD,aAAap8F,EA1WE,GAK7CoC,EAAYA,EAAUmiF,IAAU,GAAK,MALxC,IAjLgE,0BAmQ5D,GAAAhvD,EAAMgf,GACV,IAAMwlD,EADiB,OAAA/6D,GAAA,0BAEnBuV,IADEwlD,EAA6C17C,IACpBD,GAFR,EAGXs5C,EAGV,IANqB,EAMVA,EAAY7mE,OAAO,EAAGuD,KAAjC,GAFE,EAAAwM,SAKF,IAAWq+D,GATUA,EAUjB1qD,GACA,WAAM,OAAKwsD,GAXMA,EAWExsD,EAAa,EAXf,EAWuB+jD,EAAaiH,SAA/C,GACN,MAHJ,GATqB,EAaZpG,EACP,IAAW8F,GAdQA,EAeflF,EAAYx7C,GACZ,WAAM,OAAKwiD,GAhBIA,EAiBXhH,EAAYx7C,EAAO,EAjBR,EAiBgB+5C,EAAaiH,SADtC,GAEN,MAJJ,GADF,MAbqB,IAkSzBwB,SAAA,GAAAA,EAAQxsD,EAAa7G,EAAWC,GAC1BA,GAAWD,EAGR+tD,GAALA,EAAkBlnD,GAKpB,EAAKgjD,EAAehjD,GAAa1jB,OAAO6c,EAAWC,EATZ,CAmBzCuxD,SAAA,GAAAA,EAAO3qD,GAEL,IAAMwwC,EACF,EAAKwS,EAAehjD,GAAawwC,kBAC/BC,EAAkB,EAAKuS,EAAehjD,GAAaywC,gBAIzD,EAAKuS,EAAehjD,GAAa8rB,QAGjC,EAAKk3B,EAAehjD,GAAawwC,kBAAoBA,EACrD,EAAKwS,EAAehjD,GAAaywC,gBAAkBA,EAG9CyW,GAALA,EAAkBlnD,EAfA,CA4CpB4qD,SAAA,GAAAA,EAAoB5qD,EAAauwC,GAIT,EAAlBA,IAGFA,GAAmB,MAGrB,EAAKyS,EAAehjD,GAAauwC,gBAAkBA,EAG9C2W,GAALA,EAAkBlnD,EAb8B,CA6DlDknD,SAAA,GAAAA,EAAalnD,GACX,IAAI,EAAKikD,EAAT,CAGA,IAAMlzB,EAAY,EAAKsyB,EAAQrjD,GAAa,GAEvC+wB,IAKLA,EAAUvF,EAAEpnB,UACPqoD,GAALA,EAAmBzsD,GAXnB,CADwB,CAwB1B0qD,SAAA,GAAAA,EAAkB1qD,EAAahuC,EAAOivC,GAYpC,OAXgB+3B,GAAhB,EAAKwH,GACCzP,EAAY,CAChB/+D,MAAOA,EACPw5D,EAAG,IAAemB,GAClB1rB,IAAAA,GAEF,EAAKoiD,EAAQrjD,GAAat5C,KAAKqqE,GAES,GAApC,EAAKsyB,EAAQrjD,GAAa74C,QACvBulG,GAALA,EAAqB1sD,GAEhB+wB,EAAUvF,CAZwB,CAuBrCmhC,SAAA,GAAAA,EAA0BC,GAI9B,IAAMC,EAKN,EAAW7sD,EAEH+wB,EAiEK/wB,EA5EsB,OAAAvV,GAAA,+BASnC,IAAWuV,KARKg5B,GADmB,EAC9BwH,GAGCqsB,EAAa,GAKnB,KATmC,EASJ7J,GAA/B,kBACQ8J,MAAQ,IAAengC,GACvBoE,EAAY,CAChB/+D,MAAOA,SAAAA,GAAAA,OAAAA,WAAM,OAAA86F,EAAAA,MAAM1oD,SAAN,CAANpyC,CAAAA,CAAAA,GACPw5D,EAAGshC,EAAAA,MACH7rD,IAAK,MAd0B,EAiB5BoiD,EAAQrjD,GAAat5C,KAAKqqE,GAC/B87B,EAAWnmG,KAAKomG,EAAAA,OAEwB,GApBP,EAoBxBzJ,EAAQrjD,GAAa74C,QAC5B4pE,EAAU/+D,QAOZ,OADE,OACF,IAAMi8C,QAAQE,IAAI0+C,GAAlB,GA5BiC,OA2B/B,aA3B+B,OAmDjC,MAtBOt5F,EAAAA,GA7B0B,OAiEjC,OADE,SACF,IAAMq5F,IAAN,GAjEiC,OA4EjC,IAAW5sD,KAFH,KA1EyB,EA4EFgjD,EACxByJ,GA7E0BA,EA6EZzsD,GAHb,aA1EyB,OAmEjC,MAAM,IAAevb,GpD3uDbiJ,EAgBHgsC,EA2SuBotB,KoD+6CrBx5B,EAAAA,GAlE0B,EAwExBgR,EAAO/qE,OAAS,gCACrB,MAzE6B,IAuFrCk5F,SAAA,GAAAA,EAAczsD,GAEZ,EAAKqjD,EAAQrjD,GAAa90B,QACrBwhF,GAALA,EAAqB1sD,EAHI,CAW3B0sD,SAAA,GAAAA,EAAgB1sD,GAEd,IAAM5uC,EAAO,EAAKiyF,EAAQrjD,GAAa,GACvC,GAAI5uC,EACF,IACEA,EAAKY,OADH,CAEF,MAAOs7D,GACe,sBAAlBA,EAAU7jE,KACZ2H,EAAKo6D,EAAEvS,OAAO,IAAex0B,GpDlxDzBiJ,EAgBHgsC,EA6TeqzB,KoDy8CZ/sD,IAEJ5uC,EAAKo6D,EAAEvS,OAAO,IAAex0B,GpDxxDzBiJ,EAgBHgsC,EA2SuBotB,KoDi+CpBx5B,EACA,EAAKgR,EAAO/qE,OAAS,gCACrBnC,EAAK6vC,MAENwrD,GAALA,EAAmBzsD,EAhBD,CANK,CAwU7Bve,SAAA,GAAAA,EAAMurE,GACJ,OAAYL,GAALA,GACH,WAAM,OAtIN9hC,SAAAA,EAAOmiC,GAEX,IAAMxH,EAGAyH,EAMAC,EACAC,EAWEl3B,EACKj2B,EAGAA,EAEHt4B,EACA9iB,EAWa,IAIVo7C,EACH4lD,EAQFwH,EAUAC,EACAC,EAGAC,EACFC,EACEC,EAYoB,IAA1B,EACQC,EACAxiD,EAYFkF,EAhGkB,OAAA3lB,GAAA,+BAwBxB,IAAWuV,KAtBPwlD,EAA6C17C,GAFzB,EAGrBm6C,GAAwB,EAHH,EAIrBW,GAAyB,EACxBqI,EALoB,EAKD3uB,EAAO2uB,YAM1BC,EAXoB,EAWS5uB,EAAOqvB,SACpCR,EAZoB,EAYO7uB,EAAO8E,OAZd,EAajBsgB,KAbiB,EAiBnBplB,EAAOqvB,UAAW,GAGrB,OApBsB,EAqBnBntC,EAAchkC,KAEby5C,EAAU,GAvBQ,EAwBOqtB,EAC7BrtB,EAAQvvE,KAzBc,EAyBJ48F,EAAatjD,GAAaS,WAE9C,IAAWT,KA3Ba,EA2BOqjD,EAc7B,IAZM37E,EA7BgB,EA6BP27E,EAAQrjD,GACjBp7C,EAAa8iB,EAAE,GA9BC,EAiCjB27E,EAAQrjD,GAAet4B,EAAE/T,MAAM,EAAG,GAGnC/O,GACFqxE,EAAQvvE,KAAK9B,EAAW4mE,EAAErS,MAAiBgrC,KAI1B,EAAAxsE,EAAAjQ,EAAE/T,MAAM,IAAR,YAAnB,0BACO63D,EAAEvS,OhB1jEN,IAAex0B,GpCkEZiJ,EA4BFi9B,EA2wBUsO,UoDitCE1lE,IAGlB,IAAWysC,KA7Ca,EA6COgjD,EAAgB,CACvC4C,EA9CgB,EA8CI5C,EAAehjD,GACzC,IA/CsB,EAgDf+jD,EAAa6J,mBAAmBhI,EADnC,CAEF,MAAO/pE,GAAI,CAJgC,CAM/C,WAAMoyB,QAAQE,IAAI8nB,GAAlB,GAnDwB,OAyDxB,OAzDwB,EAoDnBqtB,EAAe,CAAC,EAEf8J,EAtDkB,EAsDMrJ,EAAaiH,SAtDnB,EAuDnBxH,EAAmB,IAAe72B,GAvDf,EAwDnBo3B,EAAoBC,GAxDDA,EAAA,EAwDwBR,GAChD,IAzDwB,EAyDbA,EAAX,GAzDwB,QA0DnBvpE,MAAMmzE,IAAqBA,EA1DR,EA2DjBrJ,EAAaiH,SAAWoC,GACnBnzE,MA5DY,EA4DD4qE,KA5DC,EA4DsBA,KA5DtB,EA6DjBd,EAAaiH,SA7DI,EA6DYnG,IAG9BwI,EAAoB,IAAe1gC,GACnC2gC,EAjEkB,EAkEUvJ,EAAauJ,cAEzCC,EAAiBP,EAActjG,KACjC8jG,EAA4B,EAC1BC,EAAsBA,aAC1BD,IACkCD,IAChCF,EAAkBjpD,UAzEE,EA0Efoc,EAAcxjC,GAASswE,EAAe,kBACvCG,GAL0B,EAtEV,EA+EnBjtC,EAAc9jC,EAAO4wE,EAAe,kBACrCG,GAEsB,EAAA91E,EAAAq1E,EAAcv4F,QAAd,WAlFF,OAkFxB,gBAcM27C,EAAQ48C,EAAc/0F,IAAIutF,EAAYx7C,KAC/BoG,EAAMy9C,sBAjGK,EAkGjBjJ,GAAyB,GAlGR,EAsGnBtmB,EAAO2uB,YAAcA,EAE1B,IAAMI,EAAN,KAtBA,UACQK,EAnFgBI,EA1ChB9K,EA6H6ChjD,GA1HhD,CACLuwC,gBAsCwBud,EAtCF9K,EAyH+BhjD,GAzHHuwC,gBAClDC,kBAqCwBsd,EArCA9K,EAwH6BhjD,GAxHDwwC,kBACpDC,gBAoCwBqd,EApCF9K,EAuH+BhjD,GAvHHywC,iBAL3C,KA6HCvlC,EAAS8hD,EAAc/0F,IAAI+nC,GAEjC,IAAWulD,GAtFWA,EAsFOvlD,EAAakL,EAAQA,EAAOhD,QAAzD,IAtFsB,SAuFb08C,GAvFa,EAwFfvB,EAAQmC,EAAYx7C,GAAS,GAxFd,EAyFfq5C,EAAQmC,EAAYz7C,IAAS,IAzFd,EA2Ffs5C,EAAQrjD,GAAe,GAGe0tD,GA9FvBK,EArBhB/K,EAmH0BhjD,KA9FV+tD,EAhBrB/K,EA8G+BhjD,GA9GHuwC,gBA8GgBmd,EA7GxCnd,gBAeiBwd,EAbrB/K,EA2G+BhjD,GA3GHywC,gBA2GgBid,EA1GxCjd,gBAYiBsd,EAXrB/K,EAyG+BhjD,GAzGHwwC,kBAyGgBkd,EAxGxCld,mBA4FP,wBAlFwB,OAyGhB,KAzGgB,EA0GnByT,GAAwB,EAEbjrB,GA5GQ,EA4GnBwH,GA5GmB,EA8GnBhgB,EAAc3jC,GA9GK,EA8GWyhD,EAAQ,kBAAkB,WA9GrC,EAkHbkC,EhB9qEDhP,IgB4jEc,EAsHjB8M,EAAOqvB,SAAWT,EAClBC,GAvHiB,EAwHf7uB,EAAO0vB,OAVmD,IAL3D,OAzGgB,IAsIXnjC,CAFIA,EAEGmiC,EAAZ,GAFS,CD7nErBiB,GAAA,UAAA1xE,QAAAA,WACMh0B,KAAKw4F,IACPx4F,KAAKw4F,EAAKr+E,QACVna,KAAKw4F,EAAO,KAHN,EA3FZ9jE,EAAA,kBAAAgxE,IA2FEA,GAAA9wE,UnH4qDA,QmH5qDA8wE,GAAA,UAAA9wE,SCqUAsjB,EAAAA,GAAAA,WAAAA,QAAAA,WACE,OAAOl4C,KAAKi4E,EAAW//B,SADf,EAgHJytD,EAAA/hF,KAAAA,SAAK6gF,EAAe7F,EACtBlF,EACAkM,GAFsBhH,OAAA,IAAAA,GAAAA,EACtBlF,OAAA,IAAAA,ETnX+BuC,USmX/BvC,EACAkM,OAAA,IAAAA,GAAAA,EAA8C,IAC1C3I,EAoBoB,IAA1B,EACQt6C,EAUFkF,EAhC0C,cAAA3lB,GAAA,+BAGhD,OAFM+6D,EAA6C17C,GAEnD,IAAM,EAAK05C,EAAX,GAHgD,OAKhD,EAAKc,EAAgB6C,EACrB,EAAK5C,GAAgBtC,EACrB,EAAKyC,GACHyJ,EAEF,EAAK1J,IAAsC,EAAKH,GThZnBgE,OSiZzB,EAAK/D,KACJ,EAAKG,GAEV,EAAKL,EAAa,CAAC,EACnB,EAAKY,EAAuB,KAC5B,EAAKD,GAAgC,KACrC,EAAKD,EAAuB,KAC5B,EAAKD,GAAgC,KACrC,EAAKI,GAAqB,IAAev4B,GAEf,EAAAh1C,EAAAq1E,EAAcv4F,QAAd,WArBsB,OAqBhD,wBAGE,OAHF,UACQy2C,EAAS8hD,EAAc/0F,IAAI+nC,GAEjC,IAAWulD,GAALA,EAAuBvlD,EAAakL,EAAQA,EAAOhD,QAAzD,GAxB8C,OAyB1C,EAAK08C,GACP,EAAKvB,EAAQmC,EAAYx7C,GAAS,GAClC,EAAKq5C,EAAQmC,EAAYz7C,IAAS,IAElC,EAAKs5C,EAAQrjD,GAAe,GARhC,wBArBgD,QAgC1CoQ,EAAQ48C,EAAc/0F,IAAIutF,EAAYx7C,KAC/BoG,EAAMy9C,sBACjB,EAAKjJ,GAAyB,GAlCgB,UAmIlDsJ,EAAA/zE,UAAAA,SAAUC,GACR7xB,KAAKm4D,EAAUtmC,EACX7xB,KAAK46F,IACP56F,KAAK46F,E5DhgBFj2C,E4DggBmC9yB,EAAOgtE,kBAH/B,EAyHlB8G,EAAAza,GAAAA,WAIE,IAAMz4B,EAAO,CACXozC,MAAO7lG,KAAK07F,EAAwB,GAClBzQ,GAAgBjrF,KAAK+1E,EAAOspB,UAC9Cx3C,MACkBojC,GAAqBmU,GAALA,KrC7iB/B39C,UqC8iBHqG,MACkBmjC,GAAqBmU,GAALA,KrChjB/B59C,UqCijBHvW,KAAM,IAGR,GAAIjrC,KAAK46F,EAAa,CACpB,IAAMnxF,EAAQzJ,KAAK46F,E5DjgBTn2C,E4DkgBJ/6C,EAAM1J,KAAK46F,E5D1fPp2C,E4D4fG,MAAT/6C,GAAwB,MAAPC,GACnB+oD,EAAKxnB,KAAK9sC,KAAK,CAACsL,MAAOA,EAAOC,IAAKA,GALjB,CAQtB,OAAO+oD,CAtBS,EA2jBZkzC,EAAA5xE,OAAAA,SAAO0jB,EAAa7G,EAAWC,GAAU,IACvCosD,EADsC,cAAA/6D,GAAA,0BAExCuV,IADEwlD,EAA6C17C,IACpBD,GAC7B,IAAM,EAAKs5C,EAAY7mE,OAAO6c,EAAWC,GAAzC,GAEA,IAAWsxD,GAALA,EACF1qD,GACA,WAAM,OAAKwsD,GAALA,EAAaxsD,EAAa7G,EAAWC,EAArC,GACN,MAHJ,GAII,EAAKwrD,EACP,IAAW8F,GAALA,EACFlF,EAAYx7C,GACZ,WAAM,OAAKwiD,GAALA,EAAahH,EAAYx7C,EAAO7Q,EAAWC,EAA3C,GACN,MAHJ,GADF,MAT0C,KA+DxC80D,EAAAG,MAAAA,SAAMruD,GAAc,IAGlBwlD,EAHiB,cAAA/6D,GAAA,0BAInBuV,IADEwlD,EAA6C17C,IACpBD,GAE7B,EAAAxd,SAEF,IAAWq+D,GAALA,EACF1qD,GACA,WAAMsuD,EAoSLhwB,EAAO2uB,aAAe,KAGtB/F,GAvSKoH,EAAYtuD,EAAZ,GACN,MAHJ,GAII,EAAK4kD,EACP,IAAW8F,GAALA,EACFlF,EAAYx7C,GACZ,WAA8BA,IAAAA,EAAZw7C,EAAYx7C,EAAxBskD,EA+RPhwB,EAAO2uB,aAAe,KAGtB/F,GAlSOoH,EAkSMtuD,EAlSN,GACN,MAHJ,GADF,MAZuB,KAyKnBkuD,EAAAK,YAAAA,SAAYC,GAAS,IAAD,cAAA/jE,GAAA,YACxB,WAAWkiE,GAALA,GAA+B,WAK1BnF,GAALA,IAAiD,WAAjC,EAAKzD,EAAagD,aAKlCyH,EACF,EAAKzK,EAAawK,YAAYC,GAE9B,EAAKzK,EAAawK,cAbqB,IAA3C,EADwB,KAuBpBL,EAAAO,GAAAA,SAAYzD,GAAW,IAAD,cAAAvgE,GAAA,YAC1B,WAAWkiE,GAALA,GAA+B,WAKnC,GAAI3B,EAAW,EAAKjH,EAAaiH,SAC/B,IAAKhrD,IAAMA,KAAe,EAAKgjD,EAAgB,CAC7C,IAAM0L,EAAiB,CACrB18F,MAAOA,WAAO,EACdw5D,EAAG,IAAemB,GAClB1rB,IAAK,MAEP,EAAKoiD,EAAQrjD,GAAa1xB,QAAQogF,EANW,CAUjD,EAAK3K,EAAaiH,SAAWA,EAC7B,EAAKnG,GAAgBmG,CAjBoB,IAA3C,EAD0B,KA2B5BkD,EAAAS,YAAAA,WACE,OAAOpmG,KAAKw7F,EAAaiH,QADb,EAs0BhB,IAAA5F,GAAgDtoF,EAAOuD,IAAIuW,gBA0BzDg4E,GAAUA,WEz7EV95F,SAAA,GAAY+5F,EAAuBC,EAC/BC,GAEFxmG,KAAKymG,EAAyBH,EAG9BtmG,KAAK0mG,EAAqBH,EAM1BvmG,KAAK2mG,EAHL3mG,KAAK4mG,EAAYtvE,IAWjBt3B,KAAK6mG,EAAsB,EAuB3B7mG,KAAK8mG,EAZL9mG,KAAK+mG,EAAuB,KAe5B/mG,KAAKgnG,EAAe,EAGpBhnG,KAAKinG,GAAU,EAGfjnG,KAAKknG,GAAwB,EAG7BlnG,KAAKmnG,EAAiB,EAGtBnnG,KAAKonG,OAzDH,IAAAZ,GAAAA,EAmEFxmG,KAAKqnG,EAA0B,EAG/BrnG,KAAKsnG,GAAmB,EAGxBtnG,KAAKunG,EAA0BjB,CAzEJ,CCD7B/5F,SAAA,GAAYi7F,EAAgBC,EAAuBroB,GAEjDp/E,KAAK0nG,EAAWtoB,EAEhBp/E,KAAK2nG,EAAkBH,EAEvBxnG,KAAK4nG,EAAoCC,GAAfL,GAE1BxnG,KAAKu8B,EAASirE,EA4JFzuC,EAAc2rC,YA1J1B1kG,KAAK8nG,EA+JEp6D,KAAK6rB,MAAQ,IA7JpBv5D,KAAK+nG,GAAW,EAEhB/nG,KAAKgoG,EAAkB,EAQvBhoG,KAAKioG,EAAyBR,EAG9BznG,KAAKkoG,EAAWC,WAAO,CAzBmC,CAuI5D57F,SAAA,GAAYsvD,GAEV77D,KAAK+4D,EAAgB8C,CAFG,CAM1BgsC,SAAA,GAAAA,GAYE,GATI,EAAK9uC,EAAc8hB,QAGgB,GAAnC,EAAK9hB,EAAc0B,cAMmB,GAAtC,EAAK1B,EAAcsmC,SAASzgG,OACvB,cA4BoC,GAzBtC,kBA2BP,IAA2B,SAAAwwB,EAAgB67D,GA3BpC,IAAAoU,YA2BoB,QAA3B,kBAEE,KAAI+I,GAFK,EAAX,SAAY3+F,MAEkB,IAIxB2+F,EANa,EAAA1+F,IAMS,IAA1B,CAIA,GAAO,EAAP,OAJA,CAOF,GAAO,CAfsC,CA7B7C,QAZuB,CCnIzB6C,SAAA,GAAYu7C,EAAOugD,EAAUx2E,EAAQy2E,EAAelpB,GAAU,IAAD,OAE3Dp/E,KAAK0nG,EAAWtoB,EAGhBp/E,KAAK+1E,EAASjuB,EAGd9nD,KAAKuoG,EAAYF,EAGjBroG,KAAKm4D,EAAUtmC,EAGf7xB,KAAKi4D,EAAgB,IAAetjC,EAGpC30B,KAAKwoG,GAAwB,EAG7BxoG,KAAKyoG,EAAkB3gD,EAAM02C,WAM7Bx+F,KAAK0oG,EAHL1oG,KAAK2oG,EAAa,EAYlB3oG,KAAK4oG,EAAiBN,EAGtBtoG,KAAK6oG,GAAsB,EAE3B7oG,KAAKi4D,EAAc9jC,EAAO2zB,EAAO,WAAW,WAAM,OAAKghD,GAALA,EAAA,IAWlD9oG,KAAK+oG,EAEFtkE,IAFiCvD,IAAM,WACnC4nE,GAALA,EAD8C,IAE7CrkE,GAAUzkC,KAAKm4D,EAAQ6wC,iBArDiC,UA6H7D,GAAAF,GAEE,GAA8B,GAA1B,EAAK/yB,EAAOyoB,WAAhB,CAKA,GAAI,EAAKzoB,EAAOkzB,SACd,IAAK,EAAKT,EACR,YAGF,EAAKA,GAAwB,EAM/B,IAAI,EAAKzyB,EAAO8E,QAAW,EAAK9E,EAAO2uB,aAAe,EAAKiE,IACvD,EAAK5yB,EAAOqvB,UAAY,EAAKrvB,EAAO2uB,aAAe,EAAKiE,GAD5D,CAYI,SAJA,EAAK5yB,EAAOyoB,YAAc,EAAKiK,IACjC,EAAKA,EAAkB,EAAK1yB,EAAOyoB,cAG5BoK,GAAAA,EAAAA,GAAL,CDzGJ,IAAMM,GCyGqB,ODzGTvB,EAEZE,EAA8BA,GAALqB,GACzBrlG,EAAQqlG,EAqGFnwC,EAAc2rC,YApGpByE,EAyGCz7D,KAAK6rB,MAAQ,IAvGC,EAAKh9B,GAAU14B,GACf,EAAK+jG,GAAsBC,IAG9C,EAAKC,EAAqBqB,EAC1B,EAAK5sE,EAAS14B,EACd,EAAK+jG,EAAqBC,EAC1B,EAAKE,GAAW,IAKZqB,GAFAC,EAAeF,EAAkB,EAAKrB,IAEJ,EAAKG,GACrBJ,IAA2B,EAAKE,KAGtD,EAAKG,EAAS,EAAK3rE,EAAQ8sE,GAC3B,EAAKtB,GAAW,EAGhB,EAAKxrE,EAAS2sE,EA8EJnwC,EAAc2rC,YA7ExB,EAAKsD,IACL,EAAKN,EAAS,IAAevjC,GvBmElBoD,mBwBUc,GDzEpB6hC,CCyEH,KAME1E,EAAc,EAAK3uB,EAAO2uB,YAI1B4E,EXvERC,SAAmBvwF,EAAGivB,EAAMuhE,GAM1B,OAHKxwF,GAAMA,EAAEpa,SAGmBksF,GAAoB9xE,IAQtC,IAJRsiB,EAAsB2vD,GAAgBjyE,GAAGuiB,WAAU,SAACC,EAAMz9B,EAAGunC,GACjE,OAAO9J,EAAK/xB,MAAQw+B,IACV,GAALlqC,GAAUunC,EAAIvnC,EAAI,GAAG2L,IAAMu+B,GAAQuhE,EAFiC,KAIzDluE,EAPT,IAP4B,CWuEQmuE,CAHvCpK,EAAW,EAAKtpB,EAAOspB,SAIfqF,EAHgB,EAAKvsC,EAAQuxC,uBAM3B,MAAZJ,IAMY,GAAZA,GAAkB,EAAKT,MAMvBc,EAAStK,EAAS51F,MAAM6/F,InD/IxBrqE,UAAU/sB,UAAUD,MAAM,WmDoJNyuB,MACAf,QAEtBgqE,EAAS/mG,KAAK+c,KAA6B,KAAvBgqF,EADD,EAAKxxC,EAAQyxC,aACkB,KAGhDD,GADY,EAAKpB,EAAUsB,MA4CsBC,KAvCpCH,EAASjF,IASV,GAAZ4E,GAOEjK,EAAS31F,IAAI4/F,EAAW,GAG9B,EAAKvzB,EAAO2uB,YAAciF,EAKtBjF,GAAe,EAAKiE,IACtB,EAAKA,EAAagB,GAEpB,EAAKjB,IACL,EAAKhB,EACD,IAAevjC,GxBhGVoC,ewBcT,CAhBA,CAFe,CCjJjBwjC,SAAO,GAAkBluC,EAAc2iC,EAAYwL,EAAcrlF,GAC3D65E,GAAcyL,iBAAiBC,cACjCruC,EAAa2iC,YAAcA,EAC3B75E,KAGMwlF,EACcC,GAA6BvmG,QAAQ6L,IAAI8uF,GAC7DwL,EAAa11E,GAAWunC,EAAcsuC,EAAWxlF,GARsB,EH6F3EyhF,EAAAA,GAAAA,WAAAA,YAAAA,WACE,OAAOpmG,KAAK4mG,CADA,EASdyD,EAAAC,GAAAA,WACE,OAAOtqG,KAAK6mG,CADU,EAYxBwD,EAAAE,GAAAA,SAAyBjE,GAGvBtmG,KAAKymG,EAAyBH,CAHgB,EAchD+D,EAAAnE,GAAAA,SAAYzD,GAEVziG,KAAK4mG,EAAYnE,CAFG,EAUtB4H,EAAAG,GAAAA,WACE,OAAOxqG,KAAKymG,CADa,EAa3B4D,EAAAI,GAAAA,SAAevrG,GACbc,KAAKgnG,EAAe9nG,CADC,EAYvBmrG,EAAAK,GAAAA,SAAUC,GAEJA,IAAa3qG,KAAKinG,IACpBjnG,KAAKknG,GAAwB,GAE/BlnG,KAAKinG,EAAU0D,CALG,EAiBpBN,EAAAO,GAAAA,SAA+BC,GAG7B7qG,KAAK2mG,EAA+BkE,CAHsB,EAa5DR,EAAAS,GAAAA,WACE,OAAO9qG,KAAK2mG,CADmB,IAWjCoE,GAAAA,SAASC,GAKPhrG,KAAK0mG,EAAqBsE,CALZ,EAchBX,EAAAY,GAAAA,WACE,OAAOjrG,KAAK0mG,CADH,EAaX2D,EAAAa,GAAAA,SAAgB7C,EAAU8C,GACxB,GAAuB,GAAnB9C,EAASzpG,OAAb,CAKA,IAAM26D,GAAO7rB,KAAK6rB,MAAQv5D,KAAKgnG,GAAgB,IAI/C,GAA+B,IAFzBoE,EAAmB/C,EAASt1E,QAAO,SAACs4E,GACxC,OAAAA,EAAU5hG,MAAQ0hG,EAAc5xC,CAAhC,KACmB36D,OAArB,CAKA,IAAM0sG,EAAcF,EAAiBA,EAAiBxsG,OAAS,GAAG8K,IAChEyhG,EAEFnrG,KAAKurG,GAJkBH,EAAiB,GAAG3hG,MAAQ0hG,GAMnDnrG,KAAK6mG,EAAsBuE,EAAiBp/D,QACxC,SAACxiC,EAAKgiG,GAAQ,OAAO5oG,KAAK4G,IAAIA,EAAKgiG,EAAE9hG,IAAM8hG,EAAE/hG,MAAjC,GACZzJ,KAAK6mG,GAET7mG,KAAK8mG,EACClkG,KAAK4G,IAAIxJ,KAAK8mG,EAAoBwE,GAEL,MAA/BtrG,KAAKymG,GAAkCzmG,KAAKonG,IACvCpnG,KAAKsnG,IAGZtnG,KAAKymG,EACCltC,EAAMv5D,KAAK8mG,EAAqB9mG,KAAK6mG,EAtB7C,CATA,CADqC,IAiDvC4E,GAAAA,SAAeC,GACb,GAAyB,GAArBA,EAAW9sG,OAAf,CAUA,IANA,IAAI+sG,EAA0BD,EAAW,GAAG96D,UACxCg7D,EAAuBF,EAAW,GAAG76D,QAGnC0oB,GAAO7rB,KAAK6rB,MAAQv5D,KAAKgnG,GAAgB,IAEvB0E,GAAAA,EAAAt8E,EAAAs8E,IAAAA,QAAxB,kBAEMnyC,GAFN,WAEsB3oB,YAIpB+6D,EAA0B/oG,KAAKQ,IAC3BuoG,EAAyBrmG,EAAUsrC,WACvCg7D,EAAuBhpG,KAAK4G,IAAIoiG,EAAsBtmG,EAAUurC,SAChE7wC,KAAK6mG,EAAsBjkG,KAAK4G,IAC5BxJ,KAAK6mG,EAAqBvhG,EAAUurC,QAAUvrC,EAAUsrC,YAE9D5wC,KAAKurG,GAA0BI,GAC/B3rG,KAAK8mG,EACDlkG,KAAK4G,IAAIxJ,KAAK8mG,EAAoB8E,GAEH,MAA/B5rG,KAAKymG,GAAkCzmG,KAAKonG,IAC3CpnG,KAAKsnG,IAGRtnG,KAAKymG,EACDltC,EAAMv5D,KAAK8mG,EAAqB9mG,KAAK6mG,EA/B3C,CADyB,EAgD3BwD,EAAAwB,GAAAA,SAAqBj7D,EAAWC,GAC9B7wC,KAAKurG,GAA0B36D,GAChBtZ,KAAXuZ,GAAwB7wC,KAAK8rG,MAC/B9rG,KAAK8mG,EAAqBlkG,KAAK4G,IAAIxJ,KAAK8mG,EAAoBj2D,GAHvB,EAczCw5D,EAAA0B,GAAAA,WACE,OAAO/rG,KAAK8mG,CADS,EAmBvBuD,EAAA2B,GAAAA,WACEhsG,KAAKsnG,GAAmB,CADV,IAWhB2E,GAAAA,WACE,OAAOjsG,KAAKsnG,CADM,EAWpB+C,EAAA6B,GAAAA,SAA0BC,GACxBnsG,KAAKunG,EAA0B4E,CADiB,EASlD9B,EAAA+B,GAAAA,WACE,OAAOpsG,KAAKunG,CADc,EAW5B8C,EAAAkB,GAAAA,SAA0B36D,GACS,MAA7B5wC,KAAK+mG,EAGP/mG,KAAK+mG,EAAuBn2D,EAClB5wC,KAAKknG,IACflnG,KAAK+mG,EACDnkG,KAAKQ,IAAIpD,KAAK+mG,EAAsBn2D,GAPP,EAsBrCy5D,EAAAgC,GAAAA,SAAyBC,GACvBtsG,KAAK6mG,EAAsBjkG,KAAK4G,IAC5BxJ,KAAK6mG,EAAqByF,EAFa,EAgB7CjC,EAAAnrG,OAAAA,SAAOA,GAC4B,MAA7Bc,KAAK+mG,IACP/mG,KAAK+mG,GAAwB7nG,GAEA,MAA3Bc,KAAK8mG,IACP9mG,KAAK8mG,GAAsB5nG,EALhB,EAefmrG,EAAAyB,EAAAA,WACE,OAAyBx0E,KAAlBt3B,KAAK4mG,IACJ5mG,KAAKinG,CAFN,EAWToD,EAAAkC,GAAAA,WACE,OAAyBj1E,KAAlBt3B,KAAK4mG,IACJ5mG,KAAKinG,CAFA,EAcfoD,EAAAmC,GAAAA,WAME,OAAO5pG,KAAK4G,IAAIxJ,KAAKmnG,EAFTnnG,KAAKysG,KACGzsG,KAAK2mG,EALG,EAiB9B0D,EAAAqC,GAAAA,SAAiBzkE,GACfjoC,KAAKmnG,EAAiBl/D,CADD,IAevBwkE,GAAAA,WACE,OAAKzsG,KAAK8rG,KAAa9rG,KAAKusG,KAarB3pG,KAAKQ,IA8GLR,KAAK4G,IACR,GAFSkkC,KAAK6rB,MA7GFozC,KA6Ge3F,GAAgB,IA7G/B2F,KA+GE9F,EA/GF8F,KA+G6BlG,GA/GPzmG,KAAKqnG,EACvCrnG,KAAK4mG,GAZH5mG,KAAK8mG,EAIAlkG,KAAKQ,IAAIpD,KAAK8mG,EAAoB9mG,KAAK4mG,GAGvC5mG,KAAK4mG,CAVU,EA8B5ByD,EAAAuC,GAAAA,SAAsB1tG,GAEpB,IAAM2tG,EACFjqG,KAAK4G,IAAIxJ,KAAK+mG,EAAsB/mG,KAAKmnG,GAU7C,OAAyC7vE,KAArCt3B,KAAK2mG,EACA/jG,KAAK+c,KAA2B,IAAtBktF,GAA6B,IAgBzCjqG,KAAK4G,IAAIqjG,EADZjqG,KAAKQ,IAXepD,KAAKysG,KAIPzsG,KAAK2mG,EAOMznG,EAAQc,KAAK6pG,MA7BlB,EAwC9BQ,EAAAyC,GAAAA,WACE,OAAO9sG,KAAK4sG,GAAoC,EAD9B,EAWpBvC,EAAAR,GAAAA,WAGE,OAAOjnG,KAAK4G,IAAI,EAAGxJ,KAAKysG,MAFPzsG,KAAK8rG,KAAY9rG,KAAKusG,KACdvsG,KAAK0mG,EAAqB,GAFnC,EAiBlB2D,EAAA0C,GAAAA,WASE,QANmC,MAA/B/sG,KAAKymG,GAMsB,MAA3BzmG,KAAK8mG,GAA8B9mG,KAAKonG,EATjB,IAuC7B4F,GAAAA,SAA0B9tG,GACxBc,KAAKqnG,EAA0BnoG,CADC,EAYlCmrG,EAAA4C,GAAAA,WACE,OAAOjtG,KAAKqnG,CADc,EAxpB9B3yE,EAAA,mCAAAw4E,IAwpBEA,GAAAt4E,UtHinCA,0BsHjnCAs4E,GAAA,UAAAt4E,GAZAs4E,GAAAt4E,UtH6nCA,0BsH7nCAs4E,GAAA,UAAAt4E,GAvCAs4E,GAAAt4E,UtHoqCA,2BsHpqCAs4E,GAAA,UAAAt4E,GAjBAs4E,GAAAt4E,UtHqrCA,gBsHrrCAs4E,GAAA,UAAAt4E,GAXAs4E,GAAAt4E,UtHgsCA,kBsHhsCAs4E,GAAA,UAAAt4E,GAxCAs4E,GAAAt4E,UtHwuCA,sBsHxuCAs4E,GAAA,UAAAt4E,GA9BAs4E,GAAAt4E,UtHswCA,0BsHtwCAs4E,GAAA,UAAAt4E,GAfAs4E,GAAAt4E,UtHqxCA,iBsHrxCAs4E,GAAA,UAAAt4E,MAjBAA,UtHsyCA,4BsHtyCAs4E,GAAA,UAAAt4E,GAdAs4E,GAAAt4E,UtHozCA,asHpzCAs4E,GAAA,UAAAt4E,GAXAs4E,GAAAt4E,UtH+zCA,OsH/zCAs4E,GAAA,UAAAt4E,EAfAs4E,GAAAt4E,UtH80CA,OsH90CAs4E,GAAA,UAAAt4E,OAhBAs4E,GAAAt4E,UtH81CA,yBsH91CAs4E,GAAA,UAAAt4E,GAtBAs4E,GAAAt4E,UtHo3CA,0BsHp3CAs4E,GAAA,UAAAt4E,GAXAs4E,GAAAt4E,UtH+3CA,0BsH/3CAs4E,GAAA,UAAAt4E,GATAs4E,GAAAt4E,UtHw4CA,0BsHx4CAs4E,GAAA,UAAAt4E,GAXAs4E,GAAAt4E,UtHm5CA,kBsHn5CAs4E,GAAA,UAAAt4E,GAXAs4E,GAAAt4E,UtH85CA,csH95CAs4E,GAAA,UAAAt4E,MAnBAA,UtHi7CA,qBsHj7CAs4E,GAAA,UAAAt4E,GAdAs4E,GAAAt4E,UtH+7CA,qBsH/7CAs4E,GAAA,UAAAt4E,GAhDAs4E,GAAAt4E,UtH++CA,esH/+CAs4E,GAAA,UAAAt4E,GAjDAs4E,GAAAt4E,UtHgiDA,gBsHhiDAs4E,GAAA,UAAAt4E,GAbAs4E,GAAAt4E,UtH6iDA,SsH7iDAs4E,GAAA,UAAAt4E,GAdAs4E,GAAAt4E,UtH2jDA,SsH3jDAs4E,GAAA,UAAAt4E,GAXAs4E,GAAAt4E,UtHskDA,+BsHtkDAs4E,GAAA,UAAAt4E,GAbAs4E,GAAAt4E,UtHmlDA,+BsHnlDAs4E,GAAA,UAAAt4E,GAjBAs4E,GAAAt4E,UtHomDA,UsHpmDAs4E,GAAA,UAAAt4E,GAZAs4E,GAAAt4E,UtHgnDA,esHhnDAs4E,GAAA,UAAAt4E,MAbAA,UtH6nDA,yBsH7nDAs4E,GAAA,UAAAt4E,GAVAs4E,GAAAt4E,UtHuoDA,YsHvoDAs4E,GAAA,UAAAt4E,GAdAs4E,GAAAt4E,UtHqpDA,yBsHrpDAs4E,GAAA,UAAAt4E,GAZAs4E,GAAAt4E,UtHiqDA,sBsHjqDAs4E,GAAA,UAAAt4E,GATAs4E,GAAAt4E,UtH0qDA,YsH1qDAs4E,GAAA,UAAAt4E,YCtDAu4E,GAAA,UAAAn5E,QAAAA,WAGEh0B,KAAK0nG,EADL1nG,KAAK2nG,EAAkB,KAEvB3nG,KAAKkoG,EAAWC,WAAO,CAJf,ECuCViF,GAAA,UAAAp5E,QAAAA,WACMh0B,KAAKi4D,IACPj4D,KAAKi4D,EAAcjkC,UACnBh0B,KAAKi4D,EAAgB,MAGG,MAAtBj4D,KAAK+oG,IACP/oG,KAAK+oG,EAAc9kE,OACnBjkC,KAAK+oG,EAAgB,MAGnB/oG,KAAK4oG,IACP5oG,KAAK4oG,EAAe50E,UACpBh0B,KAAK4oG,EAAiB,MAKxB5oG,KAAK+1E,EADL/1E,KAAKuoG,EADLvoG,KAAK0nG,EAAW,IAhBR,EA2BV0F,GAAA,aAAAC,WACErtG,KAAK6oG,GAAsB,EACtBC,GAALA,KAFkB,ECxFtB,IAAAwE,GACI,IAAelvE,IAAK,WAAM,WAAI5I,IAAI,CAChC,CAACy0E,iBAAiBsD,cAAe,kBACjC,CAACtD,iBAAiBuD,kBAAmB,cACrC,CAACvD,iBAAiBwD,iBAAkB,WACpC,CAACxD,iBAAiByD,iBAAkB,mBAJZ,ICL5BnhG,SAAA,GAAYu7C,EAAO6lD,EAAQC,EAAWtkB,GAAe,IAAD,OAElDtpF,KAAK+1E,EAASjuB,EAGd9nD,KAAK6tG,EAAUF,EAGf3tG,KAAK8tG,EAAaF,EAGlB5tG,KAAK2oG,EAAa,KAGlB3oG,KAAK+tG,EAAgBC,WAInB,OAHuB,MAAnB,EAAKrF,IACP,EAAKA,EAAarf,KAEb,EAAKqf,CAJa,EAQ3B3oG,KAAKiuG,GAAW,EAGhBjuG,KAAKi4D,EAAgB,IAAetjC,EAGpC30B,KAAKkuG,EAAS,IAA6BC,GACnBrmD,GAOGsmD,GAAkBpuG,KAAK+1E,EAC9Ck0B,iBAAiBsD,cACjBvtG,KAAKi4D,GACL,WACOo2C,GAALA,EAAmB,EAAKN,IADpB,GAvCwC,CAmEpDnM,SAAA,GAAAA,GACE,OAAO,EAAKqM,EAAW,EAAKl4B,EAAO2uB,YAAc,EAAKqJ,GAD9C,CAUVO,SAAA,GAAAA,EAAQrmE,GACuB,EAAzB,EAAK8tC,EAAOyoB,WACF+P,GAAZ,EAAKL,EAAcjmE,GAEQmmE,GAAkB,EAAKr4B,EAC9Ck0B,iBAAiBsD,cACjB,EAAKt1C,GACL,WACOo2C,GARDA,EAAA,EAQoBN,IADpB,GAPA,CAqBdM,SAAA,GAAAA,EAAcz9D,GAGwC,KAAhDhuC,KAAK83D,IAAI,EAAKqb,EAAO2uB,YAAc9zD,GAChC49D,GAALA,IAOF,EAAKv2C,EAAc3jC,GAAW,EAAKyhD,EAAQ,WAAW,WAC/Cy4B,GAZgBA,EAWqC,IAehDD,GAAZ,EAAKL,EACC,EAAKn4B,EAAO2uB,aAA0C,GAA3B,EAAK3uB,EAAO2uB,YAEzC,EAAK3uB,EAAO2uB,YADZ9zD,GA5BmB,CAuCzB49D,SAAA,GAAAA,GAOE,EAAKP,GAAW,EAEhB,EAAKh2C,EAAc9jC,EAAO,EAAK4hD,EAAQ,WAAW,WAAM,OATjC,EASsC83B,GAAL,IACxD,EAAKC,EAAW,EAAK/3B,EAAO2uB,YAVL,CA4CzBn4F,SAAA,GAAYsvD,GAA4B,IAAD,OAErC77D,KAAK+4D,EAAgB8C,EAGrB77D,KAAKshE,EA5JkBC,GAqKvBvhE,KAAKyuG,EAHLzuG,KAAK0uG,EAHL1uG,KAAK2uG,EAAqB,EAS1B3uG,KAAK4uG,EAAS,IAAe1tE,IAAM,WAoCJ,GApCU1C,EAoChCmwE,GApCgCnwE,EA+ChCu6B,EAAc2rC,aA/CkBlmE,EA+CEkwE,GA/CFlwE,EAgDhCu6B,EAAc2rC,cAhDkBlmE,EAgDGiwE,EAhDHjwE,EA0ClCowE,EAAO3qE,QA1C2BzF,EAsDpCu6B,EAAc2rC,YAtDsBlmE,EAsDHiwE,EAtDGjwE,EAuDpCmwE,IAvDoC,GAjBJ,CAoCvCJ,SAAA,GAAAA,EAAOnG,GACL,EAAKsG,EAAc,EAAK31C,EAAc2rC,YACtC,EAAK+J,EAAcrG,EAEnB,EAAKuG,EAAqB,EAAKrtC,EAI/B,EAAKvI,EAAc2rC,YAAc0D,EACjC,EAAKwG,EAAOnqE,GAAyB,GATjB,CC9JtBl4B,SAAA,GAAYsvD,GAEV77D,KAAK+4D,EAAgB8C,EAErB77D,KAAKiuG,GAAW,EAEhBjuG,KAAK2oG,EAAa,KAGlB3oG,KAAKi4D,EAAgB,IAAetjC,CATZ,UA2H1B,GAAYknC,EAAc5S,EAAUp3B,EAAQ+e,EAAW+8D,EAAQvuB,GAAU,IAAD,OActEp/E,KAAK+4D,EAAgB8C,EAGrB77D,KAAKuoG,EAAYt/C,EAAS4lD,qBAG1B7uG,KAAK8uG,EAAiB7lD,EAAS8lD,eAAiB,EAGhD/uG,KAAKm4D,EAAUtmC,EAGf7xB,KAAK6tG,EAAUF,EAGf3tG,KAAKgvG,EAAsB,KAG3BhvG,KAAK4oG,EA0UPqG,SAAqBpzC,EAAchqC,EAAQutD,GACzC,IAAKvtD,EAAOq9E,aACV,OAAO,KAMT,IAAMh9B,EAAOrgD,EAAOs9E,UAqBpB,OJthBFC,SAAAA,EAAQC,GACN,EAAKnH,EAAWmH,CADF,CIygBLD,CAJHE,EAAW,IAAgBnC,GAC7B,IAA8BoC,GAA2B1zC,GAN3ChqC,EAAO29E,eAOVpwB,IAEE,WAGXlN,EAEFrW,EAAa6oC,aAAexyB,GAG5BrW,EAAa4zC,QACb5zC,EAAa4pC,OATkB,IAa5B6J,CA7B2C,CAzUzCL,CAAqBpzC,EAAchqC,EAAQutD,GAGpDp/E,KAAK0vG,EAAiB,IAAgBtC,GAClCvxC,EACA5S,EAAS4lD,qBACTh9E,EACA7xB,KAAK4oG,EACLxpB,GAGJp/E,KAAK2vG,EAAgB,IAAgBC,GACjC/zC,GACA,WA4JO,GACN6zC,IAAAA,EA7JKG,EA6JLH,EHjRL,EAAKlH,GAAwB,EAC7B,EAAKK,GAAsB,EGiR3B,IAAMnE,EAAiC9C,GA9J7BiO,EA8JeF,GAIzB,GAHMG,EAAkBC,GA/JdF,EA+J0BnL,GHjJiBoF,KGoJjDlnG,KAAK83D,IAAIo1C,EAAapL,GAAyB,CAEjD,GADIsL,GAAoB,GtD2QbpvE,MAvcGA,MAA2ButB,KsDyMvC6hD,GAAoB,MAZmB,CAIvC,IAAM/nE,EAAOyF,KAAK6rB,MAAQ,IACpB02C,EtDvLMrvE,MA+SWzB,GAAmB,WsDxHoB,EAAI,IAzK5D0wE,EA0KIb,GA1KJa,EA2KGb,EAAsB/mE,EAAOgoE,KA3KhCJ,EA4KCb,EAAsB/mE,EAC3B+nE,GAAoB,EATiB,CAczC,GAAIA,EAAmB,CACF1B,GAnLbuB,EAmLDF,EAAsBG,GAC3B,gBAFqB,CAhB0B,CAlKzCD,EAyLLhC,IA7BM,SA5JD,YACN,SAACqC,GAmJAR,IAAAA,EAnJkB5B,EAmJlB4B,EHhRD,EAAK35B,EAAOkzB,UAAY,EAAKT,IAC/B,EAAKA,GAAwB,EAC7B,EAAKG,EG2HgCuH,EAAhB,IACnB,WAAyBt/D,IAAAA,EAAAA,EAAnB,OAiFO,MAAbA,EAIAA,EAHiCtZ,IAlF3By2E,EAkFCxF,EAAUnC,cAlFX2H,EAqFWxF,EAAUuE,KArFrBiB,EAwFWxF,EAAUsB,KAER,EAAZj5D,IAKTA,EA/FQm9D,EA+FSxF,EAAUsB,KAAoBj5D,GAGrCu/D,GAlGFpC,EAkG4BqC,GAlG5BrC,EAkGuCn9D,GAlGvC,IAGV5wC,KAAKqwG,EAAoB,IAAenvE,IAAM,WAmH9C,GAAqC,GAlHnCovE,EAkHOv3C,EAAcylC,aAlHrB8R,EAkH6Cv3C,EAAc8hB,OAA7D,CAIA,IAAM6pB,EAAiC9C,GAtHrC0O,EAsHuBX,GACrBY,EAvHFD,EAuHmB/H,EAAUuE,KACzB0D,EAxHJF,EAwHmB/H,EAAUsB,KAjKV4G,EAmKjBD,EAAUD,IACZA,EAAYC,EApKOC,GAuKjB/L,EAAc6L,IAEVT,EAAkBC,GAhIxBO,EAgIoC5L,GAhIpC4L,EAmIKv3C,EAAc2rC,YAAcoL,EAjBnC,CAnHoD,GAnDkB,CAoPxEK,SAAA,GAAAA,EAAqBloE,GACnB,IAAMw6D,EAAW,EAAK8F,EAAUnC,cAChC,OAAIn+D,GAAQw6D,EAGHA,EAAW,EAAKtqC,EAAQu4C,gBAE1BzoE,CAPkB,CAiB3B8nE,SAAA,GAAAA,EAAYrL,GASV,IAAMiM,EAAkB/tG,KAAK4G,IACzB,EAAKslG,EACL,EAAK32C,EAAQw4C,iBAEXC,EAAiB,EAAKz4C,EAAQy4C,eAEhCnnG,EAAQ,EAAK8+F,EAAUuE,KACrBpjG,EAAM,EAAK6+F,EAAUsB,KACrBpH,EAAW,EAAK8F,EAAUnC,cA3QXqK,EA6QjB/mG,EAAMD,IACRA,EAAQC,EA9QW+mG,GAqRrB,IAAMI,EAAO,EAAKtI,EAAUqE,GAAsB+D,GAM5CJ,EAAY,EAAKhI,EAAUqE,GAAsBgE,GAIvD,OAHME,EAAW,EAAKvI,EAAUqE,GAC5B+D,EAAkBC,GAElBlM,GAAejC,EAEL0N,GAALA,EAA0BzL,GAG/BA,EAAch7F,EAITA,EAAM,EAAKyuD,EAAQ44C,kBAGxBrM,EAAcj7F,EA3C+CunG,GAN1C,EAOdj4C,EAAcsmC,SA2CNkR,GAENA,EAGAO,EAIPpM,GAAemM,GArD8CG,GAN1C,EAOdj4C,EAAcsmC,SAoDeqF,GAE7BA,EAGAoM,CAhEc,CA2EzBV,SAAA,GAAAA,EAAWnoE,GACT,IAAMx+B,EAAQ,EAAK8+F,EAAUuE,KAC7B,OAAI7kE,EAAOx+B,EACFA,EAILw+B,GADEv+B,EAAM,EAAK6+F,EAAUsB,MAElBngG,EAGFu+B,CAXQ,CNvgBjB17B,SAAA,GAAYm/F,GAMV1rG,KAAK0rG,EAAaA,EAGlB1rG,KAAK4uG,EAAS,KAQd5uG,KAAKixG,EAAc,EAGnBjxG,KAAKkxG,GAAa,CApBI,CA+FxBj8C,SAAA,GAAAA,GACE,OAAO,EAAKy2C,EAAW,IAAM,IADX,CA+XpByF,SAAO,GAAiBvgE,EAAW6xD,EAAUp4B,GAW3C,OAAO,IAAgB+mC,GAAa,CAV9B9rG,EAAY,IAAgBmlF,GACb75C,EACFA,EAAY6xD,GACZ,WAAMp4B,OAAAA,CAAAA,GACJ,EACF,KACa,KACEz5B,EACLA,EACFA,EAAY6xD,IAVU,CA0DnDl2F,SAAA,GAAYyoD,EAAc11D,EAAO+xG,EAAqB1N,GAEpD3jG,KAAKsxG,EAAgBt8C,EAGrBh1D,KAAKuxG,EAAmBjyG,EAGxBU,KAAKwxG,EAA0BH,EAG/BrxG,KAAK2jG,QAAUA,CAX8C,CAoJ/Dp3F,SAAA,KACEklG,GAAA,UAAM,IAGNzxG,KAAK0xG,EAAW,EAJJ,COjrBdnlG,SAAA,GAAYolG,GAAU,IAAD,OAEnB3xG,KAAK4xG,EAAWD,EAGhB3xG,KAAK6xG,GAAe,EAGpB7xG,KAAK8xG,EAAQ9xG,KAAK4xG,EAASG,KAM3B/xG,KAAK4uG,EAAS,IAAe1tE,IAAM,WACjC,EAAK0wE,EAASI,GAJCC,IAIY,EAAKH,EADO,GAdtB,CA+ErBI,SAAA,GAAAA,GAEE,EAAKtD,EAAO3qE,OAGZ,IAAM03B,EAAOw2C,EAkCDN,EAAe,EAlCdM,EAkCuBL,EA9BpC,GAAY,GAARn2C,EACF,IAEE,YADAy2C,EAyCiBR,EAASG,MAzCVp2C,GAAhBy2C,EA4CGR,EAASS,GA5CI12C,GADd,CAGF,MAAOroC,GAAI,CAcf,EAAKs7E,EAAOnqE,GA/FKwtE,KAgGDK,GAAhBF,EAwBqBR,EAASG,MAxB9BK,EA2BOR,EAASS,GA3BAC,EA5BT,CC5DT/lG,SAAA,GAAYsvD,GAAe,IAAD,OAExB77D,KAAK+4D,EAAgB8C,EASrB77D,KAAKuyG,EAAa,IAAI//E,IAStBxyB,KAAKwyG,EAEF/tE,IAFgCvD,IAAM,WAClCuxE,GAALA,GAAsC,EADO,IAE5ChuE,GAAyB,IAtBJ,CA2D1BguE,SAAA,GAAAA,EAAkBxJ,GAChB,IAA4BsJ,IAAAA,EAAAnjF,EAALmjF,EAAKA,GAAAA,EAAAA,EAAAA,QAA5B,oBAAAG,MACWC,EACL,EAAK55C,EAAc2rC,YACnBuE,EAJmB,CClF3B18F,SAAA,KAOEvM,KAAK4yG,EAAQ,KAQb5yG,KAAK6yG,EAAU,EAfH,CAuCdC,SAAA,GAAAA,EAAex9F,GACb,IAAIy9F,EAAM,EAEN,EAAKH,GAAS,EAAKA,EAAMt9F,OAASA,IACpCy9F,GAAO,EAAKH,EAAMnQ,UAGpB,IAAyBoQ,IAAAA,GAAAA,EAAAzjF,EAALyjF,EAAKA,IAAAA,QAAzB,kBACEE,IADF,WACez9F,OAASA,EAAQ1T,EAAM6gG,SAAW,EAGjD,OAAOsQ,CAXa,CC5CtBxmG,SAAA,KAKEvM,KAAKgzG,EAHLhzG,KAAKizG,EAAkB,KAMvBjzG,KAAKkzG,EAAW,EARJ,CAwCdC,SAAA,GAAAA,EAAkBC,EAASC,GACrB,EAAKL,GAAgBI,IAIzB,EAAKJ,EAAeI,EACpB,EAAKF,EAAS/0G,KAAK,CACjBguF,UA+BKz+C,KAAK6rB,MAAQ,IA9BlBr5C,GAAIkzF,EAAQlzF,GACZxjB,KAAM,OACN22G,eAAgBA,EAChBjhF,UAAW,OAX4B,CCrC3C7lB,SAAA,KA+CEvM,KAAKszG,GAFLtzG,KAAKuzG,GAHLvzG,KAAKwzG,EAFLxzG,KAAKyzG,EAHLzzG,KAAK0zG,EAHL1zG,KAAK2zG,EAHL3zG,KAAKm2E,EAHLn2E,KAAK4zG,EAHL5zG,KAAK6zG,EAHL7zG,KAAK8zG,EAHL9zG,KAAK+zG,EAHL/zG,KAAKg0G,EAFLh0G,KAAKi0G,EAHLj0G,KAAKk0G,EAFLl0G,KAAKm0G,EAFLn0G,KAAKo0G,EAHLp0G,KAAKq0G,EAFLr0G,KAAKs0G,EAASC,IAgDdv0G,KAAKw0G,EAAsB,EAI3Bx0G,KAAKy0G,EAFLz0G,KAAK00G,EAAuBH,IAK5Bv0G,KAAK20G,EAAgB,IAAeC,GAGpC50G,KAAK60G,EAAiB,IAAeC,EA5DzB,CCWdvoG,SAAA,GAAYwoG,EAAepyD,EAAQqyD,EAAiBrR,GAElD3jG,KAAKi1G,EAAiBF,EAGtB/0G,KAAKk1G,EAAUvyD,EAGf3iD,KAAKm1G,EAAmBH,EAOxBh1G,KAAKo1G,EAAsB,IAAI5/E,IAO/Bx1B,KAAKq1G,EAA0B,IAAI7/E,IAGnCx1B,KAAKs1G,EAAY,KAGjBt1G,KAAKu1G,EAAW5R,CA5B2C,CAkC7D6R,SAAA,GAAAA,EAAuBR,GACrB,EAAKG,EAAmBH,EACxB,IAAwB,SAAA5lF,EAAA,EAAKgmF,EAAoB7lG,WAAzB,QAAxB,oBAAAi5D,MA8VK2sC,EA7V8BH,CAHG,CAexCS,SAAA,GAAAA,EAAuBC,EAAUC,GAK/B,GAL+BA,OAAA,IAAAA,GAAAA,GAK1B,EAAKT,EAAQlgD,aAEhB,OAAOtP,QAAQ7J,UAMjB,GAJK,EAAKy5D,IACR,EAAKA,EAAY,EAAKJ,EAAQlgD,aAAa4gD,GACvCF,GAAoC,EAAM,EAAKH,KAEhD,EAAKD,EAER,OAAO5vD,QAAQ7J,UAMjB,IAJI85D,GACF,EAAKL,EAAUzsG,OAEXgnD,EAAW,GACV,EAAKulD,EAAoBj0G,KAAO,EAAK8zG,IACpC3vG,EAAY,EAAKgwG,EAAUzsG,OAAOhF,QADkB,CAO1D,IAAIgyG,GAAkB,EAClBvwG,EAAUo4E,aAAoC,MAArBp4E,EAAU8hF,KACrCyuB,GAAkB,G5C6hBf/jB,G4C3hBDxsF,EAAUokF,OAEZmsB,GAAkB,GAEhBvwG,EAAUwiF,OACZ+tB,GAAkB,GAEhBA,GAAmBvwG,EAAUyiF,IAC/Bl4B,EAAS1xD,KAAU23G,GAALA,EACVxwG,EAAUyiF,KAEZ8tB,IAAoB,EAAKT,EAAoBrgG,IAAIzP,KAC7CywG,EACJ,IAAgBC,GAAyB,EAAKb,GAChDtlD,EAAS1xD,KAA8B83G,GAAzBF,EACVzwG,EAAW,EAAK4vG,IACpB,EAAKE,EAAoBxwG,IAAIU,EAAWywG,GA3BgB,CA+B5D,OADKG,GAALA,GACOxwD,QAAQE,IAAIiK,EApD+B,CA6DpDimD,SAAA,GAAAA,EAAoB/tB,GAoBlB,IAfK,EAAKmtB,EAAQlgD,cAKd+yB,EAAqBD,MAKJnjF,MAAM24B,KAAK,EAAK+3E,EAAwBnpG,QAC1B4iD,MAAK,SAACxpD,GACvC,OAAwC6wG,GACpC7wG,EAAWyiF,EAFsC,IAKrD,OAAOriC,QAAQ7J,UAEjB,IAAMk6D,EAA2B,IAAgBC,GAC7C,EAAKb,GACHzyC,EAAmCuzC,GAAzBF,EACZhuB,EAAsB,EAAKmtB,GAG/B,OAFA,EAAKG,EAAwBzwG,IACzBmjF,EAAsBguB,GACnBrzC,CA7BiC,CAwF1C0zC,SAAA,GAAAA,EAAUj4D,GACR,IAAwB,SAAA/uB,EAAA+uB,EAAIjyC,SAAJ,QAAxB,+BAESmqG,GAALA,EAA6B/wG,EAHpB,CAiBfgxG,SAAA,GAAAA,GACOF,GAALA,EAAe,EAAKhB,GACfgB,GAALA,EAAe,EAAKf,GACpBkB,EAVKjB,EAAY,IAOR,CAmDXY,SAAA,GAAAA,GAEE,IADA,IAAMM,EAAoB7xG,MAAM24B,KAAK,EAAK83E,EAAoBlpG,QAC3B,EAAAkjB,EAAA,EAAKimF,EAAwBnpG,QAA7B,WAAnC,mDAEwBsqG,EAAkB1nD,KAAK,4BAAC2nD,GAC5C,OAAwCN,GACpCM,EAAiB1uB,GAAsBA,EAAAA,GAFsB,CAAtB,OAKtCsuB,GAALA,EAA6BtuB,EAAAA,GATd,CAoBrB2uB,SAAA,GAAAA,EAAWC,GAMT,EAAK1B,EAAiB0B,EAEtB,IADA,IAAMC,EAASjyG,MAAM24B,KAAK,EAAK83E,EAAoBlpG,QAC5C0qG,EAAOh4G,OAAS+3G,GAAkB,CACvC,IAAMrxG,EAAYsxG,EAAO9wF,MACrBxgB,GACG+wG,GAALA,EAA6B/wG,EAHQ,CAMpC4wG,GAALA,EAd2B,CA4C7BG,SAAA,GAAAA,EAAwB/wG,GAGtB,IAAIuxG,EAAc,EAAKzB,EACnB9vG,aAAiC8jF,KACnCytB,EAAc,EAAKxB,GAGfU,EAA2Bc,EAAYnnG,IAAIpK,GACjDuxG,EAAY95C,OAAOz3D,GAEfywG,GACFA,EAAyBxyC,OAZM,CAyCnCh3D,SAAA,GAAYyoG,GAEVh1G,KAAKm1G,EAAmBH,EAMxBh1G,KAAK82G,GAHL92G,KAAK+2G,GAAsB,IALA,CA2B7Bd,SAAA,GAAAA,EAAc3wG,EAAWq9C,GAGvB,IAAI08C,EAAW,IAAI1+F,WAAW,GAa9B,OAZA,EAAKm2G,GAAa,EAAK3B,EACnB7vG,EAAWq9C,GAAQ,SAAOz/C,GAAU,OAADg/B,GAAA,sBAMjC,OAJEm9D,EADwB,EAAtBA,EAASrhG,WAC2BmjD,GAAOk+C,EAAUn8F,GAE5CA,EATY,EAWhB6zG,GACP,IAZuB,EAYZA,GAAoB1X,GAA/B,GADF,OAEEA,EAAW,IAAI1+F,WAAW,GARK,WAWhC,EAAKm2G,GAAWp0C,QAAQ9R,OAAM,SAACt9B,GAEpC,OAAIA,aAAwB4I,IjEqfXgnC,MiEpfb5vC,EAAE1L,KACG89B,QAAQ7J,UAGV6J,QAAQgL,OAAOp9B,EAPoB,GAhBb,CCnZjC/mB,SAAA,GAAYyqG,GACVhuC,GAAA,WADwB,WAIxBhpE,KAAKi3G,EAAW,IAAIzkF,IAGpBxyB,KAAKk3G,EAAgBF,EASrBh3G,KAAKm3G,EAEF1yE,IAFgCvD,IAAM,WAmCzC,IADA,IAAMk2E,EAjCJC,EAiCqBH,IACGD,EAAA7nF,EAlCxBioF,EAkCwBJ,GAAAA,EAAAA,EAAAA,QAA1B,8BAMapmE,QAAUumE,EAAU3tG,QAxC/B4tG,EAyCOJ,EAASl6C,OAAOhsB,GACfvc,EAAQ,IAAe2vC,GAAU,eAAgB,IAAI3uC,IAAI,CAC7D,CAAC,SAAUub,MA3CfsmE,EA6COpqC,cAAcz4C,GA9CwB,IAE5CiQ,GAyF6C6yE,EA3GxB,CCI1B/qG,SAAA,GAAY2+E,GACVliB,GAAA,WAKAhpE,KAAKu3G,EAAqB,IAAI/hF,IAG9Bx1B,KAAKw3G,EAAmBtsB,CATG,UAuL7B,GAAAusB,EAAoBh6F,EAAUg6B,GAG5B,UADMigE,EADe,EAAKF,IACU//D,KACU,EAAxBigE,EAAe94G,SAE7BisF,EAAY6sB,EAAeA,EAAe94G,OAAS,GAAG8K,IACxD+T,GAFgBi6F,EAAe,GAAGjuG,OAEPgU,EAAWotE,GANH,CAyD3C8sB,SAAO,GAAkBh1D,GACvB,IAAMi1D,EAAe,CACnBxlF,UAAWuwB,EAAOvwB,WAAa,EAC/B44B,kBAAmB,KACnBrL,OAAQgD,EAAOhD,OACflI,YAAakL,EAAOjmD,KACpBsvD,UAAW,KACXzxB,OAAQ,KACRxC,SAAU4qB,EAAO5qB,SACjBgzB,cAAe,KACf+I,iBAAkB,KAClBt5B,MAAO,KACPjb,MAAO,KACP0rC,MAAOtI,EAAOsI,MACdhmD,SAAU,MAcZ,MpD/CKu8C,SoDmCDmB,EAAOjmD,OACTk7G,EAAa5rD,UAAYrJ,EAAOqJ,WAAa,KAC7C4rD,EAAar9E,OAASooB,EAAOpoB,QAAU,KACvCq9E,EAAa9jD,iBAAmBnR,EAAOmR,kBAAoB,KAC3D8jD,EAAap9E,MAAQmoB,EAAOnoB,OAAS,MpDtClCinB,SoDwCDkB,EAAOjmD,OACTk7G,EAAa5sD,kBAAoBrI,EAAOqI,kBACxC4sD,EAAa7sD,cAAgBpI,EAAOoI,cACpC6sD,EAAar4F,MAAQojC,EAAOpjC,OAAS,KACrCq4F,EAAa3yG,SAAW09C,EAAO19C,UAE1B2yG,CA5BwB,CClPjCC,SAAO,GAAyB9/E,GAC9B,IAAM05B,EAAoChB,GAAa14B,GAGvD,MAAO,CACLr7B,KAHW+0D,EAAal/C,MAAM,KAAK,GAInCwlB,SAAU05B,EACV9R,OAJIA,EAA8B4Q,GAAUx4B,GAK5C9yB,SAAU,KACVs1B,OAAQ,KACRC,MAAO,KACP+iC,aAAc,KACdswB,WAAY,KACZiS,eAAgB,IAAItqE,IACpBsiF,GAAY,KACZ7lD,WAAY,KACZjG,UAAW,KAhB2B,CAka1C+rD,SAAO,GAAgBp4D,GA6BrB,IAFA,IAAMq4D,EAAO,IAAIxlF,IACX0U,EAAM,GACQyY,GAAAA,EAAAvwB,EAzBkCuwB,IAyBlCA,QAApB,kBAA4B,CAC1B,IAAMs4D,EAAkCv7C,GAD1C,WAEOs7C,EAAKjjG,IAAIkjG,KACZ/wE,EAAI/oC,KAAKgiD,GACT63D,EAAK9mF,IAAI+mF,GAJe,CAf5B,OATM1pD,EACkB2pD,GrDxMnBz2D,QqDwOEva,GA/BDknB,EACkB8pD,GrD3MnB12D,QqDyOEta,GA7BDixE,EACkBD,GAA+B93D,GA4BhDlZ,GA3BDkxE,EAsCRC,SAA2B14D,GACzB,GAAqB,GAAjBA,EAAO/gD,OACT,OAAO+gD,EAET,IAAM24D,EAAc34D,EAAOz8B,MAAK,SAACi9B,GAC/B,OAAOA,EAAM1V,WAAW,UACpB0V,EAAM1V,WAAW,UACjB0V,EAAM1V,WAAW,UACjB0V,EAAM1V,WAAW,UACjB0V,EAAM1V,WAAW,UACjB0V,EAAM1V,WAAW,UACjB0V,EAAM1V,WAAW,QAPoB,IAS3C,OAAK6tE,EAIwB7pD,GADf,sBAAqB6pD,EAArB,KAEL,CAACA,GAEH34D,EAAO5sB,QAAO,SAACotB,GAAU,OAAAA,GAASm4D,CAAT,IANvB34D,CAdwB,CAtCK44D,CAAoBnqD,GACpDoqD,EACFjqD,EAAYx1C,OAAOq/F,GAAkBr/F,OAAOo/F,GAyBzCjxE,EAxBOtoC,SAAW45G,EAAY55G,OAwB9BsoC,EArBAsxE,CAjBsB,CA0GlBC,SAAA,GAAWC,EAAWlxB,EAAQ/pE,GACzC,IAAMnW,EAOFqxG,EAGE31F,EACKjlB,EAKP66G,EAjB+C,OAAA12E,GAAA,sBAEnD,OADM56B,EAAMkgF,GACHqxB,UAAT,OAGE,IAAMvxG,EAAIwxG,WAAV,GAIF,KADIH,EAAKrxG,EAAIqxG,IAIX,IAFAA,EAA4B7hF,GAAQ,IAAII,YAAY,KAChDlU,EAAW1b,EAAIyxG,yBAA2Bt7F,EACrC1f,EAAI46G,EAAG36G,WAAa,EAAQ,GAALD,EAAQA,IACtC46G,EAAG56G,GAAgB,IAAXilB,EACRA,IAAa,EAkBjB,OAbE41F,EAD4B,OAA1BpxB,EAAOwxB,gBACG,CACV93G,KAAM,UACNy3G,GAAAA,GAGU,CACVz3G,KAAM,UACNud,QAASk6F,EAGT/5G,OAAQ,IAGZ,EAAAklC,OAAOvvB,EAAO0kG,OAAOC,OAAOC,QAAQP,EAAWtxG,EAAIuxG,UAAWH,GAhCX,ICzgBrDU,SAAO,GAAqB/uC,EAAM5gE,EAAOC,EAAK+gE,EAC1CF,GAgBF,OAfMM,EAAqCmF,GACvC3F,EAAMI,EAAiBF,GAEd,GAAT9gE,GAAqB,MAAPC,IAMdmhE,EAAQ7lD,QAAR,MADEtb,EACyB,SAAWD,EAAQ,IAAMC,EAEzB,SAAWD,EAAQ,KAI3CohE,CAhBe,CCiCxBt+D,SAAA,GAAY08C,EAAU4sB,GAAkB,IAAD,OAErC71E,KAAK81E,EAAmBD,EAGxB71E,KAAKq5G,EAAYpwD,EAGjBjpD,KAAKm4D,EAAU,KAOfn4D,KAAKs5G,EAA6B,IAAI9jF,IAGtCx1B,KAAKu5G,EAAkB,EAMvBv5G,KAAKw5G,EAHLx5G,KAAKizG,EAAkB,KAMvBjzG,KAAKy5G,EAAwB,EAQ7Bz5G,KAAK05G,EAAe,IAAIlkF,IAOxBx1B,KAAK64D,GAAmB,EAQxB74D,KAAK25G,EAA0B,KAO/B35G,KAAK45G,GAAc,EAGnB55G,KAAKi4E,EAAa,IAAe5G,IAAU,WAAM,gBAmC7CsqB,GACJ,IAAMke,EAEc,IAApB,EAQuB,IAXN,OAAA33E,GAAA,uBAGjB,IAFM23E,EAAS,GAEK,EAAAzqF,EAHH,EAGQsqF,EAAanqG,UAAlB,YAApB,kBACOuqG,GADP,WAEED,EAAO17G,KAAU47G,GAAiBzkG,IAC9BA,EAAM0kG,IACc1D,GAAtBhhG,EAAM0kG,GACN1kG,EAAM0kG,EAAkB,MAG5B,IAAuB,EAAA5qF,EAXN,EAWW6qF,EAAkB1qG,UAAvB,YAAvB,SAAAnI,EAAA,OACWkvG,GADX,SAIA,WAAM5wD,QAAQE,IAAIi0D,GAAlB,EAfiB,GAiBZH,EAAajhF,QAjBD,EAkBZwhF,EAAkBxhF,QAlBN,EAoBZq9C,EAAmB,KApBP,EAqBZujC,EAAY,KArBA,EAsBZlhD,EAAU,KAtBE,QAnCqCwjC,CAALA,EAAA,IAGjD37F,KAAKk6G,EAAwBxsE,KAAK6rB,MAAQ,IAK1Cv5D,KAAKi6G,EAAoB,IAAIzkF,IAG7Bx1B,KAAKm6G,EAAoB,CACvBC,WAAY,KACZC,KAAM,MAIRr6G,KAAKs6G,EAAkB,EAGvBt6G,KAAKu6G,EAAgBjjF,IAGrBt3B,KAAKw6G,EAAkC,IAnFF,CAwUvCC,SAAA,GAAAA,EAAaC,GA42EX,IADA,IAAM/W,EAAoD,EAx2E1DgX,EAw2EqB7kC,EAAiB8kC,KACb,EAAAxrF,EAz2EzBurF,EAy2E8BjB,EAAanqG,UAAlB,YAAzB,8BACiBsrG,IACbC,EAAWD,GAAgBE,GAAWpX,GAEpCmX,EAAWd,GACbc,EAAWd,EAAgBe,GAAWpX,GAG1C,IAAuB,KAAAv0E,EAj3EvBurF,EAi3E4BV,EAAkB1qG,WAAvB,QAAvB,oBAAAyrG,MACWD,GAAWpX,IAh3EhBmX,EAAa,EAAKpB,EAAahqG,IvDnJhC8xC,YuDwJCmB,EAASm4D,EAAWn4D,UAMtB+3D,GACIrjD,EAAiB1U,EAAO0U,kBAKVyjD,EAAWG,KAM1BC,GAALA,EAAqB7jD,GAAmC,EAClC,GAAgB,GAEtCyjD,EAAWG,GAA8Bt4D,IAEnCw4D,EAAcL,EAAWG,MAM/BH,EAAWG,GAA8B,KACpCC,GAALA,EAAqBC,GAAgC,EAC/B,GAAgB,IAzCzB,CAyDjBC,SAAA,GAAAA,EACIxzD,EAASyzD,EAAqBC,EAAgBC,EAC9CliF,GADSgiF,OAAA,IAAAA,GAAAA,EAAqBC,OAAA,IAAAA,EAAa,EAAbA,EAAgBC,OAAA,IAAAA,GAAAA,EAC9CliF,OAAA,IAAAA,GAAAA,EACF,EAAK45E,EAAkBrrD,EAElB,EAAKiR,IAKNjR,EAAQE,OACLozD,GAALA,EACItzD,EAAQE,MAA0BuzD,EAChBC,EAAyBC,EACzBliF,GAEpBuuB,EAAQC,OACLqzD,GAALA,EACItzD,EAAQC,MAA0BwzD,EAChBC,EAAyBC,EACzBliF,GAlBF,CA0BlBmiF,SAAA,GAAAA,EAAiB/xD,GAAYvnB,GAAA,sBAIjC,OAJiC,EAC5Bs4E,EAAkC,KADN,EAE5BhB,EAAqB/vD,EAFO,EAIvBoP,EAYLpP,EAAWuL,aAAhB,OACE,IAAMvL,EAAWm0C,qBAAjB,GAXA,EAAA95D,SAcGo3E,GApB4BA,EAqB7BzxD,GAA+B,EACb,GAAgB,GAtBL,QAsEnCyxD,SAAA,GAAAA,EAAgBv4D,EAAQ04D,EAAaC,EAAYC,EAAOliF,GAGtD,IAAMyhF,EAAa,EAAKpB,EAAahqG,IADIizC,EAAOjmD,MAG3Co+G,GAAcn4D,EAAOjmD,MAAoB0jD,GAMzC06D,IAIDA,EAAWG,KAKTt4D,EAAO0U,gBAETyjD,EAAWG,GAA8Bt4D,EACzCA,EAASA,EAAO0U,gBAIhByjD,EAAWG,GAA8B,MAKzCH,EAAWn4D,QAAUA,GAAW44D,KAMhC,EAAKtB,EAAkBllG,IAAI4tC,GAC7Bm4D,EAAWd,EAAkB,EAAKC,EAAkBvqG,IAAIizC,GAC/Cm4D,EAAWd,GLzPxByB,SAAAA,EAAa94D,GACPA,GAAUA,IAAW,EAAKuyD,IACvBoB,GAALA,GACA,EAAKpB,EAAUvyD,EAHE,CK0PU84D,CAA3BX,EAAWd,EAA6Br3D,GAGtCA,EAAOjmD,MAAoB0jD,KAIvB6B,EAAoCI,GACtCM,EAAO5qB,SAAU4qB,EAAOhD,QACYs+C,GAAxC,EAAKnoB,EAAiB4lC,GAClBz5D,EAAc,EAAKo3D,EAAUza,aAAcj8C,EAAOu7C,YAKnD,EAAK+b,EAAkBllG,IAAI+lG,EAAWn4D,SACrCm4D,EAAWn4D,OAAOg5D,oBAChBb,EAAWc,IACPC,EA0qEL,IAzqE0Cf,EAyqEzBp+G,KAAO,IAzqEkBo+G,EAyqEDn4D,OAAOziC,GAAK,IAxqEjD,EAAKo5F,EAA2BvkG,IAAI8mG,IAQvC,EAAKvC,EAA2B10G,IAC5Bi3G,EAAcf,EAAWn4D,OAAOg5D,oBAGtCb,EAAWn4D,OAAOg5D,qBAKlBG,EACFhB,EAAWn4D,OAAO2iD,qBAAuB3iD,EAAO2iD,oBAEpDwV,EAAWn4D,OAASA,EACpBm4D,EAAWD,GAAkB,KAC7BC,EAAWzhF,KAAeA,EAKtByiF,EACGC,GAALA,GAAmC,GAAyB,IAI1DV,EACEP,EAAWkB,GAGblB,EAAWmB,IAAuB,EACzBnB,EAAWc,IAKpBd,EAAWoB,IAAuB,EAClCpB,EAAWqB,GAAwBb,EACnCR,EAAWmB,IAAuB,IAG7BnC,GAAcgB,GAEdsB,GAALA,EAAkBtB,GAAyB,EAAMQ,GAC5C1qD,OAAM,SAAC5lD,GA/GkD,EAgH/C8qE,GAhH+C,EAmHjDA,EAAiBrR,QAAQz5D,EAJhB,KASnB8vG,EAAWc,IAAqBd,EAAWuB,IACzCC,GAALA,EAAqBxB,EAAY,GAqBjCyB,SAAAA,EAAmBzB,GAOvB,IAAM0B,EACAC,EAR6B,OAAAv6E,GAAA,sBAGnC,OAAK44E,EAAWtyC,IAIVg0C,EAAiB1B,EAAWn4D,OAC5B85D,EAAoB3B,EAAWtyC,GAEhCg0C,EAAexnD,aAApB,OAGE,IAAMwnD,EAAe5e,qBAArB,IATA,EAAA95D,SAkBF,GANIg3E,EAAWtyC,IAAai0C,GAMxB3B,EAAWn4D,QAAU65D,EAIvB,SAAA14E,SAyBI44E,IAAAA,EAnD6BC,EAmDL7mC,EAAiB8mC,KACzC/xB,EACsCA,GArDT8xB,EAqD1B7mC,EAAiB4lC,GArBUZ,EAqB6Bp+G,MAM3D4C,EA3B8Bw7G,EA2BXn4D,OAAOqS,aAAa9xC,KA3BT43F,EAqwBpB+B,GArwBoB/B,EAywBlB+B,GAAqBhsE,QA/uBY6rE,GAE7CI,EACO,MAATx9G,EAAgB,KA7BgBw7G,EA6BEn4D,OAAOqS,aAAatlD,IAAIpQ,GAE1Dy9G,EAAiBD,GAAaA,EjD7WzB11B,GiD6WyB01B,EjD5WpB11B,GiD4WoB01B,EjD5WL31B,GiD4W4B,KACrD21B,IAAeC,IAKjBA,GAHiBD,EjD/YPjsE,QiD+YiCisE,EAAWxzB,iBAlCpBwxB,EAmCLn4D,OAAOvwB,WAAa,GAET,GAGrC2qF,IAKCn5F,EAAOk5F,EAAW/0B,MAEtBg1B,IAAkBn5F,EjDlqBXwjE,GiDkqBWxjE,EjDjqBNwjE,GiDiqBMxjE,EjDjqBSujE,GAEpB,OiD+pB6B,GAuBtC,EAhBgD,EAAjB41B,GAJzBvhD,EAlF6BmhD,EAkFJ7mC,EAAiBzjD,yBAQzBw4D,GAAa,GAAK6xB,EACpB95G,KAAK4G,IA3FSmzG,EA4F1BtD,EAAUtK,eAAiB,EA5FD4N,EA6F1BxkD,EAAQw4C,kBA7DmBmK,EAqEFtyC,GnCyDtB4E,EAxCAlB,EmChBS6wC,GA7BnB,GAAO,EAzCL,GAEFjC,EAAWtyC,GAAUjF,QAlCY,QAjB9Bg5C,CAALA,EAAwBzB,GAAYlqD,OAAM,SAAC5lD,GA7HuB,EA8HvD8qE,GA9HuD,EAiIzDA,EAAiBrR,QAAQz5D,EAJmB,MAlVjDgyG,SAAAA,EAAmBr6D,GACvB,IAAMs6C,EAIAggB,EAOGjyG,EAMH+sB,EAWEziB,EA7BuB4sB,GAAA,+BAW7B,OAVI+6D,EAA6C17C,GADpB,EAI1Bk4D,IACCwD,EALyB,EAKAxD,EAE3B,OAIF,IAA8ChhF,GAXjB,EAWlBq9C,EAAiB4lC,GAAwBze,EAAY37C,IAAhE,GAX6B,OAO3B,aAP2B,OAYtBt2C,EAAAA,EAAAA,GAZsB,EAapB8qE,GAboB,EActBA,EAAiBrR,QAAQz5D,GAdH,OAkBzB+sB,EAAgCsqB,GAClCM,EAAO5qB,SAAU4qB,EAAOhD,QACYs+C,GApBT,EAoB1BnoB,EAAiB4lC,GAClB3jF,EArB2B,EAqBZshF,EAAUza,aAAcj8C,EAAOu7C,WArBnB,EAwBtBpoB,EAAiB4lC,GlB+lDdlhB,GkB7lDM0iB,iBA1Ba,EA0BW/kD,EAAQglD,mBA1BnB,EA4BP1D,GAAyBwD,IACzC3nG,EAAa8nG,GA7BUA,EA6BQz6D,GA7BR,EA8BxB+2D,EAAa90G,IAAIq4F,EAAY37C,GAAMhsC,GACnCgnG,GA/BwBA,EA+BRhnG,EAAO,IA/BC,SA2NxB0nG,CAALA,EAAwBr6D,EANwC,UAyUpE,GAAA06D,EAAkBvC,GAGZA,EAAWkB,IAOXlB,EAAWoB,KAOXpB,EAAWc,IAIbd,EAAWoB,IAAuB,EAGlCpB,EAAWqB,GAAwB,GAK4B,MAArBjd,GAAxC,EAAKppB,EAAiB4lC,GADbZ,EAAWp+G,MAIQ,MAA1Bo+G,EAAWuB,IAGRC,GAALA,EAAqBxB,EAAY,IAQhChB,GAAcgB,GACdsB,GAALA,EAAkBtB,GAAyB,EAAO,GAAGlqD,OAAM,SAAC5lD,GA5ChC,EA6CjB8qE,GA7CiB,EAgDnBA,EAAiBrR,QAAQz5D,EAJoC,KA5C1C,CA0I9BoyG,SAAA,GAAAA,EAAkBz6D,GAChB,MAA+D,CAC7DA,OAAAA,EACAjmD,KAAMimD,EAAOjmD,KACbm+G,GAAiB,KACjBb,EAAsBsD,GAALA,EAA4B36D,GAC7Ck6D,GAAsB,KACtBU,GAA0B,KAC1BC,GAAqB,KACrBC,GAAuB,KACvBC,GAAqB,KACrBzC,GAA6B,KAC7BjV,aAAa,EACb4V,IAAkB,EAClBS,GAAa,KACbH,IAAsB,EACtBC,GAAuB,EACvBF,IAAsB,EACtBD,IAAgB,EAGhBxc,IAAQ,EACRme,IAAY,EACZC,IAAU,EACVp1C,GAAW,KAxBW,CAmC1B80C,SAAA,GAAAA,EAAuB36D,GAiBrB,GvDhzBKnB,UuDiyBDmB,EAAOjmD,MACP,EAAKy7D,EAAQ0lD,sBvDjyBZp8D,UuDoyBDkB,EAAOjmD,MACP,EAAKy7D,EAAQ2lD,sBAMbn7D,EAAOjmD,OAAqB0jD,KtDjwBkB2E,uBsDkwB7CpC,EAAO5qB,UtD5vBsCitB,uBsD4vBXrC,EAAO5qB,WAG1C4qB,EAAOjmD,OAAqB0jD,IAC5B,EAAK+X,EAAQ4lD,oBACf,OAAO,KAET,GAAI,EAAK9D,EAAkBllG,IAAI4tC,GAC7B,OAAO,EAAKs3D,EAAkBvqG,IAAIizC,GAIpC,IAAMm4D,EAAa,EAAKpB,EAAahqG,IADhCizC,EAAOjmD,MAGZ,OADMshH,EAAyBlD,GAAcA,EAAWd,IAEtDr3D,IAAWq7D,ELvtBD9I,EKwtBH8I,EAE+B,EAApC,EAAK7lD,EAAQ8lD,qBAER,IAAgBC,GACnB,EAAK/lD,EAAQ8lD,qBACbt7D,GACA,SAACr9C,EAAWq9C,EAAQ4nB,GAClB,OA42C2B4zC,GA52CA74G,EAAWq9C,EAAQ4nB,GA62CT,KAn5ChB6zC,EAo5CpBjmD,EAAQsS,gBAp5CY2zC,EAo5CUtoC,EAAiB0H,GA/2CP,GAJW,EAA1C,EAAK1H,EAAiB8kC,MASjC,IA1CsB,CA6mCzByD,SAAA,GAAAA,EAAevD,EAAY9yB,EAAiBC,EAC9CC,EAAiB5iF,EAAWq6C,EAAQ5nB,GACtC,IAAMklE,EAMAwH,EAkBE6Z,EAQCtzG,EAjCuC,OAAAk3B,GAAA,sBA4B9C,OA3BI+6D,EAA6C17C,GAM7CkjD,EAAgB,IAAIjvE,IAPsB,EAQvCy9E,EAAgBprD,OACvB48C,EAAc7/F,IAAIq4F,EAAYx7C,EATgB,EASJwxD,EAAgBprD,OATZ,EAWvCorD,EAAgBnrD,OACvB28C,EAAc7/F,IAAIq4F,EAAYz7C,GAZgB,EAYJyxD,EAAgBnrD,OAExD,OACFgzD,EAAW2C,GAAwBx1B,EACnC6yB,EAAW4C,GAAsBx1B,EAC7BvoC,IACFm7D,EAAWyD,GAAa5+D,GAEtB5nB,IACF+iF,EAAW0D,GAAezmF,GAE5B+iF,EAAW0C,GAAsBx1B,EAE3Bs2B,EAzBwC,EAyBXjF,EAAUza,c3BlgElBmB,O2By+DmB,EA0BrCsZ,EAAU38G,KAEnB,alB7tBE+hH,EACFhnE,EAAauwC,EAAiBC,EAAmBC,EACjDo2B,EAAuBvmF,EAAU4nB,EAAQ8kD,GAC3C,IAAMxH,EAQA55B,EAToD,OAAAnhC,GAAA,0BAEtDuV,IADEwlD,EAA6C17C,IACpBD,IACxBg9D,IAHmD,EAIjD1jB,E5D/qCJt2C,E4D+qCmC0jC,G5DxqC1C02B,SAAAA,EAAgBz2B,EAAmBC,GACjC,EAAK7jC,EAAqB4jC,EAC1B,EAAK1jC,EAAmB2jC,CAF0B,C4D0qC/Bw2B,CANuC,EAMnD9jB,EAA4B3S,EAAmBC,GACpD,EAAApkD,WAEIu/B,EAAa,GAEM,IAwyBrBs7C,SAAAA,EAAwBlnE,EAAa1f,EAAU4nB,EAAQ8kD,GAC3D,IAAMxH,EAKA1xC,EAEAqzD,EAIF5mE,EACA6mE,EACAC,EACA3hB,EAQI4hB,EAEAv8D,EAIEsH,EAEAD,EAIA1J,EAaJ6+D,EAEAC,EAuBFC,EAzEsE,OAAAh9E,GAAA,0BAEtEuV,IADEwlD,EAA6C17C,IACpBD,GACtB,EAAPxd,QAAO,IAGHynB,EAAyBD,GACjBiF,GAP4D,EAO7CmqC,EAAmBjjD,KAC1CmnE,EAA6BnuD,GARuC,EASjEiqC,EAAmBjjD,IAIxBonE,GAAkB,EAClBC,EAAmCz8D,GAAYtqB,EAAU4nB,GACzDw9C,EAfsE,EAelDhlC,EAAQgmC,gBACF1vC,GAAgBqwD,KAhB4B,EAiB/D/iB,GACc75C,GAAY34C,SAASu1G,MAC5C3hB,GAAe,GAGbA,IACI4hB,EACmBx8D,GAAyBxqB,EAAU4nB,GACtD6C,EACepK,GAAe2mE,MAElC/mE,EAAawK,IACPsH,EAA4ClK,GAC9Cq9C,EAAYx7C,GAAQ9B,GAAU,IAAIptC,MAAM,MACtCs3C,EAA4CjK,GAC9Cq9C,EAAYz7C,IAAQ7B,GAAU,IAAIptC,MAAM,MACxCu3C,GAAcD,GAChBg1D,GAAkB,EACd1+D,EAAQ0J,EACRpS,GAAewlD,EAAYx7C,IAC7BtB,EAAQ2J,GAEVg1D,EAAc9mE,EAAWyK,cAAchL,EACd8K,GAAyBxqB,EAAUooB,KAE5D2+D,EACI9mE,EAAWyK,cAAchL,EAAasnE,IAK1CC,EAAqB1zD,GACbiF,GAAUuuD,IAClBG,EAAyBxuD,GAAaquD,GAGxCvzD,IAAiByzD,GAAYJ,IAAqBK,GArDoB,EAsD/DlkB,EAAatjD,KAAiBO,GAtDiC,EAuDjE+iD,EAAatjD,GAAaS,iBAvDuC,EAwD1D6iD,EAAatjD,KAxD6C,EAyDvDsjD,EAAatjD,IAAgBO,EAzD0B,EA0DjE+iD,EAAatjD,GAAeO,EACxBA,IA3D6D,EA6D7D+iD,EAAatjD,IA7DgD,EA8D7DsjD,EAAatjD,GAAa+qD,UAAYxqD,EAAWwqD,UA9DY,EA+D/DzH,EAAatjD,GAAaS,iBA/DqC,EAgExD6iD,EAAatjD,GAhE2C,EAiE/DsjD,EAAatjD,GAAeO,GAEjCA,EAAWE,WAGf,EAAApU,QAAO,KAGLo7E,GAAkB,GAzEoD,EA0EjE7iB,GAA2BwiB,GAChC7mE,IA3EsE,EA2ElD+iD,EAAatjD,MACnCynE,GAAkB,GAGhBA,GxBjzEIl+C,WwBkuEkE,EA+E9C7I,EAAQ+E,wBAELtR,KAC7B,IA/RJt2B,SAAAA,EAAWmiB,EAAa1f,EAAUigB,GAChC,OAAYmqD,GAALA,EACH1qD,GACA,WAAmBA,IArCS2I,KAMHwL,OA4BeuzD,EA3BjCpkB,EA8BYtjD,KAHqB0nE,EA1BnCpkB,EA6BctjD,GA7BYS,iBA0BSinE,EAzB5BpkB,EA4BOtjD,IAAuBO,IAHFmnE,EAtBnCpkB,EAyBctjD,GAAuBO,GAHFmnE,EAnBrC1kB,EAsBgBhjD,GAtBYniB,WAsBCyC,EAHQonF,EA6XjBhnD,EAAQkmC,+BA1XCtmE,IAHQonF,EAlBrCzkB,EAqBgBjjD,GAAa1f,GAf/B4mE,GAYuCwgB,EAGrB1nE,GAAb,GACN,KAJwC,CA+R/BniB,CAlF6DA,EAkFlDmiB,EAAaqnE,EAAa9mE,GAAhD,IAEIA,GACFA,EAAWE,UAEb,IAAWhf,GAvF6DA,EAuFvDurE,GAAjB,MAEK,EAAP3gE,QAAO,EAzFmE,IAxyBtC66E,CAXsBA,EAYtDlnE,EAAa1f,EAAU4nB,EAAQ8kD,GADV,WAYvBphC,EAAWllE,KAAUgkG,GAvBmCA,EAwBpD1qD,GACA,WAAM,OAAK2qD,GAzByCA,EAyBlC3qD,EAAZ,GACN,OA1BoD,EA2B/C4kD,GACPh5B,EAAWllE,KAAUgkG,GA5BiCA,EA6BlDlF,EAAYx7C,GACZ,WAAM,OAAK2gD,GA9BuCA,EA8BhCnF,EAAYx7C,EAAxB,GACN,QAGH68D,IACHj7C,EAAWllE,KAAUgkG,GAnCmCA,EAoCpD1qD,GACA,WAAM,OAAK4qD,GArCyCA,EAqCrB5qD,EAAauwC,EAAtC,GACN,OAtCoD,EAuC/CqU,GACPh5B,EAAWllE,KAAUgkG,GAxCiCA,EAyClDlF,EAAYx7C,GACZ,WAAM,OAAK4gD,GA1CuCA,EA2C9CpF,EAAYx7C,EAAOumC,EADjB,GAEN,QAGR3kB,EAAWllE,KAAUgkG,GA/CqCA,EAgDtD1qD,GACA,WAjDsD2nE,EAuSrD3kB,EArPGhjD,GAqPyBwwC,kBAAoB,EAvSKm3B,EAwSrD3kB,EAtPGhjD,GAsPyBywC,gBAtPOA,EAlDkBk3B,EAySrD3kB,EAvPGhjD,GAuPyBwwC,kBAvPZA,EA0PhB0W,GA5SqDygB,EAkDlD3nE,EADE,GAEN,OAnDsD,EAoDjD4kD,GACPh5B,EAAWllE,KAAUgkG,GArDmCA,EAsDpDlF,EAAYx7C,GACZ,WACgBA,IAAAA,EAAZw7C,EAAYx7C,EAxDoC29D,EAuSrD3kB,EAAehjD,GAAawwC,kBAAoB,EAvSKm3B,EAwSrD3kB,EAAehjD,GAAaywC,gBAhPeA,EAxDUk3B,EAySrD3kB,EAAehjD,GAAawwC,kBAjPJA,EAoPxB0W,GA5SqDygB,EA4SxC3nE,EArPN,GAEN,OAGN,IAAMiO,QAAQE,IAAIyd,GAAlB,GA5D0D,IkB2tBVo7C,CA5BA,EA4BnC3oC,EAAiB4lC,GACxBZ,EAAWp+G,KAAMsrF,EAAiBC,EAClCC,EAAiBo2B,EACjBh5G,EAAUyyB,UAAY+iF,EAAWn4D,OAAO5qB,SACxCzyB,EAAUq6C,QAAUm7D,EAAWn4D,OAAOhD,OAAQ8kD,GAJlD,GA5B8C,UAc5C,cA0BF,MAPOz5F,EAAAA,EAAAA,GACP8vG,EAAW2C,GAAwB,KACnC3C,EAAW4C,GAAsB,KACjC5C,EAAWyD,GAAa,KACxBzD,EAAW0D,GAAe,KAC1B1D,EAAW0C,GAAsB,KAE3BxyG,CAxCwC,IA0D5Cg5F,SAAA,GAAAA,EAAQ8W,EAAY4B,EAAkB/5D,EAAQr9C,EAAWmjB,EAC3Dg3E,EAAuBpmE,GAGzB,IAAMkmE,EAIA5iG,EAEE0iH,EAEF/3B,EAIEg4B,EAwDF9f,EAvEuC,OAA3CC,OAAA,IAAAA,GAAAA,EAAuBpmE,OAAA,IAAAA,GAAAA,EAAoB6I,GAAA,+BAkE7C,OA/DMq9D,EAAoB58C,EAAOm9C,gBACA,EAA7Bn9C,EAAOm9C,eAAe3+F,KAJmB,EAMpCg3D,EAAQmnD,2BAGTD,EAA2B,aAAnB18D,EAAO5qB,UACM,aAAnB4qB,EAAO5qB,SACXuvD,EAAY,KACZhiF,EAAUyiF,KACZT,EAAYhiF,EAAUyiF,GAAqBT,YAEvCg4B,EAA2BD,GAAS/3B,GvDv9DvC9lC,UuDw9DCmB,EAAOjmD,M3B9iEiB6iH,Q2B8hEe,EAiBlClG,EAAU38G,QAGjBC,EAAS,IAAe63E,IAGtB8qC,GACF3iH,EACKoC,IAAI,OAA6B81E,IACjC91E,IAAI,OAA6B81E,IACjCf,EAAQ,QAAQ,SAAO/0E,GAKtB,IAAMygH,EAGApyB,EASAqyB,EAKEhC,EACAC,EAvBsB,OAAAx7E,GAAA,YAW9B,OANMs9E,EAAsCvd,GACxCljG,EAAI6zE,OAAQ7zE,EAAI1B,UAEd+vF,EAAsBoyB,EAAWpyB,yBASRA,EAAsB9F,GAEjCt/C,OAAO8yE,EAAW0C,KAAwB,GAE5CiC,GACVhC,EAAwB3C,EAAW2C,GACnCC,EAAsB5C,EAAW4C,GAKvC,IAAWW,GAvDsBA,EAuDPvD,EAAY2E,EAClChC,EAAuBC,EAAqBp4G,GADhD,IAPF,QATE,EAAAw+B,QAZ4B,OAkClCw7E,GACF3iH,EAAOF,MAAMgsB,GAA4B,EAAOg3E,IAIpD,IAAWigB,GAlEkCA,EAkE3B5E,EAAY4B,GAA9B,GAlE6C,OA0E7C,OAPgBjsC,GAnE6B,EAmExCwH,GAICunB,EAASsb,EAAWtb,GAC1Bsb,EAAWtb,IAAS,EAEpB,IA1E6C,EA0ElC1pB,EAAiB6pC,GAAoB7E,EAAWp+G,KAAM+rB,GAAjE,GA1E6C,OA2E7C,WAA8C62E,GA3ED,EA2ElCxpB,EAAiB4lC,GACxBZ,EAAWp+G,KACX+rB,EACAnjB,EACAq9C,EACA48C,EACAC,EACAnmE,EACAomE,GARJ,GA3E6C,OAoF7BhvB,GApF6B,EAoFxCwH,GApFwC,SA+FzCynC,SAAA,GAAAA,EAAO5E,EAAY4B,GACvB,IAAM1nD,EAYA4qD,EAIAhvE,EAcAujD,EA/BmC,OAAAjyD,GAAA,4BACnC8yB,EAAe8lD,EAAWn4D,OAAOqS,wBACC6qD,IACtC7qD,EAAa8qD,GAH0B,EAI9BzG,EAAUxK,qBAAqB/B,MASpC8S,EAAeh9G,KAAK4G,IAbe,EAchC2uD,EAAQynD,aAdwB,EAcJrG,EAdI,EAehCF,EAAUxK,qBhBvrEPhI,GgB2rEK,OAFXj2D,EACsCsuD,GAlBH,EAkBhCppB,EAAiB4lC,GAA8BZ,EAAWp+G,QAlB1B,EAoB9B89G,GAAmCM,IApBL,EAqBhCN,EAAkC,MAMzC,EAAA12E,WAIIqwD,EAFiBuoB,EAAmB9rE,EAERgvE,IA/BO,EAiCpBznD,EAAQ4nD,aAQ3B,EAAAj8E,SAWF,IApDyC,EAoD9BgyC,EAAiB4lC,GAAkB3nF,OAAO+mF,EAAWp+G,KAC5Dk0C,EAAWA,EAAYujD,GAD3B,IApDyC,QAuDzB1jB,GAvDyB,EAuDpCwH,GAvDoC,EA0DhCuiC,EACP,IAAWkF,GA3D4BA,EAAA,EA2DhBlF,EAAiCkC,GAAxD,GADF,SAEkBjsC,GA5DuB,EA4DlCwH,QA5DkC,SAsE3C+nC,SAAO,GAAgBlF,GAIrB,OAAOA,GACHA,EAAWp+G,MAAmD0jD,KtDvkEhB2E,uBsDwkE7C+1D,EAAWn4D,OAAO5qB,UtDlkE2BitB,uBsDmkE7C81D,EAAWn4D,OAAO5qB,SAPU,CAsB7BkoF,SAAA,GAAAA,EAAOnF,EAAYx1G,EAAWilE,GAClC,IAAMgd,EAIFjkB,EAUA7lD,EAMEgvD,EAEFtsE,EAvBkD,OAAA+hC,GAAA,+BAEtD,GADMqlD,EAAcjiF,EAAUwiF,KAE5B,OAAO,EAAPhkD,OAAOyjD,GAGT,GADIjkB,EAAK,KACLw3C,EAAWd,EAAf,CACkBA,IAAAA,EAAXc,EAAWd,EL1sEdnD,EAAc,EAAKzB,EK2sEjB9vG,aL1sE+B8jF,KACnCytB,EAAc,EAAKxB,GAGjBwB,EAAY9hG,IKssEVzP,ILrsEEywG,EAA2Bc,EAAYnnG,IKqsEzCpK,GAAWilE,ILnsEbwrC,EAoRCgB,GK+6DYxsC,GLtrEf,EAAOwrC,EA+PGe,IAlPV,EAAO,IKuqET,CAeiB,OAXZxzC,IACHA,EAmCiC66C,GAlC7B74G,EAAWw1G,EAAWn4D,OAAQ4nB,GAmCS,KA/CS6zC,EAgD7CjmD,EAAQsS,gBAhDqC2zC,EAgDftoC,EAAiB0H,KAjCpD//D,EAAW,EACXq9F,EAAWD,KACbp9F,EAAWq9F,EAAWD,GjB7zDZtJ,GiBg0DZuJ,EAAWtyC,GAAYlF,EACN,IAAMA,EAAGZ,QAAT,GArBqC,OAwBtD,GAHM+J,EAAW,IACjBquC,EAAWtyC,GAAY,KACnBroE,EAASssE,EAASvpE,MAClBoC,EAAUkiF,OAAd,cACW,WAA+B04B,GACpC//G,EAAQmF,EAAUkiF,OAAQ/pE,GADrB,GAzB2C,OAyBpDtd,EAAS,IAzB2C,OA4BtD,OAAO,EAAP2jC,OAAO3jC,GA5B+C,IAgExD81G,SAAO,GACH3wG,EAAWq9C,EAAQ4nB,EAAoBE,EAAiB+S,EACxDE,GAAAA,OAAA,IAAAA,GAAAA,EAEF,IAAMj1D,EAAUnjB,aAAiCmlF,GAC7CnlF,OAAY6B,EACVzK,EAAO+rB,EnCllDE03F,EADDC,EmCgmDd,OAVMv1C,EAAgCw1C,GAClC/6G,EAAUmiF,IACVniF,EAAU6hF,GACV7hF,EAAU8hF,GACV3c,EACAF,IACI9yB,YAAckL,EAAOjmD,KAItB8gF,EAAU3S,QACbmB,GAAanB,EAAS,CAACnuE,KAAAA,EAAMimD,OAAAA,EAAQl6B,QAAAA,EAASi1D,UAAAA,GAlB7B,CAgCjB0+B,SAAA,GAAAA,EAAatB,EAAYhV,EAAOwV,GAqBlC,IAAMoB,EACAja,EAtBwC,OAAAvgE,GAAA,2BAOhD44E,EAAWoB,IAAuB,EAClCpB,EAAWmB,IAAuB,EAClCnB,EAAWqB,GAAwB,EACnCrB,EAAWkB,IAAiB,EAC5BlB,EAAW+B,GAAuB,KAClC/B,EAAWD,GAAkB,KAGzBC,EAAWd,IAfiC,EAgBtCC,EAAkBllG,IAAI+lG,EAAWn4D,SACd2zD,GAA3BwE,EAAWd,GAGTsB,GACIoB,EArBwC,EAqBhB5mC,EAAiB8mC,KACzCna,EAtBwC,EAsBxB3sB,EAAiB4lC,GAAkBtV,cACzD,IAvB8C,EAuBnCtwB,EAAiB4lC,GAAkB3nF,OAC1C+mF,EAAWp+G,KAAMggH,EAAmBpB,EAAY7Y,GADpD,IAGA,IAA8ChqE,GA1BA,EA0BnCq9C,EAAiB4lC,GAAwBZ,EAAWp+G,MAA/D,IA1B8C,QA2B9B+zE,GA3B8B,EA2BzCwH,GAED6tB,EACF,IA9B4C,EA8BjChwB,EAAiB4lC,GAAkB5V,MAC1CgV,EAAWp+G,MADf,GADF,SAMc+zE,GAnCgC,EAmC3CwH,GAGL6iC,EAAWkB,IAAiB,EAC5BlB,EAAW9U,aAAc,EAGpB8U,EAAWc,IAAqBd,EAAWuB,IACzCC,GA3CyCA,EA2CzBxB,EAAY,QA3Ca,SAuDlDwB,SAAA,GAAAA,EAAgBxB,EAAY9P,GAK1B,IAAMtuG,EAAOo+G,EAAWp+G,MACpBA,GAAmD0jD,IAChD,EAAKs5D,EAAa3kG,IAAIrY,MAS7Bo+G,EAAWuB,GAQRh7E,IARqC0C,IAAY,WAGzC/4B,IAAAA,EAHqD,OAAAk3B,GAAA,2BAC1D,OACF,aAl4CAo+E,EAAUxF,GAyCZ,IAAMyF,EAIGv1G,EAwBHggG,EAKChgG,EAKHw1G,EAoBE/d,EAnGkB,OAAAvgE,GAAA,+BAgB1B,GAfgBuuC,GADU,EACrBwH,GAQD6iC,EAAWc,IAA+C,MAA1Bd,EAAWuB,IAO3CvB,EAAWkB,GACb,SAAAl4E,SAMF,GAHAg3E,EAAWuB,GAAc,MAGrBvB,EAAWoB,GAAf,cAGE,WAAWE,GA1BaA,EA2BpBtB,EAAYA,EAAWmB,GACvBnB,EAAWqB,IAFf,GA1BwB,OA6BxB,SAAAr4E,SA7BwB,OAwC1B,GArsBF28E,SAAAA,EAAmC3F,GACjC,IAA2B,MAAA1rF,EAAA,EAAKkqF,EAA2BhqG,WAAhC,YAA3B,kBAAsE,CAA3D,MAAA8f,EAAX,SAAY9nB,EAAD,eAAMzD,EAAN,eAGL68G,EAASn3G,SAASuxG,EAAWp+G,QAC/Bi/G,IACA,EAAKrC,EAA2Bv8C,OAAO2jD,GAL2B,CADzB,CAksBxCD,CArCqBA,EAqCc3F,GAGnCA,EAAWn4D,OAAOqS,aAAvB,cAII,OAHIurD,EAAazF,EAAWn4D,OAE1B,OACF,IAAMm4D,EAAWn4D,OAAOi7C,qBAAxB,GA5CsB,OA2CpB,aA3CoB,OA8CtB,OADO5yF,EAAAA,EAAAA,GACP,IAAW21G,GA9CWA,EA8CW7F,EAAY9vG,GAA7C,GA9CsB,OA+CtB,SAAA84B,SA/CsB,OAkDxB,GAAIy8E,GAAczF,EAAWn4D,OAa3B,OARI49D,EAAW5E,mBAGb4E,EAAW5E,oBAERb,EAAWc,IAAqBd,EAAWuB,IACzCC,GA7DeA,EA6DCxB,EAAY,GAEnC,EAAAh3E,SA/DsB,OAoEtB,OACIknE,EA+CV4V,SAAAA,EAAQ9F,GAQN,GAAgC+F,GAAgB/F,GAG9C,OlBiCJ71D,SAAAA,EAA2B/kC,GAEzB,IAAM4gG,EAA0Bj2B,GAALA,ErC9kCtBrpC,UqC8kC+C,EACnCyD,GAAjB,EAAK21C,EAAuC16E,EAAI4gG,EAHnB,CkBnCa77D,CAAxC,EAAK6wB,EAAiB4lC,GAClBZ,EAAWn4D,OAAOkS,YAAc,IAC7B,KAOT,GANWimD,EAAWp+G,MAAoB0jD,IlBuC5C2gE,SAAAA,GACM,EAAKnmB,GACU31C,GAAjB,EAAK21C,EAAuC,GAAI,EAFrB,CkBpCammB,CAAxC,EAAKjrC,EAAiB4lC,IAGpBZ,EAAWn4D,OAAO2iD,oBACpB,OAAO,KAGT,IlB5nBF0b,SAAAA,GACE,OAAO,EAAK5lB,KAAsB,EAAKC,CADpB,CkB4nB0B2lB,CAAxC,EAAKlrC,EAAiB4lC,KACvBZ,EAAWp+G,MAAoB0jD,GAIjC,OAAO,EAAK+X,EAAQ8oD,sBAAwB,EAM9C,IAAMvE,EAAmB,EAAK5mC,EAAiB8mC,KAE/C,GvDlkCKn7D,UuDkkCDq5D,EAAWp+G,KAEb,IAAqB,MAAA0yB,EAAA,EAAK6qF,EAAkB/tG,QAAvB,YAArB,mBACQ8uG,EAAW,EAAKf,EAAkBvqG,IAD1C,EAAAizC,QAEWm9D,GAAMpD,GAA2C,GACjDjH,GAATuF,EAAgC0B,GAK9BwE,EAAiCpG,EA+IvB+B,GA/IuB/B,EAmJrB+B,GAAqBhsE,QAnJY6rE,EAMnD,IAAMyE,ElB3jBRn2B,SAAAA,EAAgBvzC,EAAaxP,GAE3B,OAAIwP,GAA2B2I,G5D3cR,O4D4cTw6C,EAALA,EAAKA,G5D5cLp2C,GAAsB,EAAKA,E4D4cMvc,E5D3cjC,EAOF,EAAKuc,EAAa5hD,KAAK4G,I4DocYy+B,E5DpcL,EAAKwc,G4DucL28D,GAD7B/hB,EAAgBD,GAALA,EAAkB3nD,GAC0BxP,EAN9B,CkB4jBW+iD,CAAxC,EAAKlV,EAAiB4lC,GAClBZ,EAAWp+G,KAAMggH,GAYnB2E,EAAsBz+G,KAAK4G,IAAI,EALP5G,KAAK4G,IAC/B,EAAK6vG,EAAUtK,eAAiB,EAChC,EAAK52C,EAAQw4C,gBACb,EAAKx4C,EAAQmpD,eAGW,EAAK/H,GAG3BgI,EACF,EAAKlI,EAAUxK,qBAAqBzI,cAAgB8a,EAMxD,GAHMr2B,EACoCA,GAAxC,EAAK/U,EAAiB4lC,GAA4BZ,EAAWp+G,MAHxC8kH,KAKnBD,GAAmC12B,EAgBrC,OAZAiwB,EAAW9U,aAAc,EvDhnCtBxkD,SuDknCCs5D,EAAWp+G,OAIP+kH,EAAY,EAAK/H,EAAahqG,IAAgB0wC,MAEpBygE,GAAgBY,KAC9CA,EAAUzb,aAAc,GAGrB,KAKT,GAHA8U,EAAW9U,aAAc,EAGrBmb,GAAiBE,EAMnB,OAAO,EAAKlpD,EAAQ8oD,sBAAwB,EAO9C,GAHMS,GAAiB5G,EAAWD,GAC5Bv1G,EAmGRq8G,SAAAA,EAA2B7G,EAAY4B,EAAkB7xB,GAMvD,GAAIiwB,EAAWD,GAIb,OAAOC,EAAWD,GAAgB37C,UAC7B,GAAI47C,EAAW+B,IAAwBhyB,EAoB5C,OAlBM5iD,EAAO6yE,EAAW+B,GACpB/B,EAAW+B,GAAqBhsE,QAChCg6C,EAKE8Y,EAAoD,EAA1C,EAAK7tB,EAAiB8kC,KAClCE,EAAWn4D,OAAOqS,eACpB8lD,EAAWD,GACPC,EAAWn4D,OAAOqS,aAAa4gD,GAC3B3tE,GAAgC,EAAO07D,IAErCmX,EAAWD,IACnBC,EAAWD,GAAgBhyG,OAAOhF,MAWhC+9G,EAAsB,EAAKvI,EAAUza,aACzC,EAAI,EAAKzmC,EAAQ0pD,4BACnB,IAAMC,EAAal/G,KAAK4G,IAAIkzG,EAAmBkF,EAAqB,GAM9Dje,EAAoD,EAA1C,EAAK7tB,EAAiB8kC,KACtC,IAAI9c,EAAM,KA0BV,OAzBI8jB,IACE9G,EAAWn4D,OAAOqS,eACpB8lD,EAAWD,GACPC,EAAWn4D,OAAOqS,aAAa4gD,GAC3BkM,GAAsC,EAAOne,IAEvD7F,EAAMgd,EAAWD,IACbC,EAAWD,GAAgBhyG,OAAOhF,OAEnCi6F,IAGCgd,EAAWn4D,OAAOqS,eACpB8lD,EAAWD,GACPC,EAAWn4D,OAAOqS,aAAa4gD,GAC3B8G,GAA4C,EAAO/Y,IAE7D7F,EAAMgd,EAAWD,IACbC,EAAWD,GAAgBhyG,OAAOhF,OAOjCi6F,CAzEyD,CAnG3C6jB,CAALA,EACd7G,EAAY4B,EAAkB7xB,IAC7BvlF,EAKH,OAAO,EAAK6yD,EAAQ8oD,sBAKlB5nF,GAAa,EACbqoF,GAAiB5G,EAAWzhF,KAC9BA,GAAa,EACbyhF,EAAWzhF,IAAa,GAItB0oF,EAAgBzqF,IAEpB,IAAyBkpF,IAAAA,GAAAA,EAAApxF,EADnBoxF,EAAc77G,MAAM24B,KAAK,EAAKo8E,EAAanqG,YACxBixG,QAAzB,kBAGkCK,GAHlC,YAQMmB,EAAWnH,KAAoBmH,EAAWnH,GAAgB37C,YAK9D6iD,EAAgBn/G,KAAKQ,IAAI2+G,EADcC,EA+CzBnF,GA/CyBmF,EAmDvBnF,GAAqBhsE,QAnDc6rE,IAQrD,OAAIwE,GAAca,EAHdE,EAAK5I,EAAUxK,qBhBnzCPhI,EgB2zCH,EAAK1uC,EAAQ8oD,yBAGPjH,GAAmBc,EAAWD,KACxC,EAAKZ,EAAkBllG,IAAI+lG,EAAWn4D,UACzCm4D,EAAWd,EAAgB8F,GAAMx6G,EAAUsrC,WAChB6kE,GAA3BqF,EAAWd,EAAuC10G,EAAUsrC,YAwI1DsxE,SAAAA,EAAgBpH,EAAY4B,EAAkBp3G,EAAW+zB,GAC7D,IAAM4jE,EAeAt6C,EACAw/D,EAmBE9C,EAEA+C,EAqGEjiH,EA7FF0yF,EACAwvB,EACAC,EACAC,EACEh4C,EAgDApqE,EA2EFsyD,EACA4sC,EAYCr0F,EA1LgE,OAAAk3B,GAAA,+BAsBvE,GArBI+6D,EAA6C17C,GAe7CoB,EAASm4D,EAAWn4D,OACpBw/D,EAAOrH,EAAWD,GAExBC,EAAWc,IAAmB,EAE1B,OjD78BG9pB,GiD88BDxsF,EAAUokF,KAEZ,MAAM,IAAextD,GtEz8CZ6wC,EAiBJ3B,EAkHQo3C,MsE20Cf,WAmVExlB,SAAAA,EAAkB8d,EAAYx1G,EAAW+zB,GAC7C,IAAM4jE,EAIAwlB,EAGAp/C,EAIA4kB,EAGAC,EAQAw6B,EACA/iE,EACA5nB,EAEAiwD,EAYE26B,EAKAX,EAkCEY,EAEAzlH,EA0FF0lH,EAEIh4B,EAeNi4B,EA3LmD,OAAA5gF,GAAA,+BA4BzD,GA3BM+6D,EAA6C17C,GAI7CkhE,EAAwD,MAAnC3H,EAAW+B,GAGhCx5C,EAAa,GAIb4kB,EAAoBrlF,KAAK4G,IAAI,EAC/B5G,KAAK4G,IAAIlE,EAAU2iF,kBAbkC,EAaVqyB,GAq+BMyI,IAn+B/C76B,EACFtlF,KAAKQ,IAAIkC,EAAU4iF,gBAhBkC,EAgBZqyB,GAg/BMyI,IAz+B7CN,EAAcp9G,EAAUq6C,QAAUm7D,EAAWn4D,OAAOhD,OACpDA,EAAmB+c,GAAagmD,GAChC3qF,EAAqB04B,GACvBnrD,EAAUyyB,UAAY+iF,EAAWn4D,OAAO5qB,WACtCiwD,EAAkB1iF,EAAU0iF,kBACX8yB,EAAW0C,IAC9Bv1B,GAAqB6yB,EAAW2C,IAChCv1B,GAAmB4yB,EAAW4C,IAC9B/9D,GAAUm7D,EAAWyD,IACrBxmF,GAAY+iF,EAAW0D,GAJ3B,cAeE,GAJMmE,EACF7H,EAAWyD,IAAczD,EAAW0D,IlBwb5CmE,SAAAA,EAA4BlrE,EAAqB1f,EAAU4nB,GAhDzD,GAiDkClI,GAjD4B2I,GAC5D,OAAO,MADT,CAIMmL,EAAyBD,GACjBiF,GA4CT0yD,EA5CwBvoB,EA4CKjjD,KA3ClC,IAAMmnE,EAA6BnuD,GA2C9BwyD,EA1CIvoB,EA0CyBjjD,IAxC9BqnE,EAAmCz8D,GAwCgBtqB,EAAU4nB,GAvC7Dw9C,EAuCC8lB,EAvCmB9qD,EAAQgmC,gBACF1vC,GAAgBqwD,KAsCzCmE,EArCMlnB,GACc75C,GAAY34C,SAASu1G,MAC5C3hB,GAAe,GAEX4hB,EACmBx8D,GAgC8BxqB,EAAU4nB,GA7B7Dw9C,IACI36C,EACepK,GAAe2mE,MAGlCD,GADM9mE,EAAawK,KAEJC,cAuBehL,EAvBYsnE,GAC1C/mE,EAAWE,WAIT8mE,EAAqB1zD,GACbiF,GAAUuuD,IAClBG,EAAyBxuD,GAAaquD,GAE5C,EAAOvzD,IAAiByzD,GAAYJ,IAAqBK,CAnCzD,CAiDA,QAAK,IxB13EGj+C,WwB83ED,EAAK7I,EAAQ+E,yBAEUtR,MAC1B,EAAKywC,EARwD,CkBvbnBsmB,CAzCW,EAyC9C7sC,EAAiB4lC,GAClBZ,EAAWp+G,KAAyBq7B,EAAU2qF,IAClDC,EAAJ,cAOE,GANIX,EAAa,KACblH,EAAWp+G,OAASugG,EAAYz7C,GAClCwgE,EA9CmD,EA8CjCtI,EAAahqG,IAAIutF,EAAYx7C,GACtCq5D,EAAWp+G,OAASugG,EAAYx7C,IACzCugE,EAhDmD,EAgDjCtI,EAAahqG,IAAIutF,EAAYz7C,MAE7CwgE,EAAJ,cAEE,WAAWjI,GAAiBiI,GAAYpxD,OAAM,WAAO,IAArD,GApDmD,OAuDnDoxD,EAAWzE,GAA2B,KAKjCF,GA5D8CA,EA4D5B2E,GA5D4B,OAmEvD,WAAW3D,GAnE4CA,EAmE7BvD,EAAY9yB,EAAiBC,EACnDC,EAAiB5iF,EAAWq6C,EAAQ5nB,GADxC,GAnEuD,OAsMzD,OA/HsCo+E,GAClC7wG,EAAUyiF,GAAsB+yB,EAAWyC,MAC7CzC,EAAWyC,GAA2Bj4G,EAAUyiF,GAE5CziF,EjDxhDMqjF,GiDwhDuBrjF,EAAUyiF,KAGnC66B,EACG3C,GA/E4CA,EA+ErCnF,EAAYx1G,EAAUyiF,IAChC5qF,EAASA,WAEX,IAAMi8B,EAGF8pF,EACEC,EAGAC,EAoEA7jB,EAQCv0F,EArFgB,OAAAk3B,GAAA,+BAEH,OADlB,OACkB,IAAM0gF,EAAN,GAFG,OA+EvB,OA7EMxpF,EAAc,IACJq3C,GAnFiC,EAmF5CwH,GAEDirC,EAAgB,KACdC,EAAe,IAAI3tF,IAGnB4tF,EAAmB,CACvBhJ,WAAY,KACZC,KAAM,OAGO,IAAe7lC,IAGvBz1E,IAAI,OAAkB81E,IACxB91E,IAAI,OAAkB81E,IACtB91E,IAAI,OAAkB81E,IACtBf,EAAQ,QAAQ,SAAC/0E,GAMhBmkH,EAFoCG,GAChCtkH,EAAI6zE,OAAQ7zE,EAAI1B,SACUiqF,SANN,IAQzBvoF,IAAI,QAAQ,SAACA,GAEZ,QAD+C6zE,EAAJ7zE,EAAI6zE,QtBp+CtDV,KAAK,GAEQU,EAAOP,MsBo+CX,IAAK,OACH8wC,EAAav+G,IAAIq4F,EAAYx7C,EAAOyhE,GACpC,MACF,IAAK,OACHC,EAAav+G,IAAIq4F,EAAYz7C,GAAO0hE,GAGxCA,EAAgB,IAVI,IAYrBnkH,IAAI,OAAkB81E,IACtB91E,IAAI,OAAkB81E,IACtBf,EAAQ,OAAkBc,IAC1B71E,IAAI,OAAkB41E,IACtB51E,IAAI,OAAkB41E,IACtB51E,IAAI,OAAkB41E,IACtB51E,IAAI,OAAkB41E,IACtB51E,IAAI,OAAkB41E,IACtB51E,IAAI,OAAkB41E,IACtB51E,IAAI,OAAkB41E,IACtB51E,IAAI,OAAkB41E,IACtB51E,IAAI,OAAkB41E,IACtB51E,IAAI,OAAkB41E,IACtB51E,IAAI,OAAkB41E,IACtB51E,IAAI,OAAkB81E,IACtB91E,IAAI,OAAkB81E,IACtBf,EAAQ,QAAQ,SAAC/0E,GtBn/CXq7G,EsBo/CyCr7G,EAAI6zE,OtBp/CtCP,KsBq/CZ+wC,EAAiBhJ,WAA2BA,CAFpB,IAIzBr7G,IAAI,QAAQ,SAACA,GtB1+ClB,EsB2+CoDA,EAAI6zE,OtB9+CpCjB,IAGL,IsB4+CTyxC,EAAiB/I,KAAqBA,CAFlB,IAIrB59G,MAAM28B,GAwpBrBkqF,SAAAA,EAAwB7wD,GACtB,GAAI,EAAK0nD,EAAkBC,YAAc3nD,EAAK2nD,YAC1C,EAAKD,EAAkBE,MAAQ5nD,EAAK4nD,KAAM,CAG5C,GAAuB,MAAnB5nD,EAAK2nD,YAAmC,MAAb3nD,EAAK4nD,KAAc,CAE1Cn3G,IAAAA,GAAmB0B,IAAP4wB,KAAO5wB,IAAI,SAAU6tD,GACvCj+B,EAAQ,IAAe2vC,GtC5iFNmD,mBsC4iF2BpkE,EAHI,MAMhDsxB,EAAQ,IAAe2vC,GtCpjFJ8C,sBsCsjFrBzyC,EAAMkvC,YAAa,EACnB,EAAKoS,EAAiBsJ,QAAQ5qD,GAC9B,EAAK2lF,EAAoB1nD,CAbmB,CAFlB,CAtpBf6wD,CAlJ4CA,EAkJpBF,GAEzBD,EAAapuG,IAAI+lG,EAAWp+G,MAC9B4I,EAAUyiF,GAAqBT,UAC3B67B,EAAazzG,IAAIorG,EAAWp+G,MACN,MAAjBwmH,IAET59G,EAAUyiF,GAAqBT,UAAY47B,GAIvC3jB,EAAoBub,EAAWn4D,OAAOm9C,gBACA,EAAxCgb,EAAWn4D,OAAOm9C,eAAe3+F,KACrC,IA/JiD,EA+JtC20E,EAAiB6pC,GACxB7E,EAAWp+G,KAAM08B,GADrB,GA/EuB,OAiFvB,WAA8CkmE,GAjKG,EAiKtCxpB,EAAiB4lC,GACxBZ,EAAWp+G,KAAM08B,EAA8B,KAC/C0hF,EAAWn4D,OAAQ48C,EAAmBub,EAAWtb,GACjDnmE,GAHJ,GAjFuB,OACrB,aADqB,OAuFvB,MAFOruB,EAAAA,EAAAA,GACP8vG,EAAWyC,GAA2B,KAChCvyG,EAvFiB,KA0FvB63G,EAAkBv9G,EAAUsrC,UAC5B6xE,GAGe,OAFX53B,EACoCA,GA7KS,EA6K5C/U,EAAiB4lC,GAA4BZ,EAAWp+G,SAK7DmmH,EAAkBh4B,GAlL+B,EAqLhD/U,EAAiBytC,GAClBV,EAAiBv9G,EAAUyiF,IAC/B1kB,EAAWllE,KAAKhB,OAId2lH,EACFhI,EAAW+B,GACP/B,EAAW+B,GAAqB/zB,EAAwB,KAI5DxjF,EAAUwjF,GAAyBg6B,GACrCz/C,EAAWllE,KlBtmBTqlH,SAAAA,EAAO/rE,EAAauwC,GACxB,IAAMiV,EADmC,OAAA/6D,GAAA,0BAGrCuV,IAFEwlD,EAA6C17C,IAEpBD,GAE7B,EAAAxd,UAKE2T,GAAewlD,EAAYz7C,KAVU,EAWlC46C,GAA0B,IAAeh4B,IAXP,EAc/B23B,GAYLoG,GA1BoCA,EA2BrC1qD,GACA,WAAM,OAAK2qD,GA5B0BA,EA4BnB3qD,EAAZ,GACN,MA7BqC,EA8BhC4kD,GACF8F,GA/BkCA,EAgCnClF,EAAYx7C,GACZ,WAAM,OAAK2gD,GAjCwBA,EAiCjBnF,EAAYx7C,EAAxB,GACN,MAEN,IAAW0gD,GApC8BA,EAqCrC1qD,GACA,WAAM,OAAK4qD,GAtC0BA,EAsCN5qD,EAAauwC,EAAtC,GACN,MAHJ,IArBE,EAAAlkD,UAfuC,EAwChCu4D,EACP,IAAW8F,GAzC4BA,EA0CnClF,EAAYx7C,GACZ,WAAM,OAAK4gD,GA3CwBA,EA2CJpF,EAAYx7C,EAAOumC,EAA5C,GACN,MAHJ,GADF,MAxCyC,IkBsmBiBw7B,CAlMD,EAkMlC1tC,EAAiB4lC,GAClCZ,EAAWp+G,KAAM4I,EAAUsrC,YAGjC,IAAM8U,QAAQE,IAAIyd,GAAlB,GAtMyD,IAnV5C25B,CA7B4DA,EA6B1C8d,EAAYx1G,EAAW+zB,GAApD,GA7BuE,OA+BvE,OADgBo3C,GA9BuD,EA8BlEwH,GA9BkE,EA+B9D2hC,EACP,EAAA91E,UAIIu7E,EAA2B,aAAnB18D,EAAO5qB,UACM,aAAnB4qB,EAAO5qB,SACTqqF,EAA4B7tG,EAAOkvG,eAtC8B,EAuC3CtrD,EAAQurD,gBAvCmC,EAwC9DrK,EAAUsK,cAGGvB,GAA6B/C,I3B/8CxBtf,O2Bo6C4C,EA4C7DsZ,EAAU38G,MAChB4I,EjD9kCMsjF,IiD+kCJiK,EAAY,IAAIlyF,WAAW,GAE3B2hH,EADAD,GAAmB,EAGjB93C,EAAqBA,SAAOrnE,GAsB9B,IAAI0gH,EACA1kH,EASI2kH,EAhC+B,OAAA3hF,GAAA,+BACzC,GAAImgF,EAIF,SAAAv+E,SAIF,MAFiB,EACD2sC,GA1DmD,EA0D9DwH,GA1D8D,EA2D1D2hC,EACP,SAAA91E,SAqBA,GAnBE,OASF+uD,EAwMVixB,SAAajxB,EAAW3vF,GACtB,IAAM/C,EAAS,IAAIQ,WAAWkyF,EAAUj0F,OAASsE,EAAKtE,QAGtD,OAFAuB,EAAOyE,IAAIiuF,GACX1yF,EAAOyE,IAAI1B,EAAM2vF,EAAUj0F,QACpBuB,CAJqB,CAxMH2jH,CAAajxB,EAAW3vF,GACrC0gH,GAAU,EACV1kH,EAAS,GAERH,IADUy1E,IACVz1E,IAAI,QAAQ,SAACA,GACZG,EAASH,EAAIoC,KAAOpC,EAAI0K,MACxBm6G,GAAU,CAFU,IAIrBnnH,MAAMo2F,GAA8B,GACZ,IACzB+wB,EAAJ,cAGE,OAFMC,EAAehxB,EAAUjuD,SAAS,EAAG1lC,GAC3C2zF,EAAYA,EAAUjuD,SAAS1lC,GAC/B,IAAW8kG,GApFoDA,EAqF3D8W,EAAY4B,EAAkB/5D,EAAQr9C,EAAWu+G,GAC5B,EAAMxqF,GAF/B,GAlCqC,OAsCjCyhF,EAAWd,GAAmBc,EAAWD,IAChBpF,GAA3BqF,EAAWd,EACP10G,EAAUsrC,WAA4B,GAxCP,OAYrC,aAZqC,OA4CvC2xE,EADOv3G,EAAAA,GA3CgC,UAiDvC,IAAWi1G,GAnGsDA,EAmG/CnF,EAAYx1G,EAAWilE,GAAzC,IAwCW,IADW01C,GA1I2CA,EA0IpCnF,EAAYx1G,GAC9B,IA3IsD,OA6IrE,OAFMnF,EAAS,IACCswE,GA5IqD,EA4IhEwH,GA5IgE,EA6I5D2hC,EACP,EAAA91E,UAEc2sC,GAhJqD,EAgJhEwH,GAMD6iC,EAAWoB,IAEbpB,EAAWc,IAAmB,EACzBU,GAzJ8DA,EAyJ9CxB,EAAY,GACjC,EAAAh3E,UAGF,IAAWkgE,GA7J0DA,EA6JlD8W,EAAY4B,EAAkB/5D,EAAQr9C,EACrDnF,GAA2B,EAAOk5B,GADtC,IA7JqE,OAoGrE,GAFMl5B,EACF,IACAoiH,EACF,MAAMA,EAER,GAAKD,EAAL,eAME,OAFAD,GAAmB,EACH5xC,GA5GmD,EA4G9DwH,GA5G8D,EA6G1D2hC,EACP,EAAA91E,SAQEg3E,EAAWoB,IAEbpB,EAAWc,IAAmB,EACzBU,GAzH4DA,EAyH5CxB,EAAY,GACjC,EAAAh3E,UAGF,IAAWkgE,GA7HwDA,EA6HhD8W,EAAY4B,EAAkB/5D,EAAQr9C,EACrDnF,GAA2B,EAAOk5B,GADtC,IA7HmE,QAiIjEyhF,EAAWd,GAAmBc,EAAWD,IAChBpF,GAA3BqF,EAAWd,EACP10G,EAAUsrC,WAA4B,GAnIyB,OAkKvE,GADgB6/B,GAjKuD,EAiKlEwH,GAjKkE,EAkK9D2hC,EACP,SAAA91E,SAGFg3E,EAAW+B,GAAuBv3G,EACnB68G,EAAKt5G,OAGpBiyG,EAAWc,IAAmB,EAC9Bd,EAAW6C,IAAa,EAElBlrD,EA7KiE,EA6KrDqjB,EAAiB4lC,GAAkBxwB,KAC/CmU,EAAW5sC,EAAKqoD,EAAWp+G,MAI7By/B,KAAKC,UAAUijE,GAEdyb,EAAWoB,IApLuD,EAqLhEpmC,EAAiBu3B,GAAkB/nG,EAAWw1G,EAAWn4D,QAI3D25D,GAzLkEA,EAyLlDxB,EAAY,GApK/B,aArBqE,OA4LvE,GAFO9vG,EAAAA,EAAAA,GACSylE,GA3LuD,EA2LlEwH,EAA8BjtE,GA3LoC,EA4L9D4uG,EACP,SAAA91E,SAOF,GAFAg3E,EAAWc,IAAmB,EtEj1Bb14C,MsEm1Bbl4D,EAAM4c,KAGRkzF,EAAWc,IAAmB,EACzB9B,GAAcgB,GACdwB,GAzMgEA,EAyMhDxB,EAAY,GALwB,WAMpD,IAAIA,EAAWp+G,MAAQugG,EAAY37C,KA1M6B,EA2M9D6W,EAAQ4rD,yBASV,OtEjzCavf,MsEizCTx5F,EAAM4c,KACf,IA0EAo8F,SAAAA,EAAqBlJ,EAAY9vG,GAgBrC,IAMQi5G,EAWAC,EAmBAxH,EApDoC,OAAAx6E,GAAA,uBAqB5C,GALoBv9B,MAAM24B,KAhBkB,EAgBRo8E,EAAanqG,UACIu/C,MAAK,SAACq1D,GACzD,OAAOA,GAAMrJ,GAAcqJ,EAAGxG,EADkC,IAqC3D,cA1BL,GANMsG,EAixB6B,IAvyBOG,EAuyBnCjsD,EAAQ8rD,iBtEp3EAzB,MsEmmD+Bx3G,EAkxBtC4c,KAOD,EA/yBmCw8F,EAkzBhCjsD,EAAQ8rD,gBAlzBwB,EA0BrBnuC,EAAiBuuC,cAClCvJ,EAAWn4D,OAAQshE,GAErB,SAAAngF,SAKF,GAAoB,IADdogF,EAAgBthH,KAAKmpD,MAAM,IAjCS,EAiCEwtD,IAjCF,EAmCnCA,GAAmB,OACnB,MAAoB,EAAhB2K,GAQT,OAHApJ,EAAW8C,IAAW,EAzCkB,EA0CnChE,GAAc,EA1CqB,EA2CnC9jC,EAAiBrR,QAAQz5D,GAC9B,EAAA84B,SA5CwC,EAqCnCy1E,GAAmB,GAc1BuB,CAEA,OAFAA,EAAW6C,IAAa,EAClBjB,EApDoC,EAoDZ5mC,EAAiB8mC,KAC/C,IAAW8C,GArD+BA,EAqDxB5E,EAAY4B,GAA9B,EArD0C,CAiEvCJ,GAjEuCA,EAiEvBxB,EAAY,GAjEW,QA1E7BkJ,CArN0DA,EAqNrClJ,EAAY9vG,GAA5C,IAIA8vG,EAAW8C,IAAW,EtEznDjBxyC,GsE2nDDpgE,EAAM0wB,UACNo/E,EAAWd,GL3hDd3D,GK4hDCyE,EAAWd,EAAgC10G,GAG7C0F,EAAMywB,StE1oDA0J,EsE2oDN,IAAWw7E,GAjO0DA,EAiOpC7F,EAAY9vG,GAA7C,IAjOqE,EAmNhE0uG,EAAa38C,OAAOkgC,EAAY37C,IARI,MADpC,EA1MgE,IArI1D4gE,CAALA,EAAqBpH,EAAY4B,EAAkBp3G,EACzD+zB,GACFu3B,OAAM,WAAO,IACR,KAtKW,CA/CGgwD,CArEKA,EAqEG9F,GACd,MAAT9P,IACGsR,GAvEiBA,EAuEDxB,EAAY9P,GACjC8P,EAAW8C,IAAW,GAJtB,cApEsB,OA2ExB,OADO5yG,EAAAA,EAAAA,GACP,IAAW21G,GA3EaA,EA2ES7F,EAAY9vG,GAA7C,IA3EwB,QA4ExB,SAAA84B,SA5EwB,QAqF1B,GANM08E,EAAc77G,MAAM24B,KA/EA,EA+EUo8E,EAAanqG,WA/EvB,EAqFjBspD,IACL2nD,EAAYp0E,OAAM,SAAC+3E,GAAUne,OAAHme,EAAGne,WAAAA,IADjC,cAGE,WAxFwB,EAwFblwB,EAAiB4lC,GAAkB1V,cAA9C,IAxFwB,QAyFRv1B,GAzFQ,EAyFnBwH,GAWW,IADVwqB,EAnGkB,EAmGF3sB,EAAiB4lC,GAAkBtV,gBAErD3D,EArGoB,EAqGJ4W,EAAUxK,qBAAqBzI,eArG3B,EAsGjBiT,EAAUxK,qBAAqB3I,GAAYzD,GAtG1B,SAk4CX6d,CAlBkBA,EAkBRxF,GAArB,IAF4D,OAC1D,QAEK9vG,EAAAA,EAAAA,GAnBsB,EAoBpB8qE,GApBoB,EAqBtBA,EAAiBrR,QAAQz5D,QAL4B,YAQ7Dq2B,EAAU2pE,GAxBoB,CAkCnC8O,SAAA,GAAcgB,GACkB,MAA1BA,EAAWuB,KAIfvB,EAAWuB,GAAYp4E,OACvB62E,EAAWuB,GAAc,KAND,CAgBpBtC,SAAA,GAAiBe,GAAa,OAAD54E,GAAA,YACjC,OAAI44E,EAAWtyC,GACb,IAAMsyC,EAAWtyC,GAAUjF,QAA3B,GADF,MADiC,IAe7Bo9C,SAAA,GAAAA,EAAsB7F,EAAY9vG,GAiBpC,IAAMi5G,EAjBqC,OAAA/hF,GAAA,sBAM7C,WAAmC+/B,GANU,EAMlC03C,GAAX,GAKA,GAJgBlpC,GAP6B,EAOxCwH,GtE57EI7M,IsEg8ELpgE,EAAM0wB,UtE13EDsxC,MsE23ELhiE,EAAM4c,KAAuC,CAC/C,GAAIkzF,EAAWG,GAEb,OADKR,GAdoCA,GAcb,GAC5B,EAAA32E,SAEImgF,EAgC6B,IAjDQG,EAiDpCjsD,EAAQ8rD,iBtEp3EAzB,MsEo1E+Bx3G,EAiCtC4c,KAOD,EAzDoCw8F,EA4DjCjsD,EAAQ8rD,gBAvClBj5G,EAAM4wB,QArBqC,EAqBtBk6C,EAAiBuuC,cAClCvJ,EAAWn4D,OAAQshE,GAGnBj5G,EAAM4wB,UACR5wB,EAAMywB,StEh+EGsxC,EsEk9EoC,CAmB5C/hE,EAAM4wB,StEl2EM4mF,MsEm2Ebx3G,EAAM4c,MAhCmC,EAiCtCkuD,EAAiBrR,QAAQz5D,GAK3BA,EAAM4wB,SAtCkC,EAuCtCu8B,EAAQmsD,gBAAgBt5G,GAvCc,QAqEzC+wG,SAAA,GAAAA,EAAiBR,EAAeF,GACpC,IAAM9hD,EACAgrD,EAQAtnB,EACAunB,EAWAC,EAeAhgB,EArCkD,OAAnC8W,OAAA,IAAAA,GAAAA,EAAeF,OAAA,IAAAA,GAAAA,EAAoBn5E,GAAA,uBAGxD,GAFMq3B,EAAO7rB,KAAK6rB,MAAQ,IACpBgrD,EAFkD,EAElBpsD,EAAQosD,0BACzChJ,EAAO,CACV,IAJsD,EAI5CpjD,EAAQusD,4BACbnrD,EALiD,EAKtC2gD,EAAyBqK,EACvC,OAAO,EAAPzgF,QAAO,GAN6C,EAQjDo2E,EAAwB3gD,CALnB,CAyCZ,OAlCM0jC,EAA6C17C,IAC7CijE,EAXkD,EAW3B9K,EAAahqG,IAAIutF,EAAYx7C,MAExD+iE,EAAgBjH,GAA2B,KACvClC,GACGgC,GAf+CA,EAe7BmH,GAEpBzK,GAAiByK,GAAiB5zD,OAAM,WAAO,IAChD4zD,EAAgB3J,IAClB2J,EAAgB3J,GAAgB8J,OAG9BF,EAtBkD,EAsB3B/K,EAAahqG,IAAIutF,EAAYz7C,OAExDijE,EAAgBlH,GAA2B,KACvClC,GACGgC,GA1B+CA,EA0B7BoH,GAEpB1K,GAAiB0K,GAAiB7zD,OAAM,WAAO,IAChD6zD,EAAgB5J,IAClB4J,EAAgB5J,GAAgB8J,MAO9BlgB,EAAgB,IAAIjvE,IArC8B,EAsC/Cy9E,EAAgBprD,OACvB48C,EAAc7/F,IAAIq4F,EAAYx7C,EAvCwB,EAuCZwxD,EAAgBprD,OAvCJ,EAyC/CorD,EAAgBnrD,OACvB28C,EAAc7/F,IAAIq4F,EAAYz7C,GA1CwB,EA0CZyxD,EAAgBnrD,OAE5D,IAA8C5uB,GA5CU,EA4C7C48C,EAAiB4lC,GAAwBjX,GAApD,EA5CwD,CAqDxD,OARIggB,GACCA,EAAgB7I,IAAqB6I,EAAgBpI,IACnDC,GA/CiDA,EA+CjCmI,EAAiB,IAEpCD,GACGA,EAAgB5I,IAAqB4I,EAAgBnI,IACrDC,GAnDiDA,EAmDjCkI,EAAiB,GAExC,EAAA1gF,QAAO,EArDiD,IC/oFnC,eAavB8gF,SAAO,GAAmBC,EAAa54G,EAAQ64G,EAAUC,EAAWj6F,GAIlE,IAkBWnhB,EAlBLq7G,EAAmBl6F,KAAQi6F,EAM/BE,EADED,EACcF,EAASv4G,aAAef,QACL,GAAjCA,OAAOU,KAAK64G,GAAWnmH,OAETkmH,EAASv4G,aAAef,QACN,GAAhCA,OAAOU,KAAK44G,GAAUlmH,OAIpBsmH,EAAaF,GAAoBC,EAEnCE,GAAU,EAEd,IAAWx7G,KAAKsC,EAAQ,CACtB,IAAMm5G,EAAUt6F,EAAO,IAAMnhB,EACvB07G,EAAcL,EAAmBD,EAAUj6F,GAAQg6F,EAASn7G,GAG7Du7G,GAAgBv7G,KAAKm7G,OAGD39G,IAAd8E,EAAOtC,QAIIxC,IAAhBk+G,GAA6BH,SAExBL,EAAYl7G,GAGnBk7G,EAAYl7G,GAA4B6mD,GAAY60D,GAE7CJ,EAGTJ,EAAYl7G,GAAKsC,EAAOtC,GACf07G,EAAY94G,aAAef,QAC3BS,EAAOtC,IACPsC,EAAOtC,GAAG4C,aAAef,QAG7Bq5G,EAAYl7G,KAGfk7G,EAAYl7G,GAA4B6mD,GAAY60D,IAGhDC,EAAuCC,GACzCV,EAAYl7G,GAAIsC,EAAOtC,GAAI07G,EAAaN,EAAWK,GACvDD,EAAUA,GAAWG,UACLr5G,EAAOtC,WAAa07G,GACd,MAAbp5G,EAAOtC,IAIc,mBAAbsC,EAAOtC,IACdsC,EAAOtC,GAAG4C,aAAe84G,EAAY94G,aAGrCqnB,EAAY,kCAAoCwxF,GAC1DD,GAAU,IACqB,mBAAfL,EAASn7G,IAChBm7G,EAASn7G,GAAG/K,QAAUqN,EAAOtC,GAAG/K,QAC/B80B,EACN,sCAAwC0xF,GAC5CP,EAAYl7G,GAAKsC,EAAOtC,KA9CdiqB,EAAY,oCAAsCwxF,GAC5DD,GAAU,EAPU,CA0DxB,OAAOA,CAhFiE,CA+F1EK,SAAO,GAAsBC,EAAW5hH,GAKtC,IAJA,IAAM6hH,EAAe,CAAC,EAClBC,EAAOD,EACPE,EAAc,EACdxxE,EAAY,IAGJ,GADJ9Y,EAAMmqF,EAAUliH,QAAQ,IAAKqiH,MAIxB,GAAPtqF,GAAkC,MAAtBmqF,EAAUnqF,EAAM,KAE9BqqF,EADM35F,EAAOy5F,EAAUj/E,UAAU4N,EAAW9Y,GAAKzkB,QAAQ,QAAS,MACrD,CAAC,EACd8uG,EAAOA,EAAK35F,GACZooB,EAAY9Y,EAAM,GAENA,GAAM,EAItB,OADAqqF,EAAKF,EAAUj/E,UAAU4N,GAAWv9B,QAAQ,QAAS,MAAQhT,EACtD6hH,CApBsC,CA4C/CG,SAAO,GAA6B1kD,EAAY2kD,GAC9C,OAAO3kD,GAAc2kD,CADsC,CAU7DC,SAAO,GAA+B74G,EAAQqR,GAKvBynG,SAAA,EAACh8G,GACpB,OAAOrF,MAAM6jC,QAAQx+B,IAA2B,IAAjBA,EAAMpL,MADP,CAJf8I,SAAA,EAAC8P,GAChB,OAAOA,GAAsB,iBAARA,IAAqB7S,MAAM6jC,QAAQhxB,EADhC,CAkD1B,OApBMyuG,EAtBUC,SAAA,EAACh5G,EAAQqR,GACvB,OAAO/S,OAAOU,KAAKgB,GAAQ8+B,QAAO,SAACC,EAAK3kC,GACtC,IAAMzD,EAAQqJ,EAAO5F,GAgBrB,OAdKiX,EAAK7J,eAAepN,GAEdI,EAAS7D,IAAU6D,EAAS6W,EAAKjX,KACpC2+G,EAAOC,EAAQriH,EAAO0a,EAAKjX,KACF,EAA3BkE,OAAOU,KAAK+5G,GAAMrnH,SAAe8I,EAASu+G,MAC5Ch6E,EAAI3kC,GAAO2+G,IAEJD,EAAaniH,IAAUmiH,EAAaznG,EAAKjX,KAEzC0gC,OAAOtW,MAAM7tB,IAAUmkC,OAAOtW,MAAMnT,EAAKjX,KAEzCzD,IAAU0a,EAAKjX,KACxB2kC,EAAI3kC,GAAOzD,GAXXooC,EAAI3kC,GAAOzD,EAaNooC,CAjBuC,GAkB7C,CAAC,EAnB4B,CAsBrBi6E,CAAQh5G,EAAQqR,GAET4nG,SAAA,EAAC3uG,GACnB,IAAkB,MAAA4X,EAAA5jB,OAAOU,KAAKsL,IAAZ,YAAlB,kBACM9P,EAAS8P,EADf,aAC6D,IAAjChM,OAAOU,KAAKsL,EAAIlQ,IAAM1I,QAErConH,EAAaxuG,EAAIlQ,KAEE,mBAAZkQ,EAAIlQ,UAHbkQ,EAAIlQ,GAKFI,EAAS8P,EAAIlQ,MACtB6+G,EAAY3uG,EAAIlQ,IACqB,IAAjCkE,OAAOU,KAAKsL,EAAIlQ,IAAM1I,eACjB4Y,EAAIlQ,GAXU,CAiB7B6+G,CAAYF,GACLA,CAnD2C,CC3J3B,eAgCzBG,SAAO,GAAoBjpF,GAMzB,O3DkTU6b,I2DnTWP,GAJf4tE,EAAmCt/E,GAAoB5J,I3DuTnD6b,E2DxTyB,CA4BrCkiC,SAAO,GAAkB/9C,EAAUmpF,EAAW9lC,GAoCnB+lC,SAAA,EAACv8G,GACY4uB,GAAW4tF,GAE1CtiH,UAAUhF,EADD8K,EAAMhM,YAC8B,GAClDkB,GAAU,EARVsnH,EAAgB5hH,IAA2BkyB,GASpC9sB,GAToD9K,GAC3DA,GAQO8K,EARShM,UAGkB,CAnCpC,IAAKwiF,IAASA,EAAKxiF,WACjB,MAAM,IAAek+B,GxEsEbiJ,EAyBL+xC,EA8tBwBuvC,MwElzB7B,IAAIC,EAEFA,EADsB,iBAAbJ,EAEkBz/E,GAAQy/E,GAA+B,GAEjDA,EAKbK,EACqB9/E,GAFrB+/E,EAAgC7/E,GAAoB5J,IAEK,GAE/D,IAAMqpF,EAAkB,IAAI7lH,WACxB,GAAKgmH,EAAM3oH,WAAa0oH,EAAe1oH,WAAawiF,EAAKxiF,YAEzDkB,EAAS,EAqBb,OANAqnH,EAAiBI,GACjBJ,EAAiBG,GACjBH,EAAiB/lC,GAIVgmC,CAlD2C,CA6DpDK,SAAO,GAAwB1pF,EAAUsiB,EAAcf,GACrD,MAAqB,QAAjBe,EACKtiB,GAIHqjD,EAAO9hC,EAAQ5gB,kBAGAgpF,GAAkB3pF,EADjCmpF,EAD+Bv/E,GAAoB5J,GACtB5qB,MAAM,UAAUuT,MACS06D,GATE,CAmHhEumC,SAAO,GAA4BrqH,EAAMmuE,GrC4lB9BoU,IqC3lBLviF,IAGJmuE,EAAQ7lD,QAAQ,gBAAkB,2BAJuB,CCvO5B,eAK/BgiG,SAAO,KAML,IAAIC,EAAe3vF,IAIf2H,UAAUi5B,YAoBRj5B,UAAUi5B,WAAWgvD,WACvBD,EAAe,KAInB,IAAM/jC,EAAM,CACVzY,gB5CqEK,CACLlJ,YAAa,EACbE,UAAW,IACXI,cAAe,EACfF,WAAY,GACZgN,QAAS,IACTnC,aAAc,IACdD,kBAAmB,K4C1EnByM,QAAS,CAAC,EACVl6B,UAAW,CAAC,EACZuZ,SAAU,CAAC,EACXuiB,gCAAgC,EAChCwD,iCAAiC,EACjCxF,2BAA4B,GAC5BsC,kBAAmBA,SAAC/9C,EAAUsiB,EAAcf,GAS1C,OARwByoE,MACJ,OAAhB1nE,IACI+gC,EAAO9hC,EAAQ5gB,kBAGrBX,EAAoC2pF,GAChC3pF,EAHEmpF,EACuBc,GAAoBjqF,GAExBqjD,IAEpBrjD,CAT+C,EAWxDi+C,oBAAoB,EACpB6F,qBAAsB,EACtBzzB,oBAAqB,GACrBksB,kBAAmB,CAAC,EAIpB4H,uBAA4C5gD,KAC5Cy8C,eAAgB,GAChB7C,yBpEmEyBn7C,GAAmB,aoE9DtBuB,MACAb,OACtBqjD,EAAI11B,oBAAoBrvD,KAAK,2BAG/B,IAAI++D,E7CxFImqD,S6CyFJC,GAA2B,GACF17D,MpE+iBhBjsB,MAAsBE,MAAoBc,MApc5BF,MACiB,KAApB8mF,SAwcX3mF,MApbGA,MAA2ButB,MAW3BvtB,MA+SWzB,GAAmB,aA+HjC4jE,MAAwBvjB,OoEvjBnCtiB,E7CnFM8D,S6CoFNsmD,GAA2B,GAGvBr+D,EAAW,CACfwhB,gB5CsBK,CACLlJ,YAAa,EACbE,UAAW,IACXI,cAAe,EACfF,WAAY,GACZgN,QAAS,IACTnC,aAAc,IACdD,kBAAmB,K4C5BnBi7C,2BAA4BjT,IAC5BkT,cAAc,EACdC,cAAc,EACdC,aAAa,EACbC,mBAAmB,EACnBC,gBAAgB,EAChBC,yBAA0B,EAC1B9oB,0BAA0B,EAC1B+oB,+CAA+C,EAC/CC,2BAA2B,EAC3BC,KAAM,CACJC,aAAc,GACdC,eAAe,EACfC,wBAAwB,EACxBC,qBAAqB,EACrBC,qBAAqB,EACrB9hB,kBAAkB,EAClB+hB,oBAAqB,IACrBC,kCAAkC,EAClCC,0BAA0B,EAC1BC,0BAA0B,EAC1BC,gBAAiB,CACf,gDACE,kBACF,gDACE,kBACF,gDACE,qBACF,gDACE,0BACF,gDACE,0BACF,gDACE,iBAEJC,qBACmCC,GACnCC,yBACmCC,GACnCnqB,cAAc,EACd0oB,yBAAAA,EACA0B,iCAAiC,EACjCC,cAAe,EACfC,qBAAqB,GAEvBC,IAAK,CACHpF,0BAA0B,EAC1BqF,2BAA2B,EAC3BC,kBAAmB,YACnBC,kBAAmB,cACnBC,+BAA+B,EAC/BC,sCAAuC,GACvCC,0BACI,8CACJC,kBAAmB,EACnB9qB,epE2dS+qB,MAnecxqF,GAAmB,YAmBnBsB,MACiB,KAApB8mF,MAgdY1nF,MoE3dhC+lE,wCAAwC,EACxCgkB,sBAAsB,EACtBC,gCAAgC,EAChCZ,cAAe,EACfa,sCAAsC,GAExCC,IAAK,CACHnB,qBACmCC,GACnCC,yBACmCC,GACnCnqB,cAAc,EACdorB,qBAAsB,CACpB,uCACE,0BACF,uCACE,6BAKR,IAAM7mC,EAAY,CAChB1Y,gB5CzDK,CACLlJ,YAAa,EACbE,UAAW,IACXI,cAAe,EACfF,WAAY,GACZgN,QAAS,IACTnC,aAAc,IACdD,kBAAmB,K4CsDnB+3C,gBAAiBA,SAACt5G,GAEhB,OAA8Bi/G,GAC1B,CAACj/G,GAHqB,EAQ5B2lG,gBAAiB,EACjB2Q,cAAe,GACf1B,aAAc,GACdG,aAAc,EACdgE,0BAA0B,EAC1B5G,kBAAkB,EAClB+M,wBAAwB,EACxBxgB,sBAAuB,GACvBE,WAAY,IACZZ,iBAAkB,IAClB0H,gBAAiB,EAGjBE,eAAgB,EAChBG,kBAAmB,EACnB7B,cAAc,EACdM,eAAgB,EAChBL,UAAW,GACXgb,yBAAyB,EAMzBtI,4BAA6B,EAC7B6B,gBAAgB,EAChB0G,oBAAoB,EACpBt8C,WAAW,EACXG,YAAY,EACZ5B,0BAvMet6C,KAwMfs4F,iBAAiB,EACjBpJ,sBAAuB,EACvBqJ,uBAAuB,EACvBrG,gBAAiB,GAGjBhG,qBAAsB,EACtBsM,uBAAwB,GACxBzM,sBAAsB,EACtBC,qBAAqB,EACrBF,sBAAsB,EACtB2M,SAAU,CACR70D,SAAS,EACT80D,cAAe,GACfC,uBAAwB,GACxBC,gBAAiB,IACjBC,gBAAiB,IACjBC,WAAW,EACXC,eAAgB,GAChBC,qBAAsB,CACpBp1D,SAAS,EACTq1D,mBAAoB,GACpBC,kBAAmB,GACnB1pD,YAAa,GACb2pD,WAAY,EACZC,WAAY,IAGhBzG,4BAA4B,EAC5BH,yBAA0B,EAC1B6G,wBAAwB,EACxBC,oCAAqC,IACrCC,kCAAmC,GACnCC,4BAA4B,EAC5BC,qBAAsB,GACtBC,YAAa,GACbC,mBAAwC7rF,MAClBc,KACtByiD,kBAAkB,EAClBk8B,yBAA8C7+E,MACxBd,OAQAc,MACAd,MACAiB,MACAC,QACtBsiD,EAAUgsB,UAAY,GAGAxvE,OACtBwjD,EAAUymB,WAAa,GAGzB,IAAM+hB,EAAU,CAMdC,uBAAwBA,SAAOC,GAAWA,OAAA3pF,GAAA2pF,SAAAA,GAAAA,OAAAA,EAAAA,OAAAA,EAAAA,GAAAA,EAE1CC,qBAAsBA,SAAOC,GAEzB,IAAMC,EAFoC,OAAA9pF,GAAA,0BACxCjD,UAAUgtF,SAAWhtF,UAAUgtF,QAAQD,SACxB,IAAM/sF,UAAUgtF,QAAQD,WAAxB,GAIjB,EAAAloF,QAAO,MAJU,IAEjB,EAAAA,OAAOkoF,EAASE,MAAQH,EAAgC,IAAjBC,EAASG,OAJN,KAa9CC,iBAAkBA,SAACpyG,EAASqyG,GAC1B,OAA8BpC,GAC1B,CAACjwG,EAASqyG,GAFyB,EAUzCC,sBAAsB,EAEtBC,0BAA2B,GAGvBC,EAAM,CACV72D,SAAS,EACTyC,uBAAuB,EACvBgD,yBA3SwBI,IA4SxBnC,eAAgB,EAChBuB,uBAAwB,IACxBD,yBAA0B,IAC1BxO,aAAc,CACZM,SAAU,EACVC,SAAUp1B,IACVq1B,UAAW,EACXC,UAAWq6D,EACXp6D,UAAW,EACXC,UAAWx1B,IACXy1B,aAAc,EACdC,aAAc11B,IACd61B,aAAc,EACdC,aAAc91B,IACd21B,iBAAkB,EAClBC,iBAAkB51B,KAEpB+gC,SAAU,CACRvmC,cAAe,MACfC,SA9TaA,KA+TbC,aAAc,EACdC,aAAc,GAEhBinC,uBAAuB,EACvBY,sBAAsB,EACtBE,wBAAwB,EACxBvB,mBAAmB,EACnBC,iBAAkB,EAClBwC,mBAAoB,GACpB5B,gBAAqCn5B,KAAY,GAAM,EACvDo7B,mCAAmC,GAyB/B38B,EAAc,CAClBs+B,uBAAwBA,EACxBmhC,+BAAgCA,SAACtmE,GAC/B,OAA8BkyF,GAC1B,CAAClyF,GACD,GAHwC,EAK9ComE,eAAe,EACfsuB,4BAA4B,EAC5B5tB,kBAAmBA,SAACnrD,EAAKgF,GACvB,OAA8BuxE,GAC1B,CAACv2E,EAAKgF,GAFqB,EAKjCqoD,sBAAsB,GAGxB,IAAI2rB,GAAwB,EACxBC,GAAoB,EACpBC,GAAgC,EACZC,OAEtBF,EADAD,GAAwB,EAExBE,GAAgC,GAkBlC,IAAM/6F,EAAS,CACbqxD,IAAKA,EACLj6B,SAAUA,EACVk6B,UAAWA,EACXvkD,YAAaA,EACb+sF,QAASA,EACTmB,WAAYA,WAAM,WAAc3wD,EAAd,EAClBqwD,IAAKA,EACLO,a9CvZ0BC,E8CwZ1BC,uBAAwB,GACxBC,oBAAqB,GACrBC,sBAAuB,GACvBC,qBAAsB,GACtBC,kBAAmB,GACnBC,2BAA4B,EAC5BC,uBAAwB,OACxBC,qBAAsB,GACtBC,oBAAqB,GACrBvkE,qBAAsB,GACtBC,qBAAsB,GACtBE,qBAAsB,GACtBqkE,kBAAkB,EAClBC,oBAAoB,EACpBvkE,4BAA6B,GAC7B+C,aAAc,CACZM,SAAU,EACVC,SAAUp1B,IACVq1B,UAAW,EACXC,UAAWt1B,IACXu1B,UAAW,EACXC,UAAWx1B,IACXy1B,aAAc,EACdC,aAAc11B,IACd61B,aAAc,EACdC,aAAc91B,IACd21B,iBAAkB,EAClBC,iBAAkB51B,KAEpBs2F,eAAgB,EAChBC,aAAcv2F,IACdgjE,cA/CoBA,CACpBwzB,qBAAsB,KA+CtBC,mBAAoBA,WAAM,aAC1BC,KAzGWA,CACXr4D,SAAS,EACTgV,UAAW,GACX27C,UAAW,GACX2H,gBAAiB,EACjBC,YAAY,EACZC,YAAa,IAoGbC,KAjGWA,CACXz4D,SAAS,EACT04D,8BAA8B,EAC9BC,+BAAgC,IA+FhCC,MA5FYA,CACZ54D,SAAS,EACT64D,2BAA2B,EAC3BC,SAAU,EACVC,UAAU,GAyFVC,IA5DUA,CACVjC,sBAAAA,EACAC,kBAAAA,EACAC,8BAAAA,EACAgC,wBAAwB,EACxBC,yBAAyB,GAwDzBC,0BAA0B,GAa5B,OANAnD,EAAQC,uBAAyBmD,SAAOlD,GAAY,OAAD3pF,GAAA,YACjD,OAAO,EAAP4B,OA+CJkrF,SACInD,EAAQoB,EAAwBM,GAIlC,IAAI/vD,EAAW+vD,EACC,QAAZ/vD,IAGAA,EADEjpD,EAAOwrD,WAAW,qBAAqBlyB,QAC9B,KAEA,OAKf,IAAMohF,EAAcpD,EAAO94F,QAAO,SAAC6gC,GAIjC,QAHkB,WAAdA,EAAMl3D,MAGNk3D,EAAM5Q,KAAO4Q,EAAM5Q,KAAOwa,EAJa,IAWzC0xD,EAAmB,GAGvB,IAAMx4D,EAA8BrO,GAChC4kE,EACAgC,EAAY9wE,KAAI,SAACyJ,GAAoB3iD,OAAR2iD,EAAQ3iD,QAAAA,KAGrCyxD,IACFw4D,EAAmBD,EAAYl8F,QAAO,SAAC60B,GAErC,OAD6B3B,GAAU2B,EAAQ3iD,WAC9ByxD,CAFgC,KAOtB,GAA3Bw4D,EAAiBtwH,SACnBswH,EAAmBD,EAAYl8F,QAAO,SAAC60B,GACrC,OAAOA,EAAQoM,OADkC,KAOtB,GAA3Bk7D,EAAiBtwH,SAGOqwH,EAAY9wE,KAAI,SAACyV,GACzC,OAAOA,EAAM3uD,QADsC,IAWrDiqH,EAAmBD,GAIrB,IAAME,EAAiBD,EAAiBn8F,QAAO,SAAC6gC,GAC9C,OAAOA,EAAMr5B,QAA0B,KAAhBq5B,EAAMr5B,MAD2B,IAuC1D,IAjCI40F,EAAevwH,SAIjBuwH,EAAeh3G,MAAK,SAACra,EAAGkb,GAMtB,OAAOA,EAAEuhB,OAASz8B,EAAEy8B,MANQ,IAQ9B20F,EAAmBC,EAAep8F,QAAO,SAAC6gC,GACxC,OAAOA,EAAMr5B,QAAU40F,EAAe,GAAG50F,MADS,KAMhD60F,EAAiB,GAInBF,EAAiBtwH,SACbywH,EAAczsH,KAAKqB,MAAMirH,EAAiBtwH,OAAS,GACzDswH,EAAiB/2G,MAAK,SAACra,EAAGkb,GAAM,OAAAlb,EAAEs0B,UAAYpZ,EAAEoZ,SAAhB,IAChCg9F,EAAejxH,KAAK+wH,EAAiBG,KAQnBxD,GAAAA,EAAAz8F,EAAAy8F,IAAAA,QAApB,8BACYnvH,MAAoB0jD,I1DlY3BsB,S0DkYmCkS,EAAMl3D,MAC1C0yH,EAAejxH,KAAKy1D,GAIxB,OAAOw7D,CAjHmD,CAhDlBE,CAClCzD,EAAQh6F,EAAOo7F,uBACfp7F,EAAO07F,wBAHsC,KAM5C17F,CA1cc,CAudvB+yF,SAAO,GAAmBC,EAAa0K,EAASzK,GAC9C,IAAMC,EAAY,CAChB,yBAA0B,GAC1B,eAAgB,GAChB,iBAAkB,GAClB,gBAAiB,CACfrnF,+BAA+B,EAC/BC,yBAAyB,EACzBC,gBAAiB,GACjBC,gBAAiB,GACjB8gB,YAAa,GACb7gB,kBAAmB,IAAIn9B,WAAW,GAClCo9B,qBAAsB,GACtB6gD,wBAAyB,GACzB55D,QAAS,CAAC,IAGd,OAA8BugG,GAC1BV,EAAa0K,EACbzK,GAA2C0K,KAAiBzK,EAC5D,GApBoD,CAsJ1D0K,SAAO,GAA4BplH,GACjC,OAA8B4/G,GAC1B,CAAC5/G,GACDA,EAHsC,CAU5CqlH,SAAO,GAAgCrlH,GACrC,OAA8B4/G,GAC1B,CAAC5/G,GACDA,EAH0C,CC3mBhDkC,SAAA,GAAYojH,EAAU53F,EAAU6Y,EAAWilC,GACzC7M,GAAA,WAUAhpE,KAAK4vH,EAAYD,EAGjB3vH,KAAK6vH,EAAY93F,EAGjB/3B,KAAK8vH,GATDj6C,EAS0Ck6C,iBAG9C/vH,KAAK2oG,EAAa/3D,EAGlB5wC,KAAKgwH,EAAgC,KAGrChwH,KAAKiwH,GAAkB,EAGvBjwH,KAAKkwH,GArBDr6C,EAqByCs6C,GAG7CnwH,KAAKowH,EAxBDv6C,EAwB0Cw6C,GAG9CrwH,KAAKswH,GA3BDz6C,EA4BqB06C,GAGzBvwH,KAAKm4D,EA/BD0d,EA+BgChkD,OASpC7xB,KAAKkkD,EAHLlkD,KAAKwwH,EAHLxwH,KAAKq5G,EAAY,KASjBr5G,KAAKywH,IAAmB,EAGxBzwH,KAAK0wH,EA9CD76C,EA8CwC86C,GAG5C3wH,KAAK4wH,IAA2B,EAGhC5wH,KAAK4hF,EAAa,KAGlB5hF,KAAK6wH,IAAsB,EAM3B7wH,KAAK8wH,EAHL9wH,KAAK+wH,EAAqB,KAM1B/wH,KAAKgxH,IAAuB,EAG5BhxH,KAAKixH,EAAuB,IAAIz7F,IAGhCx1B,KAAKkxH,IAA4B,EAGjClxH,KAAKmxH,GAzEDt7C,EAyEyCu7C,GAG7CpxH,KAAKqxH,EAAS,IAAeC,GAG7BtxH,KAAKuxH,GAAmB,IAAentD,GAGvCpkE,KAAKwxH,EAAkB,IAAeptD,GAGtCpkE,KAAKyxH,EAAsB,KAG3BzxH,KAAKipE,GAAa,EAGlBjpE,KAAK0xH,GA3FD77C,EA2FuC87C,GAG3C3xH,KAAK4xH,GAAqB,KAG1B5xH,KAAK6xH,GAjGDh8C,EAiG6Ci8C,GAGjD9xH,KAAK+xH,GAAmB,EAGxB/xH,KAAKgyH,EAAoB,GAGzBhyH,KAAKiyH,EAA6B,GAGlCjyH,KAAKw4E,GAAa,CArHwC,UAoI5D,GAAA05C,EAAmBC,EAAWxtG,IACtBytG,EACFD,EAAY,EAAKF,EAA6B,EAAKD,GAErDI,EAAMj0H,KAAKwmB,GAEXA,GANoC,CAqBxC0tG,SAAA,GAAAA,EAAsBC,GAIpB,GAHA,EAAKb,EAAsBa,EAC3B,EAAKP,GAAmB,EAEpB,EAAKC,EACP,IAA4BA,IAAAA,GAAAA,EAAA5iG,EAAL4iG,EAAKA,IAAAA,QAA5B,gCAIF,EAAKA,EAAoB,IATe,CA+P1CO,SAAA,GAAAA,GACE,GAAIC,EAmUQvpD,EAlUV,MAAM,IAAe/sC,G1E5SbiJ,EA4BFi9B,EA2wBUsO,K0E7fA,CAepB+hD,SAAA,GAAAA,EAAsB1jF,GACpB,EAAKk+B,cAAc,IAAe9I,G1ChSrB+C,iB0CkSetiE,IAAP4wB,KAAO5wB,IAAI,QAASmqC,IAHX,CAwN1B2jF,SAAA,GAAAA,EAAgB/vE,EAAQmpD,GAE5B,IAAMiJ,EACAiG,EAWApqE,EACA+hF,EAEFC,EAjBgC,OAAA1wF,GAAA,2BAE9B6yE,EAF8B,EAET58C,EAAQgrB,UAAU86B,sBAAwB,EAC/DjD,EAAW,IAAgBkD,GAC7BnJ,EAAepyD,GAAQ,SAACr9C,EAAWq9C,EAAQ4nB,GACzC,OAAmC4zC,GAC/B74G,EAAWq9C,EAAQ4nB,GAAsB,KANf,EAOrBpS,EAAQgrB,UAAU1Y,gBAPG,EAOmBqlD,GAPnB,EAQrBt3C,EAJuD,IAKhD,GATc,EAU/By4C,EAAqBrsH,IAAI+9C,EAAOziC,GAAI86F,GAGzC,IAAMr4D,EAAOi7C,qBAAb,KACMhtD,EAd8B,EAcb+3D,GAAc,GAGjCiqB,GAFED,EACFhwE,EAAOqS,aAAa4gD,GAAmBhlE,IAEb+hF,EAAwBzzD,UAAY,QAIhE0zD,EAAsC39D,GAApBtS,EAAOqS,eAEvB49D,EACE9mB,EAEE8mB,EAAgB7qC,GAClB,IAAe+tB,GAATkF,EACF4X,EAAgB7qC,IADpB,GADF,OAQA,IAAe0tB,GAATuF,EAAgC4X,EAAgBhiF,WAAtD,GAXJ,OAxBoC,IC3oBtCrkC,SAAA,GAAY87F,EAAUwqB,GACpB7pD,GAAA,WADoC,WAIpChpE,KAAKuoG,EAAYF,EAUjBroG,KAAK8yH,EAAkBD,EAUvB7yH,KAAK+yH,EAAe,IAAIv9F,IAcxBx1B,KAAKgzH,EAAS,CACZ,CACEC,GAAQ,KACRC,GAAOC,GACPC,GAAQA,SAACriF,EAAQk4D,GAAY,OAAKvB,GAALA,EAAc,QAAS32D,EAAQk4D,EAA/B,GAE/B,CACEgqB,GAAQI,GACRH,GAAOC,GACPC,GAAQA,SAACriF,EAAQk4D,GAAY,OAAKvB,GAALA,EAAc,QAAS32D,EAAQk4D,EAA/B,GAE/B,CACEgqB,GAAQK,GACRJ,GAAOC,GACPC,GAAQA,SAACriF,EAAQk4D,GAAY,OAAKvB,GAALA,EAAc,QAAS32D,EAAQk4D,EAA/B,GAE/B,CACEgqB,GAAQE,GACRD,GAAOG,GACPD,GAAQA,SAACriF,EAAQk4D,GAAY,OAAKvB,GAALA,EAAc,OAAQ32D,EAAQk4D,EAA9B,GAE/B,CACEgqB,GAAQE,GACRD,GAAOI,GACPF,GAAQA,SAACriF,EAAQk4D,GAAY,OAAKvB,GAALA,EAAc,OAAQ32D,EAAQk4D,EAA9B,GAE/B,CACEgqB,GAAQI,GACRH,GAAOI,GACPF,GAAQA,SAACriF,EAAQk4D,GAAY,OAAKvB,GAALA,EAAc,OAAQ32D,EAAQk4D,EAA9B,GAE/B,CACEgqB,GAAQK,GACRJ,GAAOG,GACPD,GAAQA,SAACriF,EAAQk4D,GAAY,OAAKvB,GAALA,EAAc,OAAQ32D,EAAQk4D,EAA9B,IAKjCjpG,KAAKi4D,EAAgB,IAAetjC,EAEpC30B,KAAKi4D,EAAc9jC,EAAOn0B,KAAKuoG,EAAW,gBAAgB,SAAC/zE,GAGzD,EAAKu+F,EAAah2D,OADHvoC,EAAAuc,OAFoD,GA/EjC,UAyItC,GAAA22D,EAAS6rB,EAAWxiF,EAAQk4D,GACpBz0E,EAAQ,IAAe2vC,GAAUovD,EAAW,IAAI/9F,IAAI,CACxD,CAAC,SAAUub,GACX,CAAC,UAAWk4D,MAEd,EAAKh8B,cAAcz4C,EALgB,CjB1FrCo7E,GAAA,UAAA57E,QAAAA,WACMh0B,KAAKi4D,IACPj4D,KAAKi4D,EAAcjkC,UACnBh0B,KAAKi4D,EAAgB,MAGJ,MAAfj4D,KAAKkuG,IACPluG,KAAKkuG,EAAOl6E,UACZh0B,KAAKkuG,EAAS,MAGhBluG,KAAK6tG,EAAU2lB,WAAO,EACtBxzH,KAAK+1E,EAAS,IAZN,EA4JVo4B,GAAA,UAAAn6E,QAAAA,WACMh0B,KAAK4uG,IACP5uG,KAAK4uG,EAAO3qE,OACZjkC,KAAK4uG,EAAS,MAGhB5uG,KAAK+4D,EAAgB,IANb,GClIVwrC,EAAAA,GAAAA,WAAAA,MAAAA,WAAQ,WAgCqB6J,GAAkBpuG,KAAK+4D,EAC9CkxC,iBAAiBuD,kBACjBxtG,KAAKi4D,GAAe,YA1BPw7D,WACf,GAAuB,MAAnB,EAAK9qB,GACe,GAAnB,EAAKA,GAAkDrxE,KAA/B,EAAKyhC,EAAc0pC,SAC9C,EAAKwL,GAAW,MACX,CACL,IAAMvJ,EAAc,EAAK3rC,EAAc2rC,YACnC5sB,EAAU,EAAK6wB,EAEG,EAAlB,EAAKA,IACP7wB,EAAUl1E,KAAK4G,IAAI,EAAGk7F,EAAc,EAAKiE,IAEvCjE,GAAe5sB,GAGjB,EAAK7f,EAAc3jC,GAAW,EAAKykC,EAAe,WAAW,WAC3D,EAAKk1C,GAAW,CADiD,IAGnE,EAAKl1C,EAAc2rC,YAAc5sB,GAEjC,EAAKm2B,GAAW,CAfb,CAJc,CA2BjBwlB,EADwB,GAlCxB,EAwCRC,EAAA1/F,QAAAA,WACMh0B,KAAKi4D,IACPj4D,KAAKi4D,EAAcjkC,UACnBh0B,KAAKi4D,EAAgB,MAGvBj4D,KAAK+4D,EAAgB,IANb,EAUV26D,EAAAC,GAAAC,SAAahjF,GAGX5wC,KAAK2oG,EAAa3oG,KAAKiuG,EAAWjuG,KAAK2oG,EAAa/3D,CAH9B,IAOxBijF,GAAAjyB,WAUE,OAPa5hG,KAAKiuG,EACLjuG,KAAK+4D,EAAc2rC,YACnB1kG,KAAK2oG,IAKH,CAVP,EAcV+qB,EAAAI,GAAAC,WACE,OAAO,CADW,EAKpBL,EAAAM,GAAAC,WACE,OAAO,CADO,EAKhBP,EAAAQ,GAAAA,WAA2B,GAsF3B3vB,EAAAA,GAAAA,WAAAA,MAAAA,WACEvkG,KAAKqwG,EAAkB5rE,GAAyB,IAD1C,IAKRzQ,QAAAA,WACMh0B,KAAK2vG,IACP3vG,KAAK2vG,EAAc37E,UACnBh0B,KAAK2vG,EAAgB,MAGnB3vG,KAAK0vG,IACP1vG,KAAK0vG,EAAe17E,UACpBh0B,KAAK0vG,EAAgB,MAGnB1vG,KAAKqwG,IACPrwG,KAAKqwG,EAAkBpsE,OACvBjkC,KAAKqwG,EAAoB,MAM3BrwG,KAAK+4D,EADL/4D,KAAK2vG,EADL3vG,KAAKuoG,EADLvoG,KAAKm4D,EAAU,KAKfn4D,KAAK6tG,EAAU2lB,WAAO,CArBd,EAyBVW,EAAAR,GAAAC,SAAahjF,GACQ09D,GAAnBtuG,KAAK2vG,EAAsB/+D,EADL,EAKxBujF,EAAAN,GAAAjyB,WACE,IAAM35D,EAA0B25D,GAAnB5hG,KAAK2vG,GAWlB,OAAoC,EAAhC3vG,KAAK+4D,EAAcylC,aAAmBx+F,KAAK+4D,EAAc8hB,OAC/Cu1B,GAALA,KAAgBnoE,GAGlBA,CAhBC,EAoBVksF,EAAAL,GAAAC,WACE,OAAO/zH,KAAK4oG,EAAiB5oG,KAAK4oG,EJxPtBZ,EIwP2D,CADrD,EAKpBmsB,EAAAH,GAAAC,WACE,OAAOj0H,KAAK0vG,EHlLAhH,CGiLE,EAiChByrB,EAAAD,GAAAA,WACEl0H,KAAK0vG,EAAerC,IADI,GNzS1BxP,EAAAA,GAAAA,WAAAA,iBAAAA,WACE,OAAO79F,KAAK0rG,EAAW9sG,MADN,EAQnBw1H,EAAAC,cAAAA,WACE,OAAOr0H,KAAKixG,CADE,EAQhBmjB,EAAApgG,QAAAA,WACMh0B,KAAKkxG,IAITlxG,KAAK0rG,EAAa,GAEd1rG,KAAK4uG,GACP5uG,KAAK4uG,EAAO3qE,OAEdjkC,KAAK4uG,EAAS,KAVN,EAuBVwlB,EAAAE,GAAAA,WACEt0H,KAAKkxG,GAAa,CADJ,EAShBkjB,EAAAG,GAAAA,SAAyB7yH,GACvB,IAA6BgqG,IAAAA,EAAAt8E,EAALs8E,KAAKA,GAAAA,EAAAA,EAAAA,QAA7B,kBACEhqG,EADF,EAAA4D,MAD2B,EA8B7B8uH,EAAAlxG,KAAAA,SAAK+kB,GAKH,IADA,IAAMusF,EAAqBx0H,KAAK0rG,EAAW9sG,OAAS,EAC3Cb,EAAIy2H,EAAyB,GAALz2H,IAAUA,EAAG,CAC5C,IAAMytG,EAAIxrG,KAAK0rG,EAAW3tG,GAMpB2L,EAAM3L,EAAIy2H,EACdx0H,KAAK0rG,EAAW3tG,EAAI,GAAG6yC,UAAY46D,EAAE36D,QAEvC,GAAK5I,GARSujE,EAAE56D,WAQQ3I,EAAOv+B,EAC7B,OAAO3L,EAAIiC,KAAKixG,CAX0B,CAc9C,OAAIjxG,KAAK0rG,EAAW9sG,QAAUqpC,EAAOjoC,KAAK0rG,EAAW,GAAG96D,UAC/C5wC,KAAKixG,EAGP,IAvBE,EA+BXmjB,EAAA1kH,IAAAA,SAAI+N,GACF,OAA8B,GAA1Bzd,KAAK0rG,EAAW9sG,QAKR,GADE6e,GAAWzd,KAAKixG,IACb3xG,GAASU,KAAK0rG,EAAW9sG,OAJjC,KAQFoB,KAAK0rG,EAAWpsG,EAVX,EAqBd80H,EAAAl1H,OAAAA,SAAOA,GACL,IAAKc,KAAKkxG,EACR,IAAuBxF,IAAAA,EAAAt8E,EAALs8E,KAAKA,GAAAA,EAAAA,EAAAA,QAAvB,oBAAA5N,MACM5+F,OAAOA,EAHF,IAsBfkL,GAAAA,SAAMshG,GAIJ,IAAI1rG,KAAKkxG,GAIJxF,EAAW9sG,OAAhB,CASA,IAAM61H,EAAiB7xH,KAAKmpD,MAAgC,IAA1B2/C,EAAW,GAAG96D,WAAoB,IACpE5wC,KAAK0rG,EAAa1rG,KAAK0rG,EAAW34E,QAAO,SAACy4E,GACxC,OAAQ5oG,KAAKmpD,MAAoB,IAAdy/C,EAAE56D,WAAoB,IAAQ6jF,CADH,IAIhDz0H,KAAK0rG,EAAWvtG,KAAhB,MAAA6B,KAAK0rG,EAALr6E,EAAwBq6E,GAdxB,CARgB,EA4ClB0oB,EAAAM,GAAAA,SAAchpB,EAAYipB,GAAc,IAAD,OAGrCjpB,EAAaA,EAAW34E,QAAO,SAACy4E,GAC9B,OAAOA,EAAE36D,QAAU8jF,IACY,GAA1B,EAAKjpB,EAAW9sG,QAChB4sG,EAAE36D,QAAU,EAAK66D,EAAW,GAAG96D,UAHA,IAOtC5wC,KAAKoK,GAAMshG,GAYX1rG,KAAK8/G,GAAM6U,EAtB0B,EA+BvCP,EAAAtU,GAAAA,SAAM73E,GACJ,IAAIjoC,KAAKkxG,EAAT,CAIA,IAAM0jB,EAAU50H,KAAK0rG,EAAW9sG,OAEhCoB,KAAK0rG,EAAa1rG,KAAK0rG,EAAW34E,QAAO,SAAC+qE,GAAQ,OAAAA,EAAIjtD,QAAU5I,CAAd,IAMlDjoC,KAAKixG,GAHQ2jB,EADG50H,KAAK0rG,EAAW9sG,MARhC,CADU,IA+BZi2H,GAAAA,SAAIF,EAAaG,EAAWC,GAK1B,GAL0BA,OAAA,IAAAA,GAAAA,GAKtB/0H,KAAKkxG,EAAT,CAKA,KAAOlxG,KAAK0rG,EAAW9sG,QACCoB,KAAK0rG,EAAW1rG,KAAK0rG,EAAW9sG,OAAS,GAC7CgyC,WAAakkF,GAC7B90H,KAAK0rG,EAAW5lF,MAMpB,KAAO9lB,KAAK0rG,EAAW9sG,QACEoB,KAAK0rG,EAAW,GACpB76D,SAAW8jF,GAC5B30H,KAAK0rG,EAAW/oF,QACXoyG,GACH/0H,KAAKixG,IAOmB,GAA1BjxG,KAAK0rG,EAAW9sG,UAMdo2H,EAAe,IAAgBvqC,IAD/BwqC,EAAgBj1H,KAAK0rG,EAAW1rG,KAAK0rG,EAAW9sG,OAAS,IAE7CgyC,UACCkkF,EACfG,EAAcxsC,EACdwsC,EAAc9tC,GACd8tC,EAAc7tC,GACd6tC,EAAcltC,GACdktC,EAAcjtC,gBACditC,EAAchtC,kBACdgtC,EAAc/sC,gBACd+sC,EAAc9sC,EACd8sC,EAAc7gE,YACd6gE,EAAc7sC,EACd6sC,EAAc5sC,EACd4sC,EAAcj+C,OACdi+C,EAAcztC,SAELzvD,SAAWk9F,EAAcl9F,SACtCi9F,EAAar1E,OAASs1E,EAAct1E,OACpCq1E,EAAalsC,EAAwBmsC,EAAcnsC,EACnD9oF,KAAK0rG,EAAW1rG,KAAK0rG,EAAW9sG,OAAS,GAAKo2H,EApD9C,CALyC,IAqE3CE,GAAAA,SAAYC,EAAUC,GAAiB,IAAD,OAEhCp1H,KAAKkxG,IAGLlxG,KAAK4uG,GACP5uG,KAAK4uG,EAAO3qE,OAGdjkC,KAAK4uG,EAAS,IAAe1tE,IAAM,WACjC,IAAMwqE,EAAa0pB,IACf1pB,EACF,EAAKA,EAAWvtG,KAAhB,QAAKutG,EAALr6E,EAAwBq6E,KAExB,EAAKkD,EAAO3qE,OACZ,EAAK2qE,EAAS,KANuB,IASzC5uG,KAAK4uG,EAAOnqE,GAAU0wF,GAlBc,EAjX5B/jB,GAwYV,UAACx5F,OAAOhP,UAAR,WAGE,OAFa5I,KAAK41G,GAAmB,EADnB,KAyBpB,aAAAA,SAAmB3tE,EAAMotF,EAA4B1xB,GAA5B0xB,OAAA,IAAAA,GAAAA,EAA4B1xB,OAAA,IAAAA,GAAAA,EACnD,IAAIrkG,EAAQU,KAAKkjB,KAAK+kB,GACtB,GAAa,MAAT3oC,EACF,OAAO,KAGT,IAAMw+F,EAAM99F,KAAK0P,IAAIpQ,GAIhBqkG,EAGHrkG,IAFAA,IAKF,IAAI+xG,GAAuB,EAC3B,GAAIvT,GhC3DmC,EgC2D5BA,EhC3DC3V,EAAkBvpF,OgC6D5B,IAAK,IAAIb,EAAI+/F,EAAI3V,EAAkBvpF,OAAS,EAAQ,GAALb,IAAUA,EAAG,CAC1D,IAAIytG,EAAI1N,EAAI3V,EAAkBpqF,GAE9B,GAAKkqC,GAAQujE,EAAE56D,WAAe3I,EAAOujE,EAAE36D,QAAU,CAC/C,IAAKwkF,EAAoB,CAEvB,KAAOt3H,IAAOytG,EhCmBV7iB,GgClBF5qF,IACAytG,EAAI1N,EAAI3V,EAAkBpqF,GAE5B,IAAKytG,EhCeD7iB,EgCbF,OADU/0D,EAAY,yCACf,IARc,CAarB+vE,EACFrkG,IAEAA,IAEF+xG,EAAsBtzG,EAAI,EAC1B,KApB+C,CAHS,CA2B9D,OAAO,IAAgBu3H,GACnBt1H,KAAMV,EAAO+xG,EAAqB1N,EA/C8B,EAjaxEjvE,EAAA,2BAAA08E,IAoeSA,GrH6xCP,iBqH7xCOmkB,GAnEPnkB,GAAAx8E,UrHg2CA,mBqHh2CAw8E,GAAA,UAAAx8E,GAhDAw8E,GAAAx8E,UrHg5CA,YqHh5CAw8E,GAAA,UAAAx8E,GArEAw8E,GAAAx8E,UrHq9CA,IqHr9CAw8E,GAAA,UAAAx8E,GA/BAw8E,GAAAx8E,UrHo/CA,MqHp/CAw8E,GAAA,UAAAx8E,GA/BAw8E,GAAAx8E,UrHmhDA,cqHnhDAw8E,GAAA,UAAAx8E,GAlEAw8E,GAAAx8E,UrHqlDA,OqHrlDAw8E,GAAA,UAAAx8E,OArBAw8E,GAAAx8E,UrH0mDA,IqH1mDAw8E,GAAA,UAAAx8E,IA/BAw8E,GAAAx8E,UrHyoDA,KqHzoDAw8E,GAAA,UAAAx8E,KAvCAw8E,GAAAx8E,UrHgrDA,cqHhrDAw8E,GAAA,UAAAx8E,GAvBAw8E,GAAAx8E,UrHusDA,QqHvsDAw8E,GAAA,UAAAx8E,QARAw8E,GAAAx8E,UrH+sDA,cqH/sDAw8E,GAAA,UAAAx8E,iBARAA,UrHutDA,iBqHvtDAw8E,GAAA,UAAAx8E,kBAsgBAmmF,EAAAA,GAAAA,WAAAA,GAAAA,SAAWpX,GACT3jG,KAAK2jG,QAAUA,CADG,EAQpB6xB,EAAAC,GAAAA,WACE,OAAOz1H,KAAKuxG,CADI,EAQlBikB,EAAAt2D,QAAAA,WACE,IAAI4+B,EAAM99F,KAAKsxG,EAAc5hG,IAAI1P,KAAKuxG,GAetC,OATIzT,GhChNmC,EgCgN5BA,EhChNC3V,EAAkBvpF,QgCgNSk/F,EhCxM3BxV,GgCyMRtoF,KAAKwxG,GAA2B1T,EAAI3V,EAAkBvpF,SACxDoB,KAAKuxG,IACLvxG,KAAKwxG,EAA0B,EAC/B1T,EAAM99F,KAAKsxG,EAAc5hG,IAAI1P,KAAKuxG,IAKhCzT,GhCzNmC,EgCyN5BA,EhCzNC3V,EAAkBvpF,OgC0NZk/F,EAAI3V,EAAkBnoF,KAAKwxG,GAGtC1T,CApBC,IA2BVj1F,KAAAA,WACE,IAAMi1F,EAAM99F,KAAKsxG,EAAc5hG,IAAI1P,KAAKuxG,GA+CxC,OA7CKvxG,KAAK2jG,QAsBJ7F,GhC7PiC,EgC6P1BA,EhC7PD3V,EAAkBvpF,QgCgQ1BoB,KAAKwxG,IAC8B,EAA/BxxG,KAAKwxG,IACPxxG,KAAKuxG,IAGHvxG,KAAKwxG,GAFDkkB,EAAU11H,KAAKsxG,EAAc5hG,IAAI1P,KAAKuxG,KhCnQX,EgCoQlBmkB,EhCpQTvtC,EAAkBvpF,OgCqQS82H,EAAQvtC,EAAkBvpF,OAAS,EAEnC,KAMnCoB,KAAKuxG,IACLvxG,KAAKwxG,EAA0B,GAtC7B1T,GhCxOiC,EgCwO1BA,EhCxOD3V,EAAkBvpF,QgC2O1BoB,KAAKwxG,IAMD1T,EhCzOIxV,GgC0OJtoF,KAAKwxG,GAA2B1T,EAAI3V,EAAkBvpF,SACxDoB,KAAKuxG,IACLvxG,KAAKwxG,EAA0B,KAKjCxxG,KAAKuxG,IACLvxG,KAAKwxG,EAA0B,GA0B5B,CACL,MAHI7iE,EAAM3uC,KAAKk/D,UAIf,MAASvwB,EAlDN,EAyDP6mF,EAAA7Q,GAAAA,WACE,IAAMzlD,EAAUl/D,KAAKk/D,UACrB,GAAIA,EhCtLQgO,IgCsLgBhO,EhCzMhBypB,IgC0MJmV,EAAM99F,KAAKsxG,EAAc5hG,IAAI1P,KAAKuxG,KhChSH,EgCiS1BzT,EhCjSD3V,EAAkBvpF,OgCmS1B,IADA,IAAIsuE,EAAU4wB,EAAI3V,EAAkBnoF,KAAKwxG,GAClCtkC,EhC7MCyb,KgC8M8B,GAAhC3oF,KAAKwxG,IAGTxxG,KAAKwxG,IACLtkC,EAAU4wB,EAAI3V,EAAkBnoF,KAAKwxG,EAXpB,IA7H3B,8BAAA8jB,IA6HEA,GAAA1gG,UrH6mCA,uBqH7mCA0gG,GAAA,UAAA1gG,GAzDA0gG,GAAA1gG,UrHsqCA,KqHtqCA0gG,GAAA,UAAA1gG,KA3BA0gG,GAAA1gG,UrHisCA,QqHjsCA0gG,GAAA,UAAA1gG,QARA0gG,GAAA1gG,UrHysCA,gBqHzsCA0gG,GAAA,UAAA1gG,GARA0gG,GAAA1gG,UrHitCA,WqHjtCA0gG,GAAA,UAAA1gG,GAgIuD+4C,EAA7CkyC,GAA6CzO,KAuCvD7oE,EAAAA,GAAAA,WAAAA,MAAAA,WACE,IAAMA,EAAQ,IAAgBs3E,GAK9B,OAFAt3E,EAAMmpE,EAAW1xG,KAAK0xG,EAAStmG,QAC/Bm9B,EAAM0oE,EAAcjxG,KAAKixG,EAClB1oE,CAND,EAaRotF,EAAA3hG,QAAAA,WACE,IAAyB09E,IAAAA,EAAAtiF,EAALsiF,KAAKA,GAAAA,EAAAA,EAAAA,QAAzB,oBAAApyG,MACQ00B,UAGRh0B,KAAK0xG,EAAW,EALR,IAYV6iB,GAAAA,SAAyB7yH,GACvB,IAAyBgwG,IAAAA,EAAAtiF,EAALsiF,KAAKA,GAAAA,EAAAA,EAAAA,QAAzB,oBAAApyG,MACQi1H,GAAyB7yH,EAFN,EAU7Bi0H,EAAAzyG,KAAAA,SAAK+kB,GAGH,IAFA,IAAI2tF,EAA4B51H,KAAKixG,EAEZS,EAAAtiF,EAALsiF,KAAKA,GAAAA,EAAAA,EAAAA,QAAzB,kBAAmC,CACjC,IAAMj0F,GADR,WACyByF,KAAK+kB,GAE5B,GAAgB,MAAZxqB,EACF,OAAOA,EAAWm4G,EAGpBA,GAA6Bt2H,EAAM+0H,gBACjC/0H,EAAMu+F,kBARyB,CAWnC,OAAO,IAdE,EAqBX83B,EAAAjmH,IAAAA,SAAI+N,GAIF,IAHA,IAAIm4G,EAA4B51H,KAAKixG,EAGZS,EAAAtiF,EAALsiF,KAAKA,GAAAA,EAAAA,EAAAA,QAAzB,kBAAmC,CAIjC,IAAMpsG,GAJR,WAI0BoK,IAAI+N,EAAWm4G,GAEvC,GAAItwH,EACF,OAAOA,EAGHuwH,EAAMv2H,EAAMu+F,mBAClB+3B,GAA6Bt2H,EAAM+0H,gBAAkBwB,CAXpB,CAenC,OAAO,IAnBK,EA0BdF,EAAAz2H,OAAAA,WAAgB,EAUhBy2H,EAAAvrH,GAAAA,WAAmB,IAWnB01G,GAAAA,SAAM73E,GACJ,IAAyBypE,IAAAA,EAAAtiF,EAALsiF,KAAKA,GAAAA,EAAAA,EAAAA,QAAzB,oBAAApyG,MACQwgH,GAAM73E,GArId,KAA8B,EAuI9B6tF,KAvIYpkB,EAAS9yG,QApOa,GA2WlCk3H,KAvIwCpkB,EAAS,GApOrC7T,oBAqOJv+F,EAsIRw2H,KAtIqBpkB,EAAS/uF,QAsI9BmzG,KAnIO7kB,GAAe3xG,EAAM+0H,gBAC1B/0H,EAAM00B,SA8HE,EAWZ2hG,EAAAjB,GAAAA,WAAwC,EAWxCiB,EAAAd,GAAAA,WAA6B,EAU7Bc,EAAAT,GAAAA,WAAuC,EA9KzCxgG,EAAA,+BAAAmrF,IA8KEA,GAAAjrF,UrHm6BA,YqHn6BAirF,GAAA,UAAAjrF,GAVAirF,GAAAjrF,UrH66BA,IqH76BAirF,GAAA,UAAAjrF,GAXAirF,GAAAjrF,UrHw7BA,cqHx7BAirF,GAAA,UAAAjrF,GAXAirF,GAAAjrF,UrHm8BA,MqHn8BAirF,GAAA,UAAAjrF,GAXAirF,GAAAjrF,UrH88BA,MqH98BAirF,GAAA,UAAAjrF,GAVAirF,GAAAjrF,UrHw9BA,OqHx9BAirF,GAAA,UAAAjrF,UA1BAA,UrHk/BA,IqHl/BAirF,GAAA,UAAAjrF,IArBAirF,GAAAjrF,UrHugCA,KqHvgCAirF,GAAA,UAAAjrF,KAVAirF,GAAAjrF,UrHihCA,yBqHjhCAirF,GAAA,UAAAjrF,GAZAirF,GAAAjrF,UrH6hCA,QqH7hCAirF,GAAA,UAAAjrF,QO/sBAmhG,GAAA,UAAA/hG,QAAAA,WACEh0B,KAAK4E,IAAI5E,KAAKg2H,MACVh2H,KAAK4uG,IACP5uG,KAAK4uG,EAAO3qE,OACZjkC,KAAK4uG,EAAS,MAGhB5uG,KAAK4xG,EAAW,IAPR,EA0BVmkB,GAAA,UAAAnxH,IAAAA,SAAI+2D,GAEF37D,KAAK8xG,EAAQn2C,EACRu2C,GAALA,KAHQ,EAsBV6jB,GAAA,aAAAC,WACE,OAAOh2H,KAAK4xG,EAASokB,IADN,ECvBjBC,GAAA,UAAAjiG,QAAAA,WAEEh0B,KAAKwyG,EAAavuE,OAElB,IAA4BsuE,IAAAA,EAAAnjF,EAALmjF,KAAKA,GAAAA,EAAAA,EAAAA,QAA5B,oBAAAG,MACW1+E,UAGXh0B,KAAKuyG,EAAW95E,OARR,EIoMVylF,GAAA,aAAA4B,SAAM73E,EAAMiuF,GAAAA,OAAA,IAAAA,GAAAA,EACV,IAAkB,MAAA9mG,EAAApvB,KAAKo1G,EAAoBlpG,QAAzB,YAAlB,kBACM+7B,GADN,WACiB4I,SACRwlE,GAALA,KAA6BvY,GAG7Bo4B,GACGhgB,GAALA,KAPmC,KAcvC,aAAA6E,SAAWpX,GACT3jG,KAAKu1G,EAAW5R,EACZ3jG,KAAKs1G,GACPt1G,KAAKs1G,EAAUyF,GAAWpX,EAHV,EAoMpBqS,GAAA,UAAAzyC,MAAAA,WACMvjE,KAAK82G,IACP92G,KAAK82G,GAAWvzC,OAFZ,ECvc4CoK,EAA1CwoD,GAA0C9oD,IA2BpD8oD,GAAA,UAAAniG,QAAAA,WACEh0B,KAAKi3G,EAASx+E,QACdz4B,KAAKm3G,EAAalzE,OAClBopC,GAAAmB,UAAMx6C,QAAAA,KAAAA,KAHE,EC3B2C25C,EAA3CyoD,GAA2C/oD,IAqBrD+oD,GAAA,UAAApiG,QAAAA,WACEh0B,KAAKu3G,EAAmB9+E,QACxB40C,GAAAmB,UAAMx6C,QAAAA,KAAAA,KAFE,EA+GVoiG,GAAA,YAAAzjB,SAAK0jB,GACH,IAA+B,MAAAjnG,EAAApvB,KAAKu3G,EAAmBhoG,UAAxB,YAA/B,kBAAiE,CAC/D,IAAM+mH,GADR,WAC0CA,GA3CkB,GAI5D,IADMC,IAAAA,EA2CqBC,EA3CcC,GAChC14H,EAAIw4H,EAAgB33H,OAAS,EAAQ,GAALb,EAAQA,IAAK,CACpD,IAAM24H,EAAgBH,EAAgBx4H,GACtC,GAAI24H,EAAcj5G,UAwCZ44G,EAxCkC,CACtC,EAAOK,EAAcrvC,GAArB,OADsC,CAFY,CAMtD,EAAO,IAVqD,CAgDpDsvC,EAAqBC,KAEnBN,IAAgBM,GAAhBN,GAAgBM,GAAhBN,EAtBElkG,WAsBcwkG,EAtBGxkG,WAsBnBkkG,EArBHtrE,mBAqBmB4rE,EArBM5rE,mBAqBtBsrE,EApBH32E,QAoBmBi3E,EApBLj3E,QAoBX22E,EAnBH7+E,aAmBmBm/E,EAnBAn/E,aAmBhB6+E,EAlBHtqE,WAkBmB4qE,EAlBF5qE,WAkBdsqE,EAjBH/7F,QAiBmBq8F,EAjBLr8F,QAiBX+7F,EAhBHv+F,UAgBmB6+F,EAhBH7+F,UAgBbu+F,EAfHvrE,eAemB6rE,EAfE7rE,eAelBurE,EAdHxiE,kBAcmB8iE,EAdK9iE,kBAcrBwiE,EAbH97F,OAamBo8F,EAbNp8F,SAcKo8F,GAAqBN,GACxCM,EAAkBr3G,OAAS+2G,EAAe/2G,OAC1C+2G,EAAe/2G,QAAUq3G,EAAkBr3G,MAC/C,IAAMs3G,EAAoBD,GAAqBN,GAC3CM,EAAkB3xH,UAAYqxH,EAAerxH,UAC7CqxH,EAAerxH,WAAa2xH,EAAkB3xH,SAC5C6xH,EAAiBF,GAAqBN,GACxCM,EAAkB3rE,OAASqrE,EAAerrE,QACnBnX,GAAMwiF,EAAerrE,MACxC2rE,EAAkB3rE,QAEtB8rE,GAAkBF,GAAqBC,IAChCrf,GAALA,KACA4e,EAAmBO,EAAkBn/E,eACvC++E,EAAiBF,GAAiBM,EAE5BpiG,EAAQ,IAAe2vC,GAAU,mBAAoB,IAAI3uC,IAAI,CACjE,CAAC,UAAWohG,GACZ,CAAC,WAAYP,MAEfr2H,KAAKitE,cAAcz4C,IAInBmiG,GACOlf,GAALA,KACA4e,EAAmBO,EAAkBn/E,eACvC++E,EAAiBF,GAAiBM,EAGNz6F,KAAKC,UAAUw6F,GAErCpiG,EAAQ,IAAe2vC,GAAU,gBAAiB,IAAI3uC,IAAI,CAC9D,CAAC,UAAWohG,GACZ,CAAC,WAAYP,MAEfr2H,KAAKitE,cAAcz4C,GA7CwC,CAD/B,GGFpC0jB,EAAAA,GAAAA,WAAAA,QAAAA,WACE,OAAOl4C,KAAKi4E,EAAW//B,SADf,EAuCV8+E,EAAAplG,UAAAA,SAAUC,GA2BR,GA1BA7xB,KAAKm4D,EAAUtmC,EAoBf7xB,KAAK25G,EACD,IAAcvqC,GAhBS6nD,CAGzB11D,YAAa3+D,KAAK4G,IAAIqoB,EAAO44C,gBAAgBlJ,YAAa,GAC1DE,UAAW5vC,EAAO44C,gBAAgBhJ,UAClCI,cAAehwC,EAAO44C,gBAAgB5I,cACtCF,WAAY9vC,EAAO44C,gBAAgB9I,WACnCgN,QAAS,EACTnC,aAAc,EACdD,kBAAmB,IAKHnL,GAOdvvC,EAAOisF,qBAAsB,CAC/B,IAAMxoG,EAAQtV,KAAK05G,EAAahqG,IvDiC7B+xC,SuDhCCnsC,GAASA,EAAM0kG,IACK1D,GAAtBhhG,EAAM0kG,GACN1kG,EAAM0kG,EAAkB,MAG1B,IAAqB,SAAA5qF,EAAApvB,KAAKi6G,EAAkB/tG,SAAvB,QAArB,4BAEWoqG,GADQt2G,KAAKi6G,EAAkBvqG,IAAIizC,IAE5C3iD,KAAKi6G,EAAkBl9C,OAAOpa,EAVD,CAgCjC,IAlBI9wB,EAAOksF,sBACHzoG,EAAQtV,KAAK05G,EAAahqG,IAAgB0wC,MACnC9qC,EAAM0kG,IACK1D,GAAtBhhG,EAAM0kG,GACN1kG,EAAM0kG,EAAkB,MAKxBnoF,EAAOgsF,uBACHvoG,EAAQtV,KAAK05G,EAAahqG,IvDS7B8xC,WuDRUlsC,EAAM0kG,IACK1D,GAAtBhhG,EAAM0kG,GACN1kG,EAAM0kG,EAAkB,MAKT,KAAA5qF,EAAApvB,KAAK05G,EAAaxtG,SAAlB,QAAnB,mBACQoJ,EAAQtV,KAAK05G,EAAahqG,IADlC,EAAAhT,QAEYs9G,GACctD,GAAtBphG,EAAM0kG,EAA2BnoF,EAAOosF,sBACJ,EAA9BpsF,EAAOosF,uBAGW3H,GAAtBhhG,EAAM0kG,GACN1kG,EAAM0kG,EAAkB,OAEa,EAA9BnoF,EAAOosF,uBAChB3oG,EAAM0kG,EAAuBsD,GAALA,KAA4BhoG,EAAMqtC,SAIzD9wB,EAAOisF,sBAk0BdoZ,SAAAA,GAKE,IAJA,IAAMniB,EAAgB,EAAK58C,EAAQ8lD,qBAC7BkZ,EAAoB,EAAKh/D,EAAQoyD,uBAGF5gE,EAAAv6B,EAAfu6B,EAAK0vD,EAAU1vD,UAAAA,EAAAA,EAAAA,OAArCviD,EAAA,WAAAA,EAAA,uBACE,GADFA,EAAA,WACOwgD,EAAAA,GAAQC,MAIb,GAAI,EAAKoyD,EAAkBllG,IAAI6yC,EAAAA,GAAQC,QAMrC,GADS6uD,GADHsE,EAAW,EAAKf,EAAkBvqG,IAAIk4C,EAAAA,GAAQC,OAChCktD,KACE,EAAhBA,GACDoiB,EAAkBroE,KACf,4BAACrH,GAAS,OAAcoB,GACpBjB,EAAAA,GAAQC,MAAM5iD,SAAUwiD,EADlB,CAAV,OAEN,CAGA,IAAMqzD,EAAa,EAAKpB,EAAahqG,IADlCk4C,EAAAA,GAAQC,MAAMnrD,MAKbs+G,KAH2BF,GAC3BA,EAAWd,IAGJ1D,GAAT0E,GAEF,EAAKf,EAAkBl9C,OAAOnV,EAAAA,GAAQC,MAVtC,OAgBiB,GAAjBktD,IAMCoiB,EAAkBroE,KACnB,4BAACrH,GAAS,OAAcoB,GACpBjB,EAAAA,GAAQC,MAAM5iD,SAAUwiD,EADlB,CAAV,SAOEuyD,EAAuBsD,GAALA,EAA4B11D,EAAAA,GAAQC,UAOvDD,EAAAA,GAAQC,MAAMmN,cACjBpN,EAAAA,GAAQC,MAAM+1C,qBAGhB,EAAKqc,EAAkBr1G,IAAIgjD,EAAAA,GAAQC,MAAOmyD,GA7DjB,CAj0BpBkd,CAALA,KA3Ec,EA2GZF,EAAAvtH,MAAAA,SAAM2tH,GAAsB,IAAD,cAAAl1F,GAAA,sBAK/B,WA4nBIm1F,SAAAA,EAAaD,GACjB,IAAMn6B,EAiBAwH,EAEA92C,EA6Ba,IAAnB,EACQhL,EAEEm4D,EAEEd,EAtD0B,OAAA93E,GAAA,uBAMtC,GALM+6D,EAA6C17C,IADb,EAM5B0xD,EAER,MAAM,IAAe/2E,GtE1xBbiJ,EAsBCmyF,EAonB6BC,MsEgLxC,OAtBM9yB,EAAgB,IAAIjvE,IAEpBm4B,EAAU,IAAIn7B,IApBkB,EAsB7BygF,EAAgBprD,QACvB48C,EAAc7/F,IAAIq4F,EAAYx7C,EAvBM,EAuBMwxD,EAAgBprD,OAC1D8F,EAAQz8B,IAxB4B,EAwBnB+hF,EAAgBprD,QAxBG,EA2B7BorD,EAAgBnrD,QACvB28C,EAAc7/F,IAAIq4F,EAAYz7C,GA5BM,EA4BMyxD,EAAgBnrD,OAC1D6F,EAAQz8B,IA7B4B,EA6BnB+hF,EAAgBnrD,QA7BG,EAgC7B0xD,IACP/U,EAAc7/F,IAAIq4F,EAAY37C,GAjCM,EAiCKk4D,GACzC7rD,EAAQz8B,IAlC4B,EAkCnBsoF,IAMnB,IAxCsC,EAsCP1jC,EAAiB4lC,GAExB93F,KAAK6gF,EAxCS,EAyC7B4U,EAAUza,aAzCmB,EA0C7Bya,EAAU38G,KA1CmB,EA2C7B28G,EAAUzT,wCAHnB,EAxCsC,CAiDtC,IAJgBn1B,GA7CsB,EA6CjCwH,GA7CiC,EA+CjCu/C,iBAEc,EAAApoG,EAAAq1E,EAAcv4F,QAAd,YAAnB,4BACQy2C,EAAS8hD,EAAc/0F,IAAIhT,GAlDG,EAmD1Bg9G,EAAa3kG,IAAIrY,KACnBo+G,EAAkBsC,GApDUA,EAoDQz6D,GACtCy0E,EAAoBriH,IAAI4tC,EAAOziC,MAEjBs1F,GADVwE,EAAkBod,EAAoB1nH,IAAIizC,EAAOziC,KAEnD,SAAC5a,EAAWq9C,EAAQ4nB,GAClB,OAw8CuB4zC,GAv8CnB74G,EAAWq9C,EAAQ4nB,GAw8CU,KAlgDP6zC,EAmgD7BjmD,EAAQsS,gBAngDqB2zC,EAmgDCtoC,EAAiB0H,GA38CH,IAI/Cs9B,EAAWd,EAAkBA,GA5DG,EA8D7BN,EAAa90G,IAAIlI,EAAMo+G,GACvBwB,GA/D6BA,EA+DbxB,EAAY,IA/DC,QA5nB3Buc,CAALA,EAAkBD,GAAwB,IAAI5hG,KAApD,GACgBi7C,GAAhB,EAAKwH,GAGL,EAAKpf,GAAmB,EATO,SA2fjCm+D,EAAAx3B,GAAAA,WACE,GAAKx/F,KAAK81E,EAaV,IARA,IAAM4mC,EAAmB18G,KAAK81E,EAAiB8mC,KAQ5B,EAAAxtF,EAAApvB,KAAK05G,EAAaxtG,QAAlB,YAAnB,kBAA6C,CAA7C,cACQ4uG,EAAa96G,KAAK05G,EAAahqG,IAAIhT,GANZg/G,IAAAA,EATxBA,KASO5lC,EAAiB4lC,GAS7B,K9ExfF,E8EwfyBh/G,GlBpDM0jD,G5DpcN,O4DqcXw6C,EAALA,EAAKA,G5DrcLn2C,GAA2C,MAAnB,EAAKD,G8Egf1Bk4D,G9E7eA,EAAKj4D,G8E6eLi4D,E9E7eyB,EAAKl4D,E4DqcLwsD,GAD7B3R,EAAgBD,GAALA,EkBiDM1iG,GARbggH,IAQoB,CAI5B,GAHI5B,EAAWd,IACbc,EAAWd,EL1kBZ1E,EAAY,MlDaZ7zD,UuD+jBGq5D,EAAWp+G,KACb,IAAuB,SAAA0yB,EAAApvB,KAAKi6G,EAAkB1qG,WAAvB,QAAvBnI,EAAA,KAAAA,EAAA,SAAAA,EAAA4zG,ML7kBD1F,EAAY,KKilBbwF,EAAWD,GAAkB,MAGU,MADKhwB,GAAxC7qF,KAAK81E,EAAiB4lC,GAA4Bh/G,IAK7Bo+G,EAAWc,KAC7ByB,GAALA,KAAuBvC,GAKrBA,EAAWtyC,KACbsyC,EAAWtyC,GAAUjF,QAErBu3C,EAAWtyC,GAAY,MAKrB9rE,IAAqB0jD,KACDs7D,EAAtBA,KAAK5lC,EAAiB4lC,IlByjBnB1gB,GACP,EAAKA,EAAe9hE,IkBrjBlB4hF,EAAWtb,IAAS,CApCQ,CAJa,CAdtC,EA0WTw3B,EAAAQ,eAAAA,WACE,IAAM/0B,EAAWziG,KAAKq5G,EAAUxK,qBAAqBzI,cACtC9uE,IAAXmrE,EACFziG,KAAK81E,EAAiB4lC,GAAkBxV,GAAYzD,GAQpDziG,KAAK81E,EAAiB4lC,GAAkBxV,GAHxClmG,KAAKm4D,EAAQozD,2BAA6Bj0F,IAAW10B,KAAKC,IAAI,EAAG,IARpD,ECjoCnB6xB,EAAA,yBAAA+iG,IAkKSA,GvI0mDP,+BuI1mDOC,GAtDAD,GvIgqDP,sBuIhqDOE,GA/FAF,GvI+vDP,mBuI/vDOlS,GCNT7wF,EAAA,2BAAAkjG,IA+RSA,GxIs+CP,uBwIt+CAC,SAA8Bn7H,EAAM+vE,GAClCorD,GrCwiBS54C,IqCxiBLviF,EAAJm7H,CAUAA,IAEEA,IAAAC,EAAsCpyF,GAAS+mC,EAASvpE,KAFtD20H,CAGFA,MAAO7sH,GAEP6sH,MAFcA,CAKZE,GAAoBF,EAMUA,WAHlCC,EAAeA,EAAa5sF,QAGXf,OAAO0tF,EAAGA,IACKA,WAA5BC,EAAa3tF,QAAQ0tF,KACvBC,EAAeA,EAAa1sH,MAAMysH,GAAIA,GACtCE,GAAoBF,GAItBA,IACEA,IAAMG,EAAwC77F,KAAK1/B,MAAMq7H,GACrDE,EAAAH,MACFC,EAAeE,EAAAH,IACfE,GAAoBF,GAElBG,EAAAH,aACFC,EAAeE,EAAAH,WACfE,GAAoBF,GAElBG,EAAAH,UACFC,EAAeE,EAAAH,QACfE,GAAoBF,EAZpBA,CAcFA,MAAOphD,GAAM,CAIXshD,IAIFtrD,EAASvpE,KAA8B41B,GACRuoB,GAAWy2E,IAtD5CD,CADqDA,EAZhDD,GxIk/CP,2BwIl/CAK,SAAkCv7H,EAAMmuE,GACbqtD,GAA4Bx7H,EAAMmuE,EADHotD,KxIk/C1D,qBwI9/CAE,SAA4Bz7H,EAAMmuE,GACPqtD,GAA4Bx7H,EAAMmuE,EADTstD,EAZ7CP,GxI0gDP,qBwI1gDAQ,SAA4B17H,EAAMmuE,GACPqtD,GAA4Bx7H,EAAMmuE,EADTutD,EAlC7CR,GxI4iDP,0BwI5iDAS,SAAiC37H,EAAMmuE,GrC+mB5BoU,IqC9mBLviF,IAKE47H,EAA2Cr5E,GAD3Cs5E,EAAyCzhG,GADY+zC,EAAQ5lD,OAGnE4lD,EAAQ7lD,QAAQqzG,gBAAkBA,oCAClCxtD,EAAQ5lD,KAA8B6hB,GAAOuxF,OAASC,GARCD,EAblDT,GxIyjDP,6BwIzjDAY,SAAoCr7F,EAAUsiB,EAAcf,GAC1D85E,OAAgCC,GAC5Bt7F,EAAUsiB,EAAcf,EAFuC85E,KxIyjDrE,uBwIvlDAE,SAA8Bv7F,EAAUsiB,EAAcf,GACpDg6E,GAAqBA,QAAjBj5E,EACFi5E,OAAOv7F,EAIHqjD,EAAO9hC,EAAQ5gB,kBAEf66F,EAD+B5xF,GAAoB5J,GACvB5qB,MAAMmmH,UAAU5yG,MAAMvT,MAAMmmH,KAAK/1G,QAUnC+1G,EAAAnkH,EAAOgpC,KAAKo7E,GAP1CD,IAAM73H,EAAS63H,IAAIxhG,YAA4BwhG,EAAhBl6H,EAAOI,QAChCoL,EAA+B6uB,GAASh4B,GAC9C63H,IAAKA,IAAI36H,EAAI26H,EAAGE,EAASp6H,EAAOI,OAAQb,EAAI66H,EAAQ76H,IAClDiM,EAAMjM,GAAKS,EAAOK,WAAWd,GAKjC26H,OAAqB5R,GAAkB3pF,EAH9BnzB,EAGmDw2E,EAnBCk4C,EApBxDd,GxI2mDP,uBwI3mDAiB,SAA8B17F,EAAUsiB,EAAcf,GACpDm6E,MAAqBA,QAAjBp5E,EACKtiB,GAIHqjD,EAAO9hC,EAAQ5gB,kBAGAgpF,GAAkB3pF,EADjCmpF,EAD+Bv/E,GAAoB5J,GACtB5qB,MAAMsmH,KAAK/yG,MACc06D,GATCq4C,EAbxDjB,GxIwnDP,4BwIxnDAkB,SAAmC37F,EAAUsiB,EAAcf,GACzDo6E,OAAgCL,GAC5Bt7F,EAAUsiB,EAAcf,EAFsCo6E,EAjF7DlB,GxIysDP,kBwIzsDO9Q,MxIysDP,oBwIruDOM,GAzBMwQ,GxI8vDb,oBwI9vDamB,WACXA,IAAMlnG,EAD2BknG,OAAA72F,GAAA62F,SAAAA,GAAAA,OAAAA,GAAAA,EAAAA,GAC3BlnG,EAASknG,CACbhmE,cAAegmE,CAACA,OAAQA,OAAQA,OAChCx8C,kBAAmBw8C,CACjBA,CACEthF,YAAashF,qCAIfA,EAAAA,EAAAA,GACFA,EAAAA,EAAM95F,UAAUu9C,4BAA4Bu8C,gBAAiBA,CAAClnG,IAA9DknG,IAV+BA,GAAAA,EAAAA,EAW/BA,EAAAA,QAAOA,IACAtiD,EAAAA,GACPsiD,EAAAA,QAAOA,GAbwBA,GAAAA,ECFrCrkG,EAAA,iCAAAskG,IA4dSA,GzIoyCP,mByIpyCOC,GAvdAD,GzI2vDP,cyI3vDOxJ,GCK6C7hD,EAA1CurD,GAA0C7rD,KAoLpDic,EAAAA,GAAAA,WAAAA,aAAAA,WACE,OAAOtpF,KAAK2oG,CADC,EAefwwB,EAAAC,GAAAA,WACE,OAAOp5H,KAAK4vH,CADA,EAKduJ,EAAAE,GAAAA,WACE,OAAOr5H,KAAKq5G,CADA,EA4Ed8f,EAAAG,SAAAA,WACE,OAAOt5H,KAAKqxH,CADH,EA0EX8H,EAAA1vH,MAAAA,WAAS,IAkBIuB,EAlBL,OACOk3B,GAAA,+BAGX,WAAMwjB,QAAQ7J,UAAd,GAHW,OAOT,OADE,OACF,IA+FA09E,SAAAA,GAaJ,IAAM3oF,EAaApc,EAmBA+kC,EACAp7C,EA9CoB,OAAA+jB,GAAA,+BAiB1B,GAhBKuwF,GADqBA,EACC,mBADD,EAGhBvuE,IAHgB,EAKnBssE,EAA4CgJ,GALzB,EAMf5J,EANe,EAMCC,GAND,EAQnB3rE,EARmB,EAQJssE,IARI,EAUnBtsE,EAAQtyB,UAVW,EAUIumC,EAAQlP,UAAU,WAAWuvB,OAVjCA,EAUiCA,CAAAA,KAGrD5nC,EAAYlD,KAAK6rB,MAAQ,IAE1Bk5D,GAfqBA,EAeC,YAfD,EAiBhBpZ,EAAV,cACmB,WAlBO,EAkBIn1D,EAAQz6C,MAlBZ,EAmBfmmH,EAnBe,EAmBCU,IADR,GAlBO,SAkBnBjX,EAAY,IAlBO,OA8B1B,OA9B0B,EAsBrBkY,GAAiB11E,UAIhBrnB,EApCC,IAAe2vC,G1CnTRwC,sB0CwVRzjE,GAGN,IAAMwiD,QAAQ7J,UAAd,GA9B0B,OAkC1B,GAlC0B,EA+BrBoxB,cAAcz4C,GAGmB,GAlCZ,EAkCjB6kF,EAAU1vD,SAAS/qD,OAC1B,MAAM,IAAes9B,G1EnXbiJ,EAmBA0a,EAghBG45E,gB0EkGaxwE,GACNywE,SAAA,EAAC9xE,GAGnB,OAAQA,EAAQE,OAASF,EAAQC,OACzBD,EAAQE,OAASF,EAAQE,MAAMnI,OAAOp2C,SAAS,IAJxB,CAM7B0/C,EAASU,SAASmF,KAAK4qE,KAGzBzwE,EAASU,SAAWV,EAASU,SAAS52B,OAAO2mG,GAVX,CA1QTC,CA3CD,EA2C2BtgB,GAE/C9/C,EAAM7rB,KAAK6rB,MAAQ,IACnBp7C,EAAQo7C,EAAM3oB,EA9CM,EA+CrBygF,EVlYAxd,EUkYuB11F,EA/CF,SA/FXo7G,CAPFA,GAOT,GAPS,OAUT,OAFKhH,GARIA,GAUT,IAoJAqH,SAAAA,GAaJ,IAGQplG,EAOFqlG,EAYErlG,EAnCkB,OAAA0N,GAAA,+BAe1B,GAXKuwF,GAJqBA,EAIC,cAJD,EAMrBxC,GAAkBviF,KAAK6rB,MAAQ,IANV,EAQrBqoB,EARqB,EAQHsuC,KARG,EASrBE,EhCngBAxuC,EgC0fqB,EASeA,EATf,EAWrBA,EAAWhwD,UAXU,EAWKumC,EAAQ+qB,KAAK,WAAW1K,OAX7BA,EAW6BA,CAAAA,KAEHgL,GAb1B,EAaQ4sC,EAbR,EAcjB/W,GACT,cAGE,OAFM7kF,EAlFD,IAAe2vC,G1C7RT8D,qB0C+WG/kE,GAEd,IAAMwiD,QAAQ7J,UAAd,GAlBwB,OAmBnB02E,GAnBmBA,GAAA,EAoBnBtlD,cAAcz4C,GApBK,OAyB1B,OAFMqlG,EAA0CC,GAvBtB,EAwBjBzgB,EAAU1vD,UACnB,IAAsB+uB,GAzBI,EAyBfkJ,EACPi4C,EA1BsB,EA2BjBxgB,EAAU1gC,mBAFnB,GAzB0B,OAgCC,OAJtB45C,GA5BqBA,GAgCC,IAA6B1wC,GAhC9B,EAgCYuuC,EAhCZ,EAiCjB/W,GADkB,GAhCD,OAkC1B,IAF2B,IAE3B,cAGE,OAFM7kF,EArGD,IAAe2vC,G1C7RT8D,qB0CkYG/kE,GAEd,IAAMwiD,QAAQ7J,UAAd,GArCwB,SAsCnBoxB,cAAcz4C,GAtCK,SApJXolG,CAVFA,GAUT,GAVS,OAaT,OAFKrH,GAXIA,GAaT,aAyNAwH,GA0BF,IAAMjN,EAOAhhB,EAIA+tB,EAEAG,EAKApyE,EAEEiI,EA9CuB,OAAA3tB,GAAA,YAgCjC,OAhCiC,EAOvB8tF,IAPuB,EAU1BA,EACD,IAAgB5yD,GAXW,EAYlBjF,EAAQ80D,uBAZU,EAalB90D,EAAQi1D,qBAbU,EAclBj1D,EAAQm1D,2BAdU,EAelBn1D,EAAQo1D,uBAfU,EAgBlBp1D,EAAQw1D,mBAhBU,EAiBlBx1D,EAAQq1D,qBAjBU,EAkBlBr1D,EAAQ+0D,oBAlBU,EAmBlB/0D,EAAQs1D,oBAnBU,EAoBlBt1D,EAAQv5B,YAAYs+B,uBACP,KArBK,EAyBxB20D,KACD/E,EA1ByB,EA0BP30D,EAAQ20D,WA1BD,EA2B1BiE,EAAqBjE,EA3BK,EA4B1BgE,EAAchE,IA5BY,EA6B1BgE,EAAYl/F,UA7Bc,EA6BCumC,EAAQq0D,MA7BT,EAgCxBkF,IACD5lB,EAjCyB,EAiCXuN,EAAUxK,qBAAqB/C,IAI7C+tB,EAA0CC,GArCjB,EAsCtBzgB,EAAU1vD,UACbqwE,EAvCyB,EAuCJhK,EAA8B9yH,OACrD28H,GAxC2B,EA0C1B/I,EAAYl/F,UA1Cc,EA0CCumC,EAAQq0D,KA1CT,EA2C1BsE,EAAYr1D,YAAY92D,MAAM24B,KAAK08F,EAAczqH,cA3CvB,EA4CVuhH,EAAYv4D,kBAEzB1I,EAAW,GA9CY,EA+CxB+hE,GAAqBhqE,EACtBA,EAAQE,OACV+H,EAAS1xD,KAAUu0H,GAjDQA,EAiDQ9qE,EAAQE,MAAOgkD,IAEhDlkD,EAAQC,OACVgI,EAAS1xD,KAAUu0H,GApDQA,EAoDQ9qE,EAAQC,MAAOikD,IAEpD,IAAMpmD,QAAQE,IAAIiK,GAAlB,IATF,QAbF,MAhCiC,IAzNlBkqE,CAbFA,GAaT,GAbS,OAcJxH,GAdIA,GAAA,EAgBJf,EAAgB31E,UAVnB,aANO,QAiBF7wC,EAAAA,EAAAA,cAE2BkxB,K1E8hBnBgnC,M0E7hBVl4D,EAAM4c,M1EyiBG8oD,M0ExiBT1lE,EAAM4c,OArBF,EAsBF4pG,EAAgB9gE,OAAO1lD,GAtBrB,QADP,IAkCRiiE,cAAAA,SAAcz4C,GACZ,OAAIx0B,KAAKyxH,EACAzxH,KAAKyxH,EAAoBxkD,cAAcz4C,GAEvC64C,GAAAmB,UAAMvB,cAAAA,KAAAA,KAAcz4C,EAJV,EAWrB2kG,EAAA10D,QAAAA,SAAQz5D,G1EtRIm6B,I0EuRNn6B,EAAMywB,WAERz7B,KAAKwxH,EAAgB9gE,OAAO1lD,GAC5BhL,KAAKk4C,WAIkC,OAAYtzC,IAAP4wB,KAAO5wB,IAAI,SAAUoG,GAwCnE,EAAO,IAAem5D,G1C1TjBpoC,Q0C0TiC74B,GAvCtClD,KAAKitE,cADSz4C,GAAAA,EAEJivC,mBACRz4D,EAAM4wB,SAAU,EAXL,EAqKfu9F,EAAAvnG,UAAAA,SAAU1wB,EAAM2C,GACRguB,EAAgC8lG,GAAsBz2H,EAAM2C,GACnCo1H,GAAmBj5H,KAAKm4D,EAAStmC,EAF3C,EAUvBsnG,EAAAz8C,iBAAAA,WACE,OAA8BlsB,GAAYxwD,KAAKm4D,EAD9B,EAyHnBghE,EAAAc,GAAAA,WACE,OAAOj6H,KAAKwxH,CADE,IAsBVt5E,QAAAA,WAAW,IAeiB,IAflB,cAAAhW,GAAA,+BAEd,GADA,EAAK+mC,GAAa,GACd,EAAK/kB,GAAY,EAAKusE,GAA1B,cACE,WAAM,EAAKvsE,EAAQjgB,OAAnB,GAHY,OAKd,IAAI,EAAK6sF,GAAgB,EAAKE,GAA9B,cACE,WAAM,EAAKF,EAAY7sF,OAAvB,GANY,OAWd,GAHI,EAAKysF,IAAoB,EAAKE,IAChC,EAAKF,EAAgB18F,WAEnB,EAAK4tD,GAAe,EAAKivC,GAA7B,cACE,WAAM,EAAKjvC,EAAW1pC,UAAtB,GAZY,OAcd,GAAqC,EAAjC,EAAK+4E,EAAqB9vH,OAAa,EAAK+vH,GAC9C,IAA8B,EAAA9hG,EAAA,EAAK6hG,EAAqB1hH,UAA1B,YAA9B,kBACkB+mG,GADlB,SAfY,UAzsBlB5hF,EAAA,6BAAAwkG,IAysBQA,GAAAtkG,U1I6iCN,Q0I7iCMskG,GAAA,UAAAtkG,QAtBNskG,GAAAtkG,U1ImkCA,c0InkCAskG,GAAA,UAAAtkG,GCjsBoD+4C,EAA1CusD,GAA0C7sD,IAgGpD6sD,GAAA,UAAAlmG,QAAAA,WACEh0B,KAAKuoG,EAAY,KAIjBvoG,KAAK+yH,EAAat6F,QAElBz4B,KAAKi4D,EAAcjkC,UACnBh0B,KAAKi4D,EAAgB,KAErBoV,GAAAmB,UAAMx6C,QAAAA,KAAAA,KAVE,EAcVkmG,GAAA,YAAAvnB,SAAK0jB,EAAmB8D,GAEtB,IAAIn6H,KAAK8yH,GAAwC,GAArBuD,EAA5B,CAMAr2H,KAAK8yH,GAAkB,EAEvB,IAAqB,MAAA1jG,EAAApvB,KAAKuoG,ETdd0O,GScS,YAArB,kBAA+C,CAA/C,UACE,IAAMmjB,EAAmBp6H,KAAK+yH,EAAarjH,IAAIqhC,GACzC0kF,EACMY,EAARtlF,EA4CeH,UACKyiF,GA7CZgD,EAARtlF,EAgDeF,QACKyiF,GAGFH,GAhDtBnzH,KAAK+yH,EAAanuH,IAAImsC,EAAQ0kF,GAE9B,IAAwBzC,IAAAA,EAAA5jG,EAAL4jG,KAAKA,GAAAA,EAAAA,EAAAA,QAAxB,8BACWC,IAAUmH,GAAoBC,EAAKnH,IAASuC,GACnD4E,EAAKjH,GAAOriF,EAAQopF,EAXqB,CAR/C,CAFkC,EA8EpCG,IAAAA,GAAmBA,EACnBC,GAAeA,EACfC,GAAkBA,EC7LLC,SAAA,GAAY/hF,EAAK8kC,EAAWlT,GACvC,IAAMowD,EACF3iG,EAKEr7B,EAEAmuE,EAIE4B,EAECzhE,EAKCyhE,EApB0C,OAAAvqC,GAAA,+BAwCpD,IAAMy4F,E/D+WIxhF,I+DlXcV,GApCkCC,G/DsZhDS,G+DjXyB5mC,MAAM,KACXuT,MACKvT,MAAM,KApCzC,OAHMmoH,EA0CuB,GAAzBC,EAAe/7H,OACV,GAGF+7H,EAAe70G,MAAMhP,eA7CxBihB,EAC0B6iG,GAA0BF,IAE/Cz7G,EAAP6kB,OAAO/L,IAEHr7B,EzC6zBIm+H,EyC3zBJhwD,EAAqCmF,GAAY,CAACt3B,GAAM4xB,GAE1D,OACFO,EAAQ/2D,OAAS,OACA,IAAM0pE,EAAU3S,QAAQnuE,EAAMmuE,GAASnI,QAAvC,IAbiC,OAa5C+J,EAAW,IACjB10C,EAAW00C,EAASznD,QAAQ,gBAH1B,aAXgD,OAgBlD,KADOha,EAAAA,EAAAA,K5E2LG8vH,M4EzLP9vH,EAAM4c,M5EiLMklD,M4EhLX9hE,EAAM4c,KAFV,cAImB,OADjBijD,EAAQ/2D,OAAS,MACA,IAAM0pE,EAAU3S,QAAQnuE,EAAMmuE,GAASnI,QAAvC,GApB+B,OAoB1C+J,EAAW,IACjB10C,EAAW00C,EAASznD,QAAQ,gBArBoB,OA2BpD,OAAO/F,EAAP6kB,OAAO/L,EAAWA,EAASjhB,cAAcvE,MAAM,KAAKoQ,QAAU,IA3BV,IAuDxD,IAAAi4G,GAAsD,CACpD,IAAO,YACP,IAAO,YACP,IAAO,YACP,KAAQ,aACR,KAAQ,aACR,IAAO,aACP,GAAM,aACN,IAAO,YACP,IAAO,YACP,IAAO,aACP,KAAQ,aACR,KAAQ,wBACR,IAAO,uBACP,IAAO,8BACP,IAAO,aACP,IAAO,YACP,KAAQ,aACR,IAAO,YACP,IAAO,mBACP,IAAO,WACP,IAAO,WACP,OAAU,WACV,KAAQ,uBACR,IAAO,6BACP,IAAO,aACP,IAAO,aACP,IAAO,aACP,IAAO,YACP,IAAO,gBACP,KAAQ,aACR,KAAQ,cCtFRG,SAAO,GAAgBrnF,EAAKsnF,GAC1B,GAAItnF,EAAIN,UAEN,MAAO,KAET,GAAIM,EAAIP,WAAWv0C,OACjB,OAAO80C,EAAIP,WAAWgL,KAAI,SAACqH,GACzB,OAAwBy1E,GAAgBz1E,EAAQ9R,EADZ,IAEnCp1C,KAAK,IAGV,IAAKo1C,EAAI5C,QACP,OAAO4C,EAAI5C,QAIb,IAAMoqF,EAAgB,GAChBC,EAAOznF,EAAIrB,YAAwC2D,GACnDolF,EAAU1nF,EAAInB,WAAsC0D,GACpDolF,EAAY3nF,EAAIZ,eAAevpC,SACH2sC,IAgClC,OA/BIilF,GACFD,EAAc/8H,KAAK,CAAC,MAElBi9H,GACFF,EAAc/8H,KAAK,CAAC,MAElBk9H,GACFH,EAAc/8H,KAAK,CAAC,MAIT,KADTi0C,EAAQsB,EAAItB,QACG4oF,IACjB5oF,EAAQ4oF,EAAU5oF,OAEhBkpF,EAAU,IACRC,EAA6BC,GAAcppF,MAE/CkpF,GAAY,IAAGC,GAGF,KADXE,EAAU/nF,EAAIvB,kBACG6oF,IACnBS,EAAUT,EAAU7oF,kBAEhBupF,EAA+BF,GAAcC,MAEjDH,GAAY,OAAMI,GAEhBJ,GACFJ,EAAc/8H,KAAK,CAAC,IAAKm9H,IAGpBJ,EAAcS,aAAY,SAAC1vF,EAAK,SAAA7c,EAAA,GACrC,MAAQ,KAD8B1jB,EAAD,+BAAM,cAAU,GAAhB,GAC7B,IAAoBugC,EAApB,KAA4BvgC,EAA5B,GADqD,GAE5DgoC,EAAI5C,QAtD8B,CAgEvC8qF,SAAO,GAAcp9H,GAEnB,IAAMq9H,GADFC,EAAct9H,EAAOsY,eACDD,QAAQ,MAAO,IAClC5E,MAAM,2CAWX,OAVI4pH,EACFC,EAAc,KACe,IAAxBl2G,SAASi2G,EAAI,GAAI,KAAgB3wH,SAAS,IAAIE,MAAM,IAC5B,IAAxBwa,SAASi2G,EAAI,GAAI,KAAgB3wH,SAAS,IAAIE,MAAM,IAC5B,IAAxBwa,SAASi2G,EAAI,GAAI,KAAgB3wH,SAAS,IAAIE,MAAM,GAChD0wH,EAAYrxF,WAAW,MAA6B,EAArBqxF,EAAYl9H,SAGpDk9H,EAAcA,EAAY1wH,MAAM,EAAG,IAE7B0wH,GACN,IAAK,QACL,IAAK,OACL,IAAK,UACH,MAAO,QACT,IAAK,OACL,IAAK,OACL,IAAK,UACH,MAAO,OACT,IAAK,OACL,IAAK,OACL,IAAK,UACH,MAAO,OACT,IAAK,MACL,IAAK,OACL,IAAK,UACH,MAAO,UACJ,SACL,IAAK,OACL,IAAK,UACH,MAAO,SACT,IAAK,UACL,IAAK,OACL,IAAK,UACH,MAAO,UACT,IAAK,OACL,IAAK,OACL,IAAK,UACH,MAAO,OACT,IAAK,QACL,IAAK,OACL,IAAK,UACH,MAAO,QAGX,OAAO,IAjDoB,CAmE7BC,SAAO,GAAiB32E,EAAM41E,GAE5B,IADA,IAAM76H,EAAS,GACG,KAAAivB,EAAiB4sG,GAAiB52E,KAAlC,QAAlB,kBACE,IADF,WACU/R,YAENlzC,EAAOhC,KAAP,MAAAgC,EAAAkxB,EAAgC4qG,GAAiBvoF,EAAIP,WAAYO,SAC5D,CAEL,IAAMwoF,EAAUxoF,EAAInL,QACpB2zF,EAAQ/oF,WAAa,GACrB+oF,EAAQprF,QAA2BmqF,GAAgBvnF,EAAKsnF,GACxD76H,EAAOhC,KAAK+9H,EALP,CAQT,OAAO/7H,CAdgC,CAqBzCg8H,SAAO,GAAiB/2E,GAEtB,IADA,IAAMg3E,EAAa,GACDh3E,GAAAA,EAAAh2B,EAAAg2B,IAAAA,OAAlB,mDACmBg3E,EAAWttE,KACxB,4BAACutE,GAAgB,OAAetoF,GAAML,EAAAA,GAAK2oF,EAA1B,CAAjB,OAEFD,EAAWj+H,KAAKu1C,EAAAA,IAGpB,OAAO0oF,CATqB,CAgB9BE,SAAO,GAAuBC,GAgBf/jH,SAAA,EAACyyB,GAGZ,IAFA,IAAIzyB,EAAO,KACPza,EAAIktC,EAAKrsC,OACNb,GACLya,EAAe,GAAPA,EAAayyB,EAAKpsC,aAAad,GAEzC,OAAQya,IAAS,GAAGtN,UANC,CAfvB,GAAIqxH,EAAS3rF,WAAa2rF,EAAS1rF,QAKjC,OAAO,KAKT,IAAM2rF,EAAS,IAAIC,OACfF,EAAS3rF,UACT2rF,EAAS1rF,QACT0rF,EAASzrF,SAWb0rF,EAAOt8G,GAAK1H,EAAK+jH,EAAS3rF,UAAU1lC,YAChCsN,EAAK+jH,EAAS1rF,QAAQ3lC,YACtBsN,EAAK+jH,EAASzrF,SAOlB0rF,EAAO5qF,UAAY2qF,EAAS3qF,UAC5B4qF,EAAOxrF,cAAgBurF,EAASvrF,cAC5BurF,EAASp7H,OACXq7H,EAAOr7H,KAAOo7H,EAASp7H,MAGzB,IAEEq7H,EAAOE,MAAQH,EAASrrF,SAFtB,CAGF,MAAO6zB,GAAY,CA8BrB,MA5B0B,UAAtBw3D,EAASrrF,WAAyC,UAAhBsrF,EAAOE,QAI3CF,EAAOE,MAAQ,UnEglBOC,emE7kBpBJ,EAASjrF,YAEXkrF,EAAOI,SAAW,KnE4kBIC,emE3kBbN,EAASjrF,cAElBkrF,EAAOI,SAAW,MnEmlBRE,GmE/kBRP,EAAS/qF,qBACXgrF,EAAOO,aAAc,GAGF,MAAjBR,EAAS7qF,OACX8qF,EAAO9qF,KAAO6qF,EAAS7qF,MAGA,MAArB6qF,EAAS9+G,WACX++G,EAAO/+G,SAAW8+G,EAAS9+G,UAGtB++G,CAzE+B,CAgFxCQ,SAAO,GAAuBR,GAC5B,GAAuBllG,MAAnBklG,EAAO3rF,SAAwB2rF,EAAO3rF,QAAU2rF,EAAO5rF,UACzD,OAAO,KAET,IAAM8C,EAAM,IAAeC,GAAI6oF,EAAO5rF,UAAW4rF,EAAO3rF,QACpD2rF,EAAOvxF,MAsCX,OArCAyI,EAAIhC,KAA8B,iBAAhB8qF,EAAO9qF,KAAoB8qF,EAAO9qF,KAAO,KACvD8qF,EAAO5qF,YACT8B,EAAI9B,UACD4qF,EAAO5qF,WAEZ8B,EAAIlC,mBAAqBgrF,EAAOO,YACItrF,GnEgjBxBqrF,EmE9iBZppF,EAAIj2B,SAAsC,iBAApB++G,EAAO/+G,SAC3B++G,EAAO/+G,SAAW,KAChB++G,EAAOxrF,gBACT0C,EAAI1C,cACDwrF,EAAOxrF,eAEZ0C,EAAIvyC,KAAOq7H,EAAOr7H,KAClBuyC,EAAIxC,UAAqDsrF,EAAOE,MACxC,OAApBF,EAAOI,SACTlpF,EAAIpC,YnE0hBkBqrF,cmEzhBO,OAApBH,EAAOI,WAChBlpF,EAAIpC,YnEyhBkBurF,emEvhBpBL,EAAOzrF,SACT2C,EAAI3C,OAAO7wB,GAAKs8G,EAAOzrF,OAAO7wB,GAC9BwzB,EAAI3C,OAAOxW,OAASiiG,EAAOzrF,OAAOksF,MAClCvpF,EAAI3C,OAAOpW,Y/E9LNuiG,E+E+LLxpF,EAAI3C,OAAO3W,cAAgBoiG,EAAOzrF,OAAO3W,cACzCsZ,EAAI3C,OAAO5W,cAAgBqiG,EAAOzrF,OAAO5W,cACzCuZ,EAAI3C,OAAOlW,OACR2hG,EAAOzrF,OAAOlW,OACjB6Y,EAAI3C,OAAOzW,gBAAkBkiG,EAAOzrF,OAAOzW,gBAC3CoZ,EAAI3C,OAAO1W,gBAAkBmiG,EAAOzrF,OAAO1W,gBAC3CqZ,EAAI3C,OAAOtW,oBAAiDG,GAC5D8Y,EAAI3C,OAAOvW,MAAQgiG,EAAOzrF,OAAOvW,MACjCkZ,EAAI3C,OAAOrW,WAAwCE,IAEtC8b,GAAgBhD,GAExBA,CA3C6B,CCpPtCnnC,SAAA,GAAYu7C,EAAOvoC,GAEjBvf,KAAKm9H,EAAa,KAOlB,IAAoB,MAAA/tG,EAAAzqB,MAAM24B,KAAKwqB,EAAMs1E,aAAjB,YAApB,kBACqB,cADrB,WACYnmH,MAAsC,aAAf28C,EAAM38C,OAKvC28C,EAAM32C,KAAO,WAET22C,EAAMr0C,OAASA,IACjBvf,KAAKm9H,EAAavpE,IAIjB5zD,KAAKm9H,IAKRn9H,KAAKm9H,EAAar1E,EAAMu1E,aAAa,YAAa99G,IAEpDvf,KAAKm9H,EAAWlgH,KAAO,QA7BC,UAmLnB,GAAa22C,EAAO0pE,GAOzB,IAAMC,EAAW3pE,EAAM32C,KAGvB22C,EAAM32C,KAFwB,WAAZsgH,EAAwB,UAAY,SAStD,IAAkB,MAAAnuG,EAAAzqB,MAAM24B,KAAKs2B,EAAMxO,OAAjB,YAAlB,+BACak4E,EAAU5pF,IACnBkgB,EAAM4pE,UAAU9pF,GAIpBkgB,EAAM32C,KAAOsgH,CAvBuB,CChMT,eCqB7BhxH,SAAA,GAAYu7C,EAAO21E,EAAgB5rG,GAAS,IAAD,OAGpCliB,SAAS+tH,mBACFhqG,EAAW,uHAMvB1zB,KAAK29H,GAAiB,EAGtB39H,KAAK49H,EAAQ,GAGb59H,KAAK+1E,EAASjuB,EAGd9nD,KAAK69H,EAAkBJ,EAGvBz9H,KAAK89H,EAAe,KAGpB99H,KAAK+9H,ElCrC0BpuH,SAASE,ckCqCeu5B,OACvDppC,KAAK+9H,EAAelsH,UAAUqf,IAAI,wBAGlClxB,KAAK+9H,EAAenjH,MAAMs2B,UAAY,SAGtClxC,KAAK+9H,EAAenjH,MAAMC,QAAU,OACpC7a,KAAK+9H,EAAenjH,MAAMojH,cAAgB,SAC1Ch+H,KAAK+9H,EAAenjH,MAAMqjH,WAAa,SAGvCj+H,KAAK+9H,EAAenjH,MAAMsjH,eAAiB,WAE3Cl+H,KAAK69H,EAAgB/iH,YAAY9a,KAAK+9H,MAEtBlsG,EAAOi8F,sBACL7oC,GACZ,4BACA,iEAQNjlF,KAAKm+H,EAIF15F,IAJkCvD,IAAM,WACpC,EAAK60C,EAAO8E,QACVujD,GAALA,EAF6C,IAI9C35F,GARmB5S,GAAUA,EAAOi8F,qBACpCj8F,EAAOi8F,qBAAuB,KAkBjC9tH,KAAKq+H,EAAkB,IAAI7oG,IAG3Bx1B,KAAKi4D,EAAgB,IAAetjC,EAEpC30B,KAAKi4D,EAAc9jC,EAAOxkB,SAAU,oBAAoB,WACjDyuH,GAALA,GAAwC,EADoB,IAI9Dp+H,KAAKi4D,EAAc9jC,EAAOn0B,KAAK+1E,EAAQ,WAAW,WAC3CqoD,GAALA,GAAwC,EADc,IAUxDp+H,KAAKi4D,EAAc9jC,EAAOn0B,KAAK+1E,EAAQ,UAAU,WAC/C,IAAM1rE,EAA4C,EAAK0rE,EACjDv7C,EAAQnwB,EAAQkiD,WAChBhyB,EAASlwB,EAAQmiD,YAErB,EAAKsxE,EADHtjG,GAASD,EACSC,EAAQD,EAER,IAP+B,IAYvDv6B,KAAK84D,EAAkB,KACnB,mBAAoBvkD,IACtBvU,KAAK84D,EAAkB,IAAIgD,gBAAe,WACnCsiE,GAALA,GAAwC,EADM,IAGhDp+H,KAAK84D,EAAgBkD,QAAQh8D,KAAK+9H,IAIpC/9H,KAAKs+H,EAAkB,IAAI9oG,GA3Gc,CAgP3C+oG,SAAA,GAAAA,EAA6BC,GAC3B,KAAsB,MAAfA,GAAqB,CAC1B,GAAIA,GAAe,EAAKT,EACtB,OAAO,EAETS,EAAcA,EAAYC,aAJA,CAM5B,OAAO,CAPiC,CAiB1CC,SAAA,GAAAA,EAAqBt5E,EAAMu5E,EAAWj6B,EAAak6B,GAmBjD,IAhBA,IAAIC,GAAY,EAQVC,EAAW,GAOXC,EAAU,GACE35E,GAAAA,EAAAh2B,EAAAg2B,IAAAA,QAAlB,kBAAwB,CAAxB,UACEw5E,EAAQzgI,KAAKu1C,GAEb,IAAIsrF,EAAc,EAAKX,EAAgB3uH,IAAIgkC,GACrCurF,EACFvrF,EAAI9C,WAAa8zD,GAAehxD,EAAI7C,QAAU6zD,EAC9Cw6B,EAAUF,EAAcA,EAAYE,GAAU,KAE9CF,IAGFF,EAAS3gI,KAAK6gI,EAAYG,IAGtBH,EAAYI,IACdN,EAAS3gI,KAAK6gI,EAAYI,IAIvBH,IAEHJ,GAAY,EACZ,EAAKR,EAAgBthE,OAAOrpB,GAC5BsrF,EAAc,OAIdC,IACFF,EAAQ5gI,KAAKu1C,GACRsrF,EAMYT,GAALA,EAAkCW,KAE5CL,GAAY,IANPQ,GAALA,EAAgB3rF,EAAKkrF,GAErBM,GADAF,EAAc,EAAKX,EAAgB3uH,IAAIgkC,IACjBwrF,GACtBL,GAAY,IAYY,EAAxBnrF,EAAIP,WAAWv0C,QAAcsgI,GAC1BR,GAALA,EACIhrF,EAAIP,WAAY+rF,EAASx6B,EAAak6B,GAG7BA,EAAQ94G,KAnDD,CAuDxB,GAAI+4G,EAAW,CACb,IAAsBC,GAAAA,EAAA1vG,EAAA0vG,IAAAA,QAAtB,8BAGcL,eACVp0H,EAAQo0H,cAAcnzC,YAAYjhF,GAUtC,IAPA00H,EAAQ5mH,MAAK,SAACra,EAAGkb,GACf,OAAIlb,EAAE8yC,WAAa53B,EAAE43B,UACZ9yC,EAAE8yC,UAAY53B,EAAE43B,UAEhB9yC,EAAE+yC,QAAU73B,EAAE63B,OAJF,IAOLkuF,GAAAA,EAAA3vG,EAAA2vG,IAAAA,QAAlB,mBACQC,EAAc,EAAKX,EAAgB3uH,IAD3C,EAAAgkC,QAGkB0rF,IACVJ,EAAYI,GAAcE,SAASX,IACrCK,EAAYI,GAAc9zC,YAAYqzC,GAExCA,EAAU7jH,YAAYkkH,EAAYI,IAClCJ,EAAYI,GAActkH,YAAYkkH,EAAYG,KAElDR,EAAU7jH,YAAYkkH,EAAYG,GAzBzB,CA1E2C,CA8G5Df,SAAA,GAAAA,EAAgBmB,GACd,GAAK,EAAKxB,EAAV,CAIA,IAAMr5B,EAAc,EAAK3uB,EAAO2uB,YAChC,IAAK,EAAKi5B,QANI,IAAA4B,GAAAA,EAM2B,CAEvC,IAA4B,SAAAnwG,EAAA,EAAKkvG,EAAgB/uH,WAArB,QAA5B,kBACiByiF,GADjB,EAAAotC,OAIeptC,GAAkB,EAAK+rC,GAEtC,EAAKM,EAAgB5lG,QACrB,EAAK6lG,EAAgB7lG,OATkB,CAWrC,EAAKklG,GAUFe,GAALA,EACI,EAAKd,EAAO,EAAKG,EAAgBr5B,EAA4B,GA3BnE,CADmC,CAwKrC26B,SAAA,GAAAA,EAAW3rF,EAAKkrF,GACd,IAAMY,EAA4B,EAAjBZ,EAAQhgI,OACrBlC,EAAO8iI,EAAW,OAAS,MAC3B9rF,EAAIN,YACN12C,EAAO,MAELg3C,EAAIJ,UACN52C,EAAOg3C,EAAIJ,SAGPmsF,GAAeD,GAAoC,EAAxB9rF,EAAIP,WAAWv0C,OAGhD,IAAMugI,ElChjByBxvH,SAASE,ckCgjBYnT,GAMpD,GALY,MAARA,GAoENgjI,SAAAA,EAAkBP,EAAYzrF,EAAKkrF,EAASe,GAI1C,IAAM/kH,EAAQukH,EAAWvkH,MACnBglH,EAAkC,GAAzBlsF,EAAIP,WAAWv0C,OACxB4gI,EAA4B,EAAjBZ,EAAQhgI,OAQzBgc,EAAMilH,WAAa,WAOnB,IAAM50F,EAAOyI,EAAI5C,QAAQj6B,QAAQ,SAAS,SAAC5E,GAEzC,MADyB6tH,IACDC,OAAO9tH,EAAMrT,OAFc,IAkBrD,GAbAgc,EAAMolH,sBAAwBtsF,EAAIV,gBAClCp4B,EAAMqlH,sBAAwBvsF,EAAIX,gBAClCn4B,EAAMw3B,MAAQsB,EAAItB,MAClBx3B,EAAMw2B,UAAYsC,EAAItC,UACtBx2B,EAAMg4B,QAAUc,EAAId,QACpBh4B,EAAMslH,YAAyCC,GAC3CzsF,EAAIjB,YAAaiB,EAAK,EAAKmqF,GAC/BjjH,EAAMwlH,aACyBD,GACvBzsF,EAAIjB,YAAaiB,EAAK,EAAKmqF,GACnCjjH,EAAMi4B,mBAAqBa,EAAIb,mBAC/Bj4B,EAAMq4B,WAAaS,EAAIT,WAEnBS,EAAIxB,gBACNt3B,EAAMs3B,gBAAkB,QAAWwB,EAAIxB,gBAAkB,KACzDt3B,EAAMylH,iBAAmB,YACzBzlH,EAAM0lH,eAAiB,UACvB1lH,EAAM2lH,mBAAqB,SAEvB7sF,EAAIvB,kBACNv3B,EAAMu3B,gBAAkBuB,EAAIvB,iBAQ9Bv3B,EAAM4f,MAAQ,OACd5f,EAAM2f,OAAS,WACV,CAKL,GAAImZ,EAAIP,WAAWv0C,OACjB,IAAA6sC,EAAO0zF,OAEP1zF,ElCrrB2B97B,SAASE,ckCqrBIu5B,QACxC+1F,EAAWrkH,YAAY2wB,GAGrBiI,EAAIzB,SACNxG,EAAK7wB,MAAMq3B,OAASyB,EAAIzB,QAErB0tF,KACGlE,EA0QZ+E,SAAwB5B,EAAS95D,GAC/B,IAAK,IAAI/mE,EAAI6gI,EAAQhgI,OAAS,EAAQ,GAALb,EAAQA,IAAK,CAC5C,IAAMse,EAAMyoD,EAAG85D,EAAQ7gI,IACvB,GAAIse,GAAe,IAARA,EACT,OAAOA,CAHmC,CAM9C,OAAO,IAP4B,CA/UIokH,CAAiB7B,GAqE5B95D,SAAC7mE,GAAQk0C,OAAFl0C,EAAEk0C,eAAAA,KAE/B1G,EAAK7wB,MAAMu3B,gBAAkBspF,EACpBxwF,IAGTQ,EAAK7wB,MAAMu3B,gBAAkB,uBAG7BlH,IACFQ,EAAKM,YAAcd,EA1BhB,CAiCHu0F,IAAaZ,EAAQA,EAAQhgI,OAAS,GAAGy0C,YAC3Cz4B,EAAMC,QAAU,UAEhBD,EAAMC,QAAU,OAChBD,EAAMojH,cAAgB,SACtBpjH,EAAMqjH,WAAa,StEgDfyC,QsE/CAhtF,EAAIxC,WtEkDHyvF,SsEjDDjtF,EAAIxC,WACNt2B,EAAM4f,MAAQ,OACd5f,EAAMqjH,WAAa,StE6ChB2C,SsE5CMltF,EAAIxC,WtE+CZ2vF,OsE9CCntF,EAAIxC,YACNt2B,EAAM4f,MAAQ,OACd5f,EAAMqjH,WAAa,OAInBrjH,EAAMsjH,etEoDF4C,UsErDFptF,EAAI5B,aACiB,atEqDnBivF,UsEpDKrtF,EAAI5B,aACU,SAEA,YAItB8tF,IACHhlH,EAAMomH,OAAS,KAGjBpmH,EAAM+3B,WAAae,EAAIf,WACvB/3B,EAAMy3B,WAAaqB,EAAIrB,WAAWnnC,WAClC0P,EAAM23B,UAAYmB,EAAInB,UACtB33B,EAAM83B,cAAgBgB,EAAIhB,gBACpBV,SAAsCmuF,GACxCzsF,EAAI1B,SAAU0B,EAAK,EAAKmqF,GAoBhB,OADRnsF,EAAOgC,EAAIhC,SAETF,EAAqBkC,EAAIlC,qBAGoBC,KAC/CD,EtE2CQsrF,EsE1CJmE,EAAW,GAEX,EAAKnD,GAAoC,EAApB,EAAKA,IAC5BmD,EAAW,IAGXvvF,EADS,EAAPA,EACK,IAAMA,EAAOuvF,EAAW,IAExBvvF,EAAOuvF,EAAW,KtEkCnBnE,GsE/BNtrF,IACF52B,EAAM6C,SAAW,WACbi2B,EAAIpC,aAA+BC,IACrC32B,EAAM4f,MAAQ,OACVkZ,EAAI9B,WAA2BC,GACjCj3B,EAAMsmH,IAAMxvF,EAAO,ItEqCtByvF,OsEpCYztF,EAAI9B,YACbh3B,EAAMwmH,OAAU,IAAM1vF,EAAQ,MtEadirF,esEXTjpF,EAAIpC,aACb12B,EAAM2f,OAAS,OACXmZ,EAAI9B,WAA2BC,GACjCj3B,EAAMrQ,KAAOmnC,EAAO,ItE8BvByvF,OsE7BYztF,EAAI9B,YACbh3B,EAAMpQ,MAAS,IAAMknC,EAAQ,OAG/B92B,EAAM2f,OAAS,OACXmZ,EAAI9B,WAA2BC,GACjCj3B,EAAMpQ,MAAQknC,EAAO,ItEuBxByvF,OsEtBYztF,EAAI9B,YACbh3B,EAAMrQ,KAAQ,IAAMmnC,EAAQ,QAMpC92B,EAAM+2B,WAAa+B,EAAI/B,aAhOzB0vF,SAA6B3tF,GAEpB,IAAAtC,EAAuCsC,EAAvCtC,UAAWJ,EAA4B0C,EAA5B1C,cAElB,OAFiCE,EAAawC,EAAbxC,UAE7BF,IAAoCC,GAE/BD,EtE6KH0vF,SsExKFxvF,GtE2KGyvF,UsE1KJzvF,GACCE,IAA4BC,ItE0K3BwvF,QsEzKF3vF,GtEiMuBowF,QsEhMtBlwF,EtEwJEmwF,YAaCX,UsEjKH1vF,GtEmKGyvF,UsElKJzvF,GtE2LuBowF,QsE1LtBlwF,GtEkKCyvF,QsEjKF3vF,GACCE,IAA4BC,GtEiJzBmwF,aACCC,QsEzKwB,CAoOGJ,CAA6B3tF,GtE7D1D6tF,asE8DFG,GACF9mH,EAAM+mH,SAAW,OACI,OAAjBjuF,EAAIj2B,WACN7C,EAAM6C,SAAW,WACbi2B,EAAIpC,aAA+BC,IACrC32B,EAAMrQ,KAAOmpC,EAAIj2B,SAAW,IAC5B7C,EAAM4f,MAAQ,QAEd5f,EAAMsmH,IAAMxtF,EAAIj2B,SAAW,MtErE1B+jH,csEwEIE,GACT9mH,EAAM+mH,SAAW,QACI,OAAjBjuF,EAAIj2B,WACN7C,EAAM6C,SAAW,WACbi2B,EAAIpC,aAA+BC,IACrC32B,EAAMpQ,MAAS,IAAMkpC,EAAIj2B,SAAY,IACrC7C,EAAM4f,MAAQ,QAEd5f,EAAMwmH,OAAS1tF,EAAIj2B,SAAW,MAIb,OAAjBi2B,EAAIj2B,UAAqC,IAAhBi2B,EAAIj2B,WAC/B7C,EAAM6C,SAAW,WACbi2B,EAAIpC,aAA+BC,IACrC32B,EAAMrQ,KAAOmpC,EAAIj2B,SAAW,IAC5B7C,EAAM4f,MAAQ,QAEd5f,EAAMsmH,IAAMxtF,EAAIj2B,SAAW,KAKjC7C,EAAMs2B,UAAYwC,EAAIxC,UACtBt2B,EAAMk4B,eAAiBY,EAAIZ,eAAex0C,KAAK,KAC/Csc,EAAM02B,YAAcoC,EAAIpC,YAQlB,gBAAiB3hC,SAASiyH,gBAAgBhnH,OAC5CA,EAAM02B,aAAeoC,EAAIpC,cAI3B12B,EAAMinH,kBAAoBnuF,EAAIpC,aAM5BoC,EAAIvyC,OACFuyC,EAAIpC,aAA+BC,GACrC32B,EAAM4f,MAAQkZ,EAAIvyC,KAAO,IAEzByZ,EAAM2f,OAASmZ,EAAIvyC,KAAO,IA3PwB,CAnE/Cu+H,CAALA,EAAuBP,EAAYzrF,EAAKkrF,EAASa,GAG/CL,EAAgB,KAChB1rF,EAAI3C,QAAU2C,EAAI3C,OAAO7wB,GAA7B,CAhHA,IAAM6wB,EAiHmC2C,EAjHtB3C,OAGb+wF,EA8GYC,EA9GajE,IAAiB,EAAE,EAAI,IAAM,IAI5D,GADMkE,EAAkCjxF,EAtBP7wB,GAAT,IAsBgB6wB,EArB/BvW,MADe,IAsBgBuW,EArBfxW,QAqBewW,EAzBdpW,aAAeC,GAAiB,IAAM,MAGxC,IAsBgBmW,EApB/BzW,gBAFe,IAsBgByW,EApBL1W,iBAoBK0W,EAvB7BtW,qBAAuBG,GAAiB,IAAM,MAkIvCmnG,EA1GTzD,EAAgBvpH,IAAIitH,GAC3B,EAyGgBD,EAzGJzD,EAAgB5uH,IAAIsyH,OADlC,CAIM5C,ElCjdyBzvH,SAASE,ckCideu5B,QAKvD,IAAI64F,EAAalxF,EAAOpW,aAAeC,GAAiB,IAAM,KAC1DsnG,EAAYnxF,EAAOrW,YAAcE,GAAiB,IAAM,KACtDunG,EACFpxF,EAAOtW,qBAAuBG,GAAiB,IAAM,KAEzDwkG,EAAcl/G,GAAK,uBAAyB8hH,EAC5C5C,EAAcvtH,UAAUqf,IAAI,qBAE5BkuG,EAAcxkH,MAAM6C,SAAW,WAE/B,IAAI2kH,EAAerxF,EAAOxW,OACtB8nG,EAActxF,EAAOvW,MlFzYlB0iG,IkF2YHnsF,EAAOpW,cACTynG,EA1ByBE,KA0BVvxF,EAAOxW,OACtB0nG,EAAa,KlF7YR/E,IkF+YHnsF,EAAOrW,aACT2nG,EAActxF,EAAOvW,MAAQsnG,EAC7BI,EAAY,KAEd9C,EAAcxkH,MAAM2f,OAAS6nG,EAAeH,EAC5C7C,EAAcxkH,MAAM4f,MAAQ6nG,EAAcH,ElFpZnChF,IkFsZHnsF,EAAOtW,qBAELymG,EAAMnwF,EAAO1W,gBAAkB,GAAK,IAEpC9vB,EAAOwmC,EAAOzW,iBAqEFynG,EAtESjE,IAAiB,EAAE,EAAI,IAAM,KACJ,IAElDoD,GAAOnwF,EAAO5W,cAAgBioG,EAAe,IAC7C73H,GAAQwmC,EAAO3W,cAAgBioG,EAAc,IAC7CjD,EAAcxkH,MAAMsmH,IAAMA,EAAM,IAChC9B,EAAcxkH,MAAMrQ,KAAOA,EAAO,MAElC60H,EAAcxkH,MAAMsmH,IAAMnwF,EAAO1W,gBAC/B0W,EAAO5W,cAAgBioG,EAAe,IAAMD,EAC9C/C,EAAcxkH,MAAMrQ,KAAOwmC,EAAOzW,gBAChCyW,EAAO3W,cAAgBioG,EAAc,IAAMF,GlFta3CI,IkFwaAxxF,EAAOpW,alFxaP4nG,IkFyaAxxF,EAAOrW,YlFzaP6nG,IkF0aAxxF,EAAOtW,sBAOH+nG,EAAW5/H,KAAK4G,IAAI,EAAG5G,KAAKQ,IAAI,KAFxBwiB,SAASw5G,EAAcxkH,MAAM4f,MAAMpvB,MAAM,GAAI,GAAI,KAAO,GAFzDwa,SAASw5G,EAAcxkH,MAAMrQ,KAAKa,MAAM,GAAI,GAAI,KAAO,IAKpEg0H,EAAcxkH,MAAMsmH,IAFJt+H,KAAK4G,IAAI,EAAG5G,KAAKQ,IAAI,KAFtBwiB,SAASw5G,EAAcxkH,MAAM2f,OAAOnvB,MAAM,GAAI,GAAI,KAAO,GAF5Dwa,SAASw5G,EAAcxkH,MAAMsmH,IAAI91H,MAAM,GAAI,GAAI,KAAO,IAM9B,IACpCg0H,EAAcxkH,MAAMrQ,KAAOi4H,EAAW,KAGxCpD,EAAcxkH,MAAMC,QAAU,OAC9BukH,EAAcxkH,MAAMojH,cAAgB,SACpCoB,EAAcxkH,MAAMqjH,WAAa,SAG/BmB,EAAcxkH,MAAMsjH,etEkQd4C,UsE5NiCptF,EAvCjC5B,aAC+B,atEmQ/BivF,UsE7NiCrtF,EArC1B5B,aACwB,SAEA,WAkCrBiwF,EA/BbzD,EAAgB15H,IAAIo9H,EAAU5C,GACnC,EAAOA,CA5EP,CAyGA,CAIIF,EAAUC,EACVM,KAIFP,ElC/jB6BvvH,SAASE,ckC+jBKu5B,SACnCv3B,UAAUqf,IAAI,sBACtBguG,EAAQtkH,MAAMu3B,gBAAkBuB,EAAIvB,gBACpC+sF,EAAQtkH,MAAM+2B,WAAa,SAC3BwtF,EAAWrkH,YAAYokH,IAGzB,EAAKb,EAAgBz5H,IAAI8uC,EAAK,CAACyrF,GAAAA,EAAYD,GAAAA,EAASE,GAAAA,GAnC7B,CAmXzBqD,SAAO,GAAoBC,EAAahvF,EAAK+pF,GAtB3C,OAFM5vF,EAA+Cx6B,IAAjCmP,OAAO,0BAA0BnP,KA0BFqvH,IApB5C,CACL7+H,MAAOmkC,OAAO6F,EAAQ,IACtB80F,KAAM90F,EAAQ,IALP,KAyBT,IAFI+0F,EAGF,OAAOF,EAGI,IAAA7+H,EANT++H,EAMS/+H,MAEb,OARI++H,EAMGD,MAGL,IAAK,IACH,OACI9+H,EAAQ,IAAU45H,EAoBavjE,aApBlBxmB,EAsBiBH,eAAeE,KAAQ,KArB3D,IAAK,IACH,OACgBgqF,EAiBmBvjE,aAjB/Br2D,EAAO6vC,EAmBuBH,eAAeE,KAAQ,KAlB3D,QACE,OAAOivF,EAlBgD,CCp5B7Dn2H,SAAA,GAAYspE,EAAiBhkD,GAE3B7xB,KAAK81E,EAAmBD,EAGxB71E,KAAKm4D,EAAUtmC,EAOf7xB,KAAK6iI,OAAM17H,EAKXnH,KAAK8iI,GAAmB,EAKxB9iI,KAAK+iI,GAAa,EAUlB/iI,KAAKgjI,EALLhjI,KAAKijI,GAAW,CA3BmB,CAuVrCC,SAAA,GAAAA,GAIE,OAHK,EAAK/qE,EAAQwS,YAChB,EAAKxS,EAAQwS,UAAYp2D,EAAO0kG,OAAOkqB,cAElC,CACLC,EAojB2BC,EAnjB3BC,GAAI,EAAKT,EACTU,IAAK,EAAKprE,EAAQwS,UAClB64D,IAAK,EAAKrrE,EAAQmuD,UAClBmd,IAAK,EAAK3tD,EAAiBzjD,uBAAyB,IAT1C,CAqBd6/E,SAAA,GAAAA,EAAOrnC,EAAS3nE,GAAAA,OAAA,IAAAA,EAAO,CAAC,EAARA,EAAW,IAAAgrH,OAAA,IAAAA,EAAa,EAAK/1D,EAAQ+1D,WAA1BA,EACzB,GAAK,EAAK/1D,EAAQxC,QAAlB,CAKAnqD,OAAOsN,OAAO5V,EAAWggI,GAALA,IAEpBhgI,EAAKwgI,GAAK,EAAK5tD,EAAiB8kC,KAEhC,IAAM+oB,EAAUzgI,EAAK0gI,KAAyCC,IAC1D3gI,EAAK0gI,KAAyCE,GAclD,GAZI,EAAKb,GAAYU,IACnBzgI,EAAK6gI,IAAK,EACV7gI,EAAK8gI,IAAK,EACV,EAAKf,GAAW,GAGH,MAAX//H,EAAK8gI,KACP9gI,EAAK8gI,GAAK,EAAKjB,GAGXvkH,EA6BRylH,SAAAA,EAAY/gI,GACV,IAAMirH,EAAc,EAAKh2D,EAAQg2D,YAEjC,OAAKA,EAAYvvH,OAIV4M,OAAOU,KAAKhJ,GAAM8oC,QAAO,SAACC,EAAK3kC,GAIpC,OAHI6mH,EAAY5kH,SAASjC,KACvB2kC,EAAI3kC,GAAOpE,EAAKoE,IAEX2kC,CAJqC,GAK3C,CAAC,GARK/oC,CAJO,CA7BI+gI,CAALA,EAAiB/gI,GAE5BgrH,EACIlpG,EAsYVk/G,SAAiBhhI,GAYf,IAXA,IAAMgJ,EAAOV,OAAOU,KAAKhJ,GACnB8hB,EAAU,CAAC,EACXm/G,EAAc,CAAC,SAAU,UAAW,UAAW,UAC/CC,EAAe,CAAC,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,GAC7BC,EAAY,CAChBC,GAAI,EAAGlnG,EAAG,EAAGwmG,GAAI,EAAGW,GAAI,EACxBC,GAAI,EAAGC,GAAI,EAAGhB,IAAK,EAAGiB,IAAK,EAAGC,IAAK,EAAGX,GAAI,EAC1CR,IAAK,EAAGE,GAAI,EAAGJ,GAAI,EAAGC,IAAK,EAAGqB,GAAI,EAAGxB,EAAG,EACxCW,GAAI,EAAGc,IAAK,GAGI34H,GAAAA,EAAAkjB,EAAAljB,IAAAA,QAAlB,kBAGEk4H,EADiC,MAAlBC,EAFjB,WAE2CA,EAAU/8H,GAAO,GACtCA,GAAOpE,EAAKoE,GAGlC,IAASvJ,EAAI,EAAGA,EAAIqmI,EAAaxlI,OAAQb,KACjC8F,EAA+BihI,GAAUV,EAAarmI,OAE1DinB,EAAS,QAAOm/G,EAAYpmI,IAAQ8F,GAIxC,OAAOmhB,CAzBc,CAtYoB+/G,CAAUvmH,GAC5ChT,OAAOU,KAAK8Y,GAASpmB,QAI1B4M,OAAOsN,OAAO+xD,EAAQ7lD,QAASA,OAC1B,CACL,IAAMb,EAoasB2gH,GApaiBtmH,GACxC2F,IAIL0mD,EAAQR,KAAOQ,EAAQR,KAAKlsB,KAAI,SAACzF,GAC/B,OAA8BssF,GAAiBtsF,EAAKv0B,EADb,IANpC,CA/BP,CAD+D,CAgLjE8gH,SAAA,GAAAA,EAA0BvoI,GAGxB,KAFMwoI,EAAS,EAAKpvD,EAAiBoV,KAAkBxuF,IAE3CkC,OACV,OAAO,EAGT,IAAM6K,EAAQ,EAAKqsE,EAAiBqvD,iBAGpC,OAFMn/H,EAAQk/H,EAAOhiH,MAAK,SAACsoF,GAAM,OAAAA,EAAE/hG,OAASA,GAAS+hG,EAAE9hG,KAAOD,CAA7B,KAMJ,KAArBzD,EAAM0D,IAAMD,GAHX,CAXqB,CAwKhC4Z,SAAO,GAAUngB,GAKGkiI,SAAA,EAACvhI,GAAU,OAAyB,IAAzBwhI,EAAUxhI,EAAQ,IAAlB,CADXwhI,SAAA,EAACxhI,GAAU,OAAAjB,KAAKmpD,MAAMloD,EAAX,CAgB7B,IAnBA,IACiBA,EADX6jC,EAAU,GAMV49F,EAAa,CACjBhB,GAAIe,EACJjoG,EAAGioG,EACHb,GAAIY,EACJX,GAAIW,EACJ3B,IAAK2B,EACLV,IAPgBa,SAAC1hI,GAAU,OAAA6e,mBAAmB7e,EAAnB,EAQ3BghI,IAAKO,EACLb,GAAIc,GAGAn5H,EAAOV,OAAOU,KAAKhJ,GAAQ,CAAC,GAAGiV,OAEnBjM,GAAAA,EAAAkjB,EAAAljB,IAAAA,QAAlB,kBAAwB,CACtB,IAAIrI,EAAQX,EADd,WAIE,GAtBeW,EAsBFA,IArBZmkC,OAAOtW,MAAM7tB,IAAmB,MAATA,GAA2B,KAAVA,IAA0B,IAAVA,GA0B7C,MAARyD,GAAyB,IAAVzD,GAKR,MAAPyD,GAAyB,IAAVzD,GAAnB,CAKA,IAOI1D,EAPEqlI,EAAYF,EAAWh+H,GACzBk+H,IACF3hI,EAAQ2hI,EAAU3hI,IAQlB1D,EADW,WAHPzD,SAAcmH,IAGa,OAARyD,GAAwB,OAARA,GAAwB,OAARA,EAC3CA,EAAF,IAAS60B,KAAKC,UAAUv4B,GAChB,YAATnH,EACA4K,EACS,WAAT5K,EACG4K,EAAF,IAASzD,EAAM6c,YAEbpZ,EAAF,IAASzD,EAGrB6jC,EAAQvpC,KAAKgC,EAxBb,CAdsB,CAyCxB,OAAOunC,EAAQppC,KAAK,IA7DC,CAuHvBmnI,SAAO,GAAiB/sF,EAAKv0B,GAK3B,OAJKA,GAIDu0B,EAAInvC,SAAS,YACRmvC,IAGH7gC,EAAM,IAAS4gC,GAAIC,IpElWfW,EoEmWSz0C,IAAI,OAAQuf,GACxBtM,EAAI3M,WAXuB,EHpxBpC0mB,EAAAA,GAAAA,WAAAA,UAAAA,WAAmB,EAQnB8zG,EAAA3xG,OAAAA,SAAOtqB,EAAOC,GAEZ,QAAK1J,KAAKm9H,IASqBwI,GAAa3lI,KAAKm9H,GAL3ByI,SAAClyF,GAErB,OADeA,EAAI9C,UAAYlnC,GAAOgqC,EAAI7C,QAAUpnC,CADvB,KAOxB,EAbU,IAoBnBtM,OAAAA,SAAOioD,GACL,IAAMygF,EAAiC5J,GAAiB72E,GAGlD0gF,EAAgB,GAChBC,EAAkB/lI,KAAKm9H,EAAW/3E,KAChBzgD,MAAM24B,KAAKt9B,KAAKm9H,EAAW/3E,MAAQ,GAE3D,IAAoBygF,IAAAA,GAAAA,EAAAz2G,EAAAy2G,IAAAA,OAApB,oDAKsBE,EAAgBj3E,KAAK,4BAACk3E,GACxC,OAAIA,EAAep1F,WAAaq1F,EAAAA,GAAMr1F,WAClCo1F,EAAen1F,SAAWo1F,EAAAA,GAAMp1F,SAChCm1F,EAAe/6F,MAAQg7F,EAAAA,GAAMn1F,OAH0B,CAApB,OASrBm1F,EAAAA,GAAMn1F,UAClB4C,EACewyF,GAAuBD,EAAAA,MAE1CH,EAAc3nI,KAAKu1C,GAkCzB,IAAkByyF,GAAAA,EAAA/2G,EA1BZ+2G,EAAaL,EAAc16H,QAAQ+M,MAAK,SAACra,EAAGkb,GAChD,OAAIlb,EAAE8yC,WAAa53B,EAAE43B,UACZ9yC,EAAE8yC,UAAY53B,EAAE43B,UACd9yC,EAAE+yC,SAAW73B,EAAE63B,QACjB/yC,EAAE+yC,QAAU73B,EAAE43B,UAYjB,SAAU6rF,OAAO5/H,UAEZipI,EAAcviI,QAAQyV,GAAK8sH,EAAcviI,QAAQzF,GAGjDgoI,EAAcviI,QAAQzF,GAAKgoI,EAAcviI,QAAQyV,EArBN,MA0BtCmtH,QAAlB,kBACEnmI,KAAKm9H,EAAWiJ,OADlB,EAAA1yF,MA5DW,EAqEbgyF,EAAAxtF,QAAAA,WAWE,OAVIl4C,KAAKm9H,IAEwBwI,GAAa3lI,KAAKm9H,GADhCkJ,WAAS,YAK1BrmI,KAAKm9H,EAAWlgH,KAAO,YAGzBjd,KAAKm9H,EAAa,KACXz3E,QAAQ7J,SAXP,EAkBV6pF,EAAAxoB,cAAAA,WACE,MAA+B,WAAxBl9G,KAAKm9H,EAAWlgH,IADT,EAQhByoH,EAAAY,kBAAAA,SAAkB5rB,GAChB16G,KAAKm9H,EAAWlgH,KAAOy9F,EAAK,UAAY,QADpB,EAQtBgrB,EAAAa,gBAAAA,WAA2B,EA7K7B7xG,EAAA,iCAAA8xG,IA6KEA,GAAA5xG,U9IulDA,gB8IvlDA4xG,GAAA,UAAA5xG,gBARA4xG,GAAA5xG,U9I+lDA,kB8I/lDA4xG,GAAA,UAAA5xG,kBARA4xG,GAAA5xG,U9IumDA,c8IvmDA4xG,GAAA,UAAA5xG,cAlBA4xG,GAAA5xG,U9IynDA,Q8IznDA4xG,GAAA,UAAA5xG,QArEA4xG,GAAA5xG,U9I8rDA,O8I9rDA4xG,GAAA,UAAA5xG,OApBA4xG,GAAA5xG,U9IktDA,O8IltDA4xG,GAAA,UAAA5xG,UARAA,U9I0tDA,U8I1tDA4xG,GAAA,UAAA5xG,WC7CAhD,EAAAA,GAAAA,WAAAA,UAAAA,WAAmB,EAOnB60G,EAAA1yG,OAAAA,WAAoB,EAOpB0yG,EAAAtpI,OAAAA,WAAc,EAOdspI,EAAAvuF,QAAAA,WAAW,EAOXuuF,EAAAvpB,cAAAA,WACE,OAAO,CADO,EAQhBupB,EAAAH,kBAAAA,WAAuB,EAOvBG,EAAAF,gBAAAA,WAA2B,EAhD7B7xG,EAAA,+BAAAgyG,IAgDEA,GAAA9xG,U/I4tDA,gB+I5tDA8xG,GAAA,UAAA9xG,gBAPA8xG,GAAA9xG,U/ImuDA,kB+InuDA8xG,GAAA,UAAA9xG,kBARA8xG,GAAA9xG,U/I2uDA,c+I3uDA8xG,GAAA,UAAA9xG,cAPA8xG,GAAA9xG,U/IkvDA,Q+IlvDA8xG,GAAA,UAAA9xG,QAPA8xG,GAAA9xG,U/IyvDA,O+IzvDA8xG,GAAA,UAAA9xG,UAPAA,U/IgwDA,O+IhwDA8xG,GAAA,UAAA9xG,OAPA8xG,GAAA9xG,U/IuwDA,U+IvwDA8xG,GAAA,UAAA9xG,WCmIAhD,EAAAA,GAAAA,WAAAA,UAAAA,SAAUC,GACJ7xB,KAAKm+H,GACPn+H,KAAKm+H,EAAe15F,GAAU5S,EAAOi8F,qBAFvB,EAWlB6Y,EAAAxpI,OAAAA,SAAOioD,GAKL,IADA,IAAMwhF,EAAW,UAAAv1G,EAAIrxB,KAAK49H,IACR,KAAAxuG,EAAiB4sG,GAAiB52E,KAAlC,OAAlB,mDAKsBwhF,EAAS93E,KACzB,4BAAC+3E,GAAc,OAAe9yF,GAAM8yF,EAAWnzF,EAAAA,GAAhC,CAAf,OAEF1zC,KAAK49H,EAAMz/H,KAAKu1C,EAAAA,IAIf0qF,GAALA,KAjBW,IAyBblmF,QAAAA,WAEE,OAAKl4C,KAAK+9H,GAKV/9H,KAAK69H,EAAgBvyC,YAAYtrF,KAAK+9H,GACtC/9H,KAAK+9H,EAAiB,KAEtB/9H,KAAK29H,GAAiB,EACtB39H,KAAK49H,EAAQ,GACT59H,KAAKm+H,GACPn+H,KAAKm+H,EAAel6F,OAGtBjkC,KAAKq+H,EAAgB5lG,QAGjBz4B,KAAKi4D,IACPj4D,KAAKi4D,EAAcjkC,UACnBh0B,KAAKi4D,EAAgB,MAGnBj4D,KAAK84D,IACP94D,KAAK84D,EAAgBa,aACrB35D,KAAK84D,EAAkB,MAGlBpT,QAAQ7J,WA1BN6J,QAAQ7J,SAHT,EAqCV8qF,EAAA5yG,OAAAA,SAAOtqB,EAAOC,GAEZ,IAAK1J,KAAK+9H,EACR,OAAO,EAIT,IAAM+I,EAAa9mI,KAAK49H,EAAMh/H,OAS9B,OARAoB,KAAK49H,EAAQ59H,KAAK49H,EAAM7qG,QACpB,SAAC2gB,GAAQ,OAAAA,EAAI9C,UAAYnnC,GAASiqC,EAAI7C,SAAWnnC,CAAxC,IAKR00H,GAALA,KADoB0I,EAAa9mI,KAAK49H,EAAMh/H,SAGrC,CAhBU,EAwBnB+nI,EAAAzpB,cAAAA,WACE,OAAOl9G,KAAK29H,CADE,IAQhB2I,kBAAAA,SAAkB5rB,GAChB16G,KAAK29H,EAAiBjjB,EACjB0jB,GAALA,MAAwC,EAFpB,EAStBuI,EAAAJ,gBAAAA,SAAgBthI,GACVA,GAAwB,OAAZA,EACdjF,KAAK+9H,EAAe7tF,aAAa,OAAQjrC,GAEzCjF,KAAK+9H,EAAe7tF,aAAa,OAAQ,GAJnB,EA5O5Bxb,EAAA,6BAAAqyG,IA4OEA,GAAAnyG,UhJkhDA,gBgJlhDAmyG,GAAA,UAAAnyG,mBATAA,UhJ2hDA,kBgJ3hDAmyG,GAAA,UAAAnyG,kBARAmyG,GAAAnyG,UhJmiDA,cgJniDAmyG,GAAA,UAAAnyG,cAxBAmyG,GAAAnyG,UhJ2jDA,OgJ3jDAmyG,GAAA,UAAAnyG,OArCAmyG,GAAAnyG,UhJgmDA,QgJhmDAmyG,GAAA,UAAAnyG,QAzBAmyG,GAAAnyG,UhJynDA,OgJznDAmyG,GAAA,UAAAnyG,OAXAmyG,GAAAnyG,UhJooDA,UgJpoDAmyG,GAAA,UAAAnyG,UEtIFF,EAAA,8BAA6BsyG,WAAA,IDkD3BC,GAAA,UAAAr1G,UAAAA,SAAUC,GACR7xB,KAAKm4D,EAAUtmC,CADC,EAg0BlBq1G,IACAzlF,GAAOA,IACPD,GAAOA,IACP2lF,GAAOA,KAGPC,GAAYA,KAoBZntC,GAAMA,IACNotC,GAAkBA,KAClBntC,GAAKA,IACLotC,GAAiBA,KE14BjB/6H,SAAA,GAAYslB,GAEV7xB,KAAKm4D,EAAUtmC,EAMf7xB,KAAKunI,EAAiB,IARJ,CAkMpBC,SAAA,GAAqB3jI,GAGnB,OAAKA,GAIuB,UAAxBA,EAAMiT,gBAIN,UAAUQ,KAAKzT,GACV+hB,SAAS/hB,EAAO,IAGlBA,EAAMgT,QAAQ,QAAS,IAfJ,CFosB9B6d,EAAA,yCAAyC+yG,CACvCxtC,KAAM,GACNotC,GAAkB,GAClBntC,IAAK,GACLotC,GAAiB,GACjBI,GAAQA,IACR5tC,MAAOA,OE33BPloE,EAAAA,GAAAA,WAAAA,UAAAA,SAAUC,GACR7xB,KAAKm4D,EAAUtmC,CADC,EA8ClB81G,EAAAjuE,GAAAA,WAEE,OAAK15D,KAAKm4D,EAAQxC,SAAY31D,KAAKm4D,EAAQk2D,8BACtCruH,KAAKunI,GAAmBvnI,KAAKunI,EAAexyH,IAAI6yH,IAGQ,IAAhC5nI,KAAKunI,EAAe73H,IAAIk4H,IAF5C,IAJK,EAgBhBD,EAAAE,GAAAA,WAEE,OAAK7nI,KAAKm4D,EAAQxC,SAAY31D,KAAKunI,GAC9BvnI,KAAKunI,EAAexyH,IAAI+yH,IAGgC,IAAhC9nI,KAAKunI,EAAe73H,IAAIo4H,IAF5C,IAJc,EAgBzBH,EAAAI,GAAAA,WAEE,OAAK/nI,KAAKm4D,EAAQxC,SAAY31D,KAAKunI,GAC9BvnI,KAAKunI,EAAexyH,IAAIizH,IAGAhoI,KAAKunI,EAAe73H,IAAIs4H,IAF5C,IAJQ,EAgBnBL,EAAAM,GAAAA,WAEE,OAAKjoI,KAAKm4D,EAAQxC,SAAY31D,KAAKunI,GAC9BvnI,KAAKunI,EAAexyH,IAAImzH,IAGAloI,KAAKunI,EAAe73H,IAAIw4H,IAF5C,IAJQ,IAgBnB71G,qBAAAA,SAAqBC,GACnB,IAAM61G,EAAsBnoI,KAAK6nI,KACjC,IAAKM,EACH,OAAO71G,EAET,IAAM81G,EAAiBpoI,KAAKm4D,EAAQm2D,+BACpC,OAAqB,EAAjB8Z,GAAwC,GAAlBA,EAChB91G,GAAmB,EAAI81G,GAC1BD,EAAsBC,EAEtB91G,CAV6B,EAnIxCoC,EAAA,yBAAA2zG,IAmIEA,GAAAzzG,UnJsoDA,qBmJtoDAyzG,GAAA,UAAAzzG,qBAhBAyzG,GAAAzzG,UnJspDA,iBmJtpDAyzG,GAAA,UAAAzzG,GAhBAyzG,GAAAzzG,UnJsqDA,iBmJtqDAyzG,GAAA,UAAAzzG,GAhBAyzG,GAAAzzG,UnJsrDA,uBmJtrDAyzG,GAAA,UAAAzzG,MAhBAA,UnJssDA,cmJtsDAyzG,GAAA,UAAAzzG,GA0KA0zG,IAAAA,GAAsBA,MAGtBC,GAAuBA,KAKvBC,GAAgBA,KAChBC,GAAiBA,MCvPjBl8H,SAAA,KAEEvM,KAAK0oI,EAAqB,KAG1B1oI,KAAK2oI,EAAc,EALP,CAaRC,SAAA,GAAAA,EAAQC,GAAa,OAAD3mG,GAAA,sBAExB,OAFwB,EAEfwmG,EACP,IAAM,IAAIhjF,SAAQ,SAAC7J,GAAY,OAHT,EAGc8sF,EAAYxqI,KAAK09C,EAAtB,IAA/B,GADF,OAFwB,EAKnB6sF,EAAqBG,EALF,Q1D8iB1Bt8H,SAAA,GAAYsvD,EAAc4hE,EAAuBqL,GAAvBrL,OAAA,IAAAA,EAAiB,KAAjBA,EACxBz0D,GAAA,WADmE,WAInEhpE,KAAK+oI,EAAkCC,GAGvChpI,KAAK+1E,EAAS,KAGd/1E,KAAK69H,GAAkBJ,EAWvBz9H,KAAK29H,IAAiB,EAMtB39H,KAAKipI,GAAsB,IAAet0G,EAM1C30B,KAAKkpI,GAAsB,IAAev0G,EAM1C30B,KAAKmpI,EAAoB,IAAex0G,EAMxC30B,KAAKopI,GAAyB,IAAez0G,EAM7C30B,KAAKqpI,GAAyB,IAAe10G,EAY7C30B,KAAKspI,EAHLtpI,KAAKupI,EAHLvpI,KAAK4hF,EAHL5hF,KAAK8vH,EAAoB,KAiBzB9vH,KAAKwpI,GAAe,EAGpBxpI,KAAKypI,GAAS,IAAeC,GAoE7B1pI,KAAK2oG,GAHL3oG,KAAK6vH,GAHL7vH,KAAK4vH,EAHL5vH,KAAKq5G,EAHLr5G,KAAKwwH,GAHLxwH,KAAKkkD,EAHLlkD,KAAK2pI,EAHL3pI,KAAKmxH,GAHLnxH,KAAK66F,EAJL76F,KAAK4pI,GALL5pI,KAAKm5D,GAHLn5D,KAAK6pI,EAHL7pI,KAAK0wH,GAHL1wH,KAAK8pI,EAHL9pI,KAAK+pI,GANL/pI,KAAKgqI,EATLhqI,KAAKiqI,GAAqB,KA+D1BjqI,KAAKkqI,IAAe,EASpBlqI,KAAK+wH,GANL/wH,KAAK8wH,EAAc,KAanB9wH,KAAKmqI,GAAwB,IAG7BnqI,KAAKoqI,GAAsC,GAG3CpqI,KAAK+zG,EAAqBQ,IAG1Bv0G,KAAKm4D,EAAekyE,GAALA,MAGfrqI,KAAKsqI,EAAwB,KAG7BtqI,KAAKuqI,IAAqB,EAG1BvqI,KAAKwqI,GAAwB,KAU7BxqI,KAAK2hF,GAAY,CAACnnD,MAAOlD,IAAUiD,OAAQjD,KAG3Ct3B,KAAKowH,GAAoB,IAAgBqa,GACrCzqI,KAAKm4D,EAASn4D,KAAK2hF,GAAW,MAGlC3hF,KAAK0qI,GAA0B,GAG/B1qI,KAAKqxH,EAAS,KAGdrxH,KAAKgwH,GACD,IAAgB5yD,GACZp9D,KAAKm4D,EAAQ80D,uBACbjtH,KAAKm4D,EAAQi1D,qBACbptH,KAAKm4D,EAAQm1D,2BACbttH,KAAKm4D,EAAQo1D,uBACbvtH,KAAKm4D,EAAQw1D,mBACb3tH,KAAKm4D,EAAQq1D,qBACbxtH,KAAKm4D,EAAQ+0D,oBACbltH,KAAKm4D,EAAQs1D,oBACbztH,KAAKm4D,EAAQv5B,YAAYs+B,uBACP,IAG1Bl9D,KAAK2qI,GAAuB3qI,KAAKm4D,EAAQg1D,sBAGzCntH,KAAK4qI,GAAmB5qI,KAAKm4D,EAAQk1D,kBAGrCrtH,KAAK6qI,GAAqB7qI,KAAKm4D,EAAQu1D,iBAGvC1tH,KAAK8qI,GAAmB,GAEpBhC,GACFA,EAAmB9oI,MAKrBA,KAAK6pI,EA01FPkB,SAAAA,GAaE,OAAO,IAAe9D,GAXEpxD,CACtBxjD,qBAAsBA,WAAM,OAHlB,EAGuBy+F,EAHvB,EAIHA,EAAYz+F,uBAAyBkiF,GADhB,EAE5BrpB,GAAiBA,WAAM,OALb,EAKkBA,IAAL,EACvBi6C,eAAgBA,WAAM,OANZ,EAMiBpvD,EANjB,EAM+BA,EAAO2uB,YAAc,CAAxC,EACtBkW,GAAiBA,WAAM,OAPb,EAOkBA,IAAL,EACvBowB,GAAqBA,WAAM,OARjB,EAQsBA,IAAL,EAC3BC,GAAkBA,WAAM,OATd,EASmBA,IAAL,EACxBn/B,EAAQA,WAAM,OAVJ,EAUSA,GAAL,GAGmC,EAAK3zC,EAAQ61D,KAbpD,CA11Fa+c,CAALA,WAEf5xE,GA82FE,IAAekvE,GA92FF6C,KA82FmB/yE,EAAQi2D,MA52F/CpuH,KAAK8vH,EAAyBqb,GAALA,MACzBnrI,KAAK8vH,EAAkBjiD,GAAa7tE,KAAKm4D,EAAQgrB,UAAUrV,WAC3D9tE,KAAK8vH,EAAkB9hD,GAAchuE,KAAKm4D,EAAQgrB,UAAUlV,YAC5DjuE,KAAK8vH,ES1rBAhmD,ET2rBD9pE,KAAKm4D,EAAQgrB,UAAU9W,0BAS3BrsE,KAAKorI,GAHLprI,KAAKqrI,GAHLrrI,KAAKsrI,EAAa,KASlBtrI,KAAKurI,IAAiC,EAGtCvrI,KAAKwrI,GAA4B,IAAetqG,IAAM,WAAa,OAADgB,GAAA,4BACvDmpG,GAEP,IAH8D,EAGnDnqD,GAHmD,EAIrDkqD,IAAwD,GADjE,GAFF,OADgE,OAK9D,IAL8D,EAKnDjtD,KALmD,EAKzCktD,IAArB,IAL8D,EAMpDE,GANoD,EASvDH,GAA0B37B,QAT6B,EAOvD27B,GAA0B3lC,OAP6B,EAWzD4lC,GAAuB,KAXkC,EAYzDE,IAAiC,OAZwB,YAgBjDE,KACfzrI,KAAKsrI,EAA0BG,KAC/BzrI,KAAKsrI,EAAW15G,UAAU5xB,KAAKm4D,EAAQw2D,KAIvC3uH,KAAKqpI,GAAuBl1G,EACxBn0B,KAAKsrI,EAAY,8BAA8B,SAAOh4G,GAKlD,IAAMo4G,SALkDxpG,GAAA,sBAE1D,OAF0D,EACrDspG,GAA0BvnG,OAD2B,EAEhDonG,GAAV,QAF0D,EAGnDD,GAHmD,EAGlBr1D,EAHkB,EAInDw1D,GAJmD,EAIbx1D,EAAOkpB,MAC5CysC,EACJp4G,EAAA,mBAA0B,EACA,IAP4B,EAOjBq4G,IACd,EAAMD,GADH,IAP4B,EAOnDL,GAAuB,IAP4B,WAchErrI,KAAKqpI,GAAuBl1G,EACxBn0B,KAAKsrI,EAAY,+BAA+B,SAACh4G,GAE/C,GADMp0B,EAA+Bo0B,EAAA,QAAgB,EACjD,EAAK+3G,GAAT,CACOA,IAAAA,EAALA,EAAKA,GgDlqBX,EAAK1iC,GhDkqBgDzpG,IgDjqBvD,EAAKypG,GhDiqBkDzpG,EADjD,CAGA,EAAKssI,GAA0BnqG,EAAU,GALY,IAU3DrhC,KAAKqpI,GAAuBl1G,EACxBn0B,KAAKsrI,EAAY,+BAA+B,WAAc,OAADppG,GAAA,YAC3D,OAD2D,EACjD6zC,IADiD,EAClCq1D,GAAzB,OAGE,IAJyD,EAI9ClqD,GAJ8C,EAIlCkqD,IACU,GADjC,EAJyD,QAYnEprI,KAAKipI,GAAoB90G,EAAO5f,EAAQ,UAAU,WAC3Cq3H,GAALA,GACA,EAAKC,IAFiD,IAMxD7rI,KAAK8rI,GACD,IAAe5qG,IAAM,WA4lMzB,IAjBA,IAAMq4B,EAAM7rB,KAAK6rB,MAAQ,IACrBwyE,GAAmB,EAenBC,GAAkB,EACeriF,EAAAv6B,EA5lMN68G,EA4lMJ5yB,EAAU1vD,UAAAA,EAAAA,EAAAA,QAArC,kBACkC,GADlC,WACcsM,mBAAyBrO,EAAQqO,mBAAqBsD,IAChE3R,EAAQqO,kBAAoB,EAC5B81E,GAAmB,GAIW,EAA5BnkF,EAAQqO,oBACV+1E,GAAkB,GAIlBA,GAxmM2BC,EAymMxBH,GAAoB7nG,OAGvB8nG,GAEGG,GA9mMwBD,GA+mMN,OAAyB9kI,GAC/B,GAA6B,EAhnMjB,IAG/BnH,KAAKmsI,GAAkB,KAKnBtwE,IACcopB,GACZ,yBACA,+FAEJjlF,KAAKkhF,GAAOrlB,GAA2C,IAIzD77D,KAAKw6F,EAAiB,IArV6C,CA8WrE4xC,SAAA,GAAAA,GACwB,MAAlB,EAAKvxC,IACQrB,GAAf,EAAKqB,GACL,EAAKA,EAAU7mE,UACf,EAAK6mE,EAAY,KAJJ,CA4BjBwxC,SAAO,GAAWnrI,EAAMgC,GACtB,OAAO,IAAeihE,GAAUjjE,EAAMgC,EADV,CAoM9BuvH,SAAA,GAAAA,EAAsB1jF,GACpB,EAAKk+B,cAA2Bq/D,GMv+BnBplE,iBNy+BetiE,IAAP4wB,KAAO5wB,IAAI,QAASmqC,IAHX,CAsH1Bw9F,SAAA,GAAAA,EAA6BC,GACjC,IAAMC,EAD4C,OAAAvqG,GAAA,2BAC5CuqG,IAD4C,EACvBjD,GAC3B,IAAkBZ,GAFgC,EAEvCa,GAAe+C,GAA1B,IACIC,GAH8C,EAG1BjD,IAH0B,EAI3CC,GAAOz1G,UACZ,EAAA8P,QAAO,IAET,EAAAA,QAAO,EAP2C,aA0kB9C,GAAA4oG,EAAahB,GACjB,IAAIiB,EAGE/7F,EAJqC,OAA1B86F,OAAA,IAAAA,GAAAA,EAA0BxpG,GAAA,sBAE3C,OADIyqG,EAAiB,KADsB,EAElCtzB,GAFkC,EAEhBn1D,GAFgB,EAEAssE,IAFA,EAGlCZ,GACHh/E,EAJqC,EAIpBmlC,EAAO2uB,YAJa,EAKhCoH,MAAa4/B,IACpB96F,EAAY,MAGG,IAAWg8F,GATaA,EAAA,EAUhChd,EACLh/E,EAXqC,EAYhCi/E,IACgB,GACD,GACO,GANd,IAPnB,OAF2C,WASzC8c,EAAiB,IATwB,EAgBpCjC,GAAwBvsI,KAAKwuI,GAhBO,EAiBhCzoF,GAjBgC,EAiBhBA,EAAQ0X,iBAjBQ,EAkBlC1X,EAAQ0X,gBAAoC,MAEnD+wE,IAAAA,EAAAA,EACyBzoF,EArBgBA,EAqBhBA,EAAcssE,EArBEA,EAqBFA,GgDr/CzC,EAAKnX,EhDg+CsCA,EAqBhCA,EgDp/CX,EAAKn1D,EAAUvnD,EACf,EAAK6zH,EAAiBt4F,EhDo/CpBy0G,EAAAA,EAC2B5b,EAvBcA,EAuBdA,GgDxgD7B,EAAKD,EhDi/CsCA,EAuBhCA,EgDvgDX,EAAKC,EAAqBjE,EhDwgDxB6f,EgDjgDG3c,EhDy+CsC,EAyBhCA,GACT2c,EAAeljI,QA1B0B,EA6BpC4vG,EAAY,KA7BwB,EA8BpCn1D,EAAU,KA9B0B,EA+BpCssE,GAAiB,KA/BmB,EAkCpCM,EAAc,KAlCsB,EAmCpCC,GAAqB,IAnCe,CAqC3C,OAAO,EAAPjtF,OAAO6oG,EArCoC,aAoGvC,GAAAE,EAAcld,EAAU/+E,EAAW7Y,EAAU+0G,GAMjD,IAKIplB,EACAoK,EAgBAib,EA5BmE,OAAtBD,OAAA,IAAAA,GAAAA,EAAsB5qG,GAAA,0BAGlEnK,EAAL,OACa,IAAWi1G,GAJ+CA,EAIhCrd,GAA1B,IAJ0D,SAIrE53F,EAAW,KAyUfk1G,SAAAA,EAA8Bl1G,GAM5B,IAAcm1G,KACZ,OAAO,EAGT,GAAIn1G,EAAU,CAOZ,GAH8D,KADzC,EAAKg+C,GAAmBj3C,MACRC,YAAYhH,GAI/C,OAAO,EAOT,IiBppEuBm1G,QjBipEoBn1G,KiB7oEF4sD,IjBipEvC,OAAO,EAUT,GAAcwoD,GAAUp1G,GAEtB,OAAaoI,OACR,EAAKg4B,EAAQ+qB,IAAIlK,QAAQ,kBAC1B,EAAK7gB,EAAQ+qB,IAAIlK,QAAQ,sBACpB,EAAK7gB,EAAQgrB,UAAUgnC,wBAIzB,EAAKhyD,EAAQgrB,UAAUknC,eAnCpB,CA6Cd,OAAO,CAvD+B,CAvUN4iB,CANuCA,EAMTl1G,GAGrD,EAAP+L,OAAO,OAEL4jF,GAAe,EACfoK,GAAsB,EACtBgb,IAbmE,EAc5Dhc,GAd4D,EAe5DC,IAf4D,EAejC54D,EAAQ20D,aAO1CgF,GAAsB,GAtB6C,EAwB5D/7C,GAAmC,UAxByB,EAwB7CA,EAAOhnC,WAC7B24E,GAAe,IAGfqlB,EAA6BH,GA5BsCA,EA6BnEjd,EAAU/+E,EAAW7Y,GAAY,MACX+0G,EAAcplB,EAAcoK,GAYpDib,EAXGD,EAWqBC,EAAsB18E,MAAK,SAACs8E,GAElD,OADAA,EgDh0DCn0D,GAAa,EhDi0DPm0D,CAF8D,IAL/CI,EAAsB18E,MAAK,SAACs8E,GAElD,OAvCmE,EAsC9DjC,GAAwBvsI,KAAKwuI,GAC3BA,CAF8D,IAUzE,EAAA7oG,OAAOipG,IA/CgE,IA4DnEH,SAAA,GAAAA,EAAoBjd,EAAU/+E,EAAW7Y,EAC3C45F,EAAsBjK,EAAsBoK,GAG9C,IAAI6a,EAEE96G,EAKAu7G,EAQAC,EAQAC,EAaE5rG,EAKF2uF,EAEAE,EAuFAI,EAkBFS,EAsBAmc,EACEC,EA0CAzd,EAxNoE,OAAxE4B,OAAA,IAAAA,GAAAA,EAAsBjK,OAAA,IAAAA,GAAAA,EAAsBoK,OAAA,IAAAA,GAAAA,EAA4B5vF,GAAA,2BAGtEyqG,EAAiB,KAEf96G,EAAgC2+B,GALoC,EAKnB2H,GACnDuvD,IACF71F,EAAOo3B,SAASy+D,cAAe,GAG3B0lB,EAAoBA,WAExB,OAAIT,EgD1vCM5a,GhD0vC8B4a,EgD/vC9B1jE,EhDgwCD,KAEF0jE,CALuB,EAQ1BU,EAAYA,WAChB,OAAID,IACKA,IAAoB1wD,mBApB2C,EAsB1DvkB,CAJQ,EAQlBm1E,EAAYA,SAACpsI,EAAM2C,GACnBupI,IACFT,EAAe/6G,UAAU1wB,EAAM2C,GA5BuC,EA8BjE+tB,UAAU1wB,EAAM2C,EAJU,EAUPyzB,KApC8C,EAoCjEqqD,GAAUnnD,OACUlD,KArC6C,EAqCjEqqD,GAAUpnD,QArCuD,EAsChE49B,EAAQ22D,yBAFlB,OAIM,IAA0B2e,KAA1B,KAxCoE,SAuClE/rG,EACF,IAxCoE,EAyCnEigD,GAAUnnD,MAAQkH,EAAclH,MAzCmC,EA0CnEmnD,GAAUpnD,OAASmH,EAAcnH,QAElC81F,EAAmB,IAAgBoa,GACrC54G,EA7CsE,EA6CzD8vD,GAAW,MACtB4uC,EAA0B,CAC9BR,iBA/CwE,EA+CjDD,EACvB/8F,OAAQA,SAAOk2B,GACb,IAIQz0B,EALkB,OAAA0N,GAAA,0BACJ,IAAuB2/C,GAAjBwuC,EAAgCpnE,GAAtC,GADI,OACJ,KAIdz0B,EAAqB83G,GM72DpBrkE,iBN+2DP,IAAMviB,QAAQ7J,UAAd,IALF,QAME8wF,EAAe1/D,cAAcz4C,QARL,UAW5Bk5G,iCAAkCA,SAACzkF,GACjC,gBAo4IN0kF,EAAkC1kF,GAQhC,IADA,IAAM2kF,EAAoB,IAAIp7G,IACI+2B,EAAAn6B,EAAT65B,EAASM,aAAAA,EAAAA,EAAAA,QAAlC,kBV5pMkDxE,wBU4pMlD,WACiBhtB,UVvpMiCitB,uBUwpM5CyE,EAAW1xB,UAGb61G,EAAkB18G,IAAIu4B,EAAWoL,YAGrC,IAA+BlL,GAAAA,EAAAv6B,EAAT65B,EAASU,WAAAA,QAA/B,kBAEE,IADM7B,EADR,EAAAF,MACwBE,QACTA,EAAMg4C,eACjB,IAAiB,MAAA1wE,EAAA04B,EAAMg4C,eAAe5zF,QAArB,YAAjB,SAAA9E,EAAA,OACE,GADF,WACOwmI,EAAkB74H,IAAImL,GAAK,CAC9B,IAAM6X,EAAW7X,EAAGuqB,WAAW,MVzqMWsa,sBAMAC,sBUuqMpCgQ,EAAe,IAAgB6qD,GAC/B56G,EAAW6iD,EAAMg4C,eAAepwF,IAAIwQ,GACpCupC,EAAa,CACjBvpC,GAAI,EAAKiqH,KACTt1E,WAAY30C,EACZ4qC,QAAS,KACT8yC,mBAAoBA,WAAM,OAAAl4C,QAAQ7J,SAAR,EAC1BmZ,aAAAA,EACAj9B,SAAAA,EACA4nB,OAAQ,GACR1oC,KXrtMI42H,UWstMJh/E,WAAW,EACX0D,SAAU,GACVh1B,OAAQ,IAAI/K,IACZvtB,SAAAA,EACA2vD,iBAAkB3vD,EAClBsa,MAAO,KACP7iB,KAAkB0jD,GAClB4T,SAAS,EACTqD,eAAgB,KAChBypC,iBAAkB,KAClB71C,MAAOnD,EAAMmD,MACbx7C,QAAQ,EACRs7C,cAAe,KACfC,kBAAmB,KACnBkH,cAAc,EACd4tC,eAAgB,KAChBnrC,qBAAsB,KACtBupC,UAAU,EACVhzC,eAAe,EACfsG,cAAe,IAAIh/B,IAAI,CAAsB6vB,GACzCtqB,EAAU,MACdutE,qBAAqB,GAEvBr8C,EAASM,YAAYprD,KAAKsrD,GAC1BmkF,EAAkB18G,IAAIhR,EAxCQ,CApBI,CAp4I1BytH,CA5D0DA,EA4DxB1kF,EADA,EAOhD6kF,sBAAuBA,SAAC/8F,GgD7wDd2/E,IAAAA,EhD8wDRic,EgD9wDQjc,ERxMa,GACzB,IAA4BzZ,IAAAA,EAAA7nF,EA7CN2+G,EA6CM92B,GAAAA,EAAAA,EAAAA,QAA5B,kBAQE,IARF,WAG6B1V,axCk9DoBxwD,EwCl9DEwwD,aAC/Br3B,EAAShqD,IxCi9DoB6wB,EwCj9DP7wB,IACtBgqD,EAASt5B,WxCg9DoBG,EwCh9DAH,WAC7Bs5B,EAASr5B,SxC+8DoBE,EwC/8DFF,QAE9B,CACb,EAAOq5B,EAAP,OADa,CAKjB,EAAO,IAdkB,CAxCJ,MAJC8jE,IAKpB,EAAK/2B,EAAS/lF,IxC6/DiC6f,GwC5/DzCvc,EAAQ,IAAe2vC,GAAU,YAAa,IAAI3uC,IAAI,CAC1D,CAAC,SxC2/D4Cub,MwCz/D/C,EAAKk8B,cAAcz4C,GxCw/DgB,EAInC4qD,QAASA,SAAC5qD,GAAU,OAAAm4G,EAAe1/D,cAAcz4C,EAA7B,EACpBiwC,QAASA,SAACz5D,GAAU,OAAA2hI,EAAeloE,QAAQz5D,EAAvB,EACpBijI,iBAAkBA,WAA4BvqB,OAAtB2pB,IAAYlqD,UAAUugC,cAAAA,EAC9CwqB,qBAAsBA,WAA4B9jB,OAAtBijB,IAAYlqD,UAAUinC,kBAAAA,EAClD+jB,qBAAsBA,WACpBb,EAAU,4BAA4B,EADZ,EAG5B9V,eAAgBA,WA7EwD,EA8E7DmS,GAAoBgD,EgD5zCrB5a,GhD8uC8D,EA+E/D4X,EAAiBnS,gBAFJ,EAKtB4W,WAAYA,SAACzrF,GAEX,IAAM2K,EAAYq/E,EgD/vDV/qD,EhDgwDF+B,EAAiBr2B,EAAYA,ENvvC3BS,EMuvCoD,KAExD41B,GAAkBr2B,ENjvCd0oB,GMkvCW4N,GAAjBysC,EAAiC1sC,EAAe5mD,UAAW4lB,EANvC,EASxB0rF,kBAAmBA,WAEjB,IAAMnrI,GAAmB0B,IAAP4wB,KAAO5wB,IAAI,SA7FyC,EA6F1BknG,KAC5C6gC,EAAe1/D,cAA2Bq/D,GM36D/B1lE,kBN26DqD1jE,IAEjDgvH,GAAfya,GAAkC,GAAO,WAhG6B,EAiG3DrB,GAjG2D,EAkG7DA,EAAW+C,kBAlGkD,EAkG3BviC,IAFI,GALxB,EAWzBz5E,qBAAsBA,WAAM,OAtG4C,EAsGvCy+F,EAAYz+F,sBAAjB,EAC5BsuE,WAAYA,SAACjkG,EAAMk0C,EAAWC,EAASthC,GACrC,IAAI++H,EAAe5xI,EACP,8BAARA,IACF4xI,EAAe,0BAETC,EAAe,CACnB39F,UAAAA,EACAC,QAAAA,EACAthC,OAAAA,GA/GkE,EAiH3D+7H,IAjH2D,EAmH7DA,EAAWkD,0BAnHkD,IAoHnDz4D,EAAQw4D,GAGLh/H,GAAAA,EAAA6f,EAAA7f,IAAAA,OAAtB,2DACsB,MAAhBuhC,EAAAA,GAAQ5vC,MAGGgxH,GAAfya,GAAkC,EAAO,8BAClC8B,GA5H6DA,EA6H9D79F,EAAWC,EAASy9F,EAAcx9F,EAAAA,GAFO,CAAN,KApBK,EA0BlDuzE,cAAeA,SAAC1hE,GAAW,OAjI6C,EAiIxC0hE,cAC5B1hE,EAlIoE,EAkIvDwV,EAAQgrB,UAAU8gC,gBADR,EAE3ByqB,QAASA,SAACxtI,EAAM2W,GAAQ,OAnIgD,EAmI3C62H,QAAQxtI,EAAM2W,EAAnB,IAEpB84G,EACF,IAAgBwF,IAAe,WAAM,OAtIiC,EAsI5B/e,IAAL,KAC1BhkF,iBAAiB,aAAa,SAACoB,GAE5C,IAAMuc,EAASvc,EAAA,OACVm6G,GA1ImEA,EM3zDvD7mE,sBNs8DuC/2B,EACpD47F,GAEWza,GAAfya,GAAkC,GAAO,WA9I+B,EA+I7DrB,IA/I6D,EAgJ/DA,EAAWsD,oBAAoB79F,GAhJgC,EAkJ/Du6F,EAAWuD,2BAlJoD,IAmJrD94D,EAAQhlC,GALoB,GAPO,IAgBpDqgF,EAAkB,KAClBv/F,EAAOsxD,UAAUmnC,yBACnB8G,EAAkB,IAAgBgF,IAC9B,WAAM,OA1J8D,EA0JzDlrC,IAAL,KAEM93D,iBAAiB,iBAAiB,SAACoB,GAK5Cs6G,GAjKiEA,EA8J7Ct6G,EAAAu6G,QAERv6G,EAAA/W,SAJ0C,IAQ7D2zG,EAAgBh+F,iBAAiB,oBAAoB,SAACoB,GAK/Cs6G,GAzKiEA,EAsK7Ct6G,EAAAu6G,QAERv6G,EAAA/W,UAEY,EANiC,KAS9D8vH,GAAa,EACXC,EAAqB,CACzBhwD,GA/KwE,EA+KxDsyC,EAChBrrD,QAASA,SAACnxC,GAAM,OAAAq5G,EAAeloE,QAAQnxC,EAAvB,EAChB8jD,GAAaA,SAACj5B,GACG+zE,GAAfya,GAAkC,GAAM,WACpBxuF,IAAAA,EAAAA,EAmjLlB3pB,EAAqB83G,GMvjPX9lE,oBNi1D0DwoE,EAwuLrE/hE,cAAcz4C,GAEnB,IAAI+I,EAAS/xB,OAAOU,KAAK43E,GAUJ,GAAjBvmD,EAAO3+B,QAA4B,IAAb2+B,EAAO,KAC/BA,EAAS,CAAC,MACVumD,EAAe,CAAC,KAAMA,EAAa,MAM/BC,EAAkC,GAAjBxmD,EAAO3+B,QAA4B,MAAb2+B,EAAO,GASpD,IAAIkmD,GAAgB,EAKpB,GAAIlmD,EAAO3+B,OACT,IAAqC+qD,IAAAA,GAAAA,EAAAv6B,EA3wLmC4/G,EA2wL7C31B,EAAU1vD,WAAAA,QAArC,kBAA+C,CPl7LjD,IAAMgE,EAAU,IOk7Ld,WPh7LU9F,OACV8F,EAAQxvD,KOg7LmDypD,EPh7LtCC,OOg7LsCD,EP96LjDE,OACV6F,EAAQxvD,KO66LmDypD,EP76LtCE,OO+6LnB,IAAqB6F,IAAAA,GAAAA,EAAAv+B,EP56LlBu+B,IO46LkBA,QAArB,kBAA8B,CAA9B,cAKE,GAJM+1B,EAAkB97B,EAAQoO,mBAI5BrT,EAAOplB,OAAOp8B,KAAM,CACtBymD,EAAQoO,oBAAqB,EAE7B,IAA2Bz4B,IAAAA,GAAAA,EAAAnO,EAAPuzB,EAAOplB,SAAAA,QAA3B,8BACQ6mD,EAAYN,EAAaC,EAAiB,KAAO1mD,KAvxLS2xG,EAwxL1CptD,ENxtOlBrJ,KMytOF3wB,EAAQoO,mBAAqBpO,EAAQoO,sBAC/BouB,IAAcC,GAAmB96E,SAAS66E,GAP9B,CAYpBV,GAAmB97B,EAAQoO,qBAC7BytB,GAAgB,EAlBU,CAHe,CA2B7CA,IACGwrD,GAvyLmED,IAwyL3CE,GAxyL2CF,MA8yLpEG,EA9yLoEH,EA8yL9CrF,E4C5+OhB12B,K5C6+OWk8B,EAAen5E,oBAE/Bk2E,GAjzLmE8C,EAkLxB,GAD1B,EAKtBh3D,oBAAqBA,SAAC93D,EAAI63D,GACxB,IAAMvjD,EAAqB83G,GM3gEdjmE,qBN6gEbsmE,EAAe1/D,cAAcz4C,IACvB73B,EAASgwI,EgDt5DPzoF,IhDu5DMvnD,EAAOq7E,qBACnBr7E,EAAOq7E,oBAAoB93D,EAAI63D,EANM,EASzCqH,QAASA,SAAC9rD,GACRq5G,EAAe1/D,cAAc35C,GMxhEjB4yC,oBNyhER5yC,EAAE52B,MACF6wI,IACFA,GAAa,EAEPpvH,EADMuvB,KAAK6rB,MAAQ,IACLozE,EgDj+Dd1c,IhD4xD8Dmf,EAsMjD/d,GAAUsb,EAAerT,YsCnhE7C1lB,EtCohEkBz1F,EAvMmD,EA+M3D08E,GACQrB,GAhNmD,EAgN7DqB,GAjBK,GAyBZk1B,EAAwBob,GAxN4CA,EAwNrBiC,GAC9BhjE,GAzNmD,EAyNrE0lD,EAAkCC,GAkBvC4c,EAAiB,IAAgBzT,GAC7BvJ,EAAU53F,EAAU6Y,EAZA,CACtB/e,OAAAA,EACA0+F,GAAAA,EACAI,GAAAA,EACAS,GAAAA,EACAjB,GATsBA,WACtB,OA7NwE,EA6N5DA,GAAgBqd,EADA,EAU5Bnd,GAAAA,EACAN,iBAAAA,EACA4B,GAAAA,EACAG,GAAAA,IAIF,EAAAhuF,OAAO6oG,GA7OmE,IAwPtEK,SAAA,GAAAA,EAAerd,GAInB,IAAMrlD,EACFvyC,EALyB,OAAAmK,GAAA,2BAIvBooC,EAJuB,EAIJnS,EAAQlP,SAASwhB,gBAC3B,IAAgC4kE,GAC3C1f,EANyB,EAMVG,EAAmBxlD,GADvB,KAEC,0BAFZvyC,EAAW,MAEgDoI,OAC7DpI,EAAW,iCAEb,EAAA+L,OAAO/L,GAVsB,IAqF/Bu3G,SAAA,GAAAA,GAKE,IAAMC,EAAuB,EAAKp3E,EAAQ41D,mBACtCwhB,IAAyB,EAAKC,KAGlC,EAAKh1C,EAAiB+0C,IAClB,EAAK/0C,EAAe5oE,UACtB,EAAK4oE,EAAe5oE,UAAU,EAAKumC,EAAQmiC,eAE3BrV,GACZ,8BACA,oDAEN,EAAKuqD,GAAmBD,EACxB,EAAK/0C,EAAe8rC,kBAAkB,EAAK3I,IAlBtB,CA2BjB8R,SAAA,GAAAA,GAqBJ,IAAM/zB,EAaA,EAAC1c,EAlCiC,OAAA98D,GAAA,sBAuCxC,OA3BKuwF,GAZmCA,EAYb,gBAZa,EAenC18C,EAAO+mB,gBAAgB,OACb9K,GAhByB,EAgBFjc,GAEjCu5D,GAlBmCA,GAqBlC5zB,EAywCRg0B,SAAwB7zE,EAAcy+B,EAAezkB,EACjD0kB,GACF,OAAO,IAAgBo1C,GACnB9zE,EACAy+B,EACAzkB,EACA0kB,EALQ,CA1wCmBm1C,CArBS,EAsB/B35D,EAtB+B,EAuB/BykB,EACL,CACEqI,GAAcA,WAAM,OAzBc,EAyBT9lE,WAAL,EACpB4jE,WAAYA,SAACjrF,EAAUxW,EAAQ2xC,GAu3BrC,IAAqBn7B,IAAAA,GAAAA,EAAA0Z,EAt3BsB1Z,IAs3BtBA,QAArB,SAAAtO,EAAA,OACE,IADF,WACalE,MAAkC,iBAAnBsD,EAAO2vC,SAAwB3vC,EAAO8lF,OAAQ,CACtE,IAAM7iF,EAAQjD,EAAO2vC,QAx3B4Bj3C,EAy3B7CwK,EAz3BqDmnC,EA23BrDnnC,GAAOD,EAAQC,IACjBA,EAAMD,GAGR,IAA2B6iF,IAAAA,EAAAl9D,EAAP5oB,EAAO8lF,QAAAA,EAAAA,EAAAA,QAA3B,kBAEOmiD,GA55B6BmB,EA45BNnmI,EAAOC,EAHhB4kI,UACrB,EAAA3iD,OA15BoCikD,EA+5B3BtE,GA/5B2BsE,EAg6B7BtE,EAAWuE,mBAAmBrpI,EAAQiD,EAdyB,CAx3BzB,EAG3C21E,QAASA,SAAC5qD,GAAU,OA7Bc,EA6BTy4C,cAAcz4C,EAAnB,EACpB6sE,GAAkBA,WA9BgByuC,EAu3J/B5rF,GAv3J+B4rF,EAu3Jf5rF,EAAQlgC,QAv3JO8rH,EAw3JjC5rF,EAAQlgC,QA11Je,GA9BU,EAgC/B62E,GACT6gB,EAAkB9pF,UAjCsB,EAiCPumC,EAAQv5B,aACnC,EAlCkC,EAkCAu5B,EAAQlP,SAAzC+1C,EAAA,EAAAA,yBACP0c,E0B9aKt3D,G1B8ayC46C,EAI9C,IAAM0c,E0Bj4DMzgB,E1Bi4DZ,GAvCwC,EA0CnCsuC,EAAqB7tB,EA1Cc,QAoD1Cq0B,SAAA,GAAAA,EAAwBl0E,EAAcm0E,GACTC,SAAA,IAAM,OAAKC,GADeA,EACpB,CAEjC,EAAK/G,EAAkBh1G,EAAO0nC,EAAc,UAAWo0E,GACvD,EAAK9G,EAAkBh1G,EAAO0nC,EAAc,QAASo0E,GACrD,EAAK9G,EAAkBh1G,EAAO0nC,EAAc,QAASo0E,GACrD,EAAK9G,EAAkBh1G,EAAO0nC,EAAc,cAJvBs0E,WAytIrB,IAAM79B,EA3tI+C89B,EA2tIhCr6D,EAAOtb,aAUb,GAAX63C,IAruIiD89B,EAyuI5CpG,GAzuI4CoG,EA4uI9CpG,EAAoBplI,IAAI0tG,GAGzB99E,EAAqB83G,GMj9MjBnlE,cNkuE2CipE,EAivIhDnjE,cAAcz4C,GA/uIQ,IAKvBqnC,EAAaulB,SACf,EAAK+nD,EAAkBh1G,EAAO0nC,EAAaulB,OAAQ,WAC/C,WAAM,OAAK6tD,GAToCA,EASzC,IACV,EAAK9F,EAAkBh1G,EAAO0nC,EAAaulB,OAAQ,cAC/C,WAAM,OAAK6tD,GAXoCA,EAWzC,IACV,EAAK9F,EAAkBh1G,EAAO0nC,EAAaulB,OAAQ,cAC/C,WAAa,OAADl/C,GAAA,sBACV,OAd6C,EAcpCynG,GACwB,gBAA7B9tE,EAAaulB,OAAO9rE,MACtB,IAA4BymG,GAhBe,EAgBhC4tB,GAAX,GAFF,OAIKsF,GAlBwCA,GAanC,YAQdpzE,EAAaw0E,cACf,EAAKlH,EAAkBh1G,EAAO0nC,EAAaw0E,YAAa,YACpD,WAAM,OAAKpB,GAvBoCA,EAuBzC,IACV,EAAK9F,EAAkBh1G,EAAO0nC,EAAaw0E,YAAa,eACpD,WAAM,OAAKpB,GAzBoCA,EAyBzC,IACV,EAAK9F,EAAkBh1G,EAAO0nC,EAAaw0E,YAAa,UACpD,WAAM,OAAKpB,GA3BoCA,EA2BzC,KAGRpzE,EAAauhE,aACf,EAAK+L,EAAkBh1G,EACnB0nC,EAAauhE,WAAY,YAAY,SAAC9pG,GAEpC,GAD8CA,EAC/BsgC,MAKb,OAJMA,EAFsCtgC,EAEnBsgC,MAIjBA,EAAM38C,MACZ,IAAK,YA8tBnBq5H,SAAAA,EAA6B18E,GAC3B,GAAkB,YAAdA,EAAM38C,KAAV,CAKA28C,EAAM32C,KAAO,SACb,EAAKksH,EAAkBh1G,EAAOy/B,EAAO,aAAa,WAChD,GAAIA,EAAM28E,WACR,IAAwBA,IAAAA,EAAAnhH,EAANwkC,EAAM28E,YAAAA,EAAAA,EAAAA,QAAxB,4BACO9B,GAVuBA,EAUA/6F,EAAI9C,UAAW8C,EAAI7C,QAC3C6C,EAAIh3C,KAAMg3C,EAAI7vC,OAXU,EAanBynI,GAbmB,EAcrBA,EAAWkF,oBAAoB98F,EAAI7vC,OAI9C,GAAI+vD,EAAMxO,KAAM,CAERqrF,EAAgB,GAEtB,IAAwBrrF,IAAAA,GAAAA,EAAAh2B,EAANwkC,EAAMxO,OAAAA,OAAxB,MAAAh+C,EAAA,mBAAAA,EAAA,cAAAA,EAAA,MACkB,2BAAZssC,EAAAA,GAAIh3C,MAAsD,MAAjBg3C,EAAAA,GAAI9C,YAC3C29F,EAAekC,EAAcvtH,KAAK,4BAACnlB,GACrC,OAAOA,EAAE6yC,WAAa8C,EAAAA,GAAI9C,WAAa7yC,EAAE8yC,SAAW6C,EAAAA,GAAI7C,OADb,CAAP,MAGjC09F,IACHA,EAA4D,CAC1D39F,UAAW8C,EAAAA,GAAI9C,UACfC,QAAS6C,EAAAA,GAAI7C,QACbthC,OAAQ,IAEVkhI,EAActyI,KAAKowI,IAErBA,EAAah/H,OAAOpR,KAAKu1C,EAAAA,GAAI7vC,QAGjC,IAA2B4sI,GAAAA,EAAArhH,EAAAqhH,IAAAA,QAA3B,8BAC2ClhI,OAAOu/C,MAAK,SAACjrD,GACpD,MAAoB,eAAbA,EAAMyD,KAAqC,gBAAbzD,EAAMyD,GADmB,KAvCpC,EA6CnBgkI,IAIPiD,EAAah/H,OAAOpR,KAAK,CACvBmJ,IAAK,MACLoZ,YAAa,GACbxd,KAN0C,GAA1BqrI,EAAa39F,WA9CL,EA8C6Bk7D,IAMtB,OAAb,WAClB/zE,SAAU,KACV8zD,YAAa,OAtDW,EAyDrBy/C,EAAWkD,0BAzDU,IA0DXz4D,EAAQw4D,GAxCb,CAXsC,IA4DxD,IAAMmC,EAKHnsG,IAL0BrD,IAAM,WAEjC,IADA,IAAMk8F,EAitEVuT,SAAAA,GAGE,OAAOhsI,MAAM24B,KAAK,EAAKy4C,EAAOqnD,YACzBrqG,QAAO,SAAC3T,GAAM,MAAU,YAAVA,EAAEnI,IAAF,GAJA,CAjtEO05H,CApEQA,GAqERvT,GAAAA,EAAAhuG,EAAAguG,IAAAA,QAAxB,oBAAA7nE,MACYt4C,KAAO,QAHoB,IAKtCsnB,KAAUlD,EAAU,MAElBypG,GAAiB3sI,MAAK,WACzBuyI,EAAMzsG,MADyB,GAzEjC,CADkC,CA7tBfqsG,CAzCkCA,EAyCL18E,GAClC,MAEF,IAAK,YAk2BnBg9E,SAAAA,EAAuBh9E,GACrB,GAAKA,GAAuB,YAAdA,EAAM38C,KAApB,CAMA28C,EAAM32C,KAAO,SAKb,IAAMyzH,EAEHnsG,IAF0BrD,IAAM,WACjC0yB,EAAM32C,KAAO,QAD0B,IAEtCsnB,KAAUlD,EAAU,IAEvB,EAAKypG,GAAiB3sI,MAAK,WACzBuyI,EAAMzsG,MADyB,GAfjC,CAD4B,CAj2BT2sG,CA7CkCA,EA6CXh9E,GAC5B,MAEF,QACOq7E,GAjDkCA,GAgCH,IAsBhD,EAAK9F,EAAkBh1G,EAAO0nC,EAAauhE,WAAY,eACnD,WAAM,OAAK6R,GAvDoCA,EAuDzC,IACV,EAAK9F,EAAkBh1G,EAAO0nC,EAAauhE,WAAY,UACnD,WAAM,OAAK6R,GAzDoCA,EAyDzC,KAOgB,QAAxBpzE,EAAa6sB,SACf,EAAKygD,EAAkB70G,GACnBunC,EAAc,kBAAkB,WAlEe,EAqExCw1D,EsC90ERvd,EtC40EepmE,KAAK6rB,MAAQ,IACLy2E,CAFgB,GAlES,CA43BvDvB,SAAA,GAAAA,EAAuB79F,EAAWC,EAASy9F,EAAcx9F,GAIjD5tC,GACD0B,IADY4wB,KACZ5wB,IAAI,YAAagsC,GACjBhsC,IAAI,UAAWisC,GACfjsC,IAAI,eAAgB0pI,GACpB1pI,IAAI,UAAWksC,GACpB,EAAKm8B,cAA2Bq/D,GM3mGxBvlE,WN2mG8C7jE,GATU,UAkElE,GAAAioI,EAAuBiC,GA0BCngE,SAAA,EAACz4C,GACjB44G,IACFA,IAAoBngE,cAAcz4C,GA5BE,EA8B/By4C,cAAcz4C,EAJU,CAPfq8G,SAAA,EAACnvI,GACb0rI,IACkBlb,GAApBkb,KAAuC,EAAM1rI,GAE7CA,GAJsB,CAwF1B,OA1GK0rI,IACHA,EAAoBA,WAAM,cAyGrB,IAAcx/D,IAlEMtE,SAACtO,EACxB81E,EAAiB71E,EAAa4P,GAIhC,IAAMkmE,EAxCF3D,IACKA,IgD9kGCtc,EhDukG4B,EASxBA,EAsCVigB,GACFA,EAAWh2E,kBAAkBC,EAAa81E,EACtC71E,EAAa4P,EAPyB,IAWnBtB,SAACvkD,EAAS6lD,EAASmmE,GAO5C/jE,EAA2Bq/D,GM/uGNrmE,0BN2uGf/iE,GACD0B,IADY4wB,KACZ5wB,IAAI,UAAWogB,GACfpgB,IAAI,UAAWimE,GACfjmE,IAAI,cAAeosI,KAExBH,GAAU,WACR,GA9DoC,EA8D3B13E,GAAT,CACOA,IAAAA,EA/D6BA,EA+D7BA,GyD11GX,GAAK,EAAKhB,EAAQxC,QAAlB,CAIA,IAAMs7E,EzDs1GiCjsH,EyDrqGOksH,eAhL9C,GAAID,EAyGJ,IACE,IAAMvtH,EAAS,IAAI8R,IACb27G,EA1GqCF,EA0GjB1+H,MAAM,KAChC,IAASxU,EAAI,EAAGA,EAAIozI,EAAMvyI,OAAQb,IAAK,CAErC,IAAMqzI,EAAUD,EAAMpzI,GAAGwU,MAAM,KAG/BmR,EAAO9e,IAFKwsI,EAAQ,GACD5J,GAAqB4J,EAAQ,IAJX,CAHrC,CAWF,MAAO99G,GAAI,CA7Gb,GADM+9G,EzD+0GiCrsH,EyD/pGQssH,gBA/K9B,CA0HjB,IACE,IAAM5tH,EAAS,IAAI8R,IACb27G,EA3HuCE,EA2HnB9+H,MAAM,KAEhC,IAASxU,EAAI,EAAGA,EAAIozI,EAAMvyI,OAAQb,IAAK,CAErC,IAAMqzI,EAAUD,EAAMpzI,GAAGwU,MAAM,KAG/BmR,EAAO9e,IAFKwsI,EAAQ,GACD5J,GAAqB4J,EAAQ,IAJX,CAOvC,MAAO1tH,CAXL,CAYF,MAAO4P,GAGP,EAAO,IAHG,CApINi+G,IACF,EAAKhK,EAAiBgK,EAHT,CAZjB,CzDy1GI,CADc,GAR4C,IAepC/nE,SAACqB,EAAS7/D,EAAO6hE,EAAkB7J,GAQ3DiK,EAA2Bq/D,GMhwGftmE,iBN2vGN9iE,GACD0B,IADY4wB,KACZ5wB,IAAI,UAAWimE,GACfjmE,IAAI,QAASoG,GACbpG,IAAI,mBAAoBioE,GACxBjoE,IAAI,UAAWo+D,IAPmD,IAWtDyG,SAAC/sE,EAAMmuE,EAASC,GACjC+lE,GAAU,WACHhH,IAAAA,EAjF+BA,EAiF/BA,EAAsC/+D,EAAAA,EuDhyG/C,GADuBA,OAAA,IAAAA,EAAU,CAAC,EAAXA,EAClB,EAAK3S,EAAQxC,QAIlB,GAAuB,SvD4xGekV,EuD5xG1B/2D,OACLo+F,GAALA,EvD2xGoCrnC,QuDpxGtC,OvDoxGgCnuE,GuDnxG9B,K9CysBQm+H,E8C5qBV,IACE,GA7BE2W,EA6BQr5E,EAAQxC,QAAlB,CAIA,GAjCkCmV,EAiCtBpuE,KAAM,CAudC,GAGrB,OA3foCouE,EAkCSpuE,MA0d3C,K9CsOG+0I,E8CrOD,MA7fAD,EA6fSxO,EACuC0O,GAEFC,GAH9C,QAKF,K9C+NeC,E8C9Nf,K9C6NcC,E8C5NZ,EApgBAL,EAogBSxO,EACuC8O,GAEFC,GAH9C,QAKF,K9C0NGC,E8CzND,EAmQEtK,IAnQF,QAlBiB,SAxfjB8J,EAkCK3O,EAAM,CADK,CAIb3wB,GArCHs/B,EvDkxGkC3mE,EuD7uGf,CACnB+4D,GAysBIsD,IAxsBJlD,IAvCAwN,EAuCU1O,GAVZ,CADE,CAaF,MAAO93H,GACGinI,EAAS,sBACf,yCAA0CjnI,EAFhC,CAxCZ,MAEF,KAAiBghE,GAoDnB,IACE,GApDEkmE,EAoDQ/5E,EAAQxC,QAAlB,CAIA,IAAMltC,EAAUqiD,EAAQriD,QAEpBg6E,EAAW,EACXh6E,IACFg6E,EAAWh6E,EAAQooB,QAAUpoB,EAAQmoB,WAGvC,IAAM1tC,EAAO,CACXk6B,EAAc,IAAXqlE,EACHmiC,GAjEAsN,EAmhBgBp8D,EAAiBg2B,IAyOjCqmC,IADDC,KAvrBDlvI,EAAK0gI,GAoPTyO,SAAevnE,GACb,G9Ciacs1C,I8CjaVt1C,EAAQpuE,KAEV,MAobE41I,IA/aJ,GAFM3vF,EAASmoB,EAAQnoB,OAEvB,CAIA,IAAMjmD,EAAOimD,EAAOjmD,KAEpB,GAAY,SAARA,EACF,OAAIimD,EAAOhD,QAAUgD,EAAOhD,OAAOp2C,SAAS,KACDu6H,GAEFD,GAG3C,GAAY,SAARnnI,EACF,OAAyC61I,GAG3C,GAAY,QAAR71I,EACF,MAAwB,oBAApBimD,EAAO5qB,SACgCy6G,GA6ZtCC,GAhbP,CARsB,CApPLJ,CAAevnE,GAG9B,IAAM4nE,EAAUxvI,EAAK0gI,KAAkBC,IACnC3gI,EAAK0gI,KAAkB2O,IACvBrvI,EAAK0gI,KAAkBE,IACvB5gI,EAAK0gI,KAAkB4O,GAErB7vF,EAASmoB,EAAQnoB,OACvB,GAAIA,EAAQ,CACV,IAAM8X,EA9ENy3E,EA8E0Bp8D,EAAiB8kC,KAC3C,GAAI83B,IACFxvI,EAAKshI,GAsTbmO,SAAAA,EAAiBj2I,GAGf,KAFMwoI,EAAS,EAAKpvD,EAAiBoV,KAAkBxuF,IAE3CkC,OACV,OAAO21G,IAGT,IAAM9qG,EAAQ,EAAKqsE,EAAiBqvD,iBAGpC,OAFMn/H,EAAQk/H,EAAOhiH,MAAK,SAACsoF,GAAM,OAAAA,EAAE/hG,OAASA,GAAS+hG,EAAE9hG,KAAOD,CAA7B,KAMJ,KAArBzD,EAAM0D,IAAMD,GAHX8qG,GAXY,CAtTAo+B,CAhFjBT,EAgFkCvvF,EAAOjmD,MACnCwG,EAAK0gI,KAAkB4O,IAAY,CACrC,IAAMI,EACG3N,GAnFbiN,EAmFuCvvF,EAAOjmD,MAExCwG,EAAKuhI,GADHhqE,EACQm4E,EAAwBhwI,KAAK83D,IAAID,GAEjCm4E,CANyB,CAezC,GAJIjwF,EAAOvwB,YACTlvB,EAAKohI,GAAK3hF,EAAOvwB,UAAY,KAG3BuwB,EAAOqS,cAAgBvsC,EAAS,CAElC,IAAM7f,EAAW+5C,EAAOqS,aAAa4gD,GACjCntF,EAAQooB,SAAmC,EAFhB,EAAf4pB,GAGhB,GAAI7xD,EAAU,CACZ,IAAMiqI,EAAcjqI,EAASC,OAAOhF,MACpC,GAAIgvI,GAAeA,GAAepqH,EAAS,CACzC,IAA2BqrB,GACvBrrB,EAAQg/D,IAAWorD,EAAYprD,KAAY,CAEzC,MAAAorD,EAAYprD,IAAU,GAAI,EvDoqGJ5c,EuDpqGYR,KAAK,GA8UjDyoE,EAAK,IAAIh7H,IAAID,GACbylB,EAAO,IAAIxlB,IAAIyG,GAErB,GAAIu0H,EAAGpmH,SAAW4Q,EAAK5Q,OACrB,MAAO7U,MADT,CAQA,IAJA,IAAMk7H,EAASD,EAAG96H,SAASzF,MAAM,KAAKnH,MAAM,GACtC4nI,EAAW11G,EAAKtlB,SAASzF,MAAM,KAAKnH,MAAM,GAAI,GAG7C2nI,EAAO,KAAOC,EAAS,IAC5BD,EAAOpwH,QACPqwH,EAASrwH,QAIX,KAAOqwH,EAASp0I,QACdo0I,EAASrwH,QACTowH,EAAOhtH,QAAQ,MAGjB,EAAOgtH,EAAOz0I,KAAK,IAnBnB,CAlVY4E,EAAKwhI,IAAM,CADkC,CAI/C,IAAKmO,EAAY1rD,IAAa0rD,EAAYzrD,MACrC3+D,EAAQ0+D,IAAa0rD,EAAY1rD,IAClC1+D,EAAQ2+D,IAAWyrD,EAAYzrD,IAAU,CAC3C,IAAIphF,EAAQ6sI,EAAY1rD,GAAY,IAChC0rD,EAAYzrD,KACdphF,GAAS6sI,EAAYzrD,IAEvBlkF,EAAKyhI,IAAM3+H,CALgC,CARJ,CAF/B,CAmBF,IAmWZy0D,EA1dFy3E,EA0dsBp8D,EAAiB8kC,MAAqB,EAC1Dq4B,EACGhO,GA5dLiN,EAuHiCvvF,EAqWKjmD,OAAS,IAC7C01B,EAtW+BuwB,EAsWZvwB,UACzB,EAAKA,EAKeA,GA5WyB3J,EA0WbooB,QA1WapoB,EA0WKmoB,WAEA,KAE9BqiG,EAAqBx4E,EAAgB,KArerDy3E,EAyeuB/5E,EAAQ81D,gBAV1B1Z,IAvWE7iF,MADOmzG,KAEV3hI,EAAK2hI,IAFKA,EAvBsB,CAnB1B,CAiDR6N,GAAWxvI,EAAK0gI,KAAkB4O,KACpCtvI,EAAKqhI,GAmaX2O,SAAAA,EAAiBx2I,GACf,IAAMitD,EAAW,EAAKmsB,EAAiBm1D,KACvC,IAAKthF,EAAS/qD,OACZ,OAAO21G,IAGL2sB,EAAMv3E,EAAS,GAEnB,IAAsBA,IAAAA,GAAAA,EAAAv6B,EAAAu6B,IAAAA,QAAtB,kBACuB,aADvB,WACcjtD,MAAsBkrD,EAAQx1B,UAAY8uG,EAAI9uG,YACxD8uG,EAAMt5E,GAMV,OAAQlrD,GACN,KAAgBmnI,GACd,OAAO3C,EAAI5sE,gBAAkBigD,IAE/B,KAAgBg+B,GACd,OAAOrR,EAAI7sE,gBAAkBkgD,IAE/B,QACE,OAAO2sB,EAAI9uG,UAxBM,CAnaF8gH,CA/HfhB,EA+HgChvI,EAAK0gI,IAAM,KAGxC1xB,GAlIHggC,EvD8wGkCrnE,EuD5oGf3nE,EA9ErB,CADE,CAgFF,MAAO8H,GACGinI,EAAS,qBACf,wCAAyCjnI,EAF/B,CAlIZ,MAEF,K9CmsBOi0E,E8ClsBP,K9CqsBkBxB,E8CpsBlB,K9CqsBG01D,E8CpsBIjhC,GAALA,EvDwwGkCrnC,EuDxwGb,CAAC+4D,GA4uBvB90H,MA3uBC,MAEF,K9C+rBMskI,E8C9rBClhC,GAALA,EvDowGkCrnC,EuDpwGb,CAAC+4D,GAyuBrB9pC,MvD0hFa,GAD6B,IAO9BpwB,SAAChtE,EAAMouE,EAASuoE,EAAQC,IACjC32I,EA1EFywI,IACKA,IgDpkGClpF,EhDsjG4B,EAgBxBA,IAwEAvnD,EAAO42I,aACnB52I,EAAO42I,YAAYD,EAH6B,IAQhC3pE,SAACjtE,EAAM+vE,GACzB,GAAIA,EAASvpE,KAAM,CACX4tI,EAAkBrkE,EAASvpE,KAAKlF,WACtC,IAAMoxI,EA/DJhC,IACKA,IAAoB9T,WAnCS,EAqCxBjI,EA6DR+d,IACFA,EsCltGC97B,GADH5hF,MtCmtGE09G,EsCntGS97B,ItCmtGgBw9B,EAAzB1B,EsChtGC97B,GtCgtGwBw9B,ES5lFrBjW,IT6lFAn+H,IACF0yI,EsC5tGH77B,GtC4tGyBu9B,GANT,CAD4B,GA9FT,CAqM1C0C,SAAA,GAAAA,EAAuB33E,EAAc80C,GAUnC,EAAKm5B,EAAkB,IAAgB2J,GAIvC,EAAK3J,ED18GA3rE,EC08G6DI,GAmC7CG,GAlCrBg1E,EAkCK5J,EAlCyBn5B,EA+BH/tG,KAAKQ,IAigJQuwI,GAhiJVhjC,EAgCmC,IA/B5DijC,GAALA,GAEA,EAAK7J,GAEFtlG,IAFiCvD,IAAM,WACnC2yG,GAnB6CA,EAkBJ,IAE7CpvG,GAAyB,KAC5B,EAAK0kG,EAAkBh1G,EAAO0nC,EAAc,WACxC,WAAO,OAAKg4E,GAtBoCA,EAsBzC,IACX,EAAK1K,EAAkBh1G,EAAO0nC,EAAc,WACxC,WAAO,OAAKg4E,GAxBoCA,EAwBzC,IACX,EAAK1K,EAAkBh1G,EAAO0nC,EAAc,kBACxC,WAAO,OAAKg4E,GA1BoCA,EA0BzC,IACX,EAAK1K,EAAkBh1G,EAAO0nC,EAAc,YACxC,WAAO,OAAKg4E,GA5BoCA,EA4BzC,GA5ByC,CA0DtDA,SAAA,GAAAA,GAUE,OAAQ,EAAK9K,GACX,KAA2B+K,GA+5I7B,GA95IoBC,EA85IXh+D,EAAOkpB,MACd,OAAO,MADT,CAMA,IAAMpU,EAC0BsU,GAr6IZ40C,EAq6I2Bh+D,EAAOspB,UAMtD,EAAoB,MAAbxU,GAAqBA,GA36IRkpD,EA26I0Bh+D,EAAO0sB,SADvCuxC,CAZd,CA75II,MACF,KAA2BC,GAu2IV,EAmBnB,GAz3IoBC,EAm3IXn+D,EAAOkpB,OAMYA,GAz3IRi1C,EAy3IX3K,GACP,GAAO,MADT,CAMA,GA/3IoB2K,EA+3IX76B,EAAUxK,qBAAqB/C,IAAU,CAC1CqoC,EAh4IYD,EAi4IT76B,EAAUxK,qBAAqBpC,KACxC,IAAM5hB,EAC0BsU,GAn4Id+0C,EAm4I6Bn+D,EAAOspB,UAEtD,GAAiB,MAAbxU,GAAqBA,GAAaspD,EAAU,CAC9C,GAAO,EAAP,OAD8C,CANA,CAWlD,GAAO,CAjBP,CAx3II,MACF,QACEC,GAAgB,EAIdC,EAAyCjzB,GAC3C,EAAKrrC,EAAOspB,SACZ,EAAKtpB,EAAO2uB,aAE6C0vC,IAAAA,EAAAA,ED3iHvD5qC,GC2iHoBsgC,EAALA,EAAKA,GD3iHHzrE,EAAY3uD,IAAI,EAAKyuD,GAEtCo/D,EAAW,EAAKp/D,EAChBm2E,EAAYF,GCwiH+BC,GDxiHA7qC,EACzBprC,GACAG,GAIxB,EAAKJ,EAAiBm2E,GAGhBC,EAAehX,GAAY+W,IAEbA,IAAmBl2E,KACrC,EAAKK,EAAoB/wB,KAAK6rB,OAGzBg7E,GC6hHAX,GAALA,EA9Be,UAsanB,GAAAY,GAGE,GAFA,EAAKpkB,GAAoB,IAAgBqa,GACrC,EAAKtyE,EAAS,EAAKwpB,GAAW,EAAKC,GACnC,EAAK19B,EAAS,CAChB,IAAMuwF,EACqBjkF,GAAY,EAAK2H,EAAQlP,UAEhD,EAAK8sB,GAAmC,UAAzB,EAAKA,EAAOhnC,WAC7B0lG,EAAe/sB,cAAe,GAEhC,EAAKxjE,EAAQtyB,UAAU6iH,EAPP,CAYlB,GAHI,EAAK7yD,GACP,EAAKA,EAAWhwD,UAAU,EAAKumC,EAAQ+qB,KAErC,EAAKymD,EAAkB,CACzB,EAAKA,EAAiB/3G,UAAU,EAAKumC,EAAQgrB,WAI7C,IACM,EAAK4lD,GAAmC2L,IACfnxD,GAAvB,EAAK6sC,GACL,EAAK/W,IACF41B,GAALA,EAJF,CAOF,MAAOjkI,GACFurE,GAALA,EAAcvrE,EADA,CAIZ,EAAK8lH,GAEFoe,GAALA,KAIIyF,EAAgB,EAAKhL,E4CluHjB12B,I5CouHH0hC,EAAc5+E,sBACd4+E,EAAc3+E,oBAEZk2E,GAALA,EA3BqB,IA+BvB,EAAKpc,IACP,EAAKA,EAAkBjiD,GAAa,EAAK1V,EAAQgrB,UAAUrV,WAC3D,EAAKgiD,EAAkB9hD,GAAc,EAAK7V,EAAQgrB,UAAUlV,YAC5D,EAAK6hD,ESz6HFhmD,ET06HC,EAAK3R,EAAQgrB,UAAU9W,2BAGzB,EAAKk9D,IACP,EAAKA,EAAmB33G,UAAU,EAAKumC,EAAQv5B,aAE/C,EAAK2qG,E0B1lEFnlF,G1BylEgC,EAAK+T,EAAQlP,SAAzC+1C,0BAKL,EAAKxE,EAEP,GADM+0C,EAAuB,EAAKp3E,EAAQ41D,mBACtC,EAAKyhB,IAAoBD,EAAsB,CACjD,IAAMqF,EAAe,EAAKp6C,EAgB1B,GAfA,EAAKA,EAAiB+0C,IAClB,EAAK/0C,EAAe5oE,UACtB,EAAK4oE,EAAe5oE,UAAU,EAAKumC,EAAQmiC,eAE3BrV,GACZ,8BACA,oDAED,EAAKuV,EAAe+rC,iBACPthD,GACZ,oCACA,0DAEN,EAAKuV,EAAe8rC,kBAAkBsO,EAAa13B,iBACnD03B,EAAa18F,UACT,EAAKqxF,EAAT,CACOA,EAALA,EAAKA,EAAyC/uC,IAAAA,EAALA,EAAKA,E0B5nEpD,EAAKA,GAAiBF,EAClB,EAAKM,IACP,EAAKA,E5Dh1DFz2C,E4Dg1D2Bm2C,E1BynE5B,CAGA,EAAKk1C,GAAmBD,EAEpB,EAAK5F,I4CllHP7uB,G5ColHK6uB,EAALA,EAAKA,G4CplHajwB,EAAahqG,IAAgB0wC,MAE9C86D,GAALA,EACIJ,EAAWn4D,QAA2B,EACpB,GAAgB,E5CwjHa,MA2B7C,EAAK63C,EAAe5oE,WACtB,EAAK4oE,EAAe5oE,UAAU,EAAKumC,EAAQmiC,iBAKxCw2B,IACP,EAAKA,EAAYl/F,UAAU,EAAKumC,EAAQq0D,KAGpC,EAAKr0D,EAAQq0D,IAAI72D,QACnB,EAAKm7D,EAAYj2D,SAEjB,EAAKi2D,EAAYh2D,UAGd+5E,GAALA,IAEE,EAAK/K,IACHgL,EAAoB,EAAK38E,EAAQgrB,UAAUwtB,gBAC3C,EAAK0I,IACPy7B,EACIlyI,KAAK4G,IAAIsrI,EAAmB,EAAKz7B,EAAUtK,gBA9hB9BrwC,GAgiBnBg1E,EAhiBG5J,EAgiB2BgL,EAniBLlyI,KAAKQ,IAigJQuwI,GA99HRmB,EAliBiC,KAqiB7D,EAAKz7B,GACM07B,GAAgB,EAAK17B,EAAUxK,qBACxC,EAAK12C,EAAQy1D,eACb,EAAKz1D,EAAQ01D,cAEf,EAAKyd,GACP,EAAKA,EAAW15G,UAAU,EAAKumC,EAAQw2D,KAErC,EAAKkb,GACP,EAAKA,EAAaj4G,UAAU,EAAKumC,EAAQ61D,MAEvC,EAAK70D,IACP,EAAKA,GAAavnC,UAAU,EAAKumC,EAAQi2D,KAhI9B,UA4xBf,GAAkBh6D,GAChB,OAAKA,IAKCniD,EAAQ,cAAcoB,KAAK+gD,IAQ1B,CAAC5gB,GAFQ5tB,SAAS3T,EAAM,GAAI,IAElBwhC,KADJ7tB,SAAS3T,EAAM,GAAI,KAXvB,IAFoB,UA4L/B,GAAA+iI,EAAmBphF,GACjB,EAAKu1E,EAAkBh1G,EAAOy/B,EAAO,aAAa,WAD1B,EAKjB4mC,EAAezmE,OAAO,EAFTnxB,KAAK4G,IAAI,EAHL,EAIbusE,EAAO2uB,YAJM,EAIavsC,EAAQgrB,UAAUy8B,eAErD,IAAMx6D,EAAOzgD,MAAM24B,KAAKs2B,EAAM28E,YAAc,IACvCpyF,IAAqB82F,IACrBliH,OAA6BmiH,IARZ,EASjB16C,EAAer9F,OAAOioD,EAR2B,IAUxDwO,EAAM32C,KAAOtN,SAASwlI,wBAA0B,UAAY,QAXpC,UAkd1B,GAAAC,GAGE,OAAOzwI,MAAM24B,KAAK,EAAKy4C,EAAOqnD,YACzBrqG,QAAO,SAAC3T,GAAM,MAAU,YAAVA,EAAEnI,MAAgC,YAAVmI,EAAEnI,MA0rFnBo+H,0BAzrFPj2H,EAAEG,KADF,GAJI,CA2BzB+1H,SAAA,GAAAA,GAGE,OAAO3wI,MAAM24B,KAAK,EAAKy4C,EAAOqnD,YACzBrqG,QAAO,SAAC3T,GAAM,MAAU,YAAVA,EAAEnI,IAAF,GAJA,CAuqBfs+H,SAAA,GAAAA,EAAiB78F,GACrB,IAAI3gB,EADsB,OAAAmK,GAAA,+BAMb,OAJT,OAIS,IAAgCmtG,GAAY32F,EAN/B,EAOfo3E,EAPe,EAQf33D,EAAQgrB,UAAU1Y,iBAFhB,GANa,OAMxB1yC,EAAW,IAJT,aAFsB,OASjB/sB,EAAAA,GATiB,OAW1B,GAAI+sB,EACF,OAAO,EAAP+L,OAAO/L,GAMT,MAAM,IAAemE,G1Br+LR6wC,EAoBP3nC,EA0K0BowG,K0B2yL5B98F,GAtBsB,IAmCtB+8F,SAAA,GAAAA,EAAoB/8F,EAAKzzC,EAAUgS,EAAM8gB,EAAUxY,EACrDm2H,GAIA,IAAMxyI,EAGAyyI,EACAC,EAKFC,EAbS,OAAA3zG,GAAA,sBACf,MAAgB,YAAZnK,GAA0B29G,EAAY92I,OAG3B,IAAWk3I,GAJXA,EAIwBp9F,EAJxB,EAKJo3E,EALI,EAMJ33D,EAAQgrB,UAAU1Y,iBAFd,GAHf,OADe,SAIPvnE,EAAO,IAGPyyI,EAAeI,GAPRA,EAOyB7yI,EAAM60B,EAAU29G,GAChDE,EAAO,IAAII,KAAK,CAACL,GAAU,CAACj5I,KAAM,aACxCg8C,EAAoCmkD,GAAgB+4C,GACpD79G,EAAW,YAGP89G,EAC6BlmI,SAASE,cAAc,SAClCg6H,IAAAA,EAfTA,EAeSA,EAAiCnxF,EAAAA,EuDj0LzD,IACE,GAAK,EAAKyf,EAAQxC,QAAlB,CAIA,IAAMzyD,EAAYggI,GAALA,GACbhgI,EAAK0gI,GA0iBA6O,IAziBLvvI,EAAK8gI,IAAK,EAEV,IAEA,EAA8BgB,GAAiBtsF,EAwenBosF,GA1eiB5hI,GAR7C,MACE,EAAOw1C,CAFP,CAYF,MAAO1tC,GACGinI,EAAS,wBACf,2CAA4CjnI,GAChD,EAAO0tC,CAHO,CvDq0LhB,OAhBAm9F,EAAa96H,IAAM,EACnB86H,EAAat2H,MAAQA,EACrBs2H,EAAa5+H,KAAOA,EACpB4+H,EAAaI,QAAUhxI,EAlBR,EA0BL8wE,EAAOmgE,aAAa,gBA1Bf,EA2BRngE,EAAO7lC,aAAa,cAAe,aA3B3B,EA8BV6lC,EAAOj7D,YAAY+6H,GACxB,EAAA/xG,OAAO+xG,EA/BQ,IAyCXC,SAAA,GAAAA,EAAap9F,EAAK8kC,EAAWlT,GACjC,IAAM5tE,EAEAmuE,EAKA4B,EARwC,OAAAvqC,GAAA,uBACxCxlC,EAA8CsvE,IAE9CnB,EAAqCmF,GAAY,CAACt3B,GAAM4xB,IACtDx2D,OAAS,MAEZ+1H,IAAAA,EANyCA,EAMzCA,EuDl5LL,IACO,EAAK1xE,EAAQxC,SAIbu8C,GAALA,EvD64L8BrnC,EuD74LT,CACnB+4D,GA2lBG6O,IA1lBHzO,IAAI,GAPJ,CASF,MAAOh5H,GACGinI,EAAS,kBACf,qCAAsCjnI,EAF5B,CvD24LC,WAAMwyE,EAAU3S,QAAQnuE,EAAMmuE,GAASnI,QAAvC,EAR6B,CAU9C,OAFM+J,EAAW,IAEjB,EAAA3oC,OAAO2oC,EAASvpE,KAV8B,IAuBhD6yI,SAAA,GAAAA,EAAiBl1I,EAAQk3B,EAAU29G,GACjC,IAAMhxD,ElC/mMuB5/B,GkC+mMoB/sB,GACjD,GAAI2sD,EAWF,OAVMltE,EAAMktE,IACNz8C,EAAO,CACXm4D,YAAa,EACbC,aAAc,EACdC,WAAY,EAAKvqB,EAAO0sB,SACxBzC,UAAW,GAEP98F,EAA8B4zB,GAAQj2B,GwD7rMhDs1I,SAAe/wF,EAAMswF,GACMU,SAAA,EAACnuG,GAExB,IADA,IAAI6vC,EAAU7vC,EACWytG,EAAAtmH,EAAAsmH,GAAAA,EAAAA,EAAAA,QAAzB,8BACiBhsI,KAAO2sI,EAAW5sI,MAAQw+B,IAEvC6vC,GADeu+D,EAAW3sI,IAAM2sI,EAAW5sI,OAQ/C,OAAgB,IAJV6sI,EAAQ1zI,KAAKqB,MAAM6zE,EAAU,OAId,IAAM,IAAMw+D,EAAQ,KAC1B,IAJTvuG,EAAUnlC,KAAKqB,MAAM6zE,EAAU,GAAK,KAItB,IAAM,IAAM/vC,EAAU,KAC3B,IAJTvD,EAAU5hC,KAAKqB,MAAM6zE,EAAU,KAIjB,IAAM,IAAMtzC,EAAU,KACtB,KAJd+xG,EAAe3zI,KAAKqB,MAAgB,IAAV6zE,EAAiB,MAIP,GAAfy+D,EAAoB,KAAO,IAAO,IACzDA,CAhB6B,CAmBnC,IAAM1Q,EAAiC5J,GAAiB72E,GAEpDoxF,EAAe,aACnB,IAAkB3Q,IAAAA,GAAAA,EAAAz2G,EAAAy2G,IAAAA,QAAlB,kBAmCE2Q,GAAgBJ,GAnClB,WAmCuCxlG,WAAa,WAC9CwlG,EAAiB1iG,EAAI7C,SAnCF4lG,SAAC/iG,GACtB,IAAMgjG,EAAW,GAEjB,OAAQhjG,EAAIxC,WACV,IxEwuBAwvF,OwEvuBEgW,EAASv4I,KAAK,oBAEhB,IxEsuBCyiI,QwEruBC8V,EAASv4I,KAAK,eACd,MACF,KAAmBgzC,GACjBulG,EAASv4I,KAAK,gBACd,MACF,IxEkuBCwiI,QwEjuBC+V,EAASv4I,KAAK,eACd,MACF,IxEguBD0iI,MwE/tBG6V,EAASv4I,KAAK,aAGlB,OAAQu1C,EAAIpC,aACV,IxE6vBkBqrF,cwE5vBhB+Z,EAASv4I,KAAK,eACd,MACF,IxE2vBkB0+H,cwE1vBhB6Z,EAASv4I,KAAK,eAIlB,OAAIu4I,EAAS93I,OACJ,IAAM83I,EAASp4I,KAAK,KAEtB,EAhCuB,CAATm4I,CAmC4B/iG,GAAO,KAC1D8iG,GAAgB9iG,EAAI5C,QAAU,OAEhC,OAAO0lG,CA9DyB,CxDgsMIG,CAF5BvxF,EAAO5tC,EAAI+oF,WACbr9F,EAAM+kC,EAAiB,KAAoB,IACCytG,GAElD,MAAM,IAAex5G,G1B/jMXiJ,EAaJC,EA6LewxG,K0By3LjB7+G,EAnB0C,UAgKhD,GAAAsyG,GACE,IAAMx4G,EAAwC29F,KA8B9C,OA5BA39F,EAAOsxD,UAAUmhC,gBAAkBuyB,SAAC7rI,GA+CpC,GAlDe8rI,EAkDLhrC,IAAV,CAIA,IAAIirC,EAAoB,K1BtsMPjqE,M0BopMuB9hE,EAmD9B4c,M1B/rMEkzG,M0B4oM4B9vH,EAoD9B4c,MAERmvH,EAAoB,EA1DPD,EA2DJ3+E,EAAQgrB,UAAUugC,iBACzBqzB,EAAoB,K1B5rMf/pE,M0BooM+BhiE,EA0DvB4c,OAEfmvH,EAAoB,IAGG,MAArBA,IA/DoC/rI,EAgEhCywB,S1B3xMKsxC,E0ButME+pE,EAsERjL,GAAekL,GApBtB,CA/C8C,EAM9CllH,EAAOk8F,mBAAqBipB,WAK1B,IAda,EAcJnZ,IACM3qE,OAAmBvjD,SAAS+tH,kBAMzC,OAAIzzB,iBAAiBptG,UAAUwgI,aACtB,IAAemJ,GAtBb,EAuBAzwD,EAiuDWs/D,0BA7tDb,IAAe3O,GAXxB,IAAMuQ,EAhBK,EAgBev6D,mBAC1B,OAAO,IAAeqqD,GAjBX,EAkBFhxD,EAlBE,EAkBW8nD,GAAiBoZ,EAAa38C,cATtB,EAsB3BzoE,CA/BQ,CA8MjB+hH,SAAA,GAAAA,GACE,IAAMsD,EAAc,EAAKA,KAQzB,GAFe,EAAK7lB,GAAU,EAAKyY,GAAmB,EAAKR,EAE/C,CACLU,IAAAA,EAALA,EAAKA,EAYL,GkC/gNF,EAAKn4B,ElCmgNmCqlC,EkClgNnChlC,GAALA,GlCmgNM,EAAK23B,IACFA,EAALA,EAAKA,EAA0BqN,GuD5+MhB,EAAKpU,IACtB,EAAKA,GAAmB,GAGtB,EAAKA,GvDw+M0BoU,IuDv+MjC,EAAKjU,GAAW,GAGlB,EAAKF,EvDo+M8BmU,GAE5BhH,GAALA,GAIM3uE,EACF,EAAKpJ,EAAQgrB,UAAUqnC,SAASO,qBAAqBxpD,YAFrD,EAAKpJ,EAAQgrB,UAAUqnC,SAASO,qBAAqBp1D,SAK7BuhF,GAC1B,EAAK3M,GAAoBhpE,EAAa,CAChC2pD,EACF,EAAK/yD,EAAQgrB,UAAUqnC,SAASO,qBAAqBG,WAEzD,IAAMR,EACJ,EAAKvyD,EAAQgrB,UAAUqnC,SAASE,uBAC5BO,EACJ,EAAK9yD,EAAQgrB,UAAUqnC,SAASO,qBAC3BE,kBACH,EAAKqf,IACP,EAAKA,EAAwB1nI,KAAKQ,IAC9B,EAAKknI,KACL,EAAKC,GAAoBtf,EACzBC,EAAaR,GAbmB,CAd9B,CAmCNxnH,GAAmB0B,IAAP4wB,KAAO5wB,IAAI,YAAasyI,GAC1C,EAAKjqE,cAA2Bq/D,GMt8MvBxmE,YNs8M6C5iE,GA7CnC,CAyFrBgtI,SAAA,GAAAA,GAEE,GAAK,EAAK7e,GAGL,EAAKyY,EAAV,CAMA,IAAMqN,EAAU,EAAK9lB,EsCz5MT1c,EtC25MRyiC,EAAc,UACd,EAAKtN,EDxjNG3rE,GCwjNiCI,GAC3C64E,EAAc,YACL,EAAKrhE,EAAOkpB,MACrBm4C,EAAc,QACL,EAAKrhE,EAAO8E,SACrBu8D,EAAc,UAEoBA,IAAAA,EAAAA,EoCvnNpC,GAAkB,MpCunNGD,EoCvnNZvkC,EpCunNYukC,EoCtjNhBvkC,EAAQ,CACXzmB,UA6CKz+C,KAAK6rB,MAAQ,IA5ClBjkD,MAlEYA,EAmEZmtF,SAAU,GAlEV,GAAO,MAFT,CAkFA,IAAM40C,EA6BC3pG,KAAK6rB,MAAQ,IpCwgNC49E,EoCjiNhBvkC,EAAMnQ,SAAW40C,EpCiiNDF,EoCjiN2BvkC,EAAMzmB,UpCiiNjCgrD,EoC9hNZvkC,EAAMt9F,OArFOA,EAsFpB,GAAO,GpC6hNY6hI,EoCxhNhBtkC,EAAQ10G,KpCwhNQg5I,EoCxhNEvkC,GpCwhNFukC,EoCvhNhBvkC,EAAQ,CACXzmB,UAAWkrD,EACX/hI,MA9FoBA,EA+FpBmtF,SAAU,GAEZ,GAAO,EArGP,CpCunNqB8xC,IAIbrxI,GAAmB0B,IAAP4wB,KAAO5wB,IAAI,WAAYwyI,GACzC,EAAKnqE,cAA2Bq/D,GMh/MtB7kE,eNg/M4CvkE,IArBxD,CALoB,CAmCtBo0I,SAAA,GAAAA,GACE,IAAM78E,EAAe,EAAKsb,EAAOtb,aAC3BqxC,EAAS,EAAKA,IAEpB,GAAI,EAAK3zC,EAAQgrB,UAAUioC,yBAA2Btf,EAAQ,CAC5D,IAAM8e,EACJ,EAAKzyD,EAAQgrB,UAAUkoC,oCACnBksB,EAAiB,EAAKC,KAIxBD,GAFF,EAAKp/E,EAAQgrB,UAAUmoC,kCAGnB7wD,GAAgBmwD,GAIlB,EAAK6sB,GAAU7sB,GAA0C,GAEhC,GAAlB2sB,GACL98E,IAAiB,EAAKuvE,EAAoBhU,MAE5C,EAAK0hB,IAjBmD,CAuB9D,GAAK5rC,IAICsL,EAAY,EAAKA,KAClBpvE,OAAO+F,SAASqpE,EAAU1tG,QAGX,EAAKqsE,EAAO2uB,YACd0S,EAAU3tG,OAMxB,EAAKssE,EAAO8E,SAAhB,CASM6vC,EACJ,EAAKvyD,EAAQgrB,UAAUqnC,SAASE,uBAC5BK,EACJ,EAAK5yD,EAAQgrB,UAAUqnC,SAASO,qBAAqBp1D,QACvD,IAAMq1D,EACJ,EAAK7yD,EAAQgrB,UAAUqnC,SAASO,qBAAqBC,sBAEnD,EAAK7yD,EAAQgrB,UAAUqnC,UACzB,EAAKryD,EAAQgrB,UAAUqnC,SAAS70D,QAChC,IAAA80D,EAAgB,EAAKtyD,EAAQgrB,UAAUqnC,SAASC,cAChDS,EAAaT,EAAgBC,EAC7BS,EAAavoH,KAAK4G,IAAI,EAAGihH,EAAgBC,GACzCC,EAAkB,EAAKxyD,EAAQgrB,UAAUqnC,SAASG,gBAClDC,EAAkB,EAAKzyD,EAAQgrB,UAAUqnC,SAASI,qBAI9C,EAAKvR,GAAa,EAAKA,EAAUs+B,qBACnCltB,EAAgB,EAAKpR,EAAUs+B,mBAAmBltB,cACK,MAAnD,EAAKpR,EAAUs+B,mBAAmBltB,cACpCS,EAAa,EAAK7R,EAAUs+B,mBAAmBltB,cAC3CC,EACqD,MAAhD,EAAKrR,EAAUs+B,mBAAmBzsB,aAC3CA,EAAa,EAAK7R,EAAUs+B,mBAAmBzsB,YAEM,MAAnD,EAAK7R,EAAUs+B,mBAAmBltB,cACpCU,EAAavoH,KAAK4G,IAAI,EAClB,EAAK6vG,EAAUs+B,mBAAmBltB,cAClCC,GACqD,MAAhD,EAAKrR,EAAUs+B,mBAAmBxsB,aAC3CA,EAAa,EAAK9R,EAAUs+B,mBAAmBxsB,YAEjDR,EACE,EAAKtR,EAAUs+B,mBAAmBhtB,iBAClC,EAAKxyD,EAAQgrB,UAAUqnC,SAASG,gBAClCC,EACE,EAAKvR,EAAUs+B,mBAAmB/sB,iBAClC,EAAKzyD,EAAQgrB,UAAUqnC,SAASI,iBAIjC,EAAK0f,GAAkD,iBAAlB7f,IACxC,EAAK6f,EAAwB7f,GAG/B,IAAMlpD,EACF,EAAKpJ,EAAQgrB,UAAUqnC,SAASO,qBAAqBxpD,YACrDwpD,GAAwB,EAAKyf,IACA,OAA/B,EAAKF,GACoB,iBAAlB7f,GACP,EAAK8f,GAAoBhpE,GACxB7zB,KAAK6rB,MAAQ,EAAKixE,GAA8C,IAArBxf,IACtC4sB,EACF,EAAKz/E,EAAQgrB,UAAUqnC,SAASO,qBAAqBI,WAEzD,EAAKmf,EAAwB1nI,KAAK4G,IAC9B,EAAK8gI,GAFiB7f,EAAgBmtB,GAAqB,EAK3DA,EAAoBltB,GACxB,EAAK8f,GAAwB98F,KAAK6rB,OAEhCwxD,GAAuD,OAA/B,EAAKuf,IAC/Bpf,EAAa,EAAKof,EAAwB5f,EAC1CS,EAAa,EAAKmf,EAAwB5f,GAGtCmtB,EAAUzgC,EAAU1tG,IAAM,EAAKqsE,EAAO2uB,YACxCxlG,EAAS,EAKT,EAAK6pI,GAAmC+K,IAEpB,GADhBz0C,EAAW,EAAKtpB,EAAOspB,UAChBzgG,SACLk5I,EAAcz4C,EAAS31F,IAAI21F,EAASzgG,OAAS,GACnDM,EAAS0D,KAAK4G,IAAImhH,EAAiBmtB,EAAc1gC,EAAU1tG,MAIzDmhH,EAAY,EAAK1yD,EAAQgrB,UAAUqnC,SAASK,UAC5CC,EAC+C,IAAjD,EAAK3yD,EAAQgrB,UAAUqnC,SAASM,eAC9BitB,EACFrqG,KAAK6rB,MAAQ,EAAKuwE,ED7sNVrrE,EC8sNRosD,IAAcD,IAChBA,EAAkB,EAAKzyD,EAAQgrB,UAAUqnC,SAASI,iBAGhDC,GAAaD,GACbmtB,GAAyBjtB,EACvBrwD,GAAgBmwD,GAKlB,EAAK6sB,GAAU7sB,GAA0C,GAElDM,GAAcP,GACtBktB,EAAU34I,EAAUgsH,GACjBzwD,GAAgBkwD,GAIlB,EAAK8sB,GAAU9sB,GAA0C,GAE3D,EAAK6f,GAAwB,MACpBrf,GAAcP,GACpBitB,EAAU34I,EAAUisH,GACnB1wD,GAAgBmwD,GAIlB,EAAK6sB,GAAU7sB,GAA0C,GAE3D,EAAK4f,GAAwB,MACpB/vE,IAAiB,EAAKuvE,EAAoBhU,OACnD,EAAK0hB,KACL,EAAKlN,GAAwB98F,KAAK6rB,MAhIpC,CA1Cc,CAmLhBy+E,SAAA,GAAAA,GACE,GAAK,EAAKjiE,EAAV,CAGA,IAgBMvhD,EAhBFyjH,GAA0B,EACxBC,EAAkB,EAAKniE,EAAO2uB,YAAc,EAAK3uB,EAAO0sB,SACzD/wE,MAAMwmH,KACHC,EAAUv1I,KAAKmpD,MAAM,IAAMmsF,GAC7BxmH,MAAM,EAAKqiF,IACb,EAAKA,EAAqBokC,EAC1BF,GAA0B,IAEpBG,EAAuBx1I,KAAK4G,IAAI,EAAKuqG,EAAoBokC,GAC3D,EAAKpkC,GAAsBqkC,IAC7B,EAAKrkC,EAAqBqkC,EAC1BH,GAA0B,KAI5BA,IAE6B,GAA3B,EAAKlkC,EACPv/E,EAAqB83G,GMnsNlB9kE,WNosNiC,IAA3B,EAAKusC,EACdv/E,EAAqB83G,GMvtNZhmE,iBNytN2B,IAA3B,EAAKytC,EACdv/E,EAAqB83G,GMhtNjBtlE,YNktNgC,IAA3B,EAAK+sC,EACdv/E,EAAqB83G,GMtsNZzkE,iBNwsN2B,KAA3B,EAAKksC,IACdv/E,EAAqB83G,GMxuNjBvmE,aN2uNFvxC,GACF,EAAKy4C,cAAcz4C,GApCvB,CADiB,CAuEnB06G,SAAA,GAAAA,GACE,IAEyBrrD,GAAvB,EAAKusC,GAA0C,EAAK/W,EAFlD,CAGF,MAAO/lF,GAEP,OADKijD,GAALA,EAAcjjD,IACP,CAFG,CAKZ,IAAMumG,EAA0CC,GAC5C,EAAKzgB,EAAU1vD,UAMnB,OAHMqwE,EAAgB,EAAKhK,GAA8B9yH,OACrD28H,GACJ,EAAK/I,EAAYr1D,YAAY92D,MAAM24B,KAAK08F,EAAczqH,YAC/C,CAhBmB,CAqH5B28H,SAAA,GAAAA,EAAwB7wB,EAAoBC,EAAgBC,EACxDlI,GAMoB,MAPAgI,OAAA,IAAAA,GAAAA,EAAoBC,OAAA,IAAAA,EAAa,EAAbA,EAAgBC,OAAA,IAAAA,GAAAA,EACxDlI,OAAA,IAAAA,GAAAA,GAzFF,EAAS67B,GA+FamJ,GAAAA,EA9FRvnB,EAAYv4D,gBAEjB,OA8FF+/E,GAALA,EAFoBhgF,EAEe+6C,EAC/BgI,EAAaC,EAAYC,EATN,CAqB3B+8B,SAAA,GAAAA,EAAe1wF,EAASyrD,EAAgBgI,EAAaC,EACjDC,GAAAA,OAAA,IAAAA,GAAAA,EACF,IAAM4zB,EAAiB,EAAKxF,E4C9vNhB12B,E5C+vNZ,GAAIrrD,GAAWunF,EAKT9zB,GACoBD,GAAtB,EAAKuuB,EAA+B/hF,EAASyzD,EAAaC,GACzC,OAPrB,CsClzNYzG,IAAAA,EtC+zNZ0jC,EAjvB2BlnB,EsC9kMfxc,EDrOR,EAAK5B,GrCoiOuBrrD,IqChiOhC,EAAKqrD,ErCgiO2BrrD,EqC/hOhC,EAAKsrD,EAAS/0G,KAAK,CACjBguF,UAqDKz+C,KAAK6rB,MAAQ,IApDlBr5C,GrC6hO8B0nC,EqC7hOf1nC,GACfxjB,KAAM,UACN22G,erC2hOuCA,EqC1hOvCjhF,UrC0hO8Bw1B,EqC1hORx1B,arC2hOFgpF,GAAtB,EAAKuuB,EACD/hF,EAASyzD,EAAaC,EAAYC,EAChBlI,GAClBmlC,EAAW,KACXrJ,IACFqJ,EAAkCC,GAAetJ,KAE7CuJ,EAAkCD,GAAe7wF,IAC9CiM,QAAS,EAEdw/C,GAkOEnwG,GACD0B,IADY4wB,KACZ5wB,IAAI,WAjOY4zI,GAkOhB5zI,IAAI,WAlOsB8zI,GAA7BC,EAmOO99C,GACQpB,GApOfk/C,EAoOK99C,EApOwB69C,EAA7BC,EAoOsCC,MAInCC,GAxOHF,EAsOInkH,EAAqB83G,GM/pOjB1mE,aNgqOqC1iE,KApOxC41I,GAALA,EAAuBN,EAAUE,EA7BnC,CAFiB,CAuCnBK,SAAA,GAAAA,EAAkBnlF,GAIhB,IAAMolF,EADcr0I,MAAM24B,KAAK,EAAKy4C,EAAOs6D,aACVntH,MAAK,SAAC9D,GAAQu2C,OAAFv2C,EAAEu2C,OAAAA,IAG/C/B,EAAM+B,SAAU,EAEXqjF,IAMDplF,EAAM1zC,KAAO84H,EAAa94H,KAC5B84H,EAAarjF,SAAU,GAOpBmjF,GAALA,EAJMN,EACmBS,GAAuBD,GAC1CN,EACmBO,GAAuBrlF,IAtBzB,CAoOzBq7E,SAAA,GAAAA,GAKO4J,GAALA,EAF2BvM,GMroOdrkE,iBNkoOI,CAcnB6wE,SAAA,GAAAA,EAAkBx7G,EAAMw1G,GAGhB5vI,GACD0B,IADY4wB,KACZ5wB,IAAI,WAAY04B,GAChB14B,IAAI,WAAYkuI,GACjB,EAAKj4C,GACQpB,GAAf,EAAKoB,EAAwBi4C,EAAI,EAAK8F,MAKnCC,GAALA,EAFMrkH,EAAqB83G,GMxpObnkE,iBNypOqCjlE,GAXzB,CAmB5Bg2I,SAAA,GAAAA,GAKOL,GAALA,EAF2BvM,GM5qOhB3kE,eNyqOI,CASjBwxE,SAAA,GAAAA,GAGON,GAALA,EAF2BvM,GMlrOR1kE,uBNirOI,CAOzBitE,SAAA,GAAAA,GAEO,EAAK18E,EAAQq0D,IAAI72D,SACfi2E,GAALA,GAIGiN,GAALA,EAAsCvM,GMjuOtB3mE,oBNguOS/gE,IAAP4wB,KAAO5wB,IAAI,YAAa,EAAKuzD,EAAQq0D,IAAI72D,UANvC,CActByjF,SAAA,GAAAA,GACE,IAAMC,EAAkB,EAAKC,KAAgBp2H,MAAK,SAAC9D,GAAQy0C,OAAFz0C,EAAEy0C,MAAAA,IACvDwlF,GACA,EAAK7+C,GAAkB,EAAKA,EAAe+rC,iBAC7C,EAAK/rC,EAAe+rC,gBAAgB8S,EAAgBp0I,SAJ5B,CAY5B2mI,SAAA,GAAAA,EAAyB2N,GACvB,GADuBA,OAAA,IAAAA,GAAAA,EACnB,EAAKxQ,GAAmCkL,GAA5C,CAOA,EAAKnI,GAAoB7nG,OAEzB,IAAqC0lB,IAAAA,EAAAv6B,EAAfu6B,EAAK0vD,EAAU1vD,UAAAA,EAAAA,EAAAA,QAArC,oBAAA/B,MACUqO,kBAAoB,EAG1BsjF,GACGrK,GAALA,EAdF,CAD8C,UAoH1C,GAAA34D,EAASvrE,GAab,IAAIwuI,EAOMtyG,EAGE1S,EAkBNA,EAzCc,OAAA0N,GAAA,+BAKpB,GALoB,EAKX6mG,GAAmC2L,GAC1C,SAAA5wG,SAQF,G1B/3OaipC,I0B03OT/hE,EAAMywB,UATU,EAUb41F,EsChyOF7c,ItCmyODglC,GAAY,IAbI,EAcXtP,IAdW,EAcU7wB,GAdV,EAc4BswB,I1BpjOnC8P,M0BqjORzuI,EAAM4c,M1BtkOoB82E,M0BukO3B1zF,EAAM4c,M1B/jOoB22E,M0BgkO1BvzF,EAAM4c,M1BxiOU8xH,M0ByiOhB1uI,EAAM4c,KAJV,cAMgB,OADV,OACU,IAA4Bm0F,GApBxB,EAoBO4tB,GAAX,GApBI,OAoBVziG,EAAM,IACZsyG,GAAatyG,EACTA,IACI1S,EAAqB83G,GM32ObxlE,wBNo1OA,EAyBTmG,cAAcz4C,IANnB,aAnBc,OA2BTlB,EAAAA,GACPkmH,GAAY,EA5BI,OA+BpB,IAAKA,EACH,SAAA11G,S1B14OQqB,I0B84ONn6B,EAAMywB,UACHmwG,GArCaA,GAqCoC,GAIlDp3G,EAAqB83G,GMv4OtBvwG,SNw4OsBn3B,IAAP4wB,KAAO5wB,IAAI,SAAUoG,IA1CrB,EA2CfiiE,cAAcz4C,GACfA,EAAMivC,mBACRz4D,EAAM4wB,SAAU,KA7CE,gBAgGtB,GAAA+yG,EAAexkC,EAAWp5D,EAAQ4oG,GAAAA,OAAA,IAAAA,EAAc,EAAdA,EAY1Bz2I,GAAmB0B,IAAP4wB,KAAO5wB,IAAI,SAVf2jC,CACZg5D,YAAaxwD,EAAOwwD,YACpB19F,MAAOktC,EAAOltC,MACd+sC,UAAWG,EAAOH,UAClBC,QAASE,EAAOF,QAChB3wB,GAAI6wB,EAAO7wB,GACX05H,aAAc7oG,EAAO6oG,aACrBC,UAAW9oG,EAAO8oG,YAIpBF,EAAY1sE,cAA2Bq/D,GAAWniC,EAAWjnG,GAbT,CA4BtD4rI,SAAA,GAAAA,EAAsBznD,EAAc5pE,EAAUq8H,GAAAA,OAAA,IAAAA,GAAAA,EAkBtC52I,GACD0B,IADY4wB,KACZ5wB,IAAI,eAjBK2jC,CACZnW,UAAWi1D,EAAaj1D,UACxB44B,kBAAmBq8B,EAAar8B,kBAChCrL,OAAQ0nC,EAAa1nC,OACrBlI,YAAa4vC,EAAa5vC,YAC1BuU,UAAWq7B,EAAar7B,UACxBzxB,OAAQ8sD,EAAa9sD,OACrBxC,SAAUsvD,EAAatvD,SACvBgzB,cAAes8B,EAAat8B,cAC5B+I,iBAAkBuzB,EAAavzB,iBAC/Bt5B,MAAO6sD,EAAa7sD,MACpBjb,MAAO8nE,EAAa9nE,MACpB0rC,MAAOo8B,EAAap8B,MACpBhmD,SAAUoiF,EAAapiF,WAKpBL,IAAI,WAAY6Y,GAErB,EAAKwvD,cAA2Bq/D,GAC5BwN,EMz/Oaj0E,oBAiBEgB,sBN2+Of3jE,GA1BmE,CAoCzE62I,SAAA,GAAAA,EAAwBC,GAGtB,GAHsBA,OAAA,IAAAA,GAAAA,GAGjB,EAAKjkE,EAAO/qE,MACf,OAAIgvI,EACK,IAAe99G,G1B/gPhBiJ,EAgBHgsC,EAoTMsoE,M0BgtOJ,KAGT,IAAM7xH,EAAO,EAAKmuD,EAAO/qE,MAAM4c,KAC/B,OAAKoyH,GAA0B,GAARpyH,IAOnB4zD,EAAW,EAAKzF,EAAO/qE,MAAMivI,kBAGhB,EAAXz+D,IACFA,GAAY54E,KAAKC,IAAI,EAAG,KAG1B24E,EAAWA,EAAStwE,SAAS,KAMxB,IAAegxB,G1B5iPZiJ,EAgBHgsC,EAoTMsoE,K0B4uOT7xH,EAAM4zD,EANM,EAAKzF,EAAO/qE,MAAM6wB,UAfzB,IAjBoC,CA8J/Cq+G,SAAO,GAAgB7xC,EAAUulB,EAAgBC,GAC1B,EAAjBD,IACEvlB,EAASyD,KAKXzD,EAASqE,GAAiBkhB,IAO1BC,GADEssB,EAAe9xC,EAASjC,iBAExBiC,EAASyD,KAKXzD,EAASnC,GAAY2nB,GApBoC,CAgCzDgrB,SAAA,GAAAA,EAAoBrkH,GAAO0N,GAAA,sBAE/B,WAAMwjB,QAAQ7J,UAAd,GAF+B,EAKtBktF,GAAmC2L,IALb,EAMxBznE,cAAcz4C,GANU,QAiBjC4lH,SAAO,GAAkBvuB,GAGvB,IAFA,IAAMwuB,EAAY,IAAI7nH,IAEFq5F,GAAAA,EAAAz8F,EAAAy8F,IAAAA,QAApB,8BACY5mH,SACRo1I,EAAUnpH,IAA6B+0B,GAAU2N,EAAM3uD,WAEvDo1I,EAAUnpH,IAAI,OAIlB,OAAOmpH,CAXwB,CAsBjCC,SAAO,GAAyBzuB,GAM9B,IAJA,IAAM0uB,EAAkB,IAAI/kH,IAEtBglH,EAAsB,IAAIhlH,IAEZq2F,GAAAA,EAAAz8F,EAAAy8F,IAAAA,QAApB,kBAA4B,CAC1B,IAAI5mH,EAAW,MACXgmD,EAAQ,IAFd,WAIYhmD,WACRA,EAAoCghD,GAAU2N,EAAM3uD,YAIpDgmD,EADgB,WAAd2I,EAAMl3D,KACAk3D,EAAMK,WAENL,EAAM3I,QAGDA,EAAMrsD,SAGnBqsD,EAAQ,CAAC,KAGNsvF,EAAgBxlI,IAAI9P,IACvBs1I,EAAgB31I,IAAIK,EAAU,IAAIutB,KAGpC,IAAmBy4B,IAAAA,GAAAA,EAAA77B,EAAA67B,IAAAA,QAAnB,SAAA7jD,EAAA,iBACEmzI,EAAgB7qI,IAAIzK,GAAUisB,IAAIyiC,GAC9BC,EAAMr0C,QACHi7H,EAAoBzlI,IAAI9P,IAC3Bu1I,EAAoB51I,IAAIK,EAAU,IAAIuwB,KAExCglH,EAAoB9qI,IAAIzK,GAAUL,IAAI+uD,EAAMC,EAAMr0C,OA9B5B,CAoC5B,IAAMk7H,EAAW,GAWjB,OAVAF,EAAgBtiI,SAAQ,SAACgzC,EAAOhmD,GAC9B,IAAmBgmD,IAAAA,GAAAA,EAAA77B,EAAA67B,IAAAA,QAAnB,kBAA0B,CAA1B,UACE,IAAI1rC,EAAQ,KACRi7H,EAAoBzlI,IAAI9P,IACxBu1I,EAAoB9qI,IAAIzK,GAAU8P,IAAI4+C,KACxCp0C,EAAQi7H,EAAoB9qI,IAAIzK,GAAUyK,IAAIikD,MAEvCx1D,KAAK,CAAC8G,SAAAA,EAAU0uD,KAAAA,EAAMp0C,MAAAA,GANP,CADiB,IAUtCk7H,CArD+B,C0D/1PxC/Q,GAAA,UAAA11G,QAAAA,WAEgC,EAA1Bh0B,KAAK2oI,EAAY/pI,OACnBoB,KAAK2oI,EAAYhmH,OAAjB3iB,GAEAA,KAAK0oI,EAAqB,IALpB,E1DuhB4B/6D,EAAlC+sE,GAAkCrtE,KA+ZhCn1B,EAAAA,GAAAA,WAAAA,QAAAA,WAAW,IASTyiG,EATQ,cAAAz4G,GAAA,+BAEd,OAAI,EAAK6mG,GAAmC2L,GAC1C,EAAA5wG,UAIGsoG,GAALA,GAEMuO,EAAgB,EAAKC,SAK3B,EAAK7R,EAAkC2L,GAEvC,IAAMiG,EAAN,IAhBc,OAqBd,WAAM,EAAKE,KAAX,GArBc,OAoDd,GA5BI,EAAK5R,KACP,EAAKA,GAAoBj1G,UACzB,EAAKi1G,GAAsB,MAEzB,EAAKC,KACP,EAAKA,GAAoBl1G,UACzB,EAAKk1G,GAAsB,MAEzB,EAAKC,IACP,EAAKA,EAAkBn1G,UACvB,EAAKm1G,EAAoB,MAEvB,EAAKC,KACP,EAAKA,GAAuBp1G,UAC5B,EAAKo1G,GAAyB,MAE5B,EAAKC,KACP,EAAKA,GAAuBr1G,UAC5B,EAAKq1G,GAAyB,MAGhC,EAAKtY,GAAqB,KAC1B,EAAK54D,EAAU,KACf,EAAKk5D,EAAS,KACd,EAAKwM,GAAkB,KACvB,EAAKgM,EAAe,KACpB,EAAK1wE,GAAe,MAEhB,EAAK22D,EAAT,cACE,WAAM,EAAKA,EAAkB53E,UAA7B,GArDY,OAsDZ,EAAK43E,EAAoB,KAtDb,OAyDV,EAAKgB,IACP,EAAKA,EAAY98F,UACjB,EAAK88F,EAAc,MAIrBzjD,GAAAmB,UAAMx6C,QAAAA,KAAAA,GA/DQ,UA0MV8mH,EAAA55D,GAAAA,SAAOrlB,EAAck/E,GAAAA,OAAA,IAAAA,GAAAA,EAA8B,IAMjD/kI,EAcIyuD,EAWDz5D,EA/B8C,cAAAk3B,GAAA,+BAEvD,GAAI,EAAK6mG,GAAmC2L,GAC1C,MAw2NK,IAAex4G,G1B33PZiJ,EA4BFi9B,EAyvBU44E,K0BmQlB,GAFMhlI,EAAO,EAAK+/D,GAAU,EAAKA,GAAUla,GAEvC,EAAKka,GAAU,EAAKA,GAAUla,EAAlC,cACE,WAAM,EAAK++E,SAAX,GATqD,OAYnD,WAAWrO,GAALA,EAAkC,UAAxC,GAZmD,OAYvD,GAAI,IACF,SAAAzoG,SAaA,GAVE,SACG9tB,IACEy8G,GAALA,EAA2B,UAErBhuD,EAAUA,WAohNpB,IAAMz5D,EAAa+uI,GAphNYkB,GAohNkC,GAC5DjwI,GAGAurE,GAxhN0B0kE,EAwhNjBjwI,EAxhNiB,EAC3B,EAAKk+H,GAAoB/0G,EAAO0nC,EAAc,QAAS4I,GACvD,EAAKsR,EAASla,IAIZk/E,IACoB7N,MACnB,EAAK3D,EAFV,cAGE,WAAWkG,GAALA,GAAN,GA7BmD,OAkC7C,KACR,EAAKhG,GAAOz1G,UADJ,aAlC6C,OAgCrD,OADOhpB,EAAAA,EAAAA,GACP,IAAM,EAAK4vI,SAAX,IAhCqD,QAiCrD,MAAM5vI,EAjC+C,KA+CzD8vI,EAAAI,GAAAA,SAAa5iD,GACXt4F,KAAK4pI,GAAetxC,CADD,EAcfwiD,EAAAF,OAAAA,SAAOO,GAAAA,OAAA,IAAAA,GAAAA,EAAuB,kBAAAj5G,GAAA,uBAElC,GAAI,EAAK6mG,GAAmC2L,GAC1C,MA2yNK,IAAex4G,G1B33PZiJ,EA4BFi9B,EAyvBU44E,K0B8TlB,WAAM,EAAKI,IAAoC,EAAOD,GAAtD,EANkC,WAQ9B,WAAW5O,GAALA,EAAkC,UAAxC,GAAJ,GAAI,IACF,SAAAzoG,SAGF,IAGM,EAAKiyC,IACP,EAAKmzD,GAAoBj1G,KACzB,EAAK8hD,EAAS,MAGX08C,GAALA,EAA2B,UAEvB,EAAK6Y,IAAe6P,GAEtB,EAAK7P,EAAWt3G,SAZhB,CAAJ,QAeE,EAAKy1G,GAAOz1G,SADJ,CA1BwB,SA2D9B8mH,EAAAM,GAAAA,SAAOL,EAA8BI,GAA9BJ,OAAA,IAAAA,GAAAA,EAA8BI,OAAA,IAAAA,GAAAA,EAAuB,IA6BxDE,EAqJiC1xF,EAAAA,EAArC,EACuB,IAArB,EAMkCJ,EAAAA,EAApC,EAzL4D,cAAArnB,GAAA,+BAS5D,OAJA,EAAK6mG,GAAmC2L,KAC1C,EAAK3L,EAAkCC,IAGrC,IAAWuD,GAALA,EAAkC,UAAxC,GAT4D,OAShE,OAAI,IACF,EAAAzoG,UAGE,OACF,EAAKomG,IAAe,EACfzX,GAALA,EAA2B,UAIvBsoB,IAA8C7N,OAChD6N,GAAwB,GAIrB3O,GAALA,GAKMiP,EAAe,EAAKvQ,GAAiB3sF,KAAI,SAAC2mB,GAAO,OAAAA,GAAA,IACvD,EAAKgmE,GAAmB,GACxB,IAAMplF,QAAQE,IAAIy1F,GAAlB,IA/B8D,UAkC9D,EAAKpuE,cACYq/D,GMjoCVpkE,cNqoCH,EAAKwoD,KACP,EAAKA,GAAgB18F,UACrB,EAAK08F,GAAkB,MAMrB,EAAK36C,IACP,EAAKozD,EAAkBl1G,KACvB,EAAKm1G,GAAuBn1G,MAI9B,EAAK63G,GAAoB7nG,OAKrB,EAAKgmG,KACP,EAAKA,GAAmBj2G,UACxB,EAAKi2G,GAAqB,MAGxB,EAAKF,KACP,EAAKA,GAAc9lG,OACnB,EAAK8lG,GAAgB,OAKnB,EAAK7lF,EAAT,cACE,WAAM,EAAKA,EAAQjgB,OAAnB,GAvE4D,OAwE5D,EAAKigB,EAAU,KACf,EAAKssE,GAAiB,KAzEsC,OAgF9D,IAAI,EAAKM,EAAT,cACE,WAAM,EAAKA,EAAY7sF,OAAvB,GAjF4D,OAsF9D,IAAI,EAAK0lG,EAAT,eACE,WAAM,EAAKA,EAAiBzxF,UAA5B,IAvF4D,QAwF5D,EAAKyxF,EAAmB,KAxFoC,QAwG9D,GAbI,EAAKK,IACP,EAAKA,EAAoBh2G,UACzB,EAAKg2G,EAAsB,MAKzB,EAAKV,IACP,EAAKA,EAAUt1G,UACf,EAAKs1G,EAAY,OAIKniB,GAAsB,YAC1C,EAAKvlC,EADT,eAEE,WAAM,EAAKA,EAAW1pC,UAAtB,IA1G4D,QA2G5D,EAAK0pC,EAAa,KA3G0C,QAiH9D,IAAI,EAAK2nD,EAAT,eACE,WAAM,EAAKA,EAAmBrxF,UAA9B,IAlH4D,QAmH5D,EAAKqxF,EAAqB,KAnHkC,QA2I9D,GArBI,EAAK+B,IAAe6P,GACtB,EAAK7P,EAAWgQ,gBAGd,EAAKjQ,KAAyB8P,IAChC,EAAK9P,GAAqBnzF,UAC1B,EAAKmzF,GAAuB,MAGzB8P,GACH,EAAK3P,GAA0BvnG,OAG7B,EAAK4lG,GuD11Cb3wG,SAAAA,GACE,EAAK4pG,GAAmB,EACxB,EAAKC,GAAa,EAClB,EAAKE,GAAW,EAChB,EAAKD,GAAc,CAJb,CvD21CgB9pG,CAAlB,EAAK2wG,GAGH,EAAK1wE,KACP,EAAKA,GyDz3CJouE,EAAiB,OzD43ChB,EAAK/sC,EAAT,eACE,WAAM,EAAKA,EAAetiD,UAA1B,IA5I4D,QA6I5D,EAAKsiD,EAAiB,KA7IsC,QAgK9D,GAhBI,EAAKzkB,IAEQic,GAAkB,EAAKjc,GAQlC,EAAKA,EAAOh7D,MACd,EAAKg7D,EAAO+mB,gBAAgB,OAC5B,EAAK/mB,EAAOoI,UAIZ,EAAKyD,EAAT,eACE,WAAM,EAAKA,EAAW1pC,UAAtB,IAjK4D,QAkK5D,EAAK0pC,EAAa,KAlK0C,QAiL9D,GAZI,EAAKuqD,IACL,EAAKvc,GAAa,EAAKuc,GAAgB/S,OACpC,EAAK+S,GgDjsBFljE,GhDksBN,EAAKkjE,GAAgBj0F,UAEvB,EAAKi0F,GAAkB,MAGzB,EAAKvc,EAAY,KACjB,EAAKC,GAAY,KACjB,EAAKia,EAAkB,KAEnB,EAAKzwB,EAAW,CAClB,IAAqC1vD,EAAAv6B,EAAfu6B,EAAK0vD,EAAU1vD,UAAAA,EAAAA,EAAAA,QAArCviD,EAAA,KAAAA,EAAA,SACE,IADF,EAAAA,EAAA,MACuB,EAAAgoB,EAAA,CAACw4B,EAAQC,MAAOD,EAAQE,QAAxB,YAArB,+BACgBnF,EAAOqS,cACnBrS,EAAOqS,aAAahhC,UAI1B,IAAoCu1B,EAAAn6B,EAAfm6B,EAAK8vD,EAAU9vD,aAAAA,EAAAA,EAAAA,QAApC,8BACayL,cACTrS,EAAOqS,aAAahhC,SAVN,CAmBhB,EAAKmkC,EAAQgrB,UAAUuoC,qBPkeNv7D,GAAuB,CAAC,EjB5vDtCorF,GAAsC9iH,SwB+xC7C,EAAK4gF,EAAY,KACjB,EAAKgY,EAAS,IAAeC,GAC7B,EAAKke,GAAmB,KAExB,EAAKhF,GAAwB,KAC7B,EAAKF,EAAwB,KAC7B,EAAKC,IAAqB,EAE1B,EAAKH,GAAsC,GAE3C,EAAKr2B,EAAqBQ,IAGrBq/B,GAALA,GAtN8D,OAuNtD,KACR,EAAKnK,GAAOz1G,UADJ,aAvNsD,OA2NhE,GAAI+mH,GAA6C7N,OAC5C,EAAK3D,GAAsB,EAAKxzD,EACnC,WAAW05D,GAALA,GAAN,GAFF,OA3NgE,KA0OlEqL,EAAAU,GAAAA,SAAgB5qG,GACd5wC,KAAK2oG,GAAa/3D,CADO,IAiBrButC,KAAAA,SAAKs9D,EAAqB7qG,EAAkB7Y,GAAlB6Y,OAAA,IAAAA,EAAY,KAAZA,EAA4B,IAOtD+7F,EACAhd,EA6BE8c,EACAiP,EAiBAC,EAkCEC,EA+BAC,EAEA7L,EAiDE8L,EAuBAC,EA4BA3kB,EAEA4kB,EAeDhxI,EA/OiD,cAAAk3B,GAAA,+BAE1D,GAAI,EAAK6mG,GAAmC2L,GAC1C,MAq/MK,IAAex4G,G1B33PZiJ,EA4BFi9B,EAyvBU44E,K0BgoBlB,OAXIrO,EAAiB,KACjBhd,EAAW,GAGbA,EAFE8rB,aAA2CviB,IAC7CyT,EAAiB8O,GACSriB,MAAiB,GAEhCqiB,GAAuB,GAKpC,IAAkB7S,GAAZ,EAAKa,GAAe,QAA1B,GAlB0D,OAqB1D,GAFA,EAAKA,GAAOz1G,WAEP,EAAK+hD,EACR,MAAM,IAAe75C,G1Bz5CbiJ,EA4BFi9B,EAswBU65E,M0B6nBlB,IAAI,EAAKrsB,EAAT,cAIE,OADA,EAAKA,EAAYD,EACjB,IAAM,EAAKyrB,IAAoC,GAA/C,GAhCwD,OAiFxD,GA5CI3O,IAAgB,EAAKjD,GACrBkS,EAAqBA,WAAa,OAADx5G,GAAA,sBACrC,OAAI,EAAKsnG,IAAgBiD,EAAzB,OACME,EACF,IAAMA,EAAez0F,UAArB,GADF,OAGA,MA68MG,IAAehc,G1B33PZiJ,EA4BFi9B,EAyvBU44E,I0BopBqB,KAiBjCW,EAAqBA,SAAOnzE,EAAWgkE,GAAqB,OAADtqG,GAAA,+BAE7D,OADE,OACF,IAAkB0mG,GAAZ,EAAKa,GAAe+C,GAA1B,GAF6D,OAG7D,WAAMkP,IAAN,GAH6D,OAI7D,WAAMlzE,IAAN,GAJ6D,OAK7D,WAAMkzE,IAAN,GAL6D,OAMzD/O,GAAkB,EAAKx0E,IACzBw0E,EgD7gCDx0E,EhD6gC4B,EAAKA,GAP2B,OASrD,KACR,EAAKsxE,GAAOz1G,UADJ,OATqD,KAc7D,SACe,MAAb4c,GAAqB+7F,IACvB/7F,EAAY+7F,EAAerjD,gBAE7B,EAAKqf,GAAa/3D,EAClB,EAAKs5F,IAAe,EAIpB,EAAKj9D,cAA2Bq/D,GM/7C3B5lE,YNk8CDimE,EAAgB,CAClB50G,EAAW40G,EgD34CH9c,EhD04CU,aAEb,GAAK93F,EAAL,cACL,WAAM4jH,GAAmB,WAAa,OAADz5G,GAAA,sBACxB,WAAW8qG,GAALA,EAAoBrd,GAA1B,GAAX53F,EAAW,IADwB,UAElC,kBAFH,GApFsD,OA0FxD,GADM6jH,IAAiBjP,EAClBA,EAsBE,CAGUta,GAAfsa,EAAqC,GACrC,EAAKtb,EAASsb,EAAerT,WAJxB,cAfY,WAAWuT,GAALA,EACnBld,EAAU/+E,EAAW7Y,GAA8B,GADtC,IAjGqC,SAiGtD40G,EAAiB,MAGfA,EgDx9CDn0D,GAAa,EhDy9CG65C,GAAfsa,EAAqC,GACrC,EAAKtb,EAASsb,EAAerT,WAC7BqT,EAAeljI,QAKfkjI,EgDh7BMnb,EhDg7ByB5gE,OAAM,WAAO,KAE5C,EAAKygE,EAAS,IAAeC,GA9GuB,QAoIxD,OAZMuqB,GAAsBlP,EAEtBqD,EAAkBtiG,KAAK6rB,MAAQ,IAIrC,EAAK83D,EACDsb,EAAiBA,EAAerT,WAAa,IAAehI,GAEhE,EAAK1B,EAAYD,EACjB,EAAKE,GAAY93F,GAAY,KAEzB8jH,EACF,IAAMF,GAAmB,WAAa,OAADz5G,GAAA,YAEnC,WAglCFg6G,SAAAA,EAA6BnkH,GACjC,IAAMklE,EASArsD,EACF28F,EAwCE3lF,EAYAjF,EA/DqC,OAAAzgB,GAAA,2BACrC+6D,EAA6C17C,GAS7C3Q,EAAYlD,KAAK6rB,MAAQ,IAC3Bg0E,GAAa,EAX0B,EAatC3rD,EAbsC,EAapBuuC,GAAgB,CACrC3yC,GAdyC,EAczBsyC,EAChBrrD,QAASA,SAACnxC,GACHijD,GAhBkCA,EAgBzBjjD,EADA,EAGhB8jD,GAAaA,WAAU,EAIvBY,oBAAqBA,WACnB,IAAMxjD,EAAqB83G,GMpmFdjmE,qBN6kF0B,EAyBlC4G,cAAcz4C,EAHoB,EAKzC4qD,QAASA,SAAC9rD,GA3B+B,EA4BlC25C,cAAc35C,GM7mFP4yC,oBN8mFR5yC,EAAE52B,MACF6wI,IACFA,GAAa,EA/BwB,EAkChClc,EsCxmFNzd,EtCsmFalmE,KAAK6rB,MAAQ,IACL3oB,EANR,IA3ByB,EAuCtCgxC,EAAWhwD,UAvC2B,EAuCZumC,EAAQ+qB,KAYjCt7B,EAAU,CACd1nC,GAAI,EACJjb,SAAU,MACVgxD,kBAAmB,EACnBjC,SAAS,EACTnM,MAAO,KACPC,MAAO,KACP11B,UAAW,IACX2jC,sBAAsB,EACtBC,oBAAoB,EACpB1L,cAAe,KAEX3H,EAAS,CACbziC,GAAI,EACJ20C,WAAY,KACZ/J,QAAS,KACT8yC,mBAAoBA,WAAM,OAAAl4C,QAAQ7J,SAAR,EAC1BmZ,aAAc,KACdj9B,SAAUA,EAAgC04B,GAAa14B,GAAY,GACnE4nB,OAAQ5nB,EAAgCw4B,GAAUx4B,GAAY,GAC9D82B,WAAW,EACX0D,SAAU,GACVh1B,OAAQ,IAAI/K,IACZvtB,SAAU,MACV2vD,iBAAkB,KAClBr1C,MAAO,KACP7iB,KAAMugG,EAAYz7C,GAClBwS,SAAS,EACTqD,eAAgB,KAChBypC,iBAAkB,KAClB71C,MAAO,GACPx7C,QAAQ,EACRs7C,cAAe,KACfC,kBAAmB,KACnBkH,cAAc,EACd4tC,eAAgB,KAChBnrC,qBAAsB,KACtBupC,UAAU,EACVhzC,eAAe,EACfsG,cAAe,IAAIh/B,IACnB8yE,qBAAqB,IAEhB9zC,cAActgC,IAAyBmxB,GAC1CM,EAAO5qB,SAAU4qB,EAAOhD,SACxB5nB,EAAS0S,WAAW,WACtBkY,EAAOjmD,KAAOugG,EAAYx7C,EAC1BmG,EAAQC,MAAQlF,GAEhBiF,EAAQE,MAAQnF,EAnGyB,EAsGtCi/B,ENlnFAvJ,GMknFyCx0E,EAC9C,IAAsB60E,GAvGqB,EAuGhCkJ,EACP,CAACh6B,GAAmC,IADxC,IAEA,IAzG2C,EAyGhCg6B,EAAWV,GAzGqB,EAyGTnL,GAAlC,EAzG2C,IAhlC1BmmE,CAALA,EAAkCnkH,GAAxC,EAFmC,MAGlC,gCAHH,IAUA,IAAM4jH,GAAmB,WAAa,OAADz5G,GAAA,sBACnC,WgDx8BCwjB,QAAQw6B,KAJErwB,ChD48BL88E,EgD38BLpb,GhD28BKob,EgD18BLnb,IhD08BD,GAGA,EAAKhB,GAAiBmc,EgD77ChBnc,EhD87CSmc,IAAAA,EAAAA,EgD15CrB,EAAKlc,IAAmB,EhD05ClB,EAAKvsE,EgDz5CJ,EAAKA,EhD05CN,EAAKm1D,EAAYszB,EAAetT,KANG,UAOlC,iBAPH,IA/IsD,QAwJtD,GAAK,EAAKkQ,EAAV,eACE,WAAMoS,GAAmB,WAAa,OAADz5G,GAAA,YACnC,WAAWutG,GAALA,GAAN,EADmC,MAElC,qCAFH,IAzJoD,QA+JtD,WAAMkM,GAAmB,WAAa,OAADz5G,GAAA,YACnC,WAAMyqG,EgDp+BAnb,EhDo+BN,EADmC,MAElC,iBAFH,IA/JsD,QA4LtD,OAxBA,EAAKr5D,EAAUw0E,EAAejwD,mBAC9B,EAAK0zC,GAAoBuc,EgDn4CjBvc,EhDo4CJ,EAAKlsE,GAAW,EAAKA,EAAQ0X,iBAAmB,EAAKma,GACvD,EAAK7xB,EAAQ0X,gBAAgB,EAAKma,GAEpC,EAAK26C,GgD/5CXyrB,SAAAA,GAEE,OADA,EAAKvrB,IAA2B,EACzB,EAAKF,CAFU,ChD+5CoByrB,CAAfxP,GACvB,EAAKxb,GAAmBwb,EgDl5ChBxb,IhDm5CF2qB,EACFnP,EgDj9CI3c,KhDm9CN,EAAKA,GAAgC8rB,GAEnCF,GAAgB,EAAK7lE,GAAmC,UAAzB,EAAKA,EAAOhnC,WAkFrDqtG,SAAAA,GACE,IAAqCzyF,IAAAA,EAAAv6B,EAAfu6B,EAAK0vD,EAAU1vD,UAAAA,EAAAA,EAAAA,QAArC,8BACc7B,QACVF,EAAQE,MAAM6zD,oBACd/zD,EAAQE,MAAQ,MAGhBF,EAAQx1B,UADNw1B,EAAQC,OAASD,EAAQC,MAAMz1B,UACbw1B,EAAQC,MAAMz1B,UAEd,EAGxB,EAAKinF,EAAU1vD,SAAW,EAAK0vD,EAAU1vD,SAAS52B,QAAO,SAACqwG,GACxD,OAAOA,EAAEv7E,KADqD,GAZzC,CA7EZu0F,CAALA,GAEA,EAAKxqH,UAAU,yBAAyB,IAI1C,EAAKgwD,WgDj5CXy6D,GAEE,OADA,EAAKxrB,IAAsB,EACpB,EAAKjvC,CAFK,ChDi5CoBy6D,CAAf1P,GAClB,IAAMgP,GAAmB,WAAa,OAADz5G,GAAA,YACnC,WAAM,EAAK0/C,EAAWV,GAAO,EAAKnL,GAAlC,EADmC,MAElC,qBAFH,IA5LsD,QAiOtD,QA/BMgmE,EAAoBpP,EgDl+ClB5b,IhDo+CD,EAAKA,IACN,EAAKA,IAAsBgrB,IAC7B,EAAKjrB,EgD99CfwrB,SAAAA,GAEE,OADA,EAAKtrB,IAAuB,EACrB,EAAKF,CAFM,ChD89CwBwrB,CAAf3P,GACnB,EAAK5b,GAAqB4b,EgDv+CtB5b,EhDw+C2C,mBAApC,EAAKD,EAAYl1D,kBACVqpB,GACZ,iCACA,2DACJ,EAAK6rC,EAAYl1D,gBAAkB2gF,WAAO,GAEE,mBAAnC,EAAKzrB,EAAY70D,iBACVgpB,GACZ,gCACA,0DACJ,EAAK6rC,EAAY70D,eAAiBugF,WAAO,GAEM,mBAAtC,EAAK1rB,EAAY31D,oBACV8pB,GACZ,mCACA,6DACJ,EAAK6rC,EAAY31D,kBAAoBshF,WAAO,IAM5CrlB,EgD55CZslB,SAAAA,GAEE,OADA,EAAKxrB,IAA4B,EAC1B,EAAKD,CAFiB,ChD65CJyrB,CAAf/P,GACAqP,EAAoBrP,EgDt6ClB/a,GhDu6CR,IAAM+pB,GAAmB,WAAa,OAADz5G,GAAA,YACnC,WA2uBFy6G,SAAAA,EAAW3M,EAAiBgM,EAAmB5kB,GAYnD,IAAMv7D,EA+CF+gF,EACAC,EACAlI,EASImI,EAEe,IAArB,EAkCIC,EAeAnsG,EAeIy3D,EACF20C,EAIEC,EACAC,EAMAtsG,EAiBFusG,EAgDFrxC,EAOEsxC,EAIAC,EAMID,EAtO4D,OAAAl7G,GAAA,+BAUnEuwF,GAVmEA,EAU7C,QAErB52D,EAZkE,EAY9Cka,EAZ8C,EAanEi0D,EAAsB,IAAgBjU,GAAmB,CAC5DhkB,GAASA,WAAmBt3C,OAAboB,EAAapB,YAAAA,EAC5Bu7D,GAAgBA,WAAmBsnB,OAAbzhF,EAAayhF,mBAAAA,EACnCjrC,GAASA,SAAC12C,GAAWE,EAAapB,aAAekB,CAA9B,EACnBq2C,GAAcA,SAAC7zF,GAAY09C,EAAa6oC,aAAevmF,CAA9B,IAItB4xH,GArBmEA,EAqB3Cl0E,EAAcm0E,GAxjD7CuN,SAAAA,EAAY1rH,GACNA,EAAO08F,MAAM54D,SACVy2E,GAALA,GA/BoB,MAgCpBoR,EAhCO3iD,IAgCP2iD,EA/BK3iD,EAAY,IAAgB6K,GA+BjC83C,EA9B0CznE,EA8B1CynE,EA7BS5T,GA6BY/3G,EAAO08F,OAA5BivB,EA1BSjU,IA0BTiU,EAzBOjU,E0Bm/CJ1uC,G1B19CH2iD,EAzB8C3iD,KA2BzCuxC,GAALA,EALgB,CA4jDbmR,CAzBmEA,EAAA,EAyBlDplF,GAzBkD,EA2BnEwyE,GA3BmE,EA2BvCxyE,EAAQg1D,sBA3B+B,EA4BnEyd,GA5BmE,EA4B3CzyE,EAAQk1D,kBA5BmC,EA6BnEwd,GA7BmE,EA6BzC1yE,EAAQu1D,iBAE1BqnB,GA/B2D,EA+BtC17B,EAAUxK,qBA/B4B,EAgC/D12C,EAAQy1D,eAhCuD,EAiC/Dz1D,EAAQ01D,cAjCuD,EAmCnEiD,EAAYltG,MAAK,SAACgkC,EAASyzD,EAAaC,GAnC2BxjD,EAgzJ9DuhD,GAhzJ8DvhD,EAqzJ9D6xE,GAjxJY/hF,GApCkDkQ,EA0zJpD6xE,E4Cv+NR12B,G5C4+NPqlC,GA/zJmExgF,EAoClDlQ,GA2xJ6B,OApBpC,IAAAyzD,GAAAA,OAAqB,IAAAC,EAAa,EAAbA,EAxwJwB,IAnCY,EAsCnEwV,EAAYl1D,gBAAgBC,GAtCuC,EAuCnEi1D,EAAY70D,eAvCuD,EAuCnC9C,IAvCmC,EAyCnEwwE,EA2pCP8T,SAAAA,GA+BE,OAAO,IAAgBC,GAAgB,EAAKrkC,EAzBpBxjC,CACtB+mC,GAAqBA,WAAM,OAPP,EAOY0sB,EAPZ,EAO6BA,EAAU1nC,KAAY,CAA5C,EAC3BvvE,qBAAsBA,WAAM,OARR,EAQay+F,EAAYz+F,sBAAjB,EAC5BuoF,GAAiBA,WAAM,OATH,EASQA,IAAL,EACvBc,GAAmB,EAAK6tB,EACxB/rD,GAAW,EAAKsyC,EAChBrrD,QAASA,SAACz5D,GAAU,OAAKurE,GAZLA,EAYcvrE,EAAd,EACpBo0E,QAASA,SAAC5qD,GAAU,OAbA,EAaKy4C,cAAcz4C,EAAnB,EACpB64E,GAAmBA,SAAC/nG,EAAWq9C,GAEf/R,IAAAA,EAAVtrC,EAAUsrC,UAAqBC,EAAVvrC,EAAUurC,QAAgBn0C,IAAAA,EAAPimD,EAAOjmD,KA6iHvD,GA5iHQ,EAAAimD,EAAOhD,OAAOp2C,SAAS,KA4iH3BkuC,GAA2B2I,GAAM,CAInC,GAjkHoBu9F,EAikHXrU,EAAW,CAjkHAqU,EAkkHbrU,EAAUpV,KAEf,IAAMtjF,EAAoCsuD,GApkHxBy+C,EAokHKpU,EAA+B9xF,IApkHpCkmG,EAskHV7xC,KAtkHU6xC,EAwkHX5nE,EAAO8E,QACC,MAAbjqC,GACY,EAAZA,GA1kHgB+sG,EA2kHXrU,EAAU1nC,KAAYhxD,GA3kHX+sG,EA6kHXrU,EAAU1V,GAAahjF,EAZZ,CAefijG,GAhlHe8J,EA6jHe,CAuB/Bz6I,GACD0B,IADY4wB,KACZ5wB,IAAI,QAAS6E,GACb7E,IAAI,MAAO8E,GACX9E,IAAI,cAAe6yC,GACnB7yC,IAAI,UAAWg5I,GAxlHED,EAylHjB1wE,cAA2Bq/D,GMjlOjBllE,kBNklOqClkE,GA5kHR,EAK1CqgH,GAAuBA,SAAC9lG,EAAU2b,IAC1BiuD,EAAejuD,ELplHbiuD,KKgkHU,EAqBO8pC,IyCpnH/B0sB,SAAAA,EAAsBx2D,EAAc5pE,GAClC,IAAM+4G,EAtBRsnB,SAAAA,EAAqBrmG,GACnB,IAAI++E,EAAmB,EAAKjf,EAAmB7nG,IAAI+nC,GASnD,OARK++E,IACHA,EAAmB,CACjBC,GAAwB,GACxBH,GAAgB,KAChB7+E,YAAaA,GAEf,EAAK8/D,EAAmB3yG,IAAI6yC,EAAa++E,IAEpCA,CAVyB,CAuBzBsnB,CAALA,EAA0Bz2D,EAAa5vC,cA2J3CsmG,SAAAA,EAA6BvnB,GAI3B,IAFM9e,EADe,EAAKF,IACUgf,EAAiB/+E,eAEP,EAAxBigE,EAAe94G,OAAY,CAC/C,IAAMsgG,EAAcwY,EAAe,GAAGjuG,MAChCohF,EAAY6sB,EAAeA,EAAe94G,OAAS,GAAG8K,IACtDs0I,EAAqBxnB,EAAiBC,GAC5CD,EAAiBC,GACfunB,EAAmBjrH,QACf,SAAC2jG,EAAep3H,GAQd,QANKo3H,EAAcj5G,UAAYyhF,GAC5B5/F,EAAQ,EAAI0+I,EAAmBp/I,QAC/Bo/I,EAAmB1+I,EAAQ,GAAGme,UAAYyhF,GAIzCw3B,EAAcj5G,UAAYotE,EARN,GANe,MAqB/C2rC,EAAiBC,GAAyB,EAzBC,CAxJxCsnB,CAALA,EAAkCvnB,GAE5BynB,EAAoB,CACxB52D,GAAcA,EACd5pE,SAAUA,GAOa,IAHnBygI,GADA3nB,EAAkBC,EAAiBC,IACCl7F,WACtC,SAACm7F,GAAmB,OAAAA,EAAcj5G,UAAYA,CAA1B,KAKtB84G,EAAgB/2H,OACZ0+I,EAFD3nB,EAAgB2nB,GAAmBzgI,UAAYA,EAAY,EAAI,EAEvBwgI,GAE3C1nB,EAAgBp4H,KAAK8/I,EAtBqB,CzCqnHhBJ,CAtBN,EAsBX1sB,GAAuC9pC,EAAc5pE,EAHZ,EAMlDkiG,GAAqBA,SAACloE,EAAahvB,GACrBm5D,IAAAA,EA1BMA,EA0BNA,ENzvChB,GALK,EAAKzpB,EAAQmpB,yBAA0B,EAAK/I,GAK5C,CLltEA92B,QADAD,SKmtEuCj4C,SMyvCDkuC,GNzvC3C,CAIM09B,EAAO,IAAegpE,GACDrnH,GMovC6BrO,INlvCpDk1B,EAAc,EAClB,IAAwBz6C,IAAAA,EAAAksB,EAAL+lD,EAAKjyE,MAAAA,EAAAA,EAAAA,QAAxBkE,EAAA,KAAAA,EAAA,SACEu2C,GADFv2C,EAAAlE,MACsBtE,OAEtB,GAAmB,GAAf++C,EACF,EAAO+H,QAAQ7J,cADjB,CAKA,IAFMuiG,EAAe,IAAIz9I,WAAWg9C,GAChC3gD,EAAM,EACckG,GAAAA,EAAAksB,EAAL+lD,EAAKjyE,OAAAA,QAAxBkE,EAAA,KAAAA,EAAA,SAAAA,EAAAA,EAAA,MACEg3I,EAAax5I,IAAI1B,EAAMlG,GACvBA,GAAOkG,EAAKtE,OAETu7E,GAALA,EAAiB,OAAQikE,GACzB,EAAO,EAAK9nE,CAVZ,CAXA,MACE,EAAO5wB,QAAQ7J,UMwvCb,OAAO,CADsC,EAG/CwoE,cAAeA,SAAC1hE,EAAQ1a,GAAS,OA5Bb,EA4BkBo8E,cAAc1hE,EAAQ1a,EAA3B,GA5Bb,CA3pCOw1G,CAzC2CA,GAAA,EA0CnE9T,EAAiB/3G,UA1CkD,EA0CnCumC,EAAQgrB,WA1C2B,EAgDnE4lD,EAAkCkL,GAhDiC,EAqDnEhnE,cAA2Bq/D,GMn2EvB5kE,cNy2ELk1E,EAAiBZ,EA3DmD,OAwEtE,KATArH,EA/DsE,EA+DjDhL,E4C5uEX12B,I5C6uEa2pC,IACrBA,EAg6IK1N,GAj+I+DmJ,GAAAA,EAk+I1DvnB,EAAYv4D,gBAEjB,MA95IDukF,EAA6B,GAEd,EAAA1tH,EAAA,EADrBytH,EAAalI,GAAiBiI,GACG90F,MAAO+0F,EAAWh1F,QAA9B,YAArB,gCACiBlF,EAAOqS,cACpB8nF,EAA2B3+I,KAAKwkD,EAAOi7C,sBAG3C,KAAwC,EAApCk/C,EAA2Bl+I,QAA/B,cAEE,WAAM8mD,QAAQE,IAAIk3F,GAAlB,GA/EoE,OA8DxE,IAmBUD,GAA8C,GAAhCA,EAAW5mF,kBAnBnC,cAmEA,GAjIwE,EAmF/D/R,GAnF+D,EAmF/CA,EAAQm6F,wBAnFuC,EAoFjEn6F,EAAQm6F,uBAAuBxB,KAG7BxjC,EAAUsK,eAvFqD,EAuF/BxrD,EAAQgrB,UAAUugC,gBAC/ChwF,EAAW,oMAxFiD,EA8F/Dm2G,GuDh+EXyU,SAAAA,EAAcC,GACZ,EAAKvb,EAAcub,EAGf,EAAKvb,EACH,EAAKH,GAAuB8O,GAC9B,EAAK9O,EAAsB6O,GAClB,EAAK7O,GAAuBkP,KACrC,EAAKlP,EAAsBiP,IAGzB,EAAKjP,GAAuB6O,GAC9B,EAAK7O,EAAsB8O,GAClB,EAAK9O,GAAuBiP,KACrC,EAAKjP,EAAsBkP,GAdP,CvDi+EJuM,CA/FoD,EA+FjEzU,EA/FiE,EAgG7DxwB,EAAUsK,cAhGmD,EAgG9BxrD,EAAQgrB,UAAUugC,gBAG/CqxB,GAnG2D,EAmGtC17B,EAAUxK,qBAnG4B,EAoG/D12C,EAAQy1D,eApGuD,EAqG/Dz1D,EAAQ01D,c4CzzEnB2wB,SAAAA,EAAe5wB,EAAgBC,GACxB,EAAKxU,EAAUxK,qBAAqB/C,MACvC,EAAKwO,EAAkBsT,EACvB,EAAKrT,EAAgBsT,EAHoB,C5C2zErB2wB,CAvGkD,EAuGnE7U,EAvGmE,EAwG/DxxE,EAAQy1D,eAxGuD,EAwGlCz1D,EAAQ01D,cAExCkvB,EAAgBA,SAACnsG,GA1GiD,EA2GjE04F,EAu3BTmV,SAAAA,EAAe7tG,GAGb,OAAO,IAAgB8tG,GACnB,EAAK3oE,EACL,EAAKsjC,EACL,EAAKlhD,EAAQgrB,UACbvyC,GACA,WARoBi9D,EA28Gfo8B,ImCrzNJx3B,GnC02GmB5E,EA48GjBo8B,ImCtzN+B,GnC02Gdp8B,EA88Gf87B,GA98Ge97B,EA+8GjB87B,EAAiBnqC,KA/8GAqO,EAi9Gfi8B,GAIF+J,GAr9GiBhmC,EAQd,IACN,SAACr5E,GAAU,OATS,EASJy4C,cAAcz4C,EAAnB,GATS,CAv3BAiqH,CA3GgDA,EA2GjC7tG,GA3GiC,EA4GjEq5F,GA04BT0U,SAAAA,EAA+B/tG,IASvBguG,EAAiB,IAAgB1kB,GACnC,EAAKxJ,GALc,EAAK5kB,KAAwB,EAAZl7D,IAOzBxd,iBAAiB,SAAS,SAACoB,GAGnCm6G,GAfiCA,EM/xGrB5mE,sBN6yGFvzC,EAAAuc,OAFmC,IAOpD6tG,EAAexrH,iBAAiB,QAAQ,SAACoB,GAGlCm6G,GAtBiCA,EM9xGtB3mE,qBNmzGDxzC,EAAAuc,OAFkC,IAOnD6tG,EAAexrH,iBAAiB,QAAQ,SAACoB,GAEvC,IAAMuc,EAASvc,EAAA,OAECA,EAAAy0E,UAIT0lC,GAlC+BA,EM/xGrB5mE,sBNk0GyCh3B,GACnD49F,GApC+BA,EM9xGtB3mE,qBNm0GyCj3B,GAXR,IAgBnD,IAAM8tG,EAAU,IAAgB5oB,GAAwB,EAAKlgD,GAK7D,OAJA8oE,EmCh7GKtsC,EAAWrhF,InCg7GD0tH,GACX,EAAKztB,IACP0tB,EmCl7GGtsC,EAAWrhF,InCk7GC,EAAKigG,IAEf0tB,CA/CiC,CAz4B7BF,CA7G6DA,EA6G9B/tG,GAQnC4iG,GArHiEA,EAqH1C33E,EAHFj5D,KAAK4G,IAlHuC,EAmH7D6vG,EAAUtK,cAnHmD,EAoH7D52C,EAAQgrB,UAAUwtB,iBAVQ,IAc3Bx4C,EAAQgrB,UAAU+mC,yBAET,OADbt5E,EAzHkE,EAyHjD+3D,KAzHiD,EA0HxC0Q,EAAUzoE,YACtCA,EA3HoE,EA2HnDyoE,EAAUzoE,WAE7BmsG,EAAcnsG,IAIX+jG,EAAL,cAME,IAvIsE,EAuI7Dx8E,EAAQgrB,UAAU+mC,uBAA3B,cAaoB,OAZZ7hB,EAxI8D,EAwI9CgR,EAAUxK,qBAC5BmuC,EAzIgE,EAyI7Cr0C,IAzI6C,EAyI1B5yB,EAAO2uB,YAC1B,MA1I6C,EA0I3DiE,IA1I2D,EA0IhC0Q,EAAUzoE,YAC5CosG,EA3IkE,EA2I/C3jC,EAAUzoE,WAEzBqsG,EAAiB50C,EAASyE,KAC1BowC,EAAe70C,EAASwB,KAC1BmzC,EAAcC,EAChBD,EAAcC,EACLD,EAAcE,IACvBF,EAAcE,GAEE,IAs4HlB4B,SAAiBlC,EAAgB30G,GAErC,IAAM82G,EAEAC,EAOAC,EAkBAlqD,EACAC,EA9BqC,OAAA9yD,GAAA,2BAErC68G,EAAcnC,EAAe/0F,MAE7Bm3F,EAAcpC,EAAe90F,MAO7Bm3F,EAAkBA,SAAOt8F,EAAQ1a,GAMrC,IAAMk6E,EACArkB,EAKAohD,EAZwC,OAAAh9G,GAAA,0BACzCygB,EAIL,IAAMA,EAAOi7C,qBAAb,GAHE,EAAA95D,OAAO,OAKHg6D,GADAqkB,EAAOx/D,EAAOqS,aAAa4gD,GAAmB3tE,IACjCk6E,EAAKt5G,OAAOhF,MAAQ,OAKjCq7I,EAAUphD,EAAIltD,UAGpB,EAAA9M,OAAOo7G,IANE,EAAPp7G,OAAO,KATqC,KAkBzB,IAAMm7G,EAAgBF,EAAa92G,GAAnC,IA7BoB,QA6BrC8sD,EAAiB,IACA,IAAMkqD,EAAgBD,EAAa/2G,GAAnC,IAKD,OALhB+sD,EAAiB,MAKyB,MAAlBD,EAC5B,EAAAjxD,OAAOlhC,KAAK4G,IAAIwrF,EAAgBD,IACL,MAAlBC,EACT,EAAAlxD,OAAOkxD,GACoB,MAAlBD,EACT,EAAAjxD,OAAOixD,GAEP,EAAAjxD,OAAOmE,EA1CkC,IAt4HV62G,CACzBlC,EAAgBI,GADF,GApJkD,OAoJ9DpsG,EAAY,IAElBmsG,EAAcnsG,GAtJsD,OAyJjE0nG,GAzJiEA,EAyJlDsE,GAAsC,GACnC,EAAyB,GA1JsB,OA2LxE,OA3LwE,EA6JnEtT,EAAU/kC,QA7JyD,EAkK3C+0C,KAAgBp2H,MAAK,SAAC9D,GAAQy0C,OAAFz0C,EAAEy0C,MAAAA,OAGnDspF,EA63I8BgC,GAliJkCC,EAmiJ/D/lC,EAAU9vD,YAniJqD61F,EAoiJ/DzU,GApiJ+DyU,EAqiJ/DxU,GAriJ+DwU,EAsiJ/DvU,IACK,IAAM,OA9qBN13B,GAz3H0DksC,EAw3H7ChuB,EsCxlMfxc,EtCy4EJsoC,GAAyC9pC,GAG3CupC,IACwCO,GAqgJhDmC,SAAAA,EAAyBC,EAAa91F,GAGpC,GChpOO+1F,GDgpOH,EAAKrnF,EAAQ40D,aACf,OAAO,EAET,GCjpOQ0yB,GDipOJ,EAAKtnF,EAAQ40D,aACf,OAAO,EAMT,IAAM2yB,EACYz5F,GAAU,EAAKkS,EAAQg1D,uBAIzC,OAFMwyB,EAA2B15F,GAAUwD,EAAWxkD,UCtpO1B26I,GDwpOxB,EAAKznF,EAAQ40D,aAEMlkE,GACjB82F,EACAD,GClpOsB1yB,GDqpOxB,EAAK70D,EAAQ40D,eACVwyB,IAmBCM,EAA4B55F,GAAUs5F,EAAYt6I,UAGxC4jD,GAAsB82F,EAAYD,KACjC72F,GAAsBg3F,EAAaF,KAG5CjsH,EAAW,kCACd,EArDyC,CAzBrC4rH,CAzpJ6DQ,EA6K1ClD,EA6+IT/0F,MA7+IyBs1F,KA7K0B2C,EA2pJ/DniB,IAAiB,GA3pJ8CmiB,EA6pJ7DniB,IA7pJ6DmiB,EAgqJ/DtlD,EAAe8rC,mBAAkB,GAInC6S,GApqJiE2G,IAAAA,EAsqJjEniB,IAAiB,GAp/IlBwf,IAlLkE4C,EA20K5D5nF,EAAQgrB,UAAUg6B,kBA30K0C4iC,EA20KjBC,QAxpK7BxkC,GAnL8C,EAmL/DmuB,EAAkCwT,GAClC/D,GApL+DA,KA2LxE,IA3LwE,EA2L7DzP,EAAiBlgI,MAAM2tH,GAAlC,IA3LwE,UA6L/Dj/D,EAAQq0D,IAAI72D,UA7LmD,EA8LjEm7D,EAAYj2D,SACZg6E,GA/LiEA,IAoMnE5F,GApMmEA,GA6MnEC,GA7MmEA,GAAA,EA+MhD71B,EAAU1vD,SAASmF,MAAK,SAACs0E,GAAQpvE,OAAFovE,EAAEpvE,OAAAA,MAMnD83C,EArNkE,EAqNpDA,OArNoD,EAuNlD3zC,EAAQgrB,UAAUqnC,UAvNgC,EAwN/DryD,EAAQgrB,UAAUqnC,SAAS70D,SAxNoC,EAyN/D0jD,EAAUs+B,oBAzNqD,EA0N/Dx/E,EAAQgrB,UAAUqnC,SAASK,YA1NoC,EA2N/D1yD,EAAQgrB,UAAUioC,0BACnBgyB,EAAeA,WAAM,OAAK9F,GA5NsCA,EA4N3C,EA5N2C,EA6NjEnO,EAAkBh1G,EAAO0nC,EAAc,aAAcuhF,IAEvDtxC,IACGuxC,EAAkBA,WAAM,OAAKrF,GAhOmCA,EAgOxC,EAhOwC,EAiOjE7O,EAAkBh1G,EACnB0nC,EAAc,aAAcwhF,GAC3BrF,GAnOiEA,GAAA,EAoO7D3+B,EAAU4mC,UACiC,EArOkB,EAqO3D9nF,EAAQgrB,UAAUqoC,uBACnB4xB,EAAeA,WACnB,IAAM8C,EADyB,OAAAh+G,GAAA,sBAG7B,OAFIg+G,EAvO0D,EAuOzCnqE,EAAO0sB,SAvOkC,EAuOlB1sB,EAAO2uB,aAChDhzE,MAAMwuH,IACLA,GAzO0D,EAyOxC/nF,EAAQgrB,UAAUqoC,sBAzOsB,EA0OvD2d,EAAkB10G,GACnBonC,EAAc,aAAcuhF,GAI5B,IA/OwD,EA+O7C10D,QA/O6C,EA+OhC2wB,EAAU4mC,SAAlC,IANN,OAzO8D,EA8OvD9T,GACD,IATuB,SAtOiC,EAmP7DhD,EAAkBh1G,EACnB0nC,EAAc,aAAcuhF,IApPkC,EAsP/DjU,EAAkBh1G,EAAO0nC,EAAc,SAAS,WAtPe,EAuP7DsiB,KAvP6D,EAuPnDguD,IAvPmD,EAuP3B9yB,EAAU4mC,QADQ,MAtPS,EA4P/D3U,GA5P+D,EA6PjEA,EAAW+C,kBAAkBviC,GA7PoC,EAgQnEo+B,IAAe,EAhQoD,SA3uBvDyS,CAALA,EACF3M,EAAiBgM,EAAmB5kB,GADxC,EADmC,MAGlC,cAHH,IAjOsD,SgDl2C5D+oB,SAAAA,GACE,GAAI,EAAKluB,EACP,IAA4BA,IAAAA,EAAA7iG,EAAL6iG,EAAKA,GAAAA,EAAAA,EAAAA,QAA5B,gCAIF,EAAKA,EAA6B,IANG,ChDukDlBkuB,CAAfxT,GAEI,EAAK9c,IrB90CgB38D,MqB+0CAi6E,GAAU,EAAKtd,K0Bp/C9CuwB,SAAAA,EAAmB1nG,EAAK3gB,GACjB,EAAKg+C,GAAY,EAAKylB,aAAwBxmE,qBAK/C,EAAKsmE,GACP,EAAKvlB,EAAOuV,YAAY,EAAKgQ,GAE/B,EAAKA,EAAkCyB,GAAoBrkD,EAAK3gB,GAChE,EAAKg+C,EAAOj7D,YAAY,EAAKwgF,GAC7B,EAAKvlB,EAAO8lB,uBAAwB,EAXJ,C1Bq/CFukD,CAAxB,EAAK7W,EACD,EAAK3Z,EAAW,EAAKC,IA7FtB,cA7IiD,QAyItD,WAAM8rB,GAAmB,WAAa,OAADz5G,GAAA,YAEnC,WAksCFm+G,SAAAA,EAAgBrQ,EAAiBj4G,GAQrC,IAAM8jC,EAMFykF,EAmBExL,EAKEyL,EAOAC,EAuBA14F,EAiBJ24F,EAqDEC,EA8EA/xE,EAUAm9B,EAMEsxC,EAIAC,EAWAsD,EAvPuC,OAAAz+G,GAAA,+BAoG/C,GAnGKuwF,GAD0CA,EACpB,cAOrB52D,EARyC,EAQrBka,EARqB,EAU1CuzD,EAAY,IAAgBsX,GAAkB/kF,GAI/CykF,GAAW,EAdgC,EAe1CxV,GAAiB3sI,MAAK,WACzBmiJ,GAAW,CADoB,IAIV,MAnBwB,EAmBtC33C,IAnBsC,EAoBxC2gC,EAAU1V,GApB8B,EAoBZjrB,IApBY,EAuB1CqhC,EAAsB,IAAgBjU,GAAmB,CAC5DhkB,GAASA,WAAmBt3C,OAAboB,EAAapB,YAAAA,EAC5Bu7D,GAAgBA,WAAmBsnB,OAAbzhF,EAAayhF,mBAAAA,EACnCjrC,GAASA,SAAC12C,GAAWE,EAAapB,aAAekB,CAA9B,EACnBq2C,GAAcA,SAAC7zF,GAAY09C,EAAa6oC,aAAevmF,CAA9B,IAMrB22H,EAjCyC,EAiChB38E,EAAQgrB,UAAUwtB,gBAC5C6iC,GAlC0CA,EAkCnB33E,EAAci5E,GAEtCj5E,EAAauhE,aACVkS,GArCwCA,GAsCvCiR,EAAiBA,WACrB,IAAM3sF,EAAawhF,GAvCwBA,GAwCtClyH,MAAK,SAAC9D,GAAM,MAAW,aAAXA,EAAEnC,IAAF,IACb22C,IACFA,EAAM32C,KAAO,UAJY,EAOvBujI,EAAgBA,WACpB,IAAM5sF,EAAawhF,GA9CwBA,GA+CtClyH,MAAK,SAAC9D,GAAM,MAAW,aAAXA,EAAEnC,IAAF,IACb22C,IACFA,EAAM32C,KAAO,SAJW,EA7CiB,EAoDxCksH,EAAkBh1G,EAAO0nC,EAAc,yBACxC,WAAM,OAAA0kF,GAAA,IArDmC,EAsDxCpX,EAAkBh1G,EAAO0nC,EAAc,yBACxC,WAAM,OAAA2kF,GAAA,IACN3kF,EAAaulB,QAxD4B,EAyDtC+nD,EAAkBh1G,EAAO0nC,EAAaulB,OAAQ,WAC/C,WAAM,OAAAo/D,GAAA,IA1DiC,EA2DtCrX,EAAkBh1G,EAAO0nC,EAAaulB,OAAQ,cAC/C,WAAM,OAAAo/D,GAAA,IA5DiC,EA6DtCrX,EAAkBh1G,EAAO0nC,EAAaulB,OAAQ,cAC/C,WAAM,OAAAo/D,GAAA,KACD,0CAA2C3kF,GA/DT,EAgEtCstE,EAAkBh1G,EAAO0nC,EAC1B,gDACA,WAAM,OAAA2kF,GAAA,KAEN14F,EAAwC+T,GACpCglF,0BArEmC,EAsEtC1X,EAAkBh1G,EAAO2zB,EAAO,iCACjC,WACsC,UAAhCA,EAAMg5F,uBACRP,IAEAC,GAJE,KAUTzQ,GAjF0CA,EAiFlBl0E,EAAcm0E,GAIvCyQ,EuDloFNM,SAAAA,EAAcroG,EAAK3gB,GACjB,IACE,IAAK,EAAKogC,EAAQxC,QAChB,OAAOjd,EAGT,IAAMx1C,EAAYggI,GAALA,GAuLoB,GACnC,OAvL4CnrG,EAuL3BjhB,eACf,IAAK,YACL,IAAK,aACL,IAAK,YACL,IAAK,aACL,IAAK,YACL,IAAK,aACL,IAAK,YACH,MAAyCy7H,GAAzC,QAEF,IAAK,aACL,IAAK,YACL,IAAK,aACL,IAAK,aACH,EAAyCzO,GAAzC,QAEF,IAAK,wBACL,IAAK,gCACL,IAAK,uBACL,IAAK,0BACL,IAAK,8BACH,EAmXIoD,IAnXJ,QAtB+B,SAjLjC,OALAhkI,EAAK0gI,GAAK,EACV1gI,EAAK8gI,IAAK,EAIoBgB,GAAiBtsF,EAkgBnBosF,GApgBiB5hI,GAT3C,CAYF,MAAO8H,GAGP,OAFUinI,EAAS,iBACf,oCAAqCjnI,GAClC0tC,CAHO,CAbW,CvDkoFSqoG,CArFW,EAqFxBlX,EArFwB,EAqFQja,EAAW73F,IAG7D0oH,EAAYl3I,SAAS,SACS,EAzFY,EAyFrC4uD,EAAQy1D,gBACd7/E,SA1F2C,EA0F7BoqB,EAAQ01D,iBACxB4yB,GAAe,MACmB,EA5FW,EA4FpCtoF,EAAQy1D,iBACf6yB,GA7F2C,EA6FvBtoF,EAAQy1D,gBAE1B7/E,SA/FyC,EA+F3BoqB,EAAQ01D,gBACxB4yB,GAAe,IAhG4B,EAgGjBtoF,EAAQ01D,gBAhGS,EAoGtC0b,EAAT,cACE,WArG6C,EAqGlCA,EAAmBrxF,UAA9B,GArG6C,SAsGxCqxF,EAAqB,KAtGmB,OA6N/C,OArHev3C,GAAkBn2B,GAEjCA,EAAa9gD,IAAM0lI,GAMK9gH,MAAiCc,OACvDo7B,EAAasiB,OAMa,QAAxBtiB,EAAa6sB,UAAsB7sB,EAAaupC,UAC3B+nC,GAAUp1G,IACXm7B,MACtB2I,EAAasiB,OA1HgC,EA+H1C4qD,EAAkC+K,GA/HQ,EAoI1C7mE,cAA2Bq/D,GMlzFvB5kE,cNwzFHg5E,EAAc,IAAet8E,GACRgqC,GAAkBvyC,EACzCouC,iBAAiBsD,cA5I0B,EA6ItC47B,GACL,WA9I2C,EA+IpCG,EAAU/kC,QACfm8C,EAAY7kG,SAFR,IAOiBuyD,GAAkBvyC,EACzCouC,iBAAiBuD,kBAtJ0B,EAuJtC27B,GACL,WAKE,IAAM/L,EAuBF4jB,EACgB5jB,EAAAA,EAApB,EA7BU,OAAAl7F,GAAA,sBAMV,OA4GR++G,SAAAA,GACE,IAAMh0B,EAAyB,EAAK90D,EAAQ80D,uBAId,IAA1BA,GAKJ,EAAKi0B,GAAoBj0B,EADI,EAAK90D,EAAQi1D,qBAThB,CAjHf6zB,CAzJoCA,IA6JnC7jB,EAAkBgY,GA7JiBA,IA8JzBlyH,MAAK,SAAC9D,GAAM,MAAU,YAAVA,EAAEnC,IAAF,KAYG,EAApBmgH,EAAWx+H,SA1KmB,EA2KlC++H,IAAiB,EA3KiB,EA4KlCnjC,EAAe8rC,mBAAkB,IAFjC,QAXL,IAAM,IAAI5gF,SAAQ,SAAC7J,GA/JoB,EAgKhCstF,EAAkB70G,GACnBunC,EAAauhE,WAAY,SAAUvhF,GAOTxa,IAAfH,GAAM2a,GAASxa,EAAU,EATX,IAA/B,GAkBF,GAAIi/G,EACF,SAAAx8G,SAGF,IADIk9G,GAAqB,EACL5jB,EAAAhuG,EAAAguG,GAAAA,EAAAA,EAAAA,QAApB,kBACqB,cADrB,WACYngH,OACH+jI,GAIHptF,EAAM32C,KAAO,WACHyW,EACN,uDACAkgC,KANCohF,GAxL8BA,EAwLXphF,GACxBotF,GAAqB,KAmGnCG,SAAAA,GACE,IAAMh0B,EAAwB,EAAKh1D,EAAQg1D,sBAId,IAAzBA,GAOJ,EAAKi0B,GAAmBj0B,EAFE,EAAKh1D,EAAQk1D,kBADd,EAAKl1D,EAAQu1D,iBATb,CAzFdyzB,CAnMoCA,GAwJ/B,WA8CZtlF,EAAa7wD,MAEf01I,EAAYhwF,OAAYqpF,GAxMqBA,IAyMZ,QAAxBl+E,EAAa6sB,UACZh1D,EACN,gPAMJgtH,EAAY7kG,WAjNiC,EAoN1CstF,EAAkB70G,GAAWunC,EAAc,SAAS,WACvD6kF,EAAYhwF,OAAYqpF,GArNqBA,GAoNgB,IAIzDprE,EAAU,IAAIjpB,SAAQ,SAAC7J,EAAS6U,GAE9BrvB,IADuBH,GAAMwvB,GAC7BrvB,EA1NuC,EA0NxB82B,EAAQgrB,UAAUsoC,YAFQ,IAKjD,IAAM/lE,QAAQw6B,KAAK,CACjBwgE,EACA/xE,IAFF,GA7N+C,SAkOzCm9B,EAlOyC,EAkO3BA,OAlO2B,EAoOzB3zC,EAAQgrB,UAAUqnC,UApOO,EAqOtCryD,EAAQgrB,UAAUqnC,SAAS70D,SArOW,EAsOtCwC,EAAQgrB,UAAUqnC,SAASK,YAtOW,EAuOtC1yD,EAAQgrB,UAAUioC,0BACnBgyB,EAAeA,WAAM,OAAK9F,GAxOaA,EAwOlB,EAxOkB,EAyOxCnO,EAAkBh1G,EAAO0nC,EAAc,aAAcuhF,IAEvDtxC,IACGuxC,EAAkBA,WAAM,OAAKrF,GA5OUA,EA4Of,EA5Oe,EA6OxC7O,EAAkBh1G,EACnB0nC,EAAc,aAAcwhF,GAC3BrF,GA/OwCA,IAAA,EAkPtC1M,IAlPsC,EAmPxCA,EAAW+C,kBAAkBviC,GAG9BA,IACE60C,EAvPuC,EAuPfvpC,KAAY1tG,IAvPG,EAwPtCy/H,EAAkBh1G,EAAO0nC,EAAc,YAAY,WACtD,IAAMwlF,EAzPmC,EAyPZjqC,KAAY1tG,IACrCi3I,GAAoBU,IA1PiB,EA2PlC/V,EAAW+C,kBA3PuB,EA2PAviC,KACvC60C,EAAmBU,EAJuC,MAxPnB,EAkQ1CnX,IAAe,EAlQ2B,SAlsC9BmW,CAALA,EAAqBrQ,EAAiBj4G,GAA5C,EAFmC,MAGlC,mBAHH,IAzIsD,QA6OxD,EAAKk1C,cAA2Bq/D,GM/lD5B7lE,WNk3CoD,OAqPxD,GADQ,MACJkmE,EAAJ,eAGE,WAAMA,EAAez0F,UAArB,IAxPsD,QA0PxD,EAAKi0F,GAAkB,KANf,aApPgD,OAgPxD,KADOnhI,EAAAA,EAAAA,K1B71BSgwI,K0B81BHhwI,EAAM4c,KAAnB,eACE,WAAM,EAAKwzH,IAAoC,GAA/C,IAjPsD,QAmPxD,MAAMpwI,EAnPkD,KA8RtD8vI,EAAAwG,GAAAA,SACFvG,EAA8BI,GAA9BJ,OAAA,IAAAA,GAAAA,EAA8BI,OAAA,IAAAA,GAAAA,EAAuB,IACjDxO,EADiD,cAAAzqG,GAAA,0BAChC,IAAWwqG,GAALA,GAAN,GADgC,QACjDC,EAAiB,IACvB,IAAM,EAAKyO,GAAOL,EAAuBI,GAAzC,IACA,EAAAr3G,OAAO6oG,EAHgD,OAmBnDhB,GAAAA,SAAqBwP,EAAuBzP,GAAvByP,OAAA,IAAAA,GAAAA,EAAuBzP,OAAA,IAAAA,GAAAA,EAA0B,IACpEiB,EADoE,cAAAzqG,GAAA,0BACnD,IAAWwqG,GAALA,EAAkBhB,GAAxB,GADmD,QACpEiB,EAAiB,IACvB,IAAM,EAAKiO,OAAOO,GAAlB,IACA,EAAAr3G,OAAO6oG,EAHmE,KA0EtEmO,EAAApyD,QAAAA,SAAQinC,EAAU/+E,EAAkB7Y,GAAlB6Y,OAAA,IAAAA,EAAY,KAAZA,EAA4B,IAC5C+7F,EAD4C,cAAAzqG,GAAA,0BAC3B,IAAW2qG,GAALA,EACzBld,EAAU/+E,EAAW7Y,GADF,KAAjB40G,EAAiB,KAQrBA,EAAeljI,QALV8sE,GAALA,EAAc,IAAer6C,G1BnwDrBiJ,EA4BFi9B,EAqxB0Bm/E,O0By9BlC,EAAAz9G,OAAO6oG,GAX2C,KAkB9CmO,EAAAD,GAAAA,WAAsB,IACpB2G,EAC4B9W,EAAAA,EAAlC,EAFyB,cAAAxoG,GAAA,YAEzB,IADMs/G,EAAyB,GACG9W,EAAAt7G,EAALs7G,EAAKA,IAAAA,EAAAA,EAAAA,QAAlC,8BgDrqCYzhE,GhDuqCRu4E,EAAuBrjJ,KAAKwuI,EAAez0F,WAI/C,OADA,EAAKwyF,GAA0B,GAC/B,IAAMhlF,QAAQE,IAAI47F,GAAlB,EARyB,KAm5C3B1G,EAAA2G,GAAAA,W0DvwGE,I1DwwGKhY,IAAAA,EAALA,KAAKA,G0DxwGE,EAAKf,GACV,EAAK10G,S1DswGW,EAYpB8mH,EAAA3qB,GAAAA,SAAgBt6C,GACd,OAAO,IAAgB6rE,GAAU7rE,EADF,EAgajCilE,EAAAlpH,UAAAA,SAAUC,EAAQhuB,GA8ChB,GAtCwB,GAApB2E,UAAU5J,QAAiC,iBAAXizB,IAClCA,EAAgC8lG,GAAsB9lG,EAAQhuB,IAM5DguB,EAAA,WAAuB,oBAAqBA,EAAA,YAC9BozD,GACZ,0CACA,iDACJpzD,EAAA,wBACIA,EAAA,iCACGA,EAAA,2BAILA,EAAA,WAAuB,kBAAmBA,EAAA,YAC5BozD,GACZ,wCACA,iDACJpzD,EAAA,wBACIA,EAAA,+BACGA,EAAA,2BAIL,WAAuB,yBAA0BA,EAAA,YACnCozD,GACZ,+CACA,sFAEJpzD,EAAA,0BACIA,EAAA,gCAAwDsO,YACrDtO,EAAA,gCAILA,EAAA,WAC0C,kBAAnCA,EAAA,mBAA8C,CACvCozD,GACZ,qBACA,kDACJ,IAAM08D,EAAgB9vH,EAAA,mBACtBA,EAAA,mBAAkC,CAAC,EACnCA,EAAA,2BAA6C8vH,CANU,CAWzD,GAAI9vH,EAAA,aAAyBA,EAAA,sBACzB,kBAAmBA,EAAA,uBACpB,uBAAwBA,EAAA,WACxB,uBAAwBA,EAAA,WAAsB,CACzCzuB,EAAMyuB,EAAA,8BAA6C,EAEzD,IAAM+vH,EAAMh/I,KAAK83D,KADL7oC,EAAA,8BAA6C,GAC9BzuB,GAAO,EAClCyuB,EAAA,mBAAkCA,EAAA,oBAAmC,CAAC,EACtEA,EAAA,iCAAmDzuB,EAAMw+I,EACzD/vH,EAAA,0CAA4D+vH,CANb,CAiGjD,GAxFI/vH,EAAA,WAAuB,uBAAwBA,EAAA,YACjCozD,GACZ,+BACA,sJAGGpzD,EAAA,8BAGLA,EAAA,WAAuB,uBAAwBA,EAAA,YACjCozD,GACZ,+BACA,sJAGGpzD,EAAA,8BAILA,EAAA,WAAuB,0BAA2BA,EAAA,YACpCozD,GACZ,kCACA,wDACJpzD,EAAA,mBAAkCA,EAAA,oBAAmC,CAAC,EACtEA,EAAA,iCACIA,EAAA,uCACGA,EAAA,iCAILA,EAAA,WACF,mCAAoCA,EAAA,YACpBozD,GACZ,2CACA,iEACJpzD,EAAA,mBAAkCA,EAAA,oBAAmC,CAAC,EACtEA,EAAA,0CACIA,EAAA,gDACGA,EAAA,0CAILA,EAAA,WAAuB,yBAA0BA,EAAA,YACnCozD,GACZ,iCACA,0DACJpzD,EAAA,mBAAkCA,EAAA,oBAAmC,CAAC,EACtEA,EAAA,mCACIA,EAAA,sCACGA,EAAA,gCAILA,EAAA,WACF,4BAA6BA,EAAA,YACbozD,GACZ,oCACA,0DACJpzD,EAAA,mBAAkCA,EAAA,oBAAmC,CAAC,EACtEA,EAAA,mCACIA,EAAA,yCACGA,EAAA,qCAIL,WAAuB,sBAAuBA,EAAA,YAChCozD,GACZ,8BACA,oDACJpzD,EAAA,mBAAkCA,EAAA,oBAAmC,CAAC,EACtEA,EAAA,6BACIA,EAAA,mCACGA,EAAA,6BAILA,EAAA,WACF,2BAA4BA,EAAA,YACZozD,GACZ,mCACA,yDACJpzD,EAAA,mBAAkCA,EAAA,oBAAmC,CAAC,EACtEA,EAAA,kCACIA,EAAA,wCACGA,EAAA,kCAILA,EAAA,aACA,8BAA+BA,EAAA,YAAuB,CACxCozD,GACZ,sDACA,oEACJ,IAAM48D,EACFhwH,EAAA,sCACJA,EAAA,2CAA0D,WACxD,OAAOgwH,CADuD,SAGzDhwH,EAAA,qCATiD,CA0G1D,OA7FIA,EAAA,UAAsBA,EAAA,cACtB,6BAA8BA,EAAA,eAChBozD,GACZ,sDACA,mEACGpzD,EAAA,uCAILA,EAAA,WAAuB,iBAAkBA,EAAA,YAC3BozD,GACZ,uCACA,qDACGpzD,EAAA,wBAILA,EAAA,UAAsBA,EAAA,eACtB,sBAAuBA,EAAA,gBACTozD,GACZ,gDACA,+DACGpzD,EAAA,iCAILA,EAAA,WAAuB,yBAA0BA,EAAA,YACnCozD,GACZ,+CACA,wDACJpzD,EAAA,iCACIA,EAAA,sCACGA,EAAA,gCAULA,EAAA,WAAuBA,EAAA,2BACiC1qB,MAAtD0qB,EAAA,wCACFA,EAAA,sCAAqD,GAET1qB,MAA1C0qB,EAAA,4BACFA,EAAA,0BAAyC,KAEQ1qB,MAA/C0qB,EAAA,iCACFA,EAAA,+BAA8C,GAEI1qB,MAAhD0qB,EAAA,kCACFA,EAAA,gCAA+C,IAEH1qB,MAA1C0qB,EAAA,4BACFA,EAAA,0BAAyC,GAEG1qB,MAA1C0qB,EAAA,4BACFA,EAAA,0BAAyC,CAAC,GAEe1qB,MAAvD0qB,EAAA,sCACFA,EAAA,oCAAsD,KAE9B1qB,MAAtB0qB,EAAA,WACFA,EAAA,SAAqB,CAAC,GAEU1qB,MAA9B0qB,EAAA,gBACFA,EAAA,cAA6B,CAAC,GAEsB1qB,MAAlD0qB,EAAA,iCACFA,EAAA,gCAAiD,GAEN1qB,MAAzC0qB,EAAA,2BACFA,EAAA,yBAAwC,CAAC,GAEe1qB,MAAtD0qB,EAAA,qCACFA,EAAA,mCAAqD,KAElC1qB,MAAjB0qB,EAAA,MACFA,EAAA,IAAgB,CAAC,GAEqB1qB,MAApC0qB,EAAA,sBACFA,EAAA,oBAAmC,CAAC,GAEe1qB,MAAjD0qB,EAAA,gCACFA,EAAA,8BAAgD,MAG9CqV,EAAqC+xF,GACvCj5H,KAAKm4D,EAAStmC,EAAaw4G,GAALA,OAErBmK,GAALA,MACOttG,CAzQgB,EA4ZzB4zG,EAAAp+D,iBAAAA,WAGE,IAAMx1C,EAAWmjG,GAALA,MAGZ,OAF+BpR,GAC3B/xF,EAAKlnC,KAAKm4D,EAAckyE,GAALA,OAChBnjG,CANU,EAiBnB4zG,EAAAgH,GAAAA,WAME,OAF+B7oB,GADdoR,GAALA,MAEHrqI,KAAKm4D,EAAckyE,GAALA,OACO3S,GAC1B13H,KAAKm4D,EAAckyE,GAALA,MAPS,IA6B7BmN,GAAAA,WACE,GAAIx3I,KAAK+1E,EAAQ,CACf,IAAMgsE,EAAiB/hJ,KAAK+1E,EAAOspB,SAASzgG,OACtCk5I,EACFiK,EAAiB/hJ,KAAK+1E,EAAOspB,SAAS31F,IAAIq4I,EAAiB,GAAK,EACpE,IAAMzgC,EAAgBthH,KAAK08E,mBAAmByG,UAAUm+B,cAIxD,GAAIw2B,IAHEkK,EAAqBp/I,KAAKQ,IAAIpD,KAAK+1E,EAAO2uB,YAC5C4c,EAAethH,KAAKo3G,KAAY1tG,MAGlC,OAAO,EACF,KAAIouI,GAAe93I,KAAK+1E,EAAO2uB,cAE3BozC,EAAckK,EACvB,OAASlK,EAAc93I,KAAK+1E,EAAO2uB,cAC9Bs9C,EAAqBhiJ,KAAK+1E,EAAO2uB,YAdzB,CAiBjB,OAAO,CAlBW,EAyBpBo2C,EAAAmH,GAAAA,WAIE,IAAK36I,IAAMA,KAAOtH,KAAKm4D,SACdn4D,KAAKm4D,EAAQ7wD,GAGS2xH,GAC3Bj5H,KAAKm4D,EAAckyE,GAALA,MAA4BA,GAALA,OACpCmK,GAALA,KAVmB,EAmBrBsG,EAAAoH,GAAAA,WACE,OAAOliJ,KAAK+oI,CADA,EAUd+R,EAAAlC,GAAAA,WACE,OAAK54I,KAAKq5G,EAGHr5G,KAAKq5G,EAAU38G,KAFb,IAFO,EAelBo+I,EAAAqH,GAAAA,WACE,OAAOniJ,KAAK+1E,CADI,IAUlBi1D,GAAAA,WACE,OAAOhrI,KAAK8vH,CADQ,EAWtBgrB,EAAA1hB,GAAAA,WACE,OAAOp5H,KAAK4vH,CADA,EAWdkrB,EAAAsH,GAAAA,WAQE,OAAKpiJ,KAAKsrI,EAIHtrI,KAAKsrI,EAHH,IATI,EAsBfwP,EAAAhvC,EAAAA,WACE,OAAI9rG,KAAKq5G,IAAcr5G,KAAKqiJ,KACnBriJ,KAAKq5G,EAAUxK,qBAAqB/C,OAIzC9rG,KAAK+1E,IAAU/1E,KAAK+1E,EAAOh7D,MACEuc,KAAxBt3B,KAAK+1E,EAAO0sB,QAPd,EAoBTq4C,EAAAvuC,GAAAA,WACE,QAAOvsG,KAAKq5G,GACLr5G,KAAKq5G,EAAUxK,qBAAqBtC,IAF9B,EAkBfuuC,EAAAwH,GAAAA,WACE,GAAItiJ,KAAKq5G,IAAcr5G,KAAKqiJ,KAAoB,CAC9C,IAAM14F,EAAW3pD,KAAKq5G,EAAU1vD,SAChC,QAAKA,EAAS/qD,SAQN+qD,EAAS,GAAG7B,KAV0B,CAWzC,SAAI9nD,KAAK+1E,IAAU/1E,KAAK+1E,EAAOh7D,OAMhC/a,KAAK+1E,EAAOwsE,YAC2B,GAAlCviJ,KAAK+1E,EAAOwsE,YAAY3jJ,OAQL,GADkBoB,KAAK+1E,EACtCvpB,YA3BH,IAyCd4qD,GAAAA,WACE,GAAIp3G,KAAKq5G,IAAcr5G,KAAKqiJ,KAAoB,CAK9C,IAAKriJ,KAAKkqI,IiBpuIiBnqC,OjBquIvB//F,KAAKq5G,EAAU38G,KACjB,MAAO,CAAC,MAAS,EAAG,IAAO,GAE7B,IAAM2rG,EAAWroG,KAAKq5G,EAAUxK,qBAEhC,MAAO,CACL,MAASxG,EAASyE,KAClB,IAAOzE,EAASwB,KAb4B,CAmBhD,OAAI7pG,KAAK+1E,GAAU/1E,KAAK+1E,EAAOh7D,MACvBynI,EAAWxiJ,KAAK+1E,EAAOysE,UAChB5jJ,OACJ,CACL,MAAS4jJ,EAAS/4I,MAAM,GACxB,IAAO+4I,EAAS94I,IAAI84I,EAAS5jJ,OAAS,IAKrC,CAAC,MAAS,EAAG,IAAO,EA9BjB,EAsCZk8I,EAAA2H,GAAAA,WACMziJ,KAAK8rG,MACP9rG,KAAK+1E,EAAO2uB,YAAc1kG,KAAKo3G,KAAY1tG,IAFpC,EAcXoxI,EAAA4H,GAAAA,WACE,OAAO1iJ,KAAKkqI,EADE,EAYhB4Q,EAAA/9G,UAAAA,WACuC,MAAA/8B,KAAK0+C,UAA1C,OxB90IOA,EAAUA,EAAQ3hB,UAAY,EwB60I3B,EAYZ+9G,EAAAp8F,QAAAA,WACE,OAAO1+C,KAAK4hF,EAAa5hF,KAAK4hF,ENlnHlB7zB,EMknH4C,IADhD,IA0BV0zB,GAAAA,WACE,OAAOzhF,KAAK4hF,EAAa5hF,KAAK4hF,EAAWH,KAAkBnqD,GAD7C,EAUhBwjH,EAAAt5D,GAAAA,WACE,OAAOxhF,KAAK4hF,EAAa5hF,KAAK4hF,EAAWJ,KAA8B,EAD7C,EAU5Bs5D,EAAAp5D,GAAAA,WACE,OAAO1hF,KAAK4hF,EAAa5hF,KAAK4hF,EAAWF,KAAmB,CAAC,CAD9C,EAYjBo5D,EAAA5D,GAAAA,WAEE,QAAOl3I,KAAK8pI,GACL9pI,KAAK8pI,EDh6IA3rE,GCg6IoCI,EAHpC,EAqBdu8E,EAAAlgC,GAAAA,WACE,OAAK56G,KAAK+1E,EAGH/1E,KAAKgqI,EACLhqI,KAAKgqI,EkCv8IAl4B,ElCw8IL,EAJE,CAFO,IA2BlB2lC,GAAAA,SAAU97E,EAAMgnF,GAA2B,IAAD,OAA1BA,OAAA,IAAAA,GAAAA,EAMF,GAARhnF,EACQjoC,EAAW,2CAGvB1zB,KAAKopI,GAAuBn1G,KAExBj0B,KAAK+1E,EAAO8E,QAId76E,KAAK+1E,EAAO0vB,OAEdzlG,KAAKgqI,EAAoBplI,IAAI+2D,GAEzB37D,KAAK+oI,GAAmCkL,KAC1Cj0I,KAAK8wH,EAAYp1D,oBAAoBC,GACf8+C,GAAtBz6G,KAAK2pI,EACDgZ,GAAsC,EAAjB//I,KAAK83D,IAAIiB,KAEhC37D,KAAK8rG,KACP9rG,KAAKopI,GAAuBj1G,EAAOn0B,KAAK+1E,EAAQ,cAAc,WAC5D,IAAM2uB,EAAc,EAAK3uB,EAAO2uB,YAC1B0S,EAAY,EAAKA,KACjBxG,EAAiB,EAAKz4C,EAAQgrB,UAAUytB,eAInC,EAAPj1C,EACE/4D,KAAKqB,MAAMygG,IAAgB9hG,KAAKqB,MAAMmzG,EAAU1tG,MAClD,EAAKguI,KAGH90I,KAAKqB,MAAMygG,IACX9hG,KAAKqB,MAAMmzG,EAAU3tG,MAAQmnG,IAC/B,EAAK8mC,IAdyD,IA1B9B,IAqD1CA,GAAAA,WACE,IAAM4F,EAAsBt9I,KAAKgqI,EAAoBhU,KACjDh2H,KAAK+oI,GAAmC+K,IAC1C9zI,KAAKgqI,EAAoBplI,IAAI04I,GAG3Bt9I,KAAK+oI,GAAmCkL,KAC1Cj0I,KAAKgqI,EAAoBplI,IAAI04I,GAC7Bt9I,KAAK8wH,EAAYp1D,oBAAoB4hF,GACf7iC,GAAtBz6G,KAAK2pI,GAA8B,IAErC3pI,KAAKopI,GAAuBn1G,IAXZ,IAuBlBg3G,GAAAA,WACE,GAAIjrI,KAAKq5G,IAAcr5G,KAAKqiJ,KAAoB,CAS9C,IARA,IAAMlT,EAAiBnvI,KAAK2pI,EACxB3pI,KAAK2pI,E4Ct0IC12B,E5Cs0IsC,KAE1C4Y,EAAS,GAEX+2B,EAAe,EAGkBj5F,EAAAv6B,EAAfu6B,KAAK0vD,EAAU1vD,UAAAA,EAAAA,EAAAA,QAArC,kBACE,GAA4BwM,GAD9B,WACE,CAIA,IAAMvC,EAA+B6kF,GAAe7wF,GACpDgM,EAAMC,OAASjM,GAAWunF,EACrBv7E,EAAMC,QAA0B,GAAhB+uF,GAAuC,MAAlBzT,GACxCvnF,EAAQE,OAASqnF,EAAernF,OAChCF,EAAQC,OAASsnF,EAAetnF,QAChC+L,EAAMC,QAAS,GAGbD,EAAMC,QACR+uF,IAGF/2B,EAAO1tH,KAAKy1D,EAhBZ,CAsBF,OAAOi4D,CAhCuC,CAiCzC,OAAI7rH,KAAK+1E,GAAU/1E,KAAK+1E,EAAOs6D,YAKhB1rI,MAAM24B,KAAKt9B,KAAK+1E,EAAOs6D,aACxBlyF,KAAI,SAAC0J,GACtB,OAAuBoxF,GAAuBpxF,EAA9C,IAEK,EA3CQ,IAwDnByxF,GAAAA,WACE,GAAIt5I,KAAKq5G,IAAcr5G,KAAKqiJ,KAAoB,CAM9C,IALA,IAAMQ,EAAoB7iJ,KAAK2pI,EAC3B3pI,KAAK2pI,E4Cr3ICnwB,E5Cq3IyC,KAC7CqS,EAAS,GAGmBtiE,EAAAn6B,EAAfm6B,KAAK8vD,EAAU9vD,aAAAA,EAAAA,EAAAA,QAAlC,kBAA+C,CAC7C,IAAMqK,EAA+BkvF,GADvC,WAEElvF,EAAMC,OAAS5oB,GAAQ43G,EAEvBh3B,EAAO1tH,KAAKy1D,EAJiC,CAO/C,OAAOi4D,CAbuC,CAczC,OAAI7rH,KAAK+1E,GAAU/1E,KAAK+1E,EAAOh7D,KAAO/a,KAAK+1E,EAAOqnD,WAC/BgY,GAALA,MAEDj3F,KAAI,SAAClT,GAAS,OAAY83G,GAAsB93G,EAAlC,IAEzB,EApBK,EAgChB6vG,EAAAkI,GAAAA,WAEE,IAAI7gE,EAAeniF,KAAKoqI,GAIxB,OAHIpqI,KAAKq5G,IACPl3B,EAAeniF,KAAKq5G,EAAUl3B,cAEzBA,EAAahkC,KAAI,SAAC8kG,GAAU,OAAYC,GAAmBD,EAA/B,GANpB,IAkBXE,GAAAA,SAAiBj2D,GAAU,IAK3B/K,EAIEihE,EAQAvzF,EAaAwzF,EA9BwB,cAAAnhH,GAAA,0BAC1B,EAAK6mG,GAAmCkL,IACxC,EAAKlL,GAAmC+K,GACnC,EAAPhwG,OAAO,OAELq+C,EAAe,EAAKioD,GACpB,EAAK/wB,IACPl3B,EAAe,EAAKk3B,EAAUl3B,eAE1BihE,EAAcjhE,EAAaj/D,MAC7B,SAACy/B,GAAW,OAAAA,EAAOziC,IAAMgtE,CAAb,KAIXk2D,EAAYpuF,aAAjB,OACE,IAAMouF,EAAYxlD,qBAAlB,GAHA,EAAA95D,OAAO,OAZqB,QAiBxB+rB,EAAW,GACjBuzF,EAAYpuF,aAAau/D,IAAyB,SAACjvH,GACjD,IAAMg+I,EAAkBC,GACpBj+I,EL31IM8uD,aK21IwBgvF,EAAYhvF,aAC9C,GAAIkvF,EAAY,CACRE,EAAgBF,EAAW7vG,KAAO6vG,EAAW9vG,GAEnD,IADA,IAAMivD,EAAWn9F,EAAUkjF,EAAcljF,EAAUsrC,UAC1C7yC,EAAI,EAAGA,EAAIylJ,EAAezlJ,IAEjC8xD,EAAS1xD,KAAK,EAAKslJ,GAAcv2D,EADd5nF,EAAUsrC,UAAY6xD,EAAW1kG,EAAIylJ,GAJ5C,CAH+C,IAY9C,IAAM99F,QAAQE,IAAIiK,GAAlB,KAAbwzF,EAAa,IACnB,EAAAv/G,OAAOu/G,EAAWtwH,QAAO,SAAC3T,GAAMA,OAAAA,CAAAA,KA/BF,KAuE1B07H,EAAA2I,GAAAA,SAAcv2D,EAASjlD,GAAO,IAK9Bk6C,EAIEihE,EAQAM,EAIAp+I,EACAg+I,EAKAK,EACAC,EACFppH,EACAD,EACEspH,EACAC,EACAC,EAEFC,EACAC,EACAC,EAYIC,EAOJC,EACEv7D,EAzD2B,cAAA3mD,GAAA,0BAC7B,EAAK6mG,GAAmCkL,IACxC,EAAKlL,GAAmC+K,GACnC,EAAPhwG,OAAO,OAELq+C,EAAe,EAAKioD,GACpB,EAAK/wB,IACPl3B,EAAe,EAAKk3B,EAAUl3B,eAE1BihE,EAAcjhE,EAAaj/D,MAC7B,SAACy/B,GAAW,OAAAA,EAAOziC,IAAMgtE,CAAb,KAIXk2D,EAAYpuF,aAAjB,OACE,IAAMouF,EAAYxlD,qBAAlB,GAHA,EAAA95D,OAAO,OAMgB,OADnB4/G,EAAoBN,EAAYpuF,aAAa9xC,KAAK+kB,IAE/C,EAAPnE,OAAO,OAEHx+B,EAAY89I,EAAYpuF,aAAatlD,IAAIg0I,IACzCJ,EAAkBC,GACpBj+I,ELr6IQ8uD,aKq6IsBgvF,EAAYhvF,eAIxCuvF,EAAiBP,EAAY5oH,OAAS,EACtCopH,EAAkBR,EAAY7oH,QAAU,EAC1CC,EAAQmpH,EAAiBL,EAAW9vG,GACpCjZ,EAASqpH,EAAkBN,EAAW7vG,KACpCowG,EAAcP,EAAW9vG,GAAU8vG,EAAW7vG,KAC9CqwG,EAAkBx+I,EAAUkjF,EAAcljF,EAAUsrC,YAEtDtrC,ELr6IQ8iF,GKq6IwB07D,EAAkBD,EAClDG,EAAgB1+I,EAAUsrC,UAE1BszG,EADAD,EAAY,EAYE,EAAdJ,IACIM,EACFvhJ,KAAKqB,OAAOgkC,EAAO3iC,EAAUsrC,WAAamzG,GAC9CC,EAAgB1+I,EAAUsrC,UACrBuzG,EAAoBJ,EACzBE,EAAaE,EAAoBb,EAAW9vG,GAAWhZ,EACvD0pH,EAAYthJ,KAAKqB,MAAMkgJ,EAAoBb,EAAW9vG,IAAWjZ,GAE/D6pH,GAAS,GACPv7D,EAAkBvjF,ELnzIZujF,mBKqzIVu7D,GAAS,EACT7pH,EAASsuD,EAAgBtuD,OACzB0pH,EAAYp7D,EAAgBo7D,UAC5BC,EAAYr7D,EAAgBq7D,UAC5B1pH,EAAQquD,EAAgBruD,OAE1B,EAAAsJ,OAAO,CACLrb,QAASnjB,EACT++I,YAAaT,EACbU,WAAYX,EACZppH,OAAQA,EACR0pH,UAAWA,EACXC,UAAWA,EACXtzG,UAAWozG,EACXvhD,SAAUshD,EACV15E,KAAM/kE,EAAUmiF,IAChBjtD,MAAOA,EACP4pH,OAAQA,KAnDD,EAAPtgH,OAAO,MAzBwB,OA4FnCygH,GAAAA,SAAgB3wF,GAAO,IAEbjR,EAFa,OAsDjB3iD,KAAKq5G,GAAar5G,KAAKspI,KApDnB3mF,EAAS,EAAK02D,EAAU9vD,YAAYrmC,MACtC,SAACy/B,GAAW,OAAAA,EAAOziC,IAAM0zC,EAAM1zC,EAAnB,MASZyiC,GAAU,EAAKgnF,E4CnlJTnwB,I5C6hMErG,GAp8CZksC,EAm8CyBhuB,EsCxlMfxc,EtCqpJyBlyD,GAA8B0wD,GAC3CmI,GAAtB,EAAKmuB,EAAkChnF,GAClCu2F,GAALA,GACKE,GAALA,GAMA,EAAKzO,GAAuBhoF,EAAO19C,WA+B9BjF,KAAKqiJ,OA7BgBmC,WAC1B,GAAI,EAAKzuE,GAAU,EAAKA,EAAOqnD,WAAY,CACzC,IAAMA,EAAkBgY,GAALA,GACboD,EAAWpb,EAAWl6G,MAAK,SAACqyC,GAChC,MAAmB,aAAnBA,EAAUt4C,IAAV,KACIy7H,EAAWtb,EAAWl6G,MAAK,SAACqyC,GAChC,OAAuBM,GAAaN,KAAe3B,EAAM1zC,EAAzD,OAKEs4H,IAAaE,IACXF,IACFA,EAASv7H,KAAO,WAChB,EAAKksH,EAAkB10G,GAAS+jH,EAAU,aAC1C,EAAKh+C,EAAezmE,OAAO,EAAGuD,MAE5BohH,GACG1D,GAALA,EAAwB0D,IAGvBQ,GAALA,GACKE,GAALA,GArByC,CADjBoL,CAAAA,EA7BP,EA+GvB1J,EAAA2J,GAAAA,SAAmB7wF,EAAOynD,EAAqBC,GAAgB,WAArCD,OAAA,IAAAA,GAAAA,EAAqBC,OAAA,IAAAA,EAAa,EAAbA,EAkEzCt7G,KAAKq5G,GAAar5G,KAAKspI,IAjEGob,WAC5B,IAAM98F,EAAU,EAAKyxD,EAAU1vD,SAASzmC,MACpC,SAAC0kC,GAAY,OAAAA,EAAQ1nC,IAAM0zC,EAAM1zC,EAApB,IACjB,GAAK0nC,GAWuBuO,GAAWvO,GAAvC,CAKA,IAAMiM,EAAS,EAAK81E,E4CntJV12B,E5CotJN,EAAK96C,EAAQq0D,IAAI72D,UAAY9B,EAAO/L,OAASF,EAAQE,OACpD+L,EAAOhM,OAASD,EAAQC,OACzBgM,EAAOhM,MAAM5iD,UAAY2iD,EAAQC,MAAM5iD,UACvC4uD,EAAOhM,MAAMkD,eAAiBnD,EAAQC,MAAMkD,gBACpCr3B,EAAW,sKAMnB,EAAK2uH,KACF/J,GAALA,EACI1wF,GAA+B,GACZ,EAAyB,GAE3C0wF,GAALA,EACI1wF,GAA+B,EAC/ByzD,IAAe,EAAOC,GAAc,GAO1C,EAAK0U,GAAgC,IAAgB/wD,GACjDrX,EACA,EAAKuQ,EAAQv5B,YAAYs+B,2BAG7BgyE,EAnCA,CAdkC,CAkElCwV,IAGK1kJ,KAAKqiJ,OAlBgBmC,WAC1B,GAAI,EAAKzuE,GAAU,EAAKA,EAAOs6D,YAI7B,IADA,IAAMA,EAAc1rI,MAAM24B,KAAK,EAAKy4C,EAAOs6D,aAClBA,GAAAA,EAAAjhH,EAAAihH,IAAAA,QAAzB,SAAAjpI,EAAA,OACE,GAA2ByuD,GAD7B,YACyDjC,EAAM1zC,GAAI,CAE1D64H,GAALA,EAAuBrjF,GACvB,KAH+D,CAN3C8uF,CAAAA,EApDiC,EAoF/D1J,EAAA6J,GAAAA,WACE,OAAoBC,GAAyB5kJ,KAAKirI,KADxB,EAW5B6P,EAAA+J,GAAAA,WACE,OAAoBD,GAAyB5kJ,KAAKs5I,KADzB,EAW3BwB,EAAAgK,GAAAA,WACE,OAAOngJ,MAAM24B,KAAkBynH,GAAkB/kJ,KAAKirI,MADpC,EAWpB6P,EAAAkK,GAAAA,WACE,OAAOrgJ,MAAM24B,KAAkBynH,GAAkB/kJ,KAAKs5I,MADrC,IAgBnB4H,GAAAA,SAAoBj8I,EAAU0uD,EAAM5I,EAAmBuwD,EACnDn7D,GAAY,WADoB4K,OAAA,IAAAA,EAAgB,EAAhBA,EAAmBuwD,OAAA,IAAAA,EAAa,EAAbA,EACnDn7D,OAAA,IAAAA,EAAQ,GAARA,EAgEEngD,KAAKq5G,GAAar5G,KAAKspI,IA/DGob,WAcfz+B,SAAA,EAACnoH,EAAGkb,GACf,OAAKlb,EAAEgqD,OAAU9uC,EAAE8uC,MAEPhqD,EAAEgqD,OAAU9uC,EAAE8uC,MAGjBllD,KAAK83D,KAAK58D,EAAEgqD,MAAMvtB,QAAU,IAAMvhB,EAAE8uC,MAAMvtB,QAAU,IACrD33B,KAAK83D,KAAK58D,EAAEgqD,MAAMttB,OAAS,IAAMxhB,EAAE8uC,MAAMttB,OAAS,IAHjDlD,IAFA,CAFY,CAbvB,EAAK04F,GACD,IAAgB5yD,GACZn4D,EACA0uD,GAAQ,GACR5I,GAAiB,EACD,IACI,EACD,GACD,GACA,GAClB,EAAKoN,EAAQv5B,YAAYs+B,uBACzB/c,GAAS,IAmBjB,IAJA,IAAM0T,EAAS,EAAK81E,E4Cj2JV12B,E5Ck2JJruG,EACA,EAAKorH,GAA8B9yH,OAAO,EAAKm8G,EAAU1vD,UAC3Ds7F,EAAc,KACO,KAAA71H,EAAAxqB,EAAI2K,WAAJ,QAAzB,kBAC8B4mD,GAD9B,cAIO8uF,GACCh/B,EAAKg/B,EAAapxF,GAAUoyD,EAAKi/B,EAAYrxF,MACjDoxF,EAAcC,GAGdD,GAAepxF,IAIfoxF,GACIrxF,EAA+B6kF,GAAewM,GACpD,EAAKR,GACD7wF,GAA0B,EAAM0nD,GAAc,IAK/C4wB,GAALA,GApDkC,CAgElCwY,IAGK1kJ,KAAKqiJ,OAbgBmC,WAC1B,GAAI,EAAKzuE,GAAU,EAAKA,EAAOs6D,YAAa,CAC1C,IAAMz8E,EAA+BurF,GACjC,EAAKlU,KAAoBhmI,EAAU0uD,GAAQ,IAAI,GAAO,GACtDC,GACF,EAAK6wF,GAAmB7wF,EAJgB,CADlB4wF,CAAAA,EAvDd,EAqFhB1J,EAAAsG,GAAAA,SAAmBn8I,EAAU0uD,EAAMlkD,GAAgB,IAuBzCmkD,EAvByC,OAAhBnkD,OAAA,IAAAA,GAAAA,EA6B7BzP,KAAKq5G,GAAar5G,KAAKspI,IA5BGob,WAC5B,EAAK/Z,GAAuB1lI,EAC5B,EAAK2lI,GAAmBj3E,GAAQ,GAChC,EAAKk3E,GAAqBp7H,IAAU,EAEpC,IAAM01I,EA+yD8BhG,GA/yDjBC,EAgzDZ/lC,EAAU9vD,YAhzDE61F,EAizDZzU,GAjzDYyU,EAkzDZxU,GAlzDYwU,EAmzDZvU,IACK,IAAM,KAnzDdsa,GACEA,GAAc,EAAKxb,E4Cz5JfnwB,I5C6hMErG,GA/nCVksC,EA8nCuBhuB,EsCxlMfxc,EtC29JJswC,GAAkC9xC,GAClC0sC,EA+kFI5nF,EAAQgrB,UAAUg6B,kBA/kFtB4iC,EA+kF+CC,QA9kF3BxkC,GAAtB,EAAKmuB,EAAkCwb,GAClCjM,GAALA,GACKE,GAALA,GAjB8B,CA6BlCsL,IAGK1kJ,KAAKqiJ,QAVJzuF,EAA+BurF,GACjC,EAAK7F,KAAiBr0I,EAAU0uD,GAAQ,GAAIlkD,IAAU,GAAO,KAE/D,EAAK80I,GAAgB3wF,EA1BwB,IAsDnDwxF,GAAAA,SAAsB7lI,EAAO87F,EAAoBC,GAAgB,WAApCD,OAAA,IAAAA,GAAAA,EAAoBC,OAAA,IAAAA,EAAa,EAAbA,EAmD3Ct7G,KAAKq5G,GAAar5G,KAAKspI,IAlDGob,WAE5B,IADA,IAAIW,EAAwB,KACS17F,EAAAv6B,EAAfu6B,EAAK0vD,EAAU1vD,UAAAA,EAAAA,EAAAA,QAArC,kBACE,IADF,WACc9B,MAAMtoC,OAASA,EAAO,CAChC8lI,EAAwBz9F,EACxB,KAFgC,CAMP,MAAzBy9F,IAUJ,EAAKr1B,GACD,IAAgB5yD,GACZioF,EAAsBpgJ,SACV,GACQ,EACJ,IACI,EACD,GACnBsa,EACkB,GAClB,EAAK44C,EAAQv5B,YAAYs+B,uBACP,IAErBgvE,GAALA,EAA6B7wB,EAAaC,GAhCR,CAmDlCopC,IAGK1kJ,KAAKqiJ,OApBgBmC,WAC1B,GAAI,EAAKzuE,GAAU,EAAKA,EAAOs6D,YAAa,CAK1C,IAJA,IAAMA,EAAc1rI,MAAM24B,KAAK,EAAKy4C,EAAOs6D,aAEvCiV,EAAa,KAEQjV,GAAAA,EAAAjhH,EAAAihH,IAAAA,QAAzB,SAAAjpI,EAAA,mBACiBmY,OAASA,IACtB+lI,EAAa5vF,GAGb4vF,GACGvM,GAALA,EAAuBuM,EAXiB,CADlBd,CAAAA,EAnCmC,IAoEjExE,GAAAA,WACE,IAAMuF,EAAWvlJ,KAAK29H,GACtB,OAAI39H,KAAKw6F,EACQx6F,KAAKw6F,EAAe0iB,gBAS9BqoC,CAZY,EAqBrBzK,EAAA0K,GAAAA,WACE,OAAIxlJ,KAAK+1E,GAAU/1E,KAAK+1E,EAAO0vE,YAAczlJ,KAAK+1E,EAAOqnD,WAC/BkY,GAALA,MAEDn3F,KAAI,SAAClT,GAAS,OAAY83G,GAAsB93G,EAAlC,IAEzB,EANS,IAiBpBy6G,GAAAA,SAAYzgJ,GACV,IAAKjF,KAAK+1E,IAAW/1E,KAAK+1E,EAAO0vE,aAAezlJ,KAAK+1E,EAAOqnD,WAC1D,MAAO,GAGT,IAAMuoB,EAA8B1/F,GAAUhhD,GAExC2gJ,EADsBtQ,GAALA,MAElBviH,QAAO,SAAC3T,GAAM,OAAc6mC,GAAU7mC,EAAEna,WAAa0gJ,CAAvC,IACnB,IAAKC,IAA+BA,EAA2BhnJ,OAC7D,MAAO,GAEHinJ,EAAW,GAEjB,IADA,IAAMC,EAAiB,IAAItzH,IACCozH,GAAAA,EAAAx2H,EAAAw2H,IAAAA,QAA5B,kBACE,IADF,YACuBG,EAAc3gG,KACjC,IAAgCA,IAAAA,GAAAA,EAAAh2B,EAAd22H,EAAc3gG,OAAAA,QAAhCh+C,EAAA,KAAAA,EAAA,SAAsC,CAAtC,MAAAA,EAAA,OACM8Y,EAAKwzB,EAAIxzB,KACI,IAANA,IACTA,EAAKwzB,EAAI9C,UAAY,IAAM8C,EAAI7C,QAAU,IAAM6C,EAAIzI,MAG/C+6G,EAAU,CACd9lI,GAAIA,EACJ+lI,MAAOvyG,EAAIzI,KACX2F,UAAW8C,EAAI9C,UACfC,QAAS6C,EAAI7C,SAEVi1G,EAAe/wI,IAAImL,KACtB2lI,EAAS1nJ,KAAK6nJ,GACdF,EAAe50H,IAAIhR,GAde,CAmB1C,OAAO2lI,CAnCa,EAsFtB/K,EAAAoL,GAAAA,SAAuBC,GAGfC,IAAkBD,EAFHnmJ,KAAK29H,IAINyoB,IAIpBpmJ,KAAK29H,GAAiByoB,EAIlBpmJ,KAAK+oI,GAAmCkL,IAC1Cj0I,KAAKw6F,EAAe8rC,kBAAkB8f,GAMjCpmJ,KAAKm4D,EAAQgrB,UAAUg6B,mBACtBipC,EACEpmJ,KAAK2pI,E4C7pKHnwB,G5CyqKiB,GARf7rD,EACqBwxF,GACnBn/I,KAAKq5G,EAAU9vD,YACfvpD,KAAK2qI,GACL3qI,KAAK4qI,GACL5qI,KAAK6qI,KAGDjsI,SACY48G,GAAtBx7G,KAAK2pI,EAAkCh8E,EAAQ,IAC1CurF,GAALA,MACKE,GAALA,O4C3nKZiN,SAAAA,GAGE,IAAM/wI,EAAQ,EAAKokG,EAAahqG,IAAgB0wC,IAC5C9qC,IACGwkG,GAAcxkG,GACdykG,GAAiBzkG,GAAOs7C,OAAM,WAAO,IAC1C,EAAK4pD,EACD,EAAKd,EAAahqG,IAAgB0wC,IACtC,EAAKs5D,EAAa38C,OAAmB3c,KAEvC,EAAKo5D,EAAqB,IAXT,C5C+nKW6sC,CAAtBrmJ,KAAK2pI,KAGA3pI,KAAK+1E,GAAU/1E,KAAK+1E,EAAOh7D,KAAO/a,KAAK+1E,EAAOqnD,YACvDp9H,KAAKw6F,EAAe8rC,kBAAkB8f,GAMnCjN,GAALA,MAnDgC,IA4DlCmN,GAAAA,WAEE,GAAItmJ,KAAKspI,EACP,IAAA5sB,EAAmB18G,KAAKspI,EAAU1nC,SAC7B,IAAuB,MAAnB5hG,KAAK2oG,GAId,OAAO,IAAIj7D,KAIXgvE,EAAmB18G,KAAK2oG,EARnB,CAWP,GAAI3oG,KAAKq5G,IAAcr5G,KAAKqiJ,KAAoB,CAC9C,IAAMh6C,EAAWroG,KAAKq5G,EAAUxK,qBAGhC,OAAO,IAAInhE,KAAgD,MAFzC26D,E4B7nKRd,G5B8nKNc,E4B53KM5B,G5B63K6BiW,GAJO,CAKzC,OAAI18G,KAAK+1E,GAAU/1E,KAAK+1E,EAAOwwE,cAG9BC,EAAYxmJ,KAAK+1E,EAAOwwE,eAC1B70H,MAAM80H,EAAU5kD,WAGX,KAEF,IAAIl0D,KAAK84G,EAAU5kD,UAAgC,IAAnB8a,IAGhC,IAhCa,EA0CxBo+B,EAAA2L,GAAAA,WACE,GAAIzmJ,KAAKq5G,IAAcr5G,KAAKqiJ,KAAoB,CAC9C,IAAMh6C,EAAWroG,KAAKq5G,EAAUxK,qBAKhC,OAAO,IAAInhE,KAA2B,KAJpB26D,E4BzpKRd,G5B0pKNc,E4Bx5KM5B,G5Bq5KoC,CAOzC,OAAIzmG,KAAK+1E,GAAU/1E,KAAK+1E,EAAOwwE,cAG9BC,EAAYxmJ,KAAK+1E,EAAOwwE,eAC1B70H,MAAM80H,EAAU5kD,WAIX,KAEF4kD,GAGA,IArBsB,IAiCjC17C,GAAAA,WACE,OAAK9qG,KAAK8rG,KAKN9rG,KAAKq5G,EACUr5G,KAAKq5G,EAAUxK,qBAChB/D,KALT,IAHsB,EAuBjCgwC,EAAA5vD,GAAAA,WACE,GAAIlrF,KAAK+oI,GAAmCkL,GAC1C,OAAOj0I,KAAKupI,EAAmBr+C,KAGjC,IAAMz4B,EAAO,CACXozC,MAAO,GACPh+C,MAAO,GACPC,MAAO,GACP7c,KAAM,IAQR,OALIjrC,KAAK+oI,GAAmC+K,KAE1CrhF,EAAKozC,MAAwB5a,GAAgBjrF,KAAK+1E,EAAOspB,WAGpD5sC,CAjBS,IA2BlB6mE,SAAAA,WAKE,GAFet5H,KAAK+oI,GAAmCkL,IACxCj0I,KAAK+oI,GAAmC+K,GAErD,MsCn1KK,CACLt5G,MAAO+5E,IACPh6E,OAAQg6E,IACRmyC,gBAAiBnyC,IACjBoyC,cAAepyC,IACfqyC,cAAeryC,IACfsyC,gBAAiBtyC,IACjBuyC,eAAgBvyC,IAChBwyC,WAAYxyC,IACZyyC,mBAAoBzyC,IACpB0yC,kBAAmB1yC,IACnB2yC,YAAa3yC,IACb4yC,oBAAqB5yC,IACrB6yC,eAAgB7yC,IAChB8yC,SAAU9yC,IACV+yC,UAAW/yC,IACXgzC,cAAehzC,IACfizC,YAAajzC,IACbkzC,YAAalzC,IACbjI,mBAAoBiI,IACpBmzC,kBAAmBnzC,IACnBu8B,gBAAiBv8B,IACjBozC,mBAAoBpzC,IACpBqzC,oBAAqBrzC,IACrBszC,iBAAkBtzC,IAClBuzC,cAAe,GACfC,aAAc,ItC4zKX7X,GAALA,MAGA,IAAM7lI,EAA4CrK,KAAK+1E,EAEjDmiE,EAAkB7tI,EAAQq6F,YAAcr6F,EAAQo4F,SACtD,IAAK/wE,MAAMwmH,KAAqBl4I,KAAK8rG,IAArC,CACOulB,IAAAA,EAALA,KAAKA,EAA4B,EAAAzuH,KAAKmpD,MAAM,IAAMmsF,GsCp/KlD,EAAKnkC,EADHriF,MAAM,EAAKqiF,GACaokC,EAEAv1I,KAAK4G,IAAI,EAAKuqG,EAAoBokC,EtCi/K9D,CASA,GALIn4I,KAAKspI,IACPtpI,KAAKqxH,EsCjiLFrd,EtCiiLuBh0G,KAAKspI,EAAUrV,KACzCj0H,KAAKqxH,EsC5iLFpd,EtC4iL2Bj0G,KAAKspI,EAAUvV,MAG3C1pH,EAAQ29I,wBAAyB,CAC7Bv1F,EAAOpoD,EAAQ29I,0BAEhB32B,EAALA,KAAKA,EAED,MAAArpF,OAAOyqB,EAAKw1F,kBsCvkLlB,EAAK7zC,EtCskLCpsE,OAAOyqB,EAAKy1F,oBsCrkLlB,EAAK/zC,EAAsBtvE,EtCukLzB7kC,KAAKqxH,EsC9jLFnd,EtC8jL4BlsE,OAAOyqB,EAAK01F,qBANR,CAarC,GN91JA,EM21JInoJ,KAAK4hF,IAAa,EAAA5hF,KAAK,GN31JlBm2E,EACA,EAAKA,EM01J2Co+B,IACzDv0G,KAAKqxH,EsCl/KAl7C,EtCi/KDiyE,EAGApoJ,KAAK+oI,GAAmCkL,GAAc,CAOxD,GAHMrsF,EAAU5nD,KAAK2pI,E4Cl3KX12B,E5Cm3KJxpD,EAAazpD,KAAK2pI,E4C12KdnwB,E5C42KN5xD,EAAS,KAIPygG,GAHE1sF,EAAO37D,KAAKgqI,EACfhqI,KAAKgqI,EkC7lLAl4B,ElC6lLoC,GACZlqD,EAAQx1B,UAEpCq3B,GAAcA,EAAWr3B,YAC3Bi2H,GAA2B1sF,EAAOlS,EAAWr3B,WAE/CpyB,KAAKqxH,EsC1+KJ5d,EtC0+KqC40C,CAR3B,CAWTzgG,GAAWA,EAAQE,QAChBupE,EAALA,KAAKA,EAEa,EAAAzpE,EAAQE,MAAMvtB,QAAUg6E,IsC7jL9C,EAAKD,EtC4jLgB1sD,EAAQE,MAAMttB,OAAS+5E,IsC3jL5C,EAAKF,EAAU95E,GtC+jLTv6B,KAAK8rG,MACDvyC,EAAMv5D,KAAKymJ,KAAiCnqI,UACxB,IAAtBjS,EAAQq6F,YAEZ1kG,KAAKqxH,EsCvgLJ1d,GtCsgLgBjmE,KAAK6rB,MAAQA,GAAO,KAInCv5D,KAAKq5G,IACPr5G,KAAKqxH,EsCt9KJ3c,EtCs9KkC10G,KAAKq5G,EAAUivC,YAClDtoJ,KAAKqxH,EsCh9KJ5c,EtCg9K+Bz0G,KAAKq5G,EAAUkvC,SAC3CvoJ,KAAKq5G,EAAUxK,uBAGjB7uG,KAAKqxH,EsCvgLN3d,EtCsgLK1zG,KAAKq5G,EAAUxK,qB4BplLbhI,I5BylLJmlB,EAAWhsH,KAAK8wH,EAAYz+F,uBAClCryB,KAAKqxH,EsC9/KF7d,EtC8/K8BwY,CA1CuB,CA6CtDhsH,KAAK+oI,GAAmC+K,MACrCziB,EAALA,KAAKA,GsCn/KA/d,GADH5hF,MAAM,EAAK4hF,ItCo/KkBiB,IsCj/K/B,EAAKjB,GtCi/K0BiB,IAC1B8c,EAALA,KAAKA,EAEa,EAAAhnH,EAAQmiD,aAAe+nD,IsCzlL3C,EAAKD,EtCwlLcjqG,EAAQkiD,YAAcgoD,IsCvlLzC,EAAKF,EAAU95E,GtC2lLH82F,IAAAA,EAALA,KAAKA,EsC18KE/c,EAAL,EAAKA,EACCD,EAAL,EAAKA,EACSZ,EAAL,EAAKA,EACFU,EAAL,EAAKA,EACAC,EAAL,EAAKA,EDvMtB,ICwMwBF,IAAAA,EAAL,EAAKA,EACDD,EAAL,EAAKA,EACJD,EAAL,EAAKA,EACQR,EAAL,EAAKA,EACDO,EAAL,EAAKA,EACND,EAAL,EAAKA,EACQD,EAAL,EAAKA,EACLD,EAAL,EAAKA,EACX,EAAmBd,GAAnB,EAAK6B,EAA6B,WACjC,EAAmB7B,GAAnB,EAAK6B,EAA6B,UAC9B,EAAmB7B,GAAnB,EAAK6B,EAA6B,aAC/Bx+B,EAAL,EAAKA,EACAw9B,EAAL,EAAKA,EACOD,EAAL,EAAKA,EACDH,EAAL,EAAKA,GACFD,EAAL,EAAKA,GACGkB,EAAL,EAAKA,EACCE,EAAL,EAAKA,EACHD,EAAL,EAAKA,EACT,EF3NlB+zC,SAAAA,GACgBjgH,SAAA,EAAC3mC,GACb,MAAO,CACLuqF,UAAWvqF,EAAMuqF,UACjB72E,MAAO1T,EAAM0T,MACbmtF,SAAU7gG,EAAM6gG,SAJK,CASzB,IADA,IAAMpnE,EAAO,GACYw3E,EAAAzjF,EAALyjF,EAAKA,GAAAA,EAAAA,EAAAA,QAAzB,kBACEx3E,EAAKl9B,KAAKoqC,EADZ,EAAA3mC,QAOA,OAJI,EAAKgxG,GACPv3E,EAAKl9B,KAAKoqC,EAAM,EAAKqqE,IAGhBv3E,CAjBC,CE2N2BmtH,CAAnB,EAAK7zC,GD7Nft5E,EAAO,GAEY63E,GAAAA,EAAA9jF,EC4NR,EAAKylF,ED5NG3B,IAAAA,QAAzB,SAAA9rG,EAAA,OAAAxF,EAAAA,EAAAA,MACEy5B,EAAKl9B,KAsBA,CACLguF,UAAWvqF,EAAMuqF,UACjBjsE,GAAIte,EAAMse,GACVxjB,KAAMkF,EAAMlF,KACZ22G,eAAgBzxG,EAAMyxG,eACtBjhF,UAAWxwB,EAAMwwB,YrCinLnB,MsC38KO,CACLoI,MAAY85E,EACZ/5E,OAAa85E,EACbqyC,gBAAsBjzC,EACtBkzC,cAAoBxyC,EACpByyC,cAAoBxyC,EACpByyC,gBAAsB3yC,EACtB4yC,eAAqB7yC,EACrB8yC,WAAiB/yC,EACjBgzC,mBAAyBxzC,EACzByzC,kBAAwBlzC,EACxBmzC,YAAkBpzC,EAClBqzC,oBAA0BtzC,EAC1BuzC,eAAqBxzC,EACrByzC,SAAU,EACVC,UAAW,EACXC,cAAe,EACfC,YAAkBrxE,EAClBsxE,YAAkB9zC,EAClBrH,mBAAyBoH,EACzBg0C,kBAAwBn0C,EACxBu9B,gBAAsBx9B,EACtBq0C,mBAAyBnzC,EACzBozC,oBAA0BlzC,EAC1BmzC,iBAAuBpzC,EACvBszC,aAAc,EACdD,cDxNKzsH,ErCgjLE,IA6GLotH,GAAAA,SAAkB/vG,EAAKzzC,EAAUgS,EAAM8gB,EAAUooB,EAAO5gC,EAC1D9P,GAAAA,OAAA,IAAAA,GAAAA,EAAgB,IAsBdimI,EAcIgT,EAEAtrB,EACAurB,EAkBF1rD,EAEFwF,EAcIv/F,EAGAyyI,EACAC,EAMFjzF,EAnFY,cAAAzgB,GAAA,+BAClB,GAAI,EAAK6mG,GAAmCkL,IACxC,EAAKlL,GAAmC+K,GAI1C,MAAM,IAAe53G,G1BvmLV6wC,EAmCL3K,EAgxBYwmF,M0Bg0JpB,GANY,aAAR3xI,GAA+B,YAARA,GACfyc,EACN,wFAIDqE,EAAL,cACa,WAAWw9G,GAALA,EAAsB78F,GAA5B,GAnBK,OAmBhB3gB,EAAW,IAnBK,OA2BlB,GALI29G,EAAc,GACd,EAAKpK,IACPoK,EAAc,EAAKpK,EAAWud,gBAG5B,EAAK9f,GAAmC+K,GAA5C,cAKE,OAJIrkI,IAEFwH,EAAO,UAET,IAAWw+H,GAALA,EAAyB/8F,EAAKzzC,EAAUgS,EAAM8gB,EAAUxY,GAAS,GACnEm2H,GADJ,GAhCgB,OA4ChB,GARMgT,EAAmCziG,GAAUhhD,GAE7Cm4H,EAAa,EAAKkc,KAClBqP,EAAWvrB,EAAWl6G,MAAK,SAAC9D,GAChC,OAAqB6mC,GAAU7mC,EAAEna,WAAayjJ,GAC1CtpI,EAAEG,QAAUA,GAAS,KACrBH,EAAEnI,MAAQA,CAHwB,IAOtC,OADKg4H,GAALA,GACA,EAAAnrG,OAAO6kH,GAKT,MAAM,IAAezsH,G1BppLV6wC,EAoBP3nC,EAgLkC0jH,M0B65KtB,OA+DlB,GANM7rD,EAA6C17C,GAE/CkhD,EAAW,EAAK1sB,EAAO0sB,SACvB,EAAK4W,IACP5W,EAAW,EAAK4W,EAAUxK,qBAAqBzI,eAEjC9uE,KAAZmrE,EACF,MAAM,IAAevmE,G1BjqLV6wC,EA0BHltB,EA0gB+BkpG,M0BmoKzC,IAAIrT,EAAY92I,OAAhB,cAGe,WAAWk3I,GAALA,EAAkBp9F,EACjC,EAAKo3E,EACL,EAAK33D,EAAQgrB,UAAU1Y,iBAFd,GAzEG,OAyEVvnE,EAAO,IAGPyyI,EAAeI,GAALA,EAAsB7yI,EAAM60B,EAAU29G,GAChDE,EAAO,IAAII,KAAK,CAACL,GAAU,CAACj5I,KAAM,aACxCg8C,EAAoCmkD,GAAgB+4C,GACpD79G,EAAW,WA/EK,OA0HlB,GAvCM4qB,EAAS,CACbziC,GAAI,EAAKiqH,KACTt1E,WAAY,KACZ/J,QAAS,KACT8yC,mBAAoBA,WAAM,OAAAl4C,QAAQ7J,SAAR,EAC1BmZ,aAAuCugE,GAClB,EACD9yB,EACJ,CAAC/pD,IACjB3gB,SAAUA,GAAY,GACtB4nB,OAAQQ,GAAS,GACjBlpC,KAAMA,EACN43C,WAAW,EACX0D,SAAU,GACVh1B,OAAQ,IAAI/K,IACZvtB,SAAUA,EACV2vD,iBAAkB3vD,EAClBsa,MAAOA,GAAS,KAChB7iB,KAAMugG,EAAY37C,GAClB0S,SAAS,EACTqD,eAAgB,KAChBypC,iBAAkB,KAClB71C,MAAO,GACPx7C,SAAUA,EACVs7C,cAAe,KACfC,kBAAmB,KACnBkH,cAAc,EACd4tC,eAAgB,KAChBnrC,qBAAsB,KACtBupC,UAAU,EACVhzC,eAAe,EACfsG,cAAe,IAAIh/B,IAAI,CAAsB6vB,GACzCtqB,GAAY,GAAIooB,GAAS,MAC7BmlD,qBAAqB,IAKiBtjB,GAFE3/B,GACtCM,EAAO5qB,SAAU4qB,EAAOhD,SAG1B,MAAM,IAAezjB,G1BrtLbiJ,EAaJC,EA6LewxG,K0B+gLf7+G,GAKN,OAFA,EAAKshF,EAAU9vD,YAAYprD,KAAKwkD,GAC3BssF,GAALA,GACA,EAAAnrG,OAA8Bg/G,GAAkBngG,IApI9B,OAoJdqmG,GAAAA,SAAmBtwG,EAAK3gB,GAAW,IAwBjCklE,EACFwF,EAaE5hG,EAIA6jF,EAQAukE,EACAhhH,EAMA/kC,EACAkiD,EAEAsmD,EACYtmD,EAAAA,EAAlB,EAEQqiC,EAOAniF,EAYE4jJ,EAaNC,EAQExmG,EAvGgC,cAAAzgB,GAAA,+BACtC,GAAI,EAAK6mG,GAAmCkL,IACxC,EAAKlL,GAAmC+K,GAI1C,MAAM,IAAe53G,G1B3vLV6wC,EAmCL3K,EAgxBYwmF,M0B88JpB,GAAK7wH,EAAL,cACa,WAAWw9G,GAALA,EAAsB78F,GAA5B,GAbyB,OAapC3gB,EAAW,IAbyB,OAgBtC,GAAgB,YAAZA,EACF,MAAM,IAAemE,G1BtwLV6wC,EAoBP3nC,EA4M+BgkH,K0B0iL/B1wG,GAQN,GALMukD,EAA6C17C,GAC/CkhD,EAAW,EAAK1sB,EAAO0sB,SACvB,EAAK4W,IACP5W,EAAW,EAAK4W,EAAUxK,qBAAqBzI,eAEjC9uE,KAAZmrE,EACF,MAAM,IAAevmE,G1BnxLV6wC,EA0BHltB,EA2jBqCwpG,M0BssKhC,WAAWvT,GAALA,EAAkBp9F,EACnC,EAAKo3E,EACL,EAAK33D,EAAQgrB,UAAU1Y,iBAFZ,GAtCuB,OA2CtC,GALM5pE,EAAS,MAIT6jF,ElCt1LuB5/B,GkCs1LoB/sB,IAE/C,MAAM,IAAemE,G1B1xLbiJ,EAaJC,EA6LewxG,K0BolLf7+G,GAaN,IAXMkxH,EAAavkE,IACbz8C,EAAO,CACXm4D,YAAa,EACbC,aAAc,EACdC,WAAYmC,EACZzC,UAAW,GAEP98F,EAA8B4zB,GAAQj2B,GACtCukD,EAAO6jG,EAAW1oD,WAAWr9F,EAAM+kC,EAAMyQ,EAAmB,IAE5DgzD,EAAa,GACDtmD,EAAAh2B,EAAAg2B,GAAAA,EAAAA,EAAAA,OAAlB,6DACMilB,EAAAA,GAAO,KACLod,EAAUA,SAAAA,GAAAA,OAAAA,WAKd,OAJY,MAARpd,EAAAA,KACFA,EAAAA,GAAsCi/E,GAClC,CAAC5wG,GAAM,CAAChF,EAAAA,GAAI5C,WAEXu5B,EAAAA,IAAQ,EALK,CAANod,CAAAA,CAAAA,GAOVniF,EAAY,IAAgBmlF,GAC9B/2C,EAAAA,GAAI9C,UACJ8C,EAAAA,GAAI7C,QACJ42C,EACiB,EACF,KACa,KACL,EACE,EACFnwD,KAEvBoc,EAAAA,GAAI5C,QAAQvnC,SAAS,UAEG,KADpB2/I,EAAax1G,EAAAA,GAAI5C,QAAQv+B,MAAM,UAAU,GAAGA,MAAM,MACzC3T,QACb0G,EAAU8kF,GAAmB,CAC3B7vD,OAAQ3U,SAASsjI,EAAW,GAAI,IAChCjF,UAAWr+H,SAASsjI,EAAW,GAAI,IACnChF,UAAWt+H,SAASsjI,EAAW,GAAI,IACnC1uH,MAAO5U,SAASsjI,EAAW,GAAI,MAIrCx9C,EAAWvtG,KAAKmH,GAIlB,GADI6jJ,EAAkBpxH,GAClB2zE,EAAW9sG,OAAf,cACoB,WAAgCywI,GAC9C3jC,EAAW,GAAGjkB,IAAU,GACxB,EAAKqoC,EAAmB,EAAK33D,EAAQlP,SAASwhB,iBAFhC,GAjGkB,OAiGpC0+E,EAAkB,IAjGkB,OA+ItC,OAxCMxmG,EAAS,CACbziC,GAAI,EAAKiqH,KACTt1E,WAAY,KACZ/J,QAAS,KACT8yC,mBAAoBA,WAAM,OAAAl4C,QAAQ7J,SAAR,EAC1BmZ,aAAc,IAAgBo8C,GAAa1F,GAC3C3zE,SAAUoxH,GAAmB,GAC7BxpG,OAAQ,GACR1oC,KAAM,GACN43C,WAAW,EACX0D,SAAU,GACVh1B,OAAQ,IAAI/K,IACZvtB,SAAU,MACV2vD,iBAAkB,KAClBr1C,MAAO,KACP7iB,KAAMugG,EAAYv7C,GAClBsS,SAAS,EACTqD,eAAgB,KAChBypC,iBAAkB,KAClB71C,MAAO,GACPx7C,QAAQ,EACRs7C,cAAe,KACfC,kBAAmB,KACnBkH,cAAc,EACd4tC,eAAgB,KAChB1rC,YAAa,MACbO,qBAAsB,KACtBupC,UAAU,EACVhzC,eAAe,EACfsG,cAAe,IAAIh/B,IAAI,CAAsB6vB,GACzC8mG,GAAmB,GAAI,MAC3B7jD,qBAAqB,GAGnB,EAAKyjC,GAAmC+K,GAC1C,EAAK1J,GAAoCjsI,KAAKwkD,GAE9C,EAAK02D,EAAUl3B,aAAahkF,KAAKwkD,GAE9BssF,GAALA,GACA,EAAAnrG,OAA8Bo/G,GAAmBvgG,IA/IX,OA8JlC4mG,GAAAA,SAAiB7wG,EAAKzzC,EAAU8yB,GAAW,IAgB3C29G,EAMEG,EAIA2T,EACAzD,EA3BwC,cAAA7jH,GAAA,+BAC9C,GAAI,EAAK6mG,GAAmCkL,IACxC,EAAKlL,GAAmC+K,GAI1C,MAAM,IAAe53G,G1Bz5LV6wC,EAmCL3K,EAgxBYwmF,M0B4mKpB,GAAK7wH,EAAL,cACa,WAAWw9G,GAALA,EAAsB78F,GAA5B,GAbiC,OAa5C3gB,EAAW,IAbiC,OAsBzB,OANjB29G,EAAc,GACd,EAAKpK,IACPoK,EAAc,EAAKpK,EAAWud,gBAIX,IAAWpT,GAALA,EACvB/8F,EAAKzzC,EAAsB,WAAY8yB,EAAuB,GAC9D29G,GAFiB,GAtByB,OA+B9C,GATMG,EAAe,IAIf2T,EAAiB,EAAKhE,OACtBO,EAAgByD,EAAetmI,MAAK,SAAC9D,GACzC,OAAOA,EAAEna,UAAYA,CAD0B,KAIjD,cACE,WAAM,IAAIygD,SAAQ,SAAC7J,EAAS6U,GAI1B,EAAKy4E,EAAkB70G,GAAWuhH,EAAc,OAAQh6F,GACxD,EAAKstF,EAAkB70G,GAAWuhH,EAAc,SAAS,WACvDnlF,EAAO,IAAex0B,G1Bz7Lf6wC,EAoBP3nC,EAoMiBqkH,M0BguLiD,GAL/B,IAAvC,GAhC4C,OA+C5C,OAFKxa,GAALA,GAEA,EAAAnrG,OAAOiiH,GA/CqC,OAqD9C,MAAM,IAAe7pH,G1Bx8LR6wC,EAoBP3nC,EAgLkC0jH,M0B+sLM,KAiMhDhO,EAAA4O,GAAAA,SAAyBlvH,EAAOD,GAC9Bv6B,KAAK2hF,GAAUnnD,MAAQA,EACvBx6B,KAAK2hF,GAAUpnD,OAASA,CAFc,EAsBxCugH,EAAAjP,GAAAA,SAAekL,GACN,GAAA/2I,KAAK+oI,GAAmCkL,GAAxC,CACA,MAAAj0I,KAAA,E4C98IP,G5C88IO,kB4C98IH,EAAKi4E,ElCrwDGhP,EkCuwDV,GAAO,OAGT,GAAI,EAAK2wC,EAGP,GAAO,MAHT,CAMA,IAAyB,MAAAxqF,EAAA,EAAKsqF,EAAanqG,UAAlB,YAAzB,+BAIiBquG,IAAa9C,EAAWc,IAClCd,EAAWuB,KAEdvB,EAAW8C,IAAW,EACjBtB,GAALA,EAAqBxB,EAAY6uC,IAIrC,GAAO,CAlBP,C5Cw8IO,MAEA,KAFP,OAAO,CAD+B,IAoBxCtwB,GAAAA,WAME,OALU3lG,EACN,4NAIG1zB,KAAKq5G,CANA,EAgBdyhC,EAAA8O,GAAAA,WACE,OAAO5pJ,KAAKwwH,EADa,IAY3Bq5B,GAAAA,WACE,IAAMrrI,EAAoD,CACxD,MAAS,KACT,MAAS,KACT,KAAQ,MAEV,GAAIxe,KAAK+oI,GAAmCkL,GAC1C,OAAOz1H,EAMT,IAHA,IAAMopC,EAAU5nD,KAAK2pI,E4C1/LT12B,E5C4/LNvO,EAAc1kG,KAAK+1E,EAAO2uB,YACX,KAAAt1E,EAAA,CAACw4B,EAAQE,MAAOF,EAAQC,MAF1B7nD,KAAK2pI,E4Cl/LZnwB,K5Co/LS,QAArB,kBACE,IADF,YACkB72D,EAAOqS,aAAvB,CAGA,IAAMv3C,EAAWklC,EAAOqS,aAAa9xC,KAAKwhF,GAEpCjyC,EAAwD,CAC5D,QAFIntD,EAAYq9C,EAAOqS,aAAatlD,IAAI+N,IAEpBkiC,QAAUgD,EAAOhD,OACrC,SAAYr6C,EAAUyyB,UAAY4qB,EAAO5qB,SACzC,UAAazyB,EAAU8sB,WAAauwB,EAAOvwB,WXvkM1CovB,SWykMCmB,EAAOjmD,MACT+1D,EAAA,MAAgB9P,EAAOnoB,MACvBi4B,EAAA,OAAiB9P,EAAOpoB,OACxB/b,EAAA,MAAkBi0C,GX3kMjBhR,SW4kMQkB,EAAOjmD,KAChB8hB,EAAA,MAAkBi0C,EACT9P,EAAOjmD,MAAoB0jD,KACpC5hC,EAAA,KAAiBi0C,EAjBnB,CAoBF,OAAOj0C,CAlCgB,EAoGzBs8H,EAAAgP,GAAAA,SAAkBrsB,GAChBz9H,KAAK69H,GAAkBJ,CADS,EAwhClCqd,EAAAz2B,cAAAA,SAAc1hE,EAAQonG,GAgBpB,IAfK/pJ,KAAKm4D,EAAQq0D,IAAI72D,SAClB31D,KAAK+oI,IAAoC2L,KAIxCz1G,UAAUu5B,QAMI,GAAfuxF,IAIC/pJ,KAAKq5G,EACR,OAAO,EAkBT,GAbqBr5G,KAAKq5G,EAAU1vD,SAASmF,MAAK,SAAClH,GACjD,IAAMoiG,EAAYpiG,EAAQjF,EAAOjmD,MAEjC,SAAIstJ,GAAaA,EAAU9pI,KAAOyiC,EAAOziC,IACpC0nC,EAAQqO,mBXtsOVxU,SWusOkCkB,EPvoLzBjmD,MOwoLDimD,EAAO19C,WAAa+kJ,EAAU/kJ,SANoB,IAa7C,CAKhB,IAJA,IAAIglJ,GAAmB,EAEnBC,GAAmB,EAEcvgG,EAAAv6B,EAAfu6B,KAAK0vD,EAAU1vD,UAAAA,EAAAA,EAAAA,QAArCviD,EAAA,KAAAA,EAAA,SAA+C,CAC7C,IAAMigD,GADRjgD,EAAAA,EAAA,OAC4Bu7C,EAAOjmD,MAE5B2qD,IAIDA,EAAUnnC,KAAOyiC,EAAOziC,IAC1B0nC,EAAQqO,kBAAqBvoB,KAAK6rB,MAAQ,IAAQwwF,EAClDE,GAAmB,GAKV5iG,EAAUgQ,gBACjBhQ,EAAUgQ,eAAen3C,IAAMyiC,EAAOziC,KACxCgqI,GAAmB,GAhBwB,CAoB/C,SAAKD,GAAoBC,IAMzBlqJ,KAAK8rI,GAAoBrnG,GAAU,GAI7B62E,EADUt7G,KAAKkrF,KAAdpjC,MAEG9b,QAAO,SAAC7qC,EAAM,GAAiB,OAAAA,EAAjB,EAAQuI,IAAR,EAACD,KAAgB,GAAoB,GAGxDyiI,GAALA,MACuB,EAAyB5wB,GAC/B,GAA4B,GACtC,GA1CS,CAiDlB,OAAO,CApF0B,EAoJ7Bw/B,EAAApM,QAAAA,SAAQxtI,EAAM2W,GAMhB,IAAMsyI,EAUiB,IAAvB/iJ,EAMMgjJ,EAtBe,OAAAloH,GAAA,sBACvB,MAAI,UAAWvyB,UAAY,aAAc4E,EACvC,IAAM5E,SAAS06I,MAAM9lD,MAArB,GADF,OAEE,KAAM,YAAa50F,SAAS06I,OAC1B,SAAAvmH,SAYF,IAVMqmH,EAA6BA,SAACn+I,GAIlC,IAFA,IAAM07B,EAAU,GACZ9+B,GAFE+nE,EAAW3kE,EAAOsD,WAEAzG,QACC,IAAlBD,EAASG,MACd2+B,EAAQvpC,KAAKyK,EAAS/E,OACtB+E,EAAW+nE,EAAS9nE,OAEtB,OAAO6+B,CARsC,EAUxB,EAAAtY,EAAA+6H,EAA2Bx6I,SAAS06I,QAApC,YAAvB,kBACE,IADFjjJ,EAAA,SACekjJ,QAAUppJ,GAA4B,QAApBkpJ,EAASvvI,QAEtC,SAAAipB,SAGEsmH,EAAW,IAAIG,SAASrpJ,EAAO,OAAM2W,EAAN,IAAc,CAACgD,QAAS,SAC7DlL,SAAS06I,MAAMn5H,IAAIk5H,GAvBE,SAoezBtP,EAAAuH,GAAAA,WACE,SAAKriJ,KAAK+1E,IAAW/1E,KAAK+1E,EAAOqL,SAGE,gBAA5BphF,KAAK+1E,EAAOqL,OAAO9rE,KAJT,EAh+OrBof,EAAA,eAAAgmH,IAg+OEA,GAAA9lH,U1FtwMA,iB0FswMA8lH,GAAA,UAAA9lH,GApeM8lH,GAAA9lH,U1FlyLN,Q0FkyLM8lH,GAAA,UAAA9lH,QA5qCN8lH,GAAA9lH,U1FtnJA,kB0FsnJA8lH,GAAA,UAAA9lH,GApGA8lH,GAAA9lH,U1FlhJA,uB0FkhJA8lH,GAAA,UAAA9lH,GAZA8lH,GAAA9lH,U1FtgJA,yB0FsgJA8lH,GAAA,UAAA9lH,GAhBA8lH,GAAA9lH,U1Ft/IA,Y0Fs/IA8lH,GAAA,UAAA9lH,GApBA8lH,GAAA9lH,U1Fl+IA,e0Fk+IA8lH,GAAA,UAAA9lH,MAtBAA,U1F58IA,yB0F48IA8lH,GAAA,UAAA9lH,GAjMM8lH,GAAA9lH,U1F3wIN,iB0F2wIM8lH,GAAA,UAAA9lH,GA9JA8lH,GAAA9lH,U1F7mIN,mB0F6mIM8lH,GAAA,UAAA9lH,GArJA8lH,GAAA9lH,U1Fx9HN,kB0Fw9HM8lH,GAAA,UAAA9lH,GA7GN8lH,GAAA9lH,U1F32HA,S0F22HA8lH,GAAA,UAAA9lH,SA3BA8lH,GAAA9lH,U1Fh1HA,gB0Fg1HA8lH,GAAA,UAAA9lH,GAvBA8lH,GAAA9lH,U1FzzHA,+B0FyzHA8lH,GAAA,UAAA9lH,GAjCA8lH,GAAA9lH,U1FxxHA,+B0FwxHA8lH,GAAA,UAAA9lH,GA1CA8lH,GAAA9lH,U1F9uHA,sB0F8uHA8lH,GAAA,UAAA9lH,GA5DA8lH,GAAA9lH,U1FlrHA,uB0FkrHA8lH,GAAA,UAAA9lH,MAtFAA,U1F5lHA,Y0F4lHA8lH,GAAA,UAAA9lH,GAjBA8lH,GAAA9lH,U1F3kHA,kB0F2kHA8lH,GAAA,UAAA9lH,GArBA8lH,GAAA9lH,U1FtjHA,mB0FsjHA8lH,GAAA,UAAA9lH,GApEA8lH,GAAA9lH,U1Fl/GA,sB0Fk/GA8lH,GAAA,UAAA9lH,GAtDA8lH,GAAA9lH,U1F57GA,mB0F47GA8lH,GAAA,UAAA9lH,GAtFA8lH,GAAA9lH,U1Ft2GA,oB0Fs2GA8lH,GAAA,UAAA9lH,GAhBA8lH,GAAA9lH,U1Ft1GA,iB0Fs1GA8lH,GAAA,UAAA9lH,GAXA8lH,GAAA9lH,U1F30GA,kB0F20GA8lH,GAAA,UAAA9lH,GAXA8lH,GAAA9lH,U1Fh0GA,yB0Fg0GA8lH,GAAA,UAAA9lH,GAXA8lH,GAAA9lH,U1FrzGA,0B0FqzGA8lH,GAAA,UAAA9lH,GApFA8lH,GAAA9lH,U1FjuGA,mB0FiuGA8lH,GAAA,UAAA9lH,MA/GAA,U1FlnGA,gB0FknGA8lH,GAAA,UAAA9lH,GA5FM8lH,GAAA9lH,U1FthGN,c0FshGM8lH,GAAA,UAAA9lH,GAvEA8lH,GAAA9lH,U1F/8FN,iB0F+8FM8lH,GAAA,UAAA9lH,GAlBN8lH,GAAA9lH,U1F77FA,e0F67FA8lH,GAAA,UAAA9lH,GAhCA8lH,GAAA9lH,U1F75FA,c0F65FA8lH,GAAA,UAAA9lH,GAxDA8lH,GAAA9lH,U1Fr2FA,iB0Fq2FA8lH,GAAA,UAAA9lH,GAvBA8lH,GAAA9lH,U1F90FA,gB0F80FA8lH,GAAA,UAAA9lH,GArDA8lH,GAAA9lH,U1FzxFA,U0FyxFA8lH,GAAA,UAAA9lH,GA3BA8lH,GAAA9lH,U1F9vFA,gB0F8vFA8lH,GAAA,UAAA9lH,GArBA8lH,GAAA9lH,U1FzuFA,Y0FyuFA8lH,GAAA,UAAA9lH,GAZA8lH,GAAA9lH,U1F7tFA,e0F6tFA8lH,GAAA,UAAA9lH,GAVA8lH,GAAA9lH,U1FntFA,0B0FmtFA8lH,GAAA,UAAA9lH,MAVAA,U1FzsFA,c0FysFA8lH,GAAA,UAAA9lH,GA1BA8lH,GAAA9lH,U1F/qFA,Q0F+qFA8lH,GAAA,UAAA9lH,QAZA8lH,GAAA9lH,U1FnqFA,U0FmqFA8lH,GAAA,UAAA9lH,UAZA8lH,GAAA9lH,U1FvpFA,c0FupFA8lH,GAAA,UAAA9lH,GAdA8lH,GAAA9lH,U1FzoFA,S0FyoFA8lH,GAAA,UAAA9lH,GAtCA8lH,GAAA9lH,U1FnmFA,U0FmmFA8lH,GAAA,UAAA9lH,GAzCA8lH,GAAA9lH,U1F1jFA,Y0F0jFA8lH,GAAA,UAAA9lH,GAlBA8lH,GAAA9lH,U1FxiFA,a0FwiFA8lH,GAAA,UAAA9lH,GApBA8lH,GAAA9lH,U1FphFA,O0FohFA8lH,GAAA,UAAA9lH,EAtBA8lH,GAAA9lH,U1F9/EA,a0F8/EA8lH,GAAA,UAAA9lH,GAXA8lH,GAAA9lH,U1Fn/EA,Y0Fm/EA8lH,GAAA,UAAA9lH,GAXA8lH,GAAA9lH,U1Fx+EA,oB0Fw+EA8lH,GAAA,UAAA9lH,MAVAA,U1F99EA,gB0F89EA8lH,GAAA,UAAA9lH,GAfA8lH,GAAA9lH,U1F/8EA,gB0F+8EA8lH,GAAA,UAAA9lH,GAVA8lH,GAAA9lH,U1Fr8EA,Y0Fq8EA8lH,GAAA,UAAA9lH,GAnBA8lH,GAAA9lH,U1Fl7EA,mB0Fk7EA8lH,GAAA,UAAA9lH,GAzBA8lH,GAAA9lH,U1Fz5EA,kB0Fy5EA8lH,GAAA,UAAA9lH,GA7BA8lH,GAAA9lH,U1F53EA,2B0F43EA8lH,GAAA,UAAA9lH,GAjBA8lH,GAAA9lH,U1F32EA,iB0F22EA8lH,GAAA,UAAA9lH,iBA5ZA8lH,GAAA9lH,U1F/8DA,U0F+8DA8lH,GAAA,UAAA9lH,UA5aA8lH,GAAA9lH,U1FniDA,kB0FmiDA8lH,GAAA,UAAA9lH,GAn5CM8lH,GAAA9lH,U1FhJN,mB0FgJM8lH,GAAA,UAAA9lH,GAlBA8lH,GAAA9lH,U1F9HN,Q0F8HM8lH,GAAA,UAAA9lH,WA1EAA,U1FpDN,qB0FoDM8lH,GAAA,UAAA9lH,GApBA8lH,GAAA9lH,U1FhCN,qB0FgCM8lH,GAAA,UAAA9lH,GA9RA8lH,GAAA9lH,U1F8PN,K0F9PM8lH,GAAA,UAAA9lH,KAjBN8lH,GAAA9lH,U1F+QA,gB0F/QA8lH,GAAA,UAAA9lH,GA1OM8lH,GAAA9lH,U1FyfN,O0FzfM8lH,GAAA,UAAA9lH,GA3DA8lH,GAAA9lH,U1FojBN,O0FpjBM8lH,GAAA,UAAA9lH,OAdN8lH,GAAA9lH,U1FkkBA,a0FlkBA8lH,GAAA,UAAA9lH,GA/CM8lH,GAAA9lH,U1FinBN,O0FjnBM8lH,GAAA,UAAA9lH,M1FinBN,a0FnqBa41H,SAAaC,GAGxBD,IAAItnE,EAIEj6B,EACAovC,EACAqyD,EAIAxjH,EAOAyjH,EACKzpJ,EArB+BspJ,OAAlBC,OAAAD,IAAAC,GAAAA,EAAkBvoH,GAAAsoH,SAAAA,GAAAA,OAAAA,EAAAA,GAAAA,KAAAA,EAI1CA,GADItnE,EAAMsnE,CAAC,GACPC,EAAJD,CAAAA,EAAAA,EAAAA,GAAAA,KAAAA,CACQA,OAAAA,EAAAA,ENojBGA,WAIX,IAAMI,EAYAC,EAcAC,EAMAC,EAKAC,EAKAC,EAMAC,EAQAC,EAOAC,EA+DAC,EA0BAC,EAwCkBV,EAAAA,EAAxB,EAKMW,EACyBL,EAAAA,EAA/B,EAC0BN,EAAAA,EAAxB,EAesBA,EAAAA,EAAxB,EAC4B,IAA1B,EA3NwB,OAAA1oH,GAAA,uBAoM1B,IAhMM0oH,EAAiB,uOA0BjBE,EAAiB,CACrB,qBAfID,EAAqB,CACzB,mBACA,mBACA,mBACA,mBACA,iBAWA,gCAAiCA,EACjC,yCAT0B,CAC1B,MACA,OACA,SAmBII,EAAsB,CAC1B1uE,kBAXIwuE,EAAyB,CAC7B,CAACtzG,YAAa,mCACd,CAACA,YAAa,6BAUd6kC,kBAPI0uE,EAAyB,CAC7B,CAACvzG,YAAa,iCACd,CAACA,YAAa,8BAMdsb,cAAe,CAAC,OAAQ,OAAQ,MAAO,WAGnCm4F,EAAwB,CAC5B,KACA,OACA,OACA,YAIIC,EAAU,IAAI31H,IAOd41H,EAA8BA,SAAOruH,EAAWyuH,GAYpD,IAAM74F,EACFD,EAWE6pB,EACAD,EAEFmvE,EAiBEC,EAMA9tH,EAMAC,EAxDyD,OAAAqE,GAAA,+BAE7D,OADE,OACF,IAAMspH,EAAOtuE,kBAAb,GAF6D,OAC3D,aAD2D,OAQ7D,OALOlyE,EAAAA,GAKP,EAAA84B,SAR6D,OAa3D4uB,KADEC,EAAe64F,EAAO9uE,mBAAmB/pB,eAE3CA,EAAappD,SAAS,sBAMFogH,OACtBj3D,GAAkB,GAGd6pB,EAAoBivE,EAAO9uE,mBAAmBH,kBAC9CD,EAAoBkvE,EAAO9uE,mBAAmBJ,kBAEhDmvE,EAAe,CACjB/4F,gBAAAA,EACAiqB,kBAAmB,GACnBgvE,sBAAuB,GACvBC,sBAAuB,IAErBT,EAAQp2I,IAAIgoB,IAAcouH,EAAQz7I,IAAIqtB,GAExC0uH,EAAeN,EAAQz7I,IAAIqtB,GAG3BouH,EAAQvmJ,IAAIm4B,EAAW0uH,IAMnBC,EAAiBnvE,EAAkB,GAAG/9B,oBAEvCitG,EAAa9uE,kBAAkBpzE,SAASmiJ,IAC3CD,EAAa9uE,kBAAkBx+E,KAAKutJ,IAGhC9tH,EAAkB2+C,EAAkB,GAAGvpB,cAExCy4F,EAAaE,sBAAsBpiJ,SAASq0B,IAC/C6tH,EAAaE,sBAAsBxtJ,KAAKy/B,IAGpCC,EAAkBy+C,EAAkB,GAAGtpB,cAExCy4F,EAAaG,sBAAsBriJ,SAASs0B,IAC/C4tH,EAAaG,sBAAsBztJ,KAAK0/B,GA3DqB,UA+D3DwtH,EAAgBA,SAAOtuH,EAAWyhB,EACpC5gB,EAAiBC,GAEjB,IAAMguH,EAEwBtvE,EAAAA,EAA9B,EAI8BD,EAAAA,EAA9B,EAKMwvE,EAIA76F,EAEAu6F,EAnB+B,OAAAtpH,GAAA,+BAIrC,IAHE,OACI2pH,EACqBr7F,GAAYy6F,GACT1uE,EAAAntD,EAAZy8H,EAAYtvE,mBAAAA,EAAAA,EAAAA,QAA9B,8BACM/9B,iBAAmBA,EACvButG,EAAI/4F,WAAap1B,EAEnB,IAA8B0+C,EAAAltD,EAAZy8H,EAAYvvE,mBAAAA,EAAAA,EAAAA,QAA9B,8BACM99B,iBAAmBA,EACvButG,EAAI/4F,WAAan1B,EASJ,OANTiuH,EAAuCt7F,GAAYq7F,IAC3Cn5F,gBAAkB,WAChCo5F,EAAcn5F,aAAe,CAAC,sBAExB1B,EAAU,CAAC66F,EAAeD,GAEjB,IAAM5sH,UAAUu9C,4BAC3Bz/C,EAAWk0B,GADA,GAnBsB,OAqBrC,OAFMu6F,EAAS,IAEf,IAAMJ,EAA4BruH,EAAWyuH,GAA7C,GArBqC,OACnC,aADmC,OAsB9BxgJ,EAAAA,GAtB8B,UAyBnCsgJ,EAAiBA,SAAOvuH,EAAWyhB,EACrC5gB,EAAiBC,GAEjB,IAAMoyB,EA4BAlB,EAGAy8F,EAjC+B,OAAAtpH,GAAA,+BA+BjC,OA9BF,OACI+tB,EAAiB,CACrBvzD,KAAM,eACNorD,MAAO,CACLrQ,YAAaszG,EAAuB,GAAGtzG,YACvCjd,MAAO,IACPD,OAAQ,IACRo3B,QAAS,EACTI,UAAW,GAEblK,MAAO,CACLpQ,YAAauzG,EAAuB,GAAGvzG,YACvCia,SAAU,EACVC,QAAS,EACTC,WAAY,GAEdV,uBAAwB,CACtBn0B,UAAAA,EACA+qB,MAAO,CACLtJ,iBAAAA,EACAwU,WAAYp1B,GAEdiqB,MAAO,CACLrJ,iBAAAA,EACAwU,WAAYn1B,KAMd,IAAMoB,UAAU0xB,kBAAkB5B,aAAakB,GAA/C,GA/BiC,OAkCrC,OAJMlB,EACF,IAEEy8F,EAASz8F,EAAaC,gBAC5B,IAAMo8F,EAA4BruH,EAAWyuH,GAA7C,GAlCqC,OACnC,aADmC,OAmC9BxgJ,EAAAA,GAnC8B,UAuCjB4/I,EAAAx7H,EAAAw7H,GAAAA,EAAAA,EAAAA,QAAxB,4BACEO,EAAQvmJ,IAAIm4B,EAAW,MAKzB,IADMwuH,EAAQ,GACiBL,EAAA97H,EAAA87H,GAAAA,EAAAA,EAAAA,QAA/B,kBACE,IADF,UAC0BN,EAAAx7H,EAAAw7H,GAAAA,EAAAA,EAAAA,QAAxB,kBAMoB,qBANpB,Yft8C2B13F,Oeg9CzBq4F,EAAMptJ,KAAKktJ,EAActuH,EAAWyhB,EAAkB,GAAI,KAC1D+sG,EAAMptJ,KAAKmtJ,EAAevuH,EAAWyhB,EAAkB,GAAI,MAI/D,IAAwBosG,EAAAx7H,EAAAw7H,GAAAA,EAAAA,EAAAA,QAAxB,kBACE,IADF,UAC4B,EAAAx7H,EAAA07H,EAAe/tH,IAAc,IAA7B,YAA1B,4BACEwuH,EAAMptJ,KAAKktJ,EAActuH,EAAW,KAAMi2B,EAAY,KACtDu4F,EAAMptJ,KAAKktJ,EAActuH,EAAW,KAAM,GAAIi2B,IAC9Cu4F,EAAMptJ,KAAKmtJ,EAAevuH,EAAW,KAAMi2B,EAAY,KACvDu4F,EAAMptJ,KAAKmtJ,EAAevuH,EAAW,KAAM,GAAIi2B,IAInD,WAAMtN,QAAQE,IAAI2lG,GAAlB,EAnO0B,CAoO1B,OAAO,EAAPznH,OAA2BuzC,GAAS8zE,GApOV,IMpjBUa,GAA5BxB,GALkCA,KAAAA,EAKxCtnE,EAAMsnE,EAAAA,EALkCA,KAAAA,EiBtjC1CA,IAAMW,EAAUX,CAAC,EAIjBA,GAAwBtd,KACtBsd,IAAKA,IAAM9tJ,KAAuBioF,GAChCwmE,EAAQzuJ,IAAQ8tJ,EAgBpBA,IAAmByB,IAAAA,GAAAA,EAAA78H,EAVG68H,CAEpBzB,uBAEAA,wBACAA,gCAEAA,iCAGiByB,QAAnBzB,EAAAA,KAAAA,EAAAA,EAAAA,OAIIW,EAJJX,EAAAA,EAAAA,OAG0Btd,OACWvoD,GAAcjoF,GAEXwvJ,GAAkBxvJ,GSoU1D8tJ,I1B6tBMvhG,EiB7hCCkiG,IS+TSX,CAAC,EACEyB,GAAAA,EAAA78H,EA9Cb68H,EAAgBzB,kiCAAAA,MAAAA,KAAAA,OAAAn5H,EA0CI2yB,OAIPioG,QAAnBzB,EAAAA,KAAAA,EAAAA,EAAAA,OAAkCA,CAE9BW,EAFJX,EAAAA,EAAAA,SAC4BxoE,GAAgBtlF,KAEXwwI,KACYz+E,GAAgB/xD,MzCjUnB07C,GyCkUwB17C,GAE1BwvJ,GAAkBxvJ,IAGxD8tJ,IAAM3qD,EAAYnjG,EAAK6V,MAAMi4I,KAAKA,GAClCW,EAAQtrD,GAAasrD,EAAQtrD,IAAcsrD,EAAQzuJ,EAXnB8tJ,C1BguB9BA,OAFEnyD,E0BhtBC8yD,E1BktBHX,EAAAA,EAA0B/c,KAA1B+c,GAVsCA,KAAAA,EAqB1CA,IAAWtpJ,KAZLwpJ,EACFF,EAAAA,EAGEtjH,EAAMsjH,CACVvhG,SAAAA,EACAovC,MAAAA,EACAnV,IAAAA,EACAwnE,mBAAAA,GAGIC,EAAuBwB,GAE3BjlH,EAAIhmC,GAAQypJ,EAAQzpJ,KAGtBspJ,OAAAA,EAAAA,OAAOtjH,GAzBmCsjH,GAAAA,K1FmqB5C,mB0FztBA4B,WAcEA,GAbK73I,EAAOmxC,SACAhyB,EAAW04H,sDAIA73I,EAAOmxC,SAAanxC,EAAO5T,YAE3BgE,MAAM9H,UAAUob,UrB/+BZknB,GAAmBitH,YqBs/B5CA,OAAOA,EAGTA,IAAMlsH,EAAoCgzB,KAS1Ck5F,QARIlsH,GAAiCksH,EAAhBlsH,KxBhkCf3rB,EAAO83I,WACP93I,EAAO0qB,WACP1qB,EAAO0qB,UAAUu9C,6BACjBjoE,EAAO+3I,sBAEP/3I,EAAO+3I,qBAAqBzvJ,UAAU6/E,uBwBwkCpBwwD,MAMGgf,GAAkBE,yBAtCnBA,EAZrB1R,G1FquBP,oB0FruBA6R,SAA2B7nE,GACZ+mD,GAAoB/mD,CADC,K1FquBpC,sB0FhvBA8nE,SAA6BtrJ,EAAMyjB,GACpBwnI,GAAgBjrJ,GAAQyjB,CADM,EA3EvC+1H,GAAA9lH,U1F2zBN,Q0F3zBM8lH,GAAA,UAAA9lH,QAwlON,OAAa,EACb,GAAc,EACd,GAAgB,EAChB,GAAc,EAJhB8lH,G1F5xME,S0F4xMsB+R,CACtBA,UAAaA,GACbA,WAAcA,GACdA,aAAgBA,GAChBA,WAAcA,IAqBhB/R,G1FrzME,Q0FqzMqBgS,UpChhQnB,IAAM9pG,GAAa,WCnBH5sB,GAAY,IEjB9BzpB,SAAYgqB,GAEVv2B,KAAKi2B,EAAkBM,EAGvBv2B,KAAKq2B,EFces2H,GEZpB3sJ,KAAKs2B,EFaes2H,EEpB4B,CFiBpB,CDqBrB,IAAoB72H,GACvBiS,OAAO4a,GAAW,IAClB5a,OAAO4a,GAAW,MoCohQ1B,IAAAupG,GAA+B,CAAC,EAIhC1gB,GAAiC,K2D1kQ/Bl/H,SAAA,KAEEvM,KAAK6sJ,EAAa,GAQlB7sJ,KAAK8sJ,EAFL9sJ,KAAK+sJ,EAFL/sJ,KAAKgtJ,EAFLhtJ,KAAKiuG,EAAW,CAJJ,CAsDdg/C,SAAA,GAAAA,GACE,OAAK,EAAKJ,EAAWjuJ,OAGT,EAAKiuJ,EAAW7gH,QACxB,SAACkhH,EAAatuI,GAAiB,OAAAsuI,EAActuI,CAAd,GAA4B,GAClD,EAAKiuI,EAAWjuJ,OAJpB,CAFW,CCjDtB2N,SAAA,GAAY4gJ,EAAOC,EAActlG,GAAQ,IAAD,OAEtC9nD,KAAKqtJ,EAAMF,EAGXntJ,KAAKstJ,EAAWF,EAGhBptJ,KAAK+1E,EAASjuB,EAGd9nD,KAAKutJ,GAAY,EAGjBvtJ,KAAKwtJ,EAAUxtJ,KAAKstJ,EAASG,YAG7BztJ,KAAKi4D,EAAgB,IAAetjC,EAEpC30B,KAAKi4D,EAAc9jC,EAAOn0B,KAAKstJ,EAC3BI,OAAOC,IAAIC,QAAQj2H,KAAKk2H,QAAQ,WAC9B,EAAKN,GAAY,CADmB,IAI1CvtJ,KAAKi4D,EAAc9jC,EAAOn0B,KAAKstJ,EAC3BI,OAAOC,IAAIC,QAAQj2H,KAAKm2H,SAAS,WAC/B,EAAKP,GAAY,CADoB,GAzBL,CCLxB,eAMhBQ,SAAO,GAAyBC,EAAMtpD,GAGpC,IAAM+rC,EAAgB,GAElB7/F,EAAY,EACG,MAAf8zD,IACF9zD,EAAY8zD,GAGd,IAAiB,SAAAt1E,EAAKod,GAAawhH,EAAM,QAAxB,QAAjB,kBAEE,IADMC,EAAcC,GADtB,EAAAC,MACoC,aAI5BC,EAAiBF,GAAUD,EAAQ,cAIzC,IAAuB,SAAA7+H,EAAKod,GAAa4hH,EAAW,cAA7B,QAAvBhnJ,EAAA,KAAAA,EAAA,SAAiE,CAC/D,IAAMinJ,EAAcH,GADtB9mJ,EAAAknJ,MAC0C,UACxC,GAAKD,IAGDE,EAAa,KACbF,EAAOhqI,WAAP,aACFkqI,EAAmCn4G,GAC/Bi4G,EAAOhqI,WAAP,YACAqN,MAAM68H,KACRA,EAAa,OAGXC,EAAkBN,GAAUG,EAAQ,eAC1C,CAGA,IAAMI,EAAcjiH,GAAagiH,EAAY,aAa7C,IAZIE,EAAcD,EACZE,EAAkBF,EAAO17H,QAAO,SAACslE,GACrC,MAAuC,aAAhCA,EAAMh0E,WAAN,QADwC,IAG7CsqI,EAAgB/vJ,SAClB8vJ,EAAcC,GAEVC,EAAeF,EAAYv2I,MAAK,SAACra,EAAGkb,GAGxC,OADgB4M,SAAS5M,EAAEqL,WAAF,OAAwB,KAAO,IADxCuB,SAAS9nB,EAAEumB,WAAF,OAAwB,KAAO,EADV,IAK5BuqI,GAAAA,EAAAx/H,EAAAw/H,IAAAA,QAApB,kBAEE,GADMC,EAAaxiH,GADrB,EAAAgsD,OAEE,CAGAo4C,EAActyI,KAAK,CACjB+hB,GAAI,KACJ0wB,UAAWA,EACXC,QAAS,KACT6H,IAAKm2G,EACLC,YAA2B,MAAdP,EACbA,WAAAA,EACAQ,QAAS,KACTC,SAAS,EACTC,aAAc,EACdC,aAAc,KACdC,MAAM,EACN1qJ,IAAoB,MAAfigG,EACLhgG,KAAqB4yB,KAAfotE,EACN0qD,eAAe,IAEjB,KAnBA,CAlBF,CAd+D,CAuDnE,OAAO3e,CA1E0C,CCQnDlkI,SAAA,GAAY8iJ,EAAavnG,EAAOlB,EAAQ0oG,EAAsBlwE,GAAU,IAAD,OAErEp/E,KAAKuvJ,EAAeF,EAGpBrvJ,KAAK+1E,EAASjuB,EAGd9nD,KAAKwvJ,GAAe,EAMpBxvJ,KAAK84D,EAHL94D,KAAKm4D,EAAU,KAMfn4D,KAAKyvJ,EAAuBl7C,IAG5Bv0G,KAAK0nG,EAAWtoB,EAGhBp/E,KAAKqtJ,EAAM,KAGXrtJ,KAAKi4D,EAAgB,IAAetjC,EAEpC+4H,OAAOC,IAAIjX,SAASgZ,UAAU9oG,GAE9B8mG,OAAOC,IAAIjX,SAASiZ,sCAAqC,GAGzD3vJ,KAAK4vJ,EAAsB,IAAIlC,OAAOC,IAAIkC,mBACtC7vJ,KAAKuvJ,EACLvvJ,KAAK+1E,GAGT/1E,KAAK4vJ,EAAoBE,aAIzB9vJ,KAAK+vJ,EAAa,IAAIrC,OAAOC,IAAIqC,UAAUhwJ,KAAK4vJ,GAEhD5vJ,KAAK+vJ,EAAWE,cAAcC,cAAc,gBAC5ClwJ,KAAK+vJ,EAAWE,cAAcE,iB9DmgQXzD,W8DhgQnB1sJ,KAAKowJ,EAAiB,KAGtBpwJ,KAAKqwJ,EACDf,GAAwB,IAAI5B,OAAOC,IAAI2C,qBAE3CtwJ,KAAKi4D,EAAc9jC,EAAOn0B,KAAK+vJ,EAC3BrC,OAAOC,IAAI4C,sBAAsB54H,KAAK64H,oBAAoB,SAACl9H,IAsHjEm9H,SAAAA,EAAoBn9H,GAQlB,GAHA,EAAKo0E,EAAS,IAAevjC,GD7DJusF,cC8DT9rJ,IAAP4wB,KAAO5wB,IAAI,WAHR8oC,KAAK6rB,MAAQ,IACF,EAAKk2F,KAIvB,EAAKt3F,EAAQu0D,sBAGX,CACL,IAAMikC,EAAgB,CACpBjsD,YAAa,EAAK3uB,EAAO2uB,aAG3B,EAAK0rD,EAAiB98H,EAAEs9H,cAAcD,EAClC,EAAKN,GAEL,EAAKt6E,EAAO86E,MACd,EAAKT,EAAeU,UAAU,GAE9B,EAAKV,EAAeU,UAAU,EAAK/6E,EAAOg7E,QAG5C,EAAK94F,EAAc9jC,EAAO,EAAK4hD,EAAQ,cAAc,WAzBlC,EA0BPA,EAAO0sB,WAGjBkuD,EAAcjsD,YA7BG,EA6BgB3uB,EAAO2uB,YAJiB,IAM3D,EAAKzsC,EAAc9jC,EAAO,EAAK4hD,EAAQ,gBAAgB,WA/BpC,EAgCPs3E,IAhCO,EAmCZA,EAAIyD,UAnCQ,EAmCO/6E,EAAOg7E,QAnCd,EAoCRh7E,EAAO86E,OApCC,EAqCVxD,EAAI2D,UAAS,GANuC,GApBxD,MAFL,EAAKZ,EAAiB98H,EAAEs9H,cAAc,EAAK76E,EACvC,EAAKs6E,GAgCX,EAAK3oD,EAAS,IAAevjC,GDgCO8sF,yBC9BpBrsJ,IAAP4wB,KAAO5wB,IAAI,eAAgB,EAAKwrJ,KAEzC,IAAMc,EAAiB,EAAKd,EAAevH,eAC3C,GAAIqI,EAAetyJ,OAAQ,CAEnBuyJ,EAAY,GAClB,IAAoBD,IAAAA,GAAAA,EAAA9hI,EAAA8hI,IAAAA,QAApB,kBAMEC,EAAUhzJ,KAJYizJ,CACpB3nJ,MAHJ,EAAAA,MAIIC,IAAK,OAKT,EAAKg+F,EAAS,IAAevjC,GDKCktF,yBCHdzsJ,IAAP4wB,KAAO5wB,IAAI,YAAausJ,IAdR,EAgG7BG,SAAAA,GAK8BC,SAAA,EAACj+H,EAAG52B,GACxBwG,GAAmB0B,IAAP4wB,KAAO5wB,IAAI,gBAAiB0uB,GAN1B,EAOfo0E,EAAS,IAAevjC,GAAUznE,EAAMwG,GAFN,CAKzC,EAAK+0D,EAAc9jC,EAAO,EAAKi8H,EAC3B1C,OAAOC,IAAI6D,aAAa75H,KAAK85H,UAAU,SAACzmJ,GACjC0mJ,GAZWA,EAYyC1mJ,EADT,IAItD,EAAKitD,EAAc9jC,EAAO,EAAKi8H,EAC3B1C,OAAOC,IAAIC,QAAQj2H,KAAKg6H,yBAAyB,SAACr+H,GAC3Cs+H,GAjBWA,EAiBoCt+H,EADE,IAI5D,EAAK2kC,EAAc9jC,EAAO,EAAKi8H,EAC3B1C,OAAOC,IAAIC,QAAQj2H,KAAKk6H,SAAS,SAACv+H,GAC3Bs+H,GAtBWA,EAsBoCt+H,EADd,IAI5C,EAAK2kC,EAAc9jC,EAAO,EAAKi8H,EAC3B1C,OAAOC,IAAIC,QAAQj2H,KAAKm6H,gBAAgB,SAACx+H,GACvCi+H,EAAoBj+H,EDjNMy+H,oBCgNmB,IAInD,EAAK95F,EAAc9jC,EAAO,EAAKi8H,EAC3B1C,OAAOC,IAAIC,QAAQj2H,KAAKq6H,UAAU,SAAC1+H,GACjCi+H,EAAoBj+H,ED7MA2+H,cC4MmB,IAI7C,EAAKh6F,EAAc9jC,EAAO,EAAKi8H,EAC3B1C,OAAOC,IAAIC,QAAQj2H,KAAKu6H,gBAAgB,SAAC5+H,GACvCi+H,EAAoBj+H,EDzMM6+H,oBCwMmB,IAInD,EAAKl6F,EAAc9jC,EAAO,EAAKi8H,EAC3B1C,OAAOC,IAAIC,QAAQj2H,KAAKy6H,UAAU,SAAC9+H,GACjCi+H,EAAoBj+H,EDrMA++H,cCoMmB,IAI7C,EAAKp6F,EAAc9jC,EAAO,EAAKi8H,EAC3B1C,OAAOC,IAAIC,QAAQj2H,KAAK26H,0BAA0B,SAACh/H,GAC5Ci/H,GA/CWA,EA+CuCj/H,EADA,IAI7D,EAAK2kC,EAAc9jC,EAAO,EAAKi8H,EAC3B1C,OAAOC,IAAIC,QAAQj2H,KAAK66H,mBAAmB,SAACl/H,GACrCi/H,GApDWA,EAoDuCj/H,EADP,IAItD,EAAK2kC,EAAc9jC,EAAO,EAAKi8H,EAC3B1C,OAAOC,IAAIC,QAAQj2H,KAAK86H,SAAS,SAACn/H,GAChCi+H,EAAoBj+H,EDhMDo/H,aC+LmB,IAI5C,EAAKz6F,EAAc9jC,EAAO,EAAKi8H,EAC3B1C,OAAOC,IAAIC,QAAQj2H,KAAKg7H,gBAAgB,SAACr/H,GACvCi+H,EAAoBj+H,ED5LMs/H,oBC2LmB,IAInD,EAAK36F,EAAc9jC,EAAO,EAAKi8H,EAC3B1C,OAAOC,IAAIC,QAAQj2H,KAAKk7H,cAAc,SAACv/H,GACrCi+H,EAAoBj+H,EDxLHw/H,WCuL0B,MAI5C76F,EAAc9jC,EAAO,EAAKi8H,EAC3B1C,OAAOC,IAAIC,QAAQj2H,KAAKk2H,QAAQ,SAACv6H,GAvEf,EAwEP+5H,IAxEO,EAyETA,EFhRRE,GEgRsB1yE,EACnB02E,EAAoBj+H,EDtLJy/H,aCmLmB,IAO3C,EAAK96F,EAAc9jC,EAAO,EAAKi8H,EAC3B1C,OAAOC,IAAIC,QAAQj2H,KAAKm2H,SAAS,SAACx6H,GA/EhB,EAgFP+5H,IAhFO,EAiFTA,EFxRRE,GEwRsB1yE,EACnB02E,EAAoBj+H,EDrLH0/H,cCkLmB,IAO5C,EAAK/6F,EAAc9jC,EAAO,EAAKi8H,EAC3B1C,OAAOC,IAAIC,QAAQj2H,KAAKs7H,yBAAyB,SAAC3/H,GAvFhC,EAwFP+5H,GACPkE,EAAoBj+H,EDlLQ4/H,wBCgLwB,IAM5D,EAAKj7F,EAAc9jC,EAAO,EAAKi8H,EAC3B1C,OAAOC,IAAIC,QAAQj2H,KAAKw7H,OAAO,SAAC7/H,GAC9Bi+H,EAAoBj+H,EDjJD8/H,aCgJiB,IAI1C,EAAKn7F,EAAc9jC,EAAO,EAAKi8H,EAC3B1C,OAAOC,IAAIC,QAAQj2H,KAAK07H,aAAa,SAAC//H,GACpCi+H,EAAoBj+H,ED7IAggI,cC4IsB,IAIhD,EAAKr7F,EAAc9jC,EAAO,EAAKi8H,EAC3B1C,OAAOC,IAAIC,QAAQj2H,KAAK47H,cAAc,SAACjgI,GACrCi+H,EAAoBj+H,EDzICkgI,eCwIsB,MAI5Cv7F,EAAc9jC,EAAO,EAAKi8H,EAC3B1C,OAAOC,IAAIC,QAAQj2H,KAAK87H,YAAY,SAACngI,GACnCi+H,EAAoBj+H,EDrIEogI,gBCoImB,IAI/C,EAAKz7F,EAAc9jC,EAAO,EAAKi8H,EAC3B1C,OAAOC,IAAIC,QAAQj2H,KAAKg8H,iBAAiB,SAACrgI,GACxCi+H,EAAoBj+H,EDjIQsgI,sBCgIkB,IAIpD,EAAK37F,EAAc9jC,EAAO,EAAKi8H,EAC3B1C,OAAOC,IAAIC,QAAQj2H,KAAKk8H,YAAY,SAACvgI,GACnCi+H,EAAoBj+H,ED7HFwgI,YC4HuB,IAI/C,EAAK77F,EAAc9jC,EAAO,EAAKi8H,EAC3B1C,OAAOC,IAAIC,QAAQj2H,KAAKo8H,QAAQ,SAACzgI,GAC/Bi+H,EAAoBj+H,EDzHF0gI,YCwHmB,IAI3C,EAAK/7F,EAAc9jC,EAAO,EAAKi8H,EAC3B1C,OAAOC,IAAIC,QAAQj2H,KAAK66H,mBAAmB,SAACl/H,GAC1Ci+H,EAAoBj+H,EDrHM2gI,oBCoHsB,IAItD,EAAKh8F,EAAc9jC,EAAO,EAAKi8H,EAC3B1C,OAAOC,IAAIC,QAAQj2H,KAAKu8H,gBAAgB,SAAC5gI,GACvCi+H,EAAoBj+H,EDjHM6gI,oBCgHmB,IAInD,EAAKl8F,EAAc9jC,EAAO,EAAKi8H,EAC3B1C,OAAOC,IAAIC,QAAQj2H,KAAKy8H,aAAa,SAAC9gI,GACpCi+H,EAAoBj+H,ED7GA+gI,cC4GsB,IAIhD,EAAKp8F,EAAc9jC,EAAO,EAAKi8H,EAC3B1C,OAAOC,IAAIC,QAAQj2H,KAAK28H,KAAK,SAAChhI,GAC5Bi+H,EAAoBj+H,EDxGSihI,uBCuGK,IAIxC,EAAKt8F,EAAc9jC,EAAO,EAAKi8H,EAC3B1C,OAAOC,IAAIC,QAAQj2H,KAAK68H,gBAAgB,SAAClhI,GACvCi+H,EAAoBj+H,ED5FGmhI,iBC2FsB,IAInD,EAAKx8F,EAAc9jC,EAAO,EAAKi8H,EAC3B1C,OAAOC,IAAIC,QAAQj2H,KAAK+8H,aAAa,SAACphI,GACpCi+H,EAAoBj+H,EDvFGqhI,iBCsFmB,GA1J1B,CA/EjBrD,CAALA,GAEA,IAIE,EAAKlB,EAAexsI,KAAK,EAAKmyD,EAAO6+E,YACjC,EAAK7+E,EAAO8+E,aAJMC,GAALA,GACbpH,OAAOC,IAAIoH,SAASC,WAAatH,OAAOC,IAAIoH,SAASE,QAQzD,EAAKh9F,EAAc9jC,EAAO,EAAK4hD,EAAQ,cAAc,WA5ElC,EA+EZq6E,EAAe8E,OA/EH,EA+Een/E,EAAO6+E,YA/EtB,EAgFR7+E,EAAO8+E,aAHMC,GA7ELA,GA8EbpH,OAAOC,IAAIoH,SAASC,WAAatH,OAAOC,IAAIoH,SAASE,OAFA,IAOvD,mBAAoB1gJ,GACtB,EAAKukD,EAAkB,IAAIgD,gBAAe,WApFzB,EAuFVs0F,EAAe8E,OAvFL,EAuFiBn/E,EAAO6+E,YAvFxB,EAwFN7+E,EAAO8+E,aAHMC,GArFPA,GAsFXpH,OAAOC,IAAIoH,SAASC,WAAatH,OAAOC,IAAIoH,SAASE,OAFX,IAMhD,EAAKn8F,EAAgBkD,QAAQ,EAAK+Z,IAElC,EAAK9d,EAAc9jC,EAAOxkB,SAAU,oBAAoB,WA5FvC,EA+FVygJ,EAAe8E,OA/FL,EA+FiBn/E,EAAO6+E,YA/FxB,EAgGN7+E,EAAO8+E,aAHMC,GA7FPA,GA8FXpH,OAAOC,IAAIoH,SAASC,WAAatH,OAAOC,IAAIoH,SAASE,OAFG,IAc5D,EAAKzF,GAAgB,EAAKr3F,EAAQw0D,kBACpC,EAAKyjC,EAAe3mJ,QAEpB,EAAKwuD,EAAc3jC,GAAW,EAAKyhD,EAAQ,QAAQ,WA7GlC,EA8GVy5E,GAAe,EA9GL,EA+GVY,EAAe3mJ,OAFmC,GA3CzD,CAgDF,MAAO0rJ,GAIF5C,GAALA,EAAkC,KAJlB,CAlHG,CArHV9B,CAALA,EACsDn9H,EAFS,IAKrEtzB,KAAKi4D,EAAc9jC,EAAOn0B,KAAK+vJ,EAC3BrC,OAAOC,IAAI6D,aAAa75H,KAAK85H,UAAU,SAACn+H,GACjCo+H,GAALA,EAA0Dp+H,EADd,IAKlDtzB,KAAKi4D,EAAc9jC,EAAOn0B,KAAK+1E,EAAQ,SAAS,WAC9C,EAAKg6E,EAAWqF,iBADoC,IAItDp1J,KAAKi4D,EAAc3jC,GAAWt0B,KAAK+1E,EAAQ,QAAQ,WACjD,EAAKy5E,GAAe,CADmC,GAtEY,CAyJvEkC,SAAA,GAAAA,EAAWp+H,GAEwCA,EAAE+hI,WAG7CnyJ,GAAmB0B,IAAP4wB,KAAO5wB,IAAI,gBAAiB0uB,GAC9C,EAAKo0E,EAAS,IAAevjC,GD8MNmxF,WC9M0CpyJ,IAE5DqvJ,GAALA,EAAkC,MAElC,EAAK7qD,EACD,IAAevjC,GDyEaktF,yBCxEZzsJ,IAAP4wB,KAAO5wB,IAAI,YAAa,KAZzB,CAmJdkwJ,SAAA,GAAAA,GACE,OAAInlJ,SAAS+tH,oBACF/tH,SAAS4lJ,qBAEZztG,EAAwC,EAAKiuB,GACzC8qE,0BACD/4F,EAAM0tG,0BANI,CAmLvB5D,SAAA,GAAAA,EAAWt+H,GAIT,IAAM65H,EAAQ75H,EAAEmiI,QACXtI,GAUL,EAAKE,EAAM,IAAcqI,GAAavI,EAClC,EAAKiD,EAAgB,EAAKr6E,GAC1BziD,EAAE52B,MAAQgxJ,OAAOC,IAAIC,QAAQj2H,KAAKg6H,yBACjC,EAAKx5F,EAAQy0D,+BAChB,EAAKllB,EAAS,IAAevjC,GDxGUwxF,+BC2GnCzyJ,GACD0B,IADY4wB,KACZ5wB,IAAI,KAAM,EAAKyoJ,GACfzoJ,IAAI,cAAeuoJ,GACnBvoJ,IAAI,gBAAiB0uB,GAC1B,EAAKo0E,EAAS,IAAevjC,GD5XJyxF,aC6XO1yJ,IAC5B,EAAKmqJ,EAAIwI,aACX,EAAKtG,EAAar/G,aAAa,YAAa,QACvC,EAAKioB,EAAQu0D,uBAChB,EAAK32C,EAAO05B,QAEV,EAAK15B,EAAO86E,QACTxD,EAALA,EAAKA,GF/SJG,EE+SwB,EAAKz3E,EAAOg7E,OF9SzC,EAAKzD,EAASwD,UAAU,IEgTpB,EAAKzD,EAAIyD,UAAU,EAAK/6E,EAAOg7E,UA3BvBr9H,EACN,uBAAyBJ,EAAE52B,KAAO,mDAV5B,CA6Cd61J,SAAA,GAAAA,EAAcj/H,GACRA,GAAKA,EAAE52B,MAAQgxJ,OAAOC,IAAIC,QAAQj2H,KAAK26H,2BACtC,EAAKn6F,EAAQy0D,+BAChB,EAAKllB,EAAS,IAAevjC,GD3HW2xF,gCC8H1C,EAAKpuD,EAAS,IAAevjC,GDtWJ4xF,cCuWTnxJ,IAAP4wB,KAAO5wB,IAAI,gBAAiB0uB,KACjC,EAAK+5H,GAAO,EAAKA,EAAIwI,aACvB,EAAKtG,EAAazyD,gBAAgB,aAC7B,EAAK3kC,EAAQu0D,uBAA0B,EAAK32C,EAAOkpB,OACtD,EAAKlpB,EAAO0vB,OAXD,CCnhBjBl5F,SAAA,GAAYu7C,EAAOgnG,EAAaP,EAAYQ,EAASiH,EACjDC,EAAgBC,EAAYC,GAE9Bn2J,KAAK+1E,EAASjuB,EAMd9nD,KAAKo2J,GAHLp2J,KAAKq2J,EAAevH,GAGaP,GAAc,EAAIA,EAGnDvuJ,KAAKs2J,EAAWvH,EAGhB/uJ,KAAKu2J,EAAUP,EAGfh2J,KAAKw2J,EAAkBP,EAGvBj2J,KAAKy2J,EAAcP,EAGnBl2J,KAAK02J,EAA8BP,CAvBuB,CCe5D5pJ,SAAA,GAAY8iJ,EAAasH,EAAYC,EAAWx3E,GAuEhBy3E,SAAA,IAC5B,IAAI,EAAKC,GAAe,EAAKC,IACzB,EAAKC,EAAY3U,KADrB,CAIA,EAAK0U,EAAY,EAAKE,EAAWvyD,YAE7B,EAAKwyD,IACJ,EAAKA,EAAczyJ,MAAQ,EAAKyyJ,EAAcxyJ,MAC/C,EAAKqyJ,EAAY,EAAKG,EAActmH,YACtC,EAAKsmH,EAAgB,MAEvB,IAAMC,EAA2BC,GAALA,GACL,EAA2B,EAAG,EAAKF,GACtDC,GACGE,GAALA,EAAcF,EAA2C,EACnC,EAAsBzpH,KAAK6rB,MAfnD,CADkC,CAvEmB,WA8FvD,GA5FAv5D,KAAKm4D,EAAU,KAGfn4D,KAAKuvJ,EAAeF,EAGpBrvJ,KAAKg3J,EAAcL,EAGnB32J,KAAKi3J,EAAaL,EAGlB52J,KAAKs3J,EAAW,KAGhBt3J,KAAKu3J,GAAkB,EAGvBv3J,KAAK+1E,EAAS/1E,KAAKi3J,EAGnBj3J,KAAK0nG,EAAWtoB,EAGhBp/E,KAAKw3J,EAAmB,IAAIhlI,IAG5BxyB,KAAKy3J,EAAiB,IAAIjlI,IAM1BxyB,KAAK03J,EAA+B,IAAIliI,IAGxCx1B,KAAK23J,EAAU,IAAUjd,GAEpBkd,GAALA,MAGA53J,KAAKi4D,EAAgB,IAAetjC,EAGpC30B,KAAK63J,EAAkB,IAAeljI,EAGtC30B,KAAK82J,GAAa,EAMlB92J,KAAKk3J,EAHLl3J,KAAK+2J,EAAY,KAKjB/2J,KAAKi4D,EAAc9jC,EAAOn0B,KAAKi3J,EAAY,cAAc,WACvD,KAAI,EAAKH,GAAc,EAAKC,GACxB,EAAKC,EAAY3U,MADrB,CAIA,EAAK0U,EAAY,EAAKE,EAAWvyD,YACjC,IAAMyyD,EAA2BC,GAALA,GACL,EAA0B,EAAG,EAAKF,GACrDC,GACGE,GAALA,EAAcF,EAA2C,EACnC,EAAsBzpH,KAAK6rB,MATnD,CAD6D,IAmC/Dv5D,KAAK83J,EAAmB,IAAe52H,GAAM21H,GAEzC,8BAA+B72J,KAAKi3J,IACfpqC,KAAa,CACpC,IAAM+pC,EAA8C52J,KAAKi3J,EACnDc,EAAqBA,WACzBlB,IACAD,EAAUoB,0BAA0BD,EAFL,EAIjCnB,EAAUoB,0BAA0BD,EANA,MAQpC/3J,KAAK83J,EAAiBrzH,GAAyB,MAIjDzkC,KAAKi4J,EA6CFxzH,IA7C8BvD,IAAM,WAEnC,IAAMg3H,EAKFC,EACE1nB,EACAr5B,EACqBq5B,EAAAA,EAA3B,EAIQ2nB,EAkBEC,EAfE1rB,EAQF2rB,EAzBqC,OAAAp2H,GAAA,+BACjD,IADiD,EACxCu1H,EAAet2J,MAA0B,MADD,EACZ41J,EAArC,cAEE,IADMmB,EAFyC,EAElBlB,EAAY9U,OACIxN,IACzCwjB,GAAyClvB,GAC3C,SAAAllG,SAEEq0H,GAAmB,EACjB1nB,EAAgB9rI,MAAM24B,KARmB,EAQTm6H,GAChCrgD,EATyC,EASxB4/C,EAAY5/C,KACRq5B,EAAArhH,EAAAqhH,GAAAA,EAAAA,EAAAA,OAVoB,OAU/C,wBACE,IADF,YAV+C,EAWpBymB,EAAe,CACtC,YADsC,CAIxC,GADMkB,EAAiB7pB,EAAa19F,SAAW09F,EAAa39F,YAClB,GAArCwmE,EAAU3tG,MAAQ2uJ,GAgBhB,CAEY,GADXC,EAAa9pB,EAAa39F,UAhCW,EAgCMmmH,IACb,IAAdsB,IAjCqB,EAkC/BX,EAA6B3iJ,IAAIw5H,IAlCF,EAmClCmpB,EAA6B9yJ,IAC9B2pI,EApCmC,EAoChBopB,EAAQjvE,QAAQ6lD,EAAa71F,OALnD,aAfL,IAhB2C,EAgBlCg/G,EAA6B3iJ,IAAIw5H,GAA1C,cAGM,WAnBqC,EAmB1BmpB,EAA6BhoJ,IAAI6+H,GAA5C,GAnBqC,QAiBnC5B,EAEF,MAEFA,EAAez0F,UArBwB,EAuBpCw/G,EAA6B36F,OAAOwxE,GAvBA,OAyBrC+pB,EAAiBn8H,KAAKC,UAAUmyG,GAzBK,EA0BlCipB,EAAiBziJ,IAAIujJ,IA1Ba,EA2BpCd,EAAiBz6F,OAAOu7F,GA3BY,EA6BtCb,EAAe16F,OAAOwxE,GAC3B4pB,GAAmB,EA9BwB,OAU/C,wBAV+C,OAyC3CA,GACGI,GA1CwCA,GAAA,YA6ChD9zH,GAAyB,EAxJ2B,UAyKzD,GAAA+zH,GACE,GAAK,EAAKjJ,GAAiB,EAAKp3F,IAAW,EAAK2+F,EAAhD,CAGA,IAAIlqC,EACA,EAAKz0D,EAAQy0D,8BACX9kE,EAAwC,EAAKmvG,EAC/CnvG,EAAM+4F,0BAA4B/4F,EAAM0tG,6BAC1C5oC,GAAgC,GAE9B,EAAK2qC,GAAmB3qC,IAG5B,EAAK2qC,GAAmB3qC,EACpB,EAAK2qC,GACP,EAAKxhF,EAAS,EAAKkhF,EACf,EAAKK,IACH,EAAKA,EAAS74B,eAChB,EAAK8wB,EAAajkE,YAAY,EAAKgsE,GAErC,EAAKA,EAAW,QAGb,EAAKA,KA+LNxvG,EACJn4C,SAASE,cA/LS4oJ,EA+LUxB,EAAW7tH,UACnCg8D,UAAW,EACjBt9C,EAAMltC,MAAM6C,SAAW,WACvBqqC,EAAMltC,MAAMsmH,IAAM,IAClBp5E,EAAMltC,MAAMrQ,KAAO,IACnBu9C,EAAMltC,MAAM4f,MAAQ,OACpBstB,EAAMltC,MAAM2f,OAAS,OACrButB,EAAMltC,MAAMu3B,gBAAkB,eAC9B2V,EAAM5X,aAAa,cAAe,IAvM9B,EAAKonH,EAwMFxvG,GAtML,EAAKiuB,EAAS,EAAKuhF,GAzBrB,CAD2B,UAgL7B,GAAAoB,EAAiBjoB,GAEf,IADA,IAAI0nB,GAAmB,EACI1nB,GAAAA,EAAArhH,EAAAqhH,IAAAA,QAA3B,kBAA0C,CACxC,IAAM6nB,GADR,WACsCp4I,IAAMic,KAAKC,UAAUmyG,GACzD,IAAI,EAAKipB,EAAiBziJ,IAAIujJ,GAA9B,CAOA,GAJAH,GAAmB,EACnB,EAAKX,EAAiBtmI,IAAIonI,GAC1B,EAAKb,EAAevmI,IAAIq9G,GACpBoqB,GAAgB,EAChBpqB,EAAa9pI,KAAyB,MAAlB,EAAKsyJ,EAC3B4B,GAAgB,OACX,GAA8B,GAA1BpqB,EAAa39F,WAAmB29F,EAAaygB,SAEjD,GAAsB,MAAlB,EAAK+H,EAAmB,CACjC,IAAMsB,EAAa9pB,EAAa39F,UAAY,EAAKmmH,EAChC,EAAbsB,GAAgC,IAAdA,IACpBM,GAAgB,EAHe,OADjCA,GAAgB,EAOdA,IACG,EAAKjB,EAA6B3iJ,IAAIw5H,IACzC,EAAKmpB,EAA6B9yJ,IAC9B2pI,EAAc,EAAKopB,EAAQjvE,QAAQ6lD,EAAa71F,MApBxD,CAFwC,CA0BtCy/G,GACGI,GAALA,EA7B4B,CA2DhCnB,SAAA,GAAAA,EAAwBwB,EAAaC,EAAcC,GACjD,IAAIC,EAAU,EACV5B,EAAsB,KAC1B,GAAI,EAAKM,EAAet2J,MAA0B,MAAlB,EAAK41J,EAQnC,IAPA,IAAMiC,EAAU,EAAK/B,EAAWh4D,MAC1BwxC,EAAgB9rI,MAAM24B,KAAK,EAAKm6H,GAAgBt/I,MAAK,SAACra,EAAGkb,GAC7D,OAAOA,EAAE43B,UAAY9yC,EAAE8yC,SAD4C,IAM1C6/F,GAAAA,EAAArhH,EAAAqhH,IAAAA,QAA3B,kBAA0C,CAA1C,UACE,IAAItrB,GAAU,EACd,GAAIyzC,EACFzzC,EAAUopB,EAAa9pI,SAClB,GAAIu0J,EACT7zC,EAAUopB,EAAa7pI,UAClB,IAAK6pI,EAAa9pI,MAAQ8pI,EAAa7pI,KAAM,CAClD,IAAM2zJ,EACF,EAAKtB,EAVJn0J,KAAKmpD,MAAe,IAUUwiF,EAAa39F,WAVf,IAWhB,EAAbynH,IACe,GAAdA,IAAoB9pB,EAAaygB,WAGlC7pC,IAFE2zC,IAAiBA,EAAar0J,MAAQq0J,EAAap0J,MACnDo0J,EAAaloH,WAAa29F,EAAa39F,WANK,CAapD,GAAIu0E,EAAS,CACX,GAAI4zC,GAAWF,EAAc,CAC3B1B,EAAsB5oB,EACtB,KAF2B,CAI7BwqB,GALW,CAnB2B,CA4B5C,OAAO5B,CAvCwD,CAmD3DE,SAAA,GAAAA,EAAS9oB,EAAc0nB,EAAgBC,EAAYlZ,EACrDic,GASF,IAAMroH,EA4BEsoH,EACAC,EAuBJC,EAEAC,EAEEC,EAiBAC,EAoDAvuJ,EASAwuJ,EASAxD,EASA7H,EAaFsL,EAKEC,EA8DIj3D,EAaAkqC,EAmBFgtB,EAMCrmI,EAvRP2lI,OAAA,IAAAA,EAAa,EAAbA,EAAgB/2H,GAAA,+BAiClB,GAhCKs2H,GADaA,GAAA,EAIbtB,EAAgB3oB,EAKf39F,EAAYlD,KAAK6rB,OATL,EAWRwc,EAAO0oD,eAXC,EAWqB8wB,GAXrB,EAYXA,EAAaz0I,YAZF,EAYmBi7D,GAGnB,GAAdmgF,GAAqC,GAAlBD,IACrBA,EAAiBtxJ,MAAM24B,KAhBP,EAgBiBm6H,GAAgB1kI,QAAO,SAACh1B,GACvD,OAAIwwI,EAAa9pI,IACR1G,EAAE0G,KAAO8pI,EAAa9pI,IACpB8pI,EAAa7pI,KACf3G,EAAE2G,MAAQ6pI,EAAa7pI,KAEwB,KAAjD9B,KAAK83D,IAAI38D,EAAE6yC,UAAY29F,EAAa39F,UANkB,IAO5DhyC,SAGD2vI,EAAa4gB,MAAQ5gB,EAAa9pI,OACpCw0J,IA3BgB,EA4BXxB,EAAe16F,OAAOwxE,GACtBgqB,GA7BWA,IAAA,EA+BbzB,GAAa,GA/BA,EAiCTS,GAAiC,GAAdrB,EAA5B,cAkBE,OAnDgB,EAkCXxuD,EAAS,IAAevjC,GHzGUwxF,8BG2GvB/wJ,IAAP4wB,KAAO5wB,IAAI,oBAAoB,KAClCs0J,EAA0B,IAAe90F,GACzC+0F,EAAaA,SAAO7lI,GAAO,OAAD4O,GAAA,sBAC9B,MAAkB,UAAd5O,EAAA,MAAJ,OAC0Bu5F,KACtB,IAAM,IAAInnE,SACN,SAAC7J,GAAY,OAA8Bxa,IAAfH,GAAM2a,GAASxa,EAAU,GAAxC,IADjB,GADF,OAIA63H,EAAwBr9G,UA5CZ,EA6CPg8G,EAAgBpjI,GA7CT,EA8CHuiI,EAAa,gBAAiBmC,GARX,SAtChB,EAiDXtB,EAAgB1jI,EAjDL,EAkDP6iI,EAAa,gBAAiBmC,GACvC,IAAMD,EAAN,GAnDgB,OA4PhB,OA5PgB,EAqDR3B,IArDQ,EAsDXN,EAAWxnD,QACiB,MAA7B8+B,EAAa0gB,cACgB,GAA7B1gB,EAAa0gB,eAxDD,EAyDTgI,EAAWvyD,aAAe6pC,EAAa0gB,eAI5CmK,GAAwB,EAExBC,EAAoB,KAElBC,EAAsBA,WAC1B,IAlEgB,EAkEN/B,GACyB,MAA7BhpB,EAAa0gB,aACf,GAAI1gB,EAAa6gB,eAAiB7gB,EAAa19F,SACnBvZ,KAAxBi3G,EAAa19F,QArEL,EAsEDomH,EAAWvyD,aAAe6pC,EAAa19F,UAtEtC,EAuEHomH,EAAWvyD,YAAc6pC,EAAa19F,aAExC,CACL,IAAM0oB,EAAM7rB,KAAK6rB,MA1EP,EA2EL09F,EAAWvyD,cAAgBnrC,EAAMyjF,GAAe,IACrDA,EAAczjF,CAHT,CARqB,EAiB5BggG,EAAYA,WAShB,IAAMK,EAeE16J,EAxBoB,OAAAgjC,GAAA,sBAW5B,OAVAo3H,IACID,GACFA,EAAkBp1H,QAMd21H,EAA+BxC,GA3FrBA,EA4FZ7oB,EAAa9pI,IAAKyxJ,EAAa+C,KA5FnB,EA8FTvxD,EACD,IAAevjC,GHpYE4xF,eGqSP,EAgGT8B,EAAgB5jI,KAChBojI,GAjGSA,EAiGAuC,EAAyB3D,IACjCC,EAAYlZ,EAAaic,GALJ,QA7Fb,EAoGL1B,EACP,IArGY,EAqGDI,EAAQ/c,SAAnB,GAEA,IAvGY,EAuGD+c,EAAQvc,KAAnB,GAvGY,EAyGLmc,IAEO,OADVr4J,EAASqvI,EAAa0gB,gBAItB/vJ,EAFEqvI,EAAa6gB,eAAiB7gB,EAAa19F,SACnBvZ,KAAxBi3G,EAAa19F,QACN09F,EAAa19F,SA9Gd,EA8G8BkmH,GAAa,IAEzCrpH,KAAK6rB,MAAQyjF,GAAe,KAhH9B,EAmHPt1C,EAAS,IAAevjC,GHhLO2xF,+BGkLpBlxJ,IAAP4wB,KAAO5wB,IAAI,SAAU1F,MArHlB,EAuHTwoG,EACD,IAAevjC,GH7ZE4xF,eGqSP,EAyHT8B,EAAgB5jI,KAzHP,EA0HT6iI,GAAa,EA1HJ,EA2HJS,EAMHgB,GAjIOA,IA4HZe,IA5HY,EA6HFrC,EAAWh4D,OA7HT,EA8HLg4D,EAAWxxD,QAKf+yD,GAnISA,GAkFY,SAoDxBxtJ,EAAQA,SAAOsoB,GAAO,OAAD4O,GAAA,YACzB,OAAIk3H,EACF,EAAAt1H,aAEsB,EA1IR,EA2IX4jE,EAAS,IAAevjC,GH/ORmxF,YGgPL1wJ,IAAP4wB,KAAO5wB,IAAI,gBAAiB0uB,KACrC,IAAMimI,IAAN,GAPyB,KASrBC,EAAWA,WAAa,OAADt3H,GAAA,sBAC3B,OAAIk3H,EACF,EAAAt1H,UAEFs1H,GAAwB,EACxB,IAAMG,IAAN,IApJgB,EAqJX7xD,EACD,IAAevjC,GHtcKkuF,gBG+bG,SASvB2D,EAASA,WAAa,OAAD9zH,GAAA,YACzB,OAAIk3H,EACF,EAAAt1H,UAEFs1H,GAAwB,EA5JR,EA6JX1xD,EAAS,IAAevjC,GHzbNuuF,eG0bvB,IAAM6G,IAAN,GANyB,KASrBpL,EAAK,IAAc0L,GAjKP,EAiK2B9jF,EACzCw4D,EAAaugB,YAAavgB,EAAaggB,WACvChgB,EAAawgB,QAASiH,EAAQC,EAAgBC,GAnKhC,EAoKRqB,GApKQ,EAqKRA,IACRpJ,EAAG6C,SAtKa,EAsKCiG,EAAWpG,OAC5B1C,EAAG2C,UAvKa,EAuKEmG,EAAWlG,SAvKb,EA0KbrpD,EACD,IAAevjC,GH/fMyxF,cGggBLhxJ,IAAP4wB,KAAO5wB,IAAI,KAAMupJ,MAE1BsL,EAAiBtL,EAAG2L,eA9KN,EAgLXpyD,EAAS,IAAevjC,GH9ZK+uF,0BGia9BwG,EAAa,IAAIlnI,IAnLL,EAoLbqlI,EAAgBvjI,GApLH,EAoLmBqjI,EAAS,QAAS3sJ,GApLrC,EAqLb6sJ,EAAgB1jI,EArLH,EAqLe4hD,EAAQ,cAAc,WACrD,IAAM0sB,EAtLU,EAsLM1sB,EAAO0sB,SAC7B,GAAKA,EAAL,CAGA,IAAMs3D,EAAoB5L,EAAG2L,aACzBL,GAAkBM,GACM,EAAxB5L,EAAG6L,oBAA6C,EAAnB7L,EAAG/nD,eA5LpB,EA6LTsB,EACD,IAAevjC,GH5aa+uF,0BG8alCuG,EAAiBM,EAEK,KADhBE,EAAiB,IAjMP,EAiMkBlkF,EAAO2uB,YAAcjC,KAC1Bi3D,EAAW3kJ,IAAI,kBAC1CukJ,IAnMc,EAoMT5xD,EACD,IAAevjC,GHhhBS4tF,sBGihB5B2H,EAAWxoI,IAAI,kBACY,IAAlB+oI,IAAyBP,EAAW3kJ,IAAI,aACjDukJ,IAxMc,EAyMT5xD,EACD,IAAevjC,GH5gBG8tF,gBG6gBtByH,EAAWxoI,IAAI,aACY,IAAlB+oI,IAAyBP,EAAW3kJ,IAAI,mBACjDukJ,IA7Mc,EA8MT5xD,EACD,IAAevjC,GHxgBSguF,sBGygB5BuH,EAAWxoI,IAAI,iBAzBjB,CAF2D,IArL3C,EAmNb2mI,EAAgBvjI,GAnNH,EAmNmBqjI,EAAS,WAAY6B,GAnNxC,EAoNb3B,EAAgB1jI,EApNH,EAoNe4hD,EAAQ,QAAQ,WApN/B,EAqNX2xB,EACD,IAAevjC,GH9cI6uF,cG4c8B,IApNrC,EAwNb6E,EAAgB1jI,EAxNH,EAwNe4hD,EAAQ,SAAS,WAGhD,IAAMmkF,EA3NU,EA2NWvC,EAAQj7E,mBA3NnB,EA4NP3G,EAAO2uB,aAAew1D,EAAcrsC,aAC3C2rC,IA7Nc,EAgOX9xD,EACD,IAAevjC,GHleG4uF,aGydgC,IAxNtC,EAmOb8E,EAAgB1jI,EAnOH,EAmOe4hD,EAAQ,gBAAgB,WAnOvC,EAoOPA,EAAO86E,MApOA,EAqOTnpD,EACD,IAAevjC,GHhfA2uF,aG0QL,EAwOTprD,EACD,IAAevjC,GH5fSyuF,qBGsf+B,IAS3D,OACGgF,GA7OWA,GA8OZrpB,EAAa39F,WAAa29F,EAAa19F,SACfvZ,KAAxBi3G,EAAa19F,SACb09F,EAAa39F,WAAa29F,EAAa19F,SAE1B,GADT4xD,EAAW8rC,EAAa19F,QAAU09F,EAAa39F,YAjPvC,EAmPP+mH,EAAQ/lI,UAAU,eAAgB6wE,GAGvC8rC,EAAa2gB,eACfmK,EAEGh4H,IAFgCH,IAAM,WACvCitH,EAAGj8E,MAD0C,IAE5C7wC,EAAUktG,EAAa2gB,cAzPZ,EA0PTyI,EAAQ/lI,UAAU,eAAgB28G,EAAa2gB,eAEtD,IA5PgB,EA4PLyI,EAAQz2E,GA5PH,EA4PenL,GAA/B,GA5PgB,OA6PhB,OA7PgB,EA6PP2hF,EAA6B3iJ,IAAIw5H,GAEpC,IA/PU,EA+PCmpB,EAA6BhoJ,IAAI6+H,GAA5C,IAQJ,IAvQc,EAuQHopB,EAAQx5E,KAAKowD,EAAa71F,KAArC,GAvQc,QAiQd,OAHMi0F,EACF,IA/PU,EAgQT+qB,EAA6B36F,OAAOwxE,GAEvC,IADE5B,EAjQU,EAkQDgrB,EAAQx5E,KAAKwuD,GAlQZ,EAoQDgrB,EAAQx5E,KAAKowD,EAAa71F,KAFrC,GAlQY,OAyQZ61F,EAAa2gB,eACXmK,GACFA,EAAkBp1H,OAEpBo1H,EAEGh4H,IAFgCH,IAAM,WACvCitH,EAAGj8E,MAD0C,IAE5C7wC,EAAUktG,EAAa2gB,eAEtByK,GAAYjsH,KAAK6rB,MAAQ3oB,GAAa,IAjR5B,EAkRX82D,EAAS,IAAevjC,GH9mBNusF,cG+mBP9rJ,IAAP4wB,KAAO5wB,IAAI,WAAY+0J,KAnRhB,EAoRPpC,GApRO,EAqRTN,EAAWxxD,OAzChB,aA5Oc,OAuRTnyE,EAAAA,EAAAA,GACPtoB,EAAMsoB,GAxRU,SAmdpBilI,SAAA,GAAAA,GAGE,IADA,IAAMpH,EAAY,GACcsG,EAAAroI,EAALqoI,EAAKA,GAAAA,EAAAA,EAAAA,OAAhC,gDAEQrG,EAAAA,GAAgB,CACpB3nJ,MAAO8kI,EAAa39F,UACpBlnC,IAAK,MAEH6kI,EAAa9pI,KACf2sJ,EAAAA,GAAc3nJ,MAAQ,EACtB2nJ,EAAAA,GAAc1nJ,IAAM,MACX6kI,EAAa7pI,MACtB0sJ,EAAAA,GAAc3nJ,OAAS,EACvB2nJ,EAAAA,GAAc1nJ,IAAM,MACX6kI,EAAa6gB,gBACtBgC,EAAAA,GAAc1nJ,IAAM6kI,EAAa19F,SAElBsgH,EAAUjuI,KAAK,4BAACjlB,GAC/B,OAAOmzJ,EAAAA,GAAc3nJ,OAASxL,EAAEwL,OAAS2nJ,EAAAA,GAAc1nJ,KAAOzL,EAAEyL,GAD3B,CAAP,OAI9BynJ,EAAUhzJ,KAAKizJ,EAAAA,IAInB,EAAK1pD,EAAS,IAAevjC,GHjtBGktF,yBGmtBhBzsJ,IAAP4wB,KAAO5wB,IAAI,YAAausJ,IA5Bf,CAmCpByG,SAAA,GAAAA,GAGE,EAAKD,EAAQ/lI,UAAU,EAAKolI,EAAYlV,MACxC,EAAK6V,EAAQ/lI,UAAU,8BAA8B,GACrD,EAAK+lI,EAAQ/lI,UAAU,+BAA+B,GACtD,IAAM4rD,EAAY,EAAKm6E,EAAQ3sB,KAE/BxtD,EAAUpP,KACVoP,EAAUjP,KAC6BnE,GAAvC,EAAK4sF,EAAYhsB,KAAsCxtD,EAVnC,CAmBhB28E,SAAA,GAAAA,EAAetiJ,EAAKizD,GAExB,IAAMD,EAKA4B,EAP2B,OAAAvqC,GAAA,2BAE3B2oC,EAAqCmF,GACvC,CAACn4D,G7Dp3BE,CACL0pD,YAAa,EACbE,UAAW,IACXI,cAAe,EACfF,WAAY,GACZgN,QAAS,IACTnC,aAAc,IACdD,kBAAmB,M6Di3BJ,IAPgB,EAKjByqF,EAAYhsB,KACvBngE,QvD7JAuvF,EuD6JcvvF,EAASC,GACFpI,QAAT,KAAX+J,EAAW,IACjB,EAAA3oC,OAAO2oC,EAASvpE,MARiB,ICn+BnCqJ,SAAA,GAAY8tJ,EAAenE,EAAYoE,EAAUzE,EAAU/tG,GAEzD9nD,KAAKqtJ,EAAMgN,EAGXr6J,KAAKo2J,EAAoChgH,GAAUp2C,KAAKqtJ,EAAIkB,YAG5DvuJ,KAAK+1E,EAASjuB,EAGd9nD,KAAKy2J,EAAcP,EAGnBl2J,KAAKu6J,EAAYD,EAGjBt6J,KAAKw6J,EAAY3E,EAGjB71J,KAAKy6J,GAAa,CApB8C,CCalEluJ,SAAA,GAAY8iJ,EAAat/B,EAAkBjoE,EAAOs3B,GAEhDp/E,KAAKuvJ,EAAeF,EAGpBrvJ,KAAK8vH,EAAoBC,EAGzB/vH,KAAK+1E,EAASjuB,EAGd9nD,KAAK06J,EAAiB,KAGtB16J,KAAK26J,EAA0BpmD,IAG/Bv0G,KAAK0nG,EAAWtoB,EAGhBp/E,KAAK46J,GAAU,EAOf56J,KAAK66J,EAAmB,KAGxB76J,KAAK86J,EAAY,GAGjB96J,KAAK+6J,EAAa,GASlB/6J,KAAKg7J,EAHLh7J,KAAKi7J,EAHLj7J,KAAKqtJ,EAAM,KASXrtJ,KAAKk7J,EAAmB,IAAI1lI,IAK5Bx1B,KAAKm7J,EAAe,GAGpBn7J,KAAK05J,EAAa,GAGlB15J,KAAKo7J,EAAe,GAGpBp7J,KAAKq7J,GAAwB,EAG7Br7J,KAAKs7J,EAAa,GAMlBt7J,KAAKi4D,EAAgB,IAAetjC,CApEqB,CAoRrD4mI,SAAA,GAAAA,EAAuBC,GAI3B,IAAMxrG,EAQA8a,EAGAD,EAIAvH,EAGEmJ,EACAvpE,EACAu4J,EAEAC,EA1BgCx5H,GAAA,0BACnCs5H,EAAYG,gBAGX3rG,EAAgB4rG,GAAyBJ,GAJP,EAKZN,EAAiBxrJ,IAAIsgD,GAE/C,EAAAlsB,UAKIgnC,EAAU,CACdpuE,KzDsjB2Bm/J,GyDpjBvBhxF,EAA2BmF,GAC7B,CAACwrF,EAAYG,gB/D/LV,CACLp6F,YAAa,EACbE,UAAW,IACXI,cAAe,EACfF,WAAY,GACZgN,QAAS,IACTnC,aAAc,IACdD,kBAAmB,M+D2LfjJ,EAnBkC,EAmBxBwsD,EAAkBjlD,QzDwhB7BuvF,EyDxhB2CvvF,EAASC,GACrD,OApBoC,EAqBjCowF,EAAiBt2J,IAAIorD,EAAU,IACnB,IAAMsT,EAAGZ,QAAT,KApBjB,EAAA5+B,SAFsC,QAsBhC2oC,EAAW,IACXvpE,EAA8BwiC,GAAS+mC,EAASvpE,MAChDu4J,EACkDt/H,KAAK1/B,MAAMyG,GAC7Dw4J,EAAOD,EAAWC,KA1Bc,EA2BjCR,EAAiBt2J,IAAIorD,EAAU0rG,GAPlC,SAQKpoI,EAAAA,GA5B+B,EA6BjC4nI,EAAiBn+F,OAAO/M,QA7BS,SAsC1C4rG,SAAA,GAAyBJ,GACvB,MAAO,CACLA,EAAYM,KACZN,EAAYO,aACZP,EAAYQ,SACZR,EAAYS,QACZT,EAAYU,aACZV,EAAYW,WACZX,EAAYY,iBACZZ,EAAYjhI,OACZihI,EAAYhhI,MACZghI,EAAYG,gBACZr9J,KAAK,GAZ6B,CA0CtC+9J,SAAA,GAAAA,GACE,IAAM33D,EAAc,EAAK3uB,EAAO2uB,YAChC,GAAmB,GAAfA,GAA6C,MAAzB,EAAKm2D,EAA7B,CAMA,IAFA,IAAIyB,EACAC,EACuBzB,EAAA1rI,EAAL0rI,EAAKA,GAAAA,EAAAA,EAAAA,QAA3B1zJ,EAAA,KAAAA,EAAA,SACE,IAAyBunH,IAAAA,EAAAv/F,GAD3BhoB,EAAAA,EAAA,OAC2BunH,KAAAA,EAAAA,EAAAA,QAAzB,kBACE,GADF,UACO4tC,GAKE,GAAIpO,EAAGqO,mBAAqB93D,GAC/BypD,EAAGqO,mBACFD,EAAWC,mBAAqBD,EAAWE,kBAAoB,CAClEF,EAAapO,EACbmO,EAAkBI,EAClB,KAHkE,OAN9DvO,EAAGqO,mBAAqB93D,IAC1B63D,EAAapO,EACbmO,EAAkBI,GAetBJ,GAAmBC,IAClB,EAAKxB,EAAWxxJ,SAASgzJ,EAAWT,QAIvC,EAAKjB,EAAmBn2D,EACxB,EAAK3uB,EAAO2uB,YAAc43D,EAAgBE,mBAhC5C,CAFkB,CAuDpBG,SAAA,GAAAA,GACE,GAAK,EAAK5mF,EAAO0sB,WAIZ,EAAK4qD,GAAQ,EAAKyN,EAAUl8J,QAAjC,CAIA,IAAM8lG,EAAc,EAAK3uB,EAAO2uB,YAC5B63D,GAAa,EACjB,GAAI,EAAKlP,EAAK,CACZkP,GAAa,EAEgCtB,IAAAA,EAALA,EAAKA,EA+BzC2B,EAAezO,EAAGqO,mBACpB,GAAMrO,EAAGsO,kBACPI,EAAoB1O,EAAGqO,mBACzB,IAAOrO,EAAGsO,kBAlCe/3D,GA6BHypD,EAAGqO,mBACzB,IAAOrO,EAAGsO,oBA9BZK,EAoCQpD,EAAWnwJ,SAmWuBwzJ,kBAvY1CD,EAqCKpD,EAAWv7J,KAkW0B4+J,iBAjWrCC,GAtCLF,EAuY0CC,kBAvYfr4D,GAuCHk4D,IAvCxBE,EAwCQpD,EAAWnwJ,SAsWkB0zJ,aA9YrCH,EAyCKpD,EAAWv7J,KAqWqB8+J,YApWhCD,GA1CLF,EA8YqCG,aA9YVv4D,GA2CHm4D,IA3CxBC,EA4CQpD,EAAWnwJ,SAyWuB2zJ,mBArZ1CJ,EA6CKpD,EAAWv7J,KAwW0B++J,iBAvWrCF,GA9CLF,EAqZ0CI,kBApZpCC,EAAgB,EAAK9P,EAAI2M,qBACd,EAAK3M,EAAIjnD,cACtB,EAAKinD,EAAIyM,cAAgC,EAAhBqD,GAAgC,EAAX16D,GAC3Cu6D,GAALA,EAob6CI,oBAjbhC,EAAX36D,IAAkC,GAAjB06D,GAAsBA,EAAgB16D,IACpD46D,GAALA,EAXU,CAcd,IAAK,EAAKhQ,IAAQ,EAAKA,EAAIwI,WAAY,CA2CZ,EAE3B,IAA2BiF,EAAA1rI,EA5CzBkuI,EA4CyBxC,GAAAA,EAAAA,EAAAA,QAA3B,oBA5CEwC,EA6CSjQ,IA7CTiQ,EA6CqBjQ,EAAIwI,YAD3B,WAIE,IAAS93J,EAAI,EAAGA,EAAI2+J,EAAQ/tC,IAAI/vH,OAAQb,IAAK,CAC3C,IAAMowJ,EAAKuO,EAAQ/tC,IAAI5wH,GAEjB8yC,EAAUs9G,EAAGqO,mBAAqBrO,EAAGsO,kBAC3C,GAFkBtO,EAAGqO,oBAlDF93D,GAoDa7zD,EApDb6zD,EAoDoC,CACrD,GArDJ44D,EAqDavC,EAAWxxJ,SAAS4kJ,EAAG2N,MAAO,CACrC,GAtDNwB,EAsDevnF,EAAOkpB,MACd,SAvDRq+D,EAyDWvnF,EAAO2uB,YAAc7zD,EAC1B,OALqC,CAOlCwsH,GA5DTC,GAAAA,EA6DStC,EAAsB0B,EA7D/BY,EA8DSjQ,EAAM,IAAckQ,GACrBpP,EACkBpwJ,EAAI,EACN2+J,EAAQ/tC,IAAI/vH,QACZ,EAlExB0+J,EAmEavnF,GAnEbunF,EAoESrC,EAAiB9M,EACZ,IAANpwJ,GACGi/J,GAtEXM,EA8ZuCE,cAtV9BC,GAxETH,GAyEI,KArBqD,CAJZ,CA/C7C,IAAK,EAAKjQ,EAoFZ,IAA2ByN,GAAAA,EAAA1rI,EAnFvBsuI,EAmFuB5C,IAAAA,QAA3B,oBAnFI4C,EAoFOrQ,GADX,WAIE,IAAStvJ,EAAI,EAAGA,EAAI2+J,EAAQiB,iBAAiB/+J,OAAQb,IAEnD,IADMowJ,EAAKuO,EAAQiB,iBAAiB5/J,IAC5B6/J,gBAAgBh/J,OAAxB,CAGMgyC,EAAY8rH,EAAQF,mBAE1B,IAAMb,EA9FN+B,EA8F4BxC,EAAiBxrJ,IADvBksJ,GAAyBzN,EAAGyP,gBAAgB,KAElE,GAAIhtH,GA/FoB8zD,GAgGpBi3D,GAAkBA,EAAe/8J,OAAQ,CACtCy+J,GAjGPK,GAAAA,EAAAA,EA0HJ,IAAkBhC,IAAAA,GAAAA,EAAAtsI,EAxBausI,IAwBbD,QAAlB,kBACE,IADF,WACWx4J,KAAK+I,OAAOrN,OAArB,CAGA,IAAM6jF,EACJ9yE,SAASE,cAAc,OACzB4yE,EAAa1nE,IAAM8iJ,EAAI36J,KAAK+I,OAAO,GAAG4L,IACtC4qE,EAAa7nE,MAAMsmH,KAAO28B,EAAIC,YAAY58B,KAAO,GAAK,IACtDz+C,EAAa7nE,MAAM2f,OAAU,KAAOsjI,EAAIC,YAAY58B,KAAO,GAAM,IACjEz+C,EAAa7nE,MAAMrQ,MAAQszJ,EAAIC,YAAYvzJ,MAAQ,GAAK,IACxDk4E,EAAa7nE,MAAM8xC,SAAY,KAAOmxG,EAAIC,YAAYvzJ,MAAQ,GAAM,IACpEk4E,EAAa7nE,MAAMmjJ,UAAY,UAC/Bt7E,EAAa7nE,MAAM6C,SAAW,WAC9B,EAAK8xI,EAAaz0I,YAAY2nE,EAZ9B,CA3HEi7E,EAmGO1C,EAAsB0B,EAnG7BgB,EAoGOrQ,EAAM,IAAckQ,GACrBpP,EACkBpwJ,EAAI,EACN2+J,EAAQ/tC,IAAI/vH,QACZ,EAxGtB8+J,EAyGW3nF,GAzGX2nF,EA0GOzC,EAAiB9M,EACZ,IAANpwJ,GACGi/J,GA5GTU,EA4ZqCF,cA9S9BC,GA9GPC,GA+GE,KAf2C,CAP7C,CAvFEnB,IAAe,EAAKlP,IA3CpB3oD,EA4CFs5D,EA5CqBjoF,EAAO2uB,YA4C5Bs5D,EAxCKnD,GAwCLmD,EAxC8BnD,EAAmBn2D,IAwCjDs5D,EAvCGjoF,EAAO2uB,YAuCVs5D,EAvC6BnD,GAuC7BmD,EArCCnD,EAAmB,KA+Be,CApBvC,CALc,CA0KhBwC,SAAA,GAAAA,GACE,GAAI,EAAKhQ,EAAK,CAEZ,KAAO,EAAKkC,EAAa0O,WACvB,EAAK1O,EAAajkE,YAAY,EAAKikE,EAAalkE,YAE7C,EAAKuvE,GACR,EAAKG,EAAW58J,KAAK,EAAK88J,EAAea,MDjSjCrB,IAAAA,ECmSqBA,EAAKpN,EDnS1BoN,EC6WLuC,GA1ELkB,OAwEsB,IAAAnF,GAAAA,EAsLcoF,OAPCC,YAzKvC,IAA4BjD,IAAAA,GAAAA,EAAA/rI,EA9E1B8uI,EA8E0B/C,IAAAA,QAA5B,4BA9EE+C,EA+EKjmG,EAAcxjC,GACf7B,EAAS5mB,OAAQ4mB,EAASl2B,KAAMk2B,EAASA,UAhF7CsrI,EAkFG/C,EAAe,GAlFlB+C,EAmFGxE,EAAa,IAlFVj8I,EAAW,EAAK4vI,EAAIgR,4BACpBC,EAAkB,EAAKjR,EAAIkR,sBAE1BvB,GAALA,EAwQmCwB,YAtQrC,EAAKnR,EAAM,KACX,EAAK4N,EAAiB,KACtB,EAAKD,EAAsB,IAhBf,CADL,CAwBXyC,SAAA,GAAAA,GAEE,IAAIgB,GAAkB,EACjB,EAAK1oF,EAAO8E,OAIf4jF,GAAkB,GAHbzB,GAALA,EAqKuC0B,cApKlC1B,GAALA,EA2KkC2B,UAvKpC,EAAKxD,EAAah9J,KAAK,CACrB6N,OAAQ,EAAK+pE,EACbr5E,KAAM,eACNk2B,SAAUA,WAZa,EAaZmjD,EAAO86E,OACTmM,GAdcA,EAuLU4B,OA3KjB,IAMlB,EAAKzD,EAAah9J,KAAK,CACrB6N,OAAQ,EAAK+pE,EACbr5E,KAAM,eACNk2B,SAAUA,WArBa,EAsBXmjD,EAAO86E,OACVmM,GAvBcA,EA8LY6B,SAzKnB,IAMlB,EAAK1D,EAAah9J,KAAK,CACrB6N,OAAQ,EAAK+pE,EACbr5E,KAAM,OACNk2B,SAAUA,WACJ6rI,GACGzB,GAhCcA,EAyKgB0B,cAxI9B1B,GAjCcA,EAgLW2B,SA9I9BF,GAAkB,GAEbzB,GApCcA,EAqMY8B,SAvKnB,IAUlB,EAAK3D,EAAah9J,KAAK,CACrB6N,OAAQ,EAAK+pE,EACbr5E,KAAM,QACNk2B,SAAUA,WACHoqI,GA5CgBA,EA4MW+B,QAjKlB,IAIlB,IAA4B5D,IAAAA,EAAA/rI,EAAL+rI,EAAKA,GAAAA,EAAAA,EAAAA,QAA5B,4BACE,EAAKljG,EAAc9jC,EACfvB,EAAS5mB,OAAQ4mB,EAASl2B,KAAMk2B,EAASA,SAjDtB,CA2E3BoqI,SAAA,GAAAA,EAAmBzpC,GACjB,IAAIyrC,EAAgB,EAAK/D,EAAegE,eAAe/7I,MACnD,SAACsR,GAAU,OAAAA,EAAM++F,WAAaA,CAAnB,IAKf,GAJKyrC,IACHA,EAAgB,EAAKhE,EAAoBkE,sBAAsBh8I,MAC3D,SAACsR,GAAU,OAAAA,EAAM++F,WAAaA,CAAnB,KAEbyrC,EAMF,IAHA,IAAMl0F,EAAU,CACdpuE,KzDqKwByiK,IyDnKYC,GAAAA,EAAAhwI,EAAd4vI,EAAcI,aAAAA,QAAtC,+BACiC,IAAbC,KAGZx0F,EAA2BmF,GAC7B,CAACqvF,G/DrlBF,CACL99F,YAAa,EACbE,UAAW,IACXI,cAAe,EACfF,WAAY,GACZgN,QAAS,IACTnC,aAAc,IACdD,kBAAmB,O+DglBTz4D,OAAS,OACjB,EAAKg8G,EAAkBjlD,QzDkItBuvF,EyDlIoCvvF,EAASC,IAGlD,OAAQyoD,GACN,IAqEuCmrC,aApErC,EAAKh3D,EACD,IAAevjC,GLlaKuvF,kBKmaxB,MACF,IAwEkCiL,QAvEhC,EAAKj3D,EACD,IAAevjC,GL9kBEyxF,cK+kBDhxJ,IAAP4wB,KAAO5wB,IAAI,KAAM,EAAKyoJ,KACnC,MACF,IA0EiCuR,OAzE/B,EAAKl3D,EACD,IAAevjC,GLzgBA2uF,aK0gBnB,MACF,IA6EmC+L,SA5EjC,EAAKn3D,EACD,IAAevjC,GLthBSyuF,sBKuhB5B,UAiFiCkM,SA/EjC,EAAKp3D,EACD,IAAevjC,GL/fE6uF,eKggBrB,MACF,IAmFkC+L,QAlFhC,EAAKr3D,EACD,IAAevjC,GL5gBC4uF,cK6gBpB,MACF,IAsF0CgK,gBArFxC,EAAKr1D,EACD,IAAevjC,GL1lBS4tF,sBK2lB5B,MACF,IAyFqCkL,WAxFnC,EAAKv1D,EACD,IAAevjC,GLrlBG8tF,gBKslBtB,MACF,IA4F0CiL,gBA3FxC,EAAKx1D,EACD,IAAevjC,GLhlBSguF,sBKilB5B,MACF,IA+FqCiM,WA9FnC,EAAK12D,EACD,IAAevjC,GL3kBGkuF,gBK4kBtB,EAAK3qD,EACD,IAAevjC,GLlkBE4xF,eKmkBrB,MACF,IAgGoCoI,OA/FlC,EAAKz2D,EACD,IAAevjC,GL7jBEuuF,eK8jBrB,EAAKhrD,EACD,IAAevjC,GLxkBE4xF,eKykBrB,MACF,IAiGuCyH,aAhGrC,EAAKjO,EAAar/G,aAAa,YAAa,QAC5C,MACF,IAqGqCsuH,WApGnC,EAAKjP,EAAazyD,gBAAgB,mBAEpC,IAyG+CsgE,mBAxG7C,EAAK11D,EACD,IAAevjC,GL3hBa+uF,0BKycR,CCzrB9B3mJ,SAAA,GAAY4gJ,EAAOrlG,GAEjB9nD,KAAKqtJ,EAAMF,EAGXntJ,KAAKs/J,EAAkB,KAGvBt/J,KAAK+1E,EAASjuB,CARU,CCa1Bv7C,SAAA,GAAY8iJ,EAAavnG,EAAOlB,EAAQw4B,GAAU,IAAD,OAE/Cp/E,KAAKuvJ,EAAeF,EAGpBrvJ,KAAK+1E,EAASjuB,EAOd9nD,KAAK06J,EAAiB,KAGtB16J,KAAK26J,EAA0BpmD,IAG/Bv0G,KAAK0nG,EAAWtoB,EAGhBp/E,KAAKu/J,GAAiB,EAatBv/J,KAAKs/J,EAHLt/J,KAAKqtJ,EAHLrtJ,KAAK66J,EAAmB,KASxB76J,KAAKs7J,EAAa,GAGlBt7J,KAAKw/J,EAAoB,GAGzBx/J,KAAKi4D,EAAgB,IAAetjC,GAG9B8qI,EAAa,IAAI/R,OAAOC,IAAI+R,IAAIC,IAAIC,YAC/BlQ,UAAU9oG,GAGrB5mD,KAAK6/J,EAAiB,IAAInS,OAAOC,IAAI+R,IAAIC,IAAIG,cACzC9/J,KAAK+1E,EAAQ/1E,KAAKuvJ,EAAckQ,GAEpCz/J,KAAK0nG,EAAS,IAAevjC,GP4MW47F,6BO1MxBn7J,IAAP4wB,KAAO5wB,IAAI,mBAAoB5E,KAAK6/J,KAG7C7/J,KAAKi4D,EAAc9jC,EAAOn0B,KAAK6/J,EAC3BnS,OAAOC,IAAI+R,IAAIC,IAAIK,YAAYroI,KAAKo8H,QAAQ,SAACzgI,aAgQnD2sI,EAAU3sI,GAGR,EAAKo0E,EAAS,IAAevjC,GPzMJusF,cO0MT9rJ,IAAP4wB,KAAO5wB,IAAI,WAHR8oC,KAAK6rB,MAAQ,IACF,EAAKohG,KAKtB9iJ,EADayb,EAAE4sI,gBACEroJ,IACvB,EAAK6iJ,EAAe7+G,QAAQhkC,GAC5B,EAAK6iJ,EAAiB,KAEjB,EAAK6E,GACR,EAAKtnG,EAAc9jC,EAAO,EAAK4hD,EAAQ,UAAU,WA5EnD,IAAM2uB,EAgEK23D,EAhEctmF,EAAO2uB,YAChC,GAAmB,GAAfA,EAAJ,CA+DW23D,EA3DNwD,EAAeM,yBAAyBz7D,GAC7C,IAAM07D,EA0DK/D,EAzDFwD,EAAeQ,8BAA8B37D,GAIlD07D,IAAqBA,EAAiBE,SAqD/BjE,EAlDJxB,EAAmBn2D,EAkDf23D,EAjDJtmF,EAAO2uB,YAAc07D,EAAiB32J,MAd7C,CA2EyD,GAZ9C,CA9PAw2J,CAALA,EACoD3sI,EAHH,IAMvDtzB,KAAKi4D,EAAc9jC,EAAOn0B,KAAK6/J,EAC3BnS,OAAOC,IAAI+R,IAAIC,IAAIK,YAAYroI,KAAK4oI,OAAO,WAEzChqF,EA6QI+kF,EAAW18J,OA7Qf23E,EAsRDmkF,EAAe7+G,QAtRd06B,EAsR2B+kF,GAtR3B/kF,EA8QCmkF,EAAehqG,OAAO,oFA9QvB6lB,EAgRCmkF,EAAiB,IAlR6B,IAKrD16J,KAAKi4D,EAAc9jC,EAAOn0B,KAAK6/J,EAC3BnS,OAAOC,IAAI+R,IAAIC,IAAIK,YAAYroI,KAAK6oI,kBAAkB,WAAO,IAIjExgK,KAAKi4D,EAAc9jC,EAAOn0B,KAAK6/J,EAC3BnS,OAAOC,IAAI+R,IAAIC,IAAIK,YAAYroI,KAAKk6H,SAAS,SAACv+H,GAyM5C65H,EAvMgE75H,EAuMtDmiI,QAvMV7D,EAwMDvE,EAAM,IAAcoT,GAAatT,EAxMhCyE,EAwM4C77E,GAxM5C67E,EAgNG0N,IAhNH1N,EAiNCvE,ED7RFiS,EC4EC1N,EAiN0B0N,GAjN1B1N,EAoNDlqD,EAAS,IAAevjC,GPtKJyxF,cOuKThxJ,IAAP4wB,KAAO5wB,IAAI,KArNdgtJ,EAqNyBvE,KArNzBuE,EAsNDrC,EAAar/G,aAAa,YAAa,OAxNY,IAKxDlwC,KAAKi4D,EAAc9jC,EAAOn0B,KAAK6/J,EAC3BnS,OAAOC,IAAI+R,IAAIC,IAAIK,YAAYroI,KAAK+oI,gBAAgB,WAElD1C,EAuNDzO,EAAazyD,gBAAgB,iBAC5B4H,EAxNAs5D,EAwNmBjoF,EAAO2uB,YAxN1Bs5D,EA4NGnD,GA5NHmD,EA4N4BnD,EAAmBn2D,IA5N/Cs5D,EA6NCjoF,EAAO2uB,YA7NRs5D,EA6N2BnD,EA7N3BmD,EA8NCnD,EAAmB,KAhOoC,IAK9D76J,KAAKi4D,EAAc9jC,EAAOn0B,KAAK6/J,EAC3BnS,OAAOC,IAAI+R,IAAIC,IAAIK,YAAYroI,KAAK07H,aAAa,SAAC//H,GAChDqtI,EA4QDrB,EA3QqDhsI,EAyQrC4sI,gBACaU,eA3Q5BD,EA6QGtT,IA7QHsT,EA8QCtT,EDrWFiS,ECuFCqB,EA8Q0BrB,EA/Q4B,IAK5Dt/J,KAAKi4D,EAAc9jC,EAAOn0B,KAAK6/J,EAC3BnS,OAAOC,IAAI+R,IAAIC,IAAIK,YAAYroI,KAAKm6H,gBAAgB,WAElD,EAAKpqD,EACD,IAAevjC,GPoCO4tF,qBOvC8B,IAM9D/xJ,KAAKi4D,EAAc9jC,EAAOn0B,KAAK6/J,EAC3BnS,OAAOC,IAAI+R,IAAIC,IAAIK,YAAYroI,KAAKq6H,UAAU,WAE5C,EAAKtqD,EACD,IAAevjC,GPsCC8tF,eOzC8B,IAMxDjyJ,KAAKi4D,EAAc9jC,EAAOn0B,KAAK6/J,EAC3BnS,OAAOC,IAAI+R,IAAIC,IAAIK,YAAYroI,KAAKu6H,gBAAgB,WAElD,EAAKxqD,EACD,IAAevjC,GPwCOguF,qBO3C8B,SAMzDl6F,EAAc9jC,EAAOn0B,KAAK6/J,EAC3BnS,OAAOC,IAAI+R,IAAIC,IAAIK,YAAYroI,KAAKy6H,UAAU,WAE5C,EAAK1qD,EACD,IAAevjC,GP0CCkuF,gBOzCpB,EAAK3qD,EACD,IAAevjC,GPmDA4xF,eOlDnB,EAAKxG,EAAazyD,gBAAgB,aAClC,EAAKuwD,EAAM,IAPuC,IAUxDrtJ,KAAKi4D,EAAc9jC,EAAOn0B,KAAK6/J,EAC3BnS,OAAOC,IAAI+R,IAAIC,IAAIK,YAAYroI,KAAK86H,SAAS,WAE3C,EAAK/qD,EACD,IAAevjC,GPmDAuuF,eOlDnB,EAAKhrD,EACD,IAAevjC,GPwCA4xF,cO7C8B,IAQvD/1J,KAAKi4D,EAAc9jC,EAAOn0B,KAAK6/J,EAC3BnS,OAAOC,IAAI+R,IAAIC,IAAIK,YAAYroI,KAAKkpI,mBAAmB,SAACvtI,GA0O5D,IAAMwtI,EAvOoDxtI,EAuOrC4sI,gBAGf/O,EAAY,GAClB,IAA+B4P,IAAAA,GAAAA,EAAA3xI,EAAX0xI,EAAWC,YAAAA,QAA/B,4BAME5P,EAAUhzJ,KAJYizJ,CACpB3nJ,MAAOyX,EAAMzX,MACbC,IAAKwX,EAAMxX,MAhPTs3J,EAqPDxB,EAAoBrO,EArPnB6P,EAuPDt5D,EAAS,IAAevjC,GPpJGktF,yBOsJhBzsJ,IAAP4wB,KAAO5wB,IAAI,YAAausJ,IA3PiC,GAxInB,CCiYjD5kJ,SAAA,KACEy8D,GAAA,WAQAhpE,KAAKihK,EAFLjhK,KAAKkhK,EAFLlhK,KAAKmhK,EAFLnhK,KAAKohK,EAAyB,KAQ9BphK,KAAKqxH,EAAS,IAAcgwC,GAE5BrhK,KAAKshK,EAAUriI,UAAUh6B,SAEzBjF,KAAKm4D,EAAU,IAfH,UAwdd,GAAAopG,EAAyB/sI,GACvB,GAAIA,GAASA,EAAM93B,KACjB,OAAQ83B,EAAM93B,MACZ,IRvuBqBg0J,aQyuBnB,EAAKr/B,EVz1BNw7B,EAAW1uJ,KUw1BgCq2B,EAAzBmlI,UAEjB,MAEF,IRpuBqB/D,aQquBnB,EAAKvkC,EVt1BNpjB,IUu1BC,MACF,IRnsBsBokD,cQosBpB,EAAKhhC,EVl1BN27B,IUm1BC,MACF,IRlrBqB0F,aQmrBnB,EAAKrhC,EV90BN07B,IU+0BC,MACF,IR7fmBuI,WQ8fjB,EAAKjkC,EV10BNy7B,IU80BL,EAAK7/E,cAAcz4C,EAtBW,CCj2BhCnR,SAAO,GAAUm+I,GACf,OAAOrlI,KAAKC,UAAUolI,GAAO,SAACl6J,EAAKzD,GACjC,GAAoB,mBAATA,EAAX,CAKA,GAAIA,aAAiB49J,OAAS59J,aAA4BsgE,GAAW,CAKnE,IAAMu9F,EAAc,CAAC,EACrB,IAAWC,KAAY99J,GACf+9J,EAAa/9J,EAAM89J,KACc,iBAAdC,EACP,UAAZD,IAGFD,EAAYC,GAAYC,GAIjBD,KAAYF,QAIrBC,EAAYC,GAAYC,GAG5B,OAAOF,CAvB4D,CA0BrE,GAAI79J,aAAiBk4B,MAArB,CAkJI8lI,IAAAA,EAAa,IAAIrvI,IAAI,CAAC,OAAQ,UAAW,UAC/C,IAAWlrB,KA/IA0D,EAgJT62J,EAAW3wI,IAAI5pB,GAEjB,IAAkB,KAAA8nB,EAAA5jB,OAAOiQ,oBAlJdzQ,KAkJO,QAAlB,kBACE62J,EAAW3wI,IADb,EAAA5pB,OAKA,IADMw6J,EAAW,CAAC,EACAD,GAAAA,EAAAzyI,EAAAyyI,IAAAA,QAAlB,kBACEC,EADF,WAvJW92J,EAwJa1D,GAGxB,EAAO,CACL,SAAY,QACZ,SAAYw6J,EAjKZ,MAOA,4BA0EF,IARMtqJ,EAAM,CACV,SAAY,aACZ,OApEA0tH,EAoEiBtmI,OACjB,MAAS,GACT,IAAO,IAIkB,KAAAwwB,EAAgB67D,GA1EzCi6C,KA0EyB,QAA3B,kBAAmBx7H,GAAR,EAAX,SAAmBA,IACjB8N,EAAA,MAAarZ,KADH,EAAAsL,OAEV+N,EAAA,IAAWrZ,KAAKuL,GAGlB,EAAO8N,CA/EL,gCA+GK,CACL,SAAY,aACZ,QAAW7S,MAAM24B,KAjHjBtzB,IAAA,6EAPA,QA/BA,CAD2C,GADvB,CA2ExBiZ,SAAO,GAAYjgB,GACjB,OAAOm5B,KAAK1/B,MAAMuG,GAAK,SAACsE,EAAKzD,GAC3B,GAAa,OAATA,EACK0wG,IAAAA,EAAAA,SACF,+GAsDXwtD,SAA2BvqJ,GACzB,MAAO,CACL5Y,OAAQ4Y,EAAI5Y,OAIZ6K,MAAOA,SAAC1L,GAAQ,OAAOyZ,EAAI/N,MAAM1L,EAAnB,EACd2L,IAAKA,SAAC3L,GAAQ,OAAOyZ,EAAI9N,IAAI3L,EAAjB,EAPgB,CAtDrB,8DAsFF,IAAI4C,WAtFF6W,EAsF6C,cAtF7C,+CAiIT,IAAWlQ,KAFLw6J,EA/HGtqJ,EA+HQ,SACXxM,EAAY+wB,MAAM+lI,EAAA,SACNA,EAChB92J,EAAM1D,GAAOw6J,EAASx6J,GAExB,EAAO0D,CApIE,UAFP,QADqC,GADjB,EV1CxBg3J,EAAAA,GAAAA,WAAAA,YAAAA,WACE,OAAO,CADK,EAQdC,EAAAC,kBAAAA,WACE,OAAO,CADW,EAQpBD,EAAA9L,2BAAAA,WACE,OAAO,CADoB,EAQ7B8L,EAAA77D,YAAAA,WACE,OAAOpmG,KAAKqtJ,EAAIjnD,aADJ,EAQd67D,EAAAE,wBAAAA,WACE,OAAOniK,KAAKqtJ,EAAI8U,yBADQ,IAQ1BnI,iBAAAA,WACE,OAAOh6J,KAAKstJ,EAAS0M,kBADJ,EAQnBiI,EAAAG,SAAAA,WACE,OAAOpiK,KAAKutJ,CADH,EAQX0U,EAAAnT,YAAAA,WAGE,OAAuC,GAAhC9uJ,KAAKqtJ,EAAIgV,mBAHJ,EAUdJ,EAAAK,sBAAAA,WACE,IAAM/T,EAAavuJ,KAAKqtJ,EAAIgV,oBAE5B,OADME,EAAYviK,KAAKg6J,mBAAqBzL,EACrC3rJ,KAAK4G,IAAI+4J,EAAW,EAHL,EAUxBN,EAAAnI,WAAAA,WACE,OAAO95J,KAAKstJ,EAASkV,qBADV,EAQbP,EAAA/vF,KAAAA,WACE,OAAOlyE,KAAKstJ,EAASp7E,MADhB,EAeP+vF,EAAAxyD,MAAAA,WACE,OAAOzvG,KAAKstJ,EAAS79C,OADf,EAQRwyD,EAAAx8D,KAAAA,WACE,OAAOzlG,KAAKstJ,EAASmV,QADhB,EASPR,EAAAxU,UAAAA,WACE,OAAOztJ,KAAKstJ,EAASG,WADX,IAQZqD,UAAAA,SAAUC,GAER,OADA/wJ,KAAK+1E,EAAOg7E,OAASA,EACd/wJ,KAAKstJ,EAASwD,UAAUC,EAFf,EASlBkR,EAAAS,QAAAA,WACE,OAAoC,GAA7B1iK,KAAKstJ,EAASG,WADb,EAQVwU,EAAApM,SAAAA,WACE,OAAO71J,KAAKqtJ,EAAIwI,UADP,EASXoM,EAAA/M,OAAAA,SAAO16H,EAAOD,GACZ,IAAIooI,GAAiB,EACf76G,EAAwC9nD,KAAK+1E,EAC/CpmE,SAAS+tH,kBACXilC,IAAmBhzJ,SAAS4lJ,kBACnBztG,EAAM+4F,2BACf8hB,EAAiB76G,EAAM0tG,4BAIzBx1J,KAAKstJ,EAAS4H,OAAO16H,EAAOD,EAFXooI,EACbjV,OAAOC,IAAIoH,SAASC,WAAatH,OAAOC,IAAIoH,SAASE,OATrC,EAiBtBgN,EAAAjR,SAAAA,SAASH,IACP7wJ,KAAK+1E,EAAO86E,MAAQA,IAIlB7wJ,KAAKwtJ,EAAUxtJ,KAAKytJ,YACpBztJ,KAAKstJ,EAASwD,UAAU,IAExB9wJ,KAAKstJ,EAASwD,UAAU9wJ,KAAKwtJ,EARjB,IA0BhB+Q,kBAAAA,WACE,IAAMqE,EAAU5iK,KAAKqtJ,EAAIwV,eACzB,OAAe,MAAXD,EAEK,EAGFA,EAAQE,aAPG,EAcpBb,EAAA5D,sBAAAA,WACE,IAAMuE,EAAU5iK,KAAKqtJ,EAAIwV,eACzB,OAAe,MAAXD,EAEK,EAGFA,EAAQG,eAPO,EAcxBd,EAAAe,SAAAA,WACE,OAAOhjK,KAAKqtJ,EAAI2V,UADP,EAQXf,EAAAgB,eAAAA,WACE,OAAOjjK,KAAKqtJ,EAAI4V,gBADD,EAQjBhB,EAAAiB,oBAAAA,WACE,OAAOljK,KAAKqtJ,EAAI6V,qBADI,EAQtBjB,EAAAkB,mBAAAA,WACE,OAAOnjK,KAAKqtJ,EAAI8V,oBADG,EAQrBlB,EAAAmB,kBAAAA,WACE,OAAOpjK,KAAKqtJ,EAAI+V,mBADE,IAQpBC,QAAAA,WACE,OAAOrjK,KAAKqtJ,EAAIgW,SADR,EAQVpB,EAAAqB,gBAAAA,WACE,OAAOtjK,KAAKqtJ,EAAIiW,iBADA,EAQlBrB,EAAAsB,kBAAAA,WACE,OAAOvjK,KAAKqtJ,EAAIkW,mBADE,EAQpBtB,EAAAuB,YAAAA,WACE,OAAOxjK,KAAKqtJ,EAAImW,aADJ,EAQdvB,EAAAwB,cAAAA,WACE,IAAMb,EAAU5iK,KAAKqtJ,EAAIwV,eACzB,OAAe,MAAXD,EAGK,EAGFA,EAAQa,eARD,EAehBxB,EAAAyB,YAAAA,WACE,IAAMd,EAAU5iK,KAAKqtJ,EAAIwV,eACzB,OAAe,MAAXD,EAGK,EAGFA,EAAQc,aARH,EAedzB,EAAAjuI,QAAAA,WAEEh0B,KAAKstJ,EADLttJ,KAAKqtJ,EAAM,IADH,EA3WZ34H,EAAA,yBAAAghI,IA2WEA,GAAA9gI,UtJ+5CA,QsJ/5CA8gI,GAAA,UAAA9gI,WAfAA,UtJ86CA,YsJ96CA8gI,GAAA,UAAA9gI,YAfA8gI,GAAA9gI,UtJ67CA,csJ77CA8gI,GAAA,UAAA9gI,cARA8gI,GAAA9gI,UtJq8CA,YsJr8CA8gI,GAAA,UAAA9gI,YARA8gI,GAAA9gI,UtJ68CA,kBsJ78CA8gI,GAAA,UAAA9gI,kBARA8gI,GAAA9gI,UtJq9CA,gBsJr9CA8gI,GAAA,UAAA9gI,gBARA8gI,GAAA9gI,UtJ69CA,QsJ79CA8gI,GAAA,UAAA9gI,QARA8gI,GAAA9gI,UtJq+CA,kBsJr+CA8gI,GAAA,UAAA9gI,kBARA8gI,GAAA9gI,UtJ6+CA,mBsJ7+CA8gI,GAAA,UAAA9gI,mBARA8gI,GAAA9gI,UtJq/CA,oBsJr/CA8gI,GAAA,UAAA9gI,uBARAA,UtJ6/CA,esJ7/CA8gI,GAAA,UAAA9gI,eARA8gI,GAAA9gI,UtJqgDA,SsJrgDA8gI,GAAA,UAAA9gI,SAdA8gI,GAAA9gI,UtJmhDA,sBsJnhDA8gI,GAAA,UAAA9gI,sBAdA8gI,GAAA9gI,UtJiiDA,kBsJjiDA8gI,GAAA,UAAA9gI,kBA1BA8gI,GAAA9gI,UtJ2jDA,SsJ3jDA8gI,GAAA,UAAA9gI,SAjBA8gI,GAAA9gI,UtJ4kDA,OsJ5kDA8gI,GAAA,UAAA9gI,OATA8gI,GAAA9gI,UtJqlDA,SsJrlDA8gI,GAAA,UAAA9gI,SARA8gI,GAAA9gI,UtJ6lDA,QsJ7lDA8gI,GAAA,UAAA9gI,QATA8gI,GAAA9gI,UtJsmDA,UsJtmDA8gI,GAAA,UAAA9gI,UARA8gI,GAAA9gI,UtJ8mDA,UsJ9mDA8gI,GAAA,UAAA9gI,aATAA,UtJunDA,KsJvnDA8gI,GAAA,UAAA9gI,KARA8gI,GAAA9gI,UtJ+nDA,MsJ/nDA8gI,GAAA,UAAA9gI,MAfA8gI,GAAA9gI,UtJ8oDA,KsJ9oDA8gI,GAAA,UAAA9gI,KARA8gI,GAAA9gI,UtJspDA,WsJtpDA8gI,GAAA,UAAA9gI,WAVA8gI,GAAA9gI,UtJgqDA,sBsJhqDA8gI,GAAA,UAAA9gI,sBAVA8gI,GAAA9gI,UtJ0qDA,YsJ1qDA8gI,GAAA,UAAA9gI,YARA8gI,GAAA9gI,UtJkrDA,SsJlrDA8gI,GAAA,UAAA9gI,SARA8gI,GAAA9gI,UtJ0rDA,iBsJ1rDA8gI,GAAA,UAAA9gI,iBARA8gI,GAAA9gI,UtJksDA,wBsJlsDA8gI,GAAA,UAAA9gI,wBARA8gI,GAAA9gI,UtJ0sDA,YsJ1sDA8gI,GAAA,UAAA9gI,eARAA,UtJktDA,2BsJltDA8gI,GAAA,UAAA9gI,2BARA8gI,GAAA9gI,UtJ0tDA,kBsJ1tDA8gI,GAAA,UAAA9gI,kBARA8gI,GAAA9gI,UtJkuDA,YsJluDA8gI,GAAA,UAAA9gI,YCvCFF,EAAA,kBAAAivI,IAmIAA,GvJsoDE,WuJtoD2BjT,aAQ7BiT,GvJ8nDE,WuJ9nD2B/N,aAS7B+N,GvJqnDE,kBuJrnDkC5R,oBASpC4R,GvJ4mDE,YuJ5mD4B1R,cAS9B0R,GvJmmDE,kBuJnmDkCxR,uBvJmmDlC,YuJ1lD4BE,cAW9BsR,GvJ+kDE,WuJ/kD2B5N,aAS7B4N,GvJskDE,WuJtkD2BjR,aAS7BiR,GvJ6jDE,kBuJ7jDkC/Q,oBASpC+Q,GvJojDE,SuJpjDyB7Q,WAS3B6Q,GvJ2iDE,UuJ3iD0B5Q,YAS5B4Q,GvJkiDE,WuJliD2B3Q,aAU7B2Q,GvJwhDE,sBuJxhDsCzQ,wBAUxCyQ,GvJ8gDE,kBuJ9gDkCtS,wBAUpCsS,GvJogDE,sBuJpgDsC1S,wBAUxC0S,GvJ0/CE,0BuJ1/C0C5D,4BAS5C4D,GvJi/CE,WuJj/C2BvQ,aAS7BuQ,GvJw+CE,YuJx+C4BrQ,cAS9BqQ,GvJ+9CE,auJ/9C6BnQ,kBvJ+9C7B,cuJt9C8BE,gBAShCiQ,GvJ68CE,oBuJ78CoC/P,sBAStC+P,GvJo8CE,UuJp8C0B7P,YAS5B6P,GvJ27CE,UuJ37C0B3P,YAS5B2P,GvJk7CE,kBuJl7CkC1P,oBASpC0P,GvJy6CE,kBuJz6CkCxP,oBASpCwP,GvJg6CE,YuJh6C4BtP,cAU9BsP,GvJs5CE,qBuJt5CqCpP,uBAQvCoP,GvJ84CE,SuJ94CyBrO,WAS3BqO,GvJq4CE,euJr4C+BlP,iBAUjCkP,GvJ23CE,euJ33C+BhP,iBAUjCgP,GvJi3CE,2BuJj3C2ChO,6BAU7CgO,GvJu2CE,4BuJv2C4C7N,iCvJu2C5C,4BuJ71C4C8N,8BC7U5CC,GAAA,UAAAjyI,UAAAA,SAAUC,GACR7xB,KAAKm4D,EAAUtmC,CADC,EAyClBgyI,GAAA,UAAA5/H,KAAAA,WAGMjkC,KAAKowJ,GACPpwJ,KAAKowJ,EAAensH,OAElBjkC,KAAKuvJ,GACQv9D,GAAkBhyF,KAAKuvJ,EAPnC,KAYP,UAAAv7H,QAAAA,WACEh0B,KAAKikC,OACDjkC,KAAK84D,GACP94D,KAAK84D,EAAgBa,aAEnB35D,KAAKi4D,GACPj4D,KAAKi4D,EAAcjkC,UAEjBh0B,KAAKowJ,GACPpwJ,KAAKowJ,EAAel4G,UAEtBl4C,KAAK+vJ,EAAW73G,UAChBl4C,KAAK4vJ,EAAoB13G,SAZjB,GC9GV8pH,EAAAA,GAAAA,WAAAA,YAAAA,WACE,OAAO,CADK,EAQd8B,EAAA5B,kBAAAA,WACE,OAAO,CADW,EAQpB4B,EAAA3N,2BAAAA,WACE,OAAOn2J,KAAK02J,CADe,EAQ7BoN,EAAA19D,YAAAA,WACE,IAAM3D,EAAWziG,KAAK+1E,EAAO0sB,SAC7B,OAAI/wE,MAAM+wE,IACA,EAEHA,CALK,EAYdqhE,EAAA3B,wBAAAA,WACE,OAAOniK,KAAKomG,aADY,EAQ1B09D,EAAA9J,iBAAAA,WACE,IAAMv3D,EAAWziG,KAAK+1E,EAAO0sB,SAC7B,OAAI/wE,MAAM+wE,IACA,EAEHA,EAAWziG,KAAK+1E,EAAO2uB,WALb,EAYnBo/D,EAAA1B,SAAAA,WACE,OAAOpiK,KAAK+1E,EAAO8E,MADV,IAQXi0E,YAAAA,WACE,OAAI9uJ,KAAKq2J,GAAiC,MAAjBr2J,KAAKs2J,EACXt2J,KAAKomG,cAAgBpmG,KAAKg6J,mBAC3Bh6J,KAAKo2J,EAAcp2J,KAAKs2J,EAGnCt2J,KAAKq2J,CANA,EAadyN,EAAAxB,sBAAAA,WACE,GAAItiK,KAAK8uJ,cAAe,CACtB,IAAMyT,EACFviK,KAAKg6J,mBAAqBh6J,KAAKo2J,EAAcp2J,KAAKomG,cACtD,OAAOxjG,KAAK4G,IAAI+4J,EAAW,EAHL,CAKxB,OAAO3/J,KAAK4G,IAAIxJ,KAAKg6J,mBAAoB,EANnB,EAaxB8J,EAAAhK,WAAAA,WACE,OAAuC,GAAhC95J,KAAKsiK,uBADD,EAQbwB,EAAA5xF,KAAAA,WACElyE,KAAKu2J,GADA,EAQPuN,EAAAr0D,MAAAA,WACE,OAAOzvG,KAAK+1E,EAAO05B,OADb,EAQRq0D,EAAAr+D,KAAAA,WACE,OAAOzlG,KAAK+1E,EAAO0vB,MADd,EASPq+D,EAAArW,UAAAA,WACE,OAAOztJ,KAAK+1E,EAAOg7E,MADT,IAQZD,UAAAA,SAAUC,GACR/wJ,KAAK+1E,EAAOg7E,OAASA,CADL,EAQlB+S,EAAApB,QAAAA,WACE,OAAO1iK,KAAK+1E,EAAO86E,KADX,EAQViT,EAAAjO,SAAAA,WACE,OAAO,CADE,EAQXiO,EAAA5O,OAAAA,WAAuB,EAQvB4O,EAAA9S,SAAAA,SAASH,GACP7wJ,KAAK+1E,EAAO86E,MAAQA,CADN,EAShBiT,EAAAvF,kBAAAA,WACE,OAAOv+J,KAAKw2J,CADM,EAQpBsN,EAAAzF,sBAAAA,WACE,OAAOr+J,KAAKy2J,CADU,EAQxBqN,EAAAd,SAAAA,WACE,MAAO,EADE,EAQXc,EAAAb,eAAAA,WACE,MAAO,EADQ,EAQjBa,EAAAZ,oBAAAA,WACE,OAAO,CADa,EAQtBY,EAAAX,mBAAAA,WACE,OAAO,CADY,EAQrBW,EAAAV,kBAAAA,WACE,OAAO,CADW,EAQpBU,EAAAT,QAAAA,WACE,MAAO,EADC,IAQVC,gBAAAA,WACE,MAAO,EADS,EAQlBQ,EAAAP,kBAAAA,WACE,MAAO,EADW,EAQpBO,EAAAN,YAAAA,WACE,OAAO,IADK,EAQdM,EAAAL,cAAAA,WACE,OAAO,CADO,EAQhBK,EAAAJ,YAAAA,WACE,OAAO,CADK,EAQdI,EAAA9vI,QAAAA,WACEh0B,KAAK+1E,EAAS,IADN,EA9TZrhD,EAAA,2BAAAmlI,IA8TEA,GAAAjlI,UzJ+8CA,QyJ/8CAilI,GAAA,UAAAjlI,QARAilI,GAAAjlI,UzJu9CA,YyJv9CAilI,GAAA,UAAAjlI,YARAilI,GAAAjlI,UzJ+9CA,cyJ/9CAilI,GAAA,UAAAjlI,cARAilI,GAAAjlI,UzJu+CA,YyJv+CAilI,GAAA,UAAAjlI,YARAilI,GAAAjlI,UzJ++CA,kByJ/+CAilI,GAAA,UAAAjlI,qBARAA,UzJu/CA,gByJv/CAilI,GAAA,UAAAjlI,gBARAilI,GAAAjlI,UzJ+/CA,QyJ//CAilI,GAAA,UAAAjlI,QARAilI,GAAAjlI,UzJugDA,kByJvgDAilI,GAAA,UAAAjlI,kBARAilI,GAAAjlI,UzJ+gDA,mByJ/gDAilI,GAAA,UAAAjlI,mBARAilI,GAAAjlI,UzJuhDA,oByJvhDAilI,GAAA,UAAAjlI,oBARAilI,GAAAjlI,UzJ+hDA,eyJ/hDAilI,GAAA,UAAAjlI,eARAilI,GAAAjlI,UzJuiDA,SyJviDAilI,GAAA,UAAAjlI,SARAilI,GAAAjlI,UzJ+iDA,sByJ/iDAilI,GAAA,UAAAjlI,sBARAilI,GAAAjlI,UzJujDA,kByJvjDAilI,GAAA,UAAAjlI,qBATAA,UzJgkDA,SyJhkDAilI,GAAA,UAAAjlI,SARAilI,GAAAjlI,UzJwkDA,OyJxkDAilI,GAAA,UAAAjlI,OARAilI,GAAAjlI,UzJglDA,SyJhlDAilI,GAAA,UAAAjlI,SARAilI,GAAAjlI,UzJwlDA,QyJxlDAilI,GAAA,UAAAjlI,QARAilI,GAAAjlI,UzJgmDA,UyJhmDAilI,GAAA,UAAAjlI,UARAilI,GAAAjlI,UzJwmDA,UyJxmDAilI,GAAA,UAAAjlI,UATAilI,GAAAjlI,UzJinDA,KyJjnDAilI,GAAA,UAAAjlI,KARAilI,GAAAjlI,UzJynDA,MyJznDAilI,GAAA,UAAAjlI,MARAilI,GAAAjlI,UzJioDA,KyJjoDAilI,GAAA,UAAAjlI,KARAilI,GAAAjlI,UzJyoDA,WyJzoDAilI,GAAA,UAAAjlI,WAbAilI,GAAAjlI,UzJspDA,sByJtpDAilI,GAAA,UAAAjlI,yBAbAA,UzJmqDA,YyJnqDAilI,GAAA,UAAAjlI,YARAilI,GAAAjlI,UzJ2qDA,SyJ3qDAilI,GAAA,UAAAjlI,SAZAilI,GAAAjlI,UzJurDA,iByJvrDAilI,GAAA,UAAAjlI,iBARAilI,GAAAjlI,UzJ+rDA,wByJ/rDAilI,GAAA,UAAAjlI,wBAZAilI,GAAAjlI,UzJ2sDA,YyJ3sDAilI,GAAA,UAAAjlI,YARAilI,GAAAjlI,UzJmtDA,2ByJntDAilI,GAAA,UAAAjlI,2BARAilI,GAAAjlI,UzJ2tDA,kByJ3tDAilI,GAAA,UAAAjlI,kBARAilI,GAAAjlI,UzJmuDA,YyJnuDAilI,GAAA,UAAAjlI,YCkJAmvI,GAAA,UAAAnyI,UAAAA,SAAUC,GACR7xB,KAAKm4D,EAAUtmC,EACV2mI,GAALA,KAFgB,EA0ClBuL,GAAA,UAAA9/H,KAAAA,WACMjkC,KAAK63J,GACP73J,KAAK63J,EAAgB5jI,KAEvBj0B,KAAKw3J,EAAiB/+H,QACtBz4B,KAAKy3J,EAAeh/H,QACpBz4B,KAAK23J,EAAQ9c,KACb76I,KAAK03J,EAA6Bj/H,QAClCz4B,KAAK23J,EAAQ/c,SACb56I,KAAK82J,GAAa,EAElB92J,KAAKk3J,EADLl3J,KAAK+2J,EAAY,IAVZ,EAePgN,GAAA,UAAA/vI,QAAAA,WACEh0B,KAAKikC,OACDjkC,KAAKi4D,GACPj4D,KAAKi4D,EAAcjkC,UAEjBh0B,KAAK63J,GACP73J,KAAK63J,EAAgB7jI,UAEnBh0B,KAAKuvJ,GACQv9D,GAAkBhyF,KAAKuvJ,GAEpCvvJ,KAAK83J,IACP93J,KAAK83J,EAAiB7zH,OACtBjkC,KAAK83J,EAAmB,MAEtB93J,KAAKi4J,IACPj4J,KAAKi4J,EAAWh0H,OAChBjkC,KAAKi4J,EAAa,MAEpBj4J,KAAK23J,EAAQz/G,SAnBL,EAwFJ6rH,GAAA,UAAAC,qBAAAA,SAAqBnsJ,GAAM,IAEzBizD,EAGAm5F,EACA/gK,EAOFutI,EAKe,IAAjB,EAEQyzB,EACAlW,EArBoB,cAAA9rH,GAAA,+BAKT,WAAWi4H,GAALA,EAAoBtiJ,EAHzCizD,EAAU,CACdpuE,KvDgiBmBynK,KuD9hBA,GALS,OAO9B,GAFMF,EAAe,MACf/gK,EAAuBkhK,GAASH,EAAc,mBAElD,MAAM,IAAe/nI,G1FzMbiJ,EAqCLk/H,GA+8BaC,O0FryBlB,GADI7zB,EAAgB,GACA,QAAhBvtI,EAAKkmC,QAAmB,CAC1BqnG,EAAgC8zB,GAC5BrhK,EAAM,EAAK6zJ,GAFW,aAGrB,GAAoB,aAAhB7zJ,EAAKkmC,QAAT,cH/PP,IADA,IAAMulF,EAAM,GACU,EAAAv/F,EAAKod,GGgQkBtpC,EHhQC,iBAAxB,YAAtB,kBAA+D,CAA/D,cACQshK,EAAaC,EAAQpgJ,WAAR,WACdmgJ,IAGDv8H,EAAO,KAETA,EADgB,SAAdu8H,EACK,EACgB,OAAdA,EACFltI,IAEsB8e,GAAUouH,IAEnCE,EAAgBxW,GAAUuW,EAAS,oBAInCE,EAAgBzW,GAAUwW,EAAU,oBAIpChsH,EAAWrM,GAAgBs4H,KAIjCh2C,EAAIxwH,KAAK,CACP8pC,KAAAA,EACAyQ,IAAAA,IA3B2D,CGgQ5C,EAAAtpB,EHlOZu/F,GGkOY,WAlBW,OAkB5B,wBAE2B,OAF3B,UAE2B,IAAWwrC,GAALA,EAAoBhM,EAAGz1G,IAAKoyB,GAAlC,GApBC,OAsB1B,GAFMo5F,EAAmB,MACnBlW,EAAuBoW,GAASF,EAAkB,SAEtD,MAAM,IAAehoI,G1FxNjBiJ,EAqCLk/H,GA+8BaC,O0FvxBd7zB,EAActyI,KAAd,MAAAsyI,EAAAp/G,EAAsCkzI,GAClCvW,EAAMG,EAAGlmH,QAXf,wBAlB4B,OAgCzBywH,GAALA,EAAsBjoB,GAhCQ,WCzShCuxB,EAAAA,GAAAA,WAAAA,YAAAA,WACE,OAAO,CADK,EAQd4C,EAAA1C,kBAAAA,WACE,OAAO,CADW,EAQpB0C,EAAAzO,2BAAAA,WACE,OAAO,CADoB,EAQ7ByO,EAAAx+D,YAAAA,WACE,OAAOpmG,KAAKqtJ,EAAIoP,iBADJ,EAQdmI,EAAAzC,wBAAAA,WACE,OAAOniK,KAAKomG,aADY,EAQ1Bw+D,EAAA5K,iBAAAA,WAEE,OADgBh6J,KAAKqtJ,EAAImP,mBAAqBx8J,KAAKqtJ,EAAIoP,kBACtCz8J,KAAK+1E,EAAO2uB,WAFZ,EASnBkgE,EAAAxC,SAAAA,WACE,OAAOpiK,KAAK+1E,EAAO8E,MADV,IAQXi0E,YAAAA,WACE,MAA+B,iBAApB9uJ,KAAKo2J,CADJ,EAWdwO,EAAAtC,sBAAAA,WACE,GAA+B,iBAApBtiK,KAAKo2J,EACd,OAAOp2J,KAAKg6J,mBAEd,IAAMuI,EACFviK,KAAKg6J,mBAAqBh6J,KAAKo2J,EAAcp2J,KAAKomG,cACtD,OAAOxjG,KAAK4G,IAAI+4J,EAAW,EANL,EAaxBqC,EAAA9K,WAAAA,WACE,OAAuC,GAAhC95J,KAAKsiK,uBADD,EAQbsC,EAAA1yF,KAAAA,WACElyE,KAAKy6J,GAAa,EAClBz6J,KAAK+1E,EAAO2uB,aAAe1kG,KAAKg6J,kBAF3B,EASP4K,EAAAn1D,MAAAA,WACE,OAAOzvG,KAAK+1E,EAAO05B,OADb,EAQRm1D,EAAAn/D,KAAAA,WACE,OAAOzlG,KAAK+1E,EAAO0vB,MADd,EASPm/D,EAAAnX,UAAAA,WACE,OAAOztJ,KAAK+1E,EAAOg7E,MADT,IAQZD,UAAAA,SAAUC,GACR/wJ,KAAK+1E,EAAOg7E,OAASA,CADL,EAQlB6T,EAAAlC,QAAAA,WACE,OAAO1iK,KAAK+1E,EAAO86E,KADX,EAQV+T,EAAA/O,SAAAA,WACE,OAAO71J,KAAKw6J,CADH,EAQXoK,EAAA1P,OAAAA,WAAuB,EAQvB0P,EAAA5T,SAAAA,SAASH,GACP7wJ,KAAK+1E,EAAO86E,MAAQA,CADN,EAShB+T,EAAArG,kBAAAA,WACE,OAAKv+J,KAAKu6J,EAGHv6J,KAAKu6J,EAFH,CAFS,EAWpBqK,EAAAvG,sBAAAA,WACE,OAAKr+J,KAAKy2J,EAGHz2J,KAAKy2J,EAFH,CAFa,EAWxBmO,EAAA5B,SAAAA,WACE,OAAOhjK,KAAKqtJ,EAAI4O,OADP,EAQX2I,EAAA3B,eAAAA,WACE,MAAO,EADQ,EAQjB2B,EAAA1B,oBAAAA,WACE,OAAO,CADa,EAQtB0B,EAAAzB,mBAAAA,WACE,OAAO,CADY,EAQrByB,EAAAxB,kBAAAA,WACE,OAAO,CADW,IAQpBC,QAAAA,WACE,OAAOrjK,KAAKqtJ,EAAIyO,IADR,EAQV8I,EAAAtB,gBAAAA,WACE,OAAOtjK,KAAKqtJ,EAAI8O,UADA,EAQlByI,EAAArB,kBAAAA,WACE,MAAO,EADW,EAQpBqB,EAAApB,YAAAA,WACE,OAAO,IADK,EAQdoB,EAAAnB,cAAAA,WACE,OAAO,CADO,EAQhBmB,EAAAlB,YAAAA,WACE,OAAO,CADK,EAQdkB,EAAA5wI,QAAAA,WAIEh0B,KAAKu6J,EADLv6J,KAAKy2J,EADLz2J,KAAK+1E,EADL/1E,KAAKqtJ,EAAM,IADH,EApTZ34H,EAAA,0BAAA6oI,IAoTEA,GAAA3oI,U3Ju9CA,Q2Jv9CA2oI,GAAA,UAAA3oI,QARA2oI,GAAA3oI,U3J+9CA,Y2J/9CA2oI,GAAA,UAAA3oI,YARA2oI,GAAA3oI,U3Ju+CA,c2Jv+CA2oI,GAAA,UAAA3oI,iBARAA,U3J++CA,Y2J/+CA2oI,GAAA,UAAA3oI,YARA2oI,GAAA3oI,U3Ju/CA,kB2Jv/CA2oI,GAAA,UAAA3oI,kBARA2oI,GAAA3oI,U3J+/CA,gB2J//CA2oI,GAAA,UAAA3oI,gBARA2oI,GAAA3oI,U3JugDA,Q2JvgDA2oI,GAAA,UAAA3oI,QARA2oI,GAAA3oI,U3J+gDA,kB2J/gDA2oI,GAAA,UAAA3oI,kBARA2oI,GAAA3oI,U3JuhDA,mB2JvhDA2oI,GAAA,UAAA3oI,mBARA2oI,GAAA3oI,U3J+hDA,oB2J/hDA2oI,GAAA,UAAA3oI,oBARA2oI,GAAA3oI,U3JuiDA,e2JviDA2oI,GAAA,UAAA3oI,eARA2oI,GAAA3oI,U3J+iDA,S2J/iDA2oI,GAAA,UAAA3oI,YAXAA,U3J0jDA,sB2J1jDA2oI,GAAA,UAAA3oI,sBAXA2oI,GAAA3oI,U3JqkDA,kB2JrkDA2oI,GAAA,UAAA3oI,kBATA2oI,GAAA3oI,U3J8kDA,S2J9kDA2oI,GAAA,UAAA3oI,SARA2oI,GAAA3oI,U3JslDA,O2JtlDA2oI,GAAA,UAAA3oI,OARA2oI,GAAA3oI,U3J8lDA,S2J9lDA2oI,GAAA,UAAA3oI,SARA2oI,GAAA3oI,U3JsmDA,Q2JtmDA2oI,GAAA,UAAA3oI,QARA2oI,GAAA3oI,U3J8mDA,U2J9mDA2oI,GAAA,UAAA3oI,UARA2oI,GAAA3oI,U3JsnDA,U2JtnDA2oI,GAAA,UAAA3oI,UATA2oI,GAAA3oI,U3J+nDA,K2J/nDA2oI,GAAA,UAAA3oI,KARA2oI,GAAA3oI,U3JuoDA,M2JvoDA2oI,GAAA,UAAA3oI,MATA2oI,GAAA3oI,U3JgpDA,K2JhpDA2oI,GAAA,UAAA3oI,QARAA,U3JwpDA,W2JxpDA2oI,GAAA,UAAA3oI,WAbA2oI,GAAA3oI,U3JqqDA,sB2JrqDA2oI,GAAA,UAAA3oI,sBAXA2oI,GAAA3oI,U3JgrDA,Y2JhrDA2oI,GAAA,UAAA3oI,YARA2oI,GAAA3oI,U3JwrDA,S2JxrDA2oI,GAAA,UAAA3oI,SATA2oI,GAAA3oI,U3JisDA,iB2JjsDA2oI,GAAA,UAAA3oI,iBARA2oI,GAAA3oI,U3JysDA,wB2JzsDA2oI,GAAA,UAAA3oI,wBARA2oI,GAAA3oI,U3JitDA,Y2JjtDA2oI,GAAA,UAAA3oI,YARA2oI,GAAA3oI,U3JytDA,2B2JztDA2oI,GAAA,UAAA3oI,8BARAA,U3JiuDA,kB2JjuDA2oI,GAAA,UAAA3oI,kBARA2oI,GAAA3oI,U3JyuDA,Y2JzuDA2oI,GAAA,UAAA3oI,YC4FAiwI,GAAA,UAAA5gI,KAAAA,WACE,IAA4Bk3H,IAAAA,EAAA/rI,EAAL+rI,KAAKA,GAAAA,EAAAA,EAAAA,QAA5B,4BACEn7J,KAAKi4D,EAAcxjC,GACf7B,EAAS5mB,OAAQ4mB,EAASl2B,KAAMk2B,EAASA,UAE1CyqI,GAALA,MACAr9J,KAAKm7J,EAAe,GACpBn7J,KAAK05J,EAAa,GAClB15J,KAAKo7J,EAAe,GACpBp7J,KAAKq7J,GAAwB,EAC7Br7J,KAAKs7J,EAAa,GAClBt7J,KAAK66J,EAAmB,KACxB76J,KAAK86J,EAAY,GACjB96J,KAAK+6J,EAAa,GAClB/6J,KAAKk7J,EAAiBziI,OAdjB,KAkBP,UAAAzE,QAAAA,WACEh0B,KAAKikC,OACDjkC,KAAKi4D,GACPj4D,KAAKi4D,EAAcjkC,SAHb,EAYV6wI,GAAA,UAAAx2B,kBAAAA,SAAkBviC,GAChB9rG,KAAK46J,EAAU9uD,EACU,IAArB9rG,KAAKo7J,IAsFL0J,SAAAA,EAAqBC,EAAaC,GAGtC,IAAMl6F,EAGAD,EAIAvH,EAEEmJ,EACFs0F,EACE79J,EACAu4J,EAMyBX,EAAAA,EAA3B,EACoC6C,EAAAA,EAAlC,EACgDC,EAAAA,EAA9C,EAvB0C17H,GAAA,sBAYjC,OATb4oC,EAAU,CACdpuE,KzDknByBuoK,GyDhnBrBp6F,EAA2BmF,GAC7B,CAAC+0F,G/DlIE,CACLxjG,YAAa,EACbE,UAAW,IACXI,cAAe,EACfF,WAAY,GACZgN,QAAS,IACTnC,aAAc,IACdD,kBAAmB,M+D8HfjJ,EAV8C,EAUpCwsD,EAAkBjlD,QzDqlB7BuvF,EyDrlB2CvvF,EAASC,GACrD,OACe,IAAMxH,EAAGZ,QAAT,GAZiC,WAiBlD,GALM+J,EAAW,IACbs0F,EAAY,GACV79J,EAA8BwiC,GAAS+mC,EAASvpE,MAGvB,GAFzBu4J,EAC0Ct/H,KAAK1/B,MAAMyG,IAC5CgiK,OAAOtmK,QACpB,GAAIu9B,KAAKC,UAlBuC,EAkBxB0+H,IACpB3+H,KAAKC,UAAUq/H,EAAWyJ,QAAS,CAErC,IArB8C,EAoBzCpK,EAAYW,EAAWyJ,OACDpK,EAAA1rI,EArBmB0rI,EAqBnBA,GAAAA,EAAAA,EAAAA,QAA3B,kBACE,IADF,UACoC6C,EAAAvuI,EAARstI,EAAQiB,kBAAAA,EAAAA,EAAAA,QAAlC,kBACE,IADF,UACgDC,EAAAxuI,EAAZosI,EAAYoC,iBAAAA,EAAAA,EAAAA,QAA9C,4BACOrC,GAxBmCA,EAwBZ4J,GAIlCpE,EA5B8C,EA4B7BlY,iBACZnhD,EAAS,IAAevjC,GLpBHktF,yBKsBVzsJ,IAAP4wB,KAAO5wB,IAAI,YAAam8J,IAZI,OAnBS,EAkCvCjG,EAAUl8J,QAlC6B,EAmCzC8oG,EAAS,IAAevjC,GL1BHktF,yBK4BVzsJ,IAAP4wB,KAAO5wB,IAAI,YAAam8J,KAE9B1D,GAvC2CA,GAAA,EAwC3CvC,EAAY,GA7BjB,OA+BEkK,IA1C8C,EA0CxBpK,GAA8B,EAAnBmG,EAAUniK,SAoEnDwmK,SAAAA,GACOzI,GAALA,GACK,EAAK/B,IACHyB,GAALA,GACA,EAAKpkG,EAAc9jC,EAAO,EAAK4hD,EAAQ,UAAU,WAC1CsmF,GALcA,EAIkC,IAGvD,EAAKpkG,EAAc9jC,EAAO,EAAK4hD,EAAQ,SAAS,WACzCsnF,GARcA,EAOiC,KAIxD,EAAKplG,EAAc9jC,EAAO,EAAK4hD,EAAQ,cAAc,WAC9C4mF,GAZgBA,EAWoC,GAXpC,CAnEdyI,CA3C2CA,GAWhD,MAXgD,CA6C3C9xI,EAAAA,GA7C2C,QArF7CwxI,CAALA,KACI9kK,KAAKo7J,EAAcp7J,KAAKq7J,GAC5Br7J,KAAKq7J,GAAwB,EALP,EAY1BwJ,GAAA,UAAAhc,aAAAA,WAEE,IADA,IAAMsI,EAAY,GACS2J,EAAA1rI,EAAL0rI,KAAKA,GAAAA,EAAAA,EAAAA,QAA3B,kBACE,IAAyBnsC,IAAAA,GAAAA,EAAAv/F,EAD3B,EAAAstI,MAC2B/tC,MAAAA,QAAzB,4BAMEwiC,EAAUhzJ,KAJOknK,CACf57J,MAAO0kJ,EAAGqO,mBACV9yJ,IAAKykJ,EAAGqO,mBAAqBrO,EAAGsO,oBAKtC,OAAOtL,CAZM,GC9If6Q,EAAAA,GAAAA,WAAAA,YAAAA,WACE,OAAO,CADK,EAQdsD,EAAApD,kBAAAA,WACE,OAAO,CADW,EAQpBoD,EAAAnP,2BAAAA,WACE,OAAO,CADoB,EAQ7BmP,EAAAl/D,YAAAA,WACE,OAAKpmG,KAAKs/J,EAIHt/J,KAAKs/J,EAAgB78D,UAFlB,CAHE,EAYd6iE,EAAAnD,wBAAAA,WACE,OAAOniK,KAAKomG,aADY,EAQ1Bk/D,EAAAtL,iBAAAA,WACE,OAAKh6J,KAAKs/J,EAKHt/J,KAAKs/J,EAAgB78D,SAAWziG,KAAKs/J,EAAgB56D,aAHlD,CAHO,EAanB4gE,EAAAlD,SAAAA,WACE,OAAOpiK,KAAK+1E,EAAO8E,MADV,EAQXyqF,EAAAxW,YAAAA,WACE,OAAO9uJ,KAAKqtJ,EAAIyB,aADJ,IAQdwT,sBAAAA,WACE,IAAM/T,EAAavuJ,KAAKqtJ,EAAIgV,oBAE5B,OADME,EAAYviK,KAAKg6J,mBAAqBzL,EACrC3rJ,KAAK4G,IAAI+4J,EAAW,EAHL,EAUxB+C,EAAAxL,WAAAA,WACE,OAAuC,GAAhC95J,KAAKsiK,uBADD,EAQbgD,EAAApzF,KAAAA,WACElyE,KAAK+1E,EAAO2uB,aAAe1kG,KAAKg6J,kBAD3B,EAQPsL,EAAA71D,MAAAA,WACE,OAAOzvG,KAAK+1E,EAAO05B,OADb,EAQR61D,EAAA7/D,KAAAA,WACE,OAAOzlG,KAAK+1E,EAAO0vB,MADd,EASP6/D,EAAA7X,UAAAA,WACE,OAAOztJ,KAAK+1E,EAAOg7E,MADT,EAQZuU,EAAAxU,UAAAA,SAAUC,GACR/wJ,KAAK+1E,EAAOg7E,OAASA,CADL,EAQlBuU,EAAA5C,QAAAA,WACE,OAAO1iK,KAAK+1E,EAAO86E,KADX,EAQVyU,EAAAzP,SAAAA,WACE,OAAO,CADE,EAQXyP,EAAApQ,OAAAA,WAAuB,IAQvBlE,SAAAA,SAASH,GACP7wJ,KAAK+1E,EAAO86E,MAAQA,CADN,EAShByU,EAAA/G,kBAAAA,WACE,IAAMqE,EAAU5iK,KAAKqtJ,EAAIwV,eACzB,OAAe,MAAXD,EAEK,EAGFA,EAAQE,aAPG,EAcpBwC,EAAAjH,sBAAAA,WACE,IAAMuE,EAAU5iK,KAAKqtJ,EAAIwV,eACzB,OAAe,MAAXD,EAEK,EAGFA,EAAQG,eAPO,EAcxBuC,EAAAtC,SAAAA,WACE,OAAOhjK,KAAKqtJ,EAAI2V,UADP,EAQXsC,EAAArC,eAAAA,WACE,OAAOjjK,KAAKqtJ,EAAI4V,gBADD,EAQjBqC,EAAApC,oBAAAA,WACE,OAAO,CADa,EAQtBoC,EAAAnC,mBAAAA,WACE,OAAOnjK,KAAKqtJ,EAAI8V,oBADG,EAQrBmC,EAAAlC,kBAAAA,WACE,OAAOpjK,KAAKqtJ,EAAI+V,mBADE,IAQpBC,QAAAA,WACE,OAAOrjK,KAAKqtJ,EAAIgW,SADR,EAQViC,EAAAhC,gBAAAA,WACE,OAAOtjK,KAAKqtJ,EAAIiW,iBADA,EAQlBgC,EAAA/B,kBAAAA,WACE,OAAOvjK,KAAKqtJ,EAAIkW,mBADE,EAQpB+B,EAAA9B,YAAAA,WACE,OAAO,IADK,EAQd8B,EAAA7B,cAAAA,WACE,IAAMb,EAAU5iK,KAAKqtJ,EAAIwV,eACzB,OAAe,MAAXD,EAGK,EAGFA,EAAQa,eARD,EAehB6B,EAAA5B,YAAAA,WACE,IAAMd,EAAU5iK,KAAKqtJ,EAAIwV,eACzB,OAAe,MAAXD,EAGK,EAGFA,EAAQc,aARH,EAed4B,EAAAtxI,QAAAA,WAGEh0B,KAAK+1E,EADL/1E,KAAKs/J,EADLt/J,KAAKqtJ,EAAM,IADH,EAnUZ34H,EAAA,yBAAA+rI,IAmUEA,GAAA7rI,U7J08CA,Q6J18CA6rI,GAAA,UAAA7rI,WAfAA,U7Jy9CA,Y6Jz9CA6rI,GAAA,UAAA7rI,YAfA6rI,GAAA7rI,U7Jw+CA,c6Jx+CA6rI,GAAA,UAAA7rI,cARA6rI,GAAA7rI,U7Jg/CA,Y6Jh/CA6rI,GAAA,UAAA7rI,YARA6rI,GAAA7rI,U7Jw/CA,kB6Jx/CA6rI,GAAA,UAAA7rI,kBARA6rI,GAAA7rI,U7JggDA,gB6JhgDA6rI,GAAA,UAAA7rI,gBARA6rI,GAAA7rI,U7JwgDA,Q6JxgDA6rI,GAAA,UAAA7rI,QARA6rI,GAAA7rI,U7JghDA,kB6JhhDA6rI,GAAA,UAAA7rI,kBARA6rI,GAAA7rI,U7JwhDA,mB6JxhDA6rI,GAAA,UAAA7rI,mBARA6rI,GAAA7rI,U7JgiDA,oB6JhiDA6rI,GAAA,UAAA7rI,uBARAA,U7JwiDA,e6JxiDA6rI,GAAA,UAAA7rI,eARA6rI,GAAA7rI,U7JgjDA,S6JhjDA6rI,GAAA,UAAA7rI,SAdA6rI,GAAA7rI,U7J8jDA,sB6J9jDA6rI,GAAA,UAAA7rI,sBAdA6rI,GAAA7rI,U7J4kDA,kB6J5kDA6rI,GAAA,UAAA7rI,kBATA6rI,GAAA7rI,U7JqlDA,S6JrlDA6rI,GAAA,UAAA7rI,SARA6rI,GAAA7rI,U7J6lDA,O6J7lDA6rI,GAAA,UAAA7rI,OARA6rI,GAAA7rI,U7JqmDA,S6JrmDA6rI,GAAA,UAAA7rI,SARA6rI,GAAA7rI,U7J6mDA,Q6J7mDA6rI,GAAA,UAAA7rI,QARA6rI,GAAA7rI,U7JqnDA,U6JrnDA6rI,GAAA,UAAA7rI,UARA6rI,GAAA7rI,U7J6nDA,U6J7nDA6rI,GAAA,UAAA7rI,aATAA,U7JsoDA,K6JtoDA6rI,GAAA,UAAA7rI,KARA6rI,GAAA7rI,U7J8oDA,M6J9oDA6rI,GAAA,UAAA7rI,MARA6rI,GAAA7rI,U7JspDA,K6JtpDA6rI,GAAA,UAAA7rI,KARA6rI,GAAA7rI,U7J8pDA,W6J9pDA6rI,GAAA,UAAA7rI,WAVA6rI,GAAA7rI,U7JwqDA,sB6JxqDA6rI,GAAA,UAAA7rI,sBARA6rI,GAAA7rI,U7JgrDA,Y6JhrDA6rI,GAAA,UAAA7rI,YARA6rI,GAAA7rI,U7JwrDA,S6JxrDA6rI,GAAA,UAAA7rI,SAbA6rI,GAAA7rI,U7JqsDA,iB6JrsDA6rI,GAAA,UAAA7rI,iBARA6rI,GAAA7rI,U7J6sDA,wB6J7sDA6rI,GAAA,UAAA7rI,wBAZA6rI,GAAA7rI,U7JytDA,Y6JztDA6rI,GAAA,UAAA7rI,eARAA,U7JiuDA,2B6JjuDA6rI,GAAA,UAAA7rI,2BARA6rI,GAAA7rI,U7JyuDA,kB6JzuDA6rI,GAAA,UAAA7rI,kBARA6rI,GAAA7rI,U7JivDA,Y6JjvDA6rI,GAAA,UAAA7rI,aC2IAhD,EAAAA,GAAAA,WAAAA,UAAAA,WAAmB,EAuCnB2zI,EAAAthI,KAAAA,WAUEjkC,KAAKs7J,EAAa,GAClBt7J,KAAK66J,EAAmB,KACxB76J,KAAKw/J,EAAoB,EAZpB,EAgBP+F,EAAAvxI,QAAAA,WACEh0B,KAAKikC,OACDjkC,KAAKi4D,GACPj4D,KAAKi4D,EAAcjkC,SAHb,EAoBVuxI,EAAA/0B,oBAAAA,SAAoB3sI,GAOlB,GAAIA,EAAMyD,KAAOzD,EAAMX,KAAM,CAC3B,IAAMwS,EAAW,CAAC,EAClBA,EAAS7R,EAAMyD,KAAOzD,EAAMX,KAC5BlD,KAAK6/J,EAAe2F,gBAAgB9vJ,EAHT,CAPJ,EAiB3B6vJ,EAAA1c,aAAAA,WACE,OAAO7oJ,KAAKw/J,CADC,EC8I8B7xF,EAArC83F,GAAqCp4F,KAyB7CqiF,EAAAA,GAAAA,WAAAA,UAAAA,SAAU9oG,GACR5mD,KAAKshK,EAAU16G,CADC,EASlB8+G,EAAA9zI,UAAAA,SAAUC,GACR7xB,KAAKm4D,EAAUtmC,EACX7xB,KAAKohK,GACPphK,KAAKohK,EAAuBxvI,UAAU5xB,KAAKm4D,GAEzCn4D,KAAKmhK,GACPnhK,KAAKmhK,EAAavvI,UAAU5xB,KAAKm4D,GAE/Bn4D,KAAKihK,GACPjhK,KAAKihK,EAAarvI,UAAU5xB,KAAKm4D,EATnB,EAkBlButG,EAAAC,iBAAAA,SAAiBtW,EAAasH,EAAYC,GAAY,IAAD,OAI/C52J,KAAKohK,GACPphK,KAAKohK,EAAuBptI,UAE9Bh0B,KAAKohK,EAAyB,IAAc2C,GACxC1U,EAAasH,EAAYC,GACzB,SAACtjI,GAAM,OAAKiuI,GAALA,EAA8BjuI,EAA9B,IAGXtzB,KAAKohK,EAAuBxvI,UAAU5xB,KAAKm4D,EAZQ,IAoBrDytG,eAAAA,SAAevW,EAAavnG,EAAOwnG,GAAuB,IAAD,OAOvD,IAAK/6I,EAAA,SAAqBm5I,OAAOC,MAAQD,OAAOC,IAAIqC,UAClD,MAAM,IAAe9zH,G/FrVbiJ,EAqCLk/H,GAs6BewB,K+FhnBhB7lK,KAAKmhK,GACPnhK,KAAKmhK,EAAantI,UAGpBh0B,KAAKmhK,EAAe,IAAc0C,GAC9BxU,EAAavnG,EAAO9nD,KAAKshK,EAAShS,GAClC,SAACh8H,GAAM,OAAKiuI,GAALA,EAA8BjuI,EAA9B,IAGXtzB,KAAKmhK,EAAavvI,UAAU5xB,KAAKm4D,EAvBsB,EA+BzDutG,EAAA1xI,QAAAA,WACMh0B,KAAKohK,IACPphK,KAAKohK,EAAuBptI,UAC5Bh0B,KAAKohK,EAAyB,MAE5BphK,KAAKmhK,IACPnhK,KAAKmhK,EAAantI,UAClBh0B,KAAKmhK,EAAe,MAElBnhK,KAAKkhK,IACPlhK,KAAKkhK,EAAaltI,UAClBh0B,KAAKkhK,EAAe,MAElBlhK,KAAKihK,IACPjhK,KAAKihK,EAAajtI,UAClBh0B,KAAKihK,EAAe,MAEtB5zF,GAAAmB,UAAMx6C,QAAAA,KAAAA,KAjBE,IAyBVsnH,cAAAA,WACMt7I,KAAKohK,GACPphK,KAAKohK,EAAuBn9H,OAE1BjkC,KAAKmhK,GACPnhK,KAAKmhK,EAAal9H,OAEhBjkC,KAAKkhK,GACPlhK,KAAKkhK,EAAaj9H,OAEhBjkC,KAAKihK,GACPjhK,KAAKihK,EAAah9H,OAGpBjkC,KAAKitE,cACD,IAAe9I,GRlWM4xF,eQmWzB/1J,KAAKitE,cAAc,IAAe9I,GRjHQy/F,gCQoH1C5jK,KAAKqxH,EAAS,IAAcgwC,EAnBd,EA2BhBqE,EAAAI,qBAAAA,SAAqBC,GACnB,IAAK/lK,KAAKmhK,EACR,MAAM,IAAejlI,G/FzaV6wC,EA4CRs3F,GA46B0B2B,O+FziB1B7E,IAAAA,EAALA,KAAKA,EPncD,EAAK/Q,GACP,EAAKA,EAAel4G,UAIlB,EAAK63G,GAEP,EAAKA,EAAWqF,kBAElB,EAAK3F,EAAuB/hH,KAAK6rB,MAAQ,IACzC,EAAKw2F,EAAWkW,WOybaF,EARE,IAgBjCG,qCAAAA,SAAqC5W,GACnC,IAAKtvJ,KAAKmhK,EACR,MAAM,IAAejlI,G/FzbV6wC,EA4CRs3F,GA46B0B2B,O+FzhB1B7E,IAAAA,EAALA,KAAKA,EPlcL,EAAK9Q,EOkcwCf,EPjczC,EAAKc,GACP,EAAKA,EAAe+V,2BAChB,EAAK9V,EOub8C,EAgB3DqV,EAAAU,gBAAAA,SAAgB/W,EAAat/B,EAAkBjoE,GAAQ,IAAD,OAChD9nD,KAAKkhK,GACPlhK,KAAKkhK,EAAaltI,UAGpBh0B,KAAKkhK,EAAe,IAAc2D,GAC9BxV,EAAat/B,EAAkBjoE,GAC/B,SAACx0B,GAAM,OAAKiuI,GAALA,EAA8BjuI,EAA9B,GAPyC,EAmBtDoyI,EAAAW,yBAAAA,SAAyBxuJ,EAAKyuJ,EAAWC,GACvC,IAAKvmK,KAAKkhK,EACR,MAAM,IAAehlI,G/F5dV6wC,EA4CRs3F,GAo8B0BmC,O+F9gBnBtF,IAAAA,EAALA,KAAKA,EAAZ,OARuCqF,OAAAA,IAAAA,EAAYA,GAAZA,EH3fnC,EAAK7L,EACP,EAAOh1G,QAAQgL,OAAO,IAAex0B,G5FgC1B6wC,EA4CRs3F,GA87B6BoC,S4FpgClC,EAAK/L,EAAiB,IAAet2F,YAmFjCsiG,EAAoB7uJ,EAAKyuJ,GAG7B,IAAMx7F,EAGAD,EAKE5lD,EAIFq+C,EAEEmJ,EACAvpE,EACAu4J,EAGEz9G,EACA2oH,EAEAptG,EACAogG,EAGAiN,EA7B8B1kI,GAAA,sBAiBrB,OAdb4oC,EAAU,CACdpuE,KzDyqBwBmqK,IyDvqBpBh8F,EAA2BmF,GAC7B,CAACn4D,G/D1EE,CACL0pD,YAAa,EACbE,UAAW,IACXI,cAAe,EACfF,WAAY,GACZgN,QAAS,IACTnC,aAAc,IACdD,kBAAmB,O+DqEbz4D,OAAS,OACbwyJ,IACIrhJ,EAAOkX,KAAKC,UAAUkqI,GAC5Bz7F,EAAQ5lD,KAA8B6hB,GAAO7hB,IAGzCq+C,EAfkC,EAexBwsD,EAAkBjlD,QzDwoB7BuvF,EyDxoB2CvvF,EAASC,GACrD,OACe,IAAMxH,EAAGZ,QAAT,GAjBqB,WAqBtC,GAJM+J,EAAW,IACXvpE,EAA8BwiC,GAAS+mC,EAASvpE,QAChDu4J,EACyCt/H,KAAK1/B,MAAMyG,IAC3C4jK,cAAerL,EAAWsJ,YAavC,MAAUhpI,MAAM,uCAlBhB,OAMMiiB,EAAU,IAASvF,GAAI5gC,GACvB8uJ,EAAsB,IAASluH,GAAIgjH,EAAWsJ,aAvBhB,EAwB/B3J,EAAep9G,EAAQnC,QAAQ8qH,GAAqBz7J,WACnDquD,EAAM7rB,KAAK6rB,MAAQ,IACnBogG,EAAWpgG,EA1BmB,EA0BRohG,EA1BQ,EA2B/BjzD,EAAS,IAAevjC,GLlFRusF,cKmFL9rJ,IAAP4wB,KAAO5wB,IAAI,WAAY+0J,KAC1BiN,EAAsB,IAASnuH,GAAIgjH,EAAWqL,aA7BhB,EA8B/BpM,EAAe7+G,QAChBmC,EAAQnC,QAAQ+qH,GAAqB17J,YA/BL,EAgC/BwvJ,EAAiB,KAhBtB,MAhBoC,CAqCtC,GADOpnI,EAAAA,IApC+B,EAqC5BgoI,EAAW18J,OAInB,OAzCoC,EAsC/B87J,EAAehqG,OAAO,qFAtCS,EAwC/BgqG,EAAiB,KACtB,EAAA52H,SAzCoC,EA8CjC42H,EAAe7+G,QA9CkB,EA8CLy/G,GA9CK,EA+CjCZ,EAAiB,KA/CgB,QAlFnCgM,CAALA,EG2fuC7uJ,EAAKyuJ,GH1f5C,EAAKhL,EAAaiL,GAAa,GAE/B,EAAK5L,EAA0BjtH,KAAK6rB,MAAQ,IAE5C,EAAO,EAAKmhG,GGsfL,CARgD,IAiBzDqM,0BAAAA,SAA0BlvJ,GACxB,IAAK7X,KAAKkhK,EACR,MAAM,IAAehlI,G/F7eV6wC,EA4CRs3F,GAo8B0BmC,O+F7f1BtF,IAAAA,EAALA,KAAKA,EHhgBL,EAAK9F,EGggB4BvjJ,EH/fjC,EAAK6vF,EAAS,IAAevjC,GLcJusF,cKbT9rJ,IAAP4wB,KAAO5wB,IAAI,WAAY,IGsfH,EAgB/B8gK,EAAAsB,eAAAA,SAAe3X,EAAavnG,GAAQ,IAAD,OAOjC,IAAKvzC,EAAA,SAAqBm5I,OAAOC,MAAQD,OAAOC,IAAI+R,IAClD,MAAM,IAAexjI,G/F5fbiJ,EAqCLk/H,GAi7Be4C,O+FpdhBjnK,KAAKihK,GACPjhK,KAAKihK,EAAajtI,UAGpBh0B,KAAKihK,EAAe,IAAciG,GAC9B7X,EAAavnG,EAAO9nD,KAAKshK,GACzB,SAAChuI,GAAM,OAAKiuI,GAALA,EAA8BjuI,EAA9B,IAGXtzB,KAAKihK,EAAarvI,UAAU5xB,KAAKm4D,EAvBA,IAkCnCgvG,wBAAAA,SAAwBpB,EAAYQ,GAClC,GADkCA,OAAA,IAAAA,EAAY,GAAZA,GAC7BvmK,KAAKihK,EACR,MAAM,IAAe/kI,G/F/hBV6wC,EA4CRs3F,GAu7B0B+C,O+F9b1BrB,EAAWsB,kBACdtB,EAAWsB,gBAAkB,CAAC,GAEhC,IAAMC,EAAcvB,EAAWsB,gBAW/B,OATIC,EAAA,KAAsBA,EAAA,MACd5zI,EAAW,wKAMvBqyI,EAAWsB,gBAAX,IAAoC,eACpCtB,EAAWsB,gBAAX,IrE24OmB3a,WqE14OPuU,EAALA,KAAKA,GDvgBHvG,EACP,EAAOh1G,QAAQgL,OAAO,IAAex0B,G9F7C1B6wC,EA4CRs3F,GA87B6BoC,S+FvbKV,aDjgBVrY,OAAOC,IAAI+R,IAAIC,IAAI4H,oBAC9C,EAAKhI,GAAiB,GAGxB,EAAK7E,EAAiB,IAAet2F,GACrC,EAAKy7F,EAAe2H,cC4fmBzB,GD3fvC,EAAKzK,EAAaiL,GAAa,GAE/B,EAAK5L,EAA0BjtH,KAAK6rB,MAAQ,IAE5C,EAAO,EAAKmhG,GCufL,CAtB2C,EA8BpDgL,EAAA+B,iCAAAA,SAAiCJ,GAC/B,IAAKrnK,KAAKihK,EACR,MAAM,IAAe/kI,G/F7jBV6wC,EA4CRs3F,GAu7B0B+C,Q+Fha3BC,EAAA,KAA0BA,EAAA,MAClB3zI,EAAW,wKAKvB2zI,EAAA,IAAyB,eACzBA,EAAA,IrEm3OmB3a,UqEj3OnB1sJ,KAAKihK,EDzgBApB,EAAe6H,uBCygBqBL,EAjBO,IA0BlDM,uBAAAA,WAIE,OAHgB1iF,GACZ,mCACA,qCACGjlF,KAAK6oJ,cAJW,EAazB6c,EAAA7c,aAAAA,WACE,IAAIkY,EAAY,GAOhB,OANI/gK,KAAKihK,IACPF,EAAYA,EAAUhoJ,OAAO/Y,KAAKihK,EAAapY,iBAE7C7oJ,KAAKkhK,IACPH,EAAYA,EAAUhoJ,OAAO/Y,KAAKkhK,EAAarY,iBAE1CkY,CARM,EAiBf2E,EAAApsC,SAAAA,WACcjI,IAAAA,EAALA,KAAKA,EAAZ,MV/qBO,CACLu2C,UAAW,EAAK/a,EAChBgb,gBAAsB5a,GAALA,GACjB6a,QAAS,EAAK75D,EACd85D,iBAAkB,EAAK/a,EACvB+L,QAAS,EAAKhM,EACdib,OAAQ,EAAKlb,EUwqBN,EAQX4Y,EAAAr3B,kBAAAA,SAAkBviC,GACZ9rG,KAAKkhK,GACPlhK,KAAKkhK,EAAa7yB,kBAAkBviC,EAFd,IAU1B8iC,oBAAAA,SAAoB79F,GACd/wC,KAAKihK,GAAsC,uBAAtBlwH,EAAOwwD,aAK9BvhG,KAAKihK,EDpiBFpB,EAAeoI,gBCgiBLl3H,EAAOwwD,YACPxwD,EAAO8oG,UAChB9oG,EAAO8oG,UAAUx1H,WAAjB,YAA6C,KAC/B0sB,EAAOH,UALD,EAc5B80H,EAAA71B,mBAAAA,SAAmBn6H,EAAUy2E,GACvBnsF,KAAKihK,GACPjhK,KAAKihK,ED9iBFpB,EAAeoI,gBC8iBgBvrK,MAAOgZ,EAAAxS,KAAkBipF,EAFvB,EAUxCu5E,EAAAl1B,oBAAAA,SAAoB3sI,GACd7D,KAAKihK,GACPjhK,KAAKihK,EAAazwB,oBAAoB3sI,EAFf,EAU3B6hK,EAAAl3B,0BAAAA,SAA0BmoB,EAAYC,EAAWroB,GAC3CvuI,KAAKm4D,GAAWn4D,KAAKm4D,EAAQy2D,yBAG5B5uH,KAAKohK,GACRphK,KAAK2lK,iBAAoC,KAAMhP,EAAYC,GAEzD52J,KAAKohK,GLpiBL8G,SAAAA,EAAYC,GAEhB,IAAMC,EAF2BlmI,GAAA,sBAET,OADnB01H,GAD4BA,GAET,IAofpByQ,SAAAA,EAAsBF,GAC1B,IAAMG,EAIA34C,EACA44C,EAKFroJ,EACEsoJ,EAIA53H,EAGFC,EAOE43H,EACF3Z,EACAE,EAEI9rJ,EAIJqrJ,EACEma,EAGEC,EAMJ5Z,EACE6Z,EAGEC,EAMJ5Z,EACEwT,EAGEqG,EAMJ5Z,EACE6Z,EAGEC,EAMJ7Z,EACA1qJ,EACAC,EACEgvC,EAEExwC,EAKJksJ,EACE6Z,EAGE/lK,EAMAw1C,EAqBAA,EASEurH,EACA/gK,EACAu4J,EAGAyN,EAEEC,EAOAC,EAQY,IAApB,EAlJuC,OAAAlnI,GAAA,+BAE3C,GADMomI,EAAkB,IACnBH,EACH,OAAO,EAAPrkI,OAAOwkI,GAKT,GAHM34C,EAAWw4C,EAAgB54J,OAAO2T,MAAK,SAACkgH,GAAM,MAAS,eAATA,EAAE97H,GAAF,IAC9CihK,EACFJ,EAAgB54J,OAAO2T,MAAK,SAACkgH,GAAM,MAAS,gBAATA,EAAE97H,GAAF,KAClCqoH,IAAa44C,EAChB,OAAO,EAAPzkI,OAAOwkI,GAoFT,GAlFIpoJ,EAAK,MACHsoJ,EAAoBL,EAAgB54J,OAAO2T,MAAK,SAACkgH,GAAM,MAAS,MAATA,EAAE97H,GAAF,OAE3D4Y,EAA2BsoJ,EAAkBtlK,MAEzC0tC,EAAkB,MAAN1wB,EACdtd,KAAKqB,MAAkC,GAA5BkkK,EAAgBv3H,WAAkB,GAC7Cu3H,EAAgBv3H,WAChBC,EAAUs3H,EAAgBt3H,UAC4BvZ,KAA3B6wI,EAAgBt3H,SACR,iBAA5Bs3H,EAAgBt3H,UACzBA,EAAgB,MAAN3wB,EACNtd,KAAKqB,MAAgC,GAA1BkkK,EAAgBt3H,SAAgB,GAC3Cs3H,EAAgBt3H,SAEhB43H,EAAWN,EAAgB54J,OAAO2T,MAAK,SAACkgH,GAAM,MAAS,cAATA,EAAE97H,GAAF,IAEhD0nJ,EADAF,GAAc,EAEd2Z,GAAYA,EAASvlK,OACjBA,EAA6BulK,EAASvlK,KAC5C4rJ,GAAe5rJ,EAAKqG,SAAS,QAC7BylJ,GAAW9rJ,EAAKqG,SAAS,SAEvBglJ,EAAaO,EAAc,EAAI,MAC7B4Z,EACFP,EAAgB54J,OAAO2T,MAAK,SAACkgH,GAAM,MAAS,uBAATA,EAAE97H,GAAF,OAE/BqhK,EAA8CD,EAAgBxlK,KACpEqrJ,EAAalgH,WAAWs6H,GACpBj3I,MAAM68H,KACRA,EAAaO,EAAc,EAAI,OAG/BC,EAAU,MACR6Z,EACFT,EAAgB54J,OAAO2T,MAAK,SAACkgH,GAAM,MAAS,qBAATA,EAAE97H,GAAF,OAE/BuhK,EAA4CD,EAAc1lK,KAChE6rJ,EAAU1gH,WAAWw6H,GACjBn3I,MAAM68H,KACRQ,EAAU,OAGVE,EAAe,MACbwT,EACF0F,EAAgB54J,OAAO2T,MAAK,SAACkgH,GAAM,MAAS,mBAATA,EAAE97H,GAAF,OAE/BwhK,EAA2CrG,EAAOv/J,KACxD+rJ,EAAe5gH,WAAWy6H,GACtBp3I,MAAMu9H,KACRA,EAAe,OAGfC,EAAe,MACb6Z,EACFZ,EAAgB54J,OAAO2T,MAAK,SAACkgH,GAAM,MAAS,mBAATA,EAAE97H,GAAF,OAE/B0hK,EAA2CD,EAAQ7lK,KACzDgsJ,EAAe7gH,WAAW26H,GACtBt3I,MAAMw9H,KACRA,EAAe,OAKfxqJ,EADAD,EADA0qJ,GAAO,GAGLz7G,EAAMy0H,EAAgB54J,OAAO2T,MAAK,SAACkgH,GAAM,MAAS,OAATA,EAAE97H,GAAF,OAEvCpE,EAA6BwwC,EAAIxwC,KACvCisJ,EAAOjsJ,EAAKqG,SAAS,QACrB9E,EAAMvB,EAAKqG,SAAS,OACpB7E,EAAOxB,EAAKqG,SAAS,SAEnB6lJ,GAAgB,GACd6Z,EACFd,EAAgB54J,OAAO2T,MAAK,SAACkgH,GAAM,MAAS,uBAATA,EAAE97H,GAAF,MAE/BpE,EAA6B+lK,EAAiB/lK,KACpDksJ,EAAgBlsJ,EAAKqG,SAAS,WACpBk5J,GA1F+B,EA0FhBzL,EAAYlrD,MACrCsjD,GAAiB3qJ,IAAQC,GAEvBirH,EAAU,CAEZ,KADMj3E,EAA4Bi3E,EAASzsH,MAEzC,OAAO,EAAP4gC,OAAOwkI,GAETA,EAAgBnqK,KAAK,CACnB+hB,GAAAA,EACA0wB,UAAAA,EACAC,QAAAA,EACA6H,IAAAA,EACAo2G,YAAAA,EACAP,WAAAA,EACAQ,QAAAA,EACAC,QAAAA,EACAC,aAAAA,EACAC,aAAAA,EACAC,KAAAA,EACA1qJ,IAAAA,EACAC,KAAAA,EACA0qJ,cAAAA,IAnBU,aAqBP,IAAImZ,EAAJ,cAEL,OADM7vH,EAA4B6vH,EAAUrlK,OAIxC,OAKmB,IAAWi3J,GA5HOA,EA4HQzhH,EAH/B,CACdh8C,KvDhBmB2sK,KuDkBA,IAPd,EAAPvlI,OAAOwkI,GArHgC,WA4HjCrE,EAAe,IACf/gK,EAA8BwiC,GAASu+H,GACvCxI,EAEFt/H,KAAK1/B,MAAMyG,IACTgmK,EAAczN,EAAW,oBAEvB0N,EAAuBD,EAAY,gCACLlhI,SAClCumH,EAAalgH,WAAW86H,GACpBz3I,MAAMy3I,KACR5a,EAAaO,EAAc,EAAI,QAG7Bsa,EAAqBF,EAAY,gCACLlhI,SAChC+mH,EAAU1gH,WAAW+6H,GACjB13I,MAAM03I,KACRra,EAAU,QAII,EAAA3/H,EAAAqsI,EAAA,oBAApB,8BACM,KACF6M,EAAgBnqK,KAAK,CACnB+hB,GAAAA,EACA0wB,UAAAA,EACAC,QAAAA,EACA6H,IAAK4wH,EAAA,IACLxa,YAAAA,EACAP,WAAAA,EACAQ,QAAAA,EACAC,QAAAA,EACAC,aAAAA,EACAC,aAAAA,EACAC,KAAAA,EACA1qJ,IAAAA,EACAC,KAAAA,EACA0qJ,cAAAA,IA3CJ,aAvHqC,OAsKhC97H,EAAAA,GAtKgC,OA0K3C,OAAO,EAAPwQ,OAAOwkI,GA1KoC,IApfRD,CAFFA,EAEwBF,GAAjC,IAAlBC,EAAkB,KACJxpK,OACb85J,GAJ0BA,EAIT0P,GAEZ10I,EAAW,+BAAgCy0I,GANtB,QKqiBHD,CAA5BloK,KAAKohK,EAAmC7yB,GARmB,IAgB/DM,2BAAAA,SAA2B8nB,EAAYC,EAAW7lH,GAChD,KAAI/wC,KAAKm4D,GAAWn4D,KAAKm4D,EAAQ02D,yBAGP,2CAAtB99E,EAAOwwD,eAGNvhG,KAAKohK,GACRphK,KAAK2lK,iBAAoC,KAAMhP,EAAYC,GAEzD52J,KAAKohK,GAAT,CACOA,EAALA,KAAKA,ELxiBP,IAAoC93H,IAAAA,GAAAA,EAAAla,EKwiBI2hB,ELxiBd8oG,UAAUvwG,WAAAA,QAApC,kBAA8C,CAA9C,cACE,GAAoB,kBAAhBkB,EAAKpB,UACDsP,EAAMlO,EAAKnmB,WAAL,IACNpH,EAAOutB,EAAKnmB,WAAL,KACTq0B,GAAK,CACP,IAAA6wH,EAAoB7wH,EACpB8wH,EAAqBvsJ,EACrB,KAHO,CAJiC,CAWzCssJ,GAICE,EAAkC,WAAtBD,EACZE,EAAiC,UAAtBF,GACZC,GAAcC,IAsBdhR,GAALA,EAAsB,CAhBDnqB,CACnBruH,GAAI,KACJ0wB,UK+gBsCG,EL/gBpBH,UAClBC,QK8gBsCE,EL9gBtBF,QAChB6H,IAAK6wH,EACLza,aAAa,EACbP,WAAY,KACZQ,QAAS,KACTC,SAAS,EACTC,aAAcya,EAAW,EAAI,KAC7Bxa,aAAc,KACdC,MAAM,EACN1qJ,KAAK,EACLC,MAAM,EACN0qJ,cAAeqa,IAAcC,MAzBnBh2I,EAAW,4BK4hBiBqd,EADxC,CAVwD,EAmB1D20H,EAAAiE,sBAAAA,SAAsBp7B,GACpB,IAAKvuI,KAAKohK,EACR,MAAM,IAAellI,G/F5sBV6wC,EA4CRs3F,GA08BoCuF,O+FrSblR,GAA5B14J,KAAKohK,EAAwC,CAAC7yB,GAPZ,EAcpCm3B,EAAA1B,qBAAAA,SAAqBnsJ,GACnB,IAAK7X,KAAKohK,EACR,MAAM,IAAellI,G/F1tBV6wC,EA4CRs3F,GA08BoCuF,O+FvRzC,OAAO5pK,KAAKohK,EAAuB4C,qBAAqBnsJ,EAPhC,EA5c5B6c,EAAA,sBAAA+wI,IA4cEA,GAAA7wI,U/Jg7BA,qB+Jh7BA6wI,GAAA,UAAA7wI,qBAdA6wI,GAAA7wI,U/J87BA,sB+J97BA6wI,GAAA,UAAA7wI,sBAnBA6wI,GAAA7wI,U/Ji9BA,2B+Jj9BA6wI,GAAA,UAAA7wI,8BAhBAA,U/Ji+BA,0B+Jj+BA6wI,GAAA,UAAA7wI,0BAVA6wI,GAAA7wI,U/J2+BA,oB+J3+BA6wI,GAAA,UAAA7wI,oBAVA6wI,GAAA7wI,U/Jq/BA,mB+Jr/BA6wI,GAAA,UAAA7wI,mBAdA6wI,GAAA7wI,U/JmgCA,oB+JngCA6wI,GAAA,UAAA7wI,oBAVA6wI,GAAA7wI,U/J6gCA,kB+J7gCA6wI,GAAA,UAAA7wI,kBARA6wI,GAAA7wI,U/JqhCA,S+JrhCA6wI,GAAA,UAAA7wI,SAjBA6wI,GAAA7wI,U/JsiCA,a+JtiCA6wI,GAAA,UAAA7wI,aAbA6wI,GAAA7wI,U/JmjCA,uB+JnjCA6wI,GAAA,UAAA7wI,0BA1BAA,U/J6kCA,iC+J7kCA6wI,GAAA,UAAA7wI,iCA9BA6wI,GAAA7wI,U/J2mCA,wB+J3mCA6wI,GAAA,UAAA7wI,wBAlCA6wI,GAAA7wI,U/J6oCA,e+J7oCA6wI,GAAA,UAAA7wI,eAhBA6wI,GAAA7wI,U/J6pCA,0B+J7pCA6wI,GAAA,UAAA7wI,0BAjBA6wI,GAAA7wI,U/J8qCA,yB+J9qCA6wI,GAAA,UAAA7wI,yBAnBA6wI,GAAA7wI,U/JisCA,gB+JjsCA6wI,GAAA,UAAA7wI,gBAhBA6wI,GAAA7wI,U/JitCA,qC+JjtCA6wI,GAAA,UAAA7wI,wCAhBAA,U/JiuCA,qB+JjuCA6wI,GAAA,UAAA7wI,qBA3BA6wI,GAAA7wI,U/J4vCA,c+J5vCA6wI,GAAA,UAAA7wI,cAzBA6wI,GAAA7wI,U/JqxCA,Q+JrxCA6wI,GAAA,UAAA7wI,QA/BA6wI,GAAA7wI,U/JozCA,e+JpzCA6wI,GAAA,UAAA7wI,eApBA6wI,GAAA7wI,U/Jw0CA,iB+Jx0CA6wI,GAAA,UAAA7wI,iBAlBA6wI,GAAA7wI,U/J01CA,U+J11CA6wI,GAAA,UAAA7wI,UATA6wI,GAAA7wI,U/Jm2CA,U+Jn2CA6wI,GAAA,UAAA7wI,UAoeF6wI,G/J+3BE,W+J/3B+BoE,aAWjCpE,G/Jo3BE,W+Jp3B+BqE,aAYjCrE,G/Jw2BE,kB+Jx2BsCsE,oBAYxCtE,G/J41BE,Y+J51BgCuE,cAYlCvE,G/Jg1BE,kB+Jh1BsCwE,uB/Jg1BtC,Y+Jp0BgCC,cAclCzE,G/JszBE,W+JtzB+B0E,aAYjC1E,G/J0yBE,W+J1yB+B2E,aAYjC3E,G/J8xBE,kB+J9xBsC4E,oBAYxC5E,G/JkxBE,S+JlxB6B6E,WAY/B7E,G/JswBE,U+JtwB8B8E,YAYhC9E,G/J0vBE,W+J1vB+B+E,aAajC/E,G/J6uBE,sB+J7uB0CgF,wBAa5ChF,G/JguBE,kB+JhuBsCiF,wBAaxCjF,G/JmtBE,sB+JntB0CkF,wBAa5ClF,G/JssBE,0B+JtsB8CmF,4BAYhDnF,G/J0rBE,W+J1rB+BoF,aAYjCpF,G/J8qBE,Y+J9qBgCqF,cAYlCrF,G/JkqBE,a+JlqBiCsF,eAYnCtF,G/JspBE,c+JtpBkCuF,mB/JspBlC,oB+J1oBwCC,sBAY1CxF,G/J8nBE,U+J9nB8ByF,YAYhCzF,G/JknBE,U+JlnB8B0F,YAYhC1F,G/JsmBE,kB+JtmBsC2F,oBAYxC3F,G/J0lBE,kB+J1lBsC4F,oBAYxC5F,G/J8kBE,Y+J9kBgC6F,cAalC7F,G/JikBE,qB+JjkByC8F,uBAW3C9F,G/JsjBE,S+JtjB6B+F,WAY/B/F,G/J0iBE,e+J1iBmCgG,iBAarChG,G/J6hBE,e+J7hBmCiG,iBAarCjG,G/JghBE,2B+JhhB+CkG,6BAajDlG,G/JmgBE,4B+JngBgDmG,8BAalDnG,G/JsfE,4B+JtfgDoG,iCAOjBnnF,WAAM,WAAc+gF,EAAd,ECzjCvC,IAAAqG,GAAmC,gGAkBnCC,GAAuC,s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AK,QACHgsB,EAAEiyC,iBAAkBjyC,EAAEmyC,kBAAmBrmD,EAAEkuV,QAC3C,MACF,IAAK,aAEHphG,GADW1gK,EAAI,GAAK0gK,EAAEttQ,QACjB80Q,QACL,MAEF,IAAK,YAEHxH,GADW1gK,EAAI,EAAI0gK,EAAEttQ,QAAUstQ,EAAEttQ,QAC5B80Q,QAIX,CACA,UAAIo3F,GACF,IAAIx3U,EACJ,OAA2B,OAAnBA,EAAItzB,KAAK6qW,YAAiB,EAASv3U,EAAEw3U,MAC/C,GAEFuB,GAAGn4T,OAAS,CACV,GACAm2T,GACAC,GACA,CAAC;;OAIH8B,GAAG,CACD,GAAE,cACDC,GAAGxvW,UAAW,QAAS,GAC1BuvW,GAAG,CACD,EAAE,CAAEthS,QAAS,GAAG8oM,WAAW,KAC1By4F,GAAGxvW,UAAW,cAAe,GAChCwvW,GAAKD,GAAG,CACN,GAAE,qBACDC,IACH,MA0HGkB,GAAK,CACN,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,SACCC,GAAK,CACNC,GAAI,QACJC,GAAI,QACJC,GAAI,QACJC,GAAI,QACJC,GAAI,QACJC,GAAI,QACJC,GAAI,QACJh5F,GAAI,QACJvtQ,GAAI,QACJwmW,GAAI,QACJC,GAAI,QACJC,GAAI,QACJjD,GAAI,QACJkD,GAAI,QACJC,GAAI,QACJC,GAAI,QACJC,GAAI,QACJC,GAAI,QACJC,GAAI,QACJC,GAAI,QACJzqE,GAAI,QACJ0qE,GAAI,QACJC,GAAI,QACJC,GAAI,QACJC,GAAI,QACJn7J,GAAI,QACJo7J,GAAI,QACJxE,GAAI,QACJyE,GAAI,QACJC,GAAI,QACJC,GAAI,QACJC,GAAI,QACJC,GAAI,QACJC,GAAI,QACJC,GAAI,SAEN,SAASC,GAAGh8U,GACV,IACE,OAAO,IAAIi8U,KAAKC,aAAa,CAACl8U,GAAI,CAChC52B,KAAM,WACNilS,SAAU,SACT8tE,GAAGn8U,EACR,CAAE,MACA,MACF,CACF,CACA,MAAMo8U,GAAMp8U,IACV,MAAMlU,EAAoB,IAAIoW,IAAO02O,EAAI54O,EAAE6qB,KAAKqtD,IAC9C,MAAO1tG,EAAG+L,GAAK2hG,EAAEj5F,MAAM,KACvB,IAAIxU,EAAIuxW,GAAGxxW,GAAIqF,EAAI,KACnB,GAAKpF,EAEA,GAAI8L,EAAG,CACV,MAAMyiD,EAAIgjT,GAAG9jQ,GACbl/C,GAAKA,IAAMvuD,IAAMoF,EAAImpD,EACvB,KAAO,CACL,MAAMA,EAAIkhT,GAAG1vW,EAAEgZ,eACf,GAAIw1C,EAAG,CACL,MAAMqjT,EAAIL,GAAGhjT,GACbqjT,GAAKA,IAAM5xW,IAAMoF,EAAIwsW,EACvB,CACF,MAVE5xW,EAAIytG,EAWN,IAAIq2K,EAAIziQ,EAAE1P,IAAI3R,GACd8jR,IAAMA,EAAI,GAAIziQ,EAAExa,IAAI7G,EAAG8jR,IACvB,MAAMl4Q,EAAI,CACRie,KAAM4jF,EACNokQ,aAAczsW,EACd0sW,aAAc9xW,GAEhB,OAAO8jR,EAAE1jR,KAAKwL,GAAIA,CAAC,IAErB,IAAK,MAAO6hG,EAAG1tG,KAAMshB,EACnB,GAAIthB,EAAEc,OAAS,GAAK,IAAI4zB,IAAI10B,EAAEqgD,KAAKt0C,GAAMA,EAAE+lW,gBAAezuW,KAAO,EAC/D,IAAK,MAAM0I,KAAK/L,EACd+L,EAAEgmW,aAAehmW,EAAE+lW,cAAgBpkQ,EACzC,OAAOhgG,OAAOskW,YAAY5jG,EAAE/tN,KAAKqtD,GAAM,CAACA,EAAE5jF,KAAM4jF,EAAEqkQ,gBAAe,EAChEE,GAAMz8U,IACP,GAAIA,EACF,OAAOA,EAAIA,EAAExc,cAAey2V,GAAGhkW,SAAS+pB,GAAKA,EAAIk6U,GAAGl6U,EAAE/gB,MAAM,KAAK,GAAG,EACrEy9V,GAAqB,IAAIx9U,IAAI,CAC9B,iBACA,cACA,aACA,WACA,UACA,SACA,QACA,MACA,OACEy9U,GAAKtrW,MAAM24B,KAAK0yU,IAAI7xT,KAAK7qB,GAAM,MAAMA,EAAEzc,QAAQ,MAAO,iBAAgBvY,KAAK,KAKzE4xW,GAAqB,IAAI16U,IAAOi5U,GAAK,CACzC,QAAS,CAAE/oF,UAAW,cACtB,QAAS,CAAEA,UAAW,cACtB,QAAS,CAAEA,UAAW,cACtB,QAAS,CAAEA,UAAW,cACtB,QAAS,CAAEA,UAAW,cACtB,QAAS,CAAEA,UAAW,eAOxB,MAAQyqF,UAAWC,GAAI1gN,UAAW2gN,KpTn0C7Bx+U,GoTm0CuC,CAC1C00P,aA1UM,QA2UN+pF,cA3UoB,CACpB,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,SA+NA7pF,WAPF,SAAYnzP,GACV,IAAIlU,EAAI8wV,GAAGxgW,IAAI4jB,GACf,OAAOlU,IAAcA,EAARqvV,GAAGn7U,GAASoyB,QAAQ7J,QAAQ4yT,GAAGn7U,IAHrC,CAACA,GAhVsoG,EAACA,EAAGlU,KAClpG,MAAMosF,EAAIl4E,EAAElU,GACZ,OAAOosF,EAAgB,mBAALA,EAAkBA,IAAM9lD,QAAQ7J,QAAQ2vD,GAAK,IAAI9lD,SAAQ,CAAC5nD,EAAG+L,MACnD,mBAAlB0mW,eAA+BA,eAAiBjsU,YACtDz6B,EAAElC,KACA,KACA,IAAIo0B,MACF,oCAAsC3c,GAyUo/O,IAzU/+OA,EAAE7M,MAAM,KAAK3T,OAAe,kEAAoE,MAGhJ,GACD,EAqUY4xW,CAAmBhlW,OAAOsN,OAAO,CAAE,gCAAiC,IAAM,2BAA+B,gCAAiC,IAAM,+BAA+B,gCAAiC,IAAM,+BAA+B,gCAAiC,IAAM,+BAA+B,gCAAiC,IAAM,+BAA+B,gCAAiC,IAAM,+BAA+B,gCAAiC,IAAM,+BAA+B,gCAAiC,IAAM,+BAA+B,gCAAiC,IAAM,+BAA+B,gCAAiC,IAAM,+BAA+B,gCAAiC,IAAM,+BAA+B,gCAAiC,IAAM,6BAA+B,gCAAiC,IAAM,+BAA+B,gCAAiC,IAAM,+BAA+B,gCAAiC,IAAM,+BAA+B,gCAAiC,IAAM,+BAA+B,gCAAiC,IAAM,+BAA+B,gCAAiC,IAAM,uCAA+B,gCAAiC,IAAM,+BAA+B,gCAAiC,IAAM,+BAA+B,gCAAiC,IAAM,+BAA+B,gCAAiC,IAAM,+BAA+B,gCAAiC,IAAM,+BAA+B,gCAAiC,IAAM,6BAA+B,gCAAiC,IAAM,+BAA+B,gCAAiC,IAAM,6BAA+B,gCAAiC,IAAM,+BAA+B,gCAAiC,IAAM,+BAA+B,gCAAiC,IAAM,+BAA+B,gCAAiC,IAAM,uCAA+B,gCAAiC,IAAM,uCAA+B,gCAAiC,IAAM,+BAA+B,gCAAiC,IAAM,+BAA+B,gCAAiC,IAAM,+BAA+B,gCAAiC,IAAM,+BAA+B,gCAAiC,IAAM,+BAA+B,gCAAiC,IAAM,+BAA+B,gCAAiC,IAAM,6BAA+B,gCAAiC,IAAM,uCAA+B,gCAAiC,IAAM,+BAA+B,gCAAiC,IAAM,+BAA+B,gCAAiC,IAAM,+BAA+B,gCAAiC,IAAM,+BAA+B,gCAAiC,IAAM,+BAA+B,gCAAiC,IAAM,+BAA+B,gCAAiC,IAAM,6BAA+B,gCAAiC,IAAM,+BAA+B,gCAAiC,IAAM,+BAA+B,gCAAiC,IAAM,+BAA+B,gCAAiC,IAAM,+BAA+B,gCAAiC,IAAM,+BAA+B,gCAAiC,IAAM,uCAA+B,gCAAiC,IAAM,+BAA+B,gCAAiC,IAAM,+BAA+B,gCAAiC,IAAM,+BAA+B,gCAAiC,IAAM,+BAA+B,gCAAiC,IAAM,+BAA+B,gCAAiC,IAAM,+BAA+B,gCAAiC,IAAM,+BAA+B,gCAAiC,IAAM,+BAA+B,gCAAiC,IAAM,+BAA+B,gCAAiC,IAAM,+BAA+B,gCAAiC,IAAM,+BAA+B,gCAAiC,IAAM,+BAA+B,gCAAiC,IAAM,+BAA+B,gCAAiC,IAAM,+BAA+B,gCAAiC,IAAM,+BAA+B,gCAAiC,IAAM,6BAA+B,gCAAiC,IAAM,+BAA+B,gCAAiC,IAAM,+BAA+B,gCAAiC,IAAM,+BAA+B,gCAAiC,IAAM,+BAA+B,gCAAiC,IAAM,+BAA+B,gCAAiC,IAAM,6BAA+B,gCAAiC,IAAM,+BAA+B,gCAAiC,IAAM,6BAA+B,gCAAiC,IAAM,+BAA+B,gCAAiC,IAAM,+BAA+B,gCAAiC,IAAM,uCAA+B,gCAAiC,IAAM,+BAA+B,gCAAiC,IAAM,+BAA+B,gCAAiC,IAAM,+BAA+B,gCAAiC,IAAM,+BAA+B,gCAAiC,IAAM,+BAA+B,gCAAiC,IAAM,+BAA+B,gCAAiC,IAAM,+BAA+B,gCAAiC,IAAM,+BAA+B,gCAAiC,IAAM,+BAA+B,gCAAiC,IAAM,+BAA+B,gCAAiC,IAAM,+BAA+B,gCAAiC,IAAM,+BAA+B,gCAAiC,IAAM,+BAA+B,gCAAiC,IAAM,+BAA+B,gCAAiC,IAAM,+BAA+B,gCAAiC,IAAM,+BAA+B,gCAAiC,IAAM,+BAA+B,gCAAiC,IAAM,+BAA+B,gCAAiC,IAAM,+BAA+B,gCAAiC,IAAM,6BAA+B,gCAAiC,IAAM,+BAA+B,gCAAiC,IAAM,+BAA+B,gCAAiC,IAAM,+BAA+B,gCAAiC,IAAM,+BAA+B,gCAAiC,IAAM,+BAA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","sources":["/webpack/runtime/load script","/../node_modules/codem-isoboxer/dist/iso_boxer.js","/../node_modules/core-js/features/url-search-params/index.js","/../node_modules/core-js/features/url/index.js","/../node_modules/core-js/internals/a-callable.js","/../node_modules/core-js/internals/a-possible-prototype.js","/../node_modules/core-js/internals/add-to-unscopables.js","/../node_modules/core-js/internals/an-instance.js","/../node_modules/core-js/internals/an-object.js","/../node_modules/core-js/internals/array-from.js","/../node_modules/core-js/internals/array-includes.js","/../node_modules/core-js/internals/array-slice-simple.js","/../node_modules/core-js/internals/array-sort.js","/../node_modules/core-js/internals/call-with-safe-iteration-closing.js","/../node_modules/core-js/internals/classof-raw.js","/../node_modules/core-js/internals/classof.js","/../node_modules/core-js/internals/copy-constructor-properties.js","/../node_modules/core-js/internals/correct-prototype-getter.js","/../node_modules/core-js/internals/create-iterator-constructor.js","/../node_modules/core-js/internals/create-non-enumerable-property.js","/../node_modules/core-js/internals/create-property-descriptor.js","/../node_modules/core-js/internals/create-property.js","/../node_modules/core-js/internals/define-iterator.js","/../node_modules/core-js/internals/descriptors.js","/../node_modules/core-js/internals/document-create-element.js","/../node_modules/core-js/internals/dom-iterables.js","/../node_modules/core-js/internals/dom-token-list-prototype.js","/../node_modules/core-js/internals/engine-user-agent.js","/../node_modules/core-js/internals/engine-v8-version.js","/../node_modules/core-js/internals/enum-bug-keys.js","/../node_modules/core-js/internals/export.js","/../node_modules/core-js/internals/fails.js","/../node_modules/core-js/internals/function-bind-context.js","/../node_modules/core-js/internals/function-call.js","/../node_modules/core-js/internals/function-name.js","/../node_modules/core-js/internals/function-uncurry-this.js","/../node_modules/core-js/internals/get-built-in.js","/../node_modules/core-js/internals/get-iterator-method.js","/../node_modules/core-js/internals/get-iterator.js","/../node_modules/core-js/internals/get-method.js","/../node_modules/core-js/internals/global.js","/../node_modules/core-js/internals/has-own-property.js","/../node_modules/core-js/internals/hidden-keys.js","/../node_modules/core-js/internals/html.js","/../node_modules/core-js/internals/ie8-dom-define.js","/../node_modules/core-js/internals/indexed-object.js","/../node_modules/core-js/internals/inspect-source.js","/../node_modules/core-js/internals/internal-state.js","/../node_modules/core-js/internals/is-array-iterator-method.js","/../node_modules/core-js/internals/is-callable.js","/../node_modules/core-js/internals/is-constructor.js","/../node_modules/core-js/internals/is-forced.js","/../node_modules/core-js/internals/is-object.js","/../node_modules/core-js/internals/is-pure.js","/../node_modules/core-js/internals/is-symbol.js","/../node_modules/core-js/internals/iterator-close.js","/../node_modules/core-js/internals/iterators-core.js","/../node_modules/core-js/internals/iterators.js","/../node_modules/core-js/internals/length-of-array-like.js","/../node_modules/core-js/internals/native-symbol.js","/../node_modules/core-js/internals/native-url.js","/../node_modules/core-js/internals/native-weak-map.js","/../node_modules/core-js/internals/object-assign.js","/../node_modules/core-js/internals/object-create.js","/../node_modules/core-js/internals/object-define-properties.js","/../node_modules/core-js/internals/object-define-property.js","/../node_modules/core-js/internals/object-get-own-property-descriptor.js","/../node_modules/core-js/internals/object-get-own-property-names.js","/../node_modules/core-js/internals/object-get-own-property-symbols.js","/../node_modules/core-js/internals/object-get-prototype-of.js","/../node_modules/core-js/internals/object-is-prototype-of.js","/../node_modules/core-js/internals/object-keys-internal.js","/../node_modules/core-js/internals/object-keys.js","/../node_modules/core-js/internals/object-property-is-enumerable.js","/../node_modules/core-js/internals/object-set-prototype-of.js","/../node_modules/core-js/internals/ordinary-to-primitive.js","/../node_modules/core-js/internals/own-keys.js","/../node_modules/core-js/internals/path.js","/../node_modules/core-js/internals/redefine-all.js","/../node_modules/core-js/internals/redefine.js","/../node_modules/core-js/internals/require-object-coercible.js","/../node_modules/core-js/internals/set-global.js","/../node_modules/core-js/internals/set-to-string-tag.js","/../node_modules/core-js/internals/shared-key.js","/../node_modules/core-js/internals/shared-store.js","/../node_modules/core-js/internals/shared.js","/../node_modules/core-js/internals/string-multibyte.js","/../node_modules/core-js/internals/string-punycode-to-ascii.js","/../node_modules/core-js/internals/to-absolute-index.js","/../node_modules/core-js/internals/to-indexed-object.js","/../node_modules/core-js/internals/to-integer-or-infinity.js","/../node_modules/core-js/internals/to-length.js","/../node_modules/core-js/internals/to-object.js","/../node_modules/core-js/internals/to-primitive.js","/../node_modules/core-js/internals/to-property-key.js","/../node_modules/core-js/internals/to-string-tag-support.js","/../node_modules/core-js/internals/to-string.js","/../node_modules/core-js/internals/try-to-string.js","/../node_modules/core-js/internals/uid.js","/../node_modules/core-js/internals/use-symbol-as-uid.js","/../node_modules/core-js/internals/well-known-symbol.js","/../node_modules/core-js/modules/es.array.iterator.js","/../node_modules/core-js/modules/es.string.iterator.js","/../node_modules/core-js/modules/web.dom-collections.iterator.js","/../node_modules/core-js/modules/web.url-search-params.js","/../node_modules/core-js/modules/web.url.js","/../node_modules/core-js/modules/web.url.to-json.js","/../node_modules/core-js/stable/url-search-params/index.js","/../node_modules/core-js/stable/url/index.js","/../node_modules/core-js/web/url-search-params.js","/../node_modules/core-js/web/url.js","/../node_modules/eme-encryption-scheme-polyfill/index.js","/../node_modules/google-closure-library/closure/goog/base.js","/src/com/google/javascript/jscomp/js/es6/util/arrayiterator.js","/src/com/google/javascript/jscomp/js/util/defineproperty.js","/src/com/google/javascript/jscomp/js/util/global.js","/src/com/google/javascript/jscomp/js/util/polyfill.js","/src/com/google/javascript/jscomp/js/es6/symbol.js","/src/com/google/javascript/jscomp/js/es6/util/makeiterator.js","/src/com/google/javascript/jscomp/js/es6/util/arrayfromiterable.js","/src/com/google/javascript/jscomp/js/es6/util/arrayfromiterator.js","/src/com/google/javascript/jscomp/js/util/objectcreate.js","/src/com/google/javascript/jscomp/js/es6/util/setprototypeof.js","/src/com/google/javascript/jscomp/js/es6/util/inherits.js","/src/com/google/javascript/jscomp/js/es6/generator_engine.js","/src/com/google/javascript/jscomp/js/es6/execute_async_generator.js","/src/com/google/javascript/jscomp/js/es6/util/restarguments.js","/src/com/google/javascript/jscomp/js/util/owns.js","/src/com/google/javascript/jscomp/js/es6/util/iteratorfromarray.js","/src/com/google/javascript/jscomp/js/util/findinternal.js","/src/com/google/javascript/jscomp/js/util/checkstringargs.js","/src/com/google/javascript/jscomp/js/es6/promise/promise.js","/src/com/google/javascript/jscomp/js/es6/weakmap.js","/src/com/google/javascript/jscomp/js/es6/map.js","/src/com/google/javascript/jscomp/js/es6/set.js","/src/com/google/javascript/jscomp/js/es6/array/keys.js","/src/com/google/javascript/jscomp/js/es6/array/findindex.js","/src/com/google/javascript/jscomp/js/es6/array/from.js","/src/com/google/javascript/jscomp/js/es6/array/values.js","/src/com/google/javascript/jscomp/js/es6/object/is.js","/src/com/google/javascript/jscomp/js/es6/array/includes.js","/src/com/google/javascript/jscomp/js/es6/string/includes.js","/src/com/google/javascript/jscomp/js/es6/string/fromcodepoint.js","/src/com/google/javascript/jscomp/js/es6/weakset.js","/src/com/google/javascript/jscomp/js/es6/array/find.js","/src/com/google/javascript/jscomp/js/es6/string/startswith.js","/src/com/google/javascript/jscomp/js/es6/object/entries.js","/src/com/google/javascript/jscomp/js/es6/util/assign.js","/src/com/google/javascript/jscomp/js/es6/object/assign.js","/src/com/google/javascript/jscomp/js/es6/promise/finally.js","/src/com/google/javascript/jscomp/js/es6/array/entries.js","/src/com/google/javascript/jscomp/js/es6/number/isnan.js","/src/com/google/javascript/jscomp/js/es6/string/repeat.js","/src/com/google/javascript/jscomp/js/es6/number/isfinite.js","/src/com/google/javascript/jscomp/js/es6/object/values.js","/src/com/google/javascript/jscomp/js/es6/math/log2.js","/src/com/google/javascript/jscomp/js/es6/number/constants.js","/src/com/google/javascript/jscomp/js/es6/string/endswith.js","/src/com/google/javascript/jscomp/js/es6/math/trunc.js","/../node_modules/shaka-player/lib/debug/asserts.js","/../node_modules/shaka-player/lib/abr/ewma.js","/../node_modules/shaka-player/lib/abr/ewma_bandwidth_estimator.js","/../node_modules/shaka-player/lib/debug/log.js","/../node_modules/shaka-player/lib/util/multi_map.js","/../node_modules/shaka-player/lib/util/event_manager.js","/../node_modules/shaka-player/lib/media/media_source_capabilities.js","/../node_modules/shaka-player/lib/deprecate/version.js","/../node_modules/shaka-player/lib/deprecate/deprecate.js","/../node_modules/shaka-player/lib/text/text_engine.js","/../node_modules/shaka-player/lib/deprecate/enforcer.js","/../node_modules/shaka-player/lib/cea/dummy_caption_decoder.js","/../node_modules/shaka-player/lib/cea/dummy_cea_parser.js","/../node_modules/shaka-player/lib/util/buffer_utils.js","/../node_modules/shaka-player/lib/media/closed_caption_parser.js","/../node_modules/shaka-player/lib/text/cue_region.js","/../node_modules/shaka-player/lib/util/array_utils.js","/../node_modules/shaka-player/lib/util/error.js","/../node_modules/shaka-player/lib/util/lazy.js","/../node_modules/shaka-player/lib/util/drm_utils.js","/../node_modules/shaka-player/lib/util/delayed_tick.js","/../node_modules/shaka-player/lib/util/timer.js","/../node_modules/shaka-player/lib/util/platform.js","/../node_modules/shaka-player/lib/util/string_utils.js","/../node_modules/shaka-player/lib/util/text_parser.js","/../node_modules/shaka-player/lib/util/object_utils.js","/../node_modules/shaka-player/lib/util/tXml.js","/../node_modules/shaka-player/lib/text/cue.js","/../node_modules/shaka-player/lib/transmuxer/transmuxer_engine.js","/../node_modules/shaka-player/third_party/closure-uri/utils.js","/../node_modules/shaka-player/third_party/closure-uri/uri.js","/../node_modules/shaka-player/lib/util/uint8array_utils.js","/../node_modules/shaka-player/lib/util/manifest_parser_utils.js","/../node_modules/shaka-player/lib/util/mime_utils.js","/../node_modules/shaka-player/lib/util/functional.js","/../node_modules/shaka-player/lib/util/language_utils.js","/../node_modules/shaka-player/lib/util/stream_utils.js","/../node_modules/shaka-player/lib/media/drm_engine.js","/../node_modules/shaka-player/lib/media/segment_reference.js","/../node_modules/shaka-player/lib/abr/simple_abr_manager.js","/../node_modules/shaka-player/lib/media/adaptation_set.js","/../node_modules/shaka-player/lib/media/adaptation_set_criteria.js","/../node_modules/shaka-player/lib/media/buffering_observer.js","/../node_modules/shaka-player/lib/player.js","/../node_modules/shaka-player/lib/config/auto_show_text.js","/../node_modules/shaka-player/lib/config/codec_switching_strategy.js","/../node_modules/shaka-player/lib/net/backoff.js","/../node_modules/shaka-player/lib/util/public_promise.js","/../node_modules/shaka-player/lib/util/abortable_operation.js","/../node_modules/shaka-player/lib/util/fake_event.js","/../node_modules/shaka-player/lib/util/fake_event_target.js","/../node_modules/shaka-player/lib/util/operation_manager.js","/../node_modules/shaka-player/lib/net/networking_engine.js","/../node_modules/shaka-player/lib/util/destroyer.js","/../node_modules/shaka-player/lib/util/iterables.js","/../node_modules/shaka-player/lib/util/map_utils.js","/../node_modules/shaka-player/lib/util/data_view_reader.js","/../node_modules/shaka-player/lib/util/mp4_parser.js","/../node_modules/shaka-player/lib/util/pssh.js","/../node_modules/shaka-player/lib/media/manifest_filterer.js","/../node_modules/shaka-player/lib/media/manifest_parser.js","/../node_modules/shaka-player/lib/media/content_workarounds.js","/../node_modules/shaka-player/lib/media/time_ranges_utils.js","/../node_modules/shaka-player/lib/util/dom_utils.js","/../node_modules/shaka-player/lib/util/id3_utils.js","/../node_modules/shaka-player/lib/util/mp4_box_parsers.js","/../node_modules/shaka-player/lib/util/exp_golomb.js","/../node_modules/shaka-player/lib/util/ts_parser.js","/../node_modules/shaka-player/lib/lcevc/lcevc_dec.js","/../node_modules/shaka-player/lib/media/media_source_engine.js","/../node_modules/shaka-player/lib/media/segment_index.js","/../node_modules/shaka-player/lib/media/presentation_timeline.js","/../node_modules/shaka-player/lib/media/stall_detector.js","/../node_modules/shaka-player/lib/media/gap_jumping_controller.js","/../node_modules/shaka-player/lib/util/media_ready_state_utils.js","/../node_modules/shaka-player/lib/media/video_wrapper.js","/../node_modules/shaka-player/lib/media/playhead.js","/../node_modules/shaka-player/lib/media/play_rate_controller.js","/../node_modules/shaka-player/lib/media/playhead_observer.js","/../node_modules/shaka-player/lib/util/state_history.js","/../node_modules/shaka-player/lib/util/switch_history.js","/../node_modules/shaka-player/lib/util/stats.js","/../node_modules/shaka-player/lib/media/segment_prefetch.js","/../node_modules/shaka-player/lib/media/region_timeline.js","/../node_modules/shaka-player/lib/media/quality_observer.js","/../node_modules/shaka-player/lib/media/segment_utils.js","/../node_modules/shaka-player/lib/util/networking.js","/../node_modules/shaka-player/lib/media/streaming_engine.js","/../node_modules/shaka-player/lib/util/config_utils.js","/../node_modules/shaka-player/lib/util/fairplay_utils.js","/../node_modules/shaka-player/lib/util/player_configuration.js","/../node_modules/shaka-player/lib/media/preload_manager.js","/../node_modules/shaka-player/lib/media/region_observer.js","/../node_modules/shaka-player/lib/net/networking_utils.js","/../node_modules/shaka-player/lib/text/text_utils.js","/../node_modules/shaka-player/lib/text/simple_text_displayer.js","/../node_modules/shaka-player/lib/text/stub_text_displayer.js","/../node_modules/shaka-player/lib/text/ui_text_displayer.js","/../node_modules/shaka-player/lib/util/cmcd_manager.js","/../node_modules/shaka-player/lib/text/web_vtt_generator.js","/../node_modules/shaka-player/lib/util/cmsd_manager.js","/../node_modules/shaka-player/lib/util/mutex.js","/../node_modules/shaka-player/lib/ads/ads_stats.js","/../node_modules/shaka-player/lib/ads/client_side_ad.js","/../node_modules/shaka-player/lib/ads/ad_utils.js","/../node_modules/shaka-player/lib/ads/client_side_ad_manager.js","/../node_modules/shaka-player/lib/ads/interstitial_ad.js","/../node_modules/shaka-player/lib/ads/interstitial_ad_manager.js","/../node_modules/shaka-player/lib/ads/media_tailor_ad.js","/../node_modules/shaka-player/lib/ads/media_tailor_ad_manager.js","/../node_modules/shaka-player/lib/ads/server_side_ad.js","/../node_modules/shaka-player/lib/ads/server_side_ad_manager.js","/../node_modules/shaka-player/lib/ads/ad_manager.js","/../node_modules/shaka-player/lib/cast/cast_utils.js","/../node_modules/shaka-player/lib/cast/cast_sender.js","/../node_modules/shaka-player/lib/cast/cast_proxy.js","/../node_modules/shaka-player/lib/cast/cast_receiver.js","/../node_modules/shaka-player/lib/cea/cea_utils.js","/../node_modules/shaka-player/lib/cea/cea608_memory.js","/../node_modules/shaka-player/lib/cea/cea608_data_channel.js","/../node_modules/shaka-player/lib/cea/cea708_window.js","/../node_modules/shaka-player/lib/cea/dtvcc_packet_builder.js","/../node_modules/shaka-player/lib/cea/cea708_service.js","/../node_modules/shaka-player/lib/cea/cea_decoder.js","/../node_modules/shaka-player/lib/cea/sei_processor.js","/../node_modules/shaka-player/lib/cea/mp4_cea_parser.js","/../node_modules/shaka-player/lib/cea/ts_cea_parser.js","/../node_modules/shaka-player/lib/dash/content_protection.js","/../node_modules/shaka-player/lib/dash/mpd_utils.js","/../node_modules/shaka-player/lib/util/ebml_parser.js","/../node_modules/shaka-player/lib/media/webm_segment_index_parser.js","/../node_modules/shaka-player/lib/dash/segment_base.js","/../node_modules/shaka-player/lib/media/mp4_segment_index_parser.js","/../node_modules/shaka-player/lib/dash/segment_list.js","/../node_modules/shaka-player/lib/dash/segment_template.js","/../node_modules/shaka-player/lib/util/content_steering_manager.js","/../node_modules/shaka-player/lib/util/periods.js","/../node_modules/shaka-player/lib/util/xml_utils.js","/../node_modules/shaka-player/lib/dash/dash_parser.js","/../node_modules/shaka-player/lib/dependencies/all.js","/../node_modules/shaka-player/lib/hls/hls_classes.js","/../node_modules/shaka-player/lib/hls/hls_utils.js","/../node_modules/shaka-player/lib/hls/manifest_text_parser.js","/../node_modules/shaka-player/lib/net/data_uri_plugin.js","/../node_modules/shaka-player/lib/hls/hls_parser.js","/../node_modules/shaka-player/lib/mss/content_protection.js","/../node_modules/shaka-player/lib/util/mp4_generator.js","/../node_modules/shaka-player/lib/mss/mss_parser.js","/../node_modules/shaka-player/lib/net/http_plugin_utils.js","/../node_modules/shaka-player/lib/net/http_fetch_plugin.js","/../node_modules/shaka-player/lib/net/http_xhr_plugin.js","/../node_modules/shaka-player/lib/offline/download_info.js","/../node_modules/shaka-player/lib/offline/download_progress_estimator.js","/../node_modules/shaka-player/lib/offline/download_manager.js","/../node_modules/shaka-player/lib/offline/indexeddb/db_operation.js","/../node_modules/shaka-player/lib/offline/indexeddb/db_connection.js","/../node_modules/shaka-player/lib/offline/indexeddb/base_storage_cell.js","/../node_modules/shaka-player/lib/offline/indexeddb/eme_session_storage_cell.js","/../node_modules/shaka-player/lib/offline/storage_muxer.js","/../node_modules/shaka-player/lib/offline/indexeddb/storage_mechanism.js","/../node_modules/shaka-player/lib/offline/indexeddb/v1_storage_cell.js","/../node_modules/shaka-player/lib/offline/indexeddb/v2_storage_cell.js","/../node_modules/shaka-player/lib/offline/indexeddb/v5_storage_cell.js","/../node_modules/shaka-player/lib/offline/offline_uri.js","/../node_modules/shaka-player/lib/offline/manifest_converter.js","/../node_modules/shaka-player/lib/offline/offline_manifest_parser.js","/../node_modules/shaka-player/lib/offline/offline_scheme.js","/../node_modules/shaka-player/lib/offline/session_deleter.js","/../node_modules/shaka-player/lib/offline/stored_content_utils.js","/../node_modules/shaka-player/lib/offline/stream_bandwidth_estimator.js","/../node_modules/shaka-player/lib/offline/storage.js","/../node_modules/shaka-player/lib/polyfill/all.js","/../node_modules/shaka-player/lib/polyfill/aria.js","/../node_modules/shaka-player/lib/polyfill/encryption_scheme.js","/../node_modules/shaka-player/lib/polyfill/fullscreen.js","/../node_modules/shaka-player/lib/polyfill/media_capabilities.js","/../node_modules/shaka-player/lib/polyfill/patchedmediakeys_apple.js","/../node_modules/shaka-player/lib/polyfill/mediasource.js","/../node_modules/shaka-player/lib/polyfill/orientation.js","/../node_modules/shaka-player/lib/polyfill/patchedmediakeys_cert.js","/../node_modules/shaka-player/lib/polyfill/patchedmediakeys_nop.js","/../node_modules/shaka-player/lib/polyfill/patchedmediakeys_webkit.js","/../node_modules/shaka-player/lib/polyfill/pip_webkit.js","/../node_modules/shaka-player/lib/polyfill/random_uuid.js","/../node_modules/shaka-player/lib/polyfill/symbol.js","/../node_modules/shaka-player/lib/polyfill/video_play_promise.js","/../node_modules/shaka-player/lib/polyfill/videoplaybackquality.js","/../node_modules/shaka-player/lib/polyfill/vttcue.js","/../node_modules/shaka-player/lib/text/lrc_text_parser.js","/../node_modules/shaka-player/lib/text/ttml_text_parser.js","/../node_modules/shaka-player/lib/text/mp4_ttml_parser.js","/../node_modules/shaka-player/lib/text/vtt_text_parser.js","/../node_modules/shaka-player/lib/text/mp4_vtt_parser.js","/../node_modules/shaka-player/lib/text/sbv_text_parser.js","/../node_modules/shaka-player/lib/text/srt_text_parser.js","/../node_modules/shaka-player/lib/text/ssa_text_parser.js","/../node_modules/shaka-player/lib/transmuxer/adts.js","/../node_modules/shaka-player/lib/transmuxer/aac_transmuxer.js","/../node_modules/shaka-player/lib/transmuxer/ac3.js","/../node_modules/shaka-player/lib/transmuxer/ac3_transmuxer.js","/../node_modules/shaka-player/lib/transmuxer/ec3.js","/../node_modules/shaka-player/lib/transmuxer/ec3_transmuxer.js","/../node_modules/shaka-player/lib/transmuxer/h264.js","/../node_modules/shaka-player/lib/transmuxer/mpeg_audio.js","/../node_modules/shaka-player/lib/transmuxer/mp3_transmuxer.js","/../node_modules/shaka-player/lib/transmuxer/mpeg_ts_transmuxer.js","/../node_modules/shaka-player/lib/transmuxer/mss_transmuxer.js","/../node_modules/shaka-player/lib/transmuxer/ts_transmuxer.js","/../node_modules/shaka-player/lib/transmuxer/h265.js","/../node_modules/shaka-player/lib/transmuxer/opus.js","/../node_modules/universal-media-player/dist/locales/en-gb.mjs","/../node_modules/universal-media-player/dist/locales/es-es.mjs","/../node_modules/universal-media-player/dist/locales/es-mx.mjs","/../node_modules/universal-media-player/dist/locales/fr-fr.mjs","/../node_modules/universal-media-player/dist/locales/it-it.mjs","/../node_modules/universal-media-player/dist/locales/pt-br.mjs","/webpack/bootstrap","/webpack/runtime/define property getters","/webpack/runtime/ensure chunk","/webpack/runtime/get javascript chunk filename","/webpack/runtime/global","/webpack/runtime/hasOwnProperty shorthand","/webpack/runtime/make namespace object","/webpack/runtime/publicPath","/webpack/runtime/jsonp chunk loading","/./Common/Constants.ts","/./Common/Configurations.ts","/./Common/CookieHelpers.ts","/./Common/EventHelpers.ts","/./Common/ExpandoHelpers.ts","/./Common/FunctionScheduler.ts","/./Common/MetaTagHelpers.ts","/./Common/QueryStringHelpers.ts","/./Common/ResourceManager.ts","/./Common/StorageHelpers.ts","/./VideoCarouselModal/VideoCarouselModal.ts","/../node_modules/@lit/context/src/lib/context-request-event.ts","/../node_modules/@lit/context/src/lib/controllers/context-consumer.ts","/../node_modules/@lit/context/src/lib/decorators/consume.ts","/../node_modules/@lit/context/src/lib/value-notifier.ts","/../node_modules/@lit/context/src/lib/controllers/context-provider.ts","/../node_modules/@lit/reactive-element/src/css-tag.ts","/../node_modules/@lit/reactive-element/src/reactive-element.ts","/../node_modules/lit-html/src/lit-html.ts","/../node_modules/lit-element/src/lit-element.ts","/../node_modules/@lit/reactive-element/src/decorators/custom-element.ts","/../node_modules/@lit/reactive-element/src/decorators/property.ts","/../node_modules/@lit/reactive-element/src/decorators/state.ts","/../node_modules/@lit/reactive-element/src/decorators/base.ts","/../node_modules/@lit/reactive-element/src/decorators/query.ts","/../node_modules/@lit/localize/src/internal/str-tag.ts","/../node_modules/@lit/localize/src/internal/default-msg.ts","/../node_modules/@lit/localize/src/init/install.ts","/../node_modules/@lit/localize/src/internal/locale-status-event.ts","/../node_modules/@lit/localize/src/internal/localized-controller.ts","/../node_modules/@lit/localize/src/internal/localized-decorator.ts","/../node_modules/@lit/localize/src/internal/deferred.ts","/../node_modules/@lit/localize/src/internal/fnv1a64.ts","/../node_modules/@lit/localize/src/internal/runtime-msg.ts","/../node_modules/@lit/localize/src/internal/id-generation.ts","/../node_modules/@lit/localize/src/init/runtime.ts","/../node_modules/lit-html/src/directive.ts","/../node_modules/lit-html/src/directives/class-map.ts","/../node_modules/lit-html/src/directives/unsafe-html.ts","/../node_modules/lit-html/src/directives/unsafe-svg.ts","/../node_modules/@nevware21/ts-utils/build/es5/mod/internal/treeshake_helpers.js","/../node_modules/@nevware21/ts-utils/build/es5/mod/internal/constants.js","/../node_modules/@nevware21/ts-utils/build/es5/mod/helpers/base.js","/../node_modules/@nevware21/ts-utils/build/es5/mod/helpers/safe.js","/../node_modules/@nevware21/ts-utils/build/es5/mod/helpers/safe_get.js","/../node_modules/@nevware21/ts-utils/build/es5/mod/object/get_own_prop_desc.js","/../node_modules/@nevware21/ts-utils/build/es5/mod/object/has_own_prop.js","/../node_modules/@nevware21/ts-utils/build/es5/mod/object/has_own.js","/../node_modules/@nevware21/ts-utils/build/es5/mod/object/for_each_key.js","/../node_modules/@nevware21/ts-utils/build/es5/mod/object/define.js","/../node_modules/@nevware21/ts-utils/build/es5/mod/internal/map.js","/../node_modules/@nevware21/ts-utils/build/es5/mod/string/as_string.js","/../node_modules/@nevware21/ts-utils/build/es5/mod/helpers/diagnostics.js","/../node_modules/@nevware21/ts-utils/build/es5/mod/helpers/throw.js","/../node_modules/@nevware21/ts-utils/build/es5/mod/object/object.js","/../node_modules/@nevware21/ts-utils/build/es5/mod/helpers/enum.js","/../node_modules/@nevware21/ts-utils/build/es5/mod/symbol/well_known.js","/../node_modules/@nevware21/ts-utils/build/es5/mod/internal/global.js","/../node_modules/@nevware21/ts-utils/build/es5/mod/internal/unwrapFunction.js","/../node_modules/@nevware21/ts-utils/build/es5/mod/math/min_max.js","/../node_modules/@nevware21/ts-utils/build/es5/mod/string/slice.js","/../node_modules/@nevware21/ts-utils/build/es5/mod/string/substring.js","/../node_modules/@nevware21/ts-utils/build/es5/mod/polyfills/symbol.js","/../node_modules/@nevware21/ts-utils/build/es5/mod/helpers/lazy.js","/../node_modules/@nevware21/ts-utils/build/es5/mod/helpers/cache.js","/../node_modules/@nevware21/ts-utils/build/es5/mod/helpers/environment.js","/../node_modules/@nevware21/ts-utils/build/es5/mod/symbol/symbol.js","/../node_modules/@nevware21/ts-utils/build/es5/mod/iterator/forOf.js","/../node_modules/@nevware21/ts-utils/build/es5/mod/iterator/iterator.js","/../node_modules/@nevware21/ts-utils/build/es5/mod/funcs/funcs.js","/../node_modules/@nevware21/ts-utils/build/es5/mod/array/append.js","/../node_modules/@nevware21/ts-utils/build/es5/mod/array/forEach.js","/../node_modules/@nevware21/ts-utils/build/es5/mod/array/indexOf.js","/../node_modules/@nevware21/ts-utils/build/es5/mod/array/map.js","/../node_modules/@nevware21/ts-utils/build/es5/mod/array/slice.js","/../node_modules/@nevware21/ts-utils/build/es5/mod/array/find.js","/../node_modules/@nevware21/ts-utils/build/es5/mod/object/set_proto.js","/../node_modules/@nevware21/ts-utils/build/es5/mod/helpers/customError.js","/../node_modules/@nevware21/ts-utils/build/es5/mod/array/reduce.js","/../node_modules/@nevware21/ts-utils/build/es5/mod/object/create.js","/../node_modules/@nevware21/ts-utils/build/es5/mod/helpers/date.js","/../node_modules/@nevware21/ts-utils/build/es5/mod/polyfills/trim.js","/../node_modules/@nevware21/ts-utils/build/es5/mod/object/is_plain_object.js","/../node_modules/@nevware21/ts-utils/build/es5/mod/string/trim.js","/../node_modules/@nevware21/ts-utils/build/es5/mod/object/copy.js","/../node_modules/@nevware21/ts-utils/build/es5/mod/helpers/extend.js","/../node_modules/@nevware21/ts-utils/build/es5/mod/helpers/length.js","/../node_modules/@nevware21/ts-utils/build/es5/mod/helpers/perf.js","/../node_modules/@nevware21/ts-utils/build/es5/mod/string/split.js","/../node_modules/@nevware21/ts-utils/build/es5/mod/helpers/get_set_value.js","/../node_modules/@nevware21/ts-utils/build/es5/mod/string/ends_with.js","/../node_modules/@nevware21/ts-utils/build/es5/mod/string/index_of.js","/../node_modules/@nevware21/ts-utils/build/es5/mod/timer/handler.js","/../node_modules/@nevware21/ts-utils/build/es5/mod/timer/timeout.js","/../node_modules/@microsoft/dynamicproto-js/src/DynamicProto.ts","/../node_modules/@microsoft/applicationinsights-shims/src/Constants.ts","/../node_modules/@microsoft/applicationinsights-shims/src/TsLibShims.ts","/../node_modules/@microsoft/applicationinsights-web/node_modules/@microsoft/applicationinsights-core-js/dist-es5/__DynamicConstants.js","/../node_modules/@microsoft/applicationinsights-web/node_modules/@microsoft/applicationinsights-core-js/dist-es5/JavaScriptSDK/InternalConstants.js","/../node_modules/@microsoft/applicationinsights-web/node_modules/@microsoft/applicationinsights-core-js/dist-es5/JavaScriptSDK/HelperFuncs.js","/../node_modules/@microsoft/applicationinsights-web/node_modules/@microsoft/applicationinsights-core-js/dist-es5/JavaScriptSDK/EnvUtils.js","/../node_modules/@microsoft/applicationinsights-web/node_modules/@microsoft/applicationinsights-core-js/dist-es5/JavaScriptSDK/RandomHelper.js","/../node_modules/@microsoft/applicationinsights-web/node_modules/@microsoft/applicationinsights-core-js/dist-es5/JavaScriptSDK/DataCacheHelper.js","/../node_modules/@microsoft/applicationinsights-web/node_modules/@microsoft/applicationinsights-core-js/dist-es5/Config/ConfigDefaults.js","/../node_modules/@microsoft/applicationinsights-web/node_modules/@microsoft/applicationinsights-core-js/dist-es5/Config/DynamicSupport.js","/../node_modules/@microsoft/applicationinsights-web/node_modules/@microsoft/applicationinsights-core-js/dist-es5/Config/DynamicProperty.js","/../node_modules/@microsoft/applicationinsights-web/node_modules/@microsoft/applicationinsights-core-js/dist-es5/JavaScriptSDK/AggregationError.js","/../node_modules/@microsoft/applicationinsights-web/node_modules/@microsoft/applicationinsights-core-js/dist-es5/Config/DynamicState.js","/../node_modules/@microsoft/applicationinsights-web/node_modules/@microsoft/applicationinsights-core-js/dist-es5/Config/DynamicConfig.js","/../node_modules/@microsoft/applicationinsights-web/node_modules/@microsoft/applicationinsights-core-js/dist-es5/JavaScriptSDK/DbgExtensionUtils.js","/../node_modules/@microsoft/applicationinsights-web/node_modules/@microsoft/applicationinsights-core-js/dist-es5/JavaScriptSDK/DiagnosticLogger.js","/../node_modules/@microsoft/applicationinsights-web/node_modules/@microsoft/applicationinsights-core-js/dist-es5/JavaScriptSDK.Enums/EnumHelperFuncs.js","/../node_modules/@microsoft/applicationinsights-web/node_modules/@microsoft/applicationinsights-common/dist-es5/Enums.js","/../node_modules/@microsoft/applicationinsights-web/node_modules/@microsoft/applicationinsights-common/dist-es5/__DynamicConstants.js","/../node_modules/@microsoft/applicationinsights-web/node_modules/@microsoft/applicationinsights-common/dist-es5/StorageHelperFuncs.js","/../node_modules/@microsoft/applicationinsights-web/node_modules/@microsoft/applicationinsights-common/dist-es5/applicationinsights-common.js","/../node_modules/@microsoft/applicationinsights-web/node_modules/@microsoft/applicationinsights-common/dist-es5/Constants.js","/../node_modules/@microsoft/applicationinsights-web/node_modules/@microsoft/applicationinsights-common/dist-es5/Telemetry/Common/DataSanitizer.js","/../node_modules/@microsoft/applicationinsights-web/node_modules/@microsoft/applicationinsights-common/dist-es5/TelemetryItemCreator.js","/../node_modules/@microsoft/applicationinsights-web/node_modules/@microsoft/applicationinsights-common/dist-es5/Telemetry/Event.js","/../node_modules/@microsoft/applicationinsights-web/node_modules/@microsoft/applicationinsights-common/dist-es5/Telemetry/Trace.js","/../node_modules/@microsoft/applicationinsights-web/node_modules/@microsoft/applicationinsights-common/dist-es5/Telemetry/Common/DataPoint.js","/../node_modules/@microsoft/applicationinsights-web/node_modules/@microsoft/applicationinsights-common/dist-es5/Telemetry/Metric.js","/../node_modules/@microsoft/applicationinsights-web/node_modules/@microsoft/applicationinsights-common/dist-es5/HelperFuncs.js","/../node_modules/@microsoft/applicationinsights-web/node_modules/@microsoft/applicationinsights-common/dist-es5/Telemetry/PageView.js","/../node_modules/@microsoft/applicationinsights-web/node_modules/@microsoft/applicationinsights-common/dist-es5/Telemetry/PageViewPerformance.js","/../node_modules/@microsoft/applicationinsights-web/node_modules/@microsoft/applicationinsights-common/dist-es5/Telemetry/Exception.js","/../node_modules/@microsoft/applicationinsights-web/node_modules/@microsoft/applicationinsights-core-js/dist-es5/JavaScriptSDK/W3cTraceParent.js","/../node_modules/@microsoft/applicationinsights-web/node_modules/@microsoft/applicationinsights-common/dist-es5/UrlHelperFuncs.js","/../node_modules/@microsoft/applicationinsights-web/node_modules/@microsoft/applicationinsights-common/dist-es5/Util.js","/../node_modules/@microsoft/applicationinsights-web/node_modules/@microsoft/applicationinsights-common/dist-es5/Telemetry/RemoteDependencyData.js","/../node_modules/@microsoft/applicationinsights-web/node_modules/@microsoft/applicationinsights-core-js/dist-es5/JavaScriptSDK/CookieMgr.js","/../node_modules/@microsoft/applicationinsights-web/node_modules/@microsoft/applicationinsights-common/dist-es5/DomHelperFuncs.js","/../node_modules/@microsoft/applicationinsights-web/node_modules/@microsoft/applicationinsights-core-js/dist-es5/Config/ConfigDefaultHelpers.js","/../node_modules/@microsoft/applicationinsights-web/node_modules/@microsoft/applicationinsights-core-js/dist-es5/JavaScriptSDK/EventHelpers.js","/../node_modules/@microsoft/applicationinsights-web/node_modules/@microsoft/applicationinsights-core-js/dist-es5/JavaScriptSDK/PerfManager.js","/../node_modules/@microsoft/applicationinsights-web/node_modules/@microsoft/applicationinsights-core-js/dist-es5/JavaScriptSDK/TelemetryHelpers.js","/../node_modules/@microsoft/applicationinsights-web/node_modules/@microsoft/applicationinsights-core-js/dist-es5/JavaScriptSDK/ProcessTelemetryContext.js","/../node_modules/@microsoft/applicationinsights-web/node_modules/@microsoft/applicationinsights-core-js/dist-es5/JavaScriptSDK/BaseTelemetryPlugin.js","/../node_modules/@microsoft/applicationinsights-web/node_modules/@microsoft/applicationinsights-core-js/dist-es5/JavaScriptSDK/InstrumentHooks.js","/../node_modules/@microsoft/applicationinsights-web/node_modules/@microsoft/applicationinsights-core-js/dist-es5/JavaScriptSDK/UnloadHandlerContainer.js","/../node_modules/@microsoft/applicationinsights-web/node_modules/@microsoft/applicationinsights-core-js/dist-es5/JavaScriptSDK/UnloadHookContainer.js","/../node_modules/@microsoft/applicationinsights-web/node_modules/@microsoft/applicationinsights-analytics-js/dist-es5/__DynamicConstants.js","/../node_modules/@microsoft/applicationinsights-web/node_modules/@microsoft/applicationinsights-analytics-js/dist-es5/JavaScriptSDK/Telemetry/PageViewManager.js","/../node_modules/@microsoft/applicationinsights-web/node_modules/@microsoft/applicationinsights-analytics-js/dist-es5/JavaScriptSDK/Telemetry/PageViewPerformanceManager.js","/../node_modules/@microsoft/applicationinsights-web/node_modules/@microsoft/applicationinsights-analytics-js/dist-es5/JavaScriptSDK/AnalyticsPlugin.js","/../node_modules/@microsoft/applicationinsights-web/node_modules/@microsoft/applicationinsights-analytics-js/dist-es5/JavaScriptSDK/Telemetry/PageVisitTimeManager.js","/../node_modules/@microsoft/applicationinsights-web/node_modules/@microsoft/applicationinsights-analytics-js/dist-es5/JavaScriptSDK/Timing.js","/../node_modules/@microsoft/applicationinsights-web/node_modules/@microsoft/applicationinsights-core-js/dist-es5/JavaScriptSDK/CoreUtils.js","/../node_modules/@microsoft/applicationinsights-cfgsync-js/node_modules/@microsoft/applicationinsights-core-js/dist-es5/__DynamicConstants.js","/../node_modules/@microsoft/applicationinsights-cfgsync-js/node_modules/@microsoft/applicationinsights-core-js/dist-es5/JavaScriptSDK/HelperFuncs.js","/../node_modules/@microsoft/applicationinsights-cfgsync-js/node_modules/@microsoft/applicationinsights-core-js/dist-es5/JavaScriptSDK/InternalConstants.js","/../node_modules/@microsoft/applicationinsights-cfgsync-js/node_modules/@microsoft/applicationinsights-core-js/dist-es5/JavaScriptSDK/EnvUtils.js","/../node_modules/@microsoft/applicationinsights-cfgsync-js/node_modules/@microsoft/applicationinsights-core-js/dist-es5/JavaScriptSDK/RandomHelper.js","/../node_modules/@microsoft/applicationinsights-cfgsync-js/node_modules/@microsoft/applicationinsights-core-js/dist-es5/JavaScriptSDK/DataCacheHelper.js","/../node_modules/@microsoft/applicationinsights-cfgsync-js/node_modules/@microsoft/applicationinsights-core-js/dist-es5/JavaScriptSDK/EventHelpers.js","/../node_modules/@microsoft/applicationinsights-cfgsync-js/node_modules/@microsoft/applicationinsights-core-js/dist-es5/Config/ConfigDefaults.js","/../node_modules/@microsoft/applicationinsights-cfgsync-js/node_modules/@microsoft/applicationinsights-core-js/dist-es5/Config/DynamicSupport.js","/../node_modules/@microsoft/applicationinsights-cfgsync-js/node_modules/@microsoft/applicationinsights-core-js/dist-es5/Config/DynamicProperty.js","/../node_modules/@microsoft/applicationinsights-cfgsync-js/node_modules/@microsoft/applicationinsights-core-js/dist-es5/JavaScriptSDK/AggregationError.js","/../node_modules/@microsoft/applicationinsights-cfgsync-js/node_modules/@microsoft/applicationinsights-core-js/dist-es5/Config/DynamicState.js","/../node_modules/@microsoft/applicationinsights-cfgsync-js/node_modules/@microsoft/applicationinsights-core-js/dist-es5/Config/DynamicConfig.js","/../node_modules/@microsoft/applicationinsights-cfgsync-js/node_modules/@microsoft/applicationinsights-core-js/dist-es5/JavaScriptSDK/DbgExtensionUtils.js","/../node_modules/@microsoft/applicationinsights-cfgsync-js/node_modules/@microsoft/applicationinsights-core-js/dist-es5/JavaScriptSDK/DiagnosticLogger.js","/../node_modules/@microsoft/applicationinsights-cfgsync-js/node_modules/@microsoft/applicationinsights-core-js/dist-es5/JavaScriptSDK/PerfManager.js","/../node_modules/@microsoft/applicationinsights-cfgsync-js/node_modules/@microsoft/applicationinsights-core-js/dist-es5/JavaScriptSDK/TelemetryHelpers.js","/../node_modules/@microsoft/applicationinsights-cfgsync-js/node_modules/@microsoft/applicationinsights-core-js/dist-es5/JavaScriptSDK/ProcessTelemetryContext.js","/../node_modules/@microsoft/applicationinsights-cfgsync-js/node_modules/@microsoft/applicationinsights-core-js/dist-es5/JavaScriptSDK/BaseTelemetryPlugin.js","/../node_modules/@microsoft/applicationinsights-cfgsync-js/node_modules/@microsoft/applicationinsights-core-js/dist-es5/JavaScriptSDK/UnloadHookContainer.js","/../node_modules/@microsoft/applicationinsights-cfgsync-js/node_modules/@microsoft/applicationinsights-core-js/dist-es5/JavaScriptSDK/UnloadHandlerContainer.js","/../node_modules/@nevware21/ts-async/build/es5/mod/internal/constants.js","/../node_modules/@nevware21/ts-async/build/es5/mod/promise/await.js","/../node_modules/@nevware21/ts-async/build/es5/mod/promise/debug.js","/../node_modules/@nevware21/ts-async/build/es5/mod/promise/event.js","/../node_modules/@nevware21/ts-async/build/es5/mod/internal/state.js","/../node_modules/@nevware21/ts-async/build/es5/mod/promise/base.js","/../node_modules/@nevware21/ts-async/build/es5/mod/promise/nativePromise.js","/../node_modules/@nevware21/ts-async/build/es5/mod/promise/syncPromise.js","/../node_modules/@nevware21/ts-async/build/es5/mod/promise/promise.js","/../node_modules/@nevware21/ts-async/build/es5/mod/promise/itemProcessor.js","/../node_modules/@nevware21/ts-async/build/es5/mod/promise/asyncPromise.js","/../node_modules/@nevware21/ts-async/build/es5/mod/polyfills/promise.js","/../node_modules/@microsoft/applicationinsights-cfgsync-js/dist-es5/__DynamicConstants.js","/../node_modules/@microsoft/applicationinsights-cfgsync-js/dist-es5/CfgSyncHelperFuncs.js","/../node_modules/@microsoft/applicationinsights-cfgsync-js/dist-es5/CfgSyncPlugin.js","/../node_modules/@microsoft/applicationinsights-channel-js/node_modules/@microsoft/applicationinsights-common/dist-es5/Constants.js","/../node_modules/@microsoft/applicationinsights-channel-js/node_modules/@microsoft/applicationinsights-common/dist-es5/__DynamicConstants.js","/../node_modules/@microsoft/applicationinsights-channel-js/node_modules/@microsoft/applicationinsights-core-js/dist-es5/__DynamicConstants.js","/../node_modules/@microsoft/applicationinsights-channel-js/node_modules/@microsoft/applicationinsights-core-js/dist-es5/JavaScriptSDK/InternalConstants.js","/../node_modules/@microsoft/applicationinsights-channel-js/node_modules/@microsoft/applicationinsights-core-js/dist-es5/JavaScriptSDK/HelperFuncs.js","/../node_modules/@microsoft/applicationinsights-channel-js/node_modules/@microsoft/applicationinsights-core-js/dist-es5/JavaScriptSDK/EnvUtils.js","/../node_modules/@microsoft/applicationinsights-channel-js/node_modules/@microsoft/applicationinsights-core-js/dist-es5/JavaScriptSDK/RandomHelper.js","/../node_modules/@microsoft/applicationinsights-channel-js/node_modules/@microsoft/applicationinsights-core-js/dist-es5/JavaScriptSDK/DataCacheHelper.js","/../node_modules/@microsoft/applicationinsights-channel-js/node_modules/@microsoft/applicationinsights-core-js/dist-es5/Config/ConfigDefaults.js","/../node_modules/@microsoft/applicationinsights-channel-js/node_modules/@microsoft/applicationinsights-core-js/dist-es5/Config/DynamicSupport.js","/../node_modules/@microsoft/applicationinsights-channel-js/node_modules/@microsoft/applicationinsights-core-js/dist-es5/Config/DynamicProperty.js","/../node_modules/@microsoft/applicationinsights-channel-js/node_modules/@microsoft/applicationinsights-core-js/dist-es5/JavaScriptSDK/AggregationError.js","/../node_modules/@microsoft/applicationinsights-channel-js/node_modules/@microsoft/applicationinsights-core-js/dist-es5/Config/DynamicState.js","/../node_modules/@microsoft/applicationinsights-channel-js/node_modules/@microsoft/applicationinsights-core-js/dist-es5/Config/DynamicConfig.js","/../node_modules/@microsoft/applicationinsights-channel-js/node_modules/@microsoft/applicationinsights-core-js/dist-es5/JavaScriptSDK/DbgExtensionUtils.js","/../node_modules/@microsoft/applicationinsights-channel-js/node_modules/@microsoft/applicationinsights-core-js/dist-es5/JavaScriptSDK/DiagnosticLogger.js","/../node_modules/@microsoft/applicationinsights-channel-js/node_modules/@microsoft/applicationinsights-common/dist-es5/Telemetry/Common/DataSanitizer.js","/../node_modules/@microsoft/applicationinsights-channel-js/node_modules/@microsoft/applicationinsights-common/dist-es5/Telemetry/Event.js","/../node_modules/@microsoft/applicationinsights-channel-js/node_modules/@microsoft/applicationinsights-common/dist-es5/Telemetry/Trace.js","/../node_modules/@microsoft/applicationinsights-channel-js/node_modules/@microsoft/applicationinsights-common/dist-es5/HelperFuncs.js","/../node_modules/@microsoft/applicationinsights-channel-js/node_modules/@microsoft/applicationinsights-common/dist-es5/Telemetry/PageView.js","/../node_modules/@microsoft/applicationinsights-channel-js/node_modules/@microsoft/applicationinsights-common/dist-es5/Telemetry/PageViewPerformance.js","/../node_modules/@microsoft/applicationinsights-channel-js/node_modules/@microsoft/applicationinsights-common/dist-es5/Telemetry/Exception.js","/../node_modules/@microsoft/applicationinsights-channel-js/node_modules/@microsoft/applicationinsights-common/dist-es5/Telemetry/Common/DataPoint.js","/../node_modules/@microsoft/applicationinsights-channel-js/node_modules/@microsoft/applicationinsights-common/dist-es5/Telemetry/Metric.js","/../node_modules/@microsoft/applicationinsights-channel-js/node_modules/@microsoft/applicationinsights-common/dist-es5/UrlHelperFuncs.js","/../node_modules/@microsoft/applicationinsights-channel-js/node_modules/@microsoft/applicationinsights-common/dist-es5/Util.js","/../node_modules/@microsoft/applicationinsights-channel-js/node_modules/@microsoft/applicationinsights-common/dist-es5/Telemetry/RemoteDependencyData.js","/../node_modules/@microsoft/applicationinsights-channel-js/node_modules/@microsoft/applicationinsights-core-js/dist-es5/JavaScriptSDK/EventHelpers.js","/../node_modules/@microsoft/applicationinsights-channel-js/node_modules/@microsoft/applicationinsights-common/dist-es5/Offline.js","/../node_modules/@microsoft/applicationinsights-channel-js/node_modules/@microsoft/applicationinsights-core-js/dist-es5/JavaScriptSDK.Enums/EnumHelperFuncs.js","/../node_modules/@microsoft/applicationinsights-channel-js/node_modules/@microsoft/applicationinsights-common/dist-es5/Enums.js","/../node_modules/@microsoft/applicationinsights-channel-js/node_modules/@microsoft/applicationinsights-common/dist-es5/StorageHelperFuncs.js","/../node_modules/@microsoft/applicationinsights-channel-js/node_modules/@microsoft/applicationinsights-common/dist-es5/RequestResponseHeaders.js","/../node_modules/@microsoft/applicationinsights-channel-js/node_modules/@microsoft/applicationinsights-core-js/dist-es5/Config/ConfigDefaultHelpers.js","/../node_modules/@microsoft/applicationinsights-channel-js/node_modules/@microsoft/applicationinsights-core-js/dist-es5/JavaScriptSDK/PerfManager.js","/../node_modules/@microsoft/applicationinsights-channel-js/node_modules/@microsoft/applicationinsights-core-js/dist-es5/JavaScriptSDK/TelemetryHelpers.js","/../node_modules/@microsoft/applicationinsights-channel-js/node_modules/@microsoft/applicationinsights-core-js/dist-es5/JavaScriptSDK/ProcessTelemetryContext.js","/../node_modules/@microsoft/applicationinsights-channel-js/node_modules/@microsoft/applicationinsights-core-js/dist-es5/JavaScriptSDK/BaseTelemetryPlugin.js","/../node_modules/@microsoft/applicationinsights-channel-js/node_modules/@microsoft/applicationinsights-core-js/dist-es5/JavaScriptSDK.Enums/InitActiveStatusEnum.js","/../node_modules/@microsoft/applicationinsights-channel-js/node_modules/@microsoft/applicationinsights-core-js/dist-es5/JavaScriptSDK/Constants.js","/../node_modules/@microsoft/applicationinsights-channel-js/node_modules/@microsoft/applicationinsights-core-js/dist-es5/JavaScriptSDK/SenderPostManager.js","/../node_modules/@microsoft/applicationinsights-channel-js/node_modules/@microsoft/applicationinsights-core-js/dist-es5/JavaScriptSDK/ResponseHelpers.js","/../node_modules/@microsoft/applicationinsights-channel-js/node_modules/@microsoft/applicationinsights-core-js/dist-es5/JavaScriptSDK/UnloadHookContainer.js","/../node_modules/@microsoft/applicationinsights-channel-js/node_modules/@microsoft/applicationinsights-core-js/dist-es5/JavaScriptSDK/UnloadHandlerContainer.js","/../node_modules/@microsoft/applicationinsights-channel-js/node_modules/@microsoft/applicationinsights-common/dist-es5/Interfaces/Contracts/ContextTagKeys.js","/../node_modules/@microsoft/applicationinsights-channel-js/node_modules/@microsoft/applicationinsights-common/dist-es5/Interfaces/PartAExtensions.js","/../node_modules/@microsoft/applicationinsights-channel-js/node_modules/@microsoft/applicationinsights-common/dist-es5/Telemetry/Common/Envelope.js","/../node_modules/@microsoft/applicationinsights-channel-js/node_modules/@microsoft/applicationinsights-common/dist-es5/Telemetry/Common/Data.js","/../node_modules/@microsoft/applicationinsights-channel-js/dist-es5/InternalConstants.js","/../node_modules/@microsoft/applicationinsights-channel-js/dist-es5/__DynamicConstants.js","/../node_modules/@microsoft/applicationinsights-channel-js/dist-es5/EnvelopeCreator.js","/../node_modules/@microsoft/applicationinsights-channel-js/dist-es5/SendBuffer.js","/../node_modules/@microsoft/applicationinsights-channel-js/dist-es5/Sender.js","/../node_modules/@microsoft/applicationinsights-channel-js/dist-es5/Serializer.js","/../node_modules/@microsoft/applicationinsights-channel-js/dist-es5/TelemetryProcessors/SamplingScoreGenerators/HashCodeScoreGenerator.js","/../node_modules/@microsoft/applicationinsights-channel-js/dist-es5/TelemetryProcessors/SamplingScoreGenerators/SamplingScoreGenerator.js","/../node_modules/@microsoft/applicationinsights-channel-js/dist-es5/TelemetryProcessors/Sample.js","/../node_modules/@microsoft/applicationinsights-channel-js/node_modules/@microsoft/applicationinsights-common/dist-es5/applicationinsights-common.js","/../node_modules/@microsoft/applicationinsights-channel-js/node_modules/@microsoft/applicationinsights-core-js/dist-es5/JavaScriptSDK/AsyncUtils.js","/../node_modules/@microsoft/applicationinsights-web/node_modules/@microsoft/applicationinsights-common/dist-es5/ConnectionStringParser.js","/../node_modules/@microsoft/applicationinsights-web/node_modules/@microsoft/applicationinsights-common/dist-es5/ThrottleMgr.js","/../node_modules/@microsoft/applicationinsights-web/node_modules/@microsoft/applicationinsights-core-js/dist-es5/JavaScriptSDK.Enums/InitActiveStatusEnum.js","/../node_modules/@microsoft/applicationinsights-web/node_modules/@microsoft/applicationinsights-core-js/dist-es5/JavaScriptSDK/AsyncUtils.js","/../node_modules/@microsoft/applicationinsights-web/node_modules/@microsoft/applicationinsights-core-js/dist-es5/JavaScriptSDK/Constants.js","/../node_modules/@microsoft/applicationinsights-web/node_modules/@microsoft/applicationinsights-core-js/dist-es5/JavaScriptSDK/NotificationManager.js","/../node_modules/@microsoft/applicationinsights-web/node_modules/@microsoft/applicationinsights-core-js/dist-es5/JavaScriptSDK/AppInsightsCore.js","/../node_modules/@microsoft/applicationinsights-web/node_modules/@microsoft/applicationinsights-core-js/dist-es5/JavaScriptSDK/TelemetryInitializerPlugin.js","/../node_modules/@microsoft/applicationinsights-dependencies-js/node_modules/@microsoft/applicationinsights-core-js/dist-es5/__DynamicConstants.js","/../node_modules/@microsoft/applicationinsights-dependencies-js/node_modules/@microsoft/applicationinsights-core-js/dist-es5/JavaScriptSDK/InternalConstants.js","/../node_modules/@microsoft/applicationinsights-dependencies-js/node_modules/@microsoft/applicationinsights-core-js/dist-es5/JavaScriptSDK/HelperFuncs.js","/../node_modules/@microsoft/applicationinsights-dependencies-js/node_modules/@microsoft/applicationinsights-core-js/dist-es5/JavaScriptSDK/EnvUtils.js","/../node_modules/@microsoft/applicationinsights-dependencies-js/node_modules/@microsoft/applicationinsights-core-js/dist-es5/JavaScriptSDK/RandomHelper.js","/../node_modules/@microsoft/applicationinsights-dependencies-js/node_modules/@microsoft/applicationinsights-core-js/dist-es5/JavaScriptSDK/CoreUtils.js","/../node_modules/@microsoft/applicationinsights-dependencies-js/node_modules/@microsoft/applicationinsights-core-js/dist-es5/JavaScriptSDK/W3cTraceParent.js","/../node_modules/@microsoft/applicationinsights-dependencies-js/node_modules/@microsoft/applicationinsights-common/dist-es5/Constants.js","/../node_modules/@microsoft/applicationinsights-dependencies-js/node_modules/@microsoft/applicationinsights-common/dist-es5/RequestResponseHeaders.js","/../node_modules/@microsoft/applicationinsights-dependencies-js/node_modules/@microsoft/applicationinsights-core-js/dist-es5/JavaScriptSDK.Enums/EnumHelperFuncs.js","/../node_modules/@microsoft/applicationinsights-dependencies-js/node_modules/@microsoft/applicationinsights-core-js/dist-es5/JavaScriptSDK/DataCacheHelper.js","/../node_modules/@microsoft/applicationinsights-dependencies-js/node_modules/@microsoft/applicationinsights-core-js/dist-es5/Config/ConfigDefaults.js","/../node_modules/@microsoft/applicationinsights-dependencies-js/node_modules/@microsoft/applicationinsights-core-js/dist-es5/Config/DynamicSupport.js","/../node_modules/@microsoft/applicationinsights-dependencies-js/node_modules/@microsoft/applicationinsights-core-js/dist-es5/Config/DynamicProperty.js","/../node_modules/@microsoft/applicationinsights-dependencies-js/node_modules/@microsoft/applicationinsights-core-js/dist-es5/JavaScriptSDK/AggregationError.js","/../node_modules/@microsoft/applicationinsights-dependencies-js/node_modules/@microsoft/applicationinsights-core-js/dist-es5/Config/DynamicState.js","/../node_modules/@microsoft/applicationinsights-dependencies-js/node_modules/@microsoft/applicationinsights-core-js/dist-es5/Config/DynamicConfig.js","/../node_modules/@microsoft/applicationinsights-dependencies-js/node_modules/@microsoft/applicationinsights-core-js/dist-es5/JavaScriptSDK/DbgExtensionUtils.js","/../node_modules/@microsoft/applicationinsights-dependencies-js/node_modules/@microsoft/applicationinsights-core-js/dist-es5/JavaScriptSDK/DiagnosticLogger.js","/../node_modules/@microsoft/applicationinsights-dependencies-js/node_modules/@microsoft/applicationinsights-common/dist-es5/__DynamicConstants.js","/../node_modules/@microsoft/applicationinsights-dependencies-js/node_modules/@microsoft/applicationinsights-common/dist-es5/Telemetry/Common/DataSanitizer.js","/../node_modules/@microsoft/applicationinsights-dependencies-js/node_modules/@microsoft/applicationinsights-common/dist-es5/UrlHelperFuncs.js","/../node_modules/@microsoft/applicationinsights-dependencies-js/node_modules/@microsoft/applicationinsights-common/dist-es5/Util.js","/../node_modules/@microsoft/applicationinsights-dependencies-js/node_modules/@microsoft/applicationinsights-common/dist-es5/TelemetryItemCreator.js","/../node_modules/@microsoft/applicationinsights-dependencies-js/node_modules/@microsoft/applicationinsights-common/dist-es5/HelperFuncs.js","/../node_modules/@microsoft/applicationinsights-dependencies-js/node_modules/@microsoft/applicationinsights-common/dist-es5/Telemetry/RemoteDependencyData.js","/../node_modules/@microsoft/applicationinsights-dependencies-js/node_modules/@microsoft/applicationinsights-core-js/dist-es5/JavaScriptSDK/EventHelpers.js","/../node_modules/@microsoft/applicationinsights-dependencies-js/node_modules/@microsoft/applicationinsights-core-js/dist-es5/JavaScriptSDK/PerfManager.js","/../node_modules/@microsoft/applicationinsights-dependencies-js/node_modules/@microsoft/applicationinsights-core-js/dist-es5/JavaScriptSDK/TelemetryHelpers.js","/../node_modules/@microsoft/applicationinsights-dependencies-js/node_modules/@microsoft/applicationinsights-core-js/dist-es5/JavaScriptSDK/ProcessTelemetryContext.js","/../node_modules/@microsoft/applicationinsights-dependencies-js/node_modules/@microsoft/applicationinsights-core-js/dist-es5/JavaScriptSDK/BaseTelemetryPlugin.js","/../node_modules/@microsoft/applicationinsights-dependencies-js/node_modules/@microsoft/applicationinsights-core-js/dist-es5/JavaScriptSDK/InstrumentHooks.js","/../node_modules/@microsoft/applicationinsights-dependencies-js/node_modules/@microsoft/applicationinsights-core-js/dist-es5/JavaScriptSDK/UnloadHookContainer.js","/../node_modules/@microsoft/applicationinsights-dependencies-js/node_modules/@microsoft/applicationinsights-core-js/dist-es5/JavaScriptSDK/UnloadHandlerContainer.js","/../node_modules/@microsoft/applicationinsights-dependencies-js/dist-es5/InternalConstants.js","/../node_modules/@microsoft/applicationinsights-dependencies-js/dist-es5/__DynamicConstants.js","/../node_modules/@microsoft/applicationinsights-dependencies-js/node_modules/@microsoft/applicationinsights-common/dist-es5/Interfaces/Contracts/ContextTagKeys.js","/../node_modules/@microsoft/applicationinsights-dependencies-js/dist-es5/ajaxRecord.js","/../node_modules/@microsoft/applicationinsights-dependencies-js/node_modules/@microsoft/applicationinsights-common/dist-es5/Interfaces/PartAExtensions.js","/../node_modules/@microsoft/applicationinsights-dependencies-js/dist-es5/ajax.js","/../node_modules/@microsoft/applicationinsights-dependencies-js/node_modules/@microsoft/applicationinsights-common/dist-es5/applicationinsights-common.js","/../node_modules/@microsoft/applicationinsights-properties-js/node_modules/@microsoft/applicationinsights-common/dist-es5/__DynamicConstants.js","/../node_modules/@microsoft/applicationinsights-properties-js/node_modules/@microsoft/applicationinsights-core-js/dist-es5/__DynamicConstants.js","/../node_modules/@microsoft/applicationinsights-properties-js/node_modules/@microsoft/applicationinsights-core-js/dist-es5/JavaScriptSDK/InternalConstants.js","/../node_modules/@microsoft/applicationinsights-properties-js/node_modules/@microsoft/applicationinsights-core-js/dist-es5/JavaScriptSDK/HelperFuncs.js","/../node_modules/@microsoft/applicationinsights-properties-js/node_modules/@microsoft/applicationinsights-core-js/dist-es5/JavaScriptSDK/EnvUtils.js","/../node_modules/@microsoft/applicationinsights-properties-js/node_modules/@microsoft/applicationinsights-core-js/dist-es5/JavaScriptSDK/RandomHelper.js","/../node_modules/@microsoft/applicationinsights-properties-js/node_modules/@microsoft/applicationinsights-core-js/dist-es5/JavaScriptSDK/DataCacheHelper.js","/../node_modules/@microsoft/applicationinsights-properties-js/node_modules/@microsoft/applicationinsights-core-js/dist-es5/Config/ConfigDefaults.js","/../node_modules/@microsoft/applicationinsights-properties-js/node_modules/@microsoft/applicationinsights-core-js/dist-es5/Config/DynamicSupport.js","/../node_modules/@microsoft/applicationinsights-properties-js/node_modules/@microsoft/applicationinsights-core-js/dist-es5/Config/DynamicProperty.js","/../node_modules/@microsoft/applicationinsights-properties-js/node_modules/@microsoft/applicationinsights-core-js/dist-es5/JavaScriptSDK/AggregationError.js","/../node_modules/@microsoft/applicationinsights-properties-js/node_modules/@microsoft/applicationinsights-core-js/dist-es5/Config/DynamicState.js","/../node_modules/@microsoft/applicationinsights-properties-js/node_modules/@microsoft/applicationinsights-core-js/dist-es5/Config/DynamicConfig.js","/../node_modules/@microsoft/applicationinsights-properties-js/node_modules/@microsoft/applicationinsights-core-js/dist-es5/JavaScriptSDK/DbgExtensionUtils.js","/../node_modules/@microsoft/applicationinsights-properties-js/node_modules/@microsoft/applicationinsights-core-js/dist-es5/JavaScriptSDK/DiagnosticLogger.js","/../node_modules/@microsoft/applicationinsights-properties-js/node_modules/@microsoft/applicationinsights-common/dist-es5/Telemetry/Common/DataSanitizer.js","/../node_modules/@microsoft/applicationinsights-properties-js/node_modules/@microsoft/applicationinsights-common/dist-es5/Telemetry/PageView.js","/../node_modules/@microsoft/applicationinsights-properties-js/node_modules/@microsoft/applicationinsights-common/dist-es5/Constants.js","/../node_modules/@microsoft/applicationinsights-properties-js/node_modules/@microsoft/applicationinsights-common/dist-es5/HelperFuncs.js","/../node_modules/@microsoft/applicationinsights-properties-js/node_modules/@microsoft/applicationinsights-core-js/dist-es5/JavaScriptSDK.Enums/EnumHelperFuncs.js","/../node_modules/@microsoft/applicationinsights-properties-js/node_modules/@microsoft/applicationinsights-common/dist-es5/Enums.js","/../node_modules/@microsoft/applicationinsights-properties-js/node_modules/@microsoft/applicationinsights-common/dist-es5/StorageHelperFuncs.js","/../node_modules/@microsoft/applicationinsights-properties-js/node_modules/@microsoft/applicationinsights-core-js/dist-es5/JavaScriptSDK/W3cTraceParent.js","/../node_modules/@microsoft/applicationinsights-properties-js/node_modules/@microsoft/applicationinsights-core-js/dist-es5/JavaScriptSDK/PerfManager.js","/../node_modules/@microsoft/applicationinsights-properties-js/node_modules/@microsoft/applicationinsights-core-js/dist-es5/JavaScriptSDK/TelemetryHelpers.js","/../node_modules/@microsoft/applicationinsights-properties-js/node_modules/@microsoft/applicationinsights-core-js/dist-es5/JavaScriptSDK/ProcessTelemetryContext.js","/../node_modules/@microsoft/applicationinsights-properties-js/node_modules/@microsoft/applicationinsights-core-js/dist-es5/JavaScriptSDK/BaseTelemetryPlugin.js","/../node_modules/@microsoft/applicationinsights-properties-js/node_modules/@microsoft/applicationinsights-core-js/dist-es5/JavaScriptSDK/UnloadHookContainer.js","/../node_modules/@microsoft/applicationinsights-properties-js/node_modules/@microsoft/applicationinsights-core-js/dist-es5/JavaScriptSDK/UnloadHandlerContainer.js","/../node_modules/@microsoft/applicationinsights-properties-js/node_modules/@microsoft/applicationinsights-common/dist-es5/Interfaces/Contracts/ContextTagKeys.js","/../node_modules/@microsoft/applicationinsights-properties-js/node_modules/@microsoft/applicationinsights-core-js/dist-es5/JavaScriptSDK/CookieMgr.js","/../node_modules/@microsoft/applicationinsights-properties-js/node_modules/@microsoft/applicationinsights-common/dist-es5/Interfaces/PartAExtensions.js","/../node_modules/@microsoft/applicationinsights-properties-js/dist-es5/Context/Application.js","/../node_modules/@microsoft/applicationinsights-properties-js/dist-es5/Context/Device.js","/../node_modules/@microsoft/applicationinsights-properties-js/dist-es5/Context/Internal.js","/../node_modules/@microsoft/applicationinsights-properties-js/dist-es5/Context/Location.js","/../node_modules/@microsoft/applicationinsights-properties-js/node_modules/@microsoft/applicationinsights-core-js/dist-es5/Config/ConfigDefaultHelpers.js","/../node_modules/@microsoft/applicationinsights-properties-js/dist-es5/__DynamicConstants.js","/../node_modules/@microsoft/applicationinsights-properties-js/dist-es5/Context/Session.js","/../node_modules/@microsoft/applicationinsights-properties-js/dist-es5/Context/TelemetryTrace.js","/../node_modules/@microsoft/applicationinsights-properties-js/node_modules/@microsoft/applicationinsights-core-js/dist-es5/JavaScriptSDK/CoreUtils.js","/../node_modules/@microsoft/applicationinsights-properties-js/dist-es5/Context/User.js","/../node_modules/@microsoft/applicationinsights-properties-js/dist-es5/TelemetryContext.js","/../node_modules/@microsoft/applicationinsights-properties-js/dist-es5/PropertiesPlugin.js","/../node_modules/@microsoft/applicationinsights-web/dist-es5/AISku.js","/../node_modules/@microsoft/applicationinsights-properties-js/node_modules/@microsoft/applicationinsights-common/dist-es5/applicationinsights-common.js","/../node_modules/@microsoft/applicationinsights-properties-js/node_modules/@microsoft/applicationinsights-common/dist-es5/Util.js","/../node_modules/@microsoft/applicationinsights-web/dist-es5/InternalConstants.js","/../node_modules/@microsoft/applicationinsights-web/dist-es5/__DynamicConstants.js","/../node_modules/universal-media-player/dist/ump.mjs","/../node_modules/@lit/context/src/lib/decorators/provide.ts","/./Common/VideoPlayerManager.ts","/./Common/AuthenticationTypes.ts","/./Common/VideoCarouselManager.ts","/./Support/Support.ts","/./Common/LogCopyEvent.ts","/./Support/Support.Main.ts","/./Common/Helpers.ts","/./Common/ClipboardHelpers.ts"],"sourcesContent":["var inProgress = {};\n// data-webpack is not used as build has no uniqueName\n// loadScript function to load a script via script tag\n__webpack_require__.l = function(url, done, key, chunkId) {\n\tif(inProgress[url]) { inProgress[url].push(done); return; }\n\tvar script, needAttach;\n\tif(key !== undefined) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tfor(var i = 0; i < scripts.length; i++) {\n\t\t\tvar s = scripts[i];\n\t\t\tif(s.getAttribute(\"src\") == url) { script = s; break; }\n\t\t}\n\t}\n\tif(!script) {\n\t\tneedAttach = true;\n\t\tscript = document.createElement('script');\n\n\t\tscript.charset = 'utf-8';\n\t\tscript.timeout = 120;\n\t\tif (__webpack_require__.nc) {\n\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n\t\t}\n\n\n\t\tscript.src = url;\n\t}\n\tinProgress[url] = [done];\n\tvar onScriptComplete = function(prev, event) {\n\t\t// avoid mem leaks in IE.\n\t\tscript.onerror = script.onload = null;\n\t\tclearTimeout(timeout);\n\t\tvar doneFns = inProgress[url];\n\t\tdelete inProgress[url];\n\t\tscript.parentNode && script.parentNode.removeChild(script);\n\t\tdoneFns && doneFns.forEach(function(fn) { return fn(event); });\n\t\tif(prev) return prev(event);\n\t}\n\tvar timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), 120000);\n\tscript.onerror = onScriptComplete.bind(null, script.onerror);\n\tscript.onload = onScriptComplete.bind(null, script.onload);\n\tneedAttach && document.head.appendChild(script);\n};","/*! codem-isoboxer v0.3.10 https://github.com/madebyhiro/codem-isoboxer/blob/master/LICENSE.txt */\nvar ISOBoxer = {};\n\nISOBoxer.parseBuffer = function(arrayBuffer) {\n return new ISOFile(arrayBuffer).parse();\n};\n\nISOBoxer.addBoxProcessor = function(type, parser) {\n if (typeof type !== 'string' || typeof parser !== 'function') {\n return;\n }\n ISOBox.prototype._boxProcessors[type] = parser;\n};\n\nISOBoxer.createFile = function() {\n return new ISOFile();\n};\n\n// See ISOBoxer.append() for 'pos' parameter syntax\nISOBoxer.createBox = function(type, parent, pos) {\n var newBox = ISOBox.create(type);\n if (parent) {\n parent.append(newBox, pos);\n }\n return newBox;\n};\n\n// See ISOBoxer.append() for 'pos' parameter syntax\nISOBoxer.createFullBox = function(type, parent, pos) {\n var newBox = ISOBoxer.createBox(type, parent, pos);\n newBox.version = 0;\n newBox.flags = 0;\n return newBox;\n};\n\nISOBoxer.Utils = {};\nISOBoxer.Utils.dataViewToString = function(dataView, encoding) {\n var impliedEncoding = encoding || 'utf-8';\n if (typeof TextDecoder !== 'undefined') {\n return new TextDecoder(impliedEncoding).decode(dataView);\n }\n var a = [];\n var i = 0;\n\n if (impliedEncoding === 'utf-8') {\n /* The following algorithm is essentially a rewrite of the UTF8.decode at\n http://bannister.us/weblog/2007/simple-base64-encodedecode-javascript/\n */\n\n while (i < dataView.byteLength) {\n var c = dataView.getUint8(i++);\n if (c < 0x80) {\n // 1-byte character (7 bits)\n } else if (c < 0xe0) {\n // 2-byte character (11 bits)\n c = (c & 0x1f) << 6;\n c |= (dataView.getUint8(i++) & 0x3f);\n } else if (c < 0xf0) {\n // 3-byte character (16 bits)\n c = (c & 0xf) << 12;\n c |= (dataView.getUint8(i++) & 0x3f) << 6;\n c |= (dataView.getUint8(i++) & 0x3f);\n } else {\n // 4-byte character (21 bits)\n c = (c & 0x7) << 18;\n c |= (dataView.getUint8(i++) & 0x3f) << 12;\n c |= (dataView.getUint8(i++) & 0x3f) << 6;\n c |= (dataView.getUint8(i++) & 0x3f);\n }\n a.push(String.fromCharCode(c));\n }\n } else { // Just map byte-by-byte (probably wrong)\n while (i < dataView.byteLength) {\n a.push(String.fromCharCode(dataView.getUint8(i++)));\n }\n }\n return a.join('');\n};\n\nISOBoxer.Utils.utf8ToByteArray = function(string) {\n // Only UTF-8 encoding is supported by TextEncoder\n var u, i;\n if (typeof TextEncoder !== 'undefined') {\n u = new TextEncoder().encode(string);\n } else {\n u = [];\n for (i = 0; i < string.length; ++i) {\n var c = string.charCodeAt(i);\n if (c < 0x80) {\n u.push(c);\n } else if (c < 0x800) {\n u.push(0xC0 | (c >> 6));\n u.push(0x80 | (63 & c));\n } else if (c < 0x10000) {\n u.push(0xE0 | (c >> 12));\n u.push(0x80 | (63 & (c >> 6)));\n u.push(0x80 | (63 & c));\n } else {\n u.push(0xF0 | (c >> 18));\n u.push(0x80 | (63 & (c >> 12)));\n u.push(0x80 | (63 & (c >> 6)));\n u.push(0x80 | (63 & c));\n }\n }\n }\n return u;\n};\n\n// Method to append a box in the list of child boxes\n// The 'pos' parameter can be either:\n// - (number) a position index at which to insert the new box\n// - (string) the type of the box after which to insert the new box\n// - (object) the box after which to insert the new box\nISOBoxer.Utils.appendBox = function(parent, box, pos) {\n box._offset = parent._cursor.offset;\n box._root = (parent._root ? parent._root : parent);\n box._raw = parent._raw;\n box._parent = parent;\n\n if (pos === -1) {\n // The new box is a sub-box of the parent but not added in boxes array,\n // for example when the new box is set as an entry (see dref and stsd for example)\n return;\n }\n\n if (pos === undefined || pos === null) {\n parent.boxes.push(box);\n return;\n }\n\n var index = -1,\n type;\n\n if (typeof pos === \"number\") {\n index = pos;\n } else {\n if (typeof pos === \"string\") {\n type = pos;\n } else if (typeof pos === \"object\" && pos.type) {\n type = pos.type;\n } else {\n parent.boxes.push(box);\n return;\n }\n\n for (var i = 0; i < parent.boxes.length; i++) {\n if (type === parent.boxes[i].type) {\n index = i + 1;\n break;\n }\n }\n }\n parent.boxes.splice(index, 0, box);\n};\n\nif (typeof exports !== 'undefined') {\n exports.parseBuffer = ISOBoxer.parseBuffer;\n exports.addBoxProcessor = ISOBoxer.addBoxProcessor;\n exports.createFile = ISOBoxer.createFile;\n exports.createBox = ISOBoxer.createBox;\n exports.createFullBox = ISOBoxer.createFullBox;\n exports.Utils = ISOBoxer.Utils;\n}\n\nISOBoxer.Cursor = function(initialOffset) {\n this.offset = (typeof initialOffset == 'undefined' ? 0 : initialOffset);\n};\n\nvar ISOFile = function(arrayBuffer) {\n this._cursor = new ISOBoxer.Cursor();\n this.boxes = [];\n if (arrayBuffer) {\n this._raw = new DataView(arrayBuffer);\n }\n};\n\nISOFile.prototype.fetch = function(type) {\n var result = this.fetchAll(type, true);\n return (result.length ? result[0] : null);\n};\n\nISOFile.prototype.fetchAll = function(type, returnEarly) {\n var result = [];\n ISOFile._sweep.call(this, type, result, returnEarly);\n return result;\n};\n\nISOFile.prototype.parse = function() {\n this._cursor.offset = 0;\n this.boxes = [];\n while (this._cursor.offset < this._raw.byteLength) {\n var box = ISOBox.parse(this);\n\n // Box could not be parsed\n if (typeof box.type === 'undefined') break;\n\n this.boxes.push(box);\n }\n return this;\n};\n\nISOFile._sweep = function(type, result, returnEarly) {\n if (this.type && this.type == type) result.push(this);\n for (var box in this.boxes) {\n if (result.length && returnEarly) return;\n ISOFile._sweep.call(this.boxes[box], type, result, returnEarly);\n }\n};\n\nISOFile.prototype.write = function() {\n\n var length = 0,\n i;\n\n for (i = 0; i < this.boxes.length; i++) {\n length += this.boxes[i].getLength(false);\n }\n\n var bytes = new Uint8Array(length);\n this._rawo = new DataView(bytes.buffer);\n this.bytes = bytes;\n this._cursor.offset = 0;\n\n for (i = 0; i < this.boxes.length; i++) {\n this.boxes[i].write();\n }\n\n return bytes.buffer;\n};\n\nISOFile.prototype.append = function(box, pos) {\n ISOBoxer.Utils.appendBox(this, box, pos);\n};\nvar ISOBox = function() {\n this._cursor = new ISOBoxer.Cursor();\n};\n\nISOBox.parse = function(parent) {\n var newBox = new ISOBox();\n newBox._offset = parent._cursor.offset;\n newBox._root = (parent._root ? parent._root : parent);\n newBox._raw = parent._raw;\n newBox._parent = parent;\n newBox._parseBox();\n parent._cursor.offset = newBox._raw.byteOffset + newBox._raw.byteLength;\n return newBox;\n};\n\nISOBox.create = function(type) {\n var newBox = new ISOBox();\n newBox.type = type;\n newBox.boxes = [];\n return newBox;\n};\n\nISOBox.prototype._boxContainers = ['dinf', 'edts', 'mdia', 'meco', 'mfra', 'minf', 'moof', 'moov', 'mvex', 'stbl', 'strk', 'traf', 'trak', 'tref', 'udta', 'vttc', 'sinf', 'schi', 'encv', 'enca','meta','grpl','prsl'];\n\nISOBox.prototype._boxProcessors = {};\n\n///////////////////////////////////////////////////////////////////////////////////////////////////\n// Generic read/write functions\n\nISOBox.prototype._procField = function (name, type, size) {\n if (this._parsing) {\n this[name] = this._readField(type, size);\n }\n else {\n this._writeField(type, size, this[name]);\n }\n};\n\nISOBox.prototype._procFieldArray = function (name, length, type, size) {\n var i;\n if (this._parsing) {\n this[name] = [];\n for (i = 0; i < length; i++) {\n this[name][i] = this._readField(type, size);\n }\n }\n else {\n for (i = 0; i < this[name].length; i++) {\n this._writeField(type, size, this[name][i]);\n }\n }\n};\n\nISOBox.prototype._procFullBox = function() {\n this._procField('version', 'uint', 8);\n this._procField('flags', 'uint', 24);\n};\n\nISOBox.prototype._procEntries = function(name, length, fn) {\n var i;\n if (this._parsing) {\n this[name] = [];\n for (i = 0; i < length; i++) {\n this[name].push({});\n fn.call(this, this[name][i]);\n }\n }\n else {\n for (i = 0; i < length; i++) {\n fn.call(this, this[name][i]);\n }\n }\n};\n\nISOBox.prototype._procSubEntries = function(entry, name, length, fn) {\n var i;\n if (this._parsing) {\n entry[name] = [];\n for (i = 0; i < length; i++) {\n entry[name].push({});\n fn.call(this, entry[name][i]);\n }\n }\n else {\n for (i = 0; i < length; i++) {\n fn.call(this, entry[name][i]);\n }\n }\n};\n\nISOBox.prototype._procEntryField = function (entry, name, type, size) {\n if (this._parsing) {\n entry[name] = this._readField(type, size);\n }\n else {\n this._writeField(type, size, entry[name]);\n }\n};\n\nISOBox.prototype._procSubBoxes = function(name, length) {\n var i;\n if (this._parsing) {\n this[name] = [];\n for (i = 0; i < length; i++) {\n this[name].push(ISOBox.parse(this));\n }\n }\n else {\n for (i = 0; i < length; i++) {\n if (this._rawo) {\n this[name][i].write();\n } else {\n this.size += this[name][i].getLength();\n }\n }\n }\n};\n\n///////////////////////////////////////////////////////////////////////////////////////////////////\n// Read/parse functions\n\nISOBox.prototype._readField = function(type, size) {\n switch (type) {\n case 'uint':\n return this._readUint(size);\n case 'int':\n return this._readInt(size);\n case 'template':\n return this._readTemplate(size);\n case 'string':\n return (size === -1) ? this._readTerminatedString() : this._readString(size);\n case 'data':\n return this._readData(size);\n case 'utf8':\n return this._readUTF8String();\n case 'utf8string':\n return this._readUTF8TerminatedString();\n default:\n return -1;\n }\n};\n\nISOBox.prototype._readInt = function(size) {\n var result = null,\n offset = this._cursor.offset - this._raw.byteOffset;\n switch(size) {\n case 8:\n result = this._raw.getInt8(offset);\n break;\n case 16:\n result = this._raw.getInt16(offset);\n break;\n case 32:\n result = this._raw.getInt32(offset);\n break;\n case 64:\n // Warning: JavaScript cannot handle 64-bit integers natively.\n // This will give unexpected results for integers >= 2^53\n var s1 = this._raw.getInt32(offset);\n var s2 = this._raw.getInt32(offset + 4);\n result = (s1 * Math.pow(2,32)) + s2;\n break;\n }\n this._cursor.offset += (size >> 3);\n return result;\n};\n\nISOBox.prototype._readUint = function(size) {\n var result = null,\n offset = this._cursor.offset - this._raw.byteOffset,\n s1, s2;\n switch(size) {\n case 8:\n result = this._raw.getUint8(offset);\n break;\n case 16:\n result = this._raw.getUint16(offset);\n break;\n case 24:\n s1 = this._raw.getUint16(offset);\n s2 = this._raw.getUint8(offset + 2);\n result = (s1 << 8) + s2;\n break;\n case 32:\n result = this._raw.getUint32(offset);\n break;\n case 64:\n // Warning: JavaScript cannot handle 64-bit integers natively.\n // This will give unexpected results for integers >= 2^53\n s1 = this._raw.getUint32(offset);\n s2 = this._raw.getUint32(offset + 4);\n result = (s1 * Math.pow(2,32)) + s2;\n break;\n }\n this._cursor.offset += (size >> 3);\n return result;\n};\n\nISOBox.prototype._readString = function(length) {\n var str = '';\n for (var c = 0; c < length; c++) {\n var char = this._readUint(8);\n str += String.fromCharCode(char);\n }\n return str;\n};\n\nISOBox.prototype._readTemplate = function(size) {\n var pre = this._readUint(size / 2);\n var post = this._readUint(size / 2);\n return pre + (post / Math.pow(2, size / 2));\n};\n\nISOBox.prototype._readTerminatedString = function() {\n var str = '';\n while (this._cursor.offset - this._offset < this._raw.byteLength) {\n var char = this._readUint(8);\n if (char === 0) break;\n str += String.fromCharCode(char);\n }\n return str;\n};\n\nISOBox.prototype._readData = function(size) {\n var length = (size > 0) ? size : (this._raw.byteLength - (this._cursor.offset - this._offset));\n if (length > 0) {\n var data = new Uint8Array(this._raw.buffer, this._cursor.offset, length);\n\n this._cursor.offset += length;\n return data;\n }\n else {\n return null;\n }\n};\n\nISOBox.prototype._readUTF8String = function() {\n var length = this._raw.byteLength - (this._cursor.offset - this._offset);\n var data = null;\n if (length > 0) {\n data = new DataView(this._raw.buffer, this._cursor.offset, length);\n this._cursor.offset += length;\n }\n \n return data ? ISOBoxer.Utils.dataViewToString(data) : data;\n};\n\nISOBox.prototype._readUTF8TerminatedString = function() {\n var length = this._raw.byteLength - (this._cursor.offset - this._offset);\n var data = null;\n if (length > 0) {\n data = new DataView(this._raw.buffer, this._cursor.offset, length);\n\n var l;\n for (l=0; l this._raw.buffer.byteLength) {\n this._root._incomplete = true;\n return;\n }\n\n this._procField('size', 'uint', 32);\n this._procField('type', 'string', 4);\n\n if (this.size === 1) { this._procField('largesize', 'uint', 64); }\n if (this.type === 'uuid') { this._procFieldArray('usertype', 16, 'uint', 8); }\n\n switch(this.size) {\n case 0:\n // Size zero indicates last box in the file. Consume remaining buffer.\n this._raw = new DataView(this._raw.buffer, this._offset);\n break;\n case 1:\n if (this._offset + this.size > this._raw.buffer.byteLength) {\n this._incomplete = true;\n this._root._incomplete = true;\n } else {\n this._raw = new DataView(this._raw.buffer, this._offset, this.largesize);\n }\n break;\n default:\n if (this._offset + this.size > this._raw.buffer.byteLength) {\n this._incomplete = true;\n this._root._incomplete = true;\n } else {\n this._raw = new DataView(this._raw.buffer, this._offset, this.size);\n }\n }\n\n // additional parsing\n if (!this._incomplete) {\n if (this._boxProcessors[this.type]) {\n this._boxProcessors[this.type].call(this);\n }\n if (this._boxContainers.indexOf(this.type) !== -1) {\n this._parseContainerBox();\n } else{\n // Unknown box => read and store box content\n this._data = this._readData();\n }\n }\n};\n\nISOBox.prototype._parseFullBox = function() {\n this.version = this._readUint(8);\n this.flags = this._readUint(24);\n};\n\nISOBox.prototype._parseContainerBox = function() {\n this.boxes = [];\n while (this._cursor.offset - this._raw.byteOffset < this._raw.byteLength) {\n this.boxes.push(ISOBox.parse(this));\n }\n};\n\n///////////////////////////////////////////////////////////////////////////////////////////////////\n// Write functions\n\nISOBox.prototype.append = function(box, pos) {\n ISOBoxer.Utils.appendBox(this, box, pos);\n};\n\nISOBox.prototype.getLength = function() {\n this._parsing = false;\n this._rawo = null;\n\n this.size = 0;\n this._procField('size', 'uint', 32);\n this._procField('type', 'string', 4);\n\n if (this.size === 1) { this._procField('largesize', 'uint', 64); }\n if (this.type === 'uuid') { this._procFieldArray('usertype', 16, 'uint', 8); }\n\n if (this._boxProcessors[this.type]) {\n this._boxProcessors[this.type].call(this);\n }\n\n if (this._boxContainers.indexOf(this.type) !== -1) {\n for (var i = 0; i < this.boxes.length; i++) {\n this.size += this.boxes[i].getLength();\n }\n } \n\n if (this._data) {\n this._writeData(this._data);\n }\n\n return this.size;\n};\n\nISOBox.prototype.write = function() {\n this._parsing = false;\n this._cursor.offset = this._parent._cursor.offset;\n\n switch(this.size) {\n case 0:\n this._rawo = new DataView(this._parent._rawo.buffer, this._cursor.offset, (this.parent._rawo.byteLength - this._cursor.offset));\n break;\n case 1:\n this._rawo = new DataView(this._parent._rawo.buffer, this._cursor.offset, this.largesize);\n break;\n default:\n this._rawo = new DataView(this._parent._rawo.buffer, this._cursor.offset, this.size);\n }\n\n this._procField('size', 'uint', 32);\n this._procField('type', 'string', 4);\n\n if (this.size === 1) { this._procField('largesize', 'uint', 64); }\n if (this.type === 'uuid') { this._procFieldArray('usertype', 16, 'uint', 8); }\n\n if (this._boxProcessors[this.type]) {\n this._boxProcessors[this.type].call(this);\n }\n\n if (this._boxContainers.indexOf(this.type) !== -1) {\n for (var i = 0; i < this.boxes.length; i++) {\n this.boxes[i].write();\n }\n } \n\n if (this._data) {\n this._writeData(this._data);\n }\n\n this._parent._cursor.offset += this.size;\n\n return this.size;\n};\n\nISOBox.prototype._writeInt = function(size, value) {\n if (this._rawo) {\n var offset = this._cursor.offset - this._rawo.byteOffset;\n switch(size) {\n case 8:\n this._rawo.setInt8(offset, value);\n break;\n case 16:\n this._rawo.setInt16(offset, value);\n break;\n case 32:\n this._rawo.setInt32(offset, value);\n break;\n case 64:\n // Warning: JavaScript cannot handle 64-bit integers natively.\n // This will give unexpected results for integers >= 2^53\n var s1 = Math.floor(value / Math.pow(2,32));\n var s2 = value - (s1 * Math.pow(2,32));\n this._rawo.setUint32(offset, s1);\n this._rawo.setUint32(offset + 4, s2);\n break;\n }\n this._cursor.offset += (size >> 3);\n } else {\n this.size += (size >> 3);\n }\n};\n\nISOBox.prototype._writeUint = function(size, value) {\n\n if (this._rawo) {\n var offset = this._cursor.offset - this._rawo.byteOffset,\n s1, s2;\n switch(size) {\n case 8:\n this._rawo.setUint8(offset, value);\n break;\n case 16:\n this._rawo.setUint16(offset, value);\n break;\n case 24:\n s1 = (value & 0xFFFF00) >> 8;\n s2 = (value & 0x0000FF);\n this._rawo.setUint16(offset, s1);\n this._rawo.setUint8(offset + 2, s2);\n break;\n case 32:\n this._rawo.setUint32(offset, value);\n break;\n case 64:\n // Warning: JavaScript cannot handle 64-bit integers natively.\n // This will give unexpected results for integers >= 2^53\n s1 = Math.floor(value / Math.pow(2,32));\n s2 = value - (s1 * Math.pow(2,32));\n this._rawo.setUint32(offset, s1);\n this._rawo.setUint32(offset + 4, s2);\n break;\n }\n this._cursor.offset += (size >> 3);\n } else {\n this.size += (size >> 3);\n }\n};\n\nISOBox.prototype._writeString = function(size, str) {\n for (var c = 0; c < size; c++) {\n this._writeUint(8, str.charCodeAt(c));\n }\n};\n\nISOBox.prototype._writeTerminatedString = function(str) {\n if (str.length === 0) {\n return;\n }\n for (var c = 0; c < str.length; c++) {\n this._writeUint(8, str.charCodeAt(c));\n }\n this._writeUint(8, 0);\n};\n\nISOBox.prototype._writeTemplate = function(size, value) {\n var pre = Math.floor(value);\n var post = (value - pre) * Math.pow(2, size / 2);\n this._writeUint(size / 2, pre);\n this._writeUint(size / 2, post);\n};\n\nISOBox.prototype._writeData = function(data) {\n var i;\n //data to copy\n if (data) {\n if (this._rawo) {\n //Array and Uint8Array has also to be managed\n if (data instanceof Array) {\n var offset = this._cursor.offset - this._rawo.byteOffset;\n for (var i = 0; i < data.length; i++) {\n this._rawo.setInt8(offset + i, data[i]);\n }\n this._cursor.offset += data.length;\n } \n\n if (data instanceof Uint8Array) {\n this._root.bytes.set(data, this._cursor.offset);\n this._cursor.offset += data.length;\n }\n\n } else {\n //nothing to copy only size to compute\n this.size += data.length;\n }\n }\n};\n\nISOBox.prototype._writeUTF8String = function(string) {\n var u = ISOBoxer.Utils.utf8ToByteArray(string);\n if (this._rawo) {\n var dataView = new DataView(this._rawo.buffer, this._cursor.offset, u.length);\n for (var i = 0; i < u.length; i++) {\n dataView.setUint8(i, u[i]);\n }\n } else {\n this.size += u.length;\n }\n};\n\nISOBox.prototype._writeField = function(type, size, value) {\n switch (type) {\n case 'uint':\n this._writeUint(size, value);\n break;\n case 'int':\n this._writeInt(size, value);\n break;\n case 'template':\n this._writeTemplate(size, value);\n break;\n case 'string':\n if (size == -1) {\n this._writeTerminatedString(value);\n } else {\n this._writeString(size, value);\n }\n break;\n case 'data':\n this._writeData(value);\n break;\n case 'utf8':\n this._writeUTF8String(value);\n break;\n default:\n break;\n }\n};\n\n// ISO/IEC 14496-12:202x - 12.2.8 Audio rendering indication box\nISOBox.prototype._boxProcessors['ardi'] = function() {\n this._procFullBox();\n this._procField('audio_rendering_indication', 'uint', 8);\n};\n\n// ISO/IEC 14496-15:2014 - avc1/2/3/4, hev1, hvc1, encv\nISOBox.prototype._boxProcessors['avc1'] =\nISOBox.prototype._boxProcessors['avc2'] =\nISOBox.prototype._boxProcessors['avc3'] =\nISOBox.prototype._boxProcessors['avc4'] =\nISOBox.prototype._boxProcessors['hvc1'] =\nISOBox.prototype._boxProcessors['hev1'] =\nISOBox.prototype._boxProcessors['encv'] = function() {\n // SampleEntry fields\n this._procFieldArray('reserved1', 6, 'uint', 8);\n this._procField('data_reference_index', 'uint', 16);\n // VisualSampleEntry fields\n this._procField('pre_defined1', 'uint', 16);\n this._procField('reserved2', 'uint', 16);\n this._procFieldArray('pre_defined2', 3, 'uint', 32);\n this._procField('width', 'uint', 16);\n this._procField('height', 'uint', 16);\n this._procField('horizresolution', 'template', 32);\n this._procField('vertresolution', 'template', 32);\n this._procField('reserved3', 'uint', 32);\n this._procField('frame_count', 'uint', 16);\n this._procFieldArray('compressorname', 32,'uint', 8);\n this._procField('depth', 'uint', 16);\n this._procField('pre_defined3', 'int', 16);\n // Codec-specific fields\n this._procField('config', 'data', -1);\n};\n\n// ISO/IEC 14496-12:2012 - 8.6.1.3 Composition Time To Sample Box\nISOBox.prototype._boxProcessors['ctts'] = function() {\n this._procFullBox();\n this._procField('entry_count', 'uint', 32);\n this._procEntries('entries', this.entry_count, function(entry) {\n this._procEntryField(entry, 'sample_count', 'uint', 32);\n this._procEntryField(entry, 'sample_offset', (this.version === 1) ? 'int' : 'uint', 32);\n });\n};\n\n// ISO/IEC 14496-12:2012 - 8.7.2 Data Reference Box\nISOBox.prototype._boxProcessors['dref'] = function() {\n this._procFullBox();\n this._procField('entry_count', 'uint', 32);\n this._procSubBoxes('entries', this.entry_count);\n};\n\n// ISO/IEC 14496-12:202x - 8.4.6 Extended language tag\nISOBox.prototype._boxProcessors['elng'] = function() {\n this._procFullBox();\n this._procField('extended_language', 'utf8string');\n};\n\n// ISO/IEC 14496-12:2012 - 8.6.6 Edit List Box\nISOBox.prototype._boxProcessors['elst'] = function() {\n this._procFullBox();\n this._procField('entry_count', 'uint', 32);\n this._procEntries('entries', this.entry_count, function(entry) {\n this._procEntryField(entry, 'segment_duration', 'uint', (this.version === 1) ? 64 : 32);\n this._procEntryField(entry, 'media_time', 'int', (this.version === 1) ? 64 : 32);\n this._procEntryField(entry, 'media_rate_integer', 'int', 16);\n this._procEntryField(entry, 'media_rate_fraction', 'int', 16);\n });\n};\n\n// ISO/IEC 23009-1:2014 - 5.10.3.3 Event Message Box\nISOBox.prototype._boxProcessors['emsg'] = function() {\n this._procFullBox();\n if (this.version == 1) {\n this._procField('timescale', 'uint', 32);\n this._procField('presentation_time', 'uint', 64);\n this._procField('event_duration', 'uint', 32);\n this._procField('id', 'uint', 32);\n this._procField('scheme_id_uri', 'string', -1);\n this._procField('value', 'string', -1);\n } else {\n this._procField('scheme_id_uri', 'string', -1);\n this._procField('value', 'string', -1);\n this._procField('timescale', 'uint', 32);\n this._procField('presentation_time_delta', 'uint', 32);\n this._procField('event_duration', 'uint', 32);\n this._procField('id', 'uint', 32);\n }\n this._procField('message_data', 'data', -1);\n};\n// ISO/IEC 14496-12:2012 - 8.1.2 Free Space Box\nISOBox.prototype._boxProcessors['free'] = ISOBox.prototype._boxProcessors['skip'] = function() {\n this._procField('data', 'data', -1);\n};\n\n// ISO/IEC 14496-12:2012 - 8.12.2 Original Format Box\nISOBox.prototype._boxProcessors['frma'] = function() {\n this._procField('data_format', 'uint', 32);\n};\n// ISO/IEC 14496-12:2012 - 4.3 File Type Box / 8.16.2 Segment Type Box\nISOBox.prototype._boxProcessors['ftyp'] =\nISOBox.prototype._boxProcessors['styp'] = function() {\n this._procField('major_brand', 'string', 4);\n this._procField('minor_version', 'uint', 32);\n var nbCompatibleBrands = -1;\n if (this._parsing) {\n nbCompatibleBrands = (this._raw.byteLength - (this._cursor.offset - this._raw.byteOffset)) / 4;\n }\n this._procFieldArray('compatible_brands', nbCompatibleBrands, 'string', 4);\n};\n\n// ISO/IEC 14496-12:2012 - 8.4.3 Handler Reference Box\nISOBox.prototype._boxProcessors['hdlr'] = function() {\n this._procFullBox();\n this._procField('pre_defined', 'uint', 32);\n this._procField('handler_type', 'string', 4);\n this._procFieldArray('reserved', 3, 'uint', 32);\n this._procField('name', 'string', -1);\n};\n\n// ISO/IEC 14496-12:2012 - 9.1.4.1 Identified media data box\nISOBox.prototype._boxProcessors['imda'] = function() {\n this._procField('imda_identifier', 'uint', 32);\n // until the end of the box\n this._procField('data', 'data', -1);\n};\n\n// ISO/IEC 14496-12:202x - 8.10.4 Track kind box\nISOBox.prototype._boxProcessors['kind'] = function() {\n this._procFullBox();\n\n this._procField('schemeURI', 'utf8string');\n this._procField('value', 'utf8string');\n};\n\n// ISO/IEC 14496-12:202x - 8.10.5 Label box\nISOBox.prototype._boxProcessors['labl'] = function() {\n this._procFullBox();\n this.is_group_label = (this.flags & 0x1) != 0;\n this._procField('label_id', 'uint', 16);\n this._procField('language', 'utf8string');\n this._procField('label', 'utf8string');\n};\n\n// ISO/IEC 14496-12:2012 - 8.1.1 Media Data Box\nISOBox.prototype._boxProcessors['mdat'] = function() {\n this._procField('data', 'data', -1);\n};\n\n// ISO/IEC 14496-12:2012 - 8.4.2 Media Header Box\nISOBox.prototype._boxProcessors['mdhd'] = function() {\n this._procFullBox();\n this._procField('creation_time', 'uint', (this.version == 1) ? 64 : 32);\n this._procField('modification_time', 'uint', (this.version == 1) ? 64 : 32);\n this._procField('timescale', 'uint', 32);\n this._procField('duration', 'uint', (this.version == 1) ? 64 : 32);\n if (!this._parsing && typeof this.language === 'string') {\n // In case of writing and language has been set as a string, then convert it into char codes array\n this.language = ((this.language.charCodeAt(0) - 0x60) << 10) |\n ((this.language.charCodeAt(1) - 0x60) << 5) |\n ((this.language.charCodeAt(2) - 0x60));\n }\n this._procField('language', 'uint', 16);\n if (this._parsing) {\n this.language = String.fromCharCode(((this.language >> 10) & 0x1F) + 0x60,\n ((this.language >> 5) & 0x1F) + 0x60,\n (this.language & 0x1F) + 0x60);\n }\n this._procField('pre_defined', 'uint', 16);\n};\n\n// ISO/IEC 14496-12:2012 - 8.8.2 Movie Extends Header Box\nISOBox.prototype._boxProcessors['mehd'] = function() {\n this._procFullBox();\n this._procField('fragment_duration', 'uint', (this.version == 1) ? 64 : 32);\n};\n\n// ISO/IEC 14496-12:202x - 8.11.1 Meta box\nISOBox.prototype._boxProcessors['meta'] = function() {\n this._procFullBox();\n\n /* rest of the boxes will be read by _parseContainerBox */\n};\n\n// ISO/IEC 14496-12:2012 - 8.8.5 Movie Fragment Header Box\nISOBox.prototype._boxProcessors['mfhd'] = function() {\n this._procFullBox();\n this._procField('sequence_number', 'uint', 32);\n};\n\n// ISO/IEC 14496-12:2012 - 8.8.11 Movie Fragment Random Access Box\nISOBox.prototype._boxProcessors['mfro'] = function() {\n this._procFullBox();\n this._procField('mfra_size', 'uint', 32); // Called mfra_size to distinguish from the normal \"size\" attribute of a box\n};\n\n\n// ISO/IEC 14496-12:2012 - 8.5.2.2 mp4a box (use AudioSampleEntry definition and naming)\nISOBox.prototype._boxProcessors['mp4a'] = ISOBox.prototype._boxProcessors['enca'] = function() {\n // SampleEntry fields\n this._procFieldArray('reserved1', 6, 'uint', 8);\n this._procField('data_reference_index', 'uint', 16);\n // AudioSampleEntry fields\n this._procFieldArray('reserved2', 2, 'uint', 32);\n this._procField('channelcount', 'uint', 16);\n this._procField('samplesize', 'uint', 16);\n this._procField('pre_defined', 'uint', 16);\n this._procField('reserved3', 'uint', 16);\n this._procField('samplerate', 'template', 32);\n // ESDescriptor fields\n this._procField('esds', 'data', -1);\n};\n\n// ISO/IEC 14496-12:2012 - 8.2.2 Movie Header Box\nISOBox.prototype._boxProcessors['mvhd'] = function() {\n this._procFullBox();\n this._procField('creation_time', 'uint', (this.version == 1) ? 64 : 32);\n this._procField('modification_time', 'uint', (this.version == 1) ? 64 : 32);\n this._procField('timescale', 'uint', 32);\n this._procField('duration', 'uint', (this.version == 1) ? 64 : 32);\n this._procField('rate', 'template', 32);\n this._procField('volume', 'template', 16);\n this._procField('reserved1', 'uint', 16);\n this._procFieldArray('reserved2', 2, 'uint', 32);\n this._procFieldArray('matrix', 9, 'template', 32);\n this._procFieldArray('pre_defined', 6,'uint', 32);\n this._procField('next_track_ID', 'uint', 32);\n};\n\n// ISO/IEC 14496-30:2014 - WebVTT Cue Payload Box.\nISOBox.prototype._boxProcessors['payl'] = function() {\n this._procField('cue_text', 'utf8');\n};\n\n// ISO/IEC 14496-12:2012 - 8.16.5 Producer Reference Time\nISOBox.prototype._boxProcessors['prft'] = function() {\n this._procFullBox();\n this._procField('reference_track_ID', 'uint', 32);\n this._procField('ntp_timestamp_sec', 'uint', 32);\n this._procField('ntp_timestamp_frac', 'uint', 32);\n this._procField('media_time', 'uint', (this.version == 1) ? 64 : 32);\n};\n\n// ISO/IEC 14496-12:202x - 8.18.4.1 Preselection group box\nISOBox.prototype._boxProcessors['prsl'] = function() {\n this._procFullBox();\n this._procField('group_id', 'uint', 32);\n this._procField('num_entities_in_group', 'uint', 32);\n this._procEntries('entities', this.num_entities_in_group, function(entry) {\n this._procEntryField(entry, 'entity_id', 'uint', 32);\n });\n if (this.flags & 0x1000) this._procField('preselection_tag', 'utf8string');\n if (this.flags & 0x2000) this._procField('selection_priority', 'uint', 8);\n if (this.flags & 0x4000) this._procField('interleaving_tag', 'utf8string');\n\n /* rest of the boxes will be read by _parseContainerBox */\n};\n\n//ISO/IEC 23001-7:2011 - 8.1 Protection System Specific Header Box\nISOBox.prototype._boxProcessors['pssh'] = function() {\n this._procFullBox();\n \n this._procFieldArray('SystemID', 16, 'uint', 8);\n this._procField('DataSize', 'uint', 32);\n this._procFieldArray('Data', this.DataSize, 'uint', 8);\n};\n// ISO/IEC 14496-12:2012 - 8.12.5 Scheme Type Box\nISOBox.prototype._boxProcessors['schm'] = function() {\n this._procFullBox();\n \n this._procField('scheme_type', 'uint', 32);\n this._procField('scheme_version', 'uint', 32);\n\n if (this.flags & 0x000001) {\n this._procField('scheme_uri', 'string', -1);\n }\n};\n// ISO/IEC 14496-12:2012 - 8.6.4.1 sdtp box \nISOBox.prototype._boxProcessors['sdtp'] = function() {\n this._procFullBox();\n\n var sample_count = -1;\n if (this._parsing) {\n sample_count = (this._raw.byteLength - (this._cursor.offset - this._raw.byteOffset));\n }\n\n this._procFieldArray('sample_dependency_table', sample_count, 'uint', 8);\n};\n\n// ISO/IEC 14496-12:2012 - 8.16.3 Segment Index Box\nISOBox.prototype._boxProcessors['sidx'] = function() {\n this._procFullBox();\n this._procField('reference_ID', 'uint', 32);\n this._procField('timescale', 'uint', 32);\n this._procField('earliest_presentation_time', 'uint', (this.version == 1) ? 64 : 32);\n this._procField('first_offset', 'uint', (this.version == 1) ? 64 : 32);\n this._procField('reserved', 'uint', 16);\n this._procField('reference_count', 'uint', 16);\n this._procEntries('references', this.reference_count, function(entry) {\n if (!this._parsing) {\n entry.reference = (entry.reference_type & 0x00000001) << 31;\n entry.reference |= (entry.referenced_size & 0x7FFFFFFF);\n entry.sap = (entry.starts_with_SAP & 0x00000001) << 31;\n entry.sap |= (entry.SAP_type & 0x00000003) << 28;\n entry.sap |= (entry.SAP_delta_time & 0x0FFFFFFF);\n }\n this._procEntryField(entry, 'reference', 'uint', 32);\n this._procEntryField(entry, 'subsegment_duration', 'uint', 32);\n this._procEntryField(entry, 'sap', 'uint', 32);\n if (this._parsing) {\n entry.reference_type = (entry.reference >> 31) & 0x00000001;\n entry.referenced_size = entry.reference & 0x7FFFFFFF;\n entry.starts_with_SAP = (entry.sap >> 31) & 0x00000001;\n entry.SAP_type = (entry.sap >> 28) & 0x00000007;\n entry.SAP_delta_time = (entry.sap & 0x0FFFFFFF);\n }\n });\n};\n\n// ISO/IEC 14496-12:2012 - 8.4.5.3 Sound Media Header Box\nISOBox.prototype._boxProcessors['smhd'] = function() {\n this._procFullBox();\n this._procField('balance', 'uint', 16);\n this._procField('reserved', 'uint', 16);\n};\n\n// ISO/IEC 14496-12:2012 - 8.16.4 Subsegment Index Box\nISOBox.prototype._boxProcessors['ssix'] = function() {\n this._procFullBox();\n this._procField('subsegment_count', 'uint', 32);\n this._procEntries('subsegments', this.subsegment_count, function(subsegment) {\n this._procEntryField(subsegment, 'ranges_count', 'uint', 32);\n this._procSubEntries(subsegment, 'ranges', subsegment.ranges_count, function(range) {\n this._procEntryField(range, 'level', 'uint', 8);\n this._procEntryField(range, 'range_size', 'uint', 24);\n });\n });\n};\n\n// ISO/IEC 14496-12:2012 - 8.5.2 Sample Description Box\nISOBox.prototype._boxProcessors['stsd'] = function() {\n this._procFullBox();\n this._procField('entry_count', 'uint', 32);\n this._procSubBoxes('entries', this.entry_count);\n};\n\n// ISO/IEC 14496-30:2014 - WebVTT Cue Settings Box.\nISOBox.prototype._boxProcessors['sttg'] = function() {\n this._procField('settings', 'utf8');\n};\n\n// ISO/IEC 14496-12:2012 - 8.6.1.2 Decoding Time To Sample Box\nISOBox.prototype._boxProcessors['stts'] = function() {\n this._procFullBox();\n this._procField('entry_count', 'uint', 32);\n this._procEntries('entries', this.entry_count, function(entry) {\n this._procEntryField(entry, 'sample_count', 'uint', 32);\n this._procEntryField(entry, 'sample_delta', 'uint', 32);\n });\n};\n\n// ISO/IEC 14496-12:2015 - 8.7.7 Sub-Sample Information Box\nISOBox.prototype._boxProcessors['subs'] = function () {\n this._procFullBox();\n this._procField('entry_count', 'uint', 32);\n this._procEntries('entries', this.entry_count, function(entry) {\n this._procEntryField(entry, 'sample_delta', 'uint', 32);\n this._procEntryField(entry, 'subsample_count', 'uint', 16);\n this._procSubEntries(entry, 'subsamples', entry.subsample_count, function(subsample) {\n this._procEntryField(subsample, 'subsample_size', 'uint', (this.version === 1) ? 32 : 16);\n this._procEntryField(subsample, 'subsample_priority', 'uint', 8);\n this._procEntryField(subsample, 'discardable', 'uint', 8);\n this._procEntryField(subsample, 'codec_specific_parameters', 'uint', 32);\n });\n });\n};\n\n//ISO/IEC 23001-7:2011 - 8.2 Track Encryption Box\nISOBox.prototype._boxProcessors['tenc'] = function() {\n this._procFullBox();\n\n this._procField('default_IsEncrypted', 'uint', 24);\n this._procField('default_IV_size', 'uint', 8);\n this._procFieldArray('default_KID', 16, 'uint', 8);\n };\n\n// ISO/IEC 14496-12:2012 - 8.8.12 Track Fragmnent Decode Time\nISOBox.prototype._boxProcessors['tfdt'] = function() {\n this._procFullBox();\n this._procField('baseMediaDecodeTime', 'uint', (this.version == 1) ? 64 : 32);\n};\n\n// ISO/IEC 14496-12:2012 - 8.8.7 Track Fragment Header Box\nISOBox.prototype._boxProcessors['tfhd'] = function() {\n this._procFullBox();\n this._procField('track_ID', 'uint', 32);\n if (this.flags & 0x01) this._procField('base_data_offset', 'uint', 64);\n if (this.flags & 0x02) this._procField('sample_description_offset', 'uint', 32);\n if (this.flags & 0x08) this._procField('default_sample_duration', 'uint', 32);\n if (this.flags & 0x10) this._procField('default_sample_size', 'uint', 32);\n if (this.flags & 0x20) this._procField('default_sample_flags', 'uint', 32);\n};\n\n// ISO/IEC 14496-12:2012 - 8.8.10 Track Fragment Random Access Box\nISOBox.prototype._boxProcessors['tfra'] = function() {\n this._procFullBox();\n this._procField('track_ID', 'uint', 32);\n if (!this._parsing) {\n this.reserved = 0;\n this.reserved |= (this.length_size_of_traf_num & 0x00000030) << 4;\n this.reserved |= (this.length_size_of_trun_num & 0x0000000C) << 2;\n this.reserved |= (this.length_size_of_sample_num & 0x00000003);\n }\n this._procField('reserved', 'uint', 32);\n if (this._parsing) {\n this.length_size_of_traf_num = (this.reserved & 0x00000030) >> 4;\n this.length_size_of_trun_num = (this.reserved & 0x0000000C) >> 2;\n this.length_size_of_sample_num = (this.reserved & 0x00000003);\n }\n this._procField('number_of_entry', 'uint', 32);\n this._procEntries('entries', this.number_of_entry, function(entry) {\n this._procEntryField(entry, 'time', 'uint', (this.version === 1) ? 64 : 32);\n this._procEntryField(entry, 'moof_offset', 'uint', (this.version === 1) ? 64 : 32);\n this._procEntryField(entry, 'traf_number', 'uint', (this.length_size_of_traf_num + 1) * 8);\n this._procEntryField(entry, 'trun_number', 'uint', (this.length_size_of_trun_num + 1) * 8);\n this._procEntryField(entry, 'sample_number', 'uint', (this.length_size_of_sample_num + 1) * 8);\n });\n};\n\n// ISO/IEC 14496-12:2012 - 8.3.2 Track Header Box\nISOBox.prototype._boxProcessors['tkhd'] = function() {\n this._procFullBox();\n this._procField('creation_time', 'uint', (this.version == 1) ? 64 : 32);\n this._procField('modification_time', 'uint', (this.version == 1) ? 64 : 32);\n this._procField('track_ID', 'uint', 32);\n this._procField('reserved1', 'uint', 32);\n this._procField('duration', 'uint', (this.version == 1) ? 64 : 32);\n this._procFieldArray('reserved2', 2, 'uint', 32);\n this._procField('layer', 'uint', 16);\n this._procField('alternate_group', 'uint', 16);\n this._procField('volume', 'template', 16);\n this._procField('reserved3', 'uint', 16);\n this._procFieldArray('matrix', 9, 'template', 32);\n this._procField('width', 'template', 32);\n this._procField('height', 'template', 32);\n};\n\n// ISO/IEC 14496-12:2012 - 8.8.3 Track Extends Box\nISOBox.prototype._boxProcessors['trex'] = function() {\n this._procFullBox();\n this._procField('track_ID', 'uint', 32);\n this._procField('default_sample_description_index', 'uint', 32);\n this._procField('default_sample_duration', 'uint', 32);\n this._procField('default_sample_size', 'uint', 32);\n this._procField('default_sample_flags', 'uint', 32);\n};\n\n// ISO/IEC 14496-12:2012 - 8.8.8 Track Run Box\n// Note: the 'trun' box has a direct relation to the 'tfhd' box for defaults.\n// These defaults are not set explicitly here, but are left to resolve for the user.\nISOBox.prototype._boxProcessors['trun'] = function() {\n this._procFullBox();\n this._procField('sample_count', 'uint', 32);\n if (this.flags & 0x1) this._procField('data_offset', 'int', 32);\n if (this.flags & 0x4) this._procField('first_sample_flags', 'uint', 32);\n this._procEntries('samples', this.sample_count, function(sample) {\n if (this.flags & 0x100) this._procEntryField(sample, 'sample_duration', 'uint', 32);\n if (this.flags & 0x200) this._procEntryField(sample, 'sample_size', 'uint', 32);\n if (this.flags & 0x400) this._procEntryField(sample, 'sample_flags', 'uint', 32);\n if (this.flags & 0x800) this._procEntryField(sample, 'sample_composition_time_offset', (this.version === 1) ? 'int' : 'uint', 32);\n });\n};\n\n// ISO/IEC 14496-12:2012 - 8.7.2 Data Reference Box\nISOBox.prototype._boxProcessors['url '] = ISOBox.prototype._boxProcessors['urn '] = function() {\n this._procFullBox();\n if (this.type === 'urn ') {\n this._procField('name', 'string', -1);\n }\n this._procField('location', 'string', -1);\n};\n\n// ISO/IEC 14496-30:2014 - WebVTT Source Label Box\nISOBox.prototype._boxProcessors['vlab'] = function() {\n this._procField('source_label', 'utf8');\n};\n\n// ISO/IEC 14496-12:2012 - 8.4.5.2 Video Media Header Box\nISOBox.prototype._boxProcessors['vmhd'] = function() {\n this._procFullBox();\n this._procField('graphicsmode', 'uint', 16);\n this._procFieldArray('opcolor', 3, 'uint', 16);\n};\n\n// ISO/IEC 14496-30:2014 - WebVTT Configuration Box\nISOBox.prototype._boxProcessors['vttC'] = function() {\n this._procField('config', 'utf8');\n};\n\n// ISO/IEC 14496-30:2014 - WebVTT Empty Sample Box\nISOBox.prototype._boxProcessors['vtte'] = function() {\n // Nothing should happen here.\n};\n","var parent = require('../../stable/url-search-params');\n\nmodule.exports = parent;\n","var parent = require('../../stable/url');\n\nmodule.exports = parent;\n","var global = require('../internals/global');\nvar isCallable = require('../internals/is-callable');\nvar tryToString = require('../internals/try-to-string');\n\nvar TypeError = global.TypeError;\n\n// `Assert: IsCallable(argument) is true`\nmodule.exports = function (argument) {\n if (isCallable(argument)) return argument;\n throw TypeError(tryToString(argument) + ' is not a function');\n};\n","var global = require('../internals/global');\nvar isCallable = require('../internals/is-callable');\n\nvar String = global.String;\nvar TypeError = global.TypeError;\n\nmodule.exports = function (argument) {\n if (typeof argument == 'object' || isCallable(argument)) return argument;\n throw TypeError(\"Can't set \" + String(argument) + ' as a prototype');\n};\n","var wellKnownSymbol = require('../internals/well-known-symbol');\nvar create = require('../internals/object-create');\nvar definePropertyModule = require('../internals/object-define-property');\n\nvar UNSCOPABLES = wellKnownSymbol('unscopables');\nvar ArrayPrototype = Array.prototype;\n\n// Array.prototype[@@unscopables]\n// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables\nif (ArrayPrototype[UNSCOPABLES] == undefined) {\n definePropertyModule.f(ArrayPrototype, UNSCOPABLES, {\n configurable: true,\n value: create(null)\n });\n}\n\n// add a key to Array.prototype[@@unscopables]\nmodule.exports = function (key) {\n ArrayPrototype[UNSCOPABLES][key] = true;\n};\n","var global = require('../internals/global');\nvar isPrototypeOf = require('../internals/object-is-prototype-of');\n\nvar TypeError = global.TypeError;\n\nmodule.exports = function (it, Prototype) {\n if (isPrototypeOf(Prototype, it)) return it;\n throw TypeError('Incorrect invocation');\n};\n","var global = require('../internals/global');\nvar isObject = require('../internals/is-object');\n\nvar String = global.String;\nvar TypeError = global.TypeError;\n\n// `Assert: Type(argument) is Object`\nmodule.exports = function (argument) {\n if (isObject(argument)) return argument;\n throw TypeError(String(argument) + ' is not an object');\n};\n","'use strict';\nvar global = require('../internals/global');\nvar bind = require('../internals/function-bind-context');\nvar call = require('../internals/function-call');\nvar toObject = require('../internals/to-object');\nvar callWithSafeIterationClosing = require('../internals/call-with-safe-iteration-closing');\nvar isArrayIteratorMethod = require('../internals/is-array-iterator-method');\nvar isConstructor = require('../internals/is-constructor');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar createProperty = require('../internals/create-property');\nvar getIterator = require('../internals/get-iterator');\nvar getIteratorMethod = require('../internals/get-iterator-method');\n\nvar Array = global.Array;\n\n// `Array.from` method implementation\n// https://tc39.es/ecma262/#sec-array.from\nmodule.exports = function from(arrayLike /* , mapfn = undefined, thisArg = undefined */) {\n var O = toObject(arrayLike);\n var IS_CONSTRUCTOR = isConstructor(this);\n var argumentsLength = arguments.length;\n var mapfn = argumentsLength > 1 ? arguments[1] : undefined;\n var mapping = mapfn !== undefined;\n if (mapping) mapfn = bind(mapfn, argumentsLength > 2 ? arguments[2] : undefined);\n var iteratorMethod = getIteratorMethod(O);\n var index = 0;\n var length, result, step, iterator, next, value;\n // if the target is not iterable or it's an array with the default iterator - use a simple case\n if (iteratorMethod && !(this == Array && isArrayIteratorMethod(iteratorMethod))) {\n iterator = getIterator(O, iteratorMethod);\n next = iterator.next;\n result = IS_CONSTRUCTOR ? new this() : [];\n for (;!(step = call(next, iterator)).done; index++) {\n value = mapping ? callWithSafeIterationClosing(iterator, mapfn, [step.value, index], true) : step.value;\n createProperty(result, index, value);\n }\n } else {\n length = lengthOfArrayLike(O);\n result = IS_CONSTRUCTOR ? new this(length) : Array(length);\n for (;length > index; index++) {\n value = mapping ? mapfn(O[index], index) : O[index];\n createProperty(result, index, value);\n }\n }\n result.length = index;\n return result;\n};\n","var toIndexedObject = require('../internals/to-indexed-object');\nvar toAbsoluteIndex = require('../internals/to-absolute-index');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\n\n// `Array.prototype.{ indexOf, includes }` methods implementation\nvar createMethod = function (IS_INCLUDES) {\n return function ($this, el, fromIndex) {\n var O = toIndexedObject($this);\n var length = lengthOfArrayLike(O);\n var index = toAbsoluteIndex(fromIndex, length);\n var value;\n // Array#includes uses SameValueZero equality algorithm\n // eslint-disable-next-line no-self-compare -- NaN check\n if (IS_INCLUDES && el != el) while (length > index) {\n value = O[index++];\n // eslint-disable-next-line no-self-compare -- NaN check\n if (value != value) return true;\n // Array#indexOf ignores holes, Array#includes - not\n } else for (;length > index; index++) {\n if ((IS_INCLUDES || index in O) && O[index] === el) return IS_INCLUDES || index || 0;\n } return !IS_INCLUDES && -1;\n };\n};\n\nmodule.exports = {\n // `Array.prototype.includes` method\n // https://tc39.es/ecma262/#sec-array.prototype.includes\n includes: createMethod(true),\n // `Array.prototype.indexOf` method\n // https://tc39.es/ecma262/#sec-array.prototype.indexof\n indexOf: createMethod(false)\n};\n","var global = require('../internals/global');\nvar toAbsoluteIndex = require('../internals/to-absolute-index');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar createProperty = require('../internals/create-property');\n\nvar Array = global.Array;\nvar max = Math.max;\n\nmodule.exports = function (O, start, end) {\n var length = lengthOfArrayLike(O);\n var k = toAbsoluteIndex(start, length);\n var fin = toAbsoluteIndex(end === undefined ? length : end, length);\n var result = Array(max(fin - k, 0));\n for (var n = 0; k < fin; k++, n++) createProperty(result, n, O[k]);\n result.length = n;\n return result;\n};\n","var arraySlice = require('../internals/array-slice-simple');\n\nvar floor = Math.floor;\n\nvar mergeSort = function (array, comparefn) {\n var length = array.length;\n var middle = floor(length / 2);\n return length < 8 ? insertionSort(array, comparefn) : merge(\n array,\n mergeSort(arraySlice(array, 0, middle), comparefn),\n mergeSort(arraySlice(array, middle), comparefn),\n comparefn\n );\n};\n\nvar insertionSort = function (array, comparefn) {\n var length = array.length;\n var i = 1;\n var element, j;\n\n while (i < length) {\n j = i;\n element = array[i];\n while (j && comparefn(array[j - 1], element) > 0) {\n array[j] = array[--j];\n }\n if (j !== i++) array[j] = element;\n } return array;\n};\n\nvar merge = function (array, left, right, comparefn) {\n var llength = left.length;\n var rlength = right.length;\n var lindex = 0;\n var rindex = 0;\n\n while (lindex < llength || rindex < rlength) {\n array[lindex + rindex] = (lindex < llength && rindex < rlength)\n ? comparefn(left[lindex], right[rindex]) <= 0 ? left[lindex++] : right[rindex++]\n : lindex < llength ? left[lindex++] : right[rindex++];\n } return array;\n};\n\nmodule.exports = mergeSort;\n","var anObject = require('../internals/an-object');\nvar iteratorClose = require('../internals/iterator-close');\n\n// call something on iterator step with safe closing on error\nmodule.exports = function (iterator, fn, value, ENTRIES) {\n try {\n return ENTRIES ? fn(anObject(value)[0], value[1]) : fn(value);\n } catch (error) {\n iteratorClose(iterator, 'throw', error);\n }\n};\n","var uncurryThis = require('../internals/function-uncurry-this');\n\nvar toString = uncurryThis({}.toString);\nvar stringSlice = uncurryThis(''.slice);\n\nmodule.exports = function (it) {\n return stringSlice(toString(it), 8, -1);\n};\n","var global = require('../internals/global');\nvar TO_STRING_TAG_SUPPORT = require('../internals/to-string-tag-support');\nvar isCallable = require('../internals/is-callable');\nvar classofRaw = require('../internals/classof-raw');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\nvar Object = global.Object;\n\n// ES3 wrong here\nvar CORRECT_ARGUMENTS = classofRaw(function () { return arguments; }()) == 'Arguments';\n\n// fallback for IE11 Script Access Denied error\nvar tryGet = function (it, key) {\n try {\n return it[key];\n } catch (error) { /* empty */ }\n};\n\n// getting tag from ES6+ `Object.prototype.toString`\nmodule.exports = TO_STRING_TAG_SUPPORT ? classofRaw : function (it) {\n var O, tag, result;\n return it === undefined ? 'Undefined' : it === null ? 'Null'\n // @@toStringTag case\n : typeof (tag = tryGet(O = Object(it), TO_STRING_TAG)) == 'string' ? tag\n // builtinTag case\n : CORRECT_ARGUMENTS ? classofRaw(O)\n // ES3 arguments fallback\n : (result = classofRaw(O)) == 'Object' && isCallable(O.callee) ? 'Arguments' : result;\n};\n","var hasOwn = require('../internals/has-own-property');\nvar ownKeys = require('../internals/own-keys');\nvar getOwnPropertyDescriptorModule = require('../internals/object-get-own-property-descriptor');\nvar definePropertyModule = require('../internals/object-define-property');\n\nmodule.exports = function (target, source) {\n var keys = ownKeys(source);\n var defineProperty = definePropertyModule.f;\n var getOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f;\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i];\n if (!hasOwn(target, key)) defineProperty(target, key, getOwnPropertyDescriptor(source, key));\n }\n};\n","var fails = require('../internals/fails');\n\nmodule.exports = !fails(function () {\n function F() { /* empty */ }\n F.prototype.constructor = null;\n // eslint-disable-next-line es/no-object-getprototypeof -- required for testing\n return Object.getPrototypeOf(new F()) !== F.prototype;\n});\n","'use strict';\nvar IteratorPrototype = require('../internals/iterators-core').IteratorPrototype;\nvar create = require('../internals/object-create');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar Iterators = require('../internals/iterators');\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (IteratorConstructor, NAME, next, ENUMERABLE_NEXT) {\n var TO_STRING_TAG = NAME + ' Iterator';\n IteratorConstructor.prototype = create(IteratorPrototype, { next: createPropertyDescriptor(+!ENUMERABLE_NEXT, next) });\n setToStringTag(IteratorConstructor, TO_STRING_TAG, false, true);\n Iterators[TO_STRING_TAG] = returnThis;\n return IteratorConstructor;\n};\n","var DESCRIPTORS = require('../internals/descriptors');\nvar definePropertyModule = require('../internals/object-define-property');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\n\nmodule.exports = DESCRIPTORS ? function (object, key, value) {\n return definePropertyModule.f(object, key, createPropertyDescriptor(1, value));\n} : function (object, key, value) {\n object[key] = value;\n return object;\n};\n","module.exports = function (bitmap, value) {\n return {\n enumerable: !(bitmap & 1),\n configurable: !(bitmap & 2),\n writable: !(bitmap & 4),\n value: value\n };\n};\n","'use strict';\nvar toPropertyKey = require('../internals/to-property-key');\nvar definePropertyModule = require('../internals/object-define-property');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\n\nmodule.exports = function (object, key, value) {\n var propertyKey = toPropertyKey(key);\n if (propertyKey in object) definePropertyModule.f(object, propertyKey, createPropertyDescriptor(0, value));\n else object[propertyKey] = value;\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar call = require('../internals/function-call');\nvar IS_PURE = require('../internals/is-pure');\nvar FunctionName = require('../internals/function-name');\nvar isCallable = require('../internals/is-callable');\nvar createIteratorConstructor = require('../internals/create-iterator-constructor');\nvar getPrototypeOf = require('../internals/object-get-prototype-of');\nvar setPrototypeOf = require('../internals/object-set-prototype-of');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar redefine = require('../internals/redefine');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar Iterators = require('../internals/iterators');\nvar IteratorsCore = require('../internals/iterators-core');\n\nvar PROPER_FUNCTION_NAME = FunctionName.PROPER;\nvar CONFIGURABLE_FUNCTION_NAME = FunctionName.CONFIGURABLE;\nvar IteratorPrototype = IteratorsCore.IteratorPrototype;\nvar BUGGY_SAFARI_ITERATORS = IteratorsCore.BUGGY_SAFARI_ITERATORS;\nvar ITERATOR = wellKnownSymbol('iterator');\nvar KEYS = 'keys';\nvar VALUES = 'values';\nvar ENTRIES = 'entries';\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (Iterable, NAME, IteratorConstructor, next, DEFAULT, IS_SET, FORCED) {\n createIteratorConstructor(IteratorConstructor, NAME, next);\n\n var getIterationMethod = function (KIND) {\n if (KIND === DEFAULT && defaultIterator) return defaultIterator;\n if (!BUGGY_SAFARI_ITERATORS && KIND in IterablePrototype) return IterablePrototype[KIND];\n switch (KIND) {\n case KEYS: return function keys() { return new IteratorConstructor(this, KIND); };\n case VALUES: return function values() { return new IteratorConstructor(this, KIND); };\n case ENTRIES: return function entries() { return new IteratorConstructor(this, KIND); };\n } return function () { return new IteratorConstructor(this); };\n };\n\n var TO_STRING_TAG = NAME + ' Iterator';\n var INCORRECT_VALUES_NAME = false;\n var IterablePrototype = Iterable.prototype;\n var nativeIterator = IterablePrototype[ITERATOR]\n || IterablePrototype['@@iterator']\n || DEFAULT && IterablePrototype[DEFAULT];\n var defaultIterator = !BUGGY_SAFARI_ITERATORS && nativeIterator || getIterationMethod(DEFAULT);\n var anyNativeIterator = NAME == 'Array' ? IterablePrototype.entries || nativeIterator : nativeIterator;\n var CurrentIteratorPrototype, methods, KEY;\n\n // fix native\n if (anyNativeIterator) {\n CurrentIteratorPrototype = getPrototypeOf(anyNativeIterator.call(new Iterable()));\n if (CurrentIteratorPrototype !== Object.prototype && CurrentIteratorPrototype.next) {\n if (!IS_PURE && getPrototypeOf(CurrentIteratorPrototype) !== IteratorPrototype) {\n if (setPrototypeOf) {\n setPrototypeOf(CurrentIteratorPrototype, IteratorPrototype);\n } else if (!isCallable(CurrentIteratorPrototype[ITERATOR])) {\n redefine(CurrentIteratorPrototype, ITERATOR, returnThis);\n }\n }\n // Set @@toStringTag to native iterators\n setToStringTag(CurrentIteratorPrototype, TO_STRING_TAG, true, true);\n if (IS_PURE) Iterators[TO_STRING_TAG] = returnThis;\n }\n }\n\n // fix Array.prototype.{ values, @@iterator }.name in V8 / FF\n if (PROPER_FUNCTION_NAME && DEFAULT == VALUES && nativeIterator && nativeIterator.name !== VALUES) {\n if (!IS_PURE && CONFIGURABLE_FUNCTION_NAME) {\n createNonEnumerableProperty(IterablePrototype, 'name', VALUES);\n } else {\n INCORRECT_VALUES_NAME = true;\n defaultIterator = function values() { return call(nativeIterator, this); };\n }\n }\n\n // export additional methods\n if (DEFAULT) {\n methods = {\n values: getIterationMethod(VALUES),\n keys: IS_SET ? defaultIterator : getIterationMethod(KEYS),\n entries: getIterationMethod(ENTRIES)\n };\n if (FORCED) for (KEY in methods) {\n if (BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME || !(KEY in IterablePrototype)) {\n redefine(IterablePrototype, KEY, methods[KEY]);\n }\n } else $({ target: NAME, proto: true, forced: BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME }, methods);\n }\n\n // define iterator\n if ((!IS_PURE || FORCED) && IterablePrototype[ITERATOR] !== defaultIterator) {\n redefine(IterablePrototype, ITERATOR, defaultIterator, { name: DEFAULT });\n }\n Iterators[NAME] = defaultIterator;\n\n return methods;\n};\n","var fails = require('../internals/fails');\n\n// Detect IE8's incomplete defineProperty implementation\nmodule.exports = !fails(function () {\n // eslint-disable-next-line es/no-object-defineproperty -- required for testing\n return Object.defineProperty({}, 1, { get: function () { return 7; } })[1] != 7;\n});\n","var global = require('../internals/global');\nvar isObject = require('../internals/is-object');\n\nvar document = global.document;\n// typeof document.createElement is 'object' in old IE\nvar EXISTS = isObject(document) && isObject(document.createElement);\n\nmodule.exports = function (it) {\n return EXISTS ? document.createElement(it) : {};\n};\n","// iterable DOM collections\n// flag - `iterable` interface - 'entries', 'keys', 'values', 'forEach' methods\nmodule.exports = {\n CSSRuleList: 0,\n CSSStyleDeclaration: 0,\n CSSValueList: 0,\n ClientRectList: 0,\n DOMRectList: 0,\n DOMStringList: 0,\n DOMTokenList: 1,\n DataTransferItemList: 0,\n FileList: 0,\n HTMLAllCollection: 0,\n HTMLCollection: 0,\n HTMLFormElement: 0,\n HTMLSelectElement: 0,\n MediaList: 0,\n MimeTypeArray: 0,\n NamedNodeMap: 0,\n NodeList: 1,\n PaintRequestList: 0,\n Plugin: 0,\n PluginArray: 0,\n SVGLengthList: 0,\n SVGNumberList: 0,\n SVGPathSegList: 0,\n SVGPointList: 0,\n SVGStringList: 0,\n SVGTransformList: 0,\n SourceBufferList: 0,\n StyleSheetList: 0,\n TextTrackCueList: 0,\n TextTrackList: 0,\n TouchList: 0\n};\n","// in old WebKit versions, `element.classList` is not an instance of global `DOMTokenList`\nvar documentCreateElement = require('../internals/document-create-element');\n\nvar classList = documentCreateElement('span').classList;\nvar DOMTokenListPrototype = classList && classList.constructor && classList.constructor.prototype;\n\nmodule.exports = DOMTokenListPrototype === Object.prototype ? undefined : DOMTokenListPrototype;\n","var getBuiltIn = require('../internals/get-built-in');\n\nmodule.exports = getBuiltIn('navigator', 'userAgent') || '';\n","var global = require('../internals/global');\nvar userAgent = require('../internals/engine-user-agent');\n\nvar process = global.process;\nvar Deno = global.Deno;\nvar versions = process && process.versions || Deno && Deno.version;\nvar v8 = versions && versions.v8;\nvar match, version;\n\nif (v8) {\n match = v8.split('.');\n // in old Chrome, versions of V8 isn't V8 = Chrome / 10\n // but their correct versions are not interesting for us\n version = match[0] > 0 && match[0] < 4 ? 1 : +(match[0] + match[1]);\n}\n\n// BrowserFS NodeJS `process` polyfill incorrectly set `.v8` to `0.0`\n// so check `userAgent` even if `.v8` exists, but 0\nif (!version && userAgent) {\n match = userAgent.match(/Edge\\/(\\d+)/);\n if (!match || match[1] >= 74) {\n match = userAgent.match(/Chrome\\/(\\d+)/);\n if (match) version = +match[1];\n }\n}\n\nmodule.exports = version;\n","// IE8- don't enum bug keys\nmodule.exports = [\n 'constructor',\n 'hasOwnProperty',\n 'isPrototypeOf',\n 'propertyIsEnumerable',\n 'toLocaleString',\n 'toString',\n 'valueOf'\n];\n","var global = require('../internals/global');\nvar getOwnPropertyDescriptor = require('../internals/object-get-own-property-descriptor').f;\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar redefine = require('../internals/redefine');\nvar setGlobal = require('../internals/set-global');\nvar copyConstructorProperties = require('../internals/copy-constructor-properties');\nvar isForced = require('../internals/is-forced');\n\n/*\n options.target - name of the target object\n options.global - target is the global object\n options.stat - export as static methods of target\n options.proto - export as prototype methods of target\n options.real - real prototype method for the `pure` version\n options.forced - export even if the native feature is available\n options.bind - bind methods to the target, required for the `pure` version\n options.wrap - wrap constructors to preventing global pollution, required for the `pure` version\n options.unsafe - use the simple assignment of property instead of delete + defineProperty\n options.sham - add a flag to not completely full polyfills\n options.enumerable - export as enumerable property\n options.noTargetGet - prevent calling a getter on target\n options.name - the .name of the function if it does not match the key\n*/\nmodule.exports = function (options, source) {\n var TARGET = options.target;\n var GLOBAL = options.global;\n var STATIC = options.stat;\n var FORCED, target, key, targetProperty, sourceProperty, descriptor;\n if (GLOBAL) {\n target = global;\n } else if (STATIC) {\n target = global[TARGET] || setGlobal(TARGET, {});\n } else {\n target = (global[TARGET] || {}).prototype;\n }\n if (target) for (key in source) {\n sourceProperty = source[key];\n if (options.noTargetGet) {\n descriptor = getOwnPropertyDescriptor(target, key);\n targetProperty = descriptor && descriptor.value;\n } else targetProperty = target[key];\n FORCED = isForced(GLOBAL ? key : TARGET + (STATIC ? '.' : '#') + key, options.forced);\n // contained in target\n if (!FORCED && targetProperty !== undefined) {\n if (typeof sourceProperty == typeof targetProperty) continue;\n copyConstructorProperties(sourceProperty, targetProperty);\n }\n // add a flag to not completely full polyfills\n if (options.sham || (targetProperty && targetProperty.sham)) {\n createNonEnumerableProperty(sourceProperty, 'sham', true);\n }\n // extend global\n redefine(target, key, sourceProperty, options);\n }\n};\n","module.exports = function (exec) {\n try {\n return !!exec();\n } catch (error) {\n return true;\n }\n};\n","var uncurryThis = require('../internals/function-uncurry-this');\nvar aCallable = require('../internals/a-callable');\n\nvar bind = uncurryThis(uncurryThis.bind);\n\n// optional / simple context binding\nmodule.exports = function (fn, that) {\n aCallable(fn);\n return that === undefined ? fn : bind ? bind(fn, that) : function (/* ...args */) {\n return fn.apply(that, arguments);\n };\n};\n","var call = Function.prototype.call;\n\nmodule.exports = call.bind ? call.bind(call) : function () {\n return call.apply(call, arguments);\n};\n","var DESCRIPTORS = require('../internals/descriptors');\nvar hasOwn = require('../internals/has-own-property');\n\nvar FunctionPrototype = Function.prototype;\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar getDescriptor = DESCRIPTORS && Object.getOwnPropertyDescriptor;\n\nvar EXISTS = hasOwn(FunctionPrototype, 'name');\n// additional protection from minified / mangled / dropped function names\nvar PROPER = EXISTS && (function something() { /* empty */ }).name === 'something';\nvar CONFIGURABLE = EXISTS && (!DESCRIPTORS || (DESCRIPTORS && getDescriptor(FunctionPrototype, 'name').configurable));\n\nmodule.exports = {\n EXISTS: EXISTS,\n PROPER: PROPER,\n CONFIGURABLE: CONFIGURABLE\n};\n","var FunctionPrototype = Function.prototype;\nvar bind = FunctionPrototype.bind;\nvar call = FunctionPrototype.call;\nvar callBind = bind && bind.bind(call);\n\nmodule.exports = bind ? function (fn) {\n return fn && callBind(call, fn);\n} : function (fn) {\n return fn && function () {\n return call.apply(fn, arguments);\n };\n};\n","var global = require('../internals/global');\nvar isCallable = require('../internals/is-callable');\n\nvar aFunction = function (argument) {\n return isCallable(argument) ? argument : undefined;\n};\n\nmodule.exports = function (namespace, method) {\n return arguments.length < 2 ? aFunction(global[namespace]) : global[namespace] && global[namespace][method];\n};\n","var classof = require('../internals/classof');\nvar getMethod = require('../internals/get-method');\nvar Iterators = require('../internals/iterators');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar ITERATOR = wellKnownSymbol('iterator');\n\nmodule.exports = function (it) {\n if (it != undefined) return getMethod(it, ITERATOR)\n || getMethod(it, '@@iterator')\n || Iterators[classof(it)];\n};\n","var global = require('../internals/global');\nvar call = require('../internals/function-call');\nvar aCallable = require('../internals/a-callable');\nvar anObject = require('../internals/an-object');\nvar tryToString = require('../internals/try-to-string');\nvar getIteratorMethod = require('../internals/get-iterator-method');\n\nvar TypeError = global.TypeError;\n\nmodule.exports = function (argument, usingIterator) {\n var iteratorMethod = arguments.length < 2 ? getIteratorMethod(argument) : usingIterator;\n if (aCallable(iteratorMethod)) return anObject(call(iteratorMethod, argument));\n throw TypeError(tryToString(argument) + ' is not iterable');\n};\n","var aCallable = require('../internals/a-callable');\n\n// `GetMethod` abstract operation\n// https://tc39.es/ecma262/#sec-getmethod\nmodule.exports = function (V, P) {\n var func = V[P];\n return func == null ? undefined : aCallable(func);\n};\n","var check = function (it) {\n return it && it.Math == Math && it;\n};\n\n// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nmodule.exports =\n // eslint-disable-next-line es/no-global-this -- safe\n check(typeof globalThis == 'object' && globalThis) ||\n check(typeof window == 'object' && window) ||\n // eslint-disable-next-line no-restricted-globals -- safe\n check(typeof self == 'object' && self) ||\n check(typeof global == 'object' && global) ||\n // eslint-disable-next-line no-new-func -- fallback\n (function () { return this; })() || Function('return this')();\n","var uncurryThis = require('../internals/function-uncurry-this');\nvar toObject = require('../internals/to-object');\n\nvar hasOwnProperty = uncurryThis({}.hasOwnProperty);\n\n// `HasOwnProperty` abstract operation\n// https://tc39.es/ecma262/#sec-hasownproperty\nmodule.exports = Object.hasOwn || function hasOwn(it, key) {\n return hasOwnProperty(toObject(it), key);\n};\n","module.exports = {};\n","var getBuiltIn = require('../internals/get-built-in');\n\nmodule.exports = getBuiltIn('document', 'documentElement');\n","var DESCRIPTORS = require('../internals/descriptors');\nvar fails = require('../internals/fails');\nvar createElement = require('../internals/document-create-element');\n\n// Thank's IE8 for his funny defineProperty\nmodule.exports = !DESCRIPTORS && !fails(function () {\n // eslint-disable-next-line es/no-object-defineproperty -- requied for testing\n return Object.defineProperty(createElement('div'), 'a', {\n get: function () { return 7; }\n }).a != 7;\n});\n","var global = require('../internals/global');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar fails = require('../internals/fails');\nvar classof = require('../internals/classof-raw');\n\nvar Object = global.Object;\nvar split = uncurryThis(''.split);\n\n// fallback for non-array-like ES3 and non-enumerable old V8 strings\nmodule.exports = fails(function () {\n // throws an error in rhino, see https://github.com/mozilla/rhino/issues/346\n // eslint-disable-next-line no-prototype-builtins -- safe\n return !Object('z').propertyIsEnumerable(0);\n}) ? function (it) {\n return classof(it) == 'String' ? split(it, '') : Object(it);\n} : Object;\n","var uncurryThis = require('../internals/function-uncurry-this');\nvar isCallable = require('../internals/is-callable');\nvar store = require('../internals/shared-store');\n\nvar functionToString = uncurryThis(Function.toString);\n\n// this helper broken in `core-js@3.4.1-3.4.4`, so we can't use `shared` helper\nif (!isCallable(store.inspectSource)) {\n store.inspectSource = function (it) {\n return functionToString(it);\n };\n}\n\nmodule.exports = store.inspectSource;\n","var NATIVE_WEAK_MAP = require('../internals/native-weak-map');\nvar global = require('../internals/global');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar isObject = require('../internals/is-object');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar hasOwn = require('../internals/has-own-property');\nvar shared = require('../internals/shared-store');\nvar sharedKey = require('../internals/shared-key');\nvar hiddenKeys = require('../internals/hidden-keys');\n\nvar OBJECT_ALREADY_INITIALIZED = 'Object already initialized';\nvar TypeError = global.TypeError;\nvar WeakMap = global.WeakMap;\nvar set, get, has;\n\nvar enforce = function (it) {\n return has(it) ? get(it) : set(it, {});\n};\n\nvar getterFor = function (TYPE) {\n return function (it) {\n var state;\n if (!isObject(it) || (state = get(it)).type !== TYPE) {\n throw TypeError('Incompatible receiver, ' + TYPE + ' required');\n } return state;\n };\n};\n\nif (NATIVE_WEAK_MAP || shared.state) {\n var store = shared.state || (shared.state = new WeakMap());\n var wmget = uncurryThis(store.get);\n var wmhas = uncurryThis(store.has);\n var wmset = uncurryThis(store.set);\n set = function (it, metadata) {\n if (wmhas(store, it)) throw new TypeError(OBJECT_ALREADY_INITIALIZED);\n metadata.facade = it;\n wmset(store, it, metadata);\n return metadata;\n };\n get = function (it) {\n return wmget(store, it) || {};\n };\n has = function (it) {\n return wmhas(store, it);\n };\n} else {\n var STATE = sharedKey('state');\n hiddenKeys[STATE] = true;\n set = function (it, metadata) {\n if (hasOwn(it, STATE)) throw new TypeError(OBJECT_ALREADY_INITIALIZED);\n metadata.facade = it;\n createNonEnumerableProperty(it, STATE, metadata);\n return metadata;\n };\n get = function (it) {\n return hasOwn(it, STATE) ? it[STATE] : {};\n };\n has = function (it) {\n return hasOwn(it, STATE);\n };\n}\n\nmodule.exports = {\n set: set,\n get: get,\n has: has,\n enforce: enforce,\n getterFor: getterFor\n};\n","var wellKnownSymbol = require('../internals/well-known-symbol');\nvar Iterators = require('../internals/iterators');\n\nvar ITERATOR = wellKnownSymbol('iterator');\nvar ArrayPrototype = Array.prototype;\n\n// check on default Array iterator\nmodule.exports = function (it) {\n return it !== undefined && (Iterators.Array === it || ArrayPrototype[ITERATOR] === it);\n};\n","// `IsCallable` abstract operation\n// https://tc39.es/ecma262/#sec-iscallable\nmodule.exports = function (argument) {\n return typeof argument == 'function';\n};\n","var uncurryThis = require('../internals/function-uncurry-this');\nvar fails = require('../internals/fails');\nvar isCallable = require('../internals/is-callable');\nvar classof = require('../internals/classof');\nvar getBuiltIn = require('../internals/get-built-in');\nvar inspectSource = require('../internals/inspect-source');\n\nvar noop = function () { /* empty */ };\nvar empty = [];\nvar construct = getBuiltIn('Reflect', 'construct');\nvar constructorRegExp = /^\\s*(?:class|function)\\b/;\nvar exec = uncurryThis(constructorRegExp.exec);\nvar INCORRECT_TO_STRING = !constructorRegExp.exec(noop);\n\nvar isConstructorModern = function (argument) {\n if (!isCallable(argument)) return false;\n try {\n construct(noop, empty, argument);\n return true;\n } catch (error) {\n return false;\n }\n};\n\nvar isConstructorLegacy = function (argument) {\n if (!isCallable(argument)) return false;\n switch (classof(argument)) {\n case 'AsyncFunction':\n case 'GeneratorFunction':\n case 'AsyncGeneratorFunction': return false;\n // we can't check .prototype since constructors produced by .bind haven't it\n } return INCORRECT_TO_STRING || !!exec(constructorRegExp, inspectSource(argument));\n};\n\n// `IsConstructor` abstract operation\n// https://tc39.es/ecma262/#sec-isconstructor\nmodule.exports = !construct || fails(function () {\n var called;\n return isConstructorModern(isConstructorModern.call)\n || !isConstructorModern(Object)\n || !isConstructorModern(function () { called = true; })\n || called;\n}) ? isConstructorLegacy : isConstructorModern;\n","var fails = require('../internals/fails');\nvar isCallable = require('../internals/is-callable');\n\nvar replacement = /#|\\.prototype\\./;\n\nvar isForced = function (feature, detection) {\n var value = data[normalize(feature)];\n return value == POLYFILL ? true\n : value == NATIVE ? false\n : isCallable(detection) ? fails(detection)\n : !!detection;\n};\n\nvar normalize = isForced.normalize = function (string) {\n return String(string).replace(replacement, '.').toLowerCase();\n};\n\nvar data = isForced.data = {};\nvar NATIVE = isForced.NATIVE = 'N';\nvar POLYFILL = isForced.POLYFILL = 'P';\n\nmodule.exports = isForced;\n","var isCallable = require('../internals/is-callable');\n\nmodule.exports = function (it) {\n return typeof it == 'object' ? it !== null : isCallable(it);\n};\n","module.exports = false;\n","var global = require('../internals/global');\nvar getBuiltIn = require('../internals/get-built-in');\nvar isCallable = require('../internals/is-callable');\nvar isPrototypeOf = require('../internals/object-is-prototype-of');\nvar USE_SYMBOL_AS_UID = require('../internals/use-symbol-as-uid');\n\nvar Object = global.Object;\n\nmodule.exports = USE_SYMBOL_AS_UID ? function (it) {\n return typeof it == 'symbol';\n} : function (it) {\n var $Symbol = getBuiltIn('Symbol');\n return isCallable($Symbol) && isPrototypeOf($Symbol.prototype, Object(it));\n};\n","var call = require('../internals/function-call');\nvar anObject = require('../internals/an-object');\nvar getMethod = require('../internals/get-method');\n\nmodule.exports = function (iterator, kind, value) {\n var innerResult, innerError;\n anObject(iterator);\n try {\n innerResult = getMethod(iterator, 'return');\n if (!innerResult) {\n if (kind === 'throw') throw value;\n return value;\n }\n innerResult = call(innerResult, iterator);\n } catch (error) {\n innerError = true;\n innerResult = error;\n }\n if (kind === 'throw') throw value;\n if (innerError) throw innerResult;\n anObject(innerResult);\n return value;\n};\n","'use strict';\nvar fails = require('../internals/fails');\nvar isCallable = require('../internals/is-callable');\nvar create = require('../internals/object-create');\nvar getPrototypeOf = require('../internals/object-get-prototype-of');\nvar redefine = require('../internals/redefine');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar IS_PURE = require('../internals/is-pure');\n\nvar ITERATOR = wellKnownSymbol('iterator');\nvar BUGGY_SAFARI_ITERATORS = false;\n\n// `%IteratorPrototype%` object\n// https://tc39.es/ecma262/#sec-%iteratorprototype%-object\nvar IteratorPrototype, PrototypeOfArrayIteratorPrototype, arrayIterator;\n\n/* eslint-disable es/no-array-prototype-keys -- safe */\nif ([].keys) {\n arrayIterator = [].keys();\n // Safari 8 has buggy iterators w/o `next`\n if (!('next' in arrayIterator)) BUGGY_SAFARI_ITERATORS = true;\n else {\n PrototypeOfArrayIteratorPrototype = getPrototypeOf(getPrototypeOf(arrayIterator));\n if (PrototypeOfArrayIteratorPrototype !== Object.prototype) IteratorPrototype = PrototypeOfArrayIteratorPrototype;\n }\n}\n\nvar NEW_ITERATOR_PROTOTYPE = IteratorPrototype == undefined || fails(function () {\n var test = {};\n // FF44- legacy iterators case\n return IteratorPrototype[ITERATOR].call(test) !== test;\n});\n\nif (NEW_ITERATOR_PROTOTYPE) IteratorPrototype = {};\nelse if (IS_PURE) IteratorPrototype = create(IteratorPrototype);\n\n// `%IteratorPrototype%[@@iterator]()` method\n// https://tc39.es/ecma262/#sec-%iteratorprototype%-@@iterator\nif (!isCallable(IteratorPrototype[ITERATOR])) {\n redefine(IteratorPrototype, ITERATOR, function () {\n return this;\n });\n}\n\nmodule.exports = {\n IteratorPrototype: IteratorPrototype,\n BUGGY_SAFARI_ITERATORS: BUGGY_SAFARI_ITERATORS\n};\n","module.exports = {};\n","var toLength = require('../internals/to-length');\n\n// `LengthOfArrayLike` abstract operation\n// https://tc39.es/ecma262/#sec-lengthofarraylike\nmodule.exports = function (obj) {\n return toLength(obj.length);\n};\n","/* eslint-disable es/no-symbol -- required for testing */\nvar V8_VERSION = require('../internals/engine-v8-version');\nvar fails = require('../internals/fails');\n\n// eslint-disable-next-line es/no-object-getownpropertysymbols -- required for testing\nmodule.exports = !!Object.getOwnPropertySymbols && !fails(function () {\n var symbol = Symbol();\n // Chrome 38 Symbol has incorrect toString conversion\n // `get-own-property-symbols` polyfill symbols converted to object are not Symbol instances\n return !String(symbol) || !(Object(symbol) instanceof Symbol) ||\n // Chrome 38-40 symbols are not inherited from DOM collections prototypes to instances\n !Symbol.sham && V8_VERSION && V8_VERSION < 41;\n});\n","var fails = require('../internals/fails');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar IS_PURE = require('../internals/is-pure');\n\nvar ITERATOR = wellKnownSymbol('iterator');\n\nmodule.exports = !fails(function () {\n var url = new URL('b?a=1&b=2&c=3', 'http://a');\n var searchParams = url.searchParams;\n var result = '';\n url.pathname = 'c%20d';\n searchParams.forEach(function (value, key) {\n searchParams['delete']('b');\n result += key + value;\n });\n return (IS_PURE && !url.toJSON)\n || !searchParams.sort\n || url.href !== 'http://a/c%20d?a=1&c=3'\n || searchParams.get('c') !== '3'\n || String(new URLSearchParams('?a=1')) !== 'a=1'\n || !searchParams[ITERATOR]\n // throws in Edge\n || new URL('https://a@b').username !== 'a'\n || new URLSearchParams(new URLSearchParams('a=b')).get('a') !== 'b'\n // not punycoded in Edge\n || new URL('http://тест').host !== 'xn--e1aybc'\n // not escaped in Chrome 62-\n || new URL('http://a#б').hash !== '#%D0%B1'\n // fails in Chrome 66-\n || result !== 'a1c3'\n // throws in Safari\n || new URL('http://x', undefined).host !== 'x';\n});\n","var global = require('../internals/global');\nvar isCallable = require('../internals/is-callable');\nvar inspectSource = require('../internals/inspect-source');\n\nvar WeakMap = global.WeakMap;\n\nmodule.exports = isCallable(WeakMap) && /native code/.test(inspectSource(WeakMap));\n","'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar call = require('../internals/function-call');\nvar fails = require('../internals/fails');\nvar objectKeys = require('../internals/object-keys');\nvar getOwnPropertySymbolsModule = require('../internals/object-get-own-property-symbols');\nvar propertyIsEnumerableModule = require('../internals/object-property-is-enumerable');\nvar toObject = require('../internals/to-object');\nvar IndexedObject = require('../internals/indexed-object');\n\n// eslint-disable-next-line es/no-object-assign -- safe\nvar $assign = Object.assign;\n// eslint-disable-next-line es/no-object-defineproperty -- required for testing\nvar defineProperty = Object.defineProperty;\nvar concat = uncurryThis([].concat);\n\n// `Object.assign` method\n// https://tc39.es/ecma262/#sec-object.assign\nmodule.exports = !$assign || fails(function () {\n // should have correct order of operations (Edge bug)\n if (DESCRIPTORS && $assign({ b: 1 }, $assign(defineProperty({}, 'a', {\n enumerable: true,\n get: function () {\n defineProperty(this, 'b', {\n value: 3,\n enumerable: false\n });\n }\n }), { b: 2 })).b !== 1) return true;\n // should work with symbols and should have deterministic property order (V8 bug)\n var A = {};\n var B = {};\n // eslint-disable-next-line es/no-symbol -- safe\n var symbol = Symbol();\n var alphabet = 'abcdefghijklmnopqrst';\n A[symbol] = 7;\n alphabet.split('').forEach(function (chr) { B[chr] = chr; });\n return $assign({}, A)[symbol] != 7 || objectKeys($assign({}, B)).join('') != alphabet;\n}) ? function assign(target, source) { // eslint-disable-line no-unused-vars -- required for `.length`\n var T = toObject(target);\n var argumentsLength = arguments.length;\n var index = 1;\n var getOwnPropertySymbols = getOwnPropertySymbolsModule.f;\n var propertyIsEnumerable = propertyIsEnumerableModule.f;\n while (argumentsLength > index) {\n var S = IndexedObject(arguments[index++]);\n var keys = getOwnPropertySymbols ? concat(objectKeys(S), getOwnPropertySymbols(S)) : objectKeys(S);\n var length = keys.length;\n var j = 0;\n var key;\n while (length > j) {\n key = keys[j++];\n if (!DESCRIPTORS || call(propertyIsEnumerable, S, key)) T[key] = S[key];\n }\n } return T;\n} : $assign;\n","/* global ActiveXObject -- old IE, WSH */\nvar anObject = require('../internals/an-object');\nvar defineProperties = require('../internals/object-define-properties');\nvar enumBugKeys = require('../internals/enum-bug-keys');\nvar hiddenKeys = require('../internals/hidden-keys');\nvar html = require('../internals/html');\nvar documentCreateElement = require('../internals/document-create-element');\nvar sharedKey = require('../internals/shared-key');\n\nvar GT = '>';\nvar LT = '<';\nvar PROTOTYPE = 'prototype';\nvar SCRIPT = 'script';\nvar IE_PROTO = sharedKey('IE_PROTO');\n\nvar EmptyConstructor = function () { /* empty */ };\n\nvar scriptTag = function (content) {\n return LT + SCRIPT + GT + content + LT + '/' + SCRIPT + GT;\n};\n\n// Create object with fake `null` prototype: use ActiveX Object with cleared prototype\nvar NullProtoObjectViaActiveX = function (activeXDocument) {\n activeXDocument.write(scriptTag(''));\n activeXDocument.close();\n var temp = activeXDocument.parentWindow.Object;\n activeXDocument = null; // avoid memory leak\n return temp;\n};\n\n// Create object with fake `null` prototype: use iframe Object with cleared prototype\nvar NullProtoObjectViaIFrame = function () {\n // Thrash, waste and sodomy: IE GC bug\n var iframe = documentCreateElement('iframe');\n var JS = 'java' + SCRIPT + ':';\n var iframeDocument;\n iframe.style.display = 'none';\n html.appendChild(iframe);\n // https://github.com/zloirock/core-js/issues/475\n iframe.src = String(JS);\n iframeDocument = iframe.contentWindow.document;\n iframeDocument.open();\n iframeDocument.write(scriptTag('document.F=Object'));\n iframeDocument.close();\n return iframeDocument.F;\n};\n\n// Check for document.domain and active x support\n// No need to use active x approach when document.domain is not set\n// see https://github.com/es-shims/es5-shim/issues/150\n// variation of https://github.com/kitcambridge/es5-shim/commit/4f738ac066346\n// avoid IE GC bug\nvar activeXDocument;\nvar NullProtoObject = function () {\n try {\n activeXDocument = new ActiveXObject('htmlfile');\n } catch (error) { /* ignore */ }\n NullProtoObject = typeof document != 'undefined'\n ? document.domain && activeXDocument\n ? NullProtoObjectViaActiveX(activeXDocument) // old IE\n : NullProtoObjectViaIFrame()\n : NullProtoObjectViaActiveX(activeXDocument); // WSH\n var length = enumBugKeys.length;\n while (length--) delete NullProtoObject[PROTOTYPE][enumBugKeys[length]];\n return NullProtoObject();\n};\n\nhiddenKeys[IE_PROTO] = true;\n\n// `Object.create` method\n// https://tc39.es/ecma262/#sec-object.create\nmodule.exports = Object.create || function create(O, Properties) {\n var result;\n if (O !== null) {\n EmptyConstructor[PROTOTYPE] = anObject(O);\n result = new EmptyConstructor();\n EmptyConstructor[PROTOTYPE] = null;\n // add \"__proto__\" for Object.getPrototypeOf polyfill\n result[IE_PROTO] = O;\n } else result = NullProtoObject();\n return Properties === undefined ? result : defineProperties(result, Properties);\n};\n","var DESCRIPTORS = require('../internals/descriptors');\nvar definePropertyModule = require('../internals/object-define-property');\nvar anObject = require('../internals/an-object');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar objectKeys = require('../internals/object-keys');\n\n// `Object.defineProperties` method\n// https://tc39.es/ecma262/#sec-object.defineproperties\n// eslint-disable-next-line es/no-object-defineproperties -- safe\nmodule.exports = DESCRIPTORS ? Object.defineProperties : function defineProperties(O, Properties) {\n anObject(O);\n var props = toIndexedObject(Properties);\n var keys = objectKeys(Properties);\n var length = keys.length;\n var index = 0;\n var key;\n while (length > index) definePropertyModule.f(O, key = keys[index++], props[key]);\n return O;\n};\n","var global = require('../internals/global');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar IE8_DOM_DEFINE = require('../internals/ie8-dom-define');\nvar anObject = require('../internals/an-object');\nvar toPropertyKey = require('../internals/to-property-key');\n\nvar TypeError = global.TypeError;\n// eslint-disable-next-line es/no-object-defineproperty -- safe\nvar $defineProperty = Object.defineProperty;\n\n// `Object.defineProperty` method\n// https://tc39.es/ecma262/#sec-object.defineproperty\nexports.f = DESCRIPTORS ? $defineProperty : function defineProperty(O, P, Attributes) {\n anObject(O);\n P = toPropertyKey(P);\n anObject(Attributes);\n if (IE8_DOM_DEFINE) try {\n return $defineProperty(O, P, Attributes);\n } catch (error) { /* empty */ }\n if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported');\n if ('value' in Attributes) O[P] = Attributes.value;\n return O;\n};\n","var DESCRIPTORS = require('../internals/descriptors');\nvar call = require('../internals/function-call');\nvar propertyIsEnumerableModule = require('../internals/object-property-is-enumerable');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar toPropertyKey = require('../internals/to-property-key');\nvar hasOwn = require('../internals/has-own-property');\nvar IE8_DOM_DEFINE = require('../internals/ie8-dom-define');\n\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar $getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n\n// `Object.getOwnPropertyDescriptor` method\n// https://tc39.es/ecma262/#sec-object.getownpropertydescriptor\nexports.f = DESCRIPTORS ? $getOwnPropertyDescriptor : function getOwnPropertyDescriptor(O, P) {\n O = toIndexedObject(O);\n P = toPropertyKey(P);\n if (IE8_DOM_DEFINE) try {\n return $getOwnPropertyDescriptor(O, P);\n } catch (error) { /* empty */ }\n if (hasOwn(O, P)) return createPropertyDescriptor(!call(propertyIsEnumerableModule.f, O, P), O[P]);\n};\n","var internalObjectKeys = require('../internals/object-keys-internal');\nvar enumBugKeys = require('../internals/enum-bug-keys');\n\nvar hiddenKeys = enumBugKeys.concat('length', 'prototype');\n\n// `Object.getOwnPropertyNames` method\n// https://tc39.es/ecma262/#sec-object.getownpropertynames\n// eslint-disable-next-line es/no-object-getownpropertynames -- safe\nexports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {\n return internalObjectKeys(O, hiddenKeys);\n};\n","// eslint-disable-next-line es/no-object-getownpropertysymbols -- safe\nexports.f = Object.getOwnPropertySymbols;\n","var global = require('../internals/global');\nvar hasOwn = require('../internals/has-own-property');\nvar isCallable = require('../internals/is-callable');\nvar toObject = require('../internals/to-object');\nvar sharedKey = require('../internals/shared-key');\nvar CORRECT_PROTOTYPE_GETTER = require('../internals/correct-prototype-getter');\n\nvar IE_PROTO = sharedKey('IE_PROTO');\nvar Object = global.Object;\nvar ObjectPrototype = Object.prototype;\n\n// `Object.getPrototypeOf` method\n// https://tc39.es/ecma262/#sec-object.getprototypeof\nmodule.exports = CORRECT_PROTOTYPE_GETTER ? Object.getPrototypeOf : function (O) {\n var object = toObject(O);\n if (hasOwn(object, IE_PROTO)) return object[IE_PROTO];\n var constructor = object.constructor;\n if (isCallable(constructor) && object instanceof constructor) {\n return constructor.prototype;\n } return object instanceof Object ? ObjectPrototype : null;\n};\n","var uncurryThis = require('../internals/function-uncurry-this');\n\nmodule.exports = uncurryThis({}.isPrototypeOf);\n","var uncurryThis = require('../internals/function-uncurry-this');\nvar hasOwn = require('../internals/has-own-property');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar indexOf = require('../internals/array-includes').indexOf;\nvar hiddenKeys = require('../internals/hidden-keys');\n\nvar push = uncurryThis([].push);\n\nmodule.exports = function (object, names) {\n var O = toIndexedObject(object);\n var i = 0;\n var result = [];\n var key;\n for (key in O) !hasOwn(hiddenKeys, key) && hasOwn(O, key) && push(result, key);\n // Don't enum bug & hidden keys\n while (names.length > i) if (hasOwn(O, key = names[i++])) {\n ~indexOf(result, key) || push(result, key);\n }\n return result;\n};\n","var internalObjectKeys = require('../internals/object-keys-internal');\nvar enumBugKeys = require('../internals/enum-bug-keys');\n\n// `Object.keys` method\n// https://tc39.es/ecma262/#sec-object.keys\n// eslint-disable-next-line es/no-object-keys -- safe\nmodule.exports = Object.keys || function keys(O) {\n return internalObjectKeys(O, enumBugKeys);\n};\n","'use strict';\nvar $propertyIsEnumerable = {}.propertyIsEnumerable;\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n\n// Nashorn ~ JDK8 bug\nvar NASHORN_BUG = getOwnPropertyDescriptor && !$propertyIsEnumerable.call({ 1: 2 }, 1);\n\n// `Object.prototype.propertyIsEnumerable` method implementation\n// https://tc39.es/ecma262/#sec-object.prototype.propertyisenumerable\nexports.f = NASHORN_BUG ? function propertyIsEnumerable(V) {\n var descriptor = getOwnPropertyDescriptor(this, V);\n return !!descriptor && descriptor.enumerable;\n} : $propertyIsEnumerable;\n","/* eslint-disable no-proto -- safe */\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar anObject = require('../internals/an-object');\nvar aPossiblePrototype = require('../internals/a-possible-prototype');\n\n// `Object.setPrototypeOf` method\n// https://tc39.es/ecma262/#sec-object.setprototypeof\n// Works with __proto__ only. Old v8 can't work with null proto objects.\n// eslint-disable-next-line es/no-object-setprototypeof -- safe\nmodule.exports = Object.setPrototypeOf || ('__proto__' in {} ? function () {\n var CORRECT_SETTER = false;\n var test = {};\n var setter;\n try {\n // eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\n setter = uncurryThis(Object.getOwnPropertyDescriptor(Object.prototype, '__proto__').set);\n setter(test, []);\n CORRECT_SETTER = test instanceof Array;\n } catch (error) { /* empty */ }\n return function setPrototypeOf(O, proto) {\n anObject(O);\n aPossiblePrototype(proto);\n if (CORRECT_SETTER) setter(O, proto);\n else O.__proto__ = proto;\n return O;\n };\n}() : undefined);\n","var global = require('../internals/global');\nvar call = require('../internals/function-call');\nvar isCallable = require('../internals/is-callable');\nvar isObject = require('../internals/is-object');\n\nvar TypeError = global.TypeError;\n\n// `OrdinaryToPrimitive` abstract operation\n// https://tc39.es/ecma262/#sec-ordinarytoprimitive\nmodule.exports = function (input, pref) {\n var fn, val;\n if (pref === 'string' && isCallable(fn = input.toString) && !isObject(val = call(fn, input))) return val;\n if (isCallable(fn = input.valueOf) && !isObject(val = call(fn, input))) return val;\n if (pref !== 'string' && isCallable(fn = input.toString) && !isObject(val = call(fn, input))) return val;\n throw TypeError(\"Can't convert object to primitive value\");\n};\n","var getBuiltIn = require('../internals/get-built-in');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar getOwnPropertyNamesModule = require('../internals/object-get-own-property-names');\nvar getOwnPropertySymbolsModule = require('../internals/object-get-own-property-symbols');\nvar anObject = require('../internals/an-object');\n\nvar concat = uncurryThis([].concat);\n\n// all object keys, includes non-enumerable and symbols\nmodule.exports = getBuiltIn('Reflect', 'ownKeys') || function ownKeys(it) {\n var keys = getOwnPropertyNamesModule.f(anObject(it));\n var getOwnPropertySymbols = getOwnPropertySymbolsModule.f;\n return getOwnPropertySymbols ? concat(keys, getOwnPropertySymbols(it)) : keys;\n};\n","var global = require('../internals/global');\n\nmodule.exports = global;\n","var redefine = require('../internals/redefine');\n\nmodule.exports = function (target, src, options) {\n for (var key in src) redefine(target, key, src[key], options);\n return target;\n};\n","var global = require('../internals/global');\nvar isCallable = require('../internals/is-callable');\nvar hasOwn = require('../internals/has-own-property');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar setGlobal = require('../internals/set-global');\nvar inspectSource = require('../internals/inspect-source');\nvar InternalStateModule = require('../internals/internal-state');\nvar CONFIGURABLE_FUNCTION_NAME = require('../internals/function-name').CONFIGURABLE;\n\nvar getInternalState = InternalStateModule.get;\nvar enforceInternalState = InternalStateModule.enforce;\nvar TEMPLATE = String(String).split('String');\n\n(module.exports = function (O, key, value, options) {\n var unsafe = options ? !!options.unsafe : false;\n var simple = options ? !!options.enumerable : false;\n var noTargetGet = options ? !!options.noTargetGet : false;\n var name = options && options.name !== undefined ? options.name : key;\n var state;\n if (isCallable(value)) {\n if (String(name).slice(0, 7) === 'Symbol(') {\n name = '[' + String(name).replace(/^Symbol\\(([^)]*)\\)/, '$1') + ']';\n }\n if (!hasOwn(value, 'name') || (CONFIGURABLE_FUNCTION_NAME && value.name !== name)) {\n createNonEnumerableProperty(value, 'name', name);\n }\n state = enforceInternalState(value);\n if (!state.source) {\n state.source = TEMPLATE.join(typeof name == 'string' ? name : '');\n }\n }\n if (O === global) {\n if (simple) O[key] = value;\n else setGlobal(key, value);\n return;\n } else if (!unsafe) {\n delete O[key];\n } else if (!noTargetGet && O[key]) {\n simple = true;\n }\n if (simple) O[key] = value;\n else createNonEnumerableProperty(O, key, value);\n// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative\n})(Function.prototype, 'toString', function toString() {\n return isCallable(this) && getInternalState(this).source || inspectSource(this);\n});\n","var global = require('../internals/global');\n\nvar TypeError = global.TypeError;\n\n// `RequireObjectCoercible` abstract operation\n// https://tc39.es/ecma262/#sec-requireobjectcoercible\nmodule.exports = function (it) {\n if (it == undefined) throw TypeError(\"Can't call method on \" + it);\n return it;\n};\n","var global = require('../internals/global');\n\n// eslint-disable-next-line es/no-object-defineproperty -- safe\nvar defineProperty = Object.defineProperty;\n\nmodule.exports = function (key, value) {\n try {\n defineProperty(global, key, { value: value, configurable: true, writable: true });\n } catch (error) {\n global[key] = value;\n } return value;\n};\n","var defineProperty = require('../internals/object-define-property').f;\nvar hasOwn = require('../internals/has-own-property');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\n\nmodule.exports = function (it, TAG, STATIC) {\n if (it && !hasOwn(it = STATIC ? it : it.prototype, TO_STRING_TAG)) {\n defineProperty(it, TO_STRING_TAG, { configurable: true, value: TAG });\n }\n};\n","var shared = require('../internals/shared');\nvar uid = require('../internals/uid');\n\nvar keys = shared('keys');\n\nmodule.exports = function (key) {\n return keys[key] || (keys[key] = uid(key));\n};\n","var global = require('../internals/global');\nvar setGlobal = require('../internals/set-global');\n\nvar SHARED = '__core-js_shared__';\nvar store = global[SHARED] || setGlobal(SHARED, {});\n\nmodule.exports = store;\n","var IS_PURE = require('../internals/is-pure');\nvar store = require('../internals/shared-store');\n\n(module.exports = function (key, value) {\n return store[key] || (store[key] = value !== undefined ? value : {});\n})('versions', []).push({\n version: '3.19.3',\n mode: IS_PURE ? 'pure' : 'global',\n copyright: '© 2021 Denis Pushkarev (zloirock.ru)'\n});\n","var uncurryThis = require('../internals/function-uncurry-this');\nvar toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\nvar toString = require('../internals/to-string');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\n\nvar charAt = uncurryThis(''.charAt);\nvar charCodeAt = uncurryThis(''.charCodeAt);\nvar stringSlice = uncurryThis(''.slice);\n\nvar createMethod = function (CONVERT_TO_STRING) {\n return function ($this, pos) {\n var S = toString(requireObjectCoercible($this));\n var position = toIntegerOrInfinity(pos);\n var size = S.length;\n var first, second;\n if (position < 0 || position >= size) return CONVERT_TO_STRING ? '' : undefined;\n first = charCodeAt(S, position);\n return first < 0xD800 || first > 0xDBFF || position + 1 === size\n || (second = charCodeAt(S, position + 1)) < 0xDC00 || second > 0xDFFF\n ? CONVERT_TO_STRING\n ? charAt(S, position)\n : first\n : CONVERT_TO_STRING\n ? stringSlice(S, position, position + 2)\n : (first - 0xD800 << 10) + (second - 0xDC00) + 0x10000;\n };\n};\n\nmodule.exports = {\n // `String.prototype.codePointAt` method\n // https://tc39.es/ecma262/#sec-string.prototype.codepointat\n codeAt: createMethod(false),\n // `String.prototype.at` method\n // https://github.com/mathiasbynens/String.prototype.at\n charAt: createMethod(true)\n};\n","'use strict';\n// based on https://github.com/bestiejs/punycode.js/blob/master/punycode.js\nvar global = require('../internals/global');\nvar uncurryThis = require('../internals/function-uncurry-this');\n\nvar maxInt = 2147483647; // aka. 0x7FFFFFFF or 2^31-1\nvar base = 36;\nvar tMin = 1;\nvar tMax = 26;\nvar skew = 38;\nvar damp = 700;\nvar initialBias = 72;\nvar initialN = 128; // 0x80\nvar delimiter = '-'; // '\\x2D'\nvar regexNonASCII = /[^\\0-\\u007E]/; // non-ASCII chars\nvar regexSeparators = /[.\\u3002\\uFF0E\\uFF61]/g; // RFC 3490 separators\nvar OVERFLOW_ERROR = 'Overflow: input needs wider integers to process';\nvar baseMinusTMin = base - tMin;\n\nvar RangeError = global.RangeError;\nvar exec = uncurryThis(regexSeparators.exec);\nvar floor = Math.floor;\nvar fromCharCode = String.fromCharCode;\nvar charCodeAt = uncurryThis(''.charCodeAt);\nvar join = uncurryThis([].join);\nvar push = uncurryThis([].push);\nvar replace = uncurryThis(''.replace);\nvar split = uncurryThis(''.split);\nvar toLowerCase = uncurryThis(''.toLowerCase);\n\n/**\n * Creates an array containing the numeric code points of each Unicode\n * character in the string. While JavaScript uses UCS-2 internally,\n * this function will convert a pair of surrogate halves (each of which\n * UCS-2 exposes as separate characters) into a single code point,\n * matching UTF-16.\n */\nvar ucs2decode = function (string) {\n var output = [];\n var counter = 0;\n var length = string.length;\n while (counter < length) {\n var value = charCodeAt(string, counter++);\n if (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n // It's a high surrogate, and there is a next character.\n var extra = charCodeAt(string, counter++);\n if ((extra & 0xFC00) == 0xDC00) { // Low surrogate.\n push(output, ((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n } else {\n // It's an unmatched surrogate; only append this code unit, in case the\n // next code unit is the high surrogate of a surrogate pair.\n push(output, value);\n counter--;\n }\n } else {\n push(output, value);\n }\n }\n return output;\n};\n\n/**\n * Converts a digit/integer into a basic code point.\n */\nvar digitToBasic = function (digit) {\n // 0..25 map to ASCII a..z or A..Z\n // 26..35 map to ASCII 0..9\n return digit + 22 + 75 * (digit < 26);\n};\n\n/**\n * Bias adaptation function as per section 3.4 of RFC 3492.\n * https://tools.ietf.org/html/rfc3492#section-3.4\n */\nvar adapt = function (delta, numPoints, firstTime) {\n var k = 0;\n delta = firstTime ? floor(delta / damp) : delta >> 1;\n delta += floor(delta / numPoints);\n while (delta > baseMinusTMin * tMax >> 1) {\n delta = floor(delta / baseMinusTMin);\n k += base;\n }\n return floor(k + (baseMinusTMin + 1) * delta / (delta + skew));\n};\n\n/**\n * Converts a string of Unicode symbols (e.g. a domain name label) to a\n * Punycode string of ASCII-only symbols.\n */\nvar encode = function (input) {\n var output = [];\n\n // Convert the input in UCS-2 to an array of Unicode code points.\n input = ucs2decode(input);\n\n // Cache the length.\n var inputLength = input.length;\n\n // Initialize the state.\n var n = initialN;\n var delta = 0;\n var bias = initialBias;\n var i, currentValue;\n\n // Handle the basic code points.\n for (i = 0; i < input.length; i++) {\n currentValue = input[i];\n if (currentValue < 0x80) {\n push(output, fromCharCode(currentValue));\n }\n }\n\n var basicLength = output.length; // number of basic code points.\n var handledCPCount = basicLength; // number of code points that have been handled;\n\n // Finish the basic string with a delimiter unless it's empty.\n if (basicLength) {\n push(output, delimiter);\n }\n\n // Main encoding loop:\n while (handledCPCount < inputLength) {\n // All non-basic code points < n have been handled already. Find the next larger one:\n var m = maxInt;\n for (i = 0; i < input.length; i++) {\n currentValue = input[i];\n if (currentValue >= n && currentValue < m) {\n m = currentValue;\n }\n }\n\n // Increase `delta` enough to advance the decoder's state to , but guard against overflow.\n var handledCPCountPlusOne = handledCPCount + 1;\n if (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) {\n throw RangeError(OVERFLOW_ERROR);\n }\n\n delta += (m - n) * handledCPCountPlusOne;\n n = m;\n\n for (i = 0; i < input.length; i++) {\n currentValue = input[i];\n if (currentValue < n && ++delta > maxInt) {\n throw RangeError(OVERFLOW_ERROR);\n }\n if (currentValue == n) {\n // Represent delta as a generalized variable-length integer.\n var q = delta;\n var k = base;\n while (true) {\n var t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n if (q < t) break;\n var qMinusT = q - t;\n var baseMinusT = base - t;\n push(output, fromCharCode(digitToBasic(t + qMinusT % baseMinusT)));\n q = floor(qMinusT / baseMinusT);\n k += base;\n }\n\n push(output, fromCharCode(digitToBasic(q)));\n bias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength);\n delta = 0;\n handledCPCount++;\n }\n }\n\n delta++;\n n++;\n }\n return join(output, '');\n};\n\nmodule.exports = function (input) {\n var encoded = [];\n var labels = split(replace(toLowerCase(input), regexSeparators, '\\u002E'), '.');\n var i, label;\n for (i = 0; i < labels.length; i++) {\n label = labels[i];\n push(encoded, exec(regexNonASCII, label) ? 'xn--' + encode(label) : label);\n }\n return join(encoded, '.');\n};\n","var toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\n\nvar max = Math.max;\nvar min = Math.min;\n\n// Helper for a popular repeating case of the spec:\n// Let integer be ? ToInteger(index).\n// If integer < 0, let result be max((length + integer), 0); else let result be min(integer, length).\nmodule.exports = function (index, length) {\n var integer = toIntegerOrInfinity(index);\n return integer < 0 ? max(integer + length, 0) : min(integer, length);\n};\n","// toObject with fallback for non-array-like ES3 strings\nvar IndexedObject = require('../internals/indexed-object');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\n\nmodule.exports = function (it) {\n return IndexedObject(requireObjectCoercible(it));\n};\n","var ceil = Math.ceil;\nvar floor = Math.floor;\n\n// `ToIntegerOrInfinity` abstract operation\n// https://tc39.es/ecma262/#sec-tointegerorinfinity\nmodule.exports = function (argument) {\n var number = +argument;\n // eslint-disable-next-line no-self-compare -- safe\n return number !== number || number === 0 ? 0 : (number > 0 ? floor : ceil)(number);\n};\n","var toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\n\nvar min = Math.min;\n\n// `ToLength` abstract operation\n// https://tc39.es/ecma262/#sec-tolength\nmodule.exports = function (argument) {\n return argument > 0 ? min(toIntegerOrInfinity(argument), 0x1FFFFFFFFFFFFF) : 0; // 2 ** 53 - 1 == 9007199254740991\n};\n","var global = require('../internals/global');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\n\nvar Object = global.Object;\n\n// `ToObject` abstract operation\n// https://tc39.es/ecma262/#sec-toobject\nmodule.exports = function (argument) {\n return Object(requireObjectCoercible(argument));\n};\n","var global = require('../internals/global');\nvar call = require('../internals/function-call');\nvar isObject = require('../internals/is-object');\nvar isSymbol = require('../internals/is-symbol');\nvar getMethod = require('../internals/get-method');\nvar ordinaryToPrimitive = require('../internals/ordinary-to-primitive');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar TypeError = global.TypeError;\nvar TO_PRIMITIVE = wellKnownSymbol('toPrimitive');\n\n// `ToPrimitive` abstract operation\n// https://tc39.es/ecma262/#sec-toprimitive\nmodule.exports = function (input, pref) {\n if (!isObject(input) || isSymbol(input)) return input;\n var exoticToPrim = getMethod(input, TO_PRIMITIVE);\n var result;\n if (exoticToPrim) {\n if (pref === undefined) pref = 'default';\n result = call(exoticToPrim, input, pref);\n if (!isObject(result) || isSymbol(result)) return result;\n throw TypeError(\"Can't convert object to primitive value\");\n }\n if (pref === undefined) pref = 'number';\n return ordinaryToPrimitive(input, pref);\n};\n","var toPrimitive = require('../internals/to-primitive');\nvar isSymbol = require('../internals/is-symbol');\n\n// `ToPropertyKey` abstract operation\n// https://tc39.es/ecma262/#sec-topropertykey\nmodule.exports = function (argument) {\n var key = toPrimitive(argument, 'string');\n return isSymbol(key) ? key : key + '';\n};\n","var wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\nvar test = {};\n\ntest[TO_STRING_TAG] = 'z';\n\nmodule.exports = String(test) === '[object z]';\n","var global = require('../internals/global');\nvar classof = require('../internals/classof');\n\nvar String = global.String;\n\nmodule.exports = function (argument) {\n if (classof(argument) === 'Symbol') throw TypeError('Cannot convert a Symbol value to a string');\n return String(argument);\n};\n","var global = require('../internals/global');\n\nvar String = global.String;\n\nmodule.exports = function (argument) {\n try {\n return String(argument);\n } catch (error) {\n return 'Object';\n }\n};\n","var uncurryThis = require('../internals/function-uncurry-this');\n\nvar id = 0;\nvar postfix = Math.random();\nvar toString = uncurryThis(1.0.toString);\n\nmodule.exports = function (key) {\n return 'Symbol(' + (key === undefined ? '' : key) + ')_' + toString(++id + postfix, 36);\n};\n","/* eslint-disable es/no-symbol -- required for testing */\nvar NATIVE_SYMBOL = require('../internals/native-symbol');\n\nmodule.exports = NATIVE_SYMBOL\n && !Symbol.sham\n && typeof Symbol.iterator == 'symbol';\n","var global = require('../internals/global');\nvar shared = require('../internals/shared');\nvar hasOwn = require('../internals/has-own-property');\nvar uid = require('../internals/uid');\nvar NATIVE_SYMBOL = require('../internals/native-symbol');\nvar USE_SYMBOL_AS_UID = require('../internals/use-symbol-as-uid');\n\nvar WellKnownSymbolsStore = shared('wks');\nvar Symbol = global.Symbol;\nvar symbolFor = Symbol && Symbol['for'];\nvar createWellKnownSymbol = USE_SYMBOL_AS_UID ? Symbol : Symbol && Symbol.withoutSetter || uid;\n\nmodule.exports = function (name) {\n if (!hasOwn(WellKnownSymbolsStore, name) || !(NATIVE_SYMBOL || typeof WellKnownSymbolsStore[name] == 'string')) {\n var description = 'Symbol.' + name;\n if (NATIVE_SYMBOL && hasOwn(Symbol, name)) {\n WellKnownSymbolsStore[name] = Symbol[name];\n } else if (USE_SYMBOL_AS_UID && symbolFor) {\n WellKnownSymbolsStore[name] = symbolFor(description);\n } else {\n WellKnownSymbolsStore[name] = createWellKnownSymbol(description);\n }\n } return WellKnownSymbolsStore[name];\n};\n","'use strict';\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar addToUnscopables = require('../internals/add-to-unscopables');\nvar Iterators = require('../internals/iterators');\nvar InternalStateModule = require('../internals/internal-state');\nvar defineIterator = require('../internals/define-iterator');\n\nvar ARRAY_ITERATOR = 'Array Iterator';\nvar setInternalState = InternalStateModule.set;\nvar getInternalState = InternalStateModule.getterFor(ARRAY_ITERATOR);\n\n// `Array.prototype.entries` method\n// https://tc39.es/ecma262/#sec-array.prototype.entries\n// `Array.prototype.keys` method\n// https://tc39.es/ecma262/#sec-array.prototype.keys\n// `Array.prototype.values` method\n// https://tc39.es/ecma262/#sec-array.prototype.values\n// `Array.prototype[@@iterator]` method\n// https://tc39.es/ecma262/#sec-array.prototype-@@iterator\n// `CreateArrayIterator` internal method\n// https://tc39.es/ecma262/#sec-createarrayiterator\nmodule.exports = defineIterator(Array, 'Array', function (iterated, kind) {\n setInternalState(this, {\n type: ARRAY_ITERATOR,\n target: toIndexedObject(iterated), // target\n index: 0, // next index\n kind: kind // kind\n });\n// `%ArrayIteratorPrototype%.next` method\n// https://tc39.es/ecma262/#sec-%arrayiteratorprototype%.next\n}, function () {\n var state = getInternalState(this);\n var target = state.target;\n var kind = state.kind;\n var index = state.index++;\n if (!target || index >= target.length) {\n state.target = undefined;\n return { value: undefined, done: true };\n }\n if (kind == 'keys') return { value: index, done: false };\n if (kind == 'values') return { value: target[index], done: false };\n return { value: [index, target[index]], done: false };\n}, 'values');\n\n// argumentsList[@@iterator] is %ArrayProto_values%\n// https://tc39.es/ecma262/#sec-createunmappedargumentsobject\n// https://tc39.es/ecma262/#sec-createmappedargumentsobject\nIterators.Arguments = Iterators.Array;\n\n// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables\naddToUnscopables('keys');\naddToUnscopables('values');\naddToUnscopables('entries');\n","'use strict';\nvar charAt = require('../internals/string-multibyte').charAt;\nvar toString = require('../internals/to-string');\nvar InternalStateModule = require('../internals/internal-state');\nvar defineIterator = require('../internals/define-iterator');\n\nvar STRING_ITERATOR = 'String Iterator';\nvar setInternalState = InternalStateModule.set;\nvar getInternalState = InternalStateModule.getterFor(STRING_ITERATOR);\n\n// `String.prototype[@@iterator]` method\n// https://tc39.es/ecma262/#sec-string.prototype-@@iterator\ndefineIterator(String, 'String', function (iterated) {\n setInternalState(this, {\n type: STRING_ITERATOR,\n string: toString(iterated),\n index: 0\n });\n// `%StringIteratorPrototype%.next` method\n// https://tc39.es/ecma262/#sec-%stringiteratorprototype%.next\n}, function next() {\n var state = getInternalState(this);\n var string = state.string;\n var index = state.index;\n var point;\n if (index >= string.length) return { value: undefined, done: true };\n point = charAt(string, index);\n state.index += point.length;\n return { value: point, done: false };\n});\n","var global = require('../internals/global');\nvar DOMIterables = require('../internals/dom-iterables');\nvar DOMTokenListPrototype = require('../internals/dom-token-list-prototype');\nvar ArrayIteratorMethods = require('../modules/es.array.iterator');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar ITERATOR = wellKnownSymbol('iterator');\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\nvar ArrayValues = ArrayIteratorMethods.values;\n\nvar handlePrototype = function (CollectionPrototype, COLLECTION_NAME) {\n if (CollectionPrototype) {\n // some Chrome versions have non-configurable methods on DOMTokenList\n if (CollectionPrototype[ITERATOR] !== ArrayValues) try {\n createNonEnumerableProperty(CollectionPrototype, ITERATOR, ArrayValues);\n } catch (error) {\n CollectionPrototype[ITERATOR] = ArrayValues;\n }\n if (!CollectionPrototype[TO_STRING_TAG]) {\n createNonEnumerableProperty(CollectionPrototype, TO_STRING_TAG, COLLECTION_NAME);\n }\n if (DOMIterables[COLLECTION_NAME]) for (var METHOD_NAME in ArrayIteratorMethods) {\n // some Chrome versions have non-configurable methods on DOMTokenList\n if (CollectionPrototype[METHOD_NAME] !== ArrayIteratorMethods[METHOD_NAME]) try {\n createNonEnumerableProperty(CollectionPrototype, METHOD_NAME, ArrayIteratorMethods[METHOD_NAME]);\n } catch (error) {\n CollectionPrototype[METHOD_NAME] = ArrayIteratorMethods[METHOD_NAME];\n }\n }\n }\n};\n\nfor (var COLLECTION_NAME in DOMIterables) {\n handlePrototype(global[COLLECTION_NAME] && global[COLLECTION_NAME].prototype, COLLECTION_NAME);\n}\n\nhandlePrototype(DOMTokenListPrototype, 'DOMTokenList');\n","'use strict';\n// TODO: in core-js@4, move /modules/ dependencies to public entries for better optimization by tools like `preset-env`\nrequire('../modules/es.array.iterator');\nvar $ = require('../internals/export');\nvar global = require('../internals/global');\nvar getBuiltIn = require('../internals/get-built-in');\nvar call = require('../internals/function-call');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar USE_NATIVE_URL = require('../internals/native-url');\nvar redefine = require('../internals/redefine');\nvar redefineAll = require('../internals/redefine-all');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar createIteratorConstructor = require('../internals/create-iterator-constructor');\nvar InternalStateModule = require('../internals/internal-state');\nvar anInstance = require('../internals/an-instance');\nvar isCallable = require('../internals/is-callable');\nvar hasOwn = require('../internals/has-own-property');\nvar bind = require('../internals/function-bind-context');\nvar classof = require('../internals/classof');\nvar anObject = require('../internals/an-object');\nvar isObject = require('../internals/is-object');\nvar $toString = require('../internals/to-string');\nvar create = require('../internals/object-create');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\nvar getIterator = require('../internals/get-iterator');\nvar getIteratorMethod = require('../internals/get-iterator-method');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar arraySort = require('../internals/array-sort');\n\nvar ITERATOR = wellKnownSymbol('iterator');\nvar URL_SEARCH_PARAMS = 'URLSearchParams';\nvar URL_SEARCH_PARAMS_ITERATOR = URL_SEARCH_PARAMS + 'Iterator';\nvar setInternalState = InternalStateModule.set;\nvar getInternalParamsState = InternalStateModule.getterFor(URL_SEARCH_PARAMS);\nvar getInternalIteratorState = InternalStateModule.getterFor(URL_SEARCH_PARAMS_ITERATOR);\n\nvar n$Fetch = getBuiltIn('fetch');\nvar N$Request = getBuiltIn('Request');\nvar Headers = getBuiltIn('Headers');\nvar RequestPrototype = N$Request && N$Request.prototype;\nvar HeadersPrototype = Headers && Headers.prototype;\nvar RegExp = global.RegExp;\nvar TypeError = global.TypeError;\nvar decodeURIComponent = global.decodeURIComponent;\nvar encodeURIComponent = global.encodeURIComponent;\nvar charAt = uncurryThis(''.charAt);\nvar join = uncurryThis([].join);\nvar push = uncurryThis([].push);\nvar replace = uncurryThis(''.replace);\nvar shift = uncurryThis([].shift);\nvar splice = uncurryThis([].splice);\nvar split = uncurryThis(''.split);\nvar stringSlice = uncurryThis(''.slice);\n\nvar plus = /\\+/g;\nvar sequences = Array(4);\n\nvar percentSequence = function (bytes) {\n return sequences[bytes - 1] || (sequences[bytes - 1] = RegExp('((?:%[\\\\da-f]{2}){' + bytes + '})', 'gi'));\n};\n\nvar percentDecode = function (sequence) {\n try {\n return decodeURIComponent(sequence);\n } catch (error) {\n return sequence;\n }\n};\n\nvar deserialize = function (it) {\n var result = replace(it, plus, ' ');\n var bytes = 4;\n try {\n return decodeURIComponent(result);\n } catch (error) {\n while (bytes) {\n result = replace(result, percentSequence(bytes--), percentDecode);\n }\n return result;\n }\n};\n\nvar find = /[!'()~]|%20/g;\n\nvar replacements = {\n '!': '%21',\n \"'\": '%27',\n '(': '%28',\n ')': '%29',\n '~': '%7E',\n '%20': '+'\n};\n\nvar replacer = function (match) {\n return replacements[match];\n};\n\nvar serialize = function (it) {\n return replace(encodeURIComponent(it), find, replacer);\n};\n\nvar validateArgumentsLength = function (passed, required) {\n if (passed < required) throw TypeError('Not enough arguments');\n};\n\nvar URLSearchParamsIterator = createIteratorConstructor(function Iterator(params, kind) {\n setInternalState(this, {\n type: URL_SEARCH_PARAMS_ITERATOR,\n iterator: getIterator(getInternalParamsState(params).entries),\n kind: kind\n });\n}, 'Iterator', function next() {\n var state = getInternalIteratorState(this);\n var kind = state.kind;\n var step = state.iterator.next();\n var entry = step.value;\n if (!step.done) {\n step.value = kind === 'keys' ? entry.key : kind === 'values' ? entry.value : [entry.key, entry.value];\n } return step;\n}, true);\n\nvar URLSearchParamsState = function (init) {\n this.entries = [];\n this.url = null;\n\n if (init !== undefined) {\n if (isObject(init)) this.parseObject(init);\n else this.parseQuery(typeof init == 'string' ? charAt(init, 0) === '?' ? stringSlice(init, 1) : init : $toString(init));\n }\n};\n\nURLSearchParamsState.prototype = {\n type: URL_SEARCH_PARAMS,\n bindURL: function (url) {\n this.url = url;\n this.update();\n },\n parseObject: function (object) {\n var iteratorMethod = getIteratorMethod(object);\n var iterator, next, step, entryIterator, entryNext, first, second;\n\n if (iteratorMethod) {\n iterator = getIterator(object, iteratorMethod);\n next = iterator.next;\n while (!(step = call(next, iterator)).done) {\n entryIterator = getIterator(anObject(step.value));\n entryNext = entryIterator.next;\n if (\n (first = call(entryNext, entryIterator)).done ||\n (second = call(entryNext, entryIterator)).done ||\n !call(entryNext, entryIterator).done\n ) throw TypeError('Expected sequence with length 2');\n push(this.entries, { key: $toString(first.value), value: $toString(second.value) });\n }\n } else for (var key in object) if (hasOwn(object, key)) {\n push(this.entries, { key: key, value: $toString(object[key]) });\n }\n },\n parseQuery: function (query) {\n if (query) {\n var attributes = split(query, '&');\n var index = 0;\n var attribute, entry;\n while (index < attributes.length) {\n attribute = attributes[index++];\n if (attribute.length) {\n entry = split(attribute, '=');\n push(this.entries, {\n key: deserialize(shift(entry)),\n value: deserialize(join(entry, '='))\n });\n }\n }\n }\n },\n serialize: function () {\n var entries = this.entries;\n var result = [];\n var index = 0;\n var entry;\n while (index < entries.length) {\n entry = entries[index++];\n push(result, serialize(entry.key) + '=' + serialize(entry.value));\n } return join(result, '&');\n },\n update: function () {\n this.entries.length = 0;\n this.parseQuery(this.url.query);\n },\n updateURL: function () {\n if (this.url) this.url.update();\n }\n};\n\n// `URLSearchParams` constructor\n// https://url.spec.whatwg.org/#interface-urlsearchparams\nvar URLSearchParamsConstructor = function URLSearchParams(/* init */) {\n anInstance(this, URLSearchParamsPrototype);\n var init = arguments.length > 0 ? arguments[0] : undefined;\n setInternalState(this, new URLSearchParamsState(init));\n};\n\nvar URLSearchParamsPrototype = URLSearchParamsConstructor.prototype;\n\nredefineAll(URLSearchParamsPrototype, {\n // `URLSearchParams.prototype.append` method\n // https://url.spec.whatwg.org/#dom-urlsearchparams-append\n append: function append(name, value) {\n validateArgumentsLength(arguments.length, 2);\n var state = getInternalParamsState(this);\n push(state.entries, { key: $toString(name), value: $toString(value) });\n state.updateURL();\n },\n // `URLSearchParams.prototype.delete` method\n // https://url.spec.whatwg.org/#dom-urlsearchparams-delete\n 'delete': function (name) {\n validateArgumentsLength(arguments.length, 1);\n var state = getInternalParamsState(this);\n var entries = state.entries;\n var key = $toString(name);\n var index = 0;\n while (index < entries.length) {\n if (entries[index].key === key) splice(entries, index, 1);\n else index++;\n }\n state.updateURL();\n },\n // `URLSearchParams.prototype.get` method\n // https://url.spec.whatwg.org/#dom-urlsearchparams-get\n get: function get(name) {\n validateArgumentsLength(arguments.length, 1);\n var entries = getInternalParamsState(this).entries;\n var key = $toString(name);\n var index = 0;\n for (; index < entries.length; index++) {\n if (entries[index].key === key) return entries[index].value;\n }\n return null;\n },\n // `URLSearchParams.prototype.getAll` method\n // https://url.spec.whatwg.org/#dom-urlsearchparams-getall\n getAll: function getAll(name) {\n validateArgumentsLength(arguments.length, 1);\n var entries = getInternalParamsState(this).entries;\n var key = $toString(name);\n var result = [];\n var index = 0;\n for (; index < entries.length; index++) {\n if (entries[index].key === key) push(result, entries[index].value);\n }\n return result;\n },\n // `URLSearchParams.prototype.has` method\n // https://url.spec.whatwg.org/#dom-urlsearchparams-has\n has: function has(name) {\n validateArgumentsLength(arguments.length, 1);\n var entries = getInternalParamsState(this).entries;\n var key = $toString(name);\n var index = 0;\n while (index < entries.length) {\n if (entries[index++].key === key) return true;\n }\n return false;\n },\n // `URLSearchParams.prototype.set` method\n // https://url.spec.whatwg.org/#dom-urlsearchparams-set\n set: function set(name, value) {\n validateArgumentsLength(arguments.length, 1);\n var state = getInternalParamsState(this);\n var entries = state.entries;\n var found = false;\n var key = $toString(name);\n var val = $toString(value);\n var index = 0;\n var entry;\n for (; index < entries.length; index++) {\n entry = entries[index];\n if (entry.key === key) {\n if (found) splice(entries, index--, 1);\n else {\n found = true;\n entry.value = val;\n }\n }\n }\n if (!found) push(entries, { key: key, value: val });\n state.updateURL();\n },\n // `URLSearchParams.prototype.sort` method\n // https://url.spec.whatwg.org/#dom-urlsearchparams-sort\n sort: function sort() {\n var state = getInternalParamsState(this);\n arraySort(state.entries, function (a, b) {\n return a.key > b.key ? 1 : -1;\n });\n state.updateURL();\n },\n // `URLSearchParams.prototype.forEach` method\n forEach: function forEach(callback /* , thisArg */) {\n var entries = getInternalParamsState(this).entries;\n var boundFunction = bind(callback, arguments.length > 1 ? arguments[1] : undefined);\n var index = 0;\n var entry;\n while (index < entries.length) {\n entry = entries[index++];\n boundFunction(entry.value, entry.key, this);\n }\n },\n // `URLSearchParams.prototype.keys` method\n keys: function keys() {\n return new URLSearchParamsIterator(this, 'keys');\n },\n // `URLSearchParams.prototype.values` method\n values: function values() {\n return new URLSearchParamsIterator(this, 'values');\n },\n // `URLSearchParams.prototype.entries` method\n entries: function entries() {\n return new URLSearchParamsIterator(this, 'entries');\n }\n}, { enumerable: true });\n\n// `URLSearchParams.prototype[@@iterator]` method\nredefine(URLSearchParamsPrototype, ITERATOR, URLSearchParamsPrototype.entries, { name: 'entries' });\n\n// `URLSearchParams.prototype.toString` method\n// https://url.spec.whatwg.org/#urlsearchparams-stringification-behavior\nredefine(URLSearchParamsPrototype, 'toString', function toString() {\n return getInternalParamsState(this).serialize();\n}, { enumerable: true });\n\nsetToStringTag(URLSearchParamsConstructor, URL_SEARCH_PARAMS);\n\n$({ global: true, forced: !USE_NATIVE_URL }, {\n URLSearchParams: URLSearchParamsConstructor\n});\n\n// Wrap `fetch` and `Request` for correct work with polyfilled `URLSearchParams`\nif (!USE_NATIVE_URL && isCallable(Headers)) {\n var headersHas = uncurryThis(HeadersPrototype.has);\n var headersSet = uncurryThis(HeadersPrototype.set);\n\n var wrapRequestOptions = function (init) {\n if (isObject(init)) {\n var body = init.body;\n var headers;\n if (classof(body) === URL_SEARCH_PARAMS) {\n headers = init.headers ? new Headers(init.headers) : new Headers();\n if (!headersHas(headers, 'content-type')) {\n headersSet(headers, 'content-type', 'application/x-www-form-urlencoded;charset=UTF-8');\n }\n return create(init, {\n body: createPropertyDescriptor(0, $toString(body)),\n headers: createPropertyDescriptor(0, headers)\n });\n }\n } return init;\n };\n\n if (isCallable(n$Fetch)) {\n $({ global: true, enumerable: true, forced: true }, {\n fetch: function fetch(input /* , init */) {\n return n$Fetch(input, arguments.length > 1 ? wrapRequestOptions(arguments[1]) : {});\n }\n });\n }\n\n if (isCallable(N$Request)) {\n var RequestConstructor = function Request(input /* , init */) {\n anInstance(this, RequestPrototype);\n return new N$Request(input, arguments.length > 1 ? wrapRequestOptions(arguments[1]) : {});\n };\n\n RequestPrototype.constructor = RequestConstructor;\n RequestConstructor.prototype = RequestPrototype;\n\n $({ global: true, forced: true }, {\n Request: RequestConstructor\n });\n }\n}\n\nmodule.exports = {\n URLSearchParams: URLSearchParamsConstructor,\n getState: getInternalParamsState\n};\n","'use strict';\n// TODO: in core-js@4, move /modules/ dependencies to public entries for better optimization by tools like `preset-env`\nrequire('../modules/es.string.iterator');\nvar $ = require('../internals/export');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar USE_NATIVE_URL = require('../internals/native-url');\nvar global = require('../internals/global');\nvar bind = require('../internals/function-bind-context');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar defineProperties = require('../internals/object-define-properties');\nvar redefine = require('../internals/redefine');\nvar anInstance = require('../internals/an-instance');\nvar hasOwn = require('../internals/has-own-property');\nvar assign = require('../internals/object-assign');\nvar arrayFrom = require('../internals/array-from');\nvar arraySlice = require('../internals/array-slice-simple');\nvar codeAt = require('../internals/string-multibyte').codeAt;\nvar toASCII = require('../internals/string-punycode-to-ascii');\nvar $toString = require('../internals/to-string');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar URLSearchParamsModule = require('../modules/web.url-search-params');\nvar InternalStateModule = require('../internals/internal-state');\n\nvar setInternalState = InternalStateModule.set;\nvar getInternalURLState = InternalStateModule.getterFor('URL');\nvar URLSearchParams = URLSearchParamsModule.URLSearchParams;\nvar getInternalSearchParamsState = URLSearchParamsModule.getState;\n\nvar NativeURL = global.URL;\nvar TypeError = global.TypeError;\nvar parseInt = global.parseInt;\nvar floor = Math.floor;\nvar pow = Math.pow;\nvar charAt = uncurryThis(''.charAt);\nvar exec = uncurryThis(/./.exec);\nvar join = uncurryThis([].join);\nvar numberToString = uncurryThis(1.0.toString);\nvar pop = uncurryThis([].pop);\nvar push = uncurryThis([].push);\nvar replace = uncurryThis(''.replace);\nvar shift = uncurryThis([].shift);\nvar split = uncurryThis(''.split);\nvar stringSlice = uncurryThis(''.slice);\nvar toLowerCase = uncurryThis(''.toLowerCase);\nvar unshift = uncurryThis([].unshift);\n\nvar INVALID_AUTHORITY = 'Invalid authority';\nvar INVALID_SCHEME = 'Invalid scheme';\nvar INVALID_HOST = 'Invalid host';\nvar INVALID_PORT = 'Invalid port';\n\nvar ALPHA = /[a-z]/i;\n// eslint-disable-next-line regexp/no-obscure-range -- safe\nvar ALPHANUMERIC = /[\\d+-.a-z]/i;\nvar DIGIT = /\\d/;\nvar HEX_START = /^0x/i;\nvar OCT = /^[0-7]+$/;\nvar DEC = /^\\d+$/;\nvar HEX = /^[\\da-f]+$/i;\n/* eslint-disable regexp/no-control-character -- safe */\nvar FORBIDDEN_HOST_CODE_POINT = /[\\0\\t\\n\\r #%/:<>?@[\\\\\\]^|]/;\nvar FORBIDDEN_HOST_CODE_POINT_EXCLUDING_PERCENT = /[\\0\\t\\n\\r #/:<>?@[\\\\\\]^|]/;\nvar LEADING_AND_TRAILING_C0_CONTROL_OR_SPACE = /^[\\u0000-\\u0020]+|[\\u0000-\\u0020]+$/g;\nvar TAB_AND_NEW_LINE = /[\\t\\n\\r]/g;\n/* eslint-enable regexp/no-control-character -- safe */\nvar EOF;\n\n// https://url.spec.whatwg.org/#ipv4-number-parser\nvar parseIPv4 = function (input) {\n var parts = split(input, '.');\n var partsLength, numbers, index, part, radix, number, ipv4;\n if (parts.length && parts[parts.length - 1] == '') {\n parts.length--;\n }\n partsLength = parts.length;\n if (partsLength > 4) return input;\n numbers = [];\n for (index = 0; index < partsLength; index++) {\n part = parts[index];\n if (part == '') return input;\n radix = 10;\n if (part.length > 1 && charAt(part, 0) == '0') {\n radix = exec(HEX_START, part) ? 16 : 8;\n part = stringSlice(part, radix == 8 ? 1 : 2);\n }\n if (part === '') {\n number = 0;\n } else {\n if (!exec(radix == 10 ? DEC : radix == 8 ? OCT : HEX, part)) return input;\n number = parseInt(part, radix);\n }\n push(numbers, number);\n }\n for (index = 0; index < partsLength; index++) {\n number = numbers[index];\n if (index == partsLength - 1) {\n if (number >= pow(256, 5 - partsLength)) return null;\n } else if (number > 255) return null;\n }\n ipv4 = pop(numbers);\n for (index = 0; index < numbers.length; index++) {\n ipv4 += numbers[index] * pow(256, 3 - index);\n }\n return ipv4;\n};\n\n// https://url.spec.whatwg.org/#concept-ipv6-parser\n// eslint-disable-next-line max-statements -- TODO\nvar parseIPv6 = function (input) {\n var address = [0, 0, 0, 0, 0, 0, 0, 0];\n var pieceIndex = 0;\n var compress = null;\n var pointer = 0;\n var value, length, numbersSeen, ipv4Piece, number, swaps, swap;\n\n var chr = function () {\n return charAt(input, pointer);\n };\n\n if (chr() == ':') {\n if (charAt(input, 1) != ':') return;\n pointer += 2;\n pieceIndex++;\n compress = pieceIndex;\n }\n while (chr()) {\n if (pieceIndex == 8) return;\n if (chr() == ':') {\n if (compress !== null) return;\n pointer++;\n pieceIndex++;\n compress = pieceIndex;\n continue;\n }\n value = length = 0;\n while (length < 4 && exec(HEX, chr())) {\n value = value * 16 + parseInt(chr(), 16);\n pointer++;\n length++;\n }\n if (chr() == '.') {\n if (length == 0) return;\n pointer -= length;\n if (pieceIndex > 6) return;\n numbersSeen = 0;\n while (chr()) {\n ipv4Piece = null;\n if (numbersSeen > 0) {\n if (chr() == '.' && numbersSeen < 4) pointer++;\n else return;\n }\n if (!exec(DIGIT, chr())) return;\n while (exec(DIGIT, chr())) {\n number = parseInt(chr(), 10);\n if (ipv4Piece === null) ipv4Piece = number;\n else if (ipv4Piece == 0) return;\n else ipv4Piece = ipv4Piece * 10 + number;\n if (ipv4Piece > 255) return;\n pointer++;\n }\n address[pieceIndex] = address[pieceIndex] * 256 + ipv4Piece;\n numbersSeen++;\n if (numbersSeen == 2 || numbersSeen == 4) pieceIndex++;\n }\n if (numbersSeen != 4) return;\n break;\n } else if (chr() == ':') {\n pointer++;\n if (!chr()) return;\n } else if (chr()) return;\n address[pieceIndex++] = value;\n }\n if (compress !== null) {\n swaps = pieceIndex - compress;\n pieceIndex = 7;\n while (pieceIndex != 0 && swaps > 0) {\n swap = address[pieceIndex];\n address[pieceIndex--] = address[compress + swaps - 1];\n address[compress + --swaps] = swap;\n }\n } else if (pieceIndex != 8) return;\n return address;\n};\n\nvar findLongestZeroSequence = function (ipv6) {\n var maxIndex = null;\n var maxLength = 1;\n var currStart = null;\n var currLength = 0;\n var index = 0;\n for (; index < 8; index++) {\n if (ipv6[index] !== 0) {\n if (currLength > maxLength) {\n maxIndex = currStart;\n maxLength = currLength;\n }\n currStart = null;\n currLength = 0;\n } else {\n if (currStart === null) currStart = index;\n ++currLength;\n }\n }\n if (currLength > maxLength) {\n maxIndex = currStart;\n maxLength = currLength;\n }\n return maxIndex;\n};\n\n// https://url.spec.whatwg.org/#host-serializing\nvar serializeHost = function (host) {\n var result, index, compress, ignore0;\n // ipv4\n if (typeof host == 'number') {\n result = [];\n for (index = 0; index < 4; index++) {\n unshift(result, host % 256);\n host = floor(host / 256);\n } return join(result, '.');\n // ipv6\n } else if (typeof host == 'object') {\n result = '';\n compress = findLongestZeroSequence(host);\n for (index = 0; index < 8; index++) {\n if (ignore0 && host[index] === 0) continue;\n if (ignore0) ignore0 = false;\n if (compress === index) {\n result += index ? ':' : '::';\n ignore0 = true;\n } else {\n result += numberToString(host[index], 16);\n if (index < 7) result += ':';\n }\n }\n return '[' + result + ']';\n } return host;\n};\n\nvar C0ControlPercentEncodeSet = {};\nvar fragmentPercentEncodeSet = assign({}, C0ControlPercentEncodeSet, {\n ' ': 1, '\"': 1, '<': 1, '>': 1, '`': 1\n});\nvar pathPercentEncodeSet = assign({}, fragmentPercentEncodeSet, {\n '#': 1, '?': 1, '{': 1, '}': 1\n});\nvar userinfoPercentEncodeSet = assign({}, pathPercentEncodeSet, {\n '/': 1, ':': 1, ';': 1, '=': 1, '@': 1, '[': 1, '\\\\': 1, ']': 1, '^': 1, '|': 1\n});\n\nvar percentEncode = function (chr, set) {\n var code = codeAt(chr, 0);\n return code > 0x20 && code < 0x7F && !hasOwn(set, chr) ? chr : encodeURIComponent(chr);\n};\n\n// https://url.spec.whatwg.org/#special-scheme\nvar specialSchemes = {\n ftp: 21,\n file: null,\n http: 80,\n https: 443,\n ws: 80,\n wss: 443\n};\n\n// https://url.spec.whatwg.org/#windows-drive-letter\nvar isWindowsDriveLetter = function (string, normalized) {\n var second;\n return string.length == 2 && exec(ALPHA, charAt(string, 0))\n && ((second = charAt(string, 1)) == ':' || (!normalized && second == '|'));\n};\n\n// https://url.spec.whatwg.org/#start-with-a-windows-drive-letter\nvar startsWithWindowsDriveLetter = function (string) {\n var third;\n return string.length > 1 && isWindowsDriveLetter(stringSlice(string, 0, 2)) && (\n string.length == 2 ||\n ((third = charAt(string, 2)) === '/' || third === '\\\\' || third === '?' || third === '#')\n );\n};\n\n// https://url.spec.whatwg.org/#single-dot-path-segment\nvar isSingleDot = function (segment) {\n return segment === '.' || toLowerCase(segment) === '%2e';\n};\n\n// https://url.spec.whatwg.org/#double-dot-path-segment\nvar isDoubleDot = function (segment) {\n segment = toLowerCase(segment);\n return segment === '..' || segment === '%2e.' || segment === '.%2e' || segment === '%2e%2e';\n};\n\n// States:\nvar SCHEME_START = {};\nvar SCHEME = {};\nvar NO_SCHEME = {};\nvar SPECIAL_RELATIVE_OR_AUTHORITY = {};\nvar PATH_OR_AUTHORITY = {};\nvar RELATIVE = {};\nvar RELATIVE_SLASH = {};\nvar SPECIAL_AUTHORITY_SLASHES = {};\nvar SPECIAL_AUTHORITY_IGNORE_SLASHES = {};\nvar AUTHORITY = {};\nvar HOST = {};\nvar HOSTNAME = {};\nvar PORT = {};\nvar FILE = {};\nvar FILE_SLASH = {};\nvar FILE_HOST = {};\nvar PATH_START = {};\nvar PATH = {};\nvar CANNOT_BE_A_BASE_URL_PATH = {};\nvar QUERY = {};\nvar FRAGMENT = {};\n\nvar URLState = function (url, isBase, base) {\n var urlString = $toString(url);\n var baseState, failure, searchParams;\n if (isBase) {\n failure = this.parse(urlString);\n if (failure) throw TypeError(failure);\n this.searchParams = null;\n } else {\n if (base !== undefined) baseState = new URLState(base, true);\n failure = this.parse(urlString, null, baseState);\n if (failure) throw TypeError(failure);\n searchParams = getInternalSearchParamsState(new URLSearchParams());\n searchParams.bindURL(this);\n this.searchParams = searchParams;\n }\n};\n\nURLState.prototype = {\n type: 'URL',\n // https://url.spec.whatwg.org/#url-parsing\n // eslint-disable-next-line max-statements -- TODO\n parse: function (input, stateOverride, base) {\n var url = this;\n var state = stateOverride || SCHEME_START;\n var pointer = 0;\n var buffer = '';\n var seenAt = false;\n var seenBracket = false;\n var seenPasswordToken = false;\n var codePoints, chr, bufferCodePoints, failure;\n\n input = $toString(input);\n\n if (!stateOverride) {\n url.scheme = '';\n url.username = '';\n url.password = '';\n url.host = null;\n url.port = null;\n url.path = [];\n url.query = null;\n url.fragment = null;\n url.cannotBeABaseURL = false;\n input = replace(input, LEADING_AND_TRAILING_C0_CONTROL_OR_SPACE, '');\n }\n\n input = replace(input, TAB_AND_NEW_LINE, '');\n\n codePoints = arrayFrom(input);\n\n while (pointer <= codePoints.length) {\n chr = codePoints[pointer];\n switch (state) {\n case SCHEME_START:\n if (chr && exec(ALPHA, chr)) {\n buffer += toLowerCase(chr);\n state = SCHEME;\n } else if (!stateOverride) {\n state = NO_SCHEME;\n continue;\n } else return INVALID_SCHEME;\n break;\n\n case SCHEME:\n if (chr && (exec(ALPHANUMERIC, chr) || chr == '+' || chr == '-' || chr == '.')) {\n buffer += toLowerCase(chr);\n } else if (chr == ':') {\n if (stateOverride && (\n (url.isSpecial() != hasOwn(specialSchemes, buffer)) ||\n (buffer == 'file' && (url.includesCredentials() || url.port !== null)) ||\n (url.scheme == 'file' && !url.host)\n )) return;\n url.scheme = buffer;\n if (stateOverride) {\n if (url.isSpecial() && specialSchemes[url.scheme] == url.port) url.port = null;\n return;\n }\n buffer = '';\n if (url.scheme == 'file') {\n state = FILE;\n } else if (url.isSpecial() && base && base.scheme == url.scheme) {\n state = SPECIAL_RELATIVE_OR_AUTHORITY;\n } else if (url.isSpecial()) {\n state = SPECIAL_AUTHORITY_SLASHES;\n } else if (codePoints[pointer + 1] == '/') {\n state = PATH_OR_AUTHORITY;\n pointer++;\n } else {\n url.cannotBeABaseURL = true;\n push(url.path, '');\n state = CANNOT_BE_A_BASE_URL_PATH;\n }\n } else if (!stateOverride) {\n buffer = '';\n state = NO_SCHEME;\n pointer = 0;\n continue;\n } else return INVALID_SCHEME;\n break;\n\n case NO_SCHEME:\n if (!base || (base.cannotBeABaseURL && chr != '#')) return INVALID_SCHEME;\n if (base.cannotBeABaseURL && chr == '#') {\n url.scheme = base.scheme;\n url.path = arraySlice(base.path);\n url.query = base.query;\n url.fragment = '';\n url.cannotBeABaseURL = true;\n state = FRAGMENT;\n break;\n }\n state = base.scheme == 'file' ? FILE : RELATIVE;\n continue;\n\n case SPECIAL_RELATIVE_OR_AUTHORITY:\n if (chr == '/' && codePoints[pointer + 1] == '/') {\n state = SPECIAL_AUTHORITY_IGNORE_SLASHES;\n pointer++;\n } else {\n state = RELATIVE;\n continue;\n } break;\n\n case PATH_OR_AUTHORITY:\n if (chr == '/') {\n state = AUTHORITY;\n break;\n } else {\n state = PATH;\n continue;\n }\n\n case RELATIVE:\n url.scheme = base.scheme;\n if (chr == EOF) {\n url.username = base.username;\n url.password = base.password;\n url.host = base.host;\n url.port = base.port;\n url.path = arraySlice(base.path);\n url.query = base.query;\n } else if (chr == '/' || (chr == '\\\\' && url.isSpecial())) {\n state = RELATIVE_SLASH;\n } else if (chr == '?') {\n url.username = base.username;\n url.password = base.password;\n url.host = base.host;\n url.port = base.port;\n url.path = arraySlice(base.path);\n url.query = '';\n state = QUERY;\n } else if (chr == '#') {\n url.username = base.username;\n url.password = base.password;\n url.host = base.host;\n url.port = base.port;\n url.path = arraySlice(base.path);\n url.query = base.query;\n url.fragment = '';\n state = FRAGMENT;\n } else {\n url.username = base.username;\n url.password = base.password;\n url.host = base.host;\n url.port = base.port;\n url.path = arraySlice(base.path);\n url.path.length--;\n state = PATH;\n continue;\n } break;\n\n case RELATIVE_SLASH:\n if (url.isSpecial() && (chr == '/' || chr == '\\\\')) {\n state = SPECIAL_AUTHORITY_IGNORE_SLASHES;\n } else if (chr == '/') {\n state = AUTHORITY;\n } else {\n url.username = base.username;\n url.password = base.password;\n url.host = base.host;\n url.port = base.port;\n state = PATH;\n continue;\n } break;\n\n case SPECIAL_AUTHORITY_SLASHES:\n state = SPECIAL_AUTHORITY_IGNORE_SLASHES;\n if (chr != '/' || charAt(buffer, pointer + 1) != '/') continue;\n pointer++;\n break;\n\n case SPECIAL_AUTHORITY_IGNORE_SLASHES:\n if (chr != '/' && chr != '\\\\') {\n state = AUTHORITY;\n continue;\n } break;\n\n case AUTHORITY:\n if (chr == '@') {\n if (seenAt) buffer = '%40' + buffer;\n seenAt = true;\n bufferCodePoints = arrayFrom(buffer);\n for (var i = 0; i < bufferCodePoints.length; i++) {\n var codePoint = bufferCodePoints[i];\n if (codePoint == ':' && !seenPasswordToken) {\n seenPasswordToken = true;\n continue;\n }\n var encodedCodePoints = percentEncode(codePoint, userinfoPercentEncodeSet);\n if (seenPasswordToken) url.password += encodedCodePoints;\n else url.username += encodedCodePoints;\n }\n buffer = '';\n } else if (\n chr == EOF || chr == '/' || chr == '?' || chr == '#' ||\n (chr == '\\\\' && url.isSpecial())\n ) {\n if (seenAt && buffer == '') return INVALID_AUTHORITY;\n pointer -= arrayFrom(buffer).length + 1;\n buffer = '';\n state = HOST;\n } else buffer += chr;\n break;\n\n case HOST:\n case HOSTNAME:\n if (stateOverride && url.scheme == 'file') {\n state = FILE_HOST;\n continue;\n } else if (chr == ':' && !seenBracket) {\n if (buffer == '') return INVALID_HOST;\n failure = url.parseHost(buffer);\n if (failure) return failure;\n buffer = '';\n state = PORT;\n if (stateOverride == HOSTNAME) return;\n } else if (\n chr == EOF || chr == '/' || chr == '?' || chr == '#' ||\n (chr == '\\\\' && url.isSpecial())\n ) {\n if (url.isSpecial() && buffer == '') return INVALID_HOST;\n if (stateOverride && buffer == '' && (url.includesCredentials() || url.port !== null)) return;\n failure = url.parseHost(buffer);\n if (failure) return failure;\n buffer = '';\n state = PATH_START;\n if (stateOverride) return;\n continue;\n } else {\n if (chr == '[') seenBracket = true;\n else if (chr == ']') seenBracket = false;\n buffer += chr;\n } break;\n\n case PORT:\n if (exec(DIGIT, chr)) {\n buffer += chr;\n } else if (\n chr == EOF || chr == '/' || chr == '?' || chr == '#' ||\n (chr == '\\\\' && url.isSpecial()) ||\n stateOverride\n ) {\n if (buffer != '') {\n var port = parseInt(buffer, 10);\n if (port > 0xFFFF) return INVALID_PORT;\n url.port = (url.isSpecial() && port === specialSchemes[url.scheme]) ? null : port;\n buffer = '';\n }\n if (stateOverride) return;\n state = PATH_START;\n continue;\n } else return INVALID_PORT;\n break;\n\n case FILE:\n url.scheme = 'file';\n if (chr == '/' || chr == '\\\\') state = FILE_SLASH;\n else if (base && base.scheme == 'file') {\n if (chr == EOF) {\n url.host = base.host;\n url.path = arraySlice(base.path);\n url.query = base.query;\n } else if (chr == '?') {\n url.host = base.host;\n url.path = arraySlice(base.path);\n url.query = '';\n state = QUERY;\n } else if (chr == '#') {\n url.host = base.host;\n url.path = arraySlice(base.path);\n url.query = base.query;\n url.fragment = '';\n state = FRAGMENT;\n } else {\n if (!startsWithWindowsDriveLetter(join(arraySlice(codePoints, pointer), ''))) {\n url.host = base.host;\n url.path = arraySlice(base.path);\n url.shortenPath();\n }\n state = PATH;\n continue;\n }\n } else {\n state = PATH;\n continue;\n } break;\n\n case FILE_SLASH:\n if (chr == '/' || chr == '\\\\') {\n state = FILE_HOST;\n break;\n }\n if (base && base.scheme == 'file' && !startsWithWindowsDriveLetter(join(arraySlice(codePoints, pointer), ''))) {\n if (isWindowsDriveLetter(base.path[0], true)) push(url.path, base.path[0]);\n else url.host = base.host;\n }\n state = PATH;\n continue;\n\n case FILE_HOST:\n if (chr == EOF || chr == '/' || chr == '\\\\' || chr == '?' || chr == '#') {\n if (!stateOverride && isWindowsDriveLetter(buffer)) {\n state = PATH;\n } else if (buffer == '') {\n url.host = '';\n if (stateOverride) return;\n state = PATH_START;\n } else {\n failure = url.parseHost(buffer);\n if (failure) return failure;\n if (url.host == 'localhost') url.host = '';\n if (stateOverride) return;\n buffer = '';\n state = PATH_START;\n } continue;\n } else buffer += chr;\n break;\n\n case PATH_START:\n if (url.isSpecial()) {\n state = PATH;\n if (chr != '/' && chr != '\\\\') continue;\n } else if (!stateOverride && chr == '?') {\n url.query = '';\n state = QUERY;\n } else if (!stateOverride && chr == '#') {\n url.fragment = '';\n state = FRAGMENT;\n } else if (chr != EOF) {\n state = PATH;\n if (chr != '/') continue;\n } break;\n\n case PATH:\n if (\n chr == EOF || chr == '/' ||\n (chr == '\\\\' && url.isSpecial()) ||\n (!stateOverride && (chr == '?' || chr == '#'))\n ) {\n if (isDoubleDot(buffer)) {\n url.shortenPath();\n if (chr != '/' && !(chr == '\\\\' && url.isSpecial())) {\n push(url.path, '');\n }\n } else if (isSingleDot(buffer)) {\n if (chr != '/' && !(chr == '\\\\' && url.isSpecial())) {\n push(url.path, '');\n }\n } else {\n if (url.scheme == 'file' && !url.path.length && isWindowsDriveLetter(buffer)) {\n if (url.host) url.host = '';\n buffer = charAt(buffer, 0) + ':'; // normalize windows drive letter\n }\n push(url.path, buffer);\n }\n buffer = '';\n if (url.scheme == 'file' && (chr == EOF || chr == '?' || chr == '#')) {\n while (url.path.length > 1 && url.path[0] === '') {\n shift(url.path);\n }\n }\n if (chr == '?') {\n url.query = '';\n state = QUERY;\n } else if (chr == '#') {\n url.fragment = '';\n state = FRAGMENT;\n }\n } else {\n buffer += percentEncode(chr, pathPercentEncodeSet);\n } break;\n\n case CANNOT_BE_A_BASE_URL_PATH:\n if (chr == '?') {\n url.query = '';\n state = QUERY;\n } else if (chr == '#') {\n url.fragment = '';\n state = FRAGMENT;\n } else if (chr != EOF) {\n url.path[0] += percentEncode(chr, C0ControlPercentEncodeSet);\n } break;\n\n case QUERY:\n if (!stateOverride && chr == '#') {\n url.fragment = '';\n state = FRAGMENT;\n } else if (chr != EOF) {\n if (chr == \"'\" && url.isSpecial()) url.query += '%27';\n else if (chr == '#') url.query += '%23';\n else url.query += percentEncode(chr, C0ControlPercentEncodeSet);\n } break;\n\n case FRAGMENT:\n if (chr != EOF) url.fragment += percentEncode(chr, fragmentPercentEncodeSet);\n break;\n }\n\n pointer++;\n }\n },\n // https://url.spec.whatwg.org/#host-parsing\n parseHost: function (input) {\n var result, codePoints, index;\n if (charAt(input, 0) == '[') {\n if (charAt(input, input.length - 1) != ']') return INVALID_HOST;\n result = parseIPv6(stringSlice(input, 1, -1));\n if (!result) return INVALID_HOST;\n this.host = result;\n // opaque host\n } else if (!this.isSpecial()) {\n if (exec(FORBIDDEN_HOST_CODE_POINT_EXCLUDING_PERCENT, input)) return INVALID_HOST;\n result = '';\n codePoints = arrayFrom(input);\n for (index = 0; index < codePoints.length; index++) {\n result += percentEncode(codePoints[index], C0ControlPercentEncodeSet);\n }\n this.host = result;\n } else {\n input = toASCII(input);\n if (exec(FORBIDDEN_HOST_CODE_POINT, input)) return INVALID_HOST;\n result = parseIPv4(input);\n if (result === null) return INVALID_HOST;\n this.host = result;\n }\n },\n // https://url.spec.whatwg.org/#cannot-have-a-username-password-port\n cannotHaveUsernamePasswordPort: function () {\n return !this.host || this.cannotBeABaseURL || this.scheme == 'file';\n },\n // https://url.spec.whatwg.org/#include-credentials\n includesCredentials: function () {\n return this.username != '' || this.password != '';\n },\n // https://url.spec.whatwg.org/#is-special\n isSpecial: function () {\n return hasOwn(specialSchemes, this.scheme);\n },\n // https://url.spec.whatwg.org/#shorten-a-urls-path\n shortenPath: function () {\n var path = this.path;\n var pathSize = path.length;\n if (pathSize && (this.scheme != 'file' || pathSize != 1 || !isWindowsDriveLetter(path[0], true))) {\n path.length--;\n }\n },\n // https://url.spec.whatwg.org/#concept-url-serializer\n serialize: function () {\n var url = this;\n var scheme = url.scheme;\n var username = url.username;\n var password = url.password;\n var host = url.host;\n var port = url.port;\n var path = url.path;\n var query = url.query;\n var fragment = url.fragment;\n var output = scheme + ':';\n if (host !== null) {\n output += '//';\n if (url.includesCredentials()) {\n output += username + (password ? ':' + password : '') + '@';\n }\n output += serializeHost(host);\n if (port !== null) output += ':' + port;\n } else if (scheme == 'file') output += '//';\n output += url.cannotBeABaseURL ? path[0] : path.length ? '/' + join(path, '/') : '';\n if (query !== null) output += '?' + query;\n if (fragment !== null) output += '#' + fragment;\n return output;\n },\n // https://url.spec.whatwg.org/#dom-url-href\n setHref: function (href) {\n var failure = this.parse(href);\n if (failure) throw TypeError(failure);\n this.searchParams.update();\n },\n // https://url.spec.whatwg.org/#dom-url-origin\n getOrigin: function () {\n var scheme = this.scheme;\n var port = this.port;\n if (scheme == 'blob') try {\n return new URLConstructor(scheme.path[0]).origin;\n } catch (error) {\n return 'null';\n }\n if (scheme == 'file' || !this.isSpecial()) return 'null';\n return scheme + '://' + serializeHost(this.host) + (port !== null ? ':' + port : '');\n },\n // https://url.spec.whatwg.org/#dom-url-protocol\n getProtocol: function () {\n return this.scheme + ':';\n },\n setProtocol: function (protocol) {\n this.parse($toString(protocol) + ':', SCHEME_START);\n },\n // https://url.spec.whatwg.org/#dom-url-username\n getUsername: function () {\n return this.username;\n },\n setUsername: function (username) {\n var codePoints = arrayFrom($toString(username));\n if (this.cannotHaveUsernamePasswordPort()) return;\n this.username = '';\n for (var i = 0; i < codePoints.length; i++) {\n this.username += percentEncode(codePoints[i], userinfoPercentEncodeSet);\n }\n },\n // https://url.spec.whatwg.org/#dom-url-password\n getPassword: function () {\n return this.password;\n },\n setPassword: function (password) {\n var codePoints = arrayFrom($toString(password));\n if (this.cannotHaveUsernamePasswordPort()) return;\n this.password = '';\n for (var i = 0; i < codePoints.length; i++) {\n this.password += percentEncode(codePoints[i], userinfoPercentEncodeSet);\n }\n },\n // https://url.spec.whatwg.org/#dom-url-host\n getHost: function () {\n var host = this.host;\n var port = this.port;\n return host === null ? ''\n : port === null ? serializeHost(host)\n : serializeHost(host) + ':' + port;\n },\n setHost: function (host) {\n if (this.cannotBeABaseURL) return;\n this.parse(host, HOST);\n },\n // https://url.spec.whatwg.org/#dom-url-hostname\n getHostname: function () {\n var host = this.host;\n return host === null ? '' : serializeHost(host);\n },\n setHostname: function (hostname) {\n if (this.cannotBeABaseURL) return;\n this.parse(hostname, HOSTNAME);\n },\n // https://url.spec.whatwg.org/#dom-url-port\n getPort: function () {\n var port = this.port;\n return port === null ? '' : $toString(port);\n },\n setPort: function (port) {\n if (this.cannotHaveUsernamePasswordPort()) return;\n port = $toString(port);\n if (port == '') this.port = null;\n else this.parse(port, PORT);\n },\n // https://url.spec.whatwg.org/#dom-url-pathname\n getPathname: function () {\n var path = this.path;\n return this.cannotBeABaseURL ? path[0] : path.length ? '/' + join(path, '/') : '';\n },\n setPathname: function (pathname) {\n if (this.cannotBeABaseURL) return;\n this.path = [];\n this.parse(pathname, PATH_START);\n },\n // https://url.spec.whatwg.org/#dom-url-search\n getSearch: function () {\n var query = this.query;\n return query ? '?' + query : '';\n },\n setSearch: function (search) {\n search = $toString(search);\n if (search == '') {\n this.query = null;\n } else {\n if ('?' == charAt(search, 0)) search = stringSlice(search, 1);\n this.query = '';\n this.parse(search, QUERY);\n }\n this.searchParams.update();\n },\n // https://url.spec.whatwg.org/#dom-url-searchparams\n getSearchParams: function () {\n return this.searchParams.facade;\n },\n // https://url.spec.whatwg.org/#dom-url-hash\n getHash: function () {\n var fragment = this.fragment;\n return fragment ? '#' + fragment : '';\n },\n setHash: function (hash) {\n hash = $toString(hash);\n if (hash == '') {\n this.fragment = null;\n return;\n }\n if ('#' == charAt(hash, 0)) hash = stringSlice(hash, 1);\n this.fragment = '';\n this.parse(hash, FRAGMENT);\n },\n update: function () {\n this.query = this.searchParams.serialize() || null;\n }\n};\n\n// `URL` constructor\n// https://url.spec.whatwg.org/#url-class\nvar URLConstructor = function URL(url /* , base */) {\n var that = anInstance(this, URLPrototype);\n var base = arguments.length > 1 ? arguments[1] : undefined;\n var state = setInternalState(that, new URLState(url, false, base));\n if (!DESCRIPTORS) {\n that.href = state.serialize();\n that.origin = state.getOrigin();\n that.protocol = state.getProtocol();\n that.username = state.getUsername();\n that.password = state.getPassword();\n that.host = state.getHost();\n that.hostname = state.getHostname();\n that.port = state.getPort();\n that.pathname = state.getPathname();\n that.search = state.getSearch();\n that.searchParams = state.getSearchParams();\n that.hash = state.getHash();\n }\n};\n\nvar URLPrototype = URLConstructor.prototype;\n\nvar accessorDescriptor = function (getter, setter) {\n return {\n get: function () {\n return getInternalURLState(this)[getter]();\n },\n set: setter && function (value) {\n return getInternalURLState(this)[setter](value);\n },\n configurable: true,\n enumerable: true\n };\n};\n\nif (DESCRIPTORS) {\n defineProperties(URLPrototype, {\n // `URL.prototype.href` accessors pair\n // https://url.spec.whatwg.org/#dom-url-href\n href: accessorDescriptor('serialize', 'setHref'),\n // `URL.prototype.origin` getter\n // https://url.spec.whatwg.org/#dom-url-origin\n origin: accessorDescriptor('getOrigin'),\n // `URL.prototype.protocol` accessors pair\n // https://url.spec.whatwg.org/#dom-url-protocol\n protocol: accessorDescriptor('getProtocol', 'setProtocol'),\n // `URL.prototype.username` accessors pair\n // https://url.spec.whatwg.org/#dom-url-username\n username: accessorDescriptor('getUsername', 'setUsername'),\n // `URL.prototype.password` accessors pair\n // https://url.spec.whatwg.org/#dom-url-password\n password: accessorDescriptor('getPassword', 'setPassword'),\n // `URL.prototype.host` accessors pair\n // https://url.spec.whatwg.org/#dom-url-host\n host: accessorDescriptor('getHost', 'setHost'),\n // `URL.prototype.hostname` accessors pair\n // https://url.spec.whatwg.org/#dom-url-hostname\n hostname: accessorDescriptor('getHostname', 'setHostname'),\n // `URL.prototype.port` accessors pair\n // https://url.spec.whatwg.org/#dom-url-port\n port: accessorDescriptor('getPort', 'setPort'),\n // `URL.prototype.pathname` accessors pair\n // https://url.spec.whatwg.org/#dom-url-pathname\n pathname: accessorDescriptor('getPathname', 'setPathname'),\n // `URL.prototype.search` accessors pair\n // https://url.spec.whatwg.org/#dom-url-search\n search: accessorDescriptor('getSearch', 'setSearch'),\n // `URL.prototype.searchParams` getter\n // https://url.spec.whatwg.org/#dom-url-searchparams\n searchParams: accessorDescriptor('getSearchParams'),\n // `URL.prototype.hash` accessors pair\n // https://url.spec.whatwg.org/#dom-url-hash\n hash: accessorDescriptor('getHash', 'setHash')\n });\n}\n\n// `URL.prototype.toJSON` method\n// https://url.spec.whatwg.org/#dom-url-tojson\nredefine(URLPrototype, 'toJSON', function toJSON() {\n return getInternalURLState(this).serialize();\n}, { enumerable: true });\n\n// `URL.prototype.toString` method\n// https://url.spec.whatwg.org/#URL-stringification-behavior\nredefine(URLPrototype, 'toString', function toString() {\n return getInternalURLState(this).serialize();\n}, { enumerable: true });\n\nif (NativeURL) {\n var nativeCreateObjectURL = NativeURL.createObjectURL;\n var nativeRevokeObjectURL = NativeURL.revokeObjectURL;\n // `URL.createObjectURL` method\n // https://developer.mozilla.org/en-US/docs/Web/API/URL/createObjectURL\n if (nativeCreateObjectURL) redefine(URLConstructor, 'createObjectURL', bind(nativeCreateObjectURL, NativeURL));\n // `URL.revokeObjectURL` method\n // https://developer.mozilla.org/en-US/docs/Web/API/URL/revokeObjectURL\n if (nativeRevokeObjectURL) redefine(URLConstructor, 'revokeObjectURL', bind(nativeRevokeObjectURL, NativeURL));\n}\n\nsetToStringTag(URLConstructor, 'URL');\n\n$({ global: true, forced: !USE_NATIVE_URL, sham: !DESCRIPTORS }, {\n URL: URLConstructor\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar call = require('../internals/function-call');\n\n// `URL.prototype.toJSON` method\n// https://url.spec.whatwg.org/#dom-url-tojson\n$({ target: 'URL', proto: true, enumerable: true }, {\n toJSON: function toJSON() {\n return call(URL.prototype.toString, this);\n }\n});\n","var parent = require('../../web/url-search-params');\nrequire('../../modules/web.dom-collections.iterator');\n\nmodule.exports = parent;\n","var parent = require('../../web/url');\n\nmodule.exports = parent;\n","require('../modules/web.url-search-params');\nvar path = require('../internals/path');\n\nmodule.exports = path.URLSearchParams;\n","require('../modules/web.url');\nrequire('../modules/web.url.to-json');\nrequire('../modules/web.url-search-params');\nvar path = require('../internals/path');\n\nmodule.exports = path.URL;\n",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,"/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('goog.asserts');\n\n\n/**\n * @summary An assertion framework which is compiled out for deployment.\n * NOTE: this is not the closure library version. This uses the same name so\n * the closure compiler will be able to use the conditions to assist type\n * checking.\n */\ngoog.asserts = class {\n /**\n * @param {*} val\n * @param {string} message\n */\n static assert(val, message) {}\n};\n\n\n/**\n * @define {boolean} true to enable asserts, false otherwise.\n */\ngoog.asserts.ENABLE_ASSERTS = goog.DEBUG;\n\n\n// Install assert functions.\nif (goog.asserts.ENABLE_ASSERTS) {\n if (console.assert && console.assert.bind) {\n // eslint-disable-next-line no-restricted-syntax\n goog.asserts.assert = console.assert.bind(console);\n }\n}\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.abr.Ewma');\n\ngoog.require('goog.asserts');\n\n\n/**\n * @summary\n * This class computes an exponentionally-weighted moving average.\n */\nshaka.abr.Ewma = class {\n /**\n * @param {number} halfLife The quantity of prior samples (by weight) used\n * when creating a new estimate. Those prior samples make up half of the\n * new estimate.\n */\n constructor(halfLife) {\n goog.asserts.assert(halfLife > 0, 'expected halfLife to be positive');\n\n /**\n * Larger values of alpha expire historical data more slowly.\n * @private {number}\n */\n this.alpha_ = Math.exp(Math.log(0.5) / halfLife);\n\n /** @private {number} */\n this.estimate_ = 0;\n\n /** @private {number} */\n this.totalWeight_ = 0;\n }\n\n\n /**\n * Update the alpha with a new halfLife value.\n *\n * @param {number} halfLife The quantity of prior samples (by weight) used\n * when creating a new estimate. Those prior samples make up half of the\n * new estimate.\n */\n updateAlpha(halfLife) {\n goog.asserts.assert(halfLife > 0, 'expected halfLife to be positive');\n this.alpha_ = Math.exp(Math.log(0.5) / halfLife);\n }\n\n\n /**\n * Takes a sample.\n *\n * @param {number} weight\n * @param {number} value\n */\n sample(weight, value) {\n const adjAlpha = Math.pow(this.alpha_, weight);\n const newEstimate = value * (1 - adjAlpha) + adjAlpha * this.estimate_;\n\n if (!isNaN(newEstimate)) {\n this.estimate_ = newEstimate;\n this.totalWeight_ += weight;\n }\n }\n\n\n /**\n * @return {number}\n */\n getEstimate() {\n const zeroFactor = 1 - Math.pow(this.alpha_, this.totalWeight_);\n return this.estimate_ / zeroFactor;\n }\n};\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.abr.EwmaBandwidthEstimator');\n\ngoog.require('shaka.abr.Ewma');\n\n\n/**\n * @summary\n * This class tracks bandwidth samples and estimates available bandwidth.\n * Based on the minimum of two exponentially-weighted moving averages with\n * different half-lives.\n *\n */\nshaka.abr.EwmaBandwidthEstimator = class {\n /** */\n constructor() {\n /**\n * A fast-moving average.\n * Half of the estimate is based on the last 2 seconds of sample history.\n * @private {!shaka.abr.Ewma}\n */\n this.fast_ = new shaka.abr.Ewma(2);\n\n /**\n * A slow-moving average.\n * Half of the estimate is based on the last 5 seconds of sample history.\n * @private {!shaka.abr.Ewma}\n */\n this.slow_ = new shaka.abr.Ewma(5);\n\n /**\n * Number of bytes sampled.\n * @private {number}\n */\n this.bytesSampled_ = 0;\n\n\n /**\n * Minimum number of bytes sampled before we trust the estimate. If we have\n * not sampled much data, our estimate may not be accurate enough to trust.\n * If bytesSampled_ is less than minTotalBytes_, we use defaultEstimate_.\n * This specific value is based on experimentation.\n *\n * @private {number}\n */\n this.minTotalBytes_ = 128e3; // 128kB\n\n /**\n * Minimum number of bytes, under which samples are discarded. Our models\n * do not include latency information, so connection startup time (time to\n * first byte) is considered part of the download time. Because of this, we\n * should ignore very small downloads which would cause our estimate to be\n * too low.\n * This specific value is based on experimentation.\n *\n * @private {number}\n */\n this.minBytes_ = 16e3; // 16kB\n }\n\n\n /**\n * Called by the Player to provide an updated configuration any time it\n * changes.\n * Must be called at least once before init().\n *\n * @param {shaka.extern.AdvancedAbrConfiguration} config\n */\n configure(config) {\n this.minTotalBytes_ = config.minTotalBytes;\n this.minBytes_ = config.minBytes;\n this.fast_.updateAlpha(config.fastHalfLife);\n this.slow_.updateAlpha(config.slowHalfLife);\n }\n\n\n /**\n * Takes a bandwidth sample.\n *\n * @param {number} durationMs The amount of time, in milliseconds, for a\n * particular request.\n * @param {number} numBytes The total number of bytes transferred in that\n * request.\n */\n sample(\n durationMs, numBytes) {\n if (numBytes < this.minBytes_) {\n return;\n }\n\n const bandwidth = 8000 * numBytes / durationMs;\n const weight = durationMs / 1000;\n\n this.bytesSampled_ += numBytes;\n this.fast_.sample(weight, bandwidth);\n this.slow_.sample(weight, bandwidth);\n }\n\n\n /**\n * Gets the current bandwidth estimate.\n *\n * @param {number} defaultEstimate\n * @return {number} The bandwidth estimate in bits per second.\n */\n getBandwidthEstimate(defaultEstimate) {\n if (this.bytesSampled_ < this.minTotalBytes_) {\n return defaultEstimate;\n }\n\n // Take the minimum of these two estimates. This should have the effect\n // of adapting down quickly, but up more slowly.\n return Math.min(this.fast_.getEstimate(), this.slow_.getEstimate());\n }\n\n\n /**\n * @return {boolean} True if there is enough data to produce a meaningful\n * estimate.\n */\n hasGoodEstimate() {\n return this.bytesSampled_ >= this.minTotalBytes_;\n }\n};\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.log');\n\ngoog.require('goog.asserts');\n\n/**\n * @summary\n * A console logging framework which is compiled out for deployment. This is\n * only available when using the uncompiled version.\n * @exportDoc\n */\nshaka.log = class {\n /**\n * This always logs to the console, even in Release mode. This should only be\n * used for deprecation messages and things the app should never ignore.\n *\n * @param {...*} args\n */\n static alwaysError(...args) {}\n\n /**\n * This always logs to the console, even in Release mode. This should only be\n * used for deprecation messages and things the app should never ignore.\n *\n * @param {...*} args\n */\n static alwaysWarn(...args) {}\n\n /**\n * This always logs to the console, even in Release mode. This should only be\n * used for deprecation messages and things the app should never ignore.\n *\n * @param {string} id\n * @param {...*} args\n */\n static warnOnce(id, ...args) {\n if (shaka.log.oneTimeWarningIssued_.has(id)) {\n return;\n }\n\n shaka.log.oneTimeWarningIssued_.add(id);\n shaka.log.alwaysWarn(...args);\n }\n\n /**\n * This log is for when an error occurs. This should always be accompanied\n * with an error event, thrown exception, or rejected Promise. Logs are\n * disabled in Release mode, so there should be other methods of detecting the\n * error.\n *\n * @param {...*} args\n */\n static error(...args) {}\n\n /**\n * This log is for possible errors or things that may be surprising to a user.\n * For example, if we work around unusual or bad content, we should warn that\n * they should fix their content. Deprecation messages and messages the app\n * shouldn't ignore should use alwaysWarn instead.\n *\n * @param {...*} args\n */\n static warning(...args) {}\n\n /**\n * This log is for messages to the user about what is happening. For example,\n * when we update a manifest or install a polyfill.\n *\n * @param {...*} args\n */\n static info(...args) {}\n\n /**\n * This log is to aid *users* in debugging their content. This should be for\n * logs about the content and what we do with it. For example, when we change\n * streams or what we are choosing.\n *\n * @param {...*} args\n */\n static debug(...args) {}\n\n /**\n * This log is for debugging Shaka Player itself. This may be logs about\n * internal states or events. This may also be for more verbose logs about\n * content, such as for segment appends.\n *\n * @param {...*} args\n */\n static v1(...args) {}\n\n /**\n * This log is for tracing and debugging Shaka Player. These logs will happen\n * a lot, for example, logging every segment append or every update check.\n * These are mostly used for tracking which calls happen through the code.\n *\n * @param {...*} args\n */\n static v2(...args) {}\n};\n\n\n/**\n * Log levels.\n * @enum {number}\n * @exportDoc\n */\nshaka.log.Level = {\n NONE: 0,\n ERROR: 1,\n WARNING: 2,\n INFO: 3,\n DEBUG: 4,\n V1: 5,\n V2: 6,\n};\n\n\n/**\n * @define {number} the maximum log level.\n */\nshaka.log.MAX_LOG_LEVEL = 3;\n\n\n/**\n * A Set to indicate which one-time warnings have been issued.\n *\n * @private {!Set.}\n */\nshaka.log.oneTimeWarningIssued_ = new Set();\n\n\nif (window.console) {\n /** @private {!Object.} */\n shaka.log.logMap_ = {\n [shaka.log.Level.ERROR]: (...args) => console.error(...args),\n [shaka.log.Level.WARNING]: (...args) => console.warn(...args),\n [shaka.log.Level.INFO]: (...args) => console.info(...args),\n [shaka.log.Level.DEBUG]: (...args) => console.log(...args),\n [shaka.log.Level.V1]: (...args) => console.debug(...args),\n [shaka.log.Level.V2]: (...args) => console.debug(...args),\n };\n\n shaka.log.alwaysWarn = (...args) => console.warn(...args);\n shaka.log.alwaysError = (...args) => console.error(...args);\n\n if (goog.DEBUG) {\n // Since we don't want to export shaka.log in production builds, we don't\n // use the @export annotation. But the module wrapper (used in debug builds\n // since v2.5.11) hides anything non-exported. This is a debug-only,\n // API-based export to make sure logging is available in debug builds.\n goog.exportSymbol('shaka.log', shaka.log);\n\n /** @type {number} */\n shaka.log.currentLevel;\n\n /**\n * Change the log level. Useful for debugging in uncompiled mode.\n *\n * @param {number} level\n * @exportDoc\n */\n shaka.log.setLevel = (level) => {\n const getLog = (curLevel) => {\n if (curLevel <= level) {\n goog.asserts.assert(\n shaka.log.logMap_[curLevel], 'Unexpected log level');\n return shaka.log.logMap_[curLevel];\n } else {\n return () => {};\n }\n };\n\n shaka.log.currentLevel = level;\n shaka.log.error = getLog(shaka.log.Level.ERROR);\n shaka.log.warning = getLog(shaka.log.Level.WARNING);\n shaka.log.info = getLog(shaka.log.Level.INFO);\n shaka.log.debug = getLog(shaka.log.Level.DEBUG);\n shaka.log.v1 = getLog(shaka.log.Level.V1);\n shaka.log.v2 = getLog(shaka.log.Level.V2);\n };\n\n shaka.log.setLevel(shaka.log.MAX_LOG_LEVEL);\n } else {\n if (shaka.log.MAX_LOG_LEVEL >= shaka.log.Level.ERROR) {\n shaka.log.error = shaka.log.logMap_[shaka.log.Level.ERROR];\n }\n if (shaka.log.MAX_LOG_LEVEL >= shaka.log.Level.WARNING) {\n shaka.log.warning = shaka.log.logMap_[shaka.log.Level.WARNING];\n }\n if (shaka.log.MAX_LOG_LEVEL >= shaka.log.Level.INFO) {\n shaka.log.info = shaka.log.logMap_[shaka.log.Level.INFO];\n }\n if (shaka.log.MAX_LOG_LEVEL >= shaka.log.Level.DEBUG) {\n shaka.log.debug = shaka.log.logMap_[shaka.log.Level.DEBUG];\n }\n if (shaka.log.MAX_LOG_LEVEL >= shaka.log.Level.V1) {\n shaka.log.v1 = shaka.log.logMap_[shaka.log.Level.V1];\n }\n if (shaka.log.MAX_LOG_LEVEL >= shaka.log.Level.V2) {\n shaka.log.v2 = shaka.log.logMap_[shaka.log.Level.V2];\n }\n }\n}\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.util.MultiMap');\n\n\n/**\n * @summary A simple multimap template.\n * @template T\n */\nshaka.util.MultiMap = class {\n /** */\n constructor() {\n /** @private {!Object.>} */\n this.map_ = {};\n }\n\n\n /**\n * Add a key, value pair to the map.\n * @param {string} key\n * @param {T} value\n */\n push(key, value) {\n // eslint-disable-next-line no-prototype-builtins\n if (this.map_.hasOwnProperty(key)) {\n this.map_[key].push(value);\n } else {\n this.map_[key] = [value];\n }\n }\n\n\n /**\n * Get a list of values by key.\n * @param {string} key\n * @return {Array.} or null if no such key exists.\n */\n get(key) {\n const list = this.map_[key];\n // slice() clones the list so that it and the map can each be modified\n // without affecting the other.\n return list ? list.slice() : null;\n }\n\n\n /**\n * Get a list of all values.\n * @return {!Array.}\n */\n getAll() {\n const list = [];\n for (const key in this.map_) {\n list.push(...this.map_[key]);\n }\n return list;\n }\n\n\n /**\n * Remove a specific value, if it exists.\n * @param {string} key\n * @param {T} value\n */\n remove(key, value) {\n if (!(key in this.map_)) {\n return;\n }\n this.map_[key] = this.map_[key].filter((i) => i != value);\n if (this.map_[key].length == 0) {\n // Delete the array if it's empty, so that |get| will reliably return null\n // \"if no such key exists\", instead of sometimes returning an empty array.\n delete this.map_[key];\n }\n }\n\n\n /**\n * Clear all keys and values from the multimap.\n */\n clear() {\n this.map_ = {};\n }\n\n\n /**\n * @param {function(string, !Array.)} callback\n */\n forEach(callback) {\n for (const key in this.map_) {\n callback(key, this.map_[key]);\n }\n }\n\n /**\n * Returns the number of elements in the multimap.\n * @return {number}\n */\n size() {\n return Object.keys(this.map_).length;\n }\n\n /**\n * Get a list of all the keys.\n * @return {!Array.}\n */\n keys() {\n return Object.keys(this.map_);\n }\n};\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.util.EventManager');\n\ngoog.require('goog.asserts');\ngoog.require('shaka.util.IReleasable');\ngoog.require('shaka.util.MultiMap');\n\n\n/**\n * @summary\n * An EventManager maintains a collection of \"event\n * bindings\" between event targets and event listeners.\n *\n * @implements {shaka.util.IReleasable}\n * @export\n */\nshaka.util.EventManager = class {\n /** */\n constructor() {\n /**\n * Maps an event type to an array of event bindings.\n * @private {shaka.util.MultiMap.}\n */\n this.bindingMap_ = new shaka.util.MultiMap();\n }\n\n\n /**\n * Detaches all event listeners.\n * @override\n * @export\n */\n release() {\n this.removeAll();\n this.bindingMap_ = null;\n }\n\n\n /**\n * Attaches an event listener to an event target.\n * @param {EventTarget} target The event target.\n * @param {string} type The event type.\n * @param {shaka.util.EventManager.ListenerType} listener The event listener.\n * @param {(boolean|!AddEventListenerOptions)=} options An object that\n * specifies characteristics about the event listener.\n * The passive option, if true, indicates that this function will never\n * call preventDefault(), which improves scrolling performance.\n * @export\n */\n listen(target, type, listener, options) {\n if (!this.bindingMap_) {\n return;\n }\n\n const binding =\n new shaka.util.EventManager.Binding_(target, type, listener, options);\n this.bindingMap_.push(type, binding);\n }\n\n\n /**\n * Attaches an event listener to an event target. The listener will be\n * removed when the first instance of the event is fired.\n * @param {EventTarget} target The event target.\n * @param {string} type The event type.\n * @param {shaka.util.EventManager.ListenerType} listener The event listener.\n * @param {(boolean|!AddEventListenerOptions)=} options An object that\n * specifies characteristics about the event listener.\n * The passive option, if true, indicates that this function will never\n * call preventDefault(), which improves scrolling performance.\n * @export\n */\n listenOnce(target, type, listener, options) {\n // Install a shim listener that will stop listening after the first event.\n const shim = (event) => {\n // Stop listening to this event.\n this.unlisten(target, type, shim);\n // Call the original listener.\n listener(event);\n };\n this.listen(target, type, shim, options);\n }\n\n\n /**\n * Detaches an event listener from an event target.\n * @param {EventTarget} target The event target.\n * @param {string} type The event type.\n * @param {shaka.util.EventManager.ListenerType=} listener The event listener.\n * @export\n */\n unlisten(target, type, listener) {\n if (!this.bindingMap_) {\n return;\n }\n\n const list = this.bindingMap_.get(type) || [];\n\n for (const binding of list) {\n if (binding.target == target) {\n if (listener == binding.listener || !listener) {\n binding.unlisten();\n this.bindingMap_.remove(type, binding);\n }\n }\n }\n }\n\n\n /**\n * Detaches all event listeners from all targets.\n * @export\n */\n removeAll() {\n if (!this.bindingMap_) {\n return;\n }\n\n const list = this.bindingMap_.getAll();\n\n for (const binding of list) {\n binding.unlisten();\n }\n\n this.bindingMap_.clear();\n }\n};\n\n\n/**\n * @typedef {function(!Event)}\n * @export\n */\nshaka.util.EventManager.ListenerType;\n\n\n/**\n * Creates a new Binding_ and attaches the event listener to the event target.\n *\n * @private\n */\nshaka.util.EventManager.Binding_ = class {\n /**\n * @param {EventTarget} target The event target.\n * @param {string} type The event type.\n * @param {shaka.util.EventManager.ListenerType} listener The event listener.\n * @param {(boolean|!AddEventListenerOptions)=} options An object that\n * specifies characteristics about the event listener.\n * The passive option, if true, indicates that this function will never\n * call preventDefault(), which improves scrolling performance.\n */\n constructor(target, type, listener, options) {\n /** @type {EventTarget} */\n this.target = target;\n\n /** @type {string} */\n this.type = type;\n\n /** @type {?shaka.util.EventManager.ListenerType} */\n this.listener = listener;\n\n /** @type {(boolean|!AddEventListenerOptions)} */\n this.options =\n shaka.util.EventManager.Binding_.convertOptions_(target, options);\n\n this.target.addEventListener(type, listener, this.options);\n }\n\n\n /**\n * Detaches the event listener from the event target. This does nothing if\n * the event listener is already detached.\n */\n unlisten() {\n goog.asserts.assert(this.target, 'Missing target');\n this.target.removeEventListener(this.type, this.listener, this.options);\n\n this.target = null;\n this.listener = null;\n this.options = false;\n }\n\n /**\n * Converts the provided options value into a value accepted by the browser.\n * Some browsers (e.g. Tizen) don't support passing options as an\n * object. So this detects this case and converts it.\n *\n * @param {EventTarget} target\n * @param {(boolean|!AddEventListenerOptions)=} value\n * @return {(boolean|!AddEventListenerOptions)}\n * @private\n */\n static convertOptions_(target, value) {\n if (value == undefined) {\n return false;\n } else if (typeof value == 'boolean') {\n return value;\n } else {\n // Ignore the 'passive' option since it is just an optimization and\n // doesn't affect behavior. Assert there aren't any other settings to\n // ensure we don't have different behavior on different browsers by\n // ignoring an important option.\n const ignored = new Set(['passive', 'capture']);\n const keys = Object.keys(value).filter((k) => !ignored.has(k));\n goog.asserts.assert(\n keys.length == 0,\n 'Unsupported flag(s) to addEventListener: ' + keys.join(','));\n\n const supports =\n shaka.util.EventManager.Binding_.doesSupportObject_(target);\n if (supports) {\n return value;\n } else {\n return value['capture'] || false;\n }\n }\n }\n\n /**\n * Checks whether the browser supports passing objects as the third argument\n * to addEventListener. This caches the result value in a static field to\n * avoid a bunch of checks.\n *\n * @param {EventTarget} target\n * @return {boolean}\n * @private\n */\n static doesSupportObject_(target) {\n // https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener#Safely_detecting_option_support\n let supports = shaka.util.EventManager.Binding_.supportsObject_;\n if (supports == undefined) {\n supports = false;\n try {\n const options = {};\n // This defines a getter that will set this variable if called. So if\n // the browser gets this property, it supports using an object. If the\n // browser doesn't get these fields, it won't support objects.\n const prop = {\n get: () => {\n supports = true;\n return false;\n },\n };\n Object.defineProperty(options, 'passive', prop);\n Object.defineProperty(options, 'capture', prop);\n\n const call = () => {};\n target.addEventListener('test', call, options);\n target.removeEventListener('test', call, options);\n } catch (e) {\n supports = false;\n }\n shaka.util.EventManager.Binding_.supportsObject_ = supports;\n }\n return supports || false; // \"false\" fallback needed for compiler.\n }\n};\n\n/** @private {(boolean|undefined)} */\nshaka.util.EventManager.Binding_.supportsObject_ = undefined;\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.media.Capabilities');\n\n/**\n * @summary\n * This is for capturing all media source capabilities on current platform.\n * And this is for static check and can not be constructed.\n */\nshaka.media.Capabilities = class {\n /**\n * Cache browser engine call to improve performance on some poor platforms\n *\n * @param {string} type\n * @return {boolean}\n */\n static isTypeSupported(type) {\n const supportMap = shaka.media.Capabilities.MediaSourceTypeSupportMap;\n if (supportMap.has(type)) {\n return supportMap.get(type);\n }\n if (window.ManagedMediaSource) {\n const currentSupport = ManagedMediaSource.isTypeSupported(type);\n supportMap.set(type, currentSupport);\n return currentSupport;\n } else if (window.MediaSource) {\n const currentSupport = MediaSource.isTypeSupported(type);\n supportMap.set(type, currentSupport);\n return currentSupport;\n }\n return false;\n }\n\n /**\n * Determine support for SourceBuffer.changeType\n * @return {boolean}\n */\n static isChangeTypeSupported() {\n return !!window.SourceBuffer &&\n // eslint-disable-next-line no-restricted-syntax\n !!SourceBuffer.prototype && !!SourceBuffer.prototype.changeType;\n }\n};\n\n/**\n * Public it for unit test, and developer could also check the support map.\n * @type {!Map.}\n */\nshaka.media.Capabilities.MediaSourceTypeSupportMap = new Map();\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.deprecate.Version');\n\n/**\n * A class that defines what a library version is within the deprecation\n * system. Within deprecation we only care about the major and minor versions.\n *\n * @final\n */\nshaka.deprecate.Version = class {\n /**\n * @param {number} major\n * @param {number} minor\n */\n constructor(major, minor) {\n this.major_ = major;\n this.minor_ = minor;\n }\n\n /** @return {number} */\n major() { return this.major_; }\n\n /** @return {number} */\n minor() { return this.minor_; }\n\n /**\n * Returns:\n * - positive if |this| > |other|\n * - zero if |this| == |other|\n * - negative if |this| < |other|\n *\n * @param {!shaka.deprecate.Version} other\n * @return {number}\n */\n compareTo(other) {\n const majorCheck = this.major_ - other.major_;\n const minorCheck = this.minor_ - other.minor_;\n\n return majorCheck || minorCheck;\n }\n\n /** @override */\n toString() {\n return 'v' + this.major_ + '.' + this.minor_;\n }\n\n /**\n * Parse the major and minor values out of a version string that is assumed\n * to follow the grammar: \"vMAJOR.MINOR.\". What comes after the last \".\" we\n * will ignore.\n *\n * @param {string} versionString\n * @return {!shaka.deprecate.Version}\n */\n static parse(versionString) {\n // Make sure to drop the \"v\" from the front. We limit the number of splits\n // to two as we don't care what happens after the minor version number.\n // For example: 'a.b.c.d'.split('.', 2) == ['a', 'b']\n const components = versionString.substring(1).split('.', /* limit= */ 2);\n\n return new shaka.deprecate.Version(\n Number(components[0]),\n Number(components[1]));\n }\n};\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.Deprecate');\n\ngoog.require('goog.asserts');\ngoog.require('shaka.deprecate.Enforcer');\ngoog.require('shaka.deprecate.Version');\ngoog.require('shaka.log');\n\n\n/**\n * |shaka.Deprecate| is the front-end of the deprecation system, allowing for\n * any part of the code to say that \"this block of code should be removed by\n * version X\".\n *\n * @final\n */\nshaka.Deprecate = class {\n /**\n * Initialize the system. This must happen before any calls to |enforce|. In\n * our code base, |shaka.Player| will be the only one to call this (it has the\n * version string).\n *\n * If the |Deprecate| called |Player.version| to initialize itself, it would\n * mean that |Player| could not use |Deprecate| because it would create a\n * circular dependency. To work around this, we provide this method so that\n * |Player| can give us the version without us needing to know about |Player|.\n *\n * This will initialize the system to:\n * - print warning messages when the feature is scheduled to be removed in a\n * later version\n * - print errors and fail assertions when the feature should be removed now\n *\n * @param {string} versionString\n */\n static init(versionString) {\n goog.asserts.assert(\n shaka.Deprecate.enforcer_ == null,\n 'Deprecate.init should only be called once.');\n\n shaka.Deprecate.enforcer_ = new shaka.deprecate.Enforcer(\n shaka.deprecate.Version.parse(versionString),\n shaka.Deprecate.onPending_,\n shaka.Deprecate.onExpired_);\n }\n\n /**\n * Ask the deprecation system to require this feature to be removed by the\n * given version.\n *\n * @param {number} major\n * @param {string} name\n * @param {string} description\n */\n static deprecateFeature(major, name, description) {\n const enforcer = shaka.Deprecate.enforcer_;\n goog.asserts.assert(\n enforcer,\n 'Missing deprecation enforcer. Was |init| called?');\n\n const expiresAt = new shaka.deprecate.Version(major, 0);\n enforcer.enforce(expiresAt, name, description);\n }\n\n /**\n * @param {!shaka.deprecate.Version} libraryVersion\n * @param {!shaka.deprecate.Version} featureVersion\n * @param {string} name\n * @param {string} description\n * @private\n */\n static onPending_(libraryVersion, featureVersion, name, description) {\n // If we were to pass each value to the log call, it would be printed as\n // a comma-separated list. To make the print state appear more natural to\n // the reader, create one string for the message.\n shaka.log.alwaysWarn([\n name,\n 'has been deprecated and will be removed in',\n featureVersion,\n '. We are currently at version',\n libraryVersion,\n '. Additional information:',\n description,\n ].join(' '));\n }\n\n /**\n * @param {!shaka.deprecate.Version} libraryVersion\n * @param {!shaka.deprecate.Version} featureVersion\n * @param {string} name\n * @param {string} description\n * @private\n */\n static onExpired_(libraryVersion, featureVersion, name, description) {\n // If we were to pass each value to the log call, it would be printed as\n // a comma-separated list. To make the print state appear more natural to\n // the reader, create one string for the message.\n const errorMessage = [\n name,\n 'has been deprecated and has been removed in',\n featureVersion,\n '. We are now at version',\n libraryVersion,\n '. Additional information:',\n description,\n ].join(' ');\n\n shaka.log.alwaysError(errorMessage);\n goog.asserts.assert(false, errorMessage);\n }\n};\n\n/**\n * The global deprecation enforcer that will be set by the player (because the\n * player knows the version) when it calls |init|. This may appear a little\n * round-about to you, because it is. Since player uses |Deprecate|, it means\n * that |Deprecate| can't depend on Player directly.\n *\n * @private {shaka.deprecate.Enforcer}\n */\nshaka.Deprecate.enforcer_ = null;\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.text.TextEngine');\n\ngoog.require('goog.asserts');\ngoog.require('shaka.Deprecate');\ngoog.require('shaka.media.ClosedCaptionParser');\ngoog.require('shaka.text.Cue');\ngoog.require('shaka.util.BufferUtils');\ngoog.require('shaka.util.IDestroyable');\ngoog.require('shaka.util.MimeUtils');\n\n\n// TODO: revisit this when Closure Compiler supports partially-exported classes.\n/**\n * @summary Manages text parsers and cues.\n * @implements {shaka.util.IDestroyable}\n * @export\n */\nshaka.text.TextEngine = class {\n /** @param {shaka.extern.TextDisplayer} displayer */\n constructor(displayer) {\n /** @private {?shaka.extern.TextParser} */\n this.parser_ = null;\n\n /** @private {shaka.extern.TextDisplayer} */\n this.displayer_ = displayer;\n\n /** @private {boolean} */\n this.segmentRelativeVttTiming_ = false;\n\n /** @private {number} */\n this.timestampOffset_ = 0;\n\n /** @private {number} */\n this.appendWindowStart_ = 0;\n\n /** @private {number} */\n this.appendWindowEnd_ = Infinity;\n\n /** @private {?number} */\n this.bufferStart_ = null;\n\n /** @private {?number} */\n this.bufferEnd_ = null;\n\n /** @private {string} */\n this.selectedClosedCaptionId_ = '';\n\n /** @private {shaka.extern.TextParser.ModifyCueCallback} */\n this.modifyCueCallback_ = (cue, uri) => {};\n\n /**\n * The closed captions map stores the CEA closed captions by closed captions\n * id and start and end time.\n * It's used as the buffer of closed caption text streams, to show captions\n * when we start displaying captions or switch caption tracks, we need to be\n * able to get the cues for the other language and display them without\n * re-fetching the video segments they were embedded in.\n * Structure of closed caption map:\n * closed caption id -> {start and end time -> cues}\n * @private {!Map.>>} */\n this.closedCaptionsMap_ = new Map();\n }\n\n /**\n * @param {string} mimeType\n * @param {!shaka.extern.TextParserPlugin} plugin\n * @export\n */\n static registerParser(mimeType, plugin) {\n shaka.text.TextEngine.parserMap_[mimeType] = plugin;\n }\n\n /**\n * @param {string} mimeType\n * @export\n */\n static unregisterParser(mimeType) {\n delete shaka.text.TextEngine.parserMap_[mimeType];\n }\n\n /**\n * @return {?shaka.extern.TextParserPlugin}\n * @export\n */\n static findParser(mimeType) {\n return shaka.text.TextEngine.parserMap_[mimeType];\n }\n\n /**\n * @param {string} mimeType\n * @return {boolean}\n */\n static isTypeSupported(mimeType) {\n if (shaka.text.TextEngine.parserMap_[mimeType]) {\n // An actual parser is available.\n return true;\n }\n if (mimeType == shaka.util.MimeUtils.CEA608_CLOSED_CAPTION_MIMETYPE ||\n mimeType == shaka.util.MimeUtils.CEA708_CLOSED_CAPTION_MIMETYPE ) {\n return !!shaka.media.ClosedCaptionParser.findDecoder();\n }\n return false;\n }\n\n // TODO: revisit this when the compiler supports partially-exported classes.\n /**\n * @override\n * @export\n */\n destroy() {\n this.parser_ = null;\n this.displayer_ = null;\n this.closedCaptionsMap_.clear();\n\n return Promise.resolve();\n }\n\n /**\n * @param {!shaka.extern.TextDisplayer} displayer\n */\n setDisplayer(displayer) {\n this.displayer_ = displayer;\n }\n\n /**\n * Initialize the parser. This can be called multiple times, but must be\n * called at least once before appendBuffer.\n *\n * @param {string} mimeType\n * @param {boolean} sequenceMode\n * @param {boolean} segmentRelativeVttTiming\n * @param {string} manifestType\n */\n initParser(mimeType, sequenceMode, segmentRelativeVttTiming, manifestType) {\n // No parser for CEA, which is extracted from video and side-loaded\n // into TextEngine and TextDisplayer.\n if (mimeType == shaka.util.MimeUtils.CEA608_CLOSED_CAPTION_MIMETYPE ||\n mimeType == shaka.util.MimeUtils.CEA708_CLOSED_CAPTION_MIMETYPE) {\n this.parser_ = null;\n return;\n }\n\n const factory = shaka.text.TextEngine.parserMap_[mimeType];\n goog.asserts.assert(\n factory, 'Text type negotiation should have happened already');\n this.parser_ = factory();\n if (this.parser_.setSequenceMode) {\n this.parser_.setSequenceMode(sequenceMode);\n } else {\n shaka.Deprecate.deprecateFeature(5,\n 'Text parsers w/ setSequenceMode',\n 'Text parsers should have a \"setSequenceMode\" method!');\n }\n if (this.parser_.setManifestType) {\n this.parser_.setManifestType(manifestType);\n } else {\n shaka.Deprecate.deprecateFeature(5,\n 'Text parsers w/ setManifestType',\n 'Text parsers should have a \"setManifestType\" method!');\n }\n this.segmentRelativeVttTiming_ = segmentRelativeVttTiming;\n }\n\n /** @param {shaka.extern.TextParser.ModifyCueCallback} modifyCueCallback */\n setModifyCueCallback(modifyCueCallback) {\n this.modifyCueCallback_ = modifyCueCallback;\n }\n\n /**\n * @param {BufferSource} buffer\n * @param {?number} startTime relative to the start of the presentation\n * @param {?number} endTime relative to the start of the presentation\n * @param {?string=} uri\n * @return {!Promise}\n */\n async appendBuffer(buffer, startTime, endTime, uri) {\n goog.asserts.assert(\n this.parser_, 'The parser should already be initialized');\n\n // Start the operation asynchronously to avoid blocking the caller.\n await Promise.resolve();\n\n // Check that TextEngine hasn't been destroyed.\n if (!this.parser_ || !this.displayer_) {\n return;\n }\n\n if (startTime == null || endTime == null) {\n this.parser_.parseInit(shaka.util.BufferUtils.toUint8(buffer));\n return;\n }\n\n const vttOffset = this.segmentRelativeVttTiming_ ?\n startTime : this.timestampOffset_;\n\n /** @type {shaka.extern.TextParser.TimeContext} **/\n const time = {\n periodStart: this.timestampOffset_,\n segmentStart: startTime,\n segmentEnd: endTime,\n vttOffset: vttOffset,\n };\n\n // Parse the buffer and add the new cues.\n const allCues = this.parser_.parseMedia(\n shaka.util.BufferUtils.toUint8(buffer), time, uri, /* images= */ []);\n for (const cue of allCues) {\n this.modifyCueCallback_(cue, uri || null, time);\n }\n const cuesToAppend = allCues.filter((cue) => {\n return cue.startTime >= this.appendWindowStart_ &&\n cue.startTime < this.appendWindowEnd_;\n });\n\n this.displayer_.append(cuesToAppend);\n\n // NOTE: We update the buffered range from the start and end times\n // passed down from the segment reference, not with the start and end\n // times of the parsed cues. This is important because some segments\n // may contain no cues, but we must still consider those ranges\n // buffered.\n if (this.bufferStart_ == null) {\n this.bufferStart_ = Math.max(startTime, this.appendWindowStart_);\n } else {\n // We already had something in buffer, and we assume we are extending\n // the range from the end.\n goog.asserts.assert(\n this.bufferEnd_ != null,\n 'There should already be a buffered range end.');\n goog.asserts.assert(\n (startTime - this.bufferEnd_) <= 1,\n 'There should not be a gap in text references >1s');\n }\n this.bufferEnd_ = Math.min(endTime, this.appendWindowEnd_);\n }\n\n /**\n * @param {number} startTime relative to the start of the presentation\n * @param {number} endTime relative to the start of the presentation\n * @return {!Promise}\n */\n async remove(startTime, endTime) {\n // Start the operation asynchronously to avoid blocking the caller.\n await Promise.resolve();\n\n if (this.displayer_ && this.displayer_.remove(startTime, endTime)) {\n if (this.bufferStart_ == null) {\n goog.asserts.assert(\n this.bufferEnd_ == null, 'end must be null if startTime is null');\n } else {\n goog.asserts.assert(\n this.bufferEnd_ != null,\n 'end must be non-null if startTime is non-null');\n\n // Update buffered range.\n if (endTime <= this.bufferStart_ || startTime >= this.bufferEnd_) {\n // No intersection. Nothing was removed.\n } else if (startTime <= this.bufferStart_ &&\n endTime >= this.bufferEnd_) {\n // We wiped out everything.\n this.bufferStart_ = this.bufferEnd_ = null;\n } else if (startTime <= this.bufferStart_ &&\n endTime < this.bufferEnd_) {\n // We removed from the beginning of the range.\n this.bufferStart_ = endTime;\n } else if (startTime > this.bufferStart_ &&\n endTime >= this.bufferEnd_) {\n // We removed from the end of the range.\n this.bufferEnd_ = startTime;\n } else {\n // We removed from the middle? StreamingEngine isn't supposed to.\n goog.asserts.assert(\n false, 'removal from the middle is not supported by TextEngine');\n }\n }\n }\n }\n\n /** @param {number} timestampOffset */\n setTimestampOffset(timestampOffset) {\n this.timestampOffset_ = timestampOffset;\n }\n\n /**\n * @param {number} appendWindowStart\n * @param {number} appendWindowEnd\n */\n setAppendWindow(appendWindowStart, appendWindowEnd) {\n this.appendWindowStart_ = appendWindowStart;\n this.appendWindowEnd_ = appendWindowEnd;\n }\n\n /**\n * @return {?number} Time in seconds of the beginning of the buffered range,\n * or null if nothing is buffered.\n */\n bufferStart() {\n return this.bufferStart_;\n }\n\n /**\n * @return {?number} Time in seconds of the end of the buffered range,\n * or null if nothing is buffered.\n */\n bufferEnd() {\n return this.bufferEnd_;\n }\n\n /**\n * @param {number} t A timestamp\n * @return {boolean}\n */\n isBuffered(t) {\n if (this.bufferStart_ == null || this.bufferEnd_ == null) {\n return false;\n }\n return t >= this.bufferStart_ && t < this.bufferEnd_;\n }\n\n /**\n * @param {number} t A timestamp\n * @return {number} Number of seconds ahead of 't' we have buffered\n */\n bufferedAheadOf(t) {\n if (this.bufferEnd_ == null || this.bufferEnd_ < t) {\n return 0;\n }\n\n goog.asserts.assert(\n this.bufferStart_ != null,\n 'start should not be null if end is not null');\n\n return this.bufferEnd_ - Math.max(t, this.bufferStart_);\n }\n\n /**\n * Set the selected closed captions id.\n * Append the cues stored in the closed captions map until buffer end time.\n * This is to fill the gap between buffered and unbuffered captions, and to\n * avoid duplicates that would be caused by any future video segments parsed\n * for captions.\n *\n * @param {string} id\n * @param {number} bufferEndTime Load any stored cues up to this time.\n */\n setSelectedClosedCaptionId(id, bufferEndTime) {\n this.selectedClosedCaptionId_ = id;\n\n const captionsMap = this.closedCaptionsMap_.get(id);\n if (captionsMap) {\n for (const startAndEndTime of captionsMap.keys()) {\n /** @type {Array.} */\n const cues = captionsMap.get(startAndEndTime)\n .filter((c) => c.endTime <= bufferEndTime);\n if (cues) {\n this.displayer_.append(cues);\n }\n }\n }\n }\n\n /**\n * @param {!shaka.text.Cue} cue the cue to apply the timestamp to recursively\n * @param {number} videoTimestampOffset the timestamp offset of the video\n * @private\n */\n applyVideoTimestampOffsetRecursive_(cue, videoTimestampOffset) {\n cue.startTime += videoTimestampOffset;\n cue.endTime += videoTimestampOffset;\n for (const nested of cue.nestedCues) {\n this.applyVideoTimestampOffsetRecursive_(nested, videoTimestampOffset);\n }\n }\n\n /**\n * Store the closed captions in the text engine, and append the cues to the\n * text displayer. This is a side-channel used for embedded text only.\n *\n * @param {!Array} closedCaptions\n * @param {?number} startTime relative to the start of the presentation\n * @param {?number} endTime relative to the start of the presentation\n * @param {number} videoTimestampOffset the timestamp offset of the video\n * stream in which these captions were embedded\n */\n storeAndAppendClosedCaptions(\n closedCaptions, startTime, endTime, videoTimestampOffset) {\n const startAndEndTime = startTime + ' ' + endTime;\n /** @type {!Map.>>} */\n const captionsMap = new Map();\n\n for (const caption of closedCaptions) {\n const id = caption.stream;\n const cue = caption.cue;\n if (!captionsMap.has(id)) {\n captionsMap.set(id, new Map());\n }\n if (!captionsMap.get(id).has(startAndEndTime)) {\n captionsMap.get(id).set(startAndEndTime, []);\n }\n\n // Adjust CEA captions with respect to the timestamp offset of the video\n // stream in which they were embedded.\n this.applyVideoTimestampOffsetRecursive_(cue, videoTimestampOffset);\n\n const keepThisCue =\n cue.startTime >= this.appendWindowStart_ &&\n cue.startTime < this.appendWindowEnd_;\n if (!keepThisCue) {\n continue;\n }\n\n captionsMap.get(id).get(startAndEndTime).push(cue);\n if (id == this.selectedClosedCaptionId_) {\n this.displayer_.append([cue]);\n }\n }\n\n for (const id of captionsMap.keys()) {\n if (!this.closedCaptionsMap_.has(id)) {\n this.closedCaptionsMap_.set(id, new Map());\n }\n for (const startAndEndTime of captionsMap.get(id).keys()) {\n const cues = captionsMap.get(id).get(startAndEndTime);\n this.closedCaptionsMap_.get(id).set(startAndEndTime, cues);\n }\n }\n\n if (this.bufferStart_ == null) {\n this.bufferStart_ = Math.max(startTime, this.appendWindowStart_);\n } else {\n this.bufferStart_ = Math.min(\n this.bufferStart_, Math.max(startTime, this.appendWindowStart_));\n }\n\n this.bufferEnd_ = Math.max(\n this.bufferEnd_, Math.min(endTime, this.appendWindowEnd_));\n }\n\n /**\n * Get the number of closed caption channels.\n *\n * This function is for TESTING ONLY. DO NOT USE in the library.\n *\n * @return {number}\n */\n getNumberOfClosedCaptionChannels() {\n return this.closedCaptionsMap_.size;\n }\n\n /**\n * Get the number of closed caption cues for a given channel. If there is\n * no channel for the given channel id, this will return 0.\n *\n * This function is for TESTING ONLY. DO NOT USE in the library.\n *\n * @param {string} channelId\n * @return {number}\n */\n getNumberOfClosedCaptionsInChannel(channelId) {\n const channel = this.closedCaptionsMap_.get(channelId);\n return channel ? channel.size : 0;\n }\n};\n\n/** @private {!Object.} */\nshaka.text.TextEngine.parserMap_ = {};\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.deprecate.Enforcer');\n\ngoog.require('shaka.deprecate.Version');\n\n\n/**\n * The enforcer's job is to call the correct callback when a feature will need\n * to be removed later or removed now.\n *\n * The \"what should be done\" is not part of the enforcer, that must be provided\n * to the enforcer when it is created. This separation was created so that\n * testing and production could be equal users of the enforcer.\n *\n * @final\n */\nshaka.deprecate.Enforcer = class {\n /**\n * @param {!shaka.deprecate.Version} libraryVersion\n * @param {shaka.deprecate.Listener} onPending\n * @param {shaka.deprecate.Listener} onExpired\n */\n constructor(libraryVersion, onPending, onExpired) {\n /** @private {!shaka.deprecate.Version} */\n this.libraryVersion_ = libraryVersion;\n\n /** @private {shaka.deprecate.Listener} */\n this.onPending_ = onPending;\n /** @private {shaka.deprecate.Listener} */\n this.onExpired_ = onExpired;\n }\n\n /**\n * Tell the enforcer that a feature will expire on |expiredOn| and that it\n * should notify the listeners if it is pending or expired.\n *\n * @param {!shaka.deprecate.Version} expiresOn\n * @param {string} name\n * @param {string} description\n */\n enforce(expiresOn, name, description) {\n // If the expiration version is larger than the library version\n // (compareTo > 0), it means the expiration is in the future, and is still\n // pending.\n const isPending = expiresOn.compareTo(this.libraryVersion_) > 0;\n\n // Find the right callback (pending or expired) for this enforcement request\n // call it to handle this features pending/expired removal.\n const callback = isPending ? this.onPending_ : this.onExpired_;\n callback(this.libraryVersion_, expiresOn, name, description);\n }\n};\n\n/**\n * A callback for listening to deprecation events.\n *\n * Parameters:\n * libraryVersion: !shaka.deprecate.Version\n * featureVersion: !shaka.deprecate.Version\n * name: string\n * description: string\n *\n * libraryVersion: The current version of the library.\n * featureVersion: The version of the library when the feature should be\n * removed.\n * name: The name of the feature that will/should be removed.\n * description: A description of what is changing.\n *\n * @typedef {function(\n * !shaka.deprecate.Version,\n * !shaka.deprecate.Version,\n * string,\n * string)}\n */\nshaka.deprecate.Listener;\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.cea.DummyCaptionDecoder');\n\n/** @implements {shaka.extern.ICaptionDecoder} */\nshaka.cea.DummyCaptionDecoder = class {\n /** @override */\n extract(userDataSeiMessage, pts) {}\n\n /** @override */\n decode() {\n return [];\n }\n\n /** @override */\n clear() {}\n\n /** @override */\n getStreams() {\n return [];\n }\n};\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.cea.DummyCeaParser');\n\n/**\n * Dummy CEA parser.\n * @implements {shaka.extern.ICeaParser}\n */\nshaka.cea.DummyCeaParser = class {\n /**\n * @override\n */\n init(initSegment) {\n }\n\n /**\n * @override\n */\n parse(mediaSegment) {\n return /* captionPackets= */ [];\n }\n};\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.util.BufferUtils');\n\n\n/**\n * @summary A set of BufferSource utility functions.\n * @export\n */\nshaka.util.BufferUtils = class {\n /**\n * Compare two buffers for equality. For buffers of different types, this\n * compares the underlying buffers as binary data.\n *\n * @param {?BufferSource} arr1\n * @param {?BufferSource} arr2\n * @return {boolean}\n * @export\n * @suppress {strictMissingProperties}\n */\n static equal(arr1, arr2) {\n const BufferUtils = shaka.util.BufferUtils;\n if (!arr1 && !arr2) {\n return true;\n }\n if (!arr1 || !arr2) {\n return false;\n }\n if (arr1.byteLength != arr2.byteLength) {\n return false;\n }\n\n // Quickly check if these are views of the same buffer. An ArrayBuffer can\n // be passed but doesn't have a byteOffset field, so default to 0.\n if (BufferUtils.unsafeGetArrayBuffer_(arr1) ==\n BufferUtils.unsafeGetArrayBuffer_(arr2) &&\n (arr1.byteOffset || 0) == (arr2.byteOffset || 0)) {\n return true;\n }\n\n const uint8A = shaka.util.BufferUtils.toUint8(arr1);\n const uint8B = shaka.util.BufferUtils.toUint8(arr2);\n for (let i = 0; i < arr1.byteLength; i++) {\n if (uint8A[i] != uint8B[i]) {\n return false;\n }\n }\n return true;\n }\n\n /**\n * Gets the underlying ArrayBuffer of the given view. The caller needs to\n * ensure it uses the \"byteOffset\" and \"byteLength\" fields of the view to\n * only use the same \"view\" of the data.\n *\n * @param {BufferSource} view\n * @return {!ArrayBuffer}\n * @private\n */\n static unsafeGetArrayBuffer_(view) {\n if (view instanceof ArrayBuffer) {\n return view;\n } else {\n return view.buffer;\n }\n }\n\n /**\n * Gets an ArrayBuffer that contains the data from the given TypedArray. Note\n * this will allocate a new ArrayBuffer if the object is a partial view of\n * the data.\n *\n * @param {!BufferSource} view\n * @return {!ArrayBuffer}\n * @export\n */\n static toArrayBuffer(view) {\n if (view instanceof ArrayBuffer) {\n return view;\n } else {\n if (view.byteOffset == 0 && view.byteLength == view.buffer.byteLength) {\n // This is a TypedArray over the whole buffer.\n return view.buffer;\n }\n // This is a \"view\" on the buffer. Create a new buffer that only contains\n // the data. Note that since this isn't an ArrayBuffer, the \"new\" call\n // will allocate a new buffer to hold the copy.\n return new Uint8Array(view).buffer;\n }\n }\n\n /**\n * Creates a new Uint8Array view on the same buffer. This clamps the values\n * to be within the same view (i.e. you can't use this to move past the end\n * of the view, even if the underlying buffer is larger). However, you can\n * pass a negative offset to access the data before the view.\n *\n * @param {BufferSource} data\n * @param {number=} offset The offset from the beginning of this data's view\n * to start the new view at.\n * @param {number=} length The byte length of the new view.\n * @return {!Uint8Array}\n * @export\n */\n static toUint8(data, offset = 0, length = Infinity) {\n return shaka.util.BufferUtils.view_(data, offset, length, Uint8Array);\n }\n\n /**\n * Creates a new Uint16Array view on the same buffer. This clamps the values\n * to be within the same view (i.e. you can't use this to move past the end\n * of the view, even if the underlying buffer is larger). However, you can\n * pass a negative offset to access the data before the view.\n *\n * @param {BufferSource} data\n * @param {number=} offset The offset from the beginning of this data's view\n * to start the new view at.\n * @param {number=} length The byte length of the new view.\n * @return {!Uint16Array}\n * @export\n */\n static toUint16(data, offset = 0, length = Infinity) {\n return shaka.util.BufferUtils.view_(data, offset, length, Uint16Array);\n }\n\n /**\n * Creates a DataView over the given buffer.\n *\n * @see toUint8\n * @param {BufferSource} buffer\n * @param {number=} offset\n * @param {number=} length\n * @return {!DataView}\n * @export\n */\n static toDataView(buffer, offset = 0, length = Infinity) {\n return shaka.util.BufferUtils.view_(buffer, offset, length, DataView);\n }\n\n /**\n * @param {BufferSource} data\n * @param {number} offset\n * @param {number} length\n * @param {function(new:T, ArrayBuffer, number, number)} Type\n * @return {!T}\n * @template T\n * @private\n */\n static view_(data, offset, length, Type) {\n const buffer = shaka.util.BufferUtils.unsafeGetArrayBuffer_(data);\n let bytesPerElement = 1;\n if ('BYTES_PER_ELEMENT' in Type) {\n bytesPerElement = Type.BYTES_PER_ELEMENT;\n }\n // Absolute end of the |data| view within |buffer|.\n /** @suppress {strictMissingProperties} */\n const dataEnd = ((data.byteOffset || 0) + data.byteLength) /\n bytesPerElement;\n // Absolute start of the result within |buffer|.\n /** @suppress {strictMissingProperties} */\n const rawStart = ((data.byteOffset || 0) + offset) / bytesPerElement;\n const start = Math.floor(Math.max(0, Math.min(rawStart, dataEnd)));\n // Absolute end of the result within |buffer|.\n const end = Math.floor(Math.min(start + Math.max(length, 0), dataEnd));\n return new Type(buffer, start, end - start);\n }\n};\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.media.ClosedCaptionParser');\ngoog.provide('shaka.media.IClosedCaptionParser');\n\ngoog.require('shaka.cea.DummyCaptionDecoder');\ngoog.require('shaka.cea.DummyCeaParser');\ngoog.require('shaka.log');\ngoog.require('shaka.util.BufferUtils');\n\n\n/**\n * The IClosedCaptionParser defines the interface to provide all operations for\n * parsing the closed captions embedded in Dash videos streams.\n * TODO: Remove this interface and move method definitions\n * directly to ClosedCaptonParser.\n * @interface\n * @export\n */\nshaka.media.IClosedCaptionParser = class {\n /**\n * Initialize the caption parser. This should be called whenever new init\n * segment arrives.\n * @param {BufferSource} initSegment\n * @param {boolean=} adaptation True if we just automatically switched active\n * variant(s).\n */\n init(initSegment, adaptation = false) {}\n\n /**\n * Parses embedded CEA closed captions and interacts with the underlying\n * CaptionStream, and calls the callback function when there are closed\n * captions.\n *\n * @param {BufferSource} mediaFragment\n * @return {!Array}\n * An array of parsed closed captions.\n */\n parseFrom(mediaFragment) {}\n\n /**\n * Resets the CaptionStream.\n */\n reset() {}\n\n /**\n * Returns the streams that the CEA decoder found.\n * @return {!Array.}\n */\n getStreams() {}\n};\n\n/**\n * Closed Caption Parser provides all operations for parsing the closed captions\n * embedded in Dash videos streams.\n *\n * @implements {shaka.media.IClosedCaptionParser}\n * @final\n * @export\n */\nshaka.media.ClosedCaptionParser = class {\n /**\n * @param {string} mimeType\n */\n constructor(mimeType) {\n /** @private {!shaka.extern.ICeaParser} */\n this.ceaParser_ = new shaka.cea.DummyCeaParser();\n\n const parserFactory =\n shaka.media.ClosedCaptionParser.findParser(mimeType.toLowerCase());\n if (parserFactory) {\n this.ceaParser_ = parserFactory();\n }\n\n /**\n * Decoder for decoding CEA-X08 data from closed caption packets.\n * @private {!shaka.extern.ICaptionDecoder}\n */\n this.ceaDecoder_ = new shaka.cea.DummyCaptionDecoder();\n\n const decoderFactory = shaka.media.ClosedCaptionParser.findDecoder();\n if (decoderFactory) {\n this.ceaDecoder_ = decoderFactory();\n }\n }\n\n /**\n * @override\n */\n init(initSegment, adaptation = false) {\n shaka.log.debug('Passing new init segment to CEA parser');\n if (!adaptation) {\n // Reset underlying decoder when new init segment arrives\n // to clear stored pts values.\n // This is necessary when a new Period comes in DASH or a discontinuity\n // in HLS.\n this.reset();\n }\n this.ceaParser_.init(initSegment);\n }\n\n /**\n * @override\n */\n parseFrom(mediaFragment) {\n // Parse the fragment.\n const captionPackets = this.ceaParser_.parse(mediaFragment);\n\n // Extract the caption packets for decoding.\n for (const captionPacket of captionPackets) {\n const uint8ArrayData =\n shaka.util.BufferUtils.toUint8(captionPacket.packet);\n if (uint8ArrayData.length > 0) {\n this.ceaDecoder_.extract(uint8ArrayData, captionPacket.pts);\n }\n }\n\n // Decode and return the parsed captions.\n return this.ceaDecoder_.decode();\n }\n\n /**\n * @override\n */\n reset() {\n this.ceaDecoder_.clear();\n }\n\n /**\n * @override\n */\n getStreams() {\n return this.ceaDecoder_.getStreams();\n }\n\n /**\n * @param {string} mimeType\n * @param {!shaka.extern.CeaParserPlugin} plugin\n * @export\n */\n static registerParser(mimeType, plugin) {\n shaka.media.ClosedCaptionParser.parserMap_[mimeType] = plugin;\n }\n\n /**\n * @param {string} mimeType\n * @export\n */\n static unregisterParser(mimeType) {\n delete shaka.media.ClosedCaptionParser.parserMap_[mimeType];\n }\n\n /**\n * @param {string} mimeType\n * @return {?shaka.extern.CeaParserPlugin}\n * @export\n */\n static findParser(mimeType) {\n return shaka.media.ClosedCaptionParser.parserMap_[mimeType];\n }\n\n /**\n * @param {!shaka.extern.CaptionDecoderPlugin} plugin\n * @export\n */\n static registerDecoder(plugin) {\n shaka.media.ClosedCaptionParser.decoderFactory_ = plugin;\n }\n\n /**\n * @export\n */\n static unregisterDecoder() {\n shaka.media.ClosedCaptionParser.decoderFactory_ = null;\n }\n\n /**\n * @return {?shaka.extern.CaptionDecoderPlugin}\n * @export\n */\n static findDecoder() {\n return shaka.media.ClosedCaptionParser.decoderFactory_;\n }\n};\n\n/** @private {!Object} */\nshaka.media.ClosedCaptionParser.parserMap_ = {};\n\n/** @private {?shaka.extern.CaptionDecoderPlugin} */\nshaka.media.ClosedCaptionParser.decoderFactory_ = null;\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.text.CueRegion');\n\n\n/**\n * @export\n */\nshaka.text.CueRegion = class {\n /** */\n constructor() {\n const CueRegion = shaka.text.CueRegion;\n\n /**\n * Region identifier.\n * @type {string}\n * @export\n */\n this.id = '';\n\n /**\n * The X offset to start the rendering area in viewportAnchorUnits of the\n * video width.\n * @type {number}\n * @export\n */\n this.viewportAnchorX = 0;\n\n /**\n * The X offset to start the rendering area in viewportAnchorUnits of the\n * video height.\n * @type {number}\n * @export\n */\n this.viewportAnchorY = 0;\n\n /**\n * The X offset to start the rendering area in percentage (0-100) of this\n * region width.\n * @type {number}\n * @export\n */\n this.regionAnchorX = 0;\n\n /**\n * The Y offset to start the rendering area in percentage (0-100) of the\n * region height.\n * @type {number}\n * @export\n */\n this.regionAnchorY = 0;\n\n /**\n * The width of the rendering area in widthUnits.\n * @type {number}\n * @export\n */\n this.width = 100;\n\n /**\n * The width of the rendering area in heightUnits.\n * @type {number}\n * @export\n */\n this.height = 100;\n\n /**\n * The units (percentage, pixels or lines) the region height is in.\n * @type {shaka.text.CueRegion.units}\n * @export\n */\n this.heightUnits = CueRegion.units.PERCENTAGE;\n\n /**\n * The units (percentage or pixels) the region width is in.\n * @type {shaka.text.CueRegion.units}\n * @export\n */\n this.widthUnits = CueRegion.units.PERCENTAGE;\n\n /**\n * The units (percentage or pixels) the region viewportAnchors are in.\n * @type {shaka.text.CueRegion.units}\n * @export\n */\n this.viewportAnchorUnits = CueRegion.units.PERCENTAGE;\n\n /**\n * If scroll=UP, it means that cues in the region will be added to the\n * bottom of the region and will push any already displayed cues in the\n * region up. Otherwise (scroll=NONE) cues will stay fixed at the location\n * they were first painted in.\n * @type {shaka.text.CueRegion.scrollMode}\n * @export\n */\n this.scroll = CueRegion.scrollMode.NONE;\n }\n};\n\n\n/**\n * @enum {number}\n * @export\n */\nshaka.text.CueRegion.units = {\n 'PX': 0,\n 'PERCENTAGE': 1,\n 'LINES': 2,\n};\n\n\n/**\n * @enum {string}\n * @export\n */\nshaka.text.CueRegion.scrollMode = {\n 'NONE': '',\n 'UP': 'up',\n};\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.util.ArrayUtils');\n\n\n/**\n * @namespace shaka.util.ArrayUtils\n * @summary Array utility functions.\n */\n\n\nshaka.util.ArrayUtils = class {\n /**\n * Returns whether the two values contain the same value. This correctly\n * handles comparisons involving NaN.\n * @param {T} a\n * @param {T} b\n * @return {boolean}\n * @template T\n */\n static defaultEquals(a, b) {\n // NaN !== NaN, so we need to special case it.\n if (typeof a === 'number' &&\n typeof b === 'number' && isNaN(a) && isNaN(b)) {\n return true;\n }\n return a === b;\n }\n\n\n /**\n * Remove given element from array (assumes no duplicates).\n * @param {!Array.} array\n * @param {T} element\n * @template T\n */\n static remove(array, element) {\n const index = array.indexOf(element);\n if (index > -1) {\n array.splice(index, 1);\n }\n }\n\n\n /**\n * Count the number of items in the list that pass the check function.\n * @param {!Array.} array\n * @param {function(T):boolean} check\n * @return {number}\n * @template T\n */\n static count(array, check) {\n let count = 0;\n\n for (const element of array) {\n count += check(element) ? 1 : 0;\n }\n\n return count;\n }\n\n\n /**\n * Determines if the given arrays contain equal elements in any order.\n *\n * @param {!Array.} a\n * @param {!Array.} b\n * @param {function(T, T):boolean=} compareFn\n * @return {boolean}\n * @template T\n */\n static hasSameElements(a, b, compareFn) {\n if (!compareFn) {\n compareFn = shaka.util.ArrayUtils.defaultEquals;\n }\n if (a.length != b.length) {\n return false;\n }\n\n const copy = b.slice();\n for (const item of a) {\n const idx = copy.findIndex((other) => compareFn(item, other));\n if (idx == -1) {\n return false;\n }\n // Since order doesn't matter, just swap the last element with\n // this one and then drop the last element.\n copy[idx] = copy[copy.length - 1];\n copy.pop();\n }\n\n return copy.length == 0;\n }\n\n\n /**\n * Determines if the given arrays contain equal elements in the same order.\n *\n * @param {!Array.} a\n * @param {!Array.} b\n * @param {function(T, T):boolean=} compareFn\n * @return {boolean}\n * @template T\n */\n static equal(a, b, compareFn) {\n if (!compareFn) {\n compareFn = shaka.util.ArrayUtils.defaultEquals;\n }\n if (a.length != b.length) {\n return false;\n }\n\n for (let i = 0; i < a.length; i++) {\n if (!compareFn(a[i], b[i])) {\n return false;\n }\n }\n return true;\n }\n};\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.util.Error');\n\n\n/**\n * @summary\n * Describes an error that happened.\n *\n * @description\n * This uses numerical codes to describe\n * which error happened.\n *\n * Some error are caused by errors from the browser. In these cases, the error\n * object is provided as part of the data field. System codes come\n * from the browser and may or may not be documented. Here are some places\n * where the errors may be documented:\n * \n *\n * @export\n * @implements {shaka.extern.Error}\n * @extends {Error}\n */\nshaka.util.Error = class {\n /**\n * @param {shaka.util.Error.Severity} severity\n * @param {shaka.util.Error.Category} category\n * @param {shaka.util.Error.Code} code\n * @param {...*} varArgs\n */\n constructor(severity, category, code, ...varArgs) {\n /**\n * @override\n * @exportInterface\n */\n this.severity = severity;\n /**\n * @override\n * @exportInterface\n */\n this.category = category;\n /**\n * @override\n * @exportInterface\n */\n this.code = code;\n /**\n * @override\n * @exportInterface\n */\n this.data = varArgs;\n /**\n * @override\n * @exportInterface\n */\n this.handled = false;\n\n // A basic message for compiled mode.\n let formattedMessage = 'Shaka Error ' + this.code;\n if (goog.DEBUG) {\n // This improves the formatting of Errors in failure messages in the\n // tests in debug mode.\n let categoryName = 'UNKNOWN';\n let codeName = 'UNKNOWN';\n\n for (const k in shaka.util.Error.Category) {\n if (shaka.util.Error.Category[k] == this.category) {\n categoryName = k;\n }\n }\n for (const k in shaka.util.Error.Code) {\n if (shaka.util.Error.Code[k] == this.code) {\n codeName = k;\n }\n }\n\n formattedMessage = 'Shaka Error ' + categoryName + '.' + codeName +\n ' (' + this.data.toString() + ')';\n }\n\n /**\n * In compiled mode, contains a basic message string with the error code.\n * In uncompiled and debug modes, contains a human-readable version of the\n * category and code as enums.\n *\n * @const {string}\n * @exportDoc\n */\n this.message = formattedMessage;\n\n if (shaka.util.Error.createStack) {\n try {\n throw new Error(this.message || 'Shaka Error');\n } catch (e) {\n /**\n * A stack-trace showing where the error occurred.\n *\n * @const {string}\n * @exportDoc\n */\n this.stack = e.stack;\n }\n }\n }\n\n\n /**\n * @return {string}\n * @override\n */\n toString() {\n return 'shaka.util.Error ' + JSON.stringify(this, null, ' ');\n }\n};\n\n\n/**\n * If true, create a stack trace in Error objects.\n *\n * Disabled in tests to avoid issues with karma-jasmine.\n * See comments in test/test/boot.js for details.\n *\n * @type {boolean}\n */\nshaka.util.Error.createStack = true;\n\n/**\n * @enum {number}\n * @export\n */\nshaka.util.Error.Severity = {\n /**\n * An error occurred, but the Player is attempting to recover from the error.\n *\n * If the Player cannot ultimately recover, it still may not throw a CRITICAL\n * error. For example, retrying for a media segment will never result in\n * a CRITICAL error (the Player will just retry forever).\n */\n 'RECOVERABLE': 1,\n\n /**\n * A critical error that the library cannot recover from. These usually cause\n * the Player to stop loading or updating. A new manifest must be loaded\n * to reset the library.\n */\n 'CRITICAL': 2,\n};\n\n\n/**\n * @enum {number}\n * @export\n */\nshaka.util.Error.Category = {\n /** Errors from the network stack. */\n 'NETWORK': 1,\n\n /** Errors parsing text streams. */\n 'TEXT': 2,\n\n /** Errors parsing or processing audio or video streams. */\n 'MEDIA': 3,\n\n /** Errors parsing the Manifest. */\n 'MANIFEST': 4,\n\n /** Errors related to streaming. */\n 'STREAMING': 5,\n\n /** Errors related to DRM. */\n 'DRM': 6,\n\n /** Miscellaneous errors from the player. */\n 'PLAYER': 7,\n\n /** Errors related to cast. */\n 'CAST': 8,\n\n /** Errors in the database storage (offline). */\n 'STORAGE': 9,\n\n /** Errors related to ad insertion. */\n 'ADS': 10,\n};\n\n\n/**\n * @enum {number}\n * @export\n */\nshaka.util.Error.Code = {\n /**\n * A network request was made using an unsupported URI scheme.\n *
error.data[0] is the URI.\n */\n 'UNSUPPORTED_SCHEME': 1000,\n\n /**\n * An HTTP network request returned an HTTP status that indicated a failure.\n *
error.data[0] is the URI.\n *
error.data[1] is the status code.\n *
error.data[2] is the response text, or null if the response could not\n * be interpretted as text.\n *
error.data[3] is the map of response headers.\n *
error.data[4] is the NetworkingEngine.RequestType of the request,\n * if one was provided.\n *
error.data[5] is the final URI. This may be different if the initial\n * URI (error.data[0]) issued a redirect.\n */\n 'BAD_HTTP_STATUS': 1001,\n\n /**\n * An HTTP network request failed with an error, but not from the server.\n *
error.data[0] is the URI.\n *
error.data[1] is the original error.\n *
error.data[2] is the NetworkingEngine.RequestType of the request.\n */\n 'HTTP_ERROR': 1002,\n\n /**\n * A network request timed out.\n *
error.data[0] is the URI.\n *
error.data[1] is the NetworkingEngine.RequestType of the request,\n * if one was provided.\n */\n 'TIMEOUT': 1003,\n\n /**\n * A network request was made with a malformed data URI.\n *
error.data[0] is the URI.\n */\n 'MALFORMED_DATA_URI': 1004,\n\n // RETIRED: 'UNKNOWN_DATA_URI_ENCODING': 1005,\n\n /**\n * A request filter threw an error.\n *
error.data[0] is the original error.\n */\n 'REQUEST_FILTER_ERROR': 1006,\n\n /**\n * A response filter threw an error.\n *
error.data[0] is the original error.\n */\n 'RESPONSE_FILTER_ERROR': 1007,\n\n /**\n * A testing network request was made with a malformed URI.\n * This error is only used by unit and integration tests.\n */\n 'MALFORMED_TEST_URI': 1008,\n\n /**\n * An unexpected network request was made to the FakeNetworkingEngine.\n * This error is only used by unit and integration tests.\n */\n 'UNEXPECTED_TEST_REQUEST': 1009,\n\n /**\n * The number of retry attempts have run out.\n * This is an internal error and shouldn't be propagated.\n */\n 'ATTEMPTS_EXHAUSTED': 1010,\n\n /**\n * The segment is missing.\n *
error.data[0] is the URI.\n */\n 'SEGMENT_MISSING': 1011,\n\n\n /** The text parser failed to parse a text stream due to an invalid header. */\n 'INVALID_TEXT_HEADER': 2000,\n\n /**\n * The text parser failed to parse a text stream due to an invalid cue.\n *
error.data[0] is extra context, if available.\n */\n 'INVALID_TEXT_CUE': 2001,\n\n // RETIRED: 'INVALID_TEXT_SETTINGS': 2002,\n\n /**\n * Was unable to detect the encoding of the response text. Suggest adding\n * byte-order-markings to the response data.\n */\n 'UNABLE_TO_DETECT_ENCODING': 2003,\n\n /** The response data contains invalid Unicode character encoding. */\n 'BAD_ENCODING': 2004,\n\n /**\n * The XML parser failed to parse an xml stream, or the XML lacks mandatory\n * elements for TTML.\n *
error.data[0] is extra context, if available.\n */\n 'INVALID_XML': 2005,\n\n // RETIRED: 'INVALID_TTML': 2006,\n\n /**\n * MP4 segment does not contain TTML.\n */\n 'INVALID_MP4_TTML': 2007,\n\n /**\n * MP4 segment does not contain VTT.\n */\n 'INVALID_MP4_VTT': 2008,\n\n /**\n * When examining media in advance, we were unable to extract the cue time.\n * This should only be possible with HLS, where we do not have explicit\n * segment start times.\n *
error.data[0] is the underlying exception or Error object.\n */\n 'UNABLE_TO_EXTRACT_CUE_START_TIME': 2009,\n\n /**\n * MP4 segment for CEA data is invalid.\n */\n 'INVALID_MP4_CEA': 2010,\n\n /**\n * Unable to guess mime type of the text.\n *
error.data[0] is the text file's uri.\n */\n 'TEXT_COULD_NOT_GUESS_MIME_TYPE': 2011,\n\n /**\n * External text tracks cannot be added in src= because native platform\n * doesn't support it.\n */\n 'CANNOT_ADD_EXTERNAL_TEXT_TO_SRC_EQUALS': 2012,\n\n /**\n * Only WebVTT is supported when using src=.\n *
error.data[0] is the text MIME type.\n */\n 'TEXT_ONLY_WEBVTT_SRC_EQUALS': 2013,\n\n /**\n * The compilation does not contain a required text plugin for this\n * operation.\n *
error.data[0] is the text MIME type.\n */\n 'MISSING_TEXT_PLUGIN': 2014,\n\n /**\n * The chapters track failed to load. The browser does not provide any\n * information in this case to identify why it failed, but there may be\n * details in the JavaScript console.\n */\n 'CHAPTERS_TRACK_FAILED': 2015,\n\n // RETIRED: 'CANNOT_ADD_EXTERNAL_THUMBNAILS_TO_SRC_EQUALS': 2016,\n\n /**\n * Only external urls of WebVTT type are supported.\n *
error.data[0] is the uri.\n */\n 'UNSUPPORTED_EXTERNAL_THUMBNAILS_URI': 2017,\n\n /**\n * Some component tried to read past the end of a buffer. The segment index,\n * init segment, or PSSH may be malformed.\n */\n 'BUFFER_READ_OUT_OF_BOUNDS': 3000,\n\n /**\n * Some component tried to parse an integer that was too large to fit in a\n * JavaScript number without rounding error. JavaScript can only natively\n * represent integers up to 53 bits.\n */\n 'JS_INTEGER_OVERFLOW': 3001,\n\n /**\n * The EBML parser used to parse the WebM container encountered an integer,\n * ID, or other field larger than the maximum supported by the parser.\n */\n 'EBML_OVERFLOW': 3002,\n\n /**\n * The EBML parser used to parse the WebM container encountered a floating-\n * point field of a size not supported by the parser.\n */\n 'EBML_BAD_FLOATING_POINT_SIZE': 3003,\n\n /**\n * The MP4 SIDX parser found the wrong box type.\n * Either the segment index range is incorrect or the data is corrupt.\n */\n 'MP4_SIDX_WRONG_BOX_TYPE': 3004,\n\n /**\n * The MP4 SIDX parser encountered an invalid timescale.\n * The segment index data may be corrupt.\n */\n 'MP4_SIDX_INVALID_TIMESCALE': 3005,\n\n /** The MP4 SIDX parser encountered a type of SIDX that is not supported. */\n 'MP4_SIDX_TYPE_NOT_SUPPORTED': 3006,\n\n /**\n * The WebM Cues parser was unable to locate the Cues element.\n * The segment index data may be corrupt.\n */\n 'WEBM_CUES_ELEMENT_MISSING': 3007,\n\n /**\n * The WebM header parser was unable to locate the Ebml element.\n * The init segment data may be corrupt.\n */\n 'WEBM_EBML_HEADER_ELEMENT_MISSING': 3008,\n\n /**\n * The WebM header parser was unable to locate the Segment element.\n * The init segment data may be corrupt.\n */\n 'WEBM_SEGMENT_ELEMENT_MISSING': 3009,\n\n /**\n * The WebM header parser was unable to locate the Info element.\n * The init segment data may be corrupt.\n */\n 'WEBM_INFO_ELEMENT_MISSING': 3010,\n\n /**\n * The WebM header parser was unable to locate the Duration element.\n * The init segment data may be corrupt or may have been incorrectly encoded.\n * Shaka requires a duration in WebM DASH content.\n */\n 'WEBM_DURATION_ELEMENT_MISSING': 3011,\n\n /**\n * The WebM Cues parser was unable to locate the Cue Track Positions element.\n * The segment index data may be corrupt.\n */\n 'WEBM_CUE_TRACK_POSITIONS_ELEMENT_MISSING': 3012,\n\n /**\n * The WebM Cues parser was unable to locate the Cue Time element.\n * The segment index data may be corrupt.\n */\n 'WEBM_CUE_TIME_ELEMENT_MISSING': 3013,\n\n /**\n * A MediaSource operation failed.\n *
error.data[0] is a MediaError code from the video element.\n *
error.data[1] is the segment URI that triggered the error, if any.\n */\n 'MEDIA_SOURCE_OPERATION_FAILED': 3014,\n\n /**\n * A MediaSource operation threw an exception.\n *
error.data[0] is the exception that was thrown.\n *
error.data[1] is the error object from the video element.\n *
error.data[2] is the segment URI that triggered the error, if any.\n */\n 'MEDIA_SOURCE_OPERATION_THREW': 3015,\n\n /**\n * The video element reported an error.\n *
error.data[0] is a MediaError code from the video element.\n *
On Edge, error.data[1] is a Microsoft extended error code in hex.\n *
On Chrome, error.data[2] is a string with details on the error.\n *
See top of file for links to browser error codes.\n */\n 'VIDEO_ERROR': 3016,\n\n /**\n * A MediaSource operation threw QuotaExceededError and recovery failed. The\n * content cannot be played correctly because the segments are too large for\n * the browser/platform. This may occur when attempting to play very high\n * quality, very high bitrate content on low-end devices.\n *
error.data[0] is the type of content which caused the error.\n */\n 'QUOTA_EXCEEDED_ERROR': 3017,\n\n /**\n * Transmuxing with our internal transmuxer failed.\n *
error.data[0] is the segment URI that triggered the error, if any.\n */\n 'TRANSMUXING_FAILED': 3018,\n\n /**\n * Content transformations required by the platform could not be performed for\n * some reason (unsupported container, etc.)\n *
@see https://github.com/shaka-project/shaka-player/issues/2759\n *
error.data[0] is the segment URI that triggered the error, if any.\n */\n 'CONTENT_TRANSFORMATION_FAILED': 3019,\n\n /**\n * Important data is missing to be able to do the transmuxing of MSS.\n *
error.data[0] is the segment URI that triggered the error, if any.\n */\n 'MSS_MISSING_DATA_FOR_TRANSMUXING': 3020,\n\n // RETIRED: 'MSS_TRANSMUXING_CODEC_UNKNOWN': 3021,\n\n /**\n * MSS transmuing failed for unknown reason.\n *
error.data[0] is the segment URI that triggered the error, if any.\n */\n 'MSS_TRANSMUXING_FAILED': 3022,\n\n /**\n * An internal error which indicates that transmuxing operation has no video\n * data. This should not be seen by applications.\n *
error.data[0] is the segment URI that triggered the error, if any.\n */\n 'TRANSMUXING_NO_VIDEO_DATA': 3023,\n\n\n /**\n * The Player was unable to guess the manifest type based on file extension\n * or MIME type. To fix, try one of the following:\n *
    \n *
  • Rename the manifest so that the URI ends in a well-known extension.\n *
  • Configure the server to send a recognizable Content-Type header.\n *
  • Configure the server to accept a HEAD request for the manifest.\n *
\n *
error.data[0] is the manifest URI.\n *
error.data[1] is the detected or specified MIME type.\n */\n 'UNABLE_TO_GUESS_MANIFEST_TYPE': 4000,\n\n /**\n * The DASH Manifest contained invalid XML markup.\n *
error.data[0] is the URI associated with the XML.\n */\n 'DASH_INVALID_XML': 4001,\n\n /**\n * The DASH Manifest contained a Representation with insufficient segment\n * information.\n */\n 'DASH_NO_SEGMENT_INFO': 4002,\n\n /** The DASH Manifest contained an AdaptationSet with no Representations. */\n 'DASH_EMPTY_ADAPTATION_SET': 4003,\n\n /** The DASH Manifest contained an Period with no AdaptationSets. */\n 'DASH_EMPTY_PERIOD': 4004,\n\n /**\n * The DASH Manifest does not specify an init segment with a WebM container.\n */\n 'DASH_WEBM_MISSING_INIT': 4005,\n\n /** The DASH Manifest contained an unsupported container format. */\n 'DASH_UNSUPPORTED_CONTAINER': 4006,\n\n /** The embedded PSSH data has invalid encoding. */\n 'DASH_PSSH_BAD_ENCODING': 4007,\n\n /**\n * There is an AdaptationSet whose Representations do not have any common\n * key-systems.\n */\n 'DASH_NO_COMMON_KEY_SYSTEM': 4008,\n\n /** Having multiple key IDs per Representation is not supported. */\n 'DASH_MULTIPLE_KEY_IDS_NOT_SUPPORTED': 4009,\n\n /** The DASH Manifest specifies conflicting key IDs. */\n 'DASH_CONFLICTING_KEY_IDS': 4010,\n\n // RETIRED: 'UNPLAYABLE_PERIOD': 4011,\n\n /**\n * There exist some streams that could be decoded, but restrictions imposed\n * by the application or the key system prevent us from playing. This may\n * happen under the following conditions:\n *
    \n *
  • The application has given restrictions to the Player that restrict\n * at least one content type completely (e.g. no playable audio).\n *
  • The manifest specifies different keys than were given to us from the\n * license server.\n *
  • The key system has imposed output restrictions that cannot be met\n * (such as HDCP) and there are no unrestricted alternatives.\n *
\n *
error.data[0] is a {@link shaka.extern.RestrictionInfo} object\n * describing the kinds of restrictions that caused this error.\n */\n 'RESTRICTIONS_CANNOT_BE_MET': 4012,\n\n // RETIRED: 'INTERNAL_ERROR_KEY_STATUS': 4013,\n\n // RETIRED: 'NO_PERIODS': 4014,\n\n /**\n * HLS playlist doesn't start with a mandory #EXTM3U tag.\n */\n 'HLS_PLAYLIST_HEADER_MISSING': 4015,\n\n /**\n * HLS tag has an invalid name that doesn't start with '#EXT'\n *
error.data[0] is the invalid tag.\n */\n 'INVALID_HLS_TAG': 4016,\n\n /**\n * HLS playlist has both Master and Media/Segment tags.\n */\n 'HLS_INVALID_PLAYLIST_HIERARCHY': 4017,\n\n /**\n * A Representation has an id that is the same as another Representation in\n * the same Period. This makes manifest updates impossible since we cannot\n * map the updated Representation to the old one.\n */\n 'DASH_DUPLICATE_REPRESENTATION_ID': 4018,\n\n // RETIRED: 'HLS_MEDIA_INIT_SECTION_INFO_MISSING': 4019,\n\n /**\n * HLS manifest has several #EXT-X-MAP tags. We can only\n * support one at the moment.\n */\n 'HLS_MULTIPLE_MEDIA_INIT_SECTIONS_FOUND': 4020,\n\n // RETIRED: 'HLS_COULD_NOT_GUESS_MIME_TYPE': 4021,\n\n // RETIRED: 'HLS_MASTER_PLAYLIST_NOT_PROVIDED': 4022,\n\n /**\n * One of the required attributes was not provided, so the\n * HLS manifest is invalid.\n *
error.data[0] is the missing attribute's name.\n */\n 'HLS_REQUIRED_ATTRIBUTE_MISSING': 4023,\n\n /**\n * One of the required tags was not provided, so the\n * HLS manifest is invalid.\n *
error.data[0] is the missing tag's name.\n */\n 'HLS_REQUIRED_TAG_MISSING': 4024,\n\n /**\n * The HLS parser was unable to guess codecs of a stream.\n *
error.data[0] is the list of all codecs for the variant.\n */\n 'HLS_COULD_NOT_GUESS_CODECS': 4025,\n\n /**\n * The HLS parser has encountered encrypted content with unsupported\n * KEYFORMAT attributes.\n */\n 'HLS_KEYFORMATS_NOT_SUPPORTED': 4026,\n\n /**\n * The manifest parser only supports xlink links with xlink:actuate=\"onLoad\".\n */\n 'DASH_UNSUPPORTED_XLINK_ACTUATE': 4027,\n\n /**\n * The manifest parser has hit its depth limit on xlink link chains.\n */\n 'DASH_XLINK_DEPTH_LIMIT': 4028,\n\n // RETIRED: 'HLS_LIVE_CONTENT_NOT_SUPPORTED': 4029,\n\n // RETIRED: 'HLS_COULD_NOT_PARSE_SEGMENT_START_TIME': 4030,\n\n // RETIRED: 'HLS_MEDIA_SEQUENCE_REQUIRED_IN_LIVE_STREAMS': 4031,\n\n /**\n * The content container or codecs are not supported by this browser. For\n * example, this could happen if the content is WebM, but your browser does\n * not support the WebM container, or if the content uses HEVC, but your\n * browser does not support the HEVC codec. This can also occur for\n * multicodec or multicontainer manifests if none of the codecs or containers\n * are supported by the browser.\n *\n * To see what your browser supports, you can check the JSON data dumped by\n * http://support.shaka-player-demo.appspot.com/\n */\n 'CONTENT_UNSUPPORTED_BY_BROWSER': 4032,\n\n /**\n * External text tracks cannot be added to live streams.\n */\n 'CANNOT_ADD_EXTERNAL_TEXT_TO_LIVE_STREAM': 4033,\n\n // RETIRED: 'HLS_AES_128_ENCRYPTION_NOT_SUPPORTED': 4034,\n // RETIRED: 'HLS_INTERNAL_SKIP_STREAM': 4035,\n\n /** The Manifest contained no Variants. */\n 'NO_VARIANTS': 4036,\n\n /**\n * We failed to find matching streams across DASH Periods, and the\n * period-flattening aglorithm introduced in v3.0 has failed.\n */\n 'PERIOD_FLATTENING_FAILED': 4037,\n\n /**\n * We failed to find matching streams across DASH Periods due to inconsistent\n * DRM systems across periods.\n */\n 'INCONSISTENT_DRM_ACROSS_PERIODS': 4038,\n\n /**\n * The HLS manifest refers to an undeclared variables.\n *
error.data[0] is the variable undeclared.\n */\n 'HLS_VARIABLE_NOT_FOUND': 4039,\n\n /**\n * We do not support playing encrypted mp2t with MSE\n */\n 'HLS_MSE_ENCRYPTED_MP2T_NOT_SUPPORTED': 4040,\n\n /**\n * We do not support playing encrypted content (different than mp2t) with MSE\n * and legacy Apple MediaKeys API.\n */\n 'HLS_MSE_ENCRYPTED_LEGACY_APPLE_MEDIA_KEYS_NOT_SUPPORTED': 4041,\n\n /**\n * Web Crypto API is not available (to decrypt AES-128 streams). Web Crypto\n * only exists in secure origins like https.\n */\n 'NO_WEB_CRYPTO_API': 4042,\n\n // RETIRED: 'HLS_AES_128_INVALID_IV_LENGTH': 4043,\n // RETIRED: 'HLS_AES_128_INVALID_KEY_LENGTH': 4044,\n\n /**\n * External thumbnails tracks cannot be added to live streams.\n */\n 'CANNOT_ADD_EXTERNAL_THUMBNAILS_TO_LIVE_STREAM': 4045,\n\n /**\n * The MSS Manifest contained invalid XML markup.\n *
error.data[0] is the URI associated with the XML.\n */\n 'MSS_INVALID_XML': 4046,\n\n /**\n * MSS parser encountered a live playlist.\n */\n 'MSS_LIVE_CONTENT_NOT_SUPPORTED': 4047,\n\n /**\n * AES-128 iv length should be 16 bytes.\n */\n 'AES_128_INVALID_IV_LENGTH': 4048,\n\n /**\n * AES-128 encryption key length should be 16 bytes.\n */\n 'AES_128_INVALID_KEY_LENGTH': 4049,\n\n /**\n * The DASH Manifest specifies conflicting AES-128 keys.\n */\n 'DASH_CONFLICTING_AES_128': 4050,\n\n /**\n * The DASH Manifest specifies a unsupported AES-128 encryption.\n */\n 'DASH_UNSUPPORTED_AES_128': 4051,\n\n /**\n * Patch requested during an update did not match original manifest.\n */\n 'DASH_INVALID_PATCH': 4052,\n\n /**\n * The media playlist has not segments or all segments are gap.\n */\n 'HLS_EMPTY_MEDIA_PLAYLIST': 4053,\n\n /**\n * We do not support playing encrypted content with MSE\n * and legacy Apple MediaKeys API.\n */\n 'DASH_MSE_ENCRYPTED_LEGACY_APPLE_MEDIA_KEYS_NOT_SUPPORTED': 4054,\n\n // RETIRED: 'INCONSISTENT_BUFFER_STATE': 5000,\n // RETIRED: 'INVALID_SEGMENT_INDEX': 5001,\n // RETIRED: 'SEGMENT_DOES_NOT_EXIST': 5002,\n // RETIRED: 'CANNOT_SATISFY_BYTE_LIMIT': 5003,\n // RETIRED: 'BAD_SEGMENT': 5004,\n // RETIRED: 'INVALID_STREAMS_CHOSEN': 5005,\n\n /**\n * This would only happen if StreamingEngine were not started correctly, and\n * should not be seen in production.\n */\n 'STREAMING_ENGINE_STARTUP_INVALID_STATE': 5006,\n\n\n /**\n * The manifest indicated protected content, but the manifest parser was\n * unable to determine what key systems should be used.\n */\n 'NO_RECOGNIZED_KEY_SYSTEMS': 6000,\n\n /**\n * None of the requested key system configurations are available. This may\n * happen under the following conditions:\n *
    \n *
  • The key system is not supported.\n *
  • The key system does not support the features requested (e.g.\n * persistent state).\n *
  • A user prompt was shown and the user denied access.\n *
  • The key system is not available from unsecure contexts. (i.e.\n requires HTTPS) See https://bit.ly/2K9X1nY\n *
\n */\n 'REQUESTED_KEY_SYSTEM_CONFIG_UNAVAILABLE': 6001,\n\n /**\n * The browser found one of the requested key systems, but it failed to\n * create an instance of the CDM for some unknown reason.\n *
error.data[0] is an error message string from the browser.\n */\n 'FAILED_TO_CREATE_CDM': 6002,\n\n /**\n * The browser found one of the requested key systems and created an instance\n * of the CDM, but it failed to attach the CDM to the video for some unknown\n * reason.\n *
error.data[0] is an error message string from the browser.\n */\n 'FAILED_TO_ATTACH_TO_VIDEO': 6003,\n\n /**\n * The CDM rejected the server certificate supplied by the application.\n * The certificate may be malformed or in an unsupported format.\n *
error.data[0] is an error message string from the browser.\n */\n 'INVALID_SERVER_CERTIFICATE': 6004,\n\n /**\n * The CDM refused to create a session for some unknown reason.\n *
error.data[0] is an error message string from the browser.\n */\n 'FAILED_TO_CREATE_SESSION': 6005,\n\n /**\n * The CDM was unable to generate a license request for the init data it was\n * given. The init data may be malformed or in an unsupported format.\n *
error.data[0] is an error message string from the browser.\n *
error.data[1] is the error object from the browser.\n *
error.data[2] is a string with the extended error code, if available.\n *
See top of file for links to browser error codes.\n */\n 'FAILED_TO_GENERATE_LICENSE_REQUEST': 6006,\n\n /**\n * The license request failed. This could be a timeout, a network failure, or\n * a rejection by the server.\n *
error.data[0] is a shaka.util.Error from the networking engine.\n */\n 'LICENSE_REQUEST_FAILED': 6007,\n\n /**\n * The license response was rejected by the CDM. The server's response may be\n * invalid or malformed for this CDM.\n *
error.data[0] is an error message string from the browser.\n *
See top of file for links to browser error codes.\n */\n 'LICENSE_RESPONSE_REJECTED': 6008,\n\n // RETIRED: 'NO_LICENSE_SERVER_SPECIFIED': 6009,\n\n /**\n * The manifest does not specify any DRM info, but the content is encrypted.\n * Either the manifest or the manifest parser are broken.\n */\n 'ENCRYPTED_CONTENT_WITHOUT_DRM_INFO': 6010,\n\n // RETIRED: 'WRONG_KEYS': 6011,\n\n /**\n * No license server was given for the key system signaled by the manifest.\n * A license server URI is required for every key system.\n *
error.data[0] is the key system identifier.\n */\n 'NO_LICENSE_SERVER_GIVEN': 6012,\n\n /**\n * A required offline session was removed. The content might not be playable\n * depending of the playback context.\n */\n 'OFFLINE_SESSION_REMOVED': 6013,\n\n /**\n * The license has expired. This is triggered when all keys in the key\n * status map have a status of 'expired'.\n */\n 'EXPIRED': 6014,\n\n /**\n * A server certificate wasn't given when it is required. FairPlay requires\n * setting an explicit server certificate in the configuration.\n */\n 'SERVER_CERTIFICATE_REQUIRED': 6015,\n\n /**\n * An error was thrown while executing the init data transformation.\n *
error.data[0] is the original error.\n */\n 'INIT_DATA_TRANSFORM_ERROR': 6016,\n\n /**\n * The server certificate request failed.\n *
error.data[0] is a shaka.util.Error from the networking engine.\n */\n 'SERVER_CERTIFICATE_REQUEST_FAILED': 6017,\n\n /**\n * The HDCP version does not meet the requirements.\n */\n 'MIN_HDCP_VERSION_NOT_MATCH': 6018,\n\n /**\n * Error when checking HDCP version.\n *
error.data[0] is an error message string from the browser.\n */\n 'ERROR_CHECKING_HDCP_VERSION': 6019,\n\n\n /**\n * The call to Player.load() was interrupted by a call to Player.unload()\n * or another call to Player.load().\n */\n 'LOAD_INTERRUPTED': 7000,\n\n /**\n * An internal error which indicates that an operation was aborted. This\n * should not be seen by applications.\n */\n 'OPERATION_ABORTED': 7001,\n\n /**\n * The call to Player.load() failed because the Player does not have a video\n * element. The video element must either be provided to the constructor or\n * to Player.attach() before Player.load() is called.\n */\n 'NO_VIDEO_ELEMENT': 7002,\n\n /**\n * The operation failed because the object has been destroyed.\n */\n 'OBJECT_DESTROYED': 7003,\n\n /**\n * The content has not been loaded in the Player.\n */\n 'CONTENT_NOT_LOADED': 7004,\n\n /**\n * The call to preload failed, due to being called on src= content.\n */\n 'SRC_EQUALS_PRELOAD_NOT_SUPPORTED': 7005,\n\n /**\n * The Cast API is unavailable. This may be because of one of the following:\n * 1. The browser may not have Cast support\n * 2. The browser may be missing a necessary Cast extension\n * 3. The Cast sender library may not be loaded in your app\n */\n 'CAST_API_UNAVAILABLE': 8000,\n\n /**\n * No cast receivers are available at this time.\n */\n 'NO_CAST_RECEIVERS': 8001,\n\n /**\n * The library is already casting.\n */\n 'ALREADY_CASTING': 8002,\n\n /**\n * A Cast SDK error that we did not explicitly plan for has occurred.\n * Check data[0] and refer to the Cast SDK documentation for details.\n *
error.data[0] is an error object from the Cast SDK.\n */\n 'UNEXPECTED_CAST_ERROR': 8003,\n\n /**\n * The cast operation was canceled by the user.\n *
error.data[0] is an error object from the Cast SDK.\n */\n 'CAST_CANCELED_BY_USER': 8004,\n\n /**\n * The cast connection timed out.\n *
error.data[0] is an error object from the Cast SDK.\n */\n 'CAST_CONNECTION_TIMED_OUT': 8005,\n\n /**\n * The requested receiver app ID does not exist or is unavailable.\n * Check the requested app ID for typos.\n *
error.data[0] is an error object from the Cast SDK.\n */\n 'CAST_RECEIVER_APP_UNAVAILABLE': 8006,\n\n\n // RETIRED: CAST_RECEIVER_APP_ID_MISSING': 8007,\n\n\n /**\n * Offline storage is not supported on this browser; it is required for\n * offline support.\n */\n 'STORAGE_NOT_SUPPORTED': 9000,\n\n /**\n * An unknown error occurred in the IndexedDB.\n *
On Firefox, one common source for UnknownError calls is reverting\n * Firefox to an old version. This makes the IndexedDB storage inaccessible\n * for older versions. The only way to fix this is to delete the storage\n * data in your profile. See https://mzl.la/2yCGWCm\n *
error.data[0] is the error object.\n */\n 'INDEXED_DB_ERROR': 9001,\n\n /**\n * The storage operation was aborted. Deprecated in favor of more general\n * OPERATION_ABORTED.\n */\n 'DEPRECATED_OPERATION_ABORTED': 9002,\n\n /**\n * The specified item was not found in the IndexedDB.\n *
error.data[0] is the offline URI.\n */\n 'REQUESTED_ITEM_NOT_FOUND': 9003,\n\n /**\n * A network request was made with a malformed offline URI.\n *
error.data[0] is the URI.\n */\n 'MALFORMED_OFFLINE_URI': 9004,\n\n /**\n * The specified content is live or in-progress.\n * Live and in-progress streams cannot be stored offline.\n *
error.data[0] is the URI.\n */\n 'CANNOT_STORE_LIVE_OFFLINE': 9005,\n\n // RETIRED: 'STORE_ALREADY_IN_PROGRESS': 9006,\n\n /**\n * There was no init data available for offline storage. This happens when\n * there is no init data in the manifest nor could we find any in the\n * segments. We currently only support searching MP4 init segments for init\n * data.\n */\n 'NO_INIT_DATA_FOR_OFFLINE': 9007,\n\n /**\n * shaka.offline.Storage was constructed with a Player proxy instead of a\n * local player instance. To fix this, use Player directly with Storage\n * instead of the results of CastProxy.prototype.getPlayer().\n */\n 'LOCAL_PLAYER_INSTANCE_REQUIRED': 9008,\n\n // RETIRED/MOVED TO 4000's: 'CONTENT_UNSUPPORTED_BY_BROWSER': 9009,\n\n // RETIRED: 'UNSUPPORTED_UPGRADE_REQUEST': 9010,\n\n /**\n * The storage cell does not allow new operations that require new keys.\n */\n 'NEW_KEY_OPERATION_NOT_SUPPORTED': 9011,\n\n /**\n * A key was not found in a storage cell.\n */\n 'KEY_NOT_FOUND': 9012,\n\n /**\n * A storage cell was not found.\n */\n 'MISSING_STORAGE_CELL': 9013,\n\n /**\n * The storage limit defined in downloadSizeCallback has been\n * reached.\n */\n 'STORAGE_LIMIT_REACHED': 9014,\n\n /**\n * downloadSizeCallback has produced an unexpected error.\n */\n 'DOWNLOAD_SIZE_CALLBACK_ERROR': 9015,\n\n /**\n * The storage cell does not allow new operations that significantly change\n * existing data.\n */\n 'MODIFY_OPERATION_NOT_SUPPORTED': 9016,\n\n /**\n * When attempting to open an indexedDB instance, nothing happened for long\n * enough for us to time out. This keeps the storage mechanism from hanging\n * indefinitely, if neither the success nor error callbacks are called.\n */\n 'INDEXED_DB_INIT_TIMED_OUT': 9017,\n\n /**\n * CS IMA SDK, required for ad insertion, has not been included on the page.\n */\n 'CS_IMA_SDK_MISSING': 10000,\n\n /**\n * Client Side Ad Manager needs to be initialized to enable Client Side\n * Ad Insertion. Call adManager.initClientSide() to do it.\n */\n 'CS_AD_MANAGER_NOT_INITIALIZED': 10001,\n\n /**\n * SS IMA SDK, required for ad insertion, has not been included on the page.\n */\n 'SS_IMA_SDK_MISSING': 10002,\n\n /**\n * Server Side Ad Manager needs to be initialized to enable Server Side\n * Ad Insertion. Call adManager.initServerSide() to do it.\n */\n 'SS_AD_MANAGER_NOT_INITIALIZED': 10003,\n\n /**\n * A new DAI steam was requested before the previous request had been\n * resolved. Only one stream request at a time is supported. Please wait\n * for the previous request to complete before initiating a new one.\n */\n 'CURRENT_DAI_REQUEST_NOT_FINISHED': 10004,\n\n /**\n * MediaTailor Ad Manager needs to be initialized to enable MediaTailor\n * Ad Insertion. Call adManager.initMediaTailor() to do it.\n */\n 'MT_AD_MANAGER_NOT_INITIALIZED': 10005,\n\n /**\n * Interstitial Ad Manager needs to be initialized to enable interstitial\n * Ad Insertion. Call adManager.initInterstitial() to do it.\n */\n 'INTERSTITIAL_AD_MANAGER_NOT_INITIALIZED': 10006,\n\n /**\n * The VAST contained invalid XML markup.\n */\n 'VAST_INVALID_XML': 10007,\n};\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.util.Lazy');\n\ngoog.require('goog.asserts');\n\n\n/**\n * @summary\n * This contains a single value that is lazily generated when it is first\n * requested. This can store any value except \"undefined\".\n *\n * @template T\n */\nshaka.util.Lazy = class {\n /** @param {function():T} gen */\n constructor(gen) {\n /** @private {function():T} */\n this.gen_ = gen;\n\n /** @private {T|undefined} */\n this.value_ = undefined;\n }\n\n /** @return {T} */\n value() {\n if (this.value_ == undefined) {\n // Compiler complains about unknown fields without this cast.\n this.value_ = /** @type {*} */ (this.gen_());\n goog.asserts.assert(\n this.value_ != undefined, 'Unable to create lazy value');\n }\n return this.value_;\n }\n\n /** Resets the value of the lazy function, so it has to be remade. */\n reset() {\n this.value_ = undefined;\n }\n};\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.util.DrmUtils');\n\ngoog.require('shaka.util.BufferUtils');\ngoog.require('shaka.util.Lazy');\n\n\nshaka.util.DrmUtils = class {\n /**\n * Returns true if the browser has recent EME APIs.\n *\n * @return {boolean}\n */\n static isBrowserSupported() {\n const basic =\n !!window.MediaKeys &&\n !!window.navigator &&\n !!window.navigator.requestMediaKeySystemAccess &&\n !!window.MediaKeySystemAccess &&\n // eslint-disable-next-line no-restricted-syntax\n !!window.MediaKeySystemAccess.prototype.getConfiguration;\n\n return basic;\n }\n\n /**\n * Checks if two DrmInfos can be decrypted using the same key system.\n * Clear content is considered compatible with every key system.\n *\n * @param {!Array} drms1\n * @param {!Array} drms2\n * @return {boolean}\n */\n static areDrmCompatible(drms1, drms2) {\n if (!drms1.length || !drms2.length) {\n return true;\n }\n\n if (drms1 === drms2) {\n return true;\n }\n\n return shaka.util.DrmUtils.getCommonDrmInfos(\n drms1, drms2).length > 0;\n }\n\n /**\n * Returns an array of drm infos that are present in both input arrays.\n * If one of the arrays is empty, returns the other one since clear\n * content is considered compatible with every drm info.\n *\n * @param {!Array} drms1\n * @param {!Array} drms2\n * @return {!Array}\n */\n static getCommonDrmInfos(drms1, drms2) {\n if (!drms1.length) {\n return drms2;\n }\n if (!drms2.length) {\n return drms1;\n }\n\n const commonDrms = [];\n\n for (const drm1 of drms1) {\n for (const drm2 of drms2) {\n if (drm1.keySystem == drm2.keySystem) {\n const initDataMap = new Map();\n const bothInitDatas = (drm1.initData || [])\n .concat(drm2.initData || []);\n for (const d of bothInitDatas) {\n initDataMap.set(d.keyId, d);\n }\n const initData = Array.from(initDataMap.values());\n\n const keyIds = drm1.keyIds && drm2.keyIds ?\n new Set([...drm1.keyIds, ...drm2.keyIds]) :\n drm1.keyIds || drm2.keyIds;\n const mergedDrm = {\n keySystem: drm1.keySystem,\n licenseServerUri: drm1.licenseServerUri || drm2.licenseServerUri,\n distinctiveIdentifierRequired: drm1.distinctiveIdentifierRequired ||\n drm2.distinctiveIdentifierRequired,\n persistentStateRequired: drm1.persistentStateRequired ||\n drm2.persistentStateRequired,\n videoRobustness: drm1.videoRobustness || drm2.videoRobustness,\n audioRobustness: drm1.audioRobustness || drm2.audioRobustness,\n serverCertificate: drm1.serverCertificate || drm2.serverCertificate,\n serverCertificateUri: drm1.serverCertificateUri ||\n drm2.serverCertificateUri,\n initData,\n keyIds,\n };\n commonDrms.push(mergedDrm);\n break;\n }\n }\n }\n\n return commonDrms;\n }\n\n /**\n * @param {?shaka.extern.DrmInfo} drmInfo\n * @return {string} */\n static keySystem(drmInfo) {\n return drmInfo ? drmInfo.keySystem : '';\n }\n\n /**\n * @param {?string} keySystem\n * @return {boolean}\n */\n static isPlayReadyKeySystem(keySystem) {\n if (keySystem) {\n return !!keySystem.match(/^com\\.(microsoft|chromecast)\\.playready/);\n }\n\n return false;\n }\n\n /**\n * @param {?string} keySystem\n * @return {boolean}\n */\n static isFairPlayKeySystem(keySystem) {\n if (keySystem) {\n return !!keySystem.match(/^com\\.apple\\.fps/);\n }\n\n return false;\n }\n\n /**\n * A method for generating a key for the MediaKeySystemAccessRequests cache.\n *\n * @param {string} videoCodec\n * @param {string} audioCodec\n * @param {string} keySystem\n * @return {string}\n * @private\n */\n static generateKeySystemCacheKey_(videoCodec, audioCodec, keySystem) {\n return `${videoCodec}#${audioCodec}#${keySystem}`;\n }\n\n /**\n * Check does MediaKeySystemAccess cache contains something for following\n * attributes.\n *\n * @param {string} videoCodec\n * @param {string} audioCodec\n * @param {string} keySystem\n * @return {boolean}\n */\n static hasMediaKeySystemAccess(videoCodec, audioCodec, keySystem) {\n const DrmUtils = shaka.util.DrmUtils;\n const key = DrmUtils.generateKeySystemCacheKey_(\n videoCodec, audioCodec, keySystem);\n return DrmUtils.memoizedMediaKeySystemAccessRequests_.has(key);\n }\n\n /**\n * Get MediaKeySystemAccess object for following attributes.\n *\n * @param {string} videoCodec\n * @param {string} audioCodec\n * @param {string} keySystem\n * @return {?MediaKeySystemAccess}\n */\n static getMediaKeySystemAccess(videoCodec, audioCodec, keySystem) {\n const DrmUtils = shaka.util.DrmUtils;\n const key = DrmUtils.generateKeySystemCacheKey_(\n videoCodec, audioCodec, keySystem);\n return DrmUtils.memoizedMediaKeySystemAccessRequests_.get(key) || null;\n }\n\n /**\n * Store MediaKeySystemAccess object associated with specified attributes.\n *\n * @param {string} videoCodec\n * @param {string} audioCodec\n * @param {string} keySystem\n * @param {!MediaKeySystemAccess} mksa\n */\n static setMediaKeySystemAccess(videoCodec, audioCodec, keySystem, mksa) {\n const DrmUtils = shaka.util.DrmUtils;\n const key = DrmUtils.generateKeySystemCacheKey_(\n videoCodec, audioCodec, keySystem);\n return DrmUtils.memoizedMediaKeySystemAccessRequests_.set(key, mksa);\n }\n\n /**\n * Clears underlying cache.\n */\n static clearMediaKeySystemAccessMap() {\n const DrmUtils = shaka.util.DrmUtils;\n DrmUtils.memoizedMediaKeySystemAccessRequests_.clear();\n }\n};\n\n\n/**\n * Contains the suggested \"default\" key ID used by EME polyfills that do not\n * have a per-key key status. See w3c/encrypted-media#32.\n * @type {!shaka.util.Lazy}\n */\nshaka.util.DrmUtils.DUMMY_KEY_ID = new shaka.util.Lazy(\n () => shaka.util.BufferUtils.toArrayBuffer(new Uint8Array([0])));\n\n\n/**\n * A cache that stores the MediaKeySystemAccess result of calling\n * `navigator.requestMediaKeySystemAccess` by a key combination of\n * video/audio codec and key system string.\n *\n * @private {!Map}\n */\nshaka.util.DrmUtils.memoizedMediaKeySystemAccessRequests_ = new Map();\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.util.DelayedTick');\n\n\n/**\n * @summary\n * This class wraps a function so that we can defer executing the function by X\n * seconds.\n *\n * @final\n */\nshaka.util.DelayedTick = class {\n /**\n * @param {function()} onTick\n */\n constructor(onTick) {\n /** @private {function()} */\n this.onTick_ = onTick;\n\n /** @private {?function()} */\n this.cancelPending_ = null;\n }\n\n /**\n * Call |onTick| after |delayInSeconds| has elapsed. If there is already a\n * pending call to |onTick|, the pending call will be canceled.\n *\n * @param {number} delayInSeconds\n * @return {!shaka.util.DelayedTick}\n */\n tickAfter(delayInSeconds) {\n // We only want one timeout set at a time, so make sure no other timeouts\n // are running.\n this.stop();\n\n // We will wrap these values in a function to allow us to cancel the timeout\n // we are about to create.\n let alive = true;\n let timeoutId = null;\n\n this.cancelPending_ = () => {\n window.clearTimeout(timeoutId);\n alive = false;\n };\n\n // For some reason, a timeout may still execute after we have cleared it in\n // our tests. We will wrap the callback so that we can double-check our\n // |alive| flag.\n const onTick = () => {\n if (alive) {\n this.onTick_();\n }\n };\n\n timeoutId = window.setTimeout(onTick, delayInSeconds * 1000);\n\n return this;\n }\n\n /**\n * Cancel any pending calls to |onTick|. If there are no pending calls to\n * |onTick|, this will be a no-op.\n */\n stop() {\n if (this.cancelPending_) {\n this.cancelPending_();\n this.cancelPending_ = null;\n }\n }\n};\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.util.Timer');\n\ngoog.require('shaka.util.DelayedTick');\n\n\n/**\n * A timer allows a single function to be executed at a later time or at\n * regular intervals.\n *\n * @final\n * @export\n */\nshaka.util.Timer = class {\n /**\n * Create a new timer. A timer is committed to a single callback function.\n * While there is no technical reason to do this, it is far easier to\n * understand and use timers when they are connected to one functional idea.\n *\n * @param {function()} onTick\n */\n constructor(onTick) {\n /**\n * Each time our timer \"does work\", we call that a \"tick\". The name comes\n * from old analog clocks.\n *\n * @private {function()}\n */\n this.onTick_ = onTick;\n\n /** @private {shaka.util.DelayedTick} */\n this.ticker_ = null;\n }\n\n /**\n * Have the timer call |onTick| now.\n *\n * @return {!shaka.util.Timer}\n * @export\n */\n tickNow() {\n this.stop();\n this.onTick_();\n\n return this;\n }\n\n /**\n * Have the timer call |onTick| after |seconds| has elapsed unless |stop| is\n * called first.\n *\n * @param {number} seconds\n * @return {!shaka.util.Timer}\n * @export\n */\n tickAfter(seconds) {\n this.stop();\n\n this.ticker_ = new shaka.util.DelayedTick(() => {\n this.onTick_();\n }).tickAfter(seconds);\n\n return this;\n }\n\n /**\n * Have the timer call |onTick| every |seconds| until |stop| is called.\n *\n * @param {number} seconds\n * @return {!shaka.util.Timer}\n * @export\n */\n tickEvery(seconds) {\n this.stop();\n\n if (goog.DEBUG) {\n // Capture the stack trace by making a fake error.\n const stackTrace = Error('Timer created').stack;\n shaka.util.Timer.activeTimers.set(this, stackTrace);\n }\n this.ticker_ = new shaka.util.DelayedTick(() => {\n // Schedule the timer again first. |onTick_| could cancel the timer and\n // rescheduling first simplifies the implementation.\n this.ticker_.tickAfter(seconds);\n this.onTick_();\n }).tickAfter(seconds);\n\n return this;\n }\n\n /**\n * Stop the timer and clear the previous behaviour. The timer is still usable\n * after calling |stop|.\n *\n * @export\n */\n stop() {\n if (this.ticker_) {\n this.ticker_.stop();\n this.ticker_ = null;\n }\n if (goog.DEBUG) {\n shaka.util.Timer.activeTimers.delete(this);\n }\n }\n};\n\nif (goog.DEBUG) {\n /**\n * Tracks all active timer instances, along with the stack trace that created\n * that timer.\n * @type {!Map.}\n */\n shaka.util.Timer.activeTimers = new Map();\n}\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.util.Platform');\n\ngoog.require('shaka.log');\ngoog.require('shaka.util.DrmUtils');\ngoog.require('shaka.util.Timer');\n\n\n/**\n * A wrapper for platform-specific functions.\n *\n * @final\n */\nshaka.util.Platform = class {\n /**\n * Check if the current platform supports media source. We assume that if\n * the current platform supports media source, then we can use media source\n * as per its design.\n *\n * @return {boolean}\n */\n static supportsMediaSource() {\n const mediaSource = window.ManagedMediaSource || window.MediaSource;\n // Browsers that lack a media source implementation will have no reference\n // to |window.MediaSource|. Platforms that we see having problematic media\n // source implementations will have this reference removed via a polyfill.\n if (!mediaSource) {\n return false;\n }\n\n // Some very old MediaSource implementations didn't have isTypeSupported.\n if (!mediaSource.isTypeSupported) {\n return false;\n }\n\n return true;\n }\n\n /**\n * Returns true if the media type is supported natively by the platform.\n *\n * @param {string} mimeType\n * @return {boolean}\n */\n static supportsMediaType(mimeType) {\n const video = shaka.util.Platform.anyMediaElement();\n return video.canPlayType(mimeType) != '';\n }\n\n /**\n * Check if the current platform is MS Edge.\n *\n * @return {boolean}\n */\n static isEdge() {\n // Legacy Edge contains \"Edge/version\".\n // Chromium-based Edge contains \"Edg/version\" (no \"e\").\n if (navigator.userAgent.match(/Edge?\\//)) {\n return true;\n }\n\n return false;\n }\n\n /**\n * Check if the current platform is Legacy Edge.\n *\n * @return {boolean}\n */\n static isLegacyEdge() {\n // Legacy Edge contains \"Edge/version\".\n // Chromium-based Edge contains \"Edg/version\" (no \"e\").\n if (navigator.userAgent.match(/Edge\\//)) {\n return true;\n }\n\n return false;\n }\n\n /**\n * Check if the current platform is MS IE.\n *\n * @return {boolean}\n */\n static isIE() {\n return shaka.util.Platform.userAgentContains_('Trident/');\n }\n\n /**\n * Check if the current platform is an Xbox One.\n *\n * @return {boolean}\n */\n static isXboxOne() {\n return shaka.util.Platform.userAgentContains_('Xbox One');\n }\n\n /**\n * Check if the current platform is a Tizen TV.\n *\n * @return {boolean}\n */\n static isTizen() {\n return shaka.util.Platform.userAgentContains_('Tizen');\n }\n\n /**\n * Check if the current platform is a Tizen 6 TV.\n *\n * @return {boolean}\n */\n static isTizen6() {\n return shaka.util.Platform.userAgentContains_('Tizen 6');\n }\n\n /**\n * Check if the current platform is a Tizen 5.0 TV.\n *\n * @return {boolean}\n */\n static isTizen5_0() {\n return shaka.util.Platform.userAgentContains_('Tizen 5.0');\n }\n\n /**\n * Check if the current platform is a Tizen 5 TV.\n *\n * @return {boolean}\n */\n static isTizen5() {\n return shaka.util.Platform.userAgentContains_('Tizen 5');\n }\n\n /**\n * Check if the current platform is a Tizen 4 TV.\n *\n * @return {boolean}\n */\n static isTizen4() {\n return shaka.util.Platform.userAgentContains_('Tizen 4');\n }\n\n /**\n * Check if the current platform is a Tizen 3 TV.\n *\n * @return {boolean}\n */\n static isTizen3() {\n return shaka.util.Platform.userAgentContains_('Tizen 3');\n }\n\n /**\n * Check if the current platform is a Tizen 2 TV.\n *\n * @return {boolean}\n */\n static isTizen2() {\n return shaka.util.Platform.userAgentContains_('Tizen 2');\n }\n\n /**\n * Check if the current platform is a WebOS.\n *\n * @return {boolean}\n */\n static isWebOS() {\n return shaka.util.Platform.userAgentContains_('Web0S');\n }\n\n /**\n * Check if the current platform is a WebOS 3.\n *\n * @return {boolean}\n */\n static isWebOS3() {\n // See: https://webostv.developer.lge.com/develop/specifications/web-api-and-web-engine#useragent-string\n return shaka.util.Platform.isWebOS() &&\n shaka.util.Platform.chromeVersion() === 38;\n }\n\n /**\n * Check if the current platform is a WebOS 4.\n *\n * @return {boolean}\n */\n static isWebOS4() {\n // See: https://webostv.developer.lge.com/develop/specifications/web-api-and-web-engine#useragent-string\n return shaka.util.Platform.isWebOS() &&\n shaka.util.Platform.chromeVersion() === 53;\n }\n\n /**\n * Check if the current platform is a WebOS 5.\n *\n * @return {boolean}\n */\n static isWebOS5() {\n // See: https://webostv.developer.lge.com/develop/specifications/web-api-and-web-engine#useragent-string\n return shaka.util.Platform.isWebOS() &&\n shaka.util.Platform.chromeVersion() === 68;\n }\n\n /**\n * Check if the current platform is a WebOS 6.\n *\n * @return {boolean}\n */\n static isWebOS6() {\n // See: https://webostv.developer.lge.com/develop/specifications/web-api-and-web-engine#useragent-string\n return shaka.util.Platform.isWebOS() &&\n shaka.util.Platform.chromeVersion() === 79;\n }\n\n /**\n * Check if the current platform is a Google Chromecast.\n *\n * @return {boolean}\n */\n static isChromecast() {\n return shaka.util.Platform.userAgentContains_('CrKey');\n }\n\n /**\n * Check if the current platform is a Google Chromecast with Android\n * (i.e. Chromecast with GoogleTV).\n *\n * @return {boolean}\n */\n static isAndroidCastDevice() {\n const Platform = shaka.util.Platform;\n return Platform.isChromecast() && Platform.isAndroid();\n }\n\n /**\n * Check if the current platform is a Google Chromecast with Fuchsia\n * (i.e. Google Nest Hub).\n *\n * @return {boolean}\n */\n static isFuchsiaCastDevice() {\n const Platform = shaka.util.Platform;\n return Platform.isChromecast() && Platform.isFuchsia();\n }\n\n /**\n * Returns a major version number for Chrome, or Chromium-based browsers.\n *\n * For example:\n * - Chrome 106.0.5249.61 returns 106.\n * - Edge 106.0.1370.34 returns 106 (since this is based on Chromium).\n * - Safari returns null (since this is independent of Chromium).\n *\n * @return {?number} A major version number or null if not Chromium-based.\n */\n static chromeVersion() {\n if (!shaka.util.Platform.isChrome()) {\n return null;\n }\n\n // Looking for something like \"Chrome/106.0.0.0\".\n const match = navigator.userAgent.match(/Chrome\\/(\\d+)/);\n if (match) {\n return parseInt(match[1], /* base= */ 10);\n }\n\n return null;\n }\n\n /**\n * Check if the current platform is Google Chrome.\n *\n * @return {boolean}\n */\n static isChrome() {\n // The Edge Legacy user agent will also contain the \"Chrome\" keyword, so we\n // need to make sure this is not Edge Legacy.\n return shaka.util.Platform.userAgentContains_('Chrome') &&\n !shaka.util.Platform.isLegacyEdge();\n }\n\n /**\n * Check if the current platform is Firefox.\n *\n * @return {boolean}\n */\n static isFirefox() {\n return shaka.util.Platform.userAgentContains_('Firefox');\n }\n\n /**\n * Check if the current platform is from Apple.\n *\n * Returns true on all iOS browsers and on desktop Safari.\n *\n * Returns false for non-Safari browsers on macOS, which are independent of\n * Apple.\n *\n * @return {boolean}\n */\n static isApple() {\n return !!navigator.vendor && navigator.vendor.includes('Apple') &&\n !shaka.util.Platform.isTizen() &&\n !shaka.util.Platform.isEOS() &&\n !shaka.util.Platform.isAPL() &&\n !shaka.util.Platform.isVirginMedia() &&\n !shaka.util.Platform.isOrange() &&\n !shaka.util.Platform.isPS4() &&\n !shaka.util.Platform.isAmazonFireTV() &&\n !shaka.util.Platform.isComcastX1() &&\n !shaka.util.Platform.isZenterio() &&\n !shaka.util.Platform.isSkyQ();\n }\n\n /**\n * Check if the current platform is Playstation 5.\n *\n * Returns true on Playstation 5 browsers.\n *\n * Returns false for Playstation 5 browsers\n *\n * @return {boolean}\n */\n static isPS5() {\n return shaka.util.Platform.userAgentContains_('PlayStation 5');\n }\n\n /**\n * Check if the current platform is Playstation 4.\n */\n static isPS4() {\n return shaka.util.Platform.userAgentContains_('PlayStation 4');\n }\n\n /**\n * Check if the current platform is Hisense.\n */\n static isHisense() {\n return shaka.util.Platform.userAgentContains_('Hisense') ||\n shaka.util.Platform.userAgentContains_('VIDAA');\n }\n\n /**\n * Check if the current platform is Virgin Media device.\n */\n static isVirginMedia() {\n return shaka.util.Platform.userAgentContains_('VirginMedia');\n }\n\n /**\n * Check if the current platform is Orange.\n */\n static isOrange() {\n return shaka.util.Platform.userAgentContains_('SOPOpenBrowser');\n }\n\n /**\n * Check if the current platform is SkyQ STB.\n */\n static isSkyQ() {\n return shaka.util.Platform.userAgentContains_('Sky_STB');\n }\n\n /**\n * Check if the current platform is Amazon Fire TV.\n * https://developer.amazon.com/docs/fire-tv/identify-amazon-fire-tv-devices.html\n *\n * @return {boolean}\n */\n static isAmazonFireTV() {\n return shaka.util.Platform.userAgentContains_('AFT');\n }\n\n /**\n * Check if the current platform is Comcast X1.\n * @return {boolean}\n */\n static isComcastX1() {\n return shaka.util.Platform.userAgentContains_('WPE');\n }\n\n /**\n * Check if the current platform is Deutsche Telecom Zenterio STB.\n * @return {boolean}\n */\n static isZenterio() {\n return shaka.util.Platform.userAgentContains_('DT_STB_BCM');\n }\n\n /**\n * Returns a major version number for Safari, or Safari-based iOS browsers.\n *\n * For example:\n * - Safari 13.0.4 on macOS returns 13.\n * - Safari on iOS 13.3.1 returns 13.\n * - Chrome on iOS 13.3.1 returns 13 (since this is based on Safari/WebKit).\n * - Chrome on macOS returns null (since this is independent of Apple).\n *\n * Returns null on Firefox on iOS, where this version information is not\n * available.\n *\n * @return {?number} A major version number or null if not iOS.\n */\n static safariVersion() {\n // All iOS browsers and desktop Safari will return true for isApple().\n if (!shaka.util.Platform.isApple()) {\n return null;\n }\n\n // This works for iOS Safari and desktop Safari, which contain something\n // like \"Version/13.0\" indicating the major Safari or iOS version.\n let match = navigator.userAgent.match(/Version\\/(\\d+)/);\n if (match) {\n return parseInt(match[1], /* base= */ 10);\n }\n\n // This works for all other browsers on iOS, which contain something like\n // \"OS 13_3\" indicating the major & minor iOS version.\n match = navigator.userAgent.match(/OS (\\d+)(?:_\\d+)?/);\n if (match) {\n return parseInt(match[1], /* base= */ 10);\n }\n\n return null;\n }\n\n /**\n * Check if the current platform is Apple Safari\n * or Safari-based iOS browsers.\n *\n * @return {boolean}\n */\n static isSafari() {\n return !!shaka.util.Platform.safariVersion();\n }\n\n /**\n * Check if the current platform is an EOS set-top box.\n *\n * @return {boolean}\n */\n static isEOS() {\n return shaka.util.Platform.userAgentContains_('PC=EOS');\n }\n\n /**\n * Check if the current platform is an APL set-top box.\n *\n * @return {boolean}\n */\n static isAPL() {\n return shaka.util.Platform.userAgentContains_('PC=APL');\n }\n\n /**\n * Guesses if the platform is a mobile one (iOS or Android).\n *\n * @return {boolean}\n */\n static isMobile() {\n if (/(?:iPhone|iPad|iPod|Android)/.test(navigator.userAgent)) {\n // This is Android, iOS, or iPad < 13.\n return true;\n }\n\n // Starting with iOS 13 on iPad, the user agent string no longer has the\n // word \"iPad\" in it. It looks very similar to desktop Safari. This seems\n // to be intentional on Apple's part.\n // See: https://forums.developer.apple.com/thread/119186\n //\n // So if it's an Apple device with multi-touch support, assume it's a mobile\n // device. If some future iOS version starts masking their user agent on\n // both iPhone & iPad, this clause should still work. If a future\n // multi-touch desktop Mac is released, this will need some adjustment.\n //\n // As of January 2020, this is mainly used to adjust the default UI config\n // for mobile devices, so it's low risk if something changes to break this\n // detection.\n return shaka.util.Platform.isApple() && navigator.maxTouchPoints > 1;\n }\n\n /**\n * Return true if the platform is a Mac, regardless of the browser.\n *\n * @return {boolean}\n */\n static isMac() {\n // Try the newer standard first.\n if (navigator.userAgentData && navigator.userAgentData.platform) {\n return navigator.userAgentData.platform.toLowerCase() == 'macos';\n }\n // Fall back to the old API, with less strict matching.\n if (!navigator.platform) {\n return false;\n }\n return navigator.platform.toLowerCase().includes('mac');\n }\n\n /**\n * Return true if the platform is a VisionOS.\n *\n * @return {boolean}\n */\n static isVisionOS() {\n if (!shaka.util.Platform.isMac()) {\n return false;\n }\n if (!('xr' in navigator)) {\n return false;\n }\n return true;\n }\n\n /**\n * Return true if the platform is a Windows, regardless of the browser.\n *\n * @return {boolean}\n */\n static isWindows() {\n // Try the newer standard first.\n if (navigator.userAgentData && navigator.userAgentData.platform) {\n return navigator.userAgentData.platform.toLowerCase() == 'windows';\n }\n // Fall back to the old API, with less strict matching.\n if (!navigator.platform) {\n return false;\n }\n return navigator.platform.toLowerCase().includes('win32');\n }\n\n /**\n * Return true if the platform is a Android, regardless of the browser.\n *\n * @return {boolean}\n */\n static isAndroid() {\n return shaka.util.Platform.userAgentContains_('Android');\n }\n\n /**\n * Return true if the platform is a Fuchsia, regardless of the browser.\n *\n * @return {boolean}\n */\n static isFuchsia() {\n return shaka.util.Platform.userAgentContains_('Fuchsia');\n }\n\n /**\n * Return true if the platform is controlled by a remote control.\n *\n * @return {boolean}\n */\n static isSmartTV() {\n const Platform = shaka.util.Platform;\n if (Platform.isTizen() || Platform.isWebOS() ||\n Platform.isXboxOne() || Platform.isPS4() ||\n Platform.isPS5() || Platform.isAmazonFireTV() ||\n Platform.isEOS() || Platform.isAPL() ||\n Platform.isVirginMedia() || Platform.isOrange() ||\n Platform.isComcastX1() || Platform.isChromecast() ||\n Platform.isHisense() || Platform.isZenterio()) {\n return true;\n }\n return false;\n }\n\n /**\n * Check if the user agent contains a key. This is the best way we know of\n * right now to detect platforms. If there is a better way, please send a\n * PR.\n *\n * @param {string} key\n * @return {boolean}\n * @private\n */\n static userAgentContains_(key) {\n const userAgent = navigator.userAgent || '';\n return userAgent.includes(key);\n }\n\n /**\n * For canPlayType queries, we just need any instance.\n *\n * First, use a cached element from a previous query.\n * Second, search the page for one.\n * Third, create a temporary one.\n *\n * Cached elements expire in one second so that they can be GC'd or removed.\n *\n * @return {!HTMLMediaElement}\n */\n static anyMediaElement() {\n const Platform = shaka.util.Platform;\n if (Platform.cachedMediaElement_) {\n return Platform.cachedMediaElement_;\n }\n\n if (!Platform.cacheExpirationTimer_) {\n Platform.cacheExpirationTimer_ = new shaka.util.Timer(() => {\n Platform.cachedMediaElement_ = null;\n });\n }\n\n Platform.cachedMediaElement_ = /** @type {HTMLMediaElement} */(\n document.getElementsByTagName('video')[0] ||\n document.getElementsByTagName('audio')[0]);\n\n if (!Platform.cachedMediaElement_) {\n Platform.cachedMediaElement_ = /** @type {!HTMLMediaElement} */(\n document.createElement('video'));\n }\n\n Platform.cacheExpirationTimer_.tickAfter(/* seconds= */ 1);\n return Platform.cachedMediaElement_;\n }\n\n /**\n * Returns true if the platform requires encryption information in all init\n * segments. For such platforms, MediaSourceEngine will attempt to work\n * around a lack of such info by inserting fake encryption information into\n * initialization segments.\n *\n * @param {?string} keySystem\n * @return {boolean}\n * @see https://github.com/shaka-project/shaka-player/issues/2759\n */\n static requiresEncryptionInfoInAllInitSegments(keySystem) {\n const Platform = shaka.util.Platform;\n const isPlayReady = shaka.util.DrmUtils.isPlayReadyKeySystem(keySystem);\n return Platform.isTizen() || Platform.isXboxOne() || Platform.isOrange() ||\n (Platform.isEdge() && Platform.isWindows() && isPlayReady);\n }\n\n /**\n * Returns true if the platform supports SourceBuffer \"sequence mode\".\n *\n * @return {boolean}\n */\n static supportsSequenceMode() {\n const Platform = shaka.util.Platform;\n if (Platform.isTizen3() || Platform.isTizen2() ||\n Platform.isWebOS3() || Platform.isPS4()) {\n return false;\n }\n return true;\n }\n\n /**\n * Returns if codec switching SMOOTH is known reliable device support.\n *\n * Some devices are known not to support SourceBuffer.changeType\n * well. These devices should use the reload strategy. If a device\n * reports that it supports but supports it unreliably\n * it should be disallowed in this method.\n *\n * @return {boolean}\n */\n static supportsSmoothCodecSwitching() {\n const Platform = shaka.util.Platform;\n // All Tizen versions (up to Tizen 8) do not support SMOOTH so far.\n // webOS seems to support SMOOTH from webOS 22.\n if (Platform.isTizen() || Platform.isPS4() || Platform.isPS5() ||\n Platform.isWebOS6()) {\n return false;\n }\n // Older chromecasts without GoogleTV seem to not support SMOOTH properly.\n if (Platform.isChromecast() && !Platform.isAndroidCastDevice() &&\n !Platform.isFuchsiaCastDevice()) {\n return false;\n }\n // See: https://chromium-review.googlesource.com/c/chromium/src/+/4577759\n if (Platform.isWindows() && Platform.isEdge()) {\n return false;\n }\n return true;\n }\n\n /**\n * On some platforms, such as v1 Chromecasts, the act of seeking can take a\n * significant amount of time.\n *\n * @return {boolean}\n */\n static isSeekingSlow() {\n const Platform = shaka.util.Platform;\n if (Platform.isChromecast()) {\n if (Platform.isAndroidCastDevice()) {\n // Android-based Chromecasts are new enough to not be a problem.\n return false;\n } else {\n return true;\n }\n }\n return false;\n }\n\n /**\n * Returns true if MediaKeys is polyfilled\n *\n * @param {string=} polyfillType\n * @return {boolean}\n */\n static isMediaKeysPolyfilled(polyfillType) {\n if (polyfillType) {\n return polyfillType === window.shakaMediaKeysPolyfill;\n }\n return !!window.shakaMediaKeysPolyfill;\n }\n\n\n /**\n * Detect the maximum resolution that the platform's hardware can handle.\n *\n * @return {!Promise.}\n */\n static async detectMaxHardwareResolution() {\n const Platform = shaka.util.Platform;\n\n /** @type {shaka.extern.Resolution} */\n const maxResolution = {\n width: Infinity,\n height: Infinity,\n };\n\n if (Platform.isChromecast()) {\n // In our tests, the original Chromecast seems to have trouble decoding\n // above 1080p. It would be a waste to select a higher res anyway, given\n // that the device only outputs 1080p to begin with.\n // Chromecast has an extension to query the device/display's resolution.\n const hasCanDisplayType = window.cast && cast.__platform__ &&\n cast.__platform__.canDisplayType;\n\n // Some hub devices can only do 720p. Default to that.\n maxResolution.width = 1280;\n maxResolution.height = 720;\n\n try {\n if (hasCanDisplayType && await cast.__platform__.canDisplayType(\n 'video/mp4; codecs=\"avc1.640028\"; width=3840; height=2160')) {\n // The device and display can both do 4k. Assume a 4k limit.\n maxResolution.width = 3840;\n maxResolution.height = 2160;\n } else if (hasCanDisplayType && await cast.__platform__.canDisplayType(\n 'video/mp4; codecs=\"avc1.640028\"; width=1920; height=1080')) {\n // Most Chromecasts can do 1080p.\n maxResolution.width = 1920;\n maxResolution.height = 1080;\n }\n } catch (error) {\n // This shouldn't generally happen. Log the error.\n shaka.log.alwaysError('Failed to check canDisplayType:', error);\n // Now ignore the error and let the 720p default stand.\n }\n } else if (Platform.isTizen()) {\n maxResolution.width = 1920;\n maxResolution.height = 1080;\n try {\n if (webapis.systeminfo && webapis.systeminfo.getMaxVideoResolution) {\n const maxVideoResolution =\n webapis.systeminfo.getMaxVideoResolution();\n maxResolution.width = maxVideoResolution.width;\n maxResolution.height = maxVideoResolution.height;\n } else {\n if (webapis.productinfo.is8KPanelSupported &&\n webapis.productinfo.is8KPanelSupported()) {\n maxResolution.width = 7680;\n maxResolution.height = 4320;\n } else if (webapis.productinfo.isUdPanelSupported &&\n webapis.productinfo.isUdPanelSupported()) {\n maxResolution.width = 3840;\n maxResolution.height = 2160;\n }\n }\n } catch (e) {\n shaka.log.alwaysWarn('Tizen: Error detecting screen size, default ' +\n 'screen size 1920x1080.');\n }\n } else if (Platform.isXboxOne()) {\n maxResolution.width = 1920;\n maxResolution.height = 1080;\n try {\n let winRT = undefined;\n\n // Try to access to WinRT for WebView, if it's not defined,\n // try to access to WinRT for WebView2, if it's not defined either,\n // let it throw.\n if (typeof Windows !== 'undefined') {\n winRT = Windows;\n } else {\n winRT = chrome.webview.hostObjects.sync.Windows;\n }\n\n const protectionCapabilities =\n new winRT.Media.Protection.ProtectionCapabilities();\n const protectionResult =\n winRT.Media.Protection.ProtectionCapabilityResult;\n // isTypeSupported may return \"maybe\", which means the operation is not\n // completed. This means we need to retry\n // https://learn.microsoft.com/en-us/uwp/api/windows.media.protection.protectioncapabilityresult?view=winrt-22621\n let result = null;\n const type =\n 'video/mp4;codecs=\"hvc1,mp4a\";features=\"decode-res-x=3840,' +\n 'decode-res-y=2160,decode-bitrate=20000,decode-fps=30,' +\n 'decode-bpc=10,display-res-x=3840,display-res-y=2160,' +\n 'display-bpc=8\"';\n const keySystem = 'com.microsoft.playready.recommendation';\n do {\n result = protectionCapabilities.isTypeSupported(type, keySystem);\n } while (result === protectionResult.maybe);\n if (result === protectionResult.probably) {\n maxResolution.width = 3840;\n maxResolution.height = 2160;\n }\n } catch (e) {\n shaka.log.alwaysWarn('Xbox: Error detecting screen size, default ' +\n 'screen size 1920x1080.');\n }\n } else if (Platform.isWebOS()) {\n try {\n const deviceInfo =\n /** @type {{screenWidth: number, screenHeight: number}} */(\n JSON.parse(window.PalmSystem.deviceInfo));\n // WebOS has always been able to do 1080p. Assume a 1080p limit.\n maxResolution.width = Math.max(1920, deviceInfo['screenWidth']);\n maxResolution.height = Math.max(1080, deviceInfo['screenHeight']);\n } catch (e) {\n shaka.log.alwaysWarn('WebOS: Error detecting screen size, default ' +\n 'screen size 1920x1080.');\n maxResolution.width = 1920;\n maxResolution.height = 1080;\n }\n } else if (Platform.isHisense()) {\n // eslint-disable-next-line new-cap\n if (window.Hisense_Get4KSupportState &&\n // eslint-disable-next-line new-cap\n window.Hisense_Get4KSupportState()) {\n maxResolution.width = 3840;\n maxResolution.height = 2160;\n } else {\n maxResolution.width = 1920;\n maxResolution.height = 1080;\n }\n } else if (Platform.isPS4() || Platform.isPS5()) {\n let supports4K = false;\n try {\n const result = await window.msdk.device.getDisplayInfo();\n supports4K = result.resolution === '4K';\n } catch (e) {\n try {\n const result = await window.msdk.device.getDisplayInfoImmediate();\n supports4K = result.resolution === '4K';\n } catch (e) {\n shaka.log.alwaysWarn(\n 'PlayStation: Failed to get the display info:', e);\n }\n }\n if (supports4K) {\n maxResolution.width = 3840;\n maxResolution.height = 2160;\n } else {\n maxResolution.width = 1920;\n maxResolution.height = 1080;\n }\n }\n return maxResolution;\n }\n};\n\n/** @private {shaka.util.Timer} */\nshaka.util.Platform.cacheExpirationTimer_ = null;\n\n/** @private {HTMLMediaElement} */\nshaka.util.Platform.cachedMediaElement_ = null;\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.util.StringUtils');\n\ngoog.require('goog.asserts');\ngoog.require('shaka.log');\ngoog.require('shaka.util.BufferUtils');\ngoog.require('shaka.util.Error');\ngoog.require('shaka.util.Lazy');\ngoog.require('shaka.util.Platform');\n\n\n/**\n * @namespace shaka.util.StringUtils\n * @summary A set of string utility functions.\n * @export\n */\nshaka.util.StringUtils = class {\n /**\n * Creates a string from the given buffer as UTF-8 encoding.\n *\n * @param {?BufferSource} data\n * @return {string}\n * @export\n */\n static fromUTF8(data) {\n if (!data) {\n return '';\n }\n\n let uint8 = shaka.util.BufferUtils.toUint8(data);\n // If present, strip off the UTF-8 BOM.\n if (uint8[0] == 0xef && uint8[1] == 0xbb && uint8[2] == 0xbf) {\n uint8 = uint8.subarray(3);\n }\n\n if (window.TextDecoder && !shaka.util.Platform.isPS4()) {\n // Use the TextDecoder interface to decode the text. This has the\n // advantage compared to the previously-standard decodeUriComponent that\n // it will continue parsing even if it finds an invalid UTF8 character,\n // rather than stop and throw an error.\n const utf8decoder = new TextDecoder();\n const decoded = utf8decoder.decode(uint8);\n if (decoded.includes('\\uFFFD')) {\n shaka.log.alwaysError('Decoded string contains an \"unknown character' +\n '\" codepoint. That probably means the UTF8 ' +\n 'encoding was incorrect!');\n }\n return decoded;\n } else {\n // Homebrewed UTF-8 decoder based on\n // https://en.wikipedia.org/wiki/UTF-8#Encoding\n // Unlike decodeURIComponent, won't throw on bad encoding.\n // In this way, it is similar to TextDecoder.\n\n let decoded = '';\n for (let i = 0; i < uint8.length; ++i) {\n // By default, the \"replacement character\" codepoint.\n let codePoint = 0xFFFD;\n\n // Top bit is 0, 1-byte encoding.\n if ((uint8[i] & 0x80) == 0) {\n codePoint = uint8[i];\n\n // Top 3 bits of byte 0 are 110, top 2 bits of byte 1 are 10,\n // 2-byte encoding.\n } else if (uint8.length >= i + 2 &&\n (uint8[i] & 0xe0) == 0xc0 &&\n (uint8[i + 1] & 0xc0) == 0x80) {\n codePoint = ((uint8[i] & 0x1f) << 6) |\n ((uint8[i + 1] & 0x3f));\n i += 1; // Consume one extra byte.\n\n // Top 4 bits of byte 0 are 1110, top 2 bits of byte 1 and 2 are 10,\n // 3-byte encoding.\n } else if (uint8.length >= i + 3 &&\n (uint8[i] & 0xf0) == 0xe0 &&\n (uint8[i + 1] & 0xc0) == 0x80 &&\n (uint8[i + 2] & 0xc0) == 0x80) {\n codePoint = ((uint8[i] & 0x0f) << 12) |\n ((uint8[i + 1] & 0x3f) << 6) |\n ((uint8[i + 2] & 0x3f));\n i += 2; // Consume two extra bytes.\n\n // Top 5 bits of byte 0 are 11110, top 2 bits of byte 1, 2 and 3 are 10,\n // 4-byte encoding.\n } else if (uint8.length >= i + 4 &&\n (uint8[i] & 0xf1) == 0xf0 &&\n (uint8[i + 1] & 0xc0) == 0x80 &&\n (uint8[i + 2] & 0xc0) == 0x80 &&\n (uint8[i + 3] & 0xc0) == 0x80) {\n codePoint = ((uint8[i] & 0x07) << 18) |\n ((uint8[i + 1] & 0x3f) << 12) |\n ((uint8[i + 2] & 0x3f) << 6) |\n ((uint8[i + 3] & 0x3f));\n i += 3; // Consume three extra bytes.\n }\n\n // JavaScript strings are a series of UTF-16 characters.\n if (codePoint <= 0xffff) {\n decoded += String.fromCharCode(codePoint);\n } else {\n // UTF-16 surrogate-pair encoding, based on\n // https://en.wikipedia.org/wiki/UTF-16#Description\n const baseCodePoint = codePoint - 0x10000;\n const highPart = baseCodePoint >> 10;\n const lowPart = baseCodePoint & 0x3ff;\n decoded += String.fromCharCode(0xd800 + highPart);\n decoded += String.fromCharCode(0xdc00 + lowPart);\n }\n }\n\n return decoded;\n }\n }\n\n\n /**\n * Creates a string from the given buffer as UTF-16 encoding.\n *\n * @param {?BufferSource} data\n * @param {boolean} littleEndian\n true to read little endian, false to read big.\n * @param {boolean=} noThrow true to avoid throwing in cases where we may\n * expect invalid input. If noThrow is true and the data has an odd\n * length,it will be truncated.\n * @return {string}\n * @export\n */\n static fromUTF16(data, littleEndian, noThrow) {\n if (!data) {\n return '';\n }\n\n if (!noThrow && data.byteLength % 2 != 0) {\n shaka.log.error('Data has an incorrect length, must be even.');\n throw new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL, shaka.util.Error.Category.TEXT,\n shaka.util.Error.Code.BAD_ENCODING);\n }\n\n // Use a DataView to ensure correct endianness.\n const length = Math.floor(data.byteLength / 2);\n const arr = new Uint16Array(length);\n const dataView = shaka.util.BufferUtils.toDataView(data);\n for (let i = 0; i < length; i++) {\n arr[i] = dataView.getUint16(i * 2, littleEndian);\n }\n return shaka.util.StringUtils.fromCharCode(arr);\n }\n\n\n /**\n * Creates a string from the given buffer, auto-detecting the encoding that is\n * being used. If it cannot detect the encoding, it will throw an exception.\n *\n * @param {?BufferSource} data\n * @return {string}\n * @export\n */\n static fromBytesAutoDetect(data) {\n const StringUtils = shaka.util.StringUtils;\n if (!data) {\n return '';\n }\n\n const uint8 = shaka.util.BufferUtils.toUint8(data);\n if (uint8[0] == 0xef && uint8[1] == 0xbb && uint8[2] == 0xbf) {\n return StringUtils.fromUTF8(uint8);\n } else if (uint8[0] == 0xfe && uint8[1] == 0xff) {\n return StringUtils.fromUTF16(\n uint8.subarray(2), /* littleEndian= */ false);\n } else if (uint8[0] == 0xff && uint8[1] == 0xfe) {\n return StringUtils.fromUTF16(uint8.subarray(2), /* littleEndian= */ true);\n }\n\n const isAscii = (i) => {\n // arr[i] >= ' ' && arr[i] <= '~';\n return uint8.byteLength <= i || (uint8[i] >= 0x20 && uint8[i] <= 0x7e);\n };\n\n shaka.log.debug(\n 'Unable to find byte-order-mark, making an educated guess.');\n if (uint8[0] == 0 && uint8[2] == 0) {\n return StringUtils.fromUTF16(data, /* littleEndian= */ false);\n } else if (uint8[1] == 0 && uint8[3] == 0) {\n return StringUtils.fromUTF16(data, /* littleEndian= */ true);\n } else if (isAscii(0) && isAscii(1) && isAscii(2) && isAscii(3)) {\n return StringUtils.fromUTF8(data);\n }\n\n throw new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.TEXT,\n shaka.util.Error.Code.UNABLE_TO_DETECT_ENCODING);\n }\n\n\n /**\n * Creates a ArrayBuffer from the given string, converting to UTF-8 encoding.\n *\n * @param {string} str\n * @return {!ArrayBuffer}\n * @export\n */\n static toUTF8(str) {\n if (window.TextEncoder && !shaka.util.Platform.isPS4()) {\n const utf8Encoder = new TextEncoder();\n return shaka.util.BufferUtils.toArrayBuffer(utf8Encoder.encode(str));\n } else {\n // http://stackoverflow.com/a/13691499\n // Converts the given string to a URI encoded string. If a character\n // falls in the ASCII range, it is not converted; otherwise it will be\n // converted to a series of URI escape sequences according to UTF-8.\n // Example: 'g#€' -> 'g#%E3%82%AC'\n const encoded = encodeURIComponent(str);\n // Convert each escape sequence individually into a character. Each\n // escape sequence is interpreted as a code-point, so if an escape\n // sequence happens to be part of a multi-byte sequence, each byte will\n // be converted to a single character.\n // Example: 'g#%E3%82%AC' -> '\\x67\\x35\\xe3\\x82\\xac'\n const utf8 = unescape(encoded);\n\n const result = new Uint8Array(utf8.length);\n for (let i = 0; i < utf8.length; i++) {\n const item = utf8[i];\n result[i] = item.charCodeAt(0);\n }\n return shaka.util.BufferUtils.toArrayBuffer(result);\n }\n }\n\n\n /**\n * Creates a ArrayBuffer from the given string, converting to UTF-16 encoding.\n *\n * @param {string} str\n * @param {boolean} littleEndian\n * @return {!ArrayBuffer}\n * @export\n */\n static toUTF16(str, littleEndian) {\n const result = new ArrayBuffer(str.length * 2);\n const view = new DataView(result);\n for (let i = 0; i < str.length; ++i) {\n const value = str.charCodeAt(i);\n view.setUint16(/* position= */ i * 2, value, littleEndian);\n }\n return result;\n }\n\n\n /**\n * Creates a new string from the given array of char codes.\n *\n * Using String.fromCharCode.apply is risky because you can trigger stack\n * errors on very large arrays. This breaks up the array into several pieces\n * to avoid this.\n *\n * @param {!TypedArray} array\n * @return {string}\n */\n static fromCharCode(array) {\n return shaka.util.StringUtils.fromCharCodeImpl_.value()(array);\n }\n\n /**\n * Resets the fromCharCode method's implementation.\n * For debug use.\n * @export\n */\n static resetFromCharCode() {\n shaka.util.StringUtils.fromCharCodeImpl_.reset();\n }\n\n /**\n * This method converts the HTML entities &, <, >, ", ',\n *  , ‎ and ‏ in string to their corresponding characters.\n *\n * @param {!string} input\n * @return {string}\n */\n static htmlUnescape(input) {\n // Used to map HTML entities to characters.\n const htmlUnescapes = {\n '&': '&',\n '<': '<',\n '>': '>',\n '"': '\"',\n ''': '\\'',\n ' ': '\\u{a0}',\n '‎': '\\u{200e}',\n '‏': '\\u{200f}',\n };\n\n // Used to match HTML entities and HTML characters.\n const reEscapedHtml =\n /&(?:amp|lt|gt|quot|apos|nbsp|lrm|rlm|#[xX]?[0-9a-fA-F]+);/g;\n const reHasEscapedHtml = RegExp(reEscapedHtml.source);\n // This check is an optimization, since replace always makes a copy\n if (input && reHasEscapedHtml.test(input)) {\n return input.replace(reEscapedHtml, (entity) => {\n if (entity[1] == '#') {\n // Translate this into an HTML character.\n let code = 0;\n if (entity[2] == 'x' || entity[2] == 'X') {\n // It's hex.\n code = parseInt(entity.substring(3), 16);\n } else {\n // It's decimal.\n code = parseInt(entity.substring(2), 10);\n }\n // Ignore it if it's an invalid code point.\n if (code >= 0 && code <= 0x10FFFF) {\n return String.fromCodePoint(code);\n } else {\n return '';\n }\n }\n // The only thing that might not match the dictionary above is the\n // single quote, which can be matched by many strings in the regex, but\n // only has a single entry in the dictionary.\n return htmlUnescapes[entity] || '\\'';\n });\n }\n return input || '';\n }\n};\n\n\n/** @private {!shaka.util.Lazy.} */\nshaka.util.StringUtils.fromCharCodeImpl_ = new shaka.util.Lazy(() => {\n /** @param {number} size @return {boolean} */\n const supportsChunkSize = (size) => {\n try {\n // The compiler will complain about suspicious value if this isn't\n // stored in a variable and used.\n const buffer = new Uint8Array(size);\n\n // This can't use the spread operator, or it blows up on Xbox One.\n // So we use apply() instead, which is normally not allowed.\n // See issue #2186 for more details.\n // eslint-disable-next-line no-restricted-syntax\n const foo = String.fromCharCode.apply(null, buffer);\n goog.asserts.assert(foo, 'Should get value');\n return foo.length > 0; // Actually use \"foo\", so it's not compiled out.\n } catch (error) {\n return false;\n }\n };\n\n // Different browsers support different chunk sizes; find out the largest\n // this browser supports so we can use larger chunks on supported browsers\n // but still support lower-end devices that require small chunks.\n // 64k is supported on all major desktop browsers.\n for (let size = 64 * 1024; size > 0; size /= 2) {\n if (supportsChunkSize(size)) {\n return (buffer) => {\n let ret = '';\n for (let i = 0; i < buffer.length; i += size) {\n const subArray = buffer.subarray(i, i + size);\n\n // This can't use the spread operator, or it blows up on Xbox One.\n // So we use apply() instead, which is normally not allowed.\n // See issue #2186 for more details.\n // eslint-disable-next-line no-restricted-syntax\n ret += String.fromCharCode.apply(null, subArray); // Issue #2186\n }\n return ret;\n };\n }\n }\n goog.asserts.assert(false, 'Unable to create a fromCharCode method');\n return null;\n});\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.util.TextParser');\n\ngoog.require('goog.asserts');\n\n\n/**\n * Reads elements from strings.\n */\nshaka.util.TextParser = class {\n /**\n * @param {string} data\n */\n constructor(data) {\n /**\n * @const\n * @private {string}\n */\n this.data_ = data || '';\n\n /** @private {number} */\n this.position_ = 0;\n }\n\n\n /** @return {boolean} Whether it is at the end of the string. */\n atEnd() {\n return this.position_ == this.data_.length;\n }\n\n\n /**\n * Reads a line from the parser. This will read but not return the newline.\n * Returns null at the end.\n *\n * @return {?string}\n */\n readLine() {\n return this.readRegexReturnCapture_(/(.*?)(\\n|$)/gm, 1);\n }\n\n\n /**\n * Reads a word from the parser. This will not read or return any whitespace\n * before or after the word (including newlines). Returns null at the end.\n *\n * @return {?string}\n */\n readWord() {\n return this.readRegexReturnCapture_(/[^ \\t\\n]*/gm, 0);\n }\n\n\n /**\n * Skips any continuous whitespace from the parser. Returns null at the end.\n */\n skipWhitespace() {\n this.readRegex(/[ \\t]+/gm);\n }\n\n\n /**\n * Reads the given regular expression from the parser. This requires the\n * match to be at the current position; there is no need to include a head\n * anchor.\n * This requires that the regex have the global flag to be set so that it can\n * set lastIndex to start the search at the current position. Returns null at\n * the end or if the regex does not match the current position.\n *\n * @param {!RegExp} regex\n * @return {Array.}\n */\n readRegex(regex) {\n const index = this.indexOf_(regex);\n if (this.atEnd() || index == null || index.position != this.position_) {\n return null;\n }\n\n this.position_ += index.length;\n return index.results;\n }\n\n\n /**\n * Reads a regex from the parser and returns the given capture.\n *\n * @param {!RegExp} regex\n * @param {number} index\n * @return {?string}\n * @private\n */\n readRegexReturnCapture_(regex, index) {\n if (this.atEnd()) {\n return null;\n }\n\n const ret = this.readRegex(regex);\n if (!ret) {\n return null;\n } else {\n return ret[index];\n }\n }\n\n\n /**\n * Returns the index info about a regular expression match.\n *\n * @param {!RegExp} regex\n * @return {?{position: number, length: number, results: !Array.}}\n * @private\n */\n indexOf_(regex) {\n // The global flag is required to use lastIndex.\n goog.asserts.assert(regex.global, 'global flag should be set');\n\n regex.lastIndex = this.position_;\n const results = regex.exec(this.data_);\n if (results == null) {\n return null;\n } else {\n return {\n position: results.index,\n length: results[0].length,\n results: results,\n };\n }\n }\n\n /**\n * Parses a time.\n *\n * @return {?number}\n */\n parseTime() {\n const results = this.readRegex(shaka.util.TextParser.timeFormat_);\n if (results == null) {\n return null;\n }\n // This capture is optional, but will still be in the array as undefined,\n // in which case it is 0.\n const hours = Number(results[1]) || 0;\n const minutes = Number(results[2]);\n const seconds = Number(results[3]);\n const milliseconds = Number(results[6]) || 0;\n if (minutes > 59 || seconds > 59) {\n return null;\n }\n\n return (milliseconds / 1000) + seconds + (minutes * 60) + (hours * 3600);\n }\n\n /**\n * Parses a time from string.\n *\n * @param {?string} time\n * @return {?number}\n */\n static parseTime(time) {\n if (!time) {\n return null;\n }\n const parser = new shaka.util.TextParser(time);\n return parser.parseTime();\n }\n};\n\n/**\n * @const\n * @private {!RegExp}\n * @example 00:00.000 or 00:00:00.000 or 0:00:00.000 or\n * 00:00.00 or 00:00:00.00 or 0:00:00.00 or 00:00:00\n */\nshaka.util.TextParser.timeFormat_ =\n /(?:(\\d{1,}):)?(\\d{2}):(\\d{2})((\\.(\\d{1,3})))?/g;\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.util.ObjectUtils');\n\n\nshaka.util.ObjectUtils = class {\n /**\n * Performs a deep clone of the given simple object. This does not copy\n * prototypes, custom properties (e.g. read-only), or multiple references to\n * the same object. If the caller needs these fields, it will need to set\n * them after this returns.\n *\n * @template T\n * @param {T} arg\n * @return {T}\n */\n static cloneObject(arg) {\n const seenObjects = new WeakSet();\n // This recursively clones the value |val|, using the captured variable\n // |seenObjects| to track the objects we have already cloned.\n /** @suppress {strictMissingProperties} */\n const clone = (val) => {\n switch (typeof val) {\n case 'undefined':\n case 'boolean':\n case 'number':\n case 'string':\n case 'symbol':\n case 'function':\n return val;\n case 'object':\n default: {\n // typeof null === 'object'\n if (!val) {\n return val;\n }\n\n // This covers Uint8Array and friends, even without a TypedArray\n // base-class constructor.\n const isTypedArray = val.buffer instanceof ArrayBuffer;\n if (isTypedArray) {\n return val;\n }\n\n if (seenObjects.has(val)) {\n return null;\n }\n\n const isArray = val.constructor == Array;\n if (val.constructor != Object && !isArray) {\n return null;\n }\n\n seenObjects.add(val);\n const ret = isArray ? [] : {};\n // Note |name| will equal a number for arrays.\n for (const name in val) {\n ret[name] = clone(val[name]);\n }\n\n // Length is a non-enumerable property, but we should copy it over in\n // case it is not the default.\n if (isArray) {\n ret.length = val.length;\n }\n return ret;\n }\n }\n };\n return clone(arg);\n }\n\n /**\n * Performs a shallow clone of the given simple object. This does not copy\n * prototypes or custom properties (e.g. read-only).\n *\n * @template T\n * @param {T} original\n * @return {T}\n */\n static shallowCloneObject(original) {\n const clone = /** @type {?} */({});\n for (const k in original) {\n clone[k] = original[k];\n }\n return clone;\n }\n};\n","/*! @license\n * tXml\n * Copyright 2015 Tobias Nickel\n * SPDX-License-Identifier: MIT\n */\n\ngoog.provide('shaka.util.TXml');\n\ngoog.require('shaka.util.ObjectUtils');\ngoog.require('shaka.util.StringUtils');\ngoog.require('shaka.log');\n\n/**\n * This code is a modified version of the tXml library.\n *\n * @author: Tobias Nickel\n * created: 06.04.2015\n * https://github.com/TobiasNickel/tXml\n */\n\n/**\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\n\nshaka.util.TXml = class {\n /**\n * Parse some data\n * @param {BufferSource} data\n * @param {string=} expectedRootElemName\n * @param {boolean=} includeParent\n * @return {shaka.extern.xml.Node | null}\n */\n static parseXml(data, expectedRootElemName, includeParent = false) {\n const xmlString = shaka.util.StringUtils.fromBytesAutoDetect(data);\n return shaka.util.TXml.parseXmlString(\n xmlString, expectedRootElemName, includeParent);\n }\n\n /**\n * Parse some data\n * @param {string} xmlString\n * @param {string=} expectedRootElemName\n * @return {shaka.extern.xml.Node | null}\n */\n static parseXmlString(xmlString, expectedRootElemName,\n includeParent = false) {\n const result = shaka.util.TXml.parse(xmlString, includeParent);\n if (!expectedRootElemName && result.length) {\n return result[0];\n }\n const rootNode = result.find((n) =>\n expectedRootElemName.split(',').includes(n.tagName));\n if (rootNode) {\n return rootNode;\n }\n\n shaka.log.error('parseXml root element not found!');\n return null;\n }\n\n /**\n * Get namespace based on schema\n * @param {string} schema\n * @return {string}\n */\n static getKnownNameSpace(schema) {\n if (shaka.util.TXml.uriToNameSpace_.has(schema)) {\n return shaka.util.TXml.uriToNameSpace_.get(schema);\n }\n return '';\n }\n\n /**\n * Get schema based on namespace\n * @param {string} NS\n * @return {string}\n */\n static getKnownSchema(NS) {\n if (shaka.util.TXml.nameSpaceToUri_.has(NS)) {\n return shaka.util.TXml.nameSpaceToUri_.get(NS);\n }\n return '';\n }\n\n /**\n * Sets NS <-> schema bidirectional mapping\n * @param {string} schema\n * @param {string} NS\n */\n static setKnownNameSpace(schema, NS) {\n shaka.util.TXml.uriToNameSpace_.set(schema, NS);\n shaka.util.TXml.nameSpaceToUri_.set(NS, schema);\n }\n\n /**\n * parseXML / html into a DOM Object,\n * with no validation and some failure tolerance\n * @param {string} S your XML to parse\n * @param {boolean} includeParent\n * @return {Array.}\n */\n static parse(S, includeParent) {\n let pos = 0;\n\n const openBracket = '<';\n const openBracketCC = '<'.charCodeAt(0);\n const closeBracket = '>';\n const closeBracketCC = '>'.charCodeAt(0);\n const minusCC = '-'.charCodeAt(0);\n const slashCC = '/'.charCodeAt(0);\n const exclamationCC = '!'.charCodeAt(0);\n const singleQuoteCC = '\\''.charCodeAt(0);\n const doubleQuoteCC = '\"'.charCodeAt(0);\n const openCornerBracketCC = '['.charCodeAt(0);\n\n /**\n * parsing a list of entries\n */\n function parseChildren(tagName, preserveSpace = false) {\n /** @type {Array.} */\n const children = [];\n while (S[pos]) {\n if (S.charCodeAt(pos) == openBracketCC) {\n if (S.charCodeAt(pos + 1) === slashCC) {\n const closeStart = pos + 2;\n pos = S.indexOf(closeBracket, pos);\n\n const closeTag = S.substring(closeStart, pos);\n let indexOfCloseTag = closeTag.indexOf(tagName);\n if (indexOfCloseTag == -1) {\n // handle VTT closing tags like \n const indexOfPeriod = tagName.indexOf('.');\n if (indexOfPeriod > 0) {\n const shortTag = tagName.substring(0, indexOfPeriod);\n indexOfCloseTag = closeTag.indexOf(shortTag);\n }\n }\n // eslint-disable-next-line no-restricted-syntax\n if (indexOfCloseTag == -1) {\n const parsedText = S.substring(0, pos).split('\\n');\n throw new Error(\n 'Unexpected close tag\\nLine: ' + (parsedText.length - 1) +\n '\\nColumn: ' +\n (parsedText[parsedText.length - 1].length + 1) +\n '\\nChar: ' + S[pos],\n );\n }\n\n if (pos + 1) {\n pos += 1;\n }\n\n return children;\n } else if (S.charCodeAt(pos + 1) === exclamationCC) {\n if (S.charCodeAt(pos + 2) == minusCC) {\n while (pos !== -1 && !(S.charCodeAt(pos) === closeBracketCC &&\n S.charCodeAt(pos - 1) == minusCC &&\n S.charCodeAt(pos - 2) == minusCC &&\n pos != -1)) {\n pos = S.indexOf(closeBracket, pos + 1);\n }\n if (pos === -1) {\n pos = S.length;\n }\n } else if (\n S.charCodeAt(pos + 2) === openCornerBracketCC &&\n S.charCodeAt(pos + 8) === openCornerBracketCC &&\n S.substr(pos + 3, 5).toLowerCase() === 'cdata'\n ) {\n // cdata\n const cdataEndIndex = S.indexOf(']]>', pos);\n if (cdataEndIndex == -1) {\n children.push(S.substr(pos + 9));\n pos = S.length;\n } else {\n children.push(S.substring(pos + 9, cdataEndIndex));\n pos = cdataEndIndex + 3;\n }\n continue;\n }\n pos++;\n continue;\n }\n const node = parseNode(preserveSpace);\n children.push(node);\n if (typeof node === 'string') {\n return children;\n }\n if (node.tagName[0] === '?' && node.children) {\n children.push(...node.children);\n node.children = [];\n }\n } else {\n const text = parseText();\n if (preserveSpace) {\n if (text.length > 0) {\n children.push(text);\n }\n } else if (children.length &&\n text.length == 1 && text[0] == '\\n') {\n children.push(text);\n } else {\n const trimmed = text.trim();\n if (trimmed.length > 0) {\n children.push(text);\n }\n }\n pos++;\n }\n }\n return children;\n }\n\n /**\n * returns the text outside of texts until the first '<'\n */\n function parseText() {\n const start = pos;\n pos = S.indexOf(openBracket, pos) - 1;\n if (pos === -2) {\n pos = S.length;\n }\n return S.slice(start, pos + 1);\n }\n /**\n * returns text until the first nonAlphabetic letter\n */\n const nameSpacer = '\\r\\n\\t>/= ';\n\n /**\n * Parse text in current context\n * @return {string}\n */\n function parseName() {\n const start = pos;\n while (nameSpacer.indexOf(S[pos]) === -1 && S[pos]) {\n pos++;\n }\n return S.slice(start, pos);\n }\n\n /**\n * Parse text in current context\n * @param {boolean} preserveSpace Preserve the space between nodes\n * @return {shaka.extern.xml.Node | string}\n */\n function parseNode(preserveSpace) {\n pos++;\n const tagName = parseName();\n const attributes = {};\n let children = [];\n\n // parsing attributes\n while (S.charCodeAt(pos) !== closeBracketCC && S[pos]) {\n const c = S.charCodeAt(pos);\n // abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'\n if ((c > 64 && c < 91) || (c > 96 && c < 123)) {\n const name = parseName();\n // search beginning of the string\n let code = S.charCodeAt(pos);\n while (code && code !== singleQuoteCC && code !== doubleQuoteCC &&\n !((code > 64 && code < 91) || (code > 96 && code < 123)) &&\n code !== closeBracketCC) {\n pos++;\n code = S.charCodeAt(pos);\n }\n let value = parseString();\n if (code === singleQuoteCC || code === doubleQuoteCC) {\n if (pos === -1) {\n /** @type {shaka.extern.xml.Node} */\n const node = {\n tagName,\n attributes,\n children,\n parent: null,\n };\n if (includeParent) {\n for (let i = 0; i < children.length; i++) {\n if (typeof children[i] !== 'string') {\n children[i].parent = node;\n }\n }\n }\n return node;\n }\n } else {\n value = null;\n pos--;\n }\n if (name.startsWith('xmlns:')) {\n const segs = name.split(':');\n shaka.util.TXml.setKnownNameSpace(\n /** @type {string} */ (value), segs[1]);\n }\n if (tagName === 'tt' &&\n name === 'xml:space' &&\n value === 'preserve') {\n preserveSpace = true;\n }\n attributes[name] = value;\n }\n pos++;\n }\n\n if (S.charCodeAt(pos - 1) !== slashCC) {\n pos++;\n const contents = parseChildren(tagName, preserveSpace);\n children = contents;\n } else {\n pos++;\n }\n /** @type {shaka.extern.xml.Node} */\n const node = {\n tagName,\n attributes,\n children,\n parent: null,\n };\n const childrenLength = children.length;\n for (let i = 0; i < childrenLength; i++) {\n const childrenValue = children[i];\n if (typeof childrenValue !== 'string') {\n if (includeParent) {\n childrenValue.parent = node;\n }\n } else if (i == childrenLength - 1 && childrenValue == '\\n') {\n children.pop();\n }\n }\n return node;\n }\n\n /**\n * Parse string in current context\n * @return {string}\n */\n function parseString() {\n const startChar = S[pos];\n const startpos = pos + 1;\n pos = S.indexOf(startChar, startpos);\n return S.slice(startpos, pos);\n }\n\n return parseChildren('');\n }\n\n /**\n * Verifies if the element is a TXml node.\n * @param {!shaka.extern.xml.Node} elem The XML element.\n * @return {!boolean} Is the element a TXml node\n */\n static isNode(elem) {\n return !!(elem.tagName);\n }\n\n /**\n * Checks if a node is of type text.\n * @param {!shaka.extern.xml.Node | string} elem The XML element.\n * @return {boolean} True if it is a text node.\n */\n static isText(elem) {\n return typeof elem === 'string';\n }\n\n /**\n * gets child XML elements.\n * @param {!shaka.extern.xml.Node} elem The parent XML element.\n * @return {!Array.} The child XML elements.\n */\n static getChildNodes(elem) {\n const found = [];\n if (!elem.children) {\n return [];\n }\n for (const child of elem.children) {\n if (typeof child !== 'string') {\n found.push(child);\n }\n }\n return found;\n }\n\n /**\n * Finds child XML elements.\n * @param {!shaka.extern.xml.Node} elem The parent XML element.\n * @param {string} name The child XML element's tag name.\n * @return {!Array.} The child XML elements.\n */\n static findChildren(elem, name) {\n const found = [];\n if (!elem.children) {\n return [];\n }\n for (const child of elem.children) {\n if (child.tagName === name) {\n found.push(child);\n }\n }\n return found;\n }\n\n /**\n * Gets inner text.\n * @param {!shaka.extern.xml.Node | string} node The XML element.\n * @return {?string} The text contents, or null if there are none.\n */\n static getTextContents(node) {\n const StringUtils = shaka.util.StringUtils;\n if (typeof node === 'string') {\n return StringUtils.htmlUnescape(node);\n }\n const textContent = node.children.reduce(\n (acc, curr) => (typeof curr === 'string' ? acc + curr : acc),\n '',\n );\n if (textContent === '') {\n return null;\n }\n return StringUtils.htmlUnescape(textContent);\n }\n\n /**\n * Gets the text contents of a node.\n * @param {!shaka.extern.xml.Node} node The XML element.\n * @return {?string} The text contents, or null if there are none.\n */\n static getContents(node) {\n if (!Array.from(node.children).every(\n (n) => typeof n === 'string' )) {\n return null;\n }\n\n // Read merged text content from all text nodes.\n let text = shaka.util.TXml.getTextContents(node);\n if (text) {\n text = text.trim();\n }\n return text;\n }\n\n /**\n * Finds child XML elements recursively.\n * @param {!shaka.extern.xml.Node} elem The parent XML element.\n * @param {string} name The child XML element's tag name.\n * @param {!Array.} found accumulator for found nodes\n * @return {!Array.} The child XML elements.\n */\n static getElementsByTagName(elem, name, found = []) {\n if (elem.tagName === name) {\n found.push(elem);\n }\n if (elem.children) {\n for (const child of elem.children) {\n shaka.util.TXml.getElementsByTagName(child, name, found);\n }\n }\n return found;\n }\n\n /**\n * Finds a child XML element.\n * @param {!shaka.extern.xml.Node} elem The parent XML element.\n * @param {string} name The child XML element's tag name.\n * @return {shaka.extern.xml.Node | null} The child XML element,\n * or null if a child XML element\n * does not exist with the given tag name OR if there exists more than one\n * child XML element with the given tag name.\n */\n static findChild(elem, name) {\n const children = shaka.util.TXml.findChildren(elem, name);\n if (children.length != 1) {\n return null;\n }\n return children[0];\n }\n\n /**\n * Finds a namespace-qualified child XML element.\n * @param {!shaka.extern.xml.Node} elem The parent XML element.\n * @param {string} ns The child XML element's namespace URI.\n * @param {string} name The child XML element's local name.\n * @return {shaka.extern.xml.Node | null} The child XML element, or null\n * if a child XML element\n * does not exist with the given tag name OR if there exists more than one\n * child XML element with the given tag name.\n */\n static findChildNS(elem, ns, name) {\n const children = shaka.util.TXml.findChildrenNS(elem, ns, name);\n if (children.length != 1) {\n return null;\n }\n return children[0];\n }\n\n /**\n * Parses an attribute by its name.\n * @param {!shaka.extern.xml.Node} elem The XML element.\n * @param {string} name The attribute name.\n * @param {function(string): (T|null)} parseFunction A function that parses\n * the attribute.\n * @param {(T|null)=} defaultValue The attribute's default value, if not\n * specified, the attibute's default value is null.\n * @return {(T|null)} The parsed attribute on success, or the attribute's\n * default value if the attribute does not exist or could not be parsed.\n * @template T\n */\n static parseAttr(elem, name, parseFunction, defaultValue = null) {\n let parsedValue = null;\n\n const value = elem.attributes[name];\n if (value != null) {\n parsedValue = parseFunction(value);\n }\n return parsedValue == null ? defaultValue : parsedValue;\n }\n\n /**\n * Gets a namespace-qualified attribute.\n * @param {!shaka.extern.xml.Node} elem The element to get from.\n * @param {string} ns The namespace URI.\n * @param {string} name The local name of the attribute.\n * @return {?string} The attribute's value, or null if not present.\n */\n static getAttributeNS(elem, ns, name) {\n const schemaNS = shaka.util.TXml.getKnownNameSpace(ns);\n // Think this is equivalent\n const attribute = elem.attributes[`${schemaNS}:${name}`];\n return attribute || null;\n }\n\n /**\n * Finds namespace-qualified child XML elements.\n * @param {!shaka.extern.xml.Node} elem The parent XML element.\n * @param {string} ns The child XML element's namespace URI.\n * @param {string} name The child XML element's local name.\n * @return {!Array.} The child XML elements.\n */\n static findChildrenNS(elem, ns, name) {\n const schemaNS = shaka.util.TXml.getKnownNameSpace(ns);\n const found = [];\n if (elem.children) {\n for (const child of elem.children) {\n if (child && child.tagName === `${schemaNS}:${name}`) {\n found.push(child);\n }\n }\n }\n return found;\n }\n\n /**\n * Gets a namespace-qualified attribute.\n * @param {!shaka.extern.xml.Node} elem The element to get from.\n * @param {!Array.} nsList The lis of namespace URIs.\n * @param {string} name The local name of the attribute.\n * @return {?string} The attribute's value, or null if not present.\n */\n static getAttributeNSList(elem, nsList, name) {\n for (const ns of nsList) {\n const attr = shaka.util.TXml.getAttributeNS(\n elem, ns, name,\n );\n if (attr) {\n return attr;\n }\n }\n return null;\n }\n\n\n /**\n * Parses an XML date string.\n * @param {string} dateString\n * @return {?number} The parsed date in seconds on success; otherwise, return\n * null.\n */\n static parseDate(dateString) {\n if (!dateString) {\n return null;\n }\n\n // Times in the manifest should be in UTC. If they don't specify a timezone,\n // Date.parse() will use the local timezone instead of UTC. So manually add\n // the timezone if missing ('Z' indicates the UTC timezone).\n // Format: YYYY-MM-DDThh:mm:ss.ssssss\n if (/^\\d+-\\d+-\\d+T\\d+:\\d+:\\d+(\\.\\d+)?$/.test(dateString)) {\n dateString += 'Z';\n }\n\n const result = Date.parse(dateString);\n return isNaN(result) ? null : (result / 1000.0);\n }\n\n\n /**\n * Parses an XML duration string.\n * Negative values are not supported. Years and months are treated as exactly\n * 365 and 30 days respectively.\n * @param {string} durationString The duration string, e.g., \"PT1H3M43.2S\",\n * which means 1 hour, 3 minutes, and 43.2 seconds.\n * @return {?number} The parsed duration in seconds on success; otherwise,\n * return null.\n * @see {@link http://www.datypic.com/sc/xsd/t-xsd_duration.html}\n */\n static parseDuration(durationString) {\n if (!durationString) {\n return null;\n }\n\n const re = '^P(?:([0-9]*)Y)?(?:([0-9]*)M)?(?:([0-9]*)D)?' +\n '(?:T(?:([0-9]*)H)?(?:([0-9]*)M)?(?:([0-9.]*)S)?)?$';\n const matches = new RegExp(re).exec(durationString);\n\n if (!matches) {\n shaka.log.warning('Invalid duration string:', durationString);\n return null;\n }\n\n // Note: Number(null) == 0 but Number(undefined) == NaN.\n const years = Number(matches[1] || null);\n const months = Number(matches[2] || null);\n const days = Number(matches[3] || null);\n const hours = Number(matches[4] || null);\n const minutes = Number(matches[5] || null);\n const seconds = Number(matches[6] || null);\n\n // Assume a year always has 365 days and a month always has 30 days.\n const d = (60 * 60 * 24 * 365) * years +\n (60 * 60 * 24 * 30) * months +\n (60 * 60 * 24) * days +\n (60 * 60) * hours +\n 60 * minutes +\n seconds;\n return isFinite(d) ? d : null;\n }\n\n\n /**\n * Parses a range string.\n * @param {string} rangeString The range string, e.g., \"101-9213\".\n * @return {?{start: number, end: number}} The parsed range on success;\n * otherwise, return null.\n */\n static parseRange(rangeString) {\n const matches = /([0-9]+)-([0-9]+)/.exec(rangeString);\n\n if (!matches) {\n return null;\n }\n\n const start = Number(matches[1]);\n if (!isFinite(start)) {\n return null;\n }\n\n const end = Number(matches[2]);\n if (!isFinite(end)) {\n return null;\n }\n\n return {start: start, end: end};\n }\n\n\n /**\n * Parses an integer.\n * @param {string} intString The integer string.\n * @return {?number} The parsed integer on success; otherwise, return null.\n */\n static parseInt(intString) {\n const n = Number(intString);\n return (n % 1 === 0) ? n : null;\n }\n\n\n /**\n * Parses a positive integer.\n * @param {string} intString The integer string.\n * @return {?number} The parsed positive integer on success; otherwise,\n * return null.\n */\n static parsePositiveInt(intString) {\n const n = Number(intString);\n return (n % 1 === 0) && (n > 0) ? n : null;\n }\n\n\n /**\n * Parses a non-negative integer.\n * @param {string} intString The integer string.\n * @return {?number} The parsed non-negative integer on success; otherwise,\n * return null.\n */\n static parseNonNegativeInt(intString) {\n const n = Number(intString);\n return (n % 1 === 0) && (n >= 0) ? n : null;\n }\n\n\n /**\n * Parses a floating point number.\n * @param {string} floatString The floating point number string.\n * @return {?number} The parsed floating point number on success; otherwise,\n * return null. May return -Infinity or Infinity.\n */\n static parseFloat(floatString) {\n const n = Number(floatString);\n return !isNaN(n) ? n : null;\n }\n\n\n /**\n * Parses a boolean.\n * @param {string} booleanString The boolean string.\n * @return {boolean} The boolean\n */\n static parseBoolean(booleanString) {\n if (!booleanString) {\n return false;\n }\n return booleanString.toLowerCase() === 'true';\n }\n\n\n /**\n * Evaluate a division expressed as a string.\n * @param {string} exprString\n * The expression to evaluate, e.g. \"200/2\". Can also be a single number.\n * @return {?number} The evaluated expression as floating point number on\n * success; otherwise return null.\n */\n static evalDivision(exprString) {\n let res;\n let n;\n if ((res = exprString.match(/^(\\d+)\\/(\\d+)$/))) {\n n = Number(res[1]) / Number(res[2]);\n } else {\n n = Number(exprString);\n }\n return !isNaN(n) ? n : null;\n }\n\n\n /**\n * Parse xPath strings for segments and id targets.\n * @param {string} exprString\n * @return {!Array}\n */\n static parseXpath(exprString) {\n const StringUtils = shaka.util.StringUtils;\n const returnPaths = [];\n // Split string by paths but ignore '/' in quotes\n const paths = StringUtils.htmlUnescape(exprString)\n .split(/\\/+(?=(?:[^'\"]*['\"][^'\"]*['\"])*[^'\"]*$)/);\n for (const path of paths) {\n const nodeName = path.match(/^([\\w]+)/);\n\n if (nodeName) {\n // We only want the id attribute in which case\n // /'(.*?)'/ will suffice to get it.\n const idAttr = path.match(/(@id='(.*?)')/);\n const tAttr = path.match(/(@t='(\\d+)')/);\n const numberIndex = path.match(/(@n='(\\d+)')/);\n const position = path.match(/\\[(\\d+)\\]/);\n returnPaths.push({\n name: nodeName[0],\n id: idAttr ?\n idAttr[0].match(/'(.*?)'/)[0].replace(/'/gm, '') : null,\n t: tAttr ?\n Number(tAttr[0].match(/'(.*?)'/)[0].replace(/'/gm, '')) : null,\n n: numberIndex ?\n Number(numberIndex[0].match(/'(.*?)'/)[0].replace(/'/gm, '')):\n null,\n // position is counted from 1, so make it readable for devs\n position: position ? Number(position[1]) - 1 : null,\n attribute: path.split('/@')[1] || null,\n });\n } else if (path.startsWith('@') && returnPaths.length) {\n returnPaths[returnPaths.length - 1].attribute = path.slice(1);\n }\n }\n return returnPaths;\n }\n\n\n /**\n * Modifies nodes in specified array by adding or removing nodes\n * and updating attributes.\n * @param {!Array} nodes\n * @param {!shaka.extern.xml.Node} patchNode\n */\n static modifyNodes(nodes, patchNode) {\n const TXml = shaka.util.TXml;\n\n const paths = TXml.parseXpath(patchNode.attributes['sel'] || '');\n if (!paths.length) {\n return;\n }\n const lastNode = paths[paths.length - 1];\n const position = patchNode.attributes['pos'] || null;\n\n let index = lastNode.position;\n if (index == null) {\n if (lastNode.t !== null) {\n index = TXml.nodePositionByAttribute_(nodes, 't', lastNode.t);\n }\n if (lastNode.n !== null) {\n index = TXml.nodePositionByAttribute_(nodes, 'n', lastNode.n);\n }\n }\n if (index === null) {\n index = position === 'prepend' ? 0 : nodes.length;\n } else if (position === 'prepend') {\n --index;\n } else if (position === 'after') {\n ++index;\n }\n const action = patchNode.tagName;\n const attribute = lastNode.attribute;\n\n // Modify attribute\n if (attribute && nodes[index]) {\n TXml.modifyNodeAttribute(nodes[index], action, attribute,\n TXml.getContents(patchNode) || '');\n // Rearrange nodes\n } else {\n if (action === 'remove' || action === 'replace') {\n nodes.splice(index, 1);\n }\n if (action === 'add' || action === 'replace') {\n const newNodes = patchNode.children;\n nodes.splice(index, 0, ...newNodes);\n }\n }\n }\n\n\n /**\n * Search the node index by the t attribute\n * and return the index. if not found return null\n * @param {!Array} nodes\n * @param {!string} attribute\n * @param {!number} value\n * @private\n */\n static nodePositionByAttribute_(nodes, attribute, value) {\n let index = 0;\n for (const node of nodes) {\n const attrs = node.attributes;\n const val = Number(attrs[attribute]);\n if (val === value) {\n return index;\n }\n index++;\n }\n return null;\n }\n\n\n /**\n * @param {!shaka.extern.xml.Node} node\n * @param {string} action\n * @param {string} attribute\n * @param {string} value\n */\n static modifyNodeAttribute(node, action, attribute, value) {\n if (action === 'remove') {\n delete node.attributes[attribute];\n } else if (action === 'add' || action === 'replace') {\n node.attributes[attribute] = value;\n }\n }\n\n\n /**\n * Converts a tXml node to DOM element.\n * @param {shaka.extern.xml.Node} node\n * @return {!Element}\n */\n static txmlNodeToDomElement(node) {\n const TXml = shaka.util.TXml;\n let namespace = '';\n const parts = node.tagName.split(':');\n if (parts.length > 0) {\n namespace = TXml.getKnownSchema(parts[0]);\n }\n const element = document.createElementNS(namespace, node.tagName);\n\n for (const k in node.attributes) {\n const v = node.attributes[k];\n element.setAttribute(k, v);\n }\n\n for (const child of node.children) {\n let childElement;\n if (typeof child == 'string') {\n childElement = new Text(child);\n } else {\n childElement = TXml.txmlNodeToDomElement(child);\n }\n element.appendChild(childElement);\n }\n\n return element;\n }\n\n /**\n * Clones node and its children recursively. Skips parent.\n * @param {?shaka.extern.xml.Node} node\n * @return {?shaka.extern.xml.Node}\n */\n static cloneNode(node) {\n if (!node) {\n return null;\n }\n /** @type {!shaka.extern.xml.Node} */\n const clone = {\n tagName: node.tagName,\n attributes: shaka.util.ObjectUtils.shallowCloneObject(node.attributes),\n children: [],\n parent: null,\n };\n for (const child of node.children) {\n if (typeof child === 'string') {\n clone.children.push(child);\n } else {\n const clonedChild = shaka.util.TXml.cloneNode(child);\n clonedChild.parent = clone;\n clone.children.push(clonedChild);\n }\n }\n return clone;\n }\n};\n\n/** @private {!Map} */\nshaka.util.TXml.uriToNameSpace_ = new Map();\n\n/** @private {!Map} */\nshaka.util.TXml.nameSpaceToUri_ = new Map();\n\n\n/**\n * @typedef {{\n * name: string,\n * id: ?string,\n * t: ?number,\n * n: ?number,\n * position: ?number,\n * attribute: ?string\n * }}\n */\nshaka.util.TXml.PathNode;\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.text.Cue');\n\ngoog.require('shaka.log');\ngoog.require('shaka.text.CueRegion');\ngoog.require('shaka.util.ArrayUtils');\ngoog.require('shaka.util.StringUtils');\ngoog.require('shaka.util.TextParser');\ngoog.require('shaka.util.TXml');\n\n\n/**\n * @export\n */\nshaka.text.Cue = class {\n /**\n * @param {number} startTime\n * @param {number} endTime\n * @param {string} payload\n */\n constructor(startTime, endTime, payload) {\n const Cue = shaka.text.Cue;\n\n /**\n * The start time of the cue in seconds, relative to the start of the\n * presentation.\n * @type {number}\n * @export\n */\n this.startTime = startTime;\n\n /**\n * The end time of the cue in seconds, relative to the start of the\n * presentation.\n * @type {number}\n * @export\n */\n this.endTime = endTime;\n\n /**\n * The text payload of the cue. If nestedCues is non-empty, this should be\n * empty. Top-level block containers should have no payload of their own.\n * @type {string}\n * @export\n */\n this.payload = payload;\n\n /**\n * The region to render the cue into. Only supported on top-level cues,\n * because nested cues are inline elements.\n * @type {shaka.text.CueRegion}\n * @export\n */\n this.region = new shaka.text.CueRegion();\n\n /**\n * The indent (in percent) of the cue box in the direction defined by the\n * writing direction.\n * @type {?number}\n * @export\n */\n this.position = null;\n\n /**\n * Position alignment of the cue.\n * @type {shaka.text.Cue.positionAlign}\n * @export\n */\n this.positionAlign = Cue.positionAlign.AUTO;\n\n /**\n * Size of the cue box (in percents), where 0 means \"auto\".\n * @type {number}\n * @export\n */\n this.size = 0;\n\n /**\n * Alignment of the text inside the cue box.\n * @type {shaka.text.Cue.textAlign}\n * @export\n */\n this.textAlign = Cue.textAlign.CENTER;\n\n /**\n * Text direction of the cue.\n * @type {shaka.text.Cue.direction}\n * @export\n */\n this.direction = Cue.direction.HORIZONTAL_LEFT_TO_RIGHT;\n\n /**\n * Text writing mode of the cue.\n * @type {shaka.text.Cue.writingMode}\n * @export\n */\n this.writingMode = Cue.writingMode.HORIZONTAL_TOP_TO_BOTTOM;\n\n /**\n * The way to interpret line field. (Either as an integer line number or\n * percentage from the display box).\n * @type {shaka.text.Cue.lineInterpretation}\n * @export\n */\n this.lineInterpretation = Cue.lineInterpretation.LINE_NUMBER;\n\n /**\n * The offset from the display box in either number of lines or\n * percentage depending on the value of lineInterpretation.\n * @type {?number}\n * @export\n */\n this.line = null;\n\n /**\n * Separation between line areas inside the cue box in px or em\n * (e.g. '100px'/'100em'). If not specified, this should be no less than\n * the largest font size applied to the text in the cue.\n * @type {string}.\n * @export\n */\n this.lineHeight = '';\n\n /**\n * Line alignment of the cue box.\n * Start alignment means the cue box’s top side (for horizontal cues), left\n * side (for vertical growing right), or right side (for vertical growing\n * left) is aligned at the line.\n * Center alignment means the cue box is centered at the line.\n * End alignment The cue box’s bottom side (for horizontal cues), right side\n * (for vertical growing right), or left side (for vertical growing left) is\n * aligned at the line.\n * @type {shaka.text.Cue.lineAlign}\n * @export\n */\n this.lineAlign = Cue.lineAlign.START;\n\n /**\n * Vertical alignments of the cues within their extents.\n * 'BEFORE' means displaying the captions at the top of the text display\n * container box, 'CENTER' means in the middle, 'AFTER' means at the bottom.\n * @type {shaka.text.Cue.displayAlign}\n * @export\n */\n this.displayAlign = Cue.displayAlign.AFTER;\n\n /**\n * Text color as a CSS color, e.g. \"#FFFFFF\" or \"white\".\n * @type {string}\n * @export\n */\n this.color = '';\n\n /**\n * Text background color as a CSS color, e.g. \"#FFFFFF\" or \"white\".\n * @type {string}\n * @export\n */\n this.backgroundColor = '';\n\n /**\n * The URL of the background image, e.g. \"data:[mime type];base64,[data]\".\n * @type {string}\n * @export\n */\n this.backgroundImage = '';\n\n /**\n * The border around this cue as a CSS border.\n * @type {string}\n * @export\n */\n this.border = '';\n\n /**\n * Text font size in px or em (e.g. '100px'/'100em').\n * @type {string}\n * @export\n */\n this.fontSize = '';\n\n /**\n * Text font weight. Either normal or bold.\n * @type {shaka.text.Cue.fontWeight}\n * @export\n */\n this.fontWeight = Cue.fontWeight.NORMAL;\n\n /**\n * Text font style. Normal, italic or oblique.\n * @type {shaka.text.Cue.fontStyle}\n * @export\n */\n this.fontStyle = Cue.fontStyle.NORMAL;\n\n /**\n * Text font family.\n * @type {string}\n * @export\n */\n this.fontFamily = '';\n\n /**\n * Text letter spacing as a CSS letter-spacing value.\n * @type {string}\n * @export\n */\n this.letterSpacing = '';\n\n /**\n * Text line padding as a CSS line-padding value.\n * @type {string}\n * @export\n */\n this.linePadding = '';\n\n /**\n * Opacity of the cue element, from 0-1.\n * @type {number}\n * @export\n */\n this.opacity = 1;\n\n /**\n * Text combine upright as a CSS text-combine-upright value.\n * @type {string}\n * @export\n */\n this.textCombineUpright = '';\n\n /**\n * Text decoration. A combination of underline, overline\n * and line through. Empty array means no decoration.\n * @type {!Array.}\n * @export\n */\n this.textDecoration = [];\n\n /**\n * Text shadow color as a CSS text-shadow value.\n * @type {string}\n * @export\n */\n this.textShadow = '';\n\n /**\n * Text stroke color as a CSS color, e.g. \"#FFFFFF\" or \"white\".\n * @type {string}\n * @export\n */\n this.textStrokeColor = '';\n\n /**\n * Text stroke width as a CSS stroke-width value.\n * @type {string}\n * @export\n */\n this.textStrokeWidth = '';\n\n /**\n * Whether or not line wrapping should be applied to the cue.\n * @type {boolean}\n * @export\n */\n this.wrapLine = true;\n\n /**\n * Id of the cue.\n * @type {string}\n * @export\n */\n this.id = '';\n\n /**\n * Nested cues, which should be laid out horizontally in one block.\n * Top-level cues are blocks, and nested cues are inline elements.\n * Cues can be nested arbitrarily deeply.\n * @type {!Array.}\n * @export\n */\n this.nestedCues = [];\n\n /**\n * If true, this represents a container element that is \"above\" the main\n * cues. For example, the and
tags that contain the

tags\n * in a TTML file. This controls the flow of the final cues; any nested cues\n * within an \"isContainer\" cue will be laid out as separate lines.\n * @type {boolean}\n * @export\n */\n this.isContainer = false;\n\n /**\n * Whether or not the cue only acts as a line break between two nested cues.\n * Should only appear in nested cues.\n * @type {boolean}\n * @export\n */\n this.lineBreak = false;\n\n /**\n * Used to indicate the type of ruby tag that should be used when rendering\n * the cue. Valid values: ruby, rp, rt.\n * @type {?string}\n * @export\n */\n this.rubyTag = null;\n\n /**\n * The number of horizontal and vertical cells into which the Root Container\n * Region area is divided.\n *\n * @type {{ columns: number, rows: number }}\n * @export\n */\n this.cellResolution = {\n columns: 32,\n rows: 15,\n };\n }\n\n /**\n * @param {number} start\n * @param {number} end\n * @return {!shaka.text.Cue}\n */\n static lineBreak(start, end) {\n const cue = new shaka.text.Cue(start, end, '');\n cue.lineBreak = true;\n return cue;\n }\n\n /**\n * Create a copy of the cue with the same properties.\n * @return {!shaka.text.Cue}\n * @suppress {checkTypes} since we must use [] and \"in\" with a struct type.\n * @export\n */\n clone() {\n const clone = new shaka.text.Cue(0, 0, '');\n\n for (const k in this) {\n clone[k] = this[k];\n\n // Make copies of array fields, but only one level deep. That way, if we\n // change, for instance, textDecoration on the clone, we don't affect the\n // original.\n if (clone[k] && clone[k].constructor == Array) {\n clone[k] = /** @type {!Array} */(clone[k]).slice();\n }\n }\n\n return clone;\n }\n\n /**\n * Check if two Cues have all the same values in all properties.\n * @param {!shaka.text.Cue} cue1\n * @param {!shaka.text.Cue} cue2\n * @return {boolean}\n * @suppress {checkTypes} since we must use [] and \"in\" with a struct type.\n * @export\n */\n static equal(cue1, cue2) {\n // Compare the start time, end time and payload of the cues first for\n // performance optimization. We can avoid the more expensive recursive\n // checks if the top-level properties don't match.\n // See: https://github.com/shaka-project/shaka-player/issues/3018\n if (cue1.startTime != cue2.startTime || cue1.endTime != cue2.endTime ||\n cue1.payload != cue2.payload) {\n return false;\n }\n for (const k in cue1) {\n if (k == 'startTime' || k == 'endTime' || k == 'payload') {\n // Already compared.\n } else if (k == 'nestedCues') {\n // This uses shaka.text.Cue.equal rather than just this.equal, since\n // otherwise recursing here will unbox the method and cause \"this\" to be\n // undefined in deeper recursion.\n if (!shaka.util.ArrayUtils.equal(\n cue1.nestedCues, cue2.nestedCues, shaka.text.Cue.equal)) {\n return false;\n }\n } else if (k == 'region' || k == 'cellResolution') {\n for (const k2 in cue1[k]) {\n if (cue1[k][k2] != cue2[k][k2]) {\n return false;\n }\n }\n } else if (Array.isArray(cue1[k])) {\n if (!shaka.util.ArrayUtils.equal(cue1[k], cue2[k])) {\n return false;\n }\n } else {\n if (cue1[k] != cue2[k]) {\n return false;\n }\n }\n }\n\n return true;\n }\n\n /**\n * Parses cue payload, searches for styling entities and, if needed,\n * modifies original payload and creates nested cues to better represent\n * styling found in payload. All changes are done in-place.\n * @param {!shaka.text.Cue} cue\n * @param {!Map=} styles\n * @export\n */\n static parseCuePayload(cue, styles = new Map()) {\n const StringUtils = shaka.util.StringUtils;\n const TXml = shaka.util.TXml;\n let payload = cue.payload;\n if (!payload.includes('<')) {\n cue.payload = StringUtils.htmlUnescape(payload);\n return;\n }\n if (styles.size === 0) {\n shaka.text.Cue.addDefaultTextColor(styles);\n }\n payload = shaka.text.Cue.replaceKaraokeStylePayload_(payload);\n payload = shaka.text.Cue.replaceVoiceStylePayload_(payload);\n payload = shaka.text.Cue.escapeInvalidChevrons_(payload);\n\n cue.payload = '';\n\n const xmlPayload = '' + payload + '';\n let element;\n try {\n element = TXml.parseXmlString(xmlPayload, 'span');\n } catch (e) {\n shaka.log.warning('cue parse fail: ', e);\n }\n if (element) {\n const childNodes = element.children;\n if (childNodes.length == 1) {\n const childNode = childNodes[0];\n if (!TXml.isNode(childNode)) {\n cue.payload = StringUtils.htmlUnescape(payload);\n return;\n }\n }\n for (const childNode of childNodes) {\n shaka.text.Cue.generateCueFromElement_(childNode, cue, styles);\n }\n } else {\n shaka.log.warning('The cue\\'s markup could not be parsed: ', payload);\n cue.payload = StringUtils.htmlUnescape(payload);\n }\n }\n\n /**\n * Add default color\n *\n * @param {!Map} styles\n */\n static addDefaultTextColor(styles) {\n const textColor = shaka.text.Cue.defaultTextColor;\n for (const [key, value] of Object.entries(textColor)) {\n const cue = new shaka.text.Cue(0, 0, '');\n cue.color = value;\n styles.set('.' + key, cue);\n }\n\n const bgColor = shaka.text.Cue.defaultTextBackgroundColor;\n for (const [key, value] of Object.entries(bgColor)) {\n const cue = new shaka.text.Cue(0, 0, '');\n cue.backgroundColor = value;\n styles.set('.' + key, cue);\n }\n }\n\n /**\n * Converts karaoke style tag to be valid for xml parsing\n * For example,\n * input: Text <00:00:00.450> time <00:00:01.450> 1\n * output: Text

time\n *
1
\n *\n * @param {string} payload\n * @return {string} processed payload\n * @private\n */\n static replaceKaraokeStylePayload_(payload) {\n const names = [];\n let nameStart = -1;\n for (let i = 0; i < payload.length; i++) {\n if (payload[i] === '<') {\n nameStart = i + 1;\n } else if (payload[i] === '>') {\n if (nameStart > 0) {\n const name = payload.substr(nameStart, i - nameStart);\n if (name.match(shaka.text.Cue.timeFormat_)) {\n names.push(name);\n }\n nameStart = -1;\n }\n }\n }\n let newPayload = payload;\n for (const name of names) {\n const replaceTag = '<' + name + '>';\n const startTag = '
';\n const endTag = '
';\n newPayload = newPayload.replace(replaceTag, startTag);\n newPayload += endTag;\n }\n return newPayload;\n }\n\n /**\n * Converts voice style tag to be valid for xml parsing\n * For example,\n * input: Test\n * output: Test\n *\n * @param {string} payload\n * @return {string} processed payload\n * @private\n */\n static replaceVoiceStylePayload_(payload) {\n const voiceTag = 'v';\n const names = [];\n let nameStart = -1;\n let newPayload = '';\n let hasVoiceEndTag = false;\n for (let i = 0; i < payload.length; i++) {\n // This condition is used to manage tags that have end tags.\n if (payload[i] === '/') {\n const end = payload.indexOf('>', i);\n if (end === -1) {\n return payload;\n }\n const tagEnd = payload.substring(i + 1, end);\n if (!tagEnd || tagEnd != voiceTag) {\n newPayload += payload[i];\n continue;\n }\n hasVoiceEndTag = true;\n let tagStart = null;\n if (names.length) {\n tagStart = names[names.length -1];\n }\n if (!tagStart) {\n newPayload += payload[i];\n } else if (tagStart === tagEnd) {\n newPayload += '/' + tagEnd + '>';\n i += tagEnd.length + 1;\n } else {\n if (!tagStart.startsWith(voiceTag)) {\n newPayload += payload[i];\n continue;\n }\n newPayload += '/' + tagStart + '>';\n i += tagEnd.length + 1;\n }\n } else {\n // Here we only want the tag name, not any other payload.\n if (payload[i] === '<') {\n nameStart = i + 1;\n if (payload[nameStart] != voiceTag) {\n nameStart = -1;\n }\n } else if (payload[i] === '>') {\n if (nameStart > 0) {\n names.push(payload.substr(nameStart, i - nameStart));\n nameStart = -1;\n }\n }\n newPayload += payload[i];\n }\n }\n for (const name of names) {\n const newName = name.replace(' ', '.voice-');\n newPayload = newPayload.replace(`<${name}>`, `<${newName}>`);\n newPayload = newPayload.replace(``, ``);\n if (!hasVoiceEndTag) {\n newPayload += ``;\n }\n }\n return newPayload;\n }\n\n /**\n * This method converts invalid > chevrons to HTML entities.\n * It also removes < chevrons as per spec.\n *\n * @param {!string} input\n * @return {string}\n * @private\n */\n static escapeInvalidChevrons_(input) {\n // Used to map HTML entities to characters.\n const htmlEscapes = {\n '< ': '',\n ' >': ' >',\n };\n\n const reEscapedHtml = /(< +>|<\\s|\\s>)/g;\n const reHasEscapedHtml = RegExp(reEscapedHtml.source);\n // This check is an optimization, since replace always makes a copy\n if (input && reHasEscapedHtml.test(input)) {\n return input.replace(reEscapedHtml, (entity) => {\n return htmlEscapes[entity] || '';\n });\n }\n return input || '';\n }\n\n /**\n * @param {!shaka.extern.xml.Node} element\n * @param {!shaka.text.Cue} rootCue\n * @param {!Map} styles\n * @private\n */\n static generateCueFromElement_(element, rootCue, styles) {\n const TXml = shaka.util.TXml;\n const nestedCue = rootCue.clone();\n // We don't want propagate some properties.\n nestedCue.nestedCues = [];\n nestedCue.payload = '';\n nestedCue.rubyTag = '';\n // We don't want propagate some position settings\n nestedCue.line = null;\n nestedCue.region = new shaka.text.CueRegion();\n nestedCue.position = null;\n nestedCue.size = 0;\n nestedCue.textAlign = shaka.text.Cue.textAlign.CENTER;\n\n if (TXml.isNode(element)) {\n const bold = shaka.text.Cue.fontWeight.BOLD;\n const italic = shaka.text.Cue.fontStyle.ITALIC;\n const underline = shaka.text.Cue.textDecoration.UNDERLINE;\n const tags = element.tagName.split(/(?=[ .])+/g);\n for (const tag of tags) {\n let styleTag = tag;\n // White blanks at start indicate that the style is a voice\n if (styleTag.startsWith('.voice-')) {\n const voice = styleTag.split('-').pop();\n styleTag = `v[voice=\"${voice}\"]`;\n // The specification allows to have quotes and not, so we check to\n // see which one is being used.\n if (!styles.has(styleTag)) {\n styleTag = `v[voice=${voice}]`;\n }\n }\n if (styles.has(styleTag)) {\n shaka.text.Cue.mergeStyle_(nestedCue, styles.get(styleTag));\n }\n switch (tag) {\n case 'br': {\n const lineBreakCue = shaka.text.Cue.lineBreak(\n nestedCue.startTime, nestedCue.endTime);\n rootCue.nestedCues.push(lineBreakCue);\n return;\n }\n case 'b':\n nestedCue.fontWeight = bold;\n break;\n case 'i':\n nestedCue.fontStyle = italic;\n break;\n case 'u':\n nestedCue.textDecoration.push(underline);\n break;\n case 'font': {\n const color = element.attributes['color'];\n if (color) {\n nestedCue.color = color;\n }\n break;\n }\n case 'div': {\n const time = element.attributes['time'];\n if (!time) {\n break;\n }\n const cueTime = shaka.util.TextParser.parseTime(time);\n if (cueTime) {\n nestedCue.startTime = cueTime;\n }\n break;\n }\n case 'ruby':\n case 'rp':\n case 'rt':\n nestedCue.rubyTag = tag;\n break;\n default:\n break;\n }\n }\n }\n\n const isTextNode = (item) => TXml.isText(item);\n const childNodes = element.children;\n if (isTextNode(element) ||\n (childNodes.length == 1 && isTextNode(childNodes[0]))) {\n // Trailing line breaks may lost when convert cue to HTML tag\n // Need to insert line break cue to preserve line breaks\n const textArr = TXml.getTextContents(element).split('\\n');\n let isFirst = true;\n for (const text of textArr) {\n if (!isFirst) {\n const lineBreakCue = shaka.text.Cue.lineBreak(\n nestedCue.startTime, nestedCue.endTime);\n rootCue.nestedCues.push(lineBreakCue);\n }\n if (text.length > 0) {\n const textCue = nestedCue.clone();\n textCue.payload = shaka.util.StringUtils.htmlUnescape(text);\n rootCue.nestedCues.push(textCue);\n }\n isFirst = false;\n }\n } else {\n rootCue.nestedCues.push(nestedCue);\n for (const childNode of childNodes) {\n shaka.text.Cue.generateCueFromElement_(childNode, nestedCue, styles);\n }\n }\n }\n\n /**\n * Merges values created in parseStyle_\n * @param {!shaka.text.Cue} cue\n * @param {shaka.text.Cue} refCue\n * @private\n */\n static mergeStyle_(cue, refCue) {\n if (!refCue) {\n return;\n }\n\n // Overwrites if new value string length > 0\n cue.backgroundColor = shaka.text.Cue.getOrDefault_(\n refCue.backgroundColor, cue.backgroundColor);\n cue.color = shaka.text.Cue.getOrDefault_(\n refCue.color, cue.color);\n cue.fontFamily = shaka.text.Cue.getOrDefault_(\n refCue.fontFamily, cue.fontFamily);\n cue.fontSize = shaka.text.Cue.getOrDefault_(\n refCue.fontSize, cue.fontSize);\n cue.textShadow = shaka.text.Cue.getOrDefault_(\n refCue.textShadow, cue.textShadow);\n\n // Overwrite with new values as unable to determine\n // if new value is set or not\n cue.fontWeight = refCue.fontWeight;\n cue.fontStyle = refCue.fontStyle;\n cue.opacity = refCue.opacity;\n cue.rubyTag = refCue.rubyTag;\n cue.textCombineUpright = refCue.textCombineUpright;\n cue.wrapLine = refCue.wrapLine;\n }\n\n /**\n * @param {string} value\n * @param {string} defaultValue\n * @private\n */\n static getOrDefault_(value, defaultValue) {\n if (value && value.length > 0) {\n return value;\n }\n return defaultValue;\n }\n};\n\n\n/**\n * @enum {string}\n * @export\n */\nshaka.text.Cue.positionAlign = {\n 'LEFT': 'line-left',\n 'RIGHT': 'line-right',\n 'CENTER': 'center',\n 'AUTO': 'auto',\n};\n\n\n/**\n * @enum {string}\n * @export\n */\nshaka.text.Cue.textAlign = {\n 'LEFT': 'left',\n 'RIGHT': 'right',\n 'CENTER': 'center',\n 'START': 'start',\n 'END': 'end',\n};\n\n\n/**\n * Vertical alignments of the cues within their extents.\n * 'BEFORE' means displaying at the top of the captions container box, 'CENTER'\n * means in the middle, 'AFTER' means at the bottom.\n * @enum {string}\n * @export\n */\nshaka.text.Cue.displayAlign = {\n 'BEFORE': 'before',\n 'CENTER': 'center',\n 'AFTER': 'after',\n};\n\n\n/**\n * @enum {string}\n * @export\n */\nshaka.text.Cue.direction = {\n 'HORIZONTAL_LEFT_TO_RIGHT': 'ltr',\n 'HORIZONTAL_RIGHT_TO_LEFT': 'rtl',\n};\n\n\n/**\n * @enum {string}\n * @export\n */\nshaka.text.Cue.writingMode = {\n 'HORIZONTAL_TOP_TO_BOTTOM': 'horizontal-tb',\n 'VERTICAL_LEFT_TO_RIGHT': 'vertical-lr',\n 'VERTICAL_RIGHT_TO_LEFT': 'vertical-rl',\n};\n\n\n/**\n * @enum {number}\n * @export\n */\nshaka.text.Cue.lineInterpretation = {\n 'LINE_NUMBER': 0,\n 'PERCENTAGE': 1,\n};\n\n\n/**\n * @enum {string}\n * @export\n */\nshaka.text.Cue.lineAlign = {\n 'CENTER': 'center',\n 'START': 'start',\n 'END': 'end',\n};\n\n\n/**\n * Default text color according to\n * https://w3c.github.io/webvtt/#default-text-color\n * @enum {string}\n * @export\n */\nshaka.text.Cue.defaultTextColor = {\n 'white': 'white',\n 'lime': 'lime',\n 'cyan': 'cyan',\n 'red': 'red',\n 'yellow': 'yellow',\n 'magenta': 'magenta',\n 'blue': 'blue',\n 'black': 'black',\n};\n\n\n/**\n * Default text background color according to\n * https://w3c.github.io/webvtt/#default-text-background\n * @enum {string}\n * @export\n */\nshaka.text.Cue.defaultTextBackgroundColor = {\n 'bg_white': 'white',\n 'bg_lime': 'lime',\n 'bg_cyan': 'cyan',\n 'bg_red': 'red',\n 'bg_yellow': 'yellow',\n 'bg_magenta': 'magenta',\n 'bg_blue': 'blue',\n 'bg_black': 'black',\n};\n\n\n/**\n * In CSS font weight can be a number, where 400 is normal and 700 is bold.\n * Use these values for the enum for consistency.\n * @enum {number}\n * @export\n */\nshaka.text.Cue.fontWeight = {\n 'NORMAL': 400,\n 'BOLD': 700,\n};\n\n\n/**\n * @enum {string}\n * @export\n */\nshaka.text.Cue.fontStyle = {\n 'NORMAL': 'normal',\n 'ITALIC': 'italic',\n 'OBLIQUE': 'oblique',\n};\n\n\n/**\n * @enum {string}\n * @export\n */\nshaka.text.Cue.textDecoration = {\n 'UNDERLINE': 'underline',\n 'LINE_THROUGH': 'lineThrough',\n 'OVERLINE': 'overline',\n};\n\n/** @private */\nshaka.text.Cue.timeFormat_ = /(?:(\\d{1,}):)?(\\d{2}):(\\d{2})\\.(\\d{2,3})/g;\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.transmuxer.TransmuxerEngine');\n\ngoog.require('shaka.util.IDestroyable');\n\n\n// TODO: revisit this when Closure Compiler supports partially-exported classes.\n/**\n * @summary Manages transmuxer plugins.\n * @implements {shaka.util.IDestroyable}\n * @export\n */\nshaka.transmuxer.TransmuxerEngine = class {\n // TODO: revisit this when the compiler supports partially-exported classes.\n /**\n * @override\n * @export\n */\n destroy() {}\n\n /**\n * @param {string} mimeType\n * @param {!shaka.extern.TransmuxerPlugin} plugin\n * @param {number} priority\n * @export\n */\n static registerTransmuxer(mimeType, plugin, priority) {\n const TransmuxerEngine = shaka.transmuxer.TransmuxerEngine;\n const normalizedMimetype = TransmuxerEngine.normalizeMimeType_(mimeType);\n const key = normalizedMimetype + '-' + priority;\n TransmuxerEngine.transmuxerMap_[key] = {\n priority: priority,\n plugin: plugin,\n };\n }\n\n /**\n * @param {string} mimeType\n * @param {number} priority\n * @export\n */\n static unregisterTransmuxer(mimeType, priority) {\n const TransmuxerEngine = shaka.transmuxer.TransmuxerEngine;\n const normalizedMimetype = TransmuxerEngine.normalizeMimeType_(mimeType);\n const key = normalizedMimetype + '-' + priority;\n delete TransmuxerEngine.transmuxerMap_[key];\n }\n\n /**\n * @param {string} mimeType\n * @param {string=} contentType\n * @return {?shaka.extern.TransmuxerPlugin}\n * @export\n */\n static findTransmuxer(mimeType, contentType) {\n const TransmuxerEngine = shaka.transmuxer.TransmuxerEngine;\n const normalizedMimetype = TransmuxerEngine.normalizeMimeType_(mimeType);\n const priorities = [\n TransmuxerEngine.PluginPriority.APPLICATION,\n TransmuxerEngine.PluginPriority.PREFERRED,\n TransmuxerEngine.PluginPriority.PREFERRED_SECONDARY,\n TransmuxerEngine.PluginPriority.FALLBACK,\n ];\n for (const priority of priorities) {\n const key = normalizedMimetype + '-' + priority;\n const object = TransmuxerEngine.transmuxerMap_[key];\n if (object) {\n const transmuxer = object.plugin();\n const isSupported = transmuxer.isSupported(mimeType, contentType);\n transmuxer.destroy();\n if (isSupported) {\n return object.plugin;\n }\n }\n }\n return null;\n }\n\n /**\n * @param {string} mimeType\n * @return {string}\n * @private\n */\n static normalizeMimeType_(mimeType) {\n return mimeType.toLowerCase().split(';')[0];\n }\n\n /**\n * Check if the mime type and the content type is supported.\n * @param {string} mimeType\n * @param {string=} contentType\n * @return {boolean}\n */\n static isSupported(mimeType, contentType) {\n const TransmuxerEngine = shaka.transmuxer.TransmuxerEngine;\n const transmuxerPlugin = TransmuxerEngine.findTransmuxer(mimeType);\n if (!transmuxerPlugin) {\n return false;\n }\n return true;\n }\n\n /**\n * For any stream, convert its codecs to MP4 codecs.\n * @param {string} contentType\n * @param {string} mimeType\n * @return {string}\n */\n static convertCodecs(contentType, mimeType) {\n const TransmuxerEngine = shaka.transmuxer.TransmuxerEngine;\n const transmuxerPlugin = TransmuxerEngine.findTransmuxer(mimeType);\n if (!transmuxerPlugin) {\n return mimeType;\n }\n const transmuxer = transmuxerPlugin();\n const codecs = transmuxer.convertCodecs(contentType, mimeType);\n transmuxer.destroy();\n return codecs;\n }\n};\n\n\n/**\n * @typedef {{\n * plugin: shaka.extern.TransmuxerPlugin,\n * priority: number\n * }}\n * @property {shaka.extern.TransmuxerPlugin} plugin\n * The associated plugin.\n * @property {number} priority\n * The plugin's priority.\n */\nshaka.transmuxer.TransmuxerEngine.PluginObject;\n\n\n/**\n * @private {!Object.}\n */\nshaka.transmuxer.TransmuxerEngine.transmuxerMap_ = {};\n\n\n/**\n * Priority level for transmuxer plugins.\n * If multiple plugins are provided for the same mime type, only the\n * highest-priority one is used.\n *\n * @enum {number}\n * @export\n */\nshaka.transmuxer.TransmuxerEngine.PluginPriority = {\n 'FALLBACK': 1,\n 'PREFERRED_SECONDARY': 2,\n 'PREFERRED': 3,\n 'APPLICATION': 4,\n};\n\n","/*! @license\n * Copyright 2008 The Closure Library Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/**\n * @fileoverview Simple utilities for splitting URI strings.\n *\n * Uses features of RFC 3986 for parsing/formatting URIs:\n * http://www.ietf.org/rfc/rfc3986.txt\n *\n * @author gboyer@google.com (Garrett Boyer) - The \"lightened\" design.\n * @author msamuel@google.com (Mike Samuel) - Domain knowledge and regexes.\n */\n\ngoog.provide('goog.uri.utils');\ngoog.provide('goog.uri.utils.ComponentIndex');\n\n\n/**\n * A regular expression for breaking a URI into its component parts.\n *\n * {@link http://www.ietf.org/rfc/rfc3986.txt} says in Appendix B\n * As the \"first-match-wins\" algorithm is identical to the \"greedy\"\n * disambiguation method used by POSIX regular expressions, it is natural and\n * commonplace to use a regular expression for parsing the potential five\n * components of a URI reference.\n *\n * The following line is the regular expression for breaking-down a\n * well-formed URI reference into its components.\n *\n *
\n * ^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?\n *  12            3  4          5       6  7        8 9\n * 
\n *\n * The numbers in the second line above are only to assist readability; they\n * indicate the reference points for each subexpression (i.e., each paired\n * parenthesis). We refer to the value matched for subexpression as $.\n * For example, matching the above expression to\n *
\n *     http://www.ics.uci.edu/pub/ietf/uri/#Related\n * 
\n * results in the following subexpression matches:\n *
\n *    $1 = http:\n *    $2 = http\n *    $3 = //www.ics.uci.edu\n *    $4 = www.ics.uci.edu\n *    $5 = /pub/ietf/uri/\n *    $6 = \n *    $7 = \n *    $8 = #Related\n *    $9 = Related\n * 
\n * where indicates that the component is not present, as is the\n * case for the query component in the above example. Therefore, we can\n * determine the value of the five components as\n *
\n *    scheme    = $2\n *    authority = $4\n *    path      = $5\n *    query     = $7\n *    fragment  = $9\n * 
\n *\n * The regular expression has been modified slightly to expose the\n * userInfo, domain, and port separately from the authority.\n * The modified version yields\n *
\n *    $1 = http              scheme\n *    $2 =        userInfo -\\\n *    $3 = www.ics.uci.edu   domain     | authority\n *    $4 =        port     -/\n *    $5 = /pub/ietf/uri/    path\n *    $6 =        query without ?\n *    $7 = Related           fragment without #\n * 
\n * @type {!RegExp}\n * @private\n */\ngoog.uri.utils.splitRe_ = new RegExp(\n '^' +\n '(?:' +\n '([^:/?#.]+)' + // scheme - ignore special characters\n // used by other URL parts such as :,\n // ?, /, #, and .\n ':)?' +\n '(?://' +\n '(?:([^/?#]*)@)?' + // userInfo\n '([^/#?]*?)' + // domain\n '(?::([0-9]+))?' + // port\n '(?=[/#?]|$)' + // authority-terminating character\n ')?' +\n '([^?#]+)?' + // path\n '(?:\\\\?([^#]*))?' + // query\n '(?:#(.*))?' + // fragment\n '$');\n\n\n/**\n * The index of each URI component in the return value of goog.uri.utils.split.\n * @enum {number}\n */\ngoog.uri.utils.ComponentIndex = {\n SCHEME: 1,\n USER_INFO: 2,\n DOMAIN: 3,\n PORT: 4,\n PATH: 5,\n QUERY_DATA: 6,\n FRAGMENT: 7\n};\n\n\n/**\n * Splits a URI into its component parts.\n *\n * Each component can be accessed via the component indices; for example:\n *
\n * goog.uri.utils.split(someStr)[goog.uri.utils.CompontentIndex.QUERY_DATA];\n * 
\n *\n * @param {string} uri The URI string to examine.\n * @return {!Array.} Each component still URI-encoded.\n * Each component that is present will contain the encoded value, whereas\n * components that are not present will be undefined or empty, depending\n * on the browser's regular expression implementation. Never null, since\n * arbitrary strings may still look like path names.\n */\ngoog.uri.utils.split = function(uri) {\n // See @return comment -- never null.\n return /** @type {!Array.} */ (\n uri.match(goog.uri.utils.splitRe_));\n};\n","/*! @license\n * Copyright 2006 The Closure Library Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/**\n * @fileoverview Class for parsing and formatting URIs.\n *\n * Use new goog.Uri(string) to parse a URI string.\n *\n * e.g.: var myUri = new goog.Uri(window.location);\n *\n * Implements RFC 3986 for parsing/formatting URIs.\n * http://www.ietf.org/rfc/rfc3986.txt\n *\n * Some changes have been made to the interface (more like .NETs), though the\n * internal representation is now of un-encoded parts, this will change the\n * behavior slightly.\n *\n */\n\ngoog.provide('goog.Uri');\ngoog.provide('goog.Uri.QueryData');\n\ngoog.require('goog.asserts');\ngoog.require('goog.uri.utils');\ngoog.require('goog.uri.utils.ComponentIndex');\n\n\n\n/**\n * This class contains setters and getters for the parts of the URI.\n * The getXyz/setXyz methods return the decoded part\n * -- sonew goog.Uri('/foo%20bar').getPath() will return the\n * decoded path, /foo bar.\n *\n * Reserved characters (see RFC 3986 section 2.2) can be present in\n * their percent-encoded form in scheme, domain, and path URI components and\n * will not be auto-decoded. For example:\n * new goog.Uri('rel%61tive/path%2fto/resource').getPath() will\n * return relative/path%2fto/resource.\n *\n * The constructor accepts an optional unparsed, raw URI string. The parser\n * is relaxed, so special characters that aren't escaped but don't cause\n * ambiguities will not cause parse failures.\n *\n * All setters return this and so may be chained, a la\n * new goog.Uri('/foo').setFragment('part').toString().\n *\n * @param {*=} uri Optional string URI to parse, or if a goog.Uri is\n * passed, a clone is created.\n *\n * @constructor\n */\ngoog.Uri = function(uri) {\n // Parse in the uri string\n var m;\n if (uri instanceof goog.Uri) {\n this.setScheme(uri.getScheme());\n this.setUserInfo(uri.getUserInfo());\n this.setDomain(uri.getDomain());\n this.setPort(uri.getPort());\n this.setPath(uri.getPath());\n this.setQueryData(uri.getQueryData().clone());\n this.setFragment(uri.getFragment());\n } else if (uri && (m = goog.uri.utils.split(String(uri)))) {\n // Set the parts -- decoding as we do so.\n // COMPATABILITY NOTE - In IE, unmatched fields may be empty strings,\n // whereas in other browsers they will be undefined.\n this.setScheme(m[goog.uri.utils.ComponentIndex.SCHEME] || '', true);\n this.setUserInfo(m[goog.uri.utils.ComponentIndex.USER_INFO] || '', true);\n this.setDomain(m[goog.uri.utils.ComponentIndex.DOMAIN] || '', true);\n this.setPort(m[goog.uri.utils.ComponentIndex.PORT]);\n this.setPath(m[goog.uri.utils.ComponentIndex.PATH] || '', true);\n this.setQueryData(m[goog.uri.utils.ComponentIndex.QUERY_DATA] || '', true);\n this.setFragment(m[goog.uri.utils.ComponentIndex.FRAGMENT] || '', true);\n } else {\n this.queryData_ = new goog.Uri.QueryData(null, null);\n }\n};\n\n\n/**\n * Scheme such as \"http\".\n * @type {string}\n * @private\n */\ngoog.Uri.prototype.scheme_ = '';\n\n\n/**\n * User credentials in the form \"username:password\".\n * @type {string}\n * @private\n */\ngoog.Uri.prototype.userInfo_ = '';\n\n\n/**\n * Domain part, e.g. \"www.google.com\".\n * @type {string}\n * @private\n */\ngoog.Uri.prototype.domain_ = '';\n\n\n/**\n * Port, e.g. 8080.\n * @type {?number}\n * @private\n */\ngoog.Uri.prototype.port_ = null;\n\n\n/**\n * Path, e.g. \"/tests/img.png\".\n * @type {string}\n * @private\n */\ngoog.Uri.prototype.path_ = '';\n\n\n/**\n * Object representing query data.\n * @type {!goog.Uri.QueryData}\n * @private\n */\ngoog.Uri.prototype.queryData_;\n\n\n/**\n * The fragment without the #.\n * @type {string}\n * @private\n */\ngoog.Uri.prototype.fragment_ = '';\n\n\n/**\n * @return {string} The string form of the url.\n * @override\n */\ngoog.Uri.prototype.toString = function() {\n var out = [];\n\n var scheme = this.getScheme();\n if (scheme) {\n out.push(goog.Uri.encodeSpecialChars_(\n scheme, goog.Uri.reDisallowedInSchemeOrUserInfo_, true), ':');\n }\n\n var domain = this.getDomain();\n if (domain) {\n out.push('//');\n\n var userInfo = this.getUserInfo();\n if (userInfo) {\n out.push(goog.Uri.encodeSpecialChars_(\n userInfo, goog.Uri.reDisallowedInSchemeOrUserInfo_, true), '@');\n }\n\n out.push(goog.Uri.removeDoubleEncoding_(encodeURIComponent(domain)));\n\n var port = this.getPort();\n if (port != null) {\n out.push(':', String(port));\n }\n }\n\n var path = this.getPath();\n if (path) {\n if (this.hasDomain() && path.charAt(0) != '/') {\n out.push('/');\n }\n out.push(goog.Uri.encodeSpecialChars_(\n path,\n path.charAt(0) == '/' ?\n goog.Uri.reDisallowedInAbsolutePath_ :\n goog.Uri.reDisallowedInRelativePath_,\n true));\n }\n\n var query = this.getEncodedQuery();\n if (query) {\n out.push('?', query);\n }\n\n var fragment = this.getFragment();\n if (fragment) {\n out.push('#', goog.Uri.encodeSpecialChars_(\n fragment, goog.Uri.reDisallowedInFragment_));\n }\n return out.join('');\n};\n\n\n/**\n * Resolves the given relative URI (a goog.Uri object), using the URI\n * represented by this instance as the base URI.\n *\n * There are several kinds of relative URIs:
\n * 1. foo - replaces the last part of the path, the whole query and fragment
\n * 2. /foo - replaces the the path, the query and fragment
\n * 3. //foo - replaces everything from the domain on. foo is a domain name
\n * 4. ?foo - replace the query and fragment
\n * 5. #foo - replace the fragment only\n *\n * Additionally, if relative URI has a non-empty path, all \"..\" and \".\"\n * segments will be resolved, as described in RFC 3986.\n *\n * @param {goog.Uri} relativeUri The relative URI to resolve.\n * @return {!goog.Uri} The resolved URI.\n */\ngoog.Uri.prototype.resolve = function(relativeUri) {\n\n var absoluteUri = this.clone();\n if (absoluteUri.scheme_ === 'data') {\n // Cannot have a relative URI to a data URI.\n absoluteUri = new goog.Uri();\n }\n\n // we satisfy these conditions by looking for the first part of relativeUri\n // that is not blank and applying defaults to the rest\n\n var overridden = relativeUri.hasScheme();\n\n if (overridden) {\n absoluteUri.setScheme(relativeUri.getScheme());\n } else {\n overridden = relativeUri.hasUserInfo();\n }\n\n if (overridden) {\n absoluteUri.setUserInfo(relativeUri.getUserInfo());\n } else {\n overridden = relativeUri.hasDomain();\n }\n\n if (overridden) {\n absoluteUri.setDomain(relativeUri.getDomain());\n } else {\n overridden = relativeUri.hasPort();\n }\n\n var path = relativeUri.getPath();\n if (overridden) {\n absoluteUri.setPort(relativeUri.getPort());\n } else {\n overridden = relativeUri.hasPath();\n if (overridden) {\n // resolve path properly\n if (path.charAt(0) != '/') {\n // path is relative\n if (this.hasDomain() && !this.hasPath()) {\n // RFC 3986, section 5.2.3, case 1\n path = '/' + path;\n } else {\n // RFC 3986, section 5.2.3, case 2\n var lastSlashIndex = absoluteUri.getPath().lastIndexOf('/');\n if (lastSlashIndex != -1) {\n path = absoluteUri.getPath().substr(0, lastSlashIndex + 1) + path;\n }\n }\n }\n path = goog.Uri.removeDotSegments(path);\n }\n }\n\n if (overridden) {\n absoluteUri.setPath(path);\n } else {\n overridden = relativeUri.hasQuery();\n }\n\n if (overridden) {\n absoluteUri.setQueryData(relativeUri.getQueryData().clone());\n } else {\n overridden = relativeUri.hasFragment();\n }\n\n if (overridden) {\n absoluteUri.setFragment(relativeUri.getFragment());\n }\n\n return absoluteUri;\n};\n\n\n/**\n * Clones the URI instance.\n * @return {!goog.Uri} New instance of the URI object.\n */\ngoog.Uri.prototype.clone = function() {\n return new goog.Uri(this);\n};\n\n\n/**\n * @return {string} The encoded scheme/protocol for the URI.\n */\ngoog.Uri.prototype.getScheme = function() {\n return this.scheme_;\n};\n\n\n/**\n * Sets the scheme/protocol.\n * @param {string} newScheme New scheme value.\n * @param {boolean=} decode Optional param for whether to decode new value.\n * @return {!goog.Uri} Reference to this URI object.\n */\ngoog.Uri.prototype.setScheme = function(newScheme, decode) {\n this.scheme_ = decode ? goog.Uri.decodeOrEmpty_(newScheme, true) :\n newScheme;\n\n // remove an : at the end of the scheme so somebody can pass in\n // window.location.protocol\n if (this.scheme_) {\n this.scheme_ = this.scheme_.replace(/:$/, '');\n }\n return this;\n};\n\n\n/**\n * @return {boolean} Whether the scheme has been set.\n */\ngoog.Uri.prototype.hasScheme = function() {\n return !!this.scheme_;\n};\n\n\n/**\n * @return {string} The decoded user info.\n */\ngoog.Uri.prototype.getUserInfo = function() {\n return this.userInfo_;\n};\n\n\n/**\n * Sets the userInfo.\n * @param {string} newUserInfo New userInfo value.\n * @param {boolean=} decode Optional param for whether to decode new value.\n * @return {!goog.Uri} Reference to this URI object.\n */\ngoog.Uri.prototype.setUserInfo = function(newUserInfo, decode) {\n this.userInfo_ = decode ? goog.Uri.decodeOrEmpty_(newUserInfo) :\n newUserInfo;\n return this;\n};\n\n\n/**\n * @return {boolean} Whether the user info has been set.\n */\ngoog.Uri.prototype.hasUserInfo = function() {\n return !!this.userInfo_;\n};\n\n\n/**\n * @return {string} The decoded domain.\n */\ngoog.Uri.prototype.getDomain = function() {\n return this.domain_;\n};\n\n\n/**\n * Sets the domain.\n * @param {string} newDomain New domain value.\n * @param {boolean=} decode Optional param for whether to decode new value.\n * @return {!goog.Uri} Reference to this URI object.\n */\ngoog.Uri.prototype.setDomain = function(newDomain, decode) {\n this.domain_ = decode ? goog.Uri.decodeOrEmpty_(newDomain, true) :\n newDomain;\n return this;\n};\n\n\n/**\n * @return {boolean} Whether the domain has been set.\n */\ngoog.Uri.prototype.hasDomain = function() {\n return !!this.domain_;\n};\n\n\n/**\n * @return {?number} The port number.\n */\ngoog.Uri.prototype.getPort = function() {\n return this.port_;\n};\n\n\n/**\n * Sets the port number.\n * @param {*} newPort Port number. Will be explicitly casted to a number.\n * @return {!goog.Uri} Reference to this URI object.\n */\ngoog.Uri.prototype.setPort = function(newPort) {\n if (newPort) {\n newPort = Number(newPort);\n if (isNaN(newPort) || newPort < 0) {\n throw Error('Bad port number ' + newPort);\n }\n this.port_ = newPort;\n } else {\n this.port_ = null;\n }\n\n return this;\n};\n\n\n/**\n * @return {boolean} Whether the port has been set.\n */\ngoog.Uri.prototype.hasPort = function() {\n return this.port_ != null;\n};\n\n\n/**\n * @return {string} The decoded path.\n */\ngoog.Uri.prototype.getPath = function() {\n return this.path_;\n};\n\n\n/**\n * Sets the path.\n * @param {string} newPath New path value.\n * @param {boolean=} decode Optional param for whether to decode new value.\n * @return {!goog.Uri} Reference to this URI object.\n */\ngoog.Uri.prototype.setPath = function(newPath, decode) {\n this.path_ = decode ? goog.Uri.decodeOrEmpty_(newPath, true) : newPath;\n return this;\n};\n\n\n/**\n * @return {boolean} Whether the path has been set.\n */\ngoog.Uri.prototype.hasPath = function() {\n return !!this.path_;\n};\n\n\n/**\n * @return {boolean} Whether the query string has been set.\n */\ngoog.Uri.prototype.hasQuery = function() {\n return this.queryData_.toString() !== '';\n};\n\n\n/**\n * Sets the query data.\n * @param {goog.Uri.QueryData|string|undefined} queryData QueryData object.\n * @param {boolean=} decode Optional param for whether to decode new value.\n * Applies only if queryData is a string.\n * @return {!goog.Uri} Reference to this URI object.\n */\ngoog.Uri.prototype.setQueryData = function(queryData, decode) {\n if (queryData instanceof goog.Uri.QueryData) {\n this.queryData_ = queryData;\n } else {\n if (!decode) {\n // QueryData accepts encoded query string, so encode it if\n // decode flag is not true.\n queryData = goog.Uri.encodeSpecialChars_(queryData,\n goog.Uri.reDisallowedInQuery_);\n }\n this.queryData_ = new goog.Uri.QueryData(queryData, null);\n }\n\n return this;\n};\n\n\n/**\n * @return {string} The encoded URI query, not including the ?.\n */\ngoog.Uri.prototype.getEncodedQuery = function() {\n return this.queryData_.toString();\n};\n\n\n/**\n * @return {string} The decoded URI query, not including the ?.\n */\ngoog.Uri.prototype.getDecodedQuery = function() {\n return this.queryData_.toDecodedString();\n};\n\n\n/**\n * Returns the query data.\n * @return {!goog.Uri.QueryData} QueryData object.\n */\ngoog.Uri.prototype.getQueryData = function() {\n return this.queryData_;\n};\n\n\n/**\n * @return {string} The URI fragment, not including the #.\n */\ngoog.Uri.prototype.getFragment = function() {\n return this.fragment_;\n};\n\n\n/**\n * Sets the URI fragment.\n * @param {string} newFragment New fragment value.\n * @param {boolean=} decode Optional param for whether to decode new value.\n * @return {!goog.Uri} Reference to this URI object.\n */\ngoog.Uri.prototype.setFragment = function(newFragment, decode) {\n this.fragment_ = decode ? goog.Uri.decodeOrEmpty_(newFragment) :\n newFragment;\n return this;\n};\n\n\n/**\n * @return {boolean} Whether the URI has a fragment set.\n */\ngoog.Uri.prototype.hasFragment = function() {\n return !!this.fragment_;\n};\n\n\n//==============================================================================\n// Static members\n//==============================================================================\n\n\n/**\n * Removes dot segments in given path component, as described in\n * RFC 3986, section 5.2.4.\n *\n * @param {string} path A non-empty path component.\n * @return {string} Path component with removed dot segments.\n */\ngoog.Uri.removeDotSegments = function(path) {\n if (path == '..' || path == '.') {\n return '';\n\n } else if (path.indexOf('./') == -1 &&\n path.indexOf('/.') == -1) {\n // This optimization detects uris which do not contain dot-segments,\n // and as a consequence do not require any processing.\n return path;\n\n } else {\n var leadingSlash = (path.lastIndexOf('/', 0) == 0);\n var segments = path.split('/');\n var out = [];\n\n for (var pos = 0; pos < segments.length; ) {\n var segment = segments[pos++];\n\n if (segment == '.') {\n if (leadingSlash && pos == segments.length) {\n out.push('');\n }\n } else if (segment == '..') {\n if (out.length > 1 || out.length == 1 && out[0] != '') {\n out.pop();\n }\n if (leadingSlash && pos == segments.length) {\n out.push('');\n }\n } else {\n out.push(segment);\n leadingSlash = true;\n }\n }\n\n return out.join('/');\n }\n};\n\n\n/**\n * Decodes a value or returns the empty string if it isn't defined or empty.\n * @param {string|undefined} val Value to decode.\n * @param {boolean=} preserveReserved If true, restricted characters will\n * not be decoded.\n * @return {string} Decoded value.\n * @private\n */\ngoog.Uri.decodeOrEmpty_ = function(val, preserveReserved) {\n // Don't use UrlDecode() here because val is not a query parameter.\n if (!val) {\n return '';\n }\n\n return preserveReserved ? decodeURI(val) : decodeURIComponent(val);\n};\n\n\n/**\n * If unescapedPart is non null, then escapes any characters in it that aren't\n * valid characters in a url and also escapes any special characters that\n * appear in extra.\n *\n * @param {(?string|undefined)} unescapedPart The string to encode.\n * @param {RegExp} extra A character set of characters in [\\01-\\177].\n * @param {boolean=} removeDoubleEncoding If true, remove double percent\n * encoding.\n * @return {?string} null iff unescapedPart == null.\n * @private\n */\ngoog.Uri.encodeSpecialChars_ = function(unescapedPart, extra,\n removeDoubleEncoding) {\n if (unescapedPart != null) {\n var encoded = encodeURI(unescapedPart).\n replace(extra, goog.Uri.encodeChar_);\n if (removeDoubleEncoding) {\n // encodeURI double-escapes %XX sequences used to represent restricted\n // characters in some URI components, remove the double escaping here.\n encoded = goog.Uri.removeDoubleEncoding_(encoded);\n }\n return encoded;\n }\n return null;\n};\n\n\n/**\n * Converts a character in [\\01-\\177] to its unicode character equivalent.\n * @param {string} ch One character string.\n * @return {string} Encoded string.\n * @private\n */\ngoog.Uri.encodeChar_ = function(ch) {\n var n = ch.charCodeAt(0);\n return '%' + ((n >> 4) & 0xf).toString(16) + (n & 0xf).toString(16);\n};\n\n\n/**\n * Removes double percent-encoding from a string.\n * @param {string} doubleEncodedString String\n * @return {string} String with double encoding removed.\n * @private\n */\ngoog.Uri.removeDoubleEncoding_ = function(doubleEncodedString) {\n return doubleEncodedString.replace(/%25([0-9a-fA-F]{2})/g, '%$1');\n};\n\n\n/**\n * Regular expression for characters that are disallowed in the scheme or\n * userInfo part of the URI.\n * @type {RegExp}\n * @private\n */\ngoog.Uri.reDisallowedInSchemeOrUserInfo_ = /[#\\/\\?@]/g;\n\n\n/**\n * Regular expression for characters that are disallowed in a relative path.\n * Colon is included due to RFC 3986 3.3.\n * @type {RegExp}\n * @private\n */\ngoog.Uri.reDisallowedInRelativePath_ = /[\\#\\?:]/g;\n\n\n/**\n * Regular expression for characters that are disallowed in an absolute path.\n * @type {RegExp}\n * @private\n */\ngoog.Uri.reDisallowedInAbsolutePath_ = /[\\#\\?]/g;\n\n\n/**\n * Regular expression for characters that are disallowed in the query.\n * @type {RegExp}\n * @private\n */\ngoog.Uri.reDisallowedInQuery_ = /[\\#\\?@]/g;\n\n\n/**\n * Regular expression for characters that are disallowed in the fragment.\n * @type {RegExp}\n * @private\n */\ngoog.Uri.reDisallowedInFragment_ = /#/g;\n\n\n\n/**\n * Class used to represent URI query parameters. It is essentially a hash of\n * name-value pairs, though a name can be present more than once.\n *\n * Has the same interface as the collections in goog.structs.\n *\n * @param {?string=} query Optional encoded query string to parse into\n * the object.\n * @param {goog.Uri=} uri Optional uri object that should have its\n * cache invalidated when this object updates. Deprecated -- this\n * is no longer required.\n * @constructor\n * @final\n */\ngoog.Uri.QueryData = function(query, uri) {\n /**\n * Encoded query string, or null if it requires computing from the key map.\n * @type {?string}\n * @private\n */\n this.encodedQuery_ = query || null;\n};\n\n\n/**\n * If the underlying key map is not yet initialized, it parses the\n * query string and fills the map with parsed data.\n * @private\n */\ngoog.Uri.QueryData.prototype.ensureKeyMapInitialized_ = function() {\n if (!this.keyMap_) {\n this.keyMap_ = {};\n this.count_ = 0;\n\n if (this.encodedQuery_) {\n var pairs = this.encodedQuery_.split('&');\n for (var i = 0; i < pairs.length; i++) {\n var indexOfEquals = pairs[i].indexOf('=');\n var name = null;\n var value = null;\n if (indexOfEquals >= 0) {\n name = pairs[i].substring(0, indexOfEquals);\n value = pairs[i].substring(indexOfEquals + 1);\n } else {\n name = pairs[i];\n }\n name = decodeURIComponent(name.replace(/\\+/g, ' '));\n value = value || '';\n this.add(name, decodeURIComponent(value.replace(/\\+/g, ' ')));\n }\n }\n }\n};\n\n\n/**\n * The map containing name/value or name/array-of-values pairs.\n * May be null if it requires parsing from the query string.\n *\n * We need to use a Map because we cannot guarantee that the key names will\n * not be problematic for IE.\n *\n * @type {Object.>}\n * @private\n */\ngoog.Uri.QueryData.prototype.keyMap_ = null;\n\n\n/**\n * The number of params, or null if it requires computing.\n * @type {?number}\n * @private\n */\ngoog.Uri.QueryData.prototype.count_ = null;\n\n\n/**\n * @return {?number} The number of parameters.\n */\ngoog.Uri.QueryData.prototype.getCount = function() {\n this.ensureKeyMapInitialized_();\n return this.count_;\n};\n\n\n/**\n * Adds a key value pair.\n * @param {string} key Name.\n * @param {string} value Value.\n * @return {!goog.Uri.QueryData} Instance of this object.\n */\ngoog.Uri.QueryData.prototype.add = function(key, value) {\n this.ensureKeyMapInitialized_();\n // Invalidate the cache.\n this.encodedQuery_ = null;\n\n var values = this.keyMap_.hasOwnProperty(key) ? this.keyMap_[key] : null;\n if (!values) {\n this.keyMap_[key] = (values = []);\n }\n values.push(value);\n goog.asserts.assert(this.count_ != null, 'Should not be null.');\n this.count_++;\n return this;\n};\n\n/**\n * Sets a key value pair and removes all other keys with the same value.\n *\n * @param {string} key Name.\n * @param {string} value Value.\n * @return {!goog.Uri.QueryData} Instance of this object.\n */\n goog.Uri.QueryData.prototype.set = function(key, value) {\n this.ensureKeyMapInitialized_();\n // Invalidate the cache.\n this.encodedQuery_ = null;\n\n if (!this.keyMap_.hasOwnProperty(key)) {\n this.add(key, value);\n } else {\n this.keyMap_[key] = [value];\n }\n\n return this;\n};\n\n\n/**\n * Get the values from a key.\n *\n * @param {string} key Name.\n * @return {Array.}\n */\n goog.Uri.QueryData.prototype.get = function(key) {\n this.ensureKeyMapInitialized_();\n return this.keyMap_[key] || [];\n};\n\n\n/**\n * @return {string} Encoded query string.\n * @override\n */\ngoog.Uri.QueryData.prototype.toString = function() {\n if (this.encodedQuery_) {\n return this.encodedQuery_;\n }\n\n if (!this.keyMap_) {\n return '';\n }\n\n var sb = [];\n\n for (var key in this.keyMap_) {\n var encodedKey = encodeURIComponent(key);\n var val = this.keyMap_[key];\n for (var j = 0; j < val.length; j++) {\n var param = encodedKey;\n // Ensure that null and undefined are encoded into the url as\n // literal strings.\n if (val[j] !== '') {\n param += '=' + encodeURIComponent(val[j]);\n }\n sb.push(param);\n }\n }\n\n return this.encodedQuery_ = sb.join('&');\n};\n\n\n/**\n * @return {string} Decoded query string.\n */\ngoog.Uri.QueryData.prototype.toDecodedString = function() {\n return goog.Uri.decodeOrEmpty_(this.toString());\n};\n\n\n/**\n * Clone the query data instance.\n * @return {!goog.Uri.QueryData} New instance of the QueryData object.\n */\ngoog.Uri.QueryData.prototype.clone = function() {\n var rv = new goog.Uri.QueryData();\n rv.encodedQuery_ = this.encodedQuery_;\n if (this.keyMap_) {\n var cloneMap = {};\n for (var key in this.keyMap_) {\n cloneMap[key] = this.keyMap_[key].concat();\n }\n rv.keyMap_ = cloneMap;\n rv.count_ = this.count_;\n }\n return rv;\n};\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.util.Uint8ArrayUtils');\n\ngoog.require('shaka.util.BufferUtils');\ngoog.require('shaka.util.StringUtils');\n\n\n// TODO: revisit this when Closure Compiler supports partially-exported classes.\n/**\n * @summary A set of Uint8Array utility functions.\n * @export\n */\nshaka.util.Uint8ArrayUtils = class {\n /**\n * Convert a buffer to a base64 string. The output will be standard\n * alphabet as opposed to base64url safe alphabet.\n * @param {BufferSource} data\n * @return {string}\n * @export\n */\n static toStandardBase64(data) {\n const bytes = shaka.util.StringUtils.fromCharCode(\n shaka.util.BufferUtils.toUint8(data));\n return btoa(bytes);\n }\n\n /**\n * Convert a buffer to a base64 string. The output will always use the\n * alternate encoding/alphabet also known as \"base64url\".\n * @param {BufferSource} data\n * @param {boolean=} padding If true, pad the output with equals signs.\n * Defaults to true.\n * @return {string}\n * @export\n */\n static toBase64(data, padding) {\n padding = (padding == undefined) ? true : padding;\n const base64 = shaka.util.Uint8ArrayUtils.toStandardBase64(data)\n .replace(/\\+/g, '-').replace(/\\//g, '_');\n return padding ? base64 : base64.replace(/[=]*$/, '');\n }\n\n /**\n * Convert a base64 string to a Uint8Array. Accepts either the standard\n * alphabet or the alternate \"base64url\" alphabet.\n * @param {string} str\n * @return {!Uint8Array}\n * @export\n */\n static fromBase64(str) {\n // atob creates a \"raw string\" where each character is interpreted as a\n // byte.\n const bytes = window.atob(str.replace(/-/g, '+').replace(/_/g, '/'));\n const result = new Uint8Array(bytes.length);\n for (let i = 0; i < bytes.length; ++i) {\n result[i] = bytes.charCodeAt(i);\n }\n return result;\n }\n\n\n /**\n * Convert a hex string to a Uint8Array.\n * @param {string} str\n * @return {!Uint8Array}\n * @export\n */\n static fromHex(str) {\n const size = str.length / 2;\n const arr = new Uint8Array(size);\n for (let i = 0; i < size; i++) {\n arr[i] = window.parseInt(str.substr(i * 2, 2), 16);\n }\n return arr;\n }\n\n\n /**\n * Convert a buffer to a hex string.\n * @param {BufferSource} data\n * @return {string}\n * @export\n */\n static toHex(data) {\n const arr = shaka.util.BufferUtils.toUint8(data);\n let hex = '';\n for (let value of arr) {\n value = value.toString(16);\n if (value.length == 1) {\n value = '0' + value;\n }\n hex += value;\n }\n return hex;\n }\n\n\n /**\n * Concatenate buffers.\n * @param {...BufferSource} varArgs\n * @return {!Uint8Array}\n * @export\n */\n static concat(...varArgs) {\n const BufferUtils = shaka.util.BufferUtils;\n let totalLength = 0;\n for (let i = 0; i < varArgs.length; ++i) {\n const value = varArgs[i];\n totalLength += value.byteLength;\n }\n\n const result = new Uint8Array(totalLength);\n let offset = 0;\n\n for (let i = 0; i < varArgs.length; ++i) {\n const value = varArgs[i];\n if (value instanceof Uint8Array) {\n result.set(value, offset);\n } else {\n result.set(BufferUtils.toUint8(value), offset);\n }\n offset += value.byteLength;\n }\n\n return result;\n }\n};\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.util.ManifestParserUtils');\n\ngoog.require('goog.Uri');\ngoog.require('shaka.util.BufferUtils');\ngoog.require('shaka.util.Error');\ngoog.require('shaka.util.StringUtils');\ngoog.require('shaka.util.Uint8ArrayUtils');\n\n\n/**\n * @summary Utility functions for manifest parsing.\n */\nshaka.util.ManifestParserUtils = class {\n /**\n * Resolves an array of relative URIs to the given base URIs. This will result\n * in M*N number of URIs.\n *\n * Note: This method is slow in SmartTVs and Consoles. It should only be\n * called when necessary.\n *\n * @param {!Array.} baseUris\n * @param {!Array.} relativeUris\n * @param {string=} extraQueryParams\n * @return {!Array.}\n */\n static resolveUris(baseUris, relativeUris, extraQueryParams = '') {\n if (relativeUris.length == 0) {\n return baseUris;\n }\n\n if (baseUris.length == 1 && relativeUris.length == 1) {\n const baseUri = new goog.Uri(baseUris[0]);\n const relativeUri = new goog.Uri(relativeUris[0]);\n const resolvedUri = baseUri.resolve(relativeUri);\n if (extraQueryParams) {\n resolvedUri.setQueryData(extraQueryParams);\n }\n return [resolvedUri.toString()];\n }\n\n const relativeAsGoog = relativeUris.map((uri) => new goog.Uri(uri));\n\n // For each base URI, this code resolves it with every relative URI.\n // The result is a single array containing all the resolved URIs.\n const resolvedUris = [];\n for (const baseStr of baseUris) {\n const base = new goog.Uri(baseStr);\n for (const relative of relativeAsGoog) {\n const resolvedUri = base.resolve(relative);\n if (extraQueryParams) {\n resolvedUri.setQueryData(extraQueryParams);\n }\n resolvedUris.push(resolvedUri.toString());\n }\n }\n\n return resolvedUris;\n }\n\n\n /**\n * Creates a DrmInfo object from the given info.\n *\n * @param {string} keySystem\n * @param {string} encryptionScheme\n * @param {Array.} initData\n * @param {string} [keySystemUri]\n * @return {shaka.extern.DrmInfo}\n */\n static createDrmInfo(keySystem, encryptionScheme, initData, keySystemUri) {\n const drmInfo = {\n keySystem,\n encryptionScheme,\n licenseServerUri: '',\n distinctiveIdentifierRequired: false,\n persistentStateRequired: false,\n audioRobustness: '',\n videoRobustness: '',\n serverCertificate: null,\n serverCertificateUri: '',\n sessionType: '',\n initData: initData || [],\n keyIds: new Set(),\n };\n\n if (keySystemUri) {\n drmInfo.keySystemUris = new Set([keySystemUri]);\n }\n\n return drmInfo;\n }\n\n /**\n * Creates a DrmInfo object from ClearKeys.\n *\n * @param {!Map.} clearKeys\n * @param {string=} encryptionScheme\n * @return {shaka.extern.DrmInfo}\n */\n static createDrmInfoFromClearKeys(clearKeys, encryptionScheme = 'cenc') {\n const StringUtils = shaka.util.StringUtils;\n const Uint8ArrayUtils = shaka.util.Uint8ArrayUtils;\n const keys = [];\n const keyIds = [];\n const originalKeyIds = [];\n\n clearKeys.forEach((key, keyId) => {\n let kid = keyId;\n if (kid.length != 22) {\n kid = Uint8ArrayUtils.toBase64(\n Uint8ArrayUtils.fromHex(keyId), false);\n }\n let k = key;\n if (k.length != 22) {\n k = Uint8ArrayUtils.toBase64(\n Uint8ArrayUtils.fromHex(key), false);\n }\n const keyObj = {\n kty: 'oct',\n kid: kid,\n k: k,\n };\n\n keys.push(keyObj);\n keyIds.push(keyObj.kid);\n originalKeyIds.push(keyId);\n });\n\n const jwkSet = {keys: keys};\n const license = JSON.stringify(jwkSet);\n\n // Use the keyids init data since is suggested by EME.\n // Suggestion: https://bit.ly/2JYcNTu\n // Format: https://www.w3.org/TR/eme-initdata-keyids/\n const initDataStr = JSON.stringify({'kids': keyIds});\n const initData =\n shaka.util.BufferUtils.toUint8(StringUtils.toUTF8(initDataStr));\n const initDatas = [{initData: initData, initDataType: 'keyids'}];\n\n return {\n keySystem: 'org.w3.clearkey',\n encryptionScheme,\n licenseServerUri: 'data:application/json;base64,' + window.btoa(license),\n distinctiveIdentifierRequired: false,\n persistentStateRequired: false,\n audioRobustness: '',\n videoRobustness: '',\n serverCertificate: null,\n serverCertificateUri: '',\n sessionType: '',\n initData: initDatas,\n keyIds: new Set(originalKeyIds),\n };\n }\n\n\n /**\n * Attempts to guess which codecs from the codecs list belong to a given\n * content type.\n * Assumes that at least one codec is correct, and throws if none are.\n *\n * @param {string} contentType\n * @param {!Array.} codecs\n * @return {string}\n */\n static guessCodecs(contentType, codecs) {\n if (codecs.length == 1) {\n return codecs[0];\n }\n\n const match = shaka.util.ManifestParserUtils.guessCodecsSafe(\n contentType, codecs);\n // A failure is specifically denoted by null; an empty string represents a\n // valid match of no codec.\n if (match != null) {\n return match;\n }\n\n // Unable to guess codecs.\n throw new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.MANIFEST,\n shaka.util.Error.Code.HLS_COULD_NOT_GUESS_CODECS,\n codecs);\n }\n\n\n /**\n * Attempts to guess which codecs from the codecs list belong to a given\n * content type. Does not assume a single codec is anything special, and does\n * not throw if it fails to match.\n *\n * @param {string} contentType\n * @param {!Array.} codecs\n * @return {?string} or null if no match is found\n */\n static guessCodecsSafe(contentType, codecs) {\n const formats = shaka.util.ManifestParserUtils\n .CODEC_REGEXPS_BY_CONTENT_TYPE_[contentType];\n for (const format of formats) {\n for (const codec of codecs) {\n if (format.test(codec.trim())) {\n return codec.trim();\n }\n }\n }\n\n // Text does not require a codec string.\n if (contentType == shaka.util.ManifestParserUtils.ContentType.TEXT) {\n return '';\n }\n\n return null;\n }\n\n\n /**\n * Attempts to guess which codecs from the codecs list belong to a given\n * content.\n *\n * @param {string} contentType\n * @param {!Array.} codecs\n * @return {!Array.}\n */\n static guessAllCodecsSafe(contentType, codecs) {\n const allCodecs = [];\n const formats = shaka.util.ManifestParserUtils\n .CODEC_REGEXPS_BY_CONTENT_TYPE_[contentType];\n for (const format of formats) {\n for (const codec of codecs) {\n if (format.test(codec.trim())) {\n allCodecs.push(codec.trim());\n }\n }\n }\n\n return allCodecs;\n }\n};\n\n\n/**\n * @enum {string}\n */\nshaka.util.ManifestParserUtils.ContentType = {\n VIDEO: 'video',\n AUDIO: 'audio',\n TEXT: 'text',\n IMAGE: 'image',\n APPLICATION: 'application',\n};\n\n\n/**\n * @enum {string}\n */\nshaka.util.ManifestParserUtils.TextStreamKind = {\n SUBTITLE: 'subtitle',\n CLOSED_CAPTION: 'caption',\n};\n\n\n/**\n * Specifies how tolerant the player is of inaccurate segment start times and\n * end times within a manifest. For example, gaps or overlaps between segments\n * in a SegmentTimeline which are greater than or equal to this value will\n * result in a warning message.\n *\n * @const {number}\n */\nshaka.util.ManifestParserUtils.GAP_OVERLAP_TOLERANCE_SECONDS = 1 / 15;\n\n\n/**\n * A list of regexps to detect well-known video codecs.\n *\n * @const {!Array.}\n * @private\n */\nshaka.util.ManifestParserUtils.VIDEO_CODEC_REGEXPS_ = [\n /^avc/,\n /^hev/,\n /^hvc/,\n /^vvc/,\n /^vvi/,\n /^vp0?[89]/,\n /^av01/,\n /^dvh/, // Dolby Vision based in HEVC\n /^dva/, // Dolby Vision based in AVC\n /^dav/, // Dolby Vision based in AV1\n];\n\n\n/**\n * A list of regexps to detect well-known audio codecs.\n *\n * @const {!Array.}\n * @private\n */\nshaka.util.ManifestParserUtils.AUDIO_CODEC_REGEXPS_ = [\n /^vorbis$/,\n /^Opus$/, // correct codec string according to RFC 6381 section 3.3\n /^opus$/, // some manifests wrongfully use this\n /^fLaC$/, // correct codec string according to RFC 6381 section 3.3\n /^flac$/, // some manifests wrongfully use this\n /^mp4a/,\n /^[ae]c-3$/,\n /^ac-4/,\n /^dts[cex]$/, // DTS Digital Surround (dtsc), DTS Express (dtse), DTS:X (dtsx)\n /^iamf/,\n /^mhm[12]/, // MPEG-H Audio LC\n];\n\n\n/**\n * A list of regexps to detect well-known text codecs.\n *\n * @const {!Array.}\n * @private\n */\nshaka.util.ManifestParserUtils.TEXT_CODEC_REGEXPS_ = [\n /^vtt$/,\n /^wvtt/,\n /^stpp/,\n];\n\n\n/**\n * @const {!Object.>}\n */\nshaka.util.ManifestParserUtils.CODEC_REGEXPS_BY_CONTENT_TYPE_ = {\n 'audio': shaka.util.ManifestParserUtils.AUDIO_CODEC_REGEXPS_,\n 'video': shaka.util.ManifestParserUtils.VIDEO_CODEC_REGEXPS_,\n 'text': shaka.util.ManifestParserUtils.TEXT_CODEC_REGEXPS_,\n};\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.util.MimeUtils');\n\ngoog.require('shaka.transmuxer.TransmuxerEngine');\ngoog.require('shaka.util.ManifestParserUtils');\n\n/**\n * @summary A set of utility functions for dealing with MIME types.\n * @export\n */\nshaka.util.MimeUtils = class {\n /**\n * Takes a MIME type and optional codecs string and produces the full MIME\n * type. Also remove the codecs for raw formats.\n *\n * @param {string} mimeType\n * @param {string=} codecs\n * @return {string}\n * @export\n */\n static getFullType(mimeType, codecs) {\n let fullMimeType = mimeType;\n if (codecs && !shaka.util.MimeUtils.RAW_FORMATS.includes(mimeType)) {\n fullMimeType += '; codecs=\"' + codecs + '\"';\n }\n return fullMimeType;\n }\n\n /**\n * Takes a MIME type and optional codecs string and produces the full MIME\n * type.\n *\n * @param {string} mimeType\n * @param {string=} codecs\n * @return {string}\n * @export\n */\n static getFullTypeWithAllCodecs(mimeType, codecs) {\n let fullMimeType = mimeType;\n if (codecs) {\n fullMimeType += '; codecs=\"' + codecs + '\"';\n }\n return fullMimeType;\n }\n\n /**\n * Takes a MIME type and a codecs string and produces the full MIME\n * type. If it's a transport stream, convert its codecs to MP4 codecs.\n * Otherwise for multiplexed content, convert the video MIME types to\n * their audio equivalents if the content type is audio.\n *\n * @param {string} mimeType\n * @param {string} codecs\n * @param {string} contentType\n * @return {string}\n */\n static getFullOrConvertedType(mimeType, codecs, contentType) {\n const MimeUtils = shaka.util.MimeUtils;\n const fullMimeType = MimeUtils.getFullType(mimeType, codecs);\n const fullMimeTypeWithAllCodecs = MimeUtils.getFullTypeWithAllCodecs(\n mimeType, codecs);\n const ContentType = shaka.util.ManifestParserUtils.ContentType;\n const TransmuxerEngine = shaka.transmuxer.TransmuxerEngine;\n\n if (TransmuxerEngine.isSupported(fullMimeTypeWithAllCodecs, contentType)) {\n return TransmuxerEngine.convertCodecs(\n contentType, fullMimeTypeWithAllCodecs);\n } else if (mimeType != 'video/mp2t' && contentType == ContentType.AUDIO) {\n // video/mp2t is the correct mime type for TS audio, so only replace the\n // word \"video\" with \"audio\" for non-TS audio content.\n return fullMimeType.replace('video', 'audio');\n }\n return fullMimeType;\n }\n\n\n /**\n * Takes a Stream object and produces an extended MIME type with information\n * beyond the container and codec type, when available.\n *\n * @param {shaka.extern.Stream} stream\n * @param {string} mimeType\n * @param {string} codecs\n * @return {string}\n */\n static getExtendedType(stream, mimeType, codecs) {\n const components = [mimeType];\n\n const extendedMimeParams = shaka.util.MimeUtils.EXTENDED_MIME_PARAMETERS_;\n extendedMimeParams.forEach((mimeKey, streamKey) => {\n const value = stream[streamKey];\n if (streamKey == 'codecs') {\n if (shaka.util.MimeUtils.RAW_FORMATS.includes(stream.mimeType)) {\n // Skip codecs for raw formats\n } else {\n components.push('codecs=\"' + codecs + '\"');\n }\n } else if (value) {\n components.push(mimeKey + '=\"' + value + '\"');\n }\n });\n if (stream.hdr == 'PQ') {\n components.push('eotf=\"smpte2084\"');\n }\n\n return components.join(';');\n }\n\n /**\n * Takes a full MIME type (with codecs) or basic MIME type (without codecs)\n * and returns a container type string (\"mp2t\", \"mp4\", \"webm\", etc.)\n *\n * @param {string} mimeType\n * @return {string}\n */\n static getContainerType(mimeType) {\n return mimeType.split(';')[0].split('/')[1];\n }\n\n /**\n * Split a list of codecs encoded in a string into a list of codecs.\n * @param {string} codecs\n * @return {!Array.}\n */\n static splitCodecs(codecs) {\n return codecs.split(',');\n }\n\n /**\n * Get the normalized codec from a codec string,\n * independently of their container.\n *\n * @param {string} codecString\n * @return {string}\n */\n static getNormalizedCodec(codecString) {\n const parts =\n shaka.util.MimeUtils.getCodecParts_(codecString);\n const base = parts[0];\n const profile = parts[1].toLowerCase();\n switch (true) {\n case base === 'mp4a' && profile === '69':\n case base === 'mp4a' && profile === '6b':\n case base === 'mp4a' && profile === '40.34':\n return 'mp3';\n case base === 'mp4a' && profile === '66':\n case base === 'mp4a' && profile === '67':\n case base === 'mp4a' && profile === '68':\n case base === 'mp4a' && profile === '40.2':\n case base === 'mp4a' && profile === '40.02':\n case base === 'mp4a' && profile === '40.5':\n case base === 'mp4a' && profile === '40.05':\n case base === 'mp4a' && profile === '40.29':\n case base === 'mp4a' && profile === '40.42': // Extended HE-AAC\n return 'aac';\n case base === 'mp4a' && profile === 'a5':\n return 'ac-3'; // Dolby Digital\n case base === 'mp4a' && profile === 'a6':\n return 'ec-3'; // Dolby Digital Plus\n case base === 'mp4a' && profile === 'b2':\n return 'dtsx'; // DTS:X\n case base === 'mp4a' && profile === 'a9':\n return 'dtsc'; // DTS Digital Surround\n case base === 'avc1':\n case base === 'avc3':\n return 'avc'; // H264\n case base === 'hvc1':\n case base === 'hev1':\n return 'hevc'; // H265\n case base === 'vvc1':\n case base === 'vvi1':\n return 'vvc'; // H266\n case base === 'dvh1':\n case base === 'dvhe':\n return 'dovi-hevc'; // Dolby Vision based in HEVC\n case base === 'dvav':\n case base === 'dva1':\n return 'dovi-avc'; // Dolby Vision based in AVC\n case base === 'dav1':\n return 'dovi-av1'; // Dolby Vision based in AV1\n case base === 'dvc1':\n case base === 'dvi1':\n return 'dovi-vvc'; // Dolby Vision based in VVC\n }\n return base;\n }\n\n /**\n * Get the base codec from a codec string.\n *\n * @param {string} codecString\n * @return {string}\n */\n static getCodecBase(codecString) {\n const codecsBase = [];\n for (const codec of codecString.split(',')) {\n const parts = shaka.util.MimeUtils.getCodecParts_(codec);\n codecsBase.push(parts[0]);\n }\n return codecsBase.sort().join(',');\n }\n\n /**\n * Takes a full MIME type (with codecs) or basic MIME type (without codecs)\n * and returns a basic MIME type (without codecs or other parameters).\n *\n * @param {string} mimeType\n * @return {string}\n */\n static getBasicType(mimeType) {\n return mimeType.split(';')[0];\n }\n\n /**\n * Takes a MIME type and returns the codecs parameter, or an empty string if\n * there is no codecs parameter.\n *\n * @param {string} mimeType\n * @return {string}\n */\n static getCodecs(mimeType) {\n // Parse the basic MIME type from its parameters.\n const pieces = mimeType.split(/ *; */);\n pieces.shift(); // Remove basic MIME type from pieces.\n\n const codecs = pieces.find((piece) => piece.startsWith('codecs='));\n if (!codecs) {\n return '';\n }\n\n // The value may be quoted, so remove quotes at the beginning or end.\n const value = codecs.split('=')[1].replace(/^\"|\"$/g, '');\n return value;\n }\n\n /**\n * Checks if the given MIME type is HLS MIME type.\n *\n * @param {string} mimeType\n * @return {boolean}\n */\n static isHlsType(mimeType) {\n return mimeType === 'application/x-mpegurl' ||\n mimeType === 'application/vnd.apple.mpegurl';\n }\n\n /**\n * Get the base and profile of a codec string. Where [0] will be the codec\n * base and [1] will be the profile.\n * @param {string} codecString\n * @return {!Array.}\n * @private\n */\n static getCodecParts_(codecString) {\n const parts = codecString.split('.');\n\n const base = parts[0];\n\n parts.shift();\n const profile = parts.join('.');\n\n // Make sure that we always return a \"base\" and \"profile\".\n return [base, profile];\n }\n};\n\n\n/**\n * A map from Stream object keys to MIME type parameters. These should be\n * ignored by platforms that do not recognize them.\n *\n * This initial set of parameters are all recognized by Chromecast.\n *\n * @const {!Map.}\n * @private\n */\nshaka.util.MimeUtils.EXTENDED_MIME_PARAMETERS_ = new Map()\n .set('codecs', 'codecs')\n .set('frameRate', 'framerate') // Ours is camelCase, theirs is lowercase.\n .set('bandwidth', 'bitrate') // They are in the same units: bits/sec.\n .set('width', 'width')\n .set('height', 'height')\n .set('channelsCount', 'channels');\n\n\n/**\n * A mimetype created for CEA-608 closed captions.\n * @const {string}\n */\nshaka.util.MimeUtils.CEA608_CLOSED_CAPTION_MIMETYPE = 'application/cea-608';\n\n/**\n * A mimetype created for CEA-708 closed captions.\n * @const {string}\n */\nshaka.util.MimeUtils.CEA708_CLOSED_CAPTION_MIMETYPE = 'application/cea-708';\n\n/**\n * MIME types of raw formats.\n *\n * @const {!Array.}\n */\nshaka.util.MimeUtils.RAW_FORMATS = [\n 'audio/aac',\n 'audio/ac3',\n 'audio/ec3',\n 'audio/mpeg',\n];\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.util.Functional');\n\n/**\n * @summary A set of functional utility functions.\n */\nshaka.util.Functional = class {\n /**\n * Creates a promise chain that calls the given callback for each element in\n * the array in a catch of a promise.\n *\n * e.g.:\n * Promise.reject().catch(callback(array[0])).catch(callback(array[1]));\n *\n * @param {!Array.} array\n * @param {function(ELEM):!Promise.} callback\n * @return {!Promise.}\n * @template ELEM,RESULT\n */\n static createFallbackPromiseChain(array, callback) {\n return array.reduce((promise, elem) => {\n return promise.catch(() => callback(elem));\n }, Promise.reject());\n }\n\n\n /**\n * Returns the first array concatenated to the second; used to collapse an\n * array of arrays into a single array.\n *\n * @param {!Array.} all\n * @param {!Array.} part\n * @return {!Array.}\n * @template T\n */\n static collapseArrays(all, part) {\n return all.concat(part);\n }\n\n /**\n * A no-op function that ignores its arguments. This is used to suppress\n * unused variable errors.\n * @param {...*} args\n */\n static ignored(...args) {}\n\n\n /**\n * A no-op function. Useful in promise chains.\n */\n static noop() {}\n\n\n /**\n * Returns if the given value is not null; useful for filtering out null\n * values.\n *\n * @param {T} value\n * @return {boolean}\n * @template T\n */\n static isNotNull(value) {\n return value != null;\n }\n};\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.util.LanguageUtils');\n\ngoog.require('goog.asserts');\ngoog.require('shaka.util.ManifestParserUtils');\n\n\n/**\n * @summary A set of language utility functions.\n * @final\n * @export\n */\nshaka.util.LanguageUtils = class {\n /**\n * Check if |locale1| and |locale2| are locale-compatible.\n *\n * Locale-compatible is defined as all components in each locale match. Since\n * we only respect the language and region components, we only check that\n * the language and region components match.\n *\n * Examples:\n * Locale A | Locale B | Locale Compatible\n * ---------------------------------------\n * en-US | en-US | true\n * en | en-US | false\n * en-US | en-CA | false\n *\n * @param {string} locale1\n * @param {string} locale2\n * @return {boolean}\n * @export\n */\n static areLocaleCompatible(locale1, locale2) {\n const LanguageUtils = shaka.util.LanguageUtils;\n\n // Even through they SHOULD already be normalized, let's just be safe and\n // do it again.\n locale1 = LanguageUtils.normalize(locale1);\n locale2 = LanguageUtils.normalize(locale2);\n\n return locale1 == locale2;\n }\n\n /**\n * Check if |locale1| and |locale2| are language-compatible.\n *\n * Language compatible is when the language component of each locale matches.\n * This means that no matter what region they have (or don't have) as long as\n * the language components match, they are language-compatible.\n *\n * Examples:\n * Locale A | Locale B | Language-Compatible\n * -----------------------------------------\n * en-US | en-US | true\n * en-US | en | true\n * en-US | en-CA | true\n * en-CA | fr-CA | false\n *\n * @param {string} locale1\n * @param {string} locale2\n * @return {boolean}\n * @export\n */\n static areLanguageCompatible(locale1, locale2) {\n const LanguageUtils = shaka.util.LanguageUtils;\n\n // Even through they SHOULD already be normalized, let's just be safe and\n // do it again.\n locale1 = LanguageUtils.normalize(locale1);\n locale2 = LanguageUtils.normalize(locale2);\n\n // Get all components. This should only be language and region\n // since we do not support dialect.\n /** @type {!Array.} */\n const locale1Components = LanguageUtils.disassembleLocale_(locale1);\n /** @type {!Array.} */\n const locale2Components = LanguageUtils.disassembleLocale_(locale2);\n\n // We are language compatible if we have the same language.\n return locale1Components[0] == locale2Components[0];\n }\n\n /**\n * Check if |possibleParent| is the parent locale of |possibleChild|. Because\n * we do not support dialects, the parent-child relationship is a lot simpler.\n * In a parent child relationship:\n * - The parent and child have the same language-component\n * - The parent has no region-component\n * - The child has a region-component\n *\n * Example:\n * Locale A | Locale B | Is A The parent of B?\n * --------------------------------------------\n * en-US | en-US | no\n * en-US | en | no\n * en | en-US | yes\n * en | en | no\n * en | fr | no\n *\n * @param {string} possibleParent\n * @param {string} possibleChild\n * @return {boolean}\n * @export\n */\n static isParentOf(possibleParent, possibleChild) {\n const LanguageUtils = shaka.util.LanguageUtils;\n\n // Even through they SHOULD already be normalized, let's just be safe and\n // do it again.\n possibleParent = LanguageUtils.normalize(possibleParent);\n possibleChild = LanguageUtils.normalize(possibleChild);\n\n // Get all components. This should only be language and region\n // since we do not support dialect.\n /** @type {!Array.} */\n const possibleParentComponents =\n LanguageUtils.disassembleLocale_(possibleParent);\n /** @type {!Array.} */\n const possibleChildComponents =\n LanguageUtils.disassembleLocale_(possibleChild);\n\n return possibleParentComponents[0] == possibleChildComponents[0] &&\n possibleParentComponents.length == 1 &&\n possibleChildComponents.length == 2;\n }\n\n /**\n * Check if |localeA| shares the same parent with |localeB|. Since we don't\n * support dialect, we will only look at language and region. For two locales\n * to be siblings:\n * - Both must have language-components\n * - Both must have region-components\n * - Both must have the same language-component\n *\n * Example:\n * Locale A | Locale B | Siblings?\n * --------------------------------------------\n * en-US | en-US | yes\n * en-US | en-CA | yes\n * en-US | en | no\n * en | en-US | no\n * en | en | no\n * en | fr | no\n *\n * @param {string} localeA\n * @param {string} localeB\n * @return {boolean}\n * @export\n */\n static isSiblingOf(localeA, localeB) {\n const LanguageUtils = shaka.util.LanguageUtils;\n\n // Even through they SHOULD already be normalized, let's just be safe and\n // do it again.\n localeA = LanguageUtils.normalize(localeA);\n localeB = LanguageUtils.normalize(localeB);\n\n // Get all components. This should only be language and region\n // since we do not support dialect.\n /** @type {!Array.} */\n const localeAComponents = LanguageUtils.disassembleLocale_(localeA);\n /** @type {!Array.} */\n const localeBComponents = LanguageUtils.disassembleLocale_(localeB);\n\n return localeAComponents.length == 2 &&\n localeBComponents.length == 2 &&\n localeAComponents[0] == localeBComponents[0];\n }\n\n /**\n * Normalize a locale. This will take a locale and canonicalize it to a state\n * that we are prepared to work with.\n *\n * We only support with:\n * - language\n * - language-REGION\n *\n * If given a dialect, we will discard it. We will convert any 3-character\n * codes to 2-character codes. We will force language codes to lowercase and\n * region codes to uppercase.\n *\n * @param {string} locale\n * @return {string}\n * @export\n */\n static normalize(locale) {\n const LanguageUtils = shaka.util.LanguageUtils;\n\n const privateusePrefix = 'x-';\n const [languageRegion = '', privateuseSuffix = ''] =\n locale.split(`-${privateusePrefix}`);\n const [languageCode = '', regionCode = ''] = languageRegion.split('-');\n\n // We are only going to use the language, the region and the \"privateuse\" part (as per https://datatracker.ietf.org/doc/html/rfc5646).\n // Anything else is thrown away.\n const privateuse = privateuseSuffix ?\n `${privateusePrefix}${privateuseSuffix}` : '';\n\n // Convert the language to lower case. It is standard for the language code\n // to be in lower case, but it will also make the map look-up easier.\n let language = languageCode.toLowerCase();\n language = LanguageUtils.isoMap_.get(language) || language;\n\n // Convert the region to upper case. It is standard for the region to be in\n // upper case. If there is no upper code, then it will be an empty string\n // and this will be a no-op.\n const region = regionCode.toUpperCase();\n\n return `${region ? `${language}-${region}` : language}${\n privateuse ? `-${privateuse}` : ''}`;\n }\n\n /**\n * Check if two language codes are siblings. Language codes are siblings if\n * they share the same base language while neither one is the base language.\n *\n * For example, \"en-US\" and \"en-CA\" are siblings but \"en-US\" and \"en\" are not\n * siblings.\n *\n * @param {string} a\n * @param {string} b\n * @return {boolean}\n * @export\n */\n static areSiblings(a, b) {\n const LanguageUtils = shaka.util.LanguageUtils;\n\n const baseA = LanguageUtils.getBase(a);\n const baseB = LanguageUtils.getBase(b);\n\n return a != baseA && b != baseB && baseA == baseB;\n }\n\n /**\n * Compute a numerical relatedness for language codes. Language codes with a\n * higher relatedness are a better match. Unrelated language codes have a\n * relatedness score of 0.\n *\n * @param {string} target\n * @param {string} candidate\n * @return {number}\n * @export\n */\n static relatedness(target, candidate) {\n const LanguageUtils = shaka.util.LanguageUtils;\n\n target = LanguageUtils.normalize(target);\n candidate = LanguageUtils.normalize(candidate);\n\n // An exact match is the top score.\n if (candidate == target) {\n return 4;\n }\n\n // Next is a parent of the target language.\n if (LanguageUtils.isParentOf(candidate, target)) {\n return 3;\n }\n\n // Next is a sibling of the target language.\n if (LanguageUtils.isSiblingOf(candidate, target)) {\n return 2;\n }\n\n // Next is a child of the target language.\n if (LanguageUtils.isParentOf(target, candidate)) {\n return 1;\n }\n\n // Otherwise, they are unrelated.\n return 0;\n }\n\n /**\n * Get the normalized base language for a language code.\n *\n * @param {string} lang\n * @return {string}\n * @export\n */\n static getBase(lang) {\n const LanguageUtils = shaka.util.LanguageUtils;\n\n const splitAt = lang.indexOf('-');\n let major;\n\n if (splitAt >= 0) {\n major = lang.substring(0, splitAt);\n } else {\n major = lang;\n }\n\n // Convert the major code to lower case. It is standard for the major code\n // to be in lower case, but it will also make the map look-up easier.\n major = major.toLowerCase();\n major = LanguageUtils.isoMap_.get(major) || major;\n\n return major;\n }\n\n /**\n * Get the normalized language of the given text stream. Will return 'und' if\n * a language is not found on the text stream.\n *\n * This should always be used to get the language from a text stream.\n *\n * @param {shaka.extern.Stream} stream\n * @return {string}\n * @export\n */\n static getLocaleForText(stream) {\n const LanguageUtils = shaka.util.LanguageUtils;\n\n const ContentType = shaka.util.ManifestParserUtils.ContentType;\n goog.asserts.assert(\n stream.type == ContentType.TEXT,\n 'Can only get language from text streams');\n\n const language = stream.language || 'und';\n return LanguageUtils.normalize(language);\n }\n\n /**\n * Get the normalized locale for the given variant. This will look through\n * the variant to find the locale that represents the content in the variant.\n * This will return 'und' if no language can be found.\n *\n * This should always be used to get the locale from a variant.\n *\n * @param {shaka.extern.Variant} variant\n * @return {string}\n * @export\n */\n static getLocaleForVariant(variant) {\n const LanguageUtils = shaka.util.LanguageUtils;\n\n // Our preference order is:\n // 1. Variant\n // 2. Audio Stream\n // 3. Video Stream\n //\n // We are going to consider all falsy strings to be invalid locales, this\n // will include empty strings.\n if (variant.language) {\n return LanguageUtils.normalize(variant.language);\n }\n\n if (variant.audio && variant.audio.language) {\n return LanguageUtils.normalize(variant.audio.language);\n }\n\n if (variant.video && variant.video.language) {\n return LanguageUtils.normalize(variant.video.language);\n }\n\n // No language was found, but we still want to return a valid string.\n return 'und';\n }\n\n /**\n * Find the locale in |searchSpace| that comes closest to |target|. If no\n * locale is found to be close to |target|, then |null| will be returned.\n *\n * @param {string} target\n * @param {!Iterable.} searchSpace\n * @return {?string}\n * @export\n */\n static findClosestLocale(target, searchSpace) {\n const LanguageUtils = shaka.util.LanguageUtils;\n\n /** @type {string} */\n const safeTarget = LanguageUtils.normalize(target);\n /** @type {!Set.} */\n const safeSearchSpace = new Set();\n for (const option of searchSpace) {\n safeSearchSpace.add(LanguageUtils.normalize(option));\n }\n\n // Preference 1 - The option is an exact match. For example, \"en-US\" is an\n // exact match of \"en-US\". So if there is an option that is an exact\n // match, it would be the best match possible.\n for (const option of safeSearchSpace) {\n if (option == safeTarget) {\n return option;\n }\n }\n\n // Preference 2 - The option is the parent of the target. For example,\n // \"en\" is the parent of \"en-US\". So if there is an option with\n // \"en\", it should be good enough when our preference is \"en-US\".\n for (const option of safeSearchSpace) {\n if (LanguageUtils.isParentOf(option, safeTarget)) {\n return option;\n }\n }\n\n // Preference 3 - The option is a sibling of the target. For example,\n // \"en-US\" is a sibling of \"en-CA\". So if there is an option with\n // \"en_CA\", it should be good enough when our preference is \"en-US\".\n for (const option of safeSearchSpace) {\n if (LanguageUtils.isSiblingOf(option, safeTarget)) {\n return option;\n }\n }\n\n // Preference 4 - The option is a child of the target. For example,\n // \"en-US\" is the child of \"en\". SO it there is an option with\n // \"en-US\", it should be good enough when our preference is \"en\".\n for (const option of safeSearchSpace) {\n if (LanguageUtils.isParentOf(safeTarget, option)) {\n return option;\n }\n }\n\n // Failed to find anything.\n return null;\n }\n\n /**\n * Take a locale string and break it into its component. Check that each\n * component matches what we would expect internally for locales. This\n * should ONLY be used to verify locales that have been normalized.\n *\n * @param {string} locale\n * @return {!Array.}\n * @private\n */\n static disassembleLocale_(locale) {\n const components = locale.split('-');\n\n goog.asserts.assert(\n components.length <= 2,\n [\n 'Locales should not have more than 2 components. ',\n locale,\n ' has too many components.',\n ].join());\n\n return components;\n }\n};\n\n\n/**\n * A map from 3-letter language codes (ISO 639-2) to 2-letter language codes\n * (ISO 639-1) for all languages which have both in the registry.\n *\n * @const {!Map.}\n * @private\n */\nshaka.util.LanguageUtils.isoMap_ = new Map([\n ['aar', 'aa'], ['abk', 'ab'], ['afr', 'af'], ['aka', 'ak'], ['alb', 'sq'],\n ['amh', 'am'], ['ara', 'ar'], ['arg', 'an'], ['arm', 'hy'], ['asm', 'as'],\n ['ava', 'av'], ['ave', 'ae'], ['aym', 'ay'], ['aze', 'az'], ['bak', 'ba'],\n ['bam', 'bm'], ['baq', 'eu'], ['bel', 'be'], ['ben', 'bn'], ['bih', 'bh'],\n ['bis', 'bi'], ['bod', 'bo'], ['bos', 'bs'], ['bre', 'br'], ['bul', 'bg'],\n ['bur', 'my'], ['cat', 'ca'], ['ces', 'cs'], ['cha', 'ch'], ['che', 'ce'],\n ['chi', 'zh'], ['chu', 'cu'], ['chv', 'cv'], ['cor', 'kw'], ['cos', 'co'],\n ['cre', 'cr'], ['cym', 'cy'], ['cze', 'cs'], ['dan', 'da'], ['deu', 'de'],\n ['div', 'dv'], ['dut', 'nl'], ['dzo', 'dz'], ['ell', 'el'], ['eng', 'en'],\n ['epo', 'eo'], ['est', 'et'], ['eus', 'eu'], ['ewe', 'ee'], ['fao', 'fo'],\n ['fas', 'fa'], ['fij', 'fj'], ['fin', 'fi'], ['fra', 'fr'], ['fre', 'fr'],\n ['fry', 'fy'], ['ful', 'ff'], ['geo', 'ka'], ['ger', 'de'], ['gla', 'gd'],\n ['gle', 'ga'], ['glg', 'gl'], ['glv', 'gv'], ['gre', 'el'], ['grn', 'gn'],\n ['guj', 'gu'], ['hat', 'ht'], ['hau', 'ha'], ['heb', 'he'], ['her', 'hz'],\n ['hin', 'hi'], ['hmo', 'ho'], ['hrv', 'hr'], ['hun', 'hu'], ['hye', 'hy'],\n ['ibo', 'ig'], ['ice', 'is'], ['ido', 'io'], ['iii', 'ii'], ['iku', 'iu'],\n ['ile', 'ie'], ['ina', 'ia'], ['ind', 'id'], ['ipk', 'ik'], ['isl', 'is'],\n ['ita', 'it'], ['jav', 'jv'], ['jpn', 'ja'], ['kal', 'kl'], ['kan', 'kn'],\n ['kas', 'ks'], ['kat', 'ka'], ['kau', 'kr'], ['kaz', 'kk'], ['khm', 'km'],\n ['kik', 'ki'], ['kin', 'rw'], ['kir', 'ky'], ['kom', 'kv'], ['kon', 'kg'],\n ['kor', 'ko'], ['kua', 'kj'], ['kur', 'ku'], ['lao', 'lo'], ['lat', 'la'],\n ['lav', 'lv'], ['lim', 'li'], ['lin', 'ln'], ['lit', 'lt'], ['ltz', 'lb'],\n ['lub', 'lu'], ['lug', 'lg'], ['mac', 'mk'], ['mah', 'mh'], ['mal', 'ml'],\n ['mao', 'mi'], ['mar', 'mr'], ['may', 'ms'], ['mkd', 'mk'], ['mlg', 'mg'],\n ['mlt', 'mt'], ['mon', 'mn'], ['mri', 'mi'], ['msa', 'ms'], ['mya', 'my'],\n ['nau', 'na'], ['nav', 'nv'], ['nbl', 'nr'], ['nde', 'nd'], ['ndo', 'ng'],\n ['nep', 'ne'], ['nld', 'nl'], ['nno', 'nn'], ['nob', 'nb'], ['nor', 'no'],\n ['nya', 'ny'], ['oci', 'oc'], ['oji', 'oj'], ['ori', 'or'], ['orm', 'om'],\n ['oss', 'os'], ['pan', 'pa'], ['per', 'fa'], ['pli', 'pi'], ['pol', 'pl'],\n ['por', 'pt'], ['pus', 'ps'], ['que', 'qu'], ['roh', 'rm'], ['ron', 'ro'],\n ['rum', 'ro'], ['run', 'rn'], ['rus', 'ru'], ['sag', 'sg'], ['san', 'sa'],\n ['sin', 'si'], ['slk', 'sk'], ['slo', 'sk'], ['slv', 'sl'], ['sme', 'se'],\n ['smo', 'sm'], ['sna', 'sn'], ['snd', 'sd'], ['som', 'so'], ['sot', 'st'],\n ['spa', 'es'], ['sqi', 'sq'], ['srd', 'sc'], ['srp', 'sr'], ['ssw', 'ss'],\n ['sun', 'su'], ['swa', 'sw'], ['swe', 'sv'], ['tah', 'ty'], ['tam', 'ta'],\n ['tat', 'tt'], ['tel', 'te'], ['tgk', 'tg'], ['tgl', 'tl'], ['tha', 'th'],\n ['tib', 'bo'], ['tir', 'ti'], ['ton', 'to'], ['tsn', 'tn'], ['tso', 'ts'],\n ['tuk', 'tk'], ['tur', 'tr'], ['twi', 'tw'], ['uig', 'ug'], ['ukr', 'uk'],\n ['urd', 'ur'], ['uzb', 'uz'], ['ven', 've'], ['vie', 'vi'], ['vol', 'vo'],\n ['wel', 'cy'], ['wln', 'wa'], ['wol', 'wo'], ['xho', 'xh'], ['yid', 'yi'],\n ['yor', 'yo'], ['zha', 'za'], ['zho', 'zh'], ['zul', 'zu'],\n]);\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.util.StreamUtils');\n\ngoog.require('goog.asserts');\ngoog.require('shaka.log');\ngoog.require('shaka.media.Capabilities');\ngoog.require('shaka.text.TextEngine');\ngoog.require('shaka.util.Functional');\ngoog.require('shaka.util.LanguageUtils');\ngoog.require('shaka.util.ManifestParserUtils');\ngoog.require('shaka.util.MimeUtils');\ngoog.require('shaka.util.MultiMap');\ngoog.require('shaka.util.ObjectUtils');\ngoog.require('shaka.util.Platform');\ngoog.requireType('shaka.media.DrmEngine');\n\n\n/**\n * @summary A set of utility functions for dealing with Streams and Manifests.\n * @export\n */\nshaka.util.StreamUtils = class {\n /**\n * In case of multiple usable codecs, choose one based on lowest average\n * bandwidth and filter out the rest.\n * Also filters out variants that have too many audio channels.\n * @param {!shaka.extern.Manifest} manifest\n * @param {!Array.} preferredVideoCodecs\n * @param {!Array.} preferredAudioCodecs\n * @param {!Array.} preferredDecodingAttributes\n * @param {!Array.} preferredTextFormats\n */\n static chooseCodecsAndFilterManifest(manifest, preferredVideoCodecs,\n preferredAudioCodecs, preferredDecodingAttributes, preferredTextFormats) {\n const StreamUtils = shaka.util.StreamUtils;\n const MimeUtils = shaka.util.MimeUtils;\n\n if (preferredTextFormats.length) {\n let subset = manifest.textStreams;\n for (const textFormat of preferredTextFormats) {\n const filtered = subset.filter((textStream) => {\n if (textStream.codecs.startsWith(textFormat) ||\n textStream.mimeType.startsWith(textFormat)) {\n return true;\n }\n return false;\n });\n if (filtered.length) {\n subset = filtered;\n break;\n }\n }\n manifest.textStreams = subset;\n }\n\n let variants = manifest.variants;\n // To start, choose the codecs based on configured preferences if available.\n if (preferredVideoCodecs.length || preferredAudioCodecs.length) {\n variants = StreamUtils.choosePreferredCodecs(variants,\n preferredVideoCodecs, preferredAudioCodecs);\n }\n\n if (preferredDecodingAttributes.length) {\n // group variants by resolution and choose preferred variants only\n /** @type {!shaka.util.MultiMap.} */\n const variantsByResolutionMap = new shaka.util.MultiMap();\n for (const variant of variants) {\n variantsByResolutionMap\n .push(String(variant.video.width || 0), variant);\n }\n const bestVariants = [];\n variantsByResolutionMap.forEach((width, variantsByResolution) => {\n let highestMatch = 0;\n let matchingVariants = [];\n for (const variant of variantsByResolution) {\n const matchCount = preferredDecodingAttributes.filter(\n (attribute) => variant.decodingInfos[0][attribute],\n ).length;\n if (matchCount > highestMatch) {\n highestMatch = matchCount;\n matchingVariants = [variant];\n } else if (matchCount == highestMatch) {\n matchingVariants.push(variant);\n }\n }\n bestVariants.push(...matchingVariants);\n });\n variants = bestVariants;\n }\n\n const audioStreamsSet = new Set();\n const videoStreamsSet = new Set();\n for (const variant of variants) {\n if (variant.audio) {\n audioStreamsSet.add(variant.audio);\n }\n if (variant.video) {\n videoStreamsSet.add(variant.video);\n }\n }\n\n const audioStreams = Array.from(audioStreamsSet).sort((v1, v2) => {\n return v1.bandwidth - v2.bandwidth;\n });\n const validAudioIds = [];\n const validAudioStreamsMap = new Map();\n const getAudioId = (stream) => {\n return stream.language + (stream.channelsCount || 0) +\n (stream.audioSamplingRate || 0) + stream.roles.join(',') +\n stream.label + stream.groupId + stream.fastSwitching;\n };\n for (const stream of audioStreams) {\n const groupId = getAudioId(stream);\n const validAudioStreams = validAudioStreamsMap.get(groupId) || [];\n if (!validAudioStreams.length) {\n validAudioStreams.push(stream);\n validAudioIds.push(stream.id);\n } else {\n const previousStream = validAudioStreams[validAudioStreams.length - 1];\n const previousCodec =\n MimeUtils.getNormalizedCodec(previousStream.codecs);\n const currentCodec =\n MimeUtils.getNormalizedCodec(stream.codecs);\n if (previousCodec == currentCodec) {\n if (!stream.bandwidth || !previousStream.bandwidth ||\n stream.bandwidth > previousStream.bandwidth) {\n validAudioStreams.push(stream);\n validAudioIds.push(stream.id);\n }\n }\n }\n validAudioStreamsMap.set(groupId, validAudioStreams);\n }\n\n // Keys based in MimeUtils.getNormalizedCodec. Lower is better\n const videoCodecPreference = {\n 'vp8': 1,\n 'avc': 1,\n 'dovi-avc': 0.95,\n 'vp9': 0.9,\n 'vp09': 0.9,\n 'hevc': 0.85,\n 'dovi-hevc': 0.8,\n 'av01': 0.75,\n 'dovi-av1': 0.7,\n 'vvc': 0.65,\n };\n\n const videoStreams = Array.from(videoStreamsSet)\n .sort((v1, v2) => {\n if (!v1.bandwidth || !v2.bandwidth || v1.bandwidth == v2.bandwidth) {\n if (v1.codecs && v2.codecs && v1.codecs != v2.codecs &&\n v1.width == v2.width) {\n const v1Codecs = MimeUtils.getNormalizedCodec(v1.codecs);\n const v2Codecs = MimeUtils.getNormalizedCodec(v2.codecs);\n if (v1Codecs != v2Codecs) {\n const indexV1 = videoCodecPreference[v1Codecs] || 1;\n const indexV2 = videoCodecPreference[v2Codecs] || 1;\n return indexV1 - indexV2;\n }\n }\n return v1.width - v2.width;\n }\n return v1.bandwidth - v2.bandwidth;\n });\n\n const isChangeTypeSupported =\n shaka.media.Capabilities.isChangeTypeSupported();\n\n const validVideoIds = [];\n const validVideoStreamsMap = new Map();\n const getVideoGroupId = (stream) => {\n return Math.round(stream.frameRate || 0) + (stream.hdr || '') +\n stream.fastSwitching;\n };\n for (const stream of videoStreams) {\n const groupId = getVideoGroupId(stream);\n const validVideoStreams = validVideoStreamsMap.get(groupId) || [];\n if (!validVideoStreams.length) {\n validVideoStreams.push(stream);\n validVideoIds.push(stream.id);\n } else {\n const previousStream = validVideoStreams[validVideoStreams.length - 1];\n if (!isChangeTypeSupported) {\n const previousCodec =\n MimeUtils.getNormalizedCodec(previousStream.codecs);\n const currentCodec =\n MimeUtils.getNormalizedCodec(stream.codecs);\n if (previousCodec !== currentCodec) {\n continue;\n }\n }\n if (stream.width > previousStream.width ||\n stream.height > previousStream.height) {\n validVideoStreams.push(stream);\n validVideoIds.push(stream.id);\n } else if (stream.width == previousStream.width &&\n stream.height == previousStream.height) {\n const previousCodec =\n MimeUtils.getNormalizedCodec(previousStream.codecs);\n const currentCodec =\n MimeUtils.getNormalizedCodec(stream.codecs);\n if (previousCodec == currentCodec) {\n if (!stream.bandwidth || !previousStream.bandwidth ||\n stream.bandwidth > previousStream.bandwidth) {\n validVideoStreams.push(stream);\n validVideoIds.push(stream.id);\n }\n }\n }\n }\n validVideoStreamsMap.set(groupId, validVideoStreams);\n }\n\n // Filter out any variants that don't match, forcing AbrManager to choose\n // from a single video codec and a single audio codec possible.\n manifest.variants = manifest.variants.filter((variant) => {\n const audio = variant.audio;\n const video = variant.video;\n if (audio) {\n if (!validAudioIds.includes(audio.id)) {\n shaka.log.debug('Dropping Variant (better codec available)', variant);\n return false;\n }\n }\n if (video) {\n if (!validVideoIds.includes(video.id)) {\n shaka.log.debug('Dropping Variant (better codec available)', variant);\n return false;\n }\n }\n return true;\n });\n }\n\n /**\n * Choose the codecs by configured preferred audio and video codecs.\n *\n * @param {!Array} variants\n * @param {!Array.} preferredVideoCodecs\n * @param {!Array.} preferredAudioCodecs\n * @return {!Array}\n */\n static choosePreferredCodecs(variants, preferredVideoCodecs,\n preferredAudioCodecs) {\n let subset = variants;\n for (const videoCodec of preferredVideoCodecs) {\n const filtered = subset.filter((variant) => {\n return variant.video && variant.video.codecs.startsWith(videoCodec);\n });\n if (filtered.length) {\n subset = filtered;\n break;\n }\n }\n\n for (const audioCodec of preferredAudioCodecs) {\n const filtered = subset.filter((variant) => {\n return variant.audio && variant.audio.codecs.startsWith(audioCodec);\n });\n if (filtered.length) {\n subset = filtered;\n break;\n }\n }\n return subset;\n }\n\n /**\n * Filter the variants in |manifest| to only include the variants that meet\n * the given restrictions.\n *\n * @param {!shaka.extern.Manifest} manifest\n * @param {shaka.extern.Restrictions} restrictions\n * @param {shaka.extern.Resolution} maxHwResolution\n */\n static filterByRestrictions(manifest, restrictions, maxHwResolution) {\n manifest.variants = manifest.variants.filter((variant) => {\n return shaka.util.StreamUtils.meetsRestrictions(\n variant, restrictions, maxHwResolution);\n });\n }\n\n /**\n * @param {shaka.extern.Variant} variant\n * @param {shaka.extern.Restrictions} restrictions\n * Configured restrictions from the user.\n * @param {shaka.extern.Resolution} maxHwRes\n * The maximum resolution the hardware can handle.\n * This is applied separately from user restrictions because the setting\n * should not be easily replaced by the user's configuration.\n * @return {boolean}\n * @export\n */\n static meetsRestrictions(variant, restrictions, maxHwRes) {\n /** @type {function(number, number, number):boolean} */\n const inRange = (x, min, max) => {\n return x >= min && x <= max;\n };\n\n const video = variant.video;\n\n // |video.width| and |video.height| can be undefined, which breaks\n // the math, so make sure they are there first.\n if (video && video.width && video.height) {\n let videoWidth = video.width;\n let videoHeight = video.height;\n if (videoHeight > videoWidth) {\n // Vertical video.\n [videoWidth, videoHeight] = [videoHeight, videoWidth];\n }\n\n if (!inRange(videoWidth,\n restrictions.minWidth,\n Math.min(restrictions.maxWidth, maxHwRes.width))) {\n return false;\n }\n\n if (!inRange(videoHeight,\n restrictions.minHeight,\n Math.min(restrictions.maxHeight, maxHwRes.height))) {\n return false;\n }\n\n if (!inRange(video.width * video.height,\n restrictions.minPixels,\n restrictions.maxPixels)) {\n return false;\n }\n }\n\n // |variant.video.frameRate| can be undefined, which breaks\n // the math, so make sure they are there first.\n if (variant && variant.video && variant.video.frameRate) {\n if (!inRange(variant.video.frameRate,\n restrictions.minFrameRate,\n restrictions.maxFrameRate)) {\n return false;\n }\n }\n\n // |variant.audio.channelsCount| can be undefined, which breaks\n // the math, so make sure they are there first.\n if (variant && variant.audio && variant.audio.channelsCount) {\n if (!inRange(variant.audio.channelsCount,\n restrictions.minChannelsCount,\n restrictions.maxChannelsCount)) {\n return false;\n }\n }\n\n if (!inRange(variant.bandwidth,\n restrictions.minBandwidth,\n restrictions.maxBandwidth)) {\n return false;\n }\n\n return true;\n }\n\n\n /**\n * @param {!Array.} variants\n * @param {shaka.extern.Restrictions} restrictions\n * @param {shaka.extern.Resolution} maxHwRes\n * @return {boolean} Whether the tracks changed.\n */\n static applyRestrictions(variants, restrictions, maxHwRes) {\n let tracksChanged = false;\n\n for (const variant of variants) {\n const originalAllowed = variant.allowedByApplication;\n variant.allowedByApplication = shaka.util.StreamUtils.meetsRestrictions(\n variant, restrictions, maxHwRes);\n\n if (originalAllowed != variant.allowedByApplication) {\n tracksChanged = true;\n }\n }\n\n return tracksChanged;\n }\n\n\n /**\n * Alters the given Manifest to filter out any unplayable streams.\n *\n * @param {shaka.media.DrmEngine} drmEngine\n * @param {shaka.extern.Manifest} manifest\n * @param {!Array=} preferredKeySystems\n */\n static async filterManifest(drmEngine, manifest, preferredKeySystems = []) {\n await shaka.util.StreamUtils.filterManifestByMediaCapabilities(\n drmEngine, manifest, manifest.offlineSessionIds.length > 0,\n preferredKeySystems);\n shaka.util.StreamUtils.filterTextStreams_(manifest);\n await shaka.util.StreamUtils.filterImageStreams_(manifest);\n }\n\n\n /**\n * Alters the given Manifest to filter out any streams unsupported by the\n * platform via MediaCapabilities.decodingInfo() API.\n *\n * @param {shaka.media.DrmEngine} drmEngine\n * @param {shaka.extern.Manifest} manifest\n * @param {boolean} usePersistentLicenses\n * @param {!Array} preferredKeySystems\n */\n static async filterManifestByMediaCapabilities(\n drmEngine, manifest, usePersistentLicenses, preferredKeySystems) {\n goog.asserts.assert(navigator.mediaCapabilities,\n 'MediaCapabilities should be valid.');\n\n if (shaka.util.Platform.isXboxOne()) {\n shaka.util.StreamUtils.overrideDolbyVisionCodecs(manifest.variants);\n }\n await shaka.util.StreamUtils.getDecodingInfosForVariants(\n manifest.variants, usePersistentLicenses, /* srcEquals= */ false,\n preferredKeySystems);\n\n let keySystem = null;\n if (drmEngine) {\n const drmInfo = drmEngine.getDrmInfo();\n if (drmInfo) {\n keySystem = drmInfo.keySystem;\n }\n }\n\n const StreamUtils = shaka.util.StreamUtils;\n\n manifest.variants = manifest.variants.filter((variant) => {\n const supported = StreamUtils.checkVariantSupported_(variant, keySystem);\n // Filter out all unsupported variants.\n if (!supported) {\n shaka.log.debug('Dropping variant - not compatible with platform',\n StreamUtils.getVariantSummaryString_(variant));\n }\n return supported;\n });\n }\n\n\n /**\n * Maps Dolby Vision codecs to H.264 and H.265 equivalents as a workaround\n * to make Dolby Vision playback work on some platforms.\n *\n * Mapping is done according to the relevant Dolby documentation found here:\n * https://professionalsupport.dolby.com/s/article/How-to-signal-Dolby-Vision-in-MPEG-DASH?language=en_US\n * @param {!Array} variants\n */\n static overrideDolbyVisionCodecs(variants) {\n /** @type {!Object} */\n const codecMap = {\n 'dvav': 'avc3',\n 'dva1': 'avc1',\n 'dvhe': 'hev1',\n 'dvh1': 'hvc1',\n 'dvc1': 'vvc1',\n 'dvi1': 'vvi1',\n };\n /** @type {!Set} */\n const streams = new Set();\n for (const variant of variants) {\n if (variant.video) {\n streams.add(variant.video);\n }\n }\n for (const video of streams) {\n for (const dvCodec of Object.keys(codecMap)) {\n if (video.codecs.includes(dvCodec)) {\n video.codecs = video.codecs.replace(dvCodec, codecMap[dvCodec]);\n break;\n }\n }\n }\n }\n\n\n /**\n * @param {!shaka.extern.Variant} variant\n * @param {?string} keySystem\n * @return {boolean}\n * @private\n */\n static checkVariantSupported_(variant, keySystem) {\n const ContentType = shaka.util.ManifestParserUtils.ContentType;\n const Capabilities = shaka.media.Capabilities;\n const ManifestParserUtils = shaka.util.ManifestParserUtils;\n const MimeUtils = shaka.util.MimeUtils;\n const StreamUtils = shaka.util.StreamUtils;\n\n const isXboxOne = shaka.util.Platform.isXboxOne();\n const isFirefoxAndroid = shaka.util.Platform.isFirefox() &&\n shaka.util.Platform.isAndroid();\n\n // See: https://github.com/shaka-project/shaka-player/issues/3860\n const video = variant.video;\n const videoWidth = (video && video.width) || 0;\n const videoHeight = (video && video.height) || 0;\n\n // See: https://github.com/shaka-project/shaka-player/issues/3380\n // Note: it makes sense to drop early\n if (isXboxOne && video && (videoWidth > 1920 || videoHeight > 1080) &&\n (video.codecs.includes('avc1.') || video.codecs.includes('avc3.'))) {\n return false;\n }\n\n if (video) {\n let videoCodecs = StreamUtils.getCorrectVideoCodecs(video.codecs);\n // For multiplexed streams. Here we must check the audio of the\n // stream to see if it is compatible.\n if (video.codecs.includes(',')) {\n const allCodecs = video.codecs.split(',');\n\n videoCodecs = ManifestParserUtils.guessCodecs(\n ContentType.VIDEO, allCodecs);\n videoCodecs = StreamUtils.getCorrectVideoCodecs(videoCodecs);\n let audioCodecs = ManifestParserUtils.guessCodecs(\n ContentType.AUDIO, allCodecs);\n audioCodecs = StreamUtils.getCorrectAudioCodecs(\n audioCodecs, video.mimeType);\n\n const audioFullType = MimeUtils.getFullOrConvertedType(\n video.mimeType, audioCodecs, ContentType.AUDIO);\n\n if (!Capabilities.isTypeSupported(audioFullType)) {\n return false;\n }\n\n // Update the codec string with the (possibly) converted codecs.\n videoCodecs = [videoCodecs, audioCodecs].join(',');\n }\n\n const fullType = MimeUtils.getFullOrConvertedType(\n video.mimeType, videoCodecs, ContentType.VIDEO);\n\n if (!Capabilities.isTypeSupported(fullType)) {\n return false;\n }\n\n // Update the codec string with the (possibly) converted codecs.\n video.codecs = videoCodecs;\n }\n\n const audio = variant.audio;\n\n // See: https://github.com/shaka-project/shaka-player/issues/6111\n // It seems that Firefox Android reports that it supports\n // Opus + Widevine, but it is not actually supported.\n // It makes sense to drop early.\n if (isFirefoxAndroid && audio && audio.encrypted &&\n audio.codecs.toLowerCase().includes('opus')) {\n return false;\n }\n\n if (audio) {\n const codecs = StreamUtils.getCorrectAudioCodecs(\n audio.codecs, audio.mimeType);\n const fullType = MimeUtils.getFullOrConvertedType(\n audio.mimeType, codecs, ContentType.AUDIO);\n\n if (!Capabilities.isTypeSupported(fullType)) {\n return false;\n }\n\n // Update the codec string with the (possibly) converted codecs.\n audio.codecs = codecs;\n }\n\n return variant.decodingInfos.some((decodingInfo) => {\n if (!decodingInfo.supported) {\n return false;\n }\n if (keySystem) {\n const keySystemAccess = decodingInfo.keySystemAccess;\n if (keySystemAccess) {\n if (keySystemAccess.keySystem != keySystem) {\n return false;\n }\n }\n }\n return true;\n });\n }\n\n\n /**\n * Constructs a string out of an object, similar to the JSON.stringify method.\n * Unlike that method, this guarantees that the order of the keys is\n * alphabetical, so it can be used as a way to reliably compare two objects.\n *\n * @param {!Object} obj\n * @return {string}\n * @private\n */\n static alphabeticalKeyOrderStringify_(obj) {\n const keys = [];\n for (const key in obj) {\n keys.push(key);\n }\n // Alphabetically sort the keys, so they will be in a reliable order.\n keys.sort();\n\n const terms = [];\n for (const key of keys) {\n const escapedKey = JSON.stringify(key);\n const value = obj[key];\n if (value instanceof Object) {\n const stringifiedValue =\n shaka.util.StreamUtils.alphabeticalKeyOrderStringify_(value);\n terms.push(escapedKey + ':' + stringifiedValue);\n } else {\n const escapedValue = JSON.stringify(value);\n terms.push(escapedKey + ':' + escapedValue);\n }\n }\n return '{' + terms.join(',') + '}';\n }\n\n\n /**\n * Queries mediaCapabilities for the decoding info for that decoding config,\n * and assigns it to the given variant.\n * If that query has been done before, instead return a cached result.\n * @param {!shaka.extern.Variant} variant\n * @param {!Array.} decodingConfigs\n * @private\n */\n static async getDecodingInfosForVariant_(variant, decodingConfigs) {\n /**\n * @param {?MediaCapabilitiesDecodingInfo} a\n * @param {!MediaCapabilitiesDecodingInfo} b\n * @return {!MediaCapabilitiesDecodingInfo}\n */\n const merge = (a, b) => {\n if (!a) {\n return b;\n } else {\n const res = shaka.util.ObjectUtils.shallowCloneObject(a);\n res.supported = a.supported && b.supported;\n res.powerEfficient = a.powerEfficient && b.powerEfficient;\n res.smooth = a.smooth && b.smooth;\n if (b.keySystemAccess && !res.keySystemAccess) {\n res.keySystemAccess = b.keySystemAccess;\n }\n return res;\n }\n };\n\n const StreamUtils = shaka.util.StreamUtils;\n /** @type {?MediaCapabilitiesDecodingInfo} */\n let finalResult = null;\n const promises = [];\n for (const decodingConfig of decodingConfigs) {\n const cacheKey =\n StreamUtils.alphabeticalKeyOrderStringify_(decodingConfig);\n\n const cache = StreamUtils.decodingConfigCache_;\n if (cache[cacheKey]) {\n shaka.log.v2('Using cached results of mediaCapabilities.decodingInfo',\n 'for key', cacheKey);\n finalResult = merge(finalResult, cache[cacheKey]);\n } else {\n // Do a final pass-over of the decoding config: if a given stream has\n // multiple codecs, that suggests that it switches between those codecs\n // at points of the go-through.\n // mediaCapabilities by itself will report \"not supported\" when you\n // put in multiple different codecs, so each has to be checked\n // individually. So check each and take the worst result, to determine\n // overall variant compatibility.\n promises.push(StreamUtils\n .checkEachDecodingConfigCombination_(decodingConfig).then((res) => {\n /** @type {?MediaCapabilitiesDecodingInfo} */\n let acc = null;\n for (const result of (res || [])) {\n acc = merge(acc, result);\n }\n if (acc) {\n cache[cacheKey] = acc;\n finalResult = merge(finalResult, acc);\n }\n }));\n }\n }\n await Promise.all(promises);\n if (finalResult) {\n variant.decodingInfos.push(finalResult);\n }\n }\n\n /**\n * @param {!MediaDecodingConfiguration} decodingConfig\n * @return {!Promise.>}\n * @private\n */\n static checkEachDecodingConfigCombination_(decodingConfig) {\n let videoCodecs = [''];\n if (decodingConfig.video) {\n videoCodecs = shaka.util.MimeUtils.getCodecs(\n decodingConfig.video.contentType).split(',');\n }\n let audioCodecs = [''];\n if (decodingConfig.audio) {\n audioCodecs = shaka.util.MimeUtils.getCodecs(\n decodingConfig.audio.contentType).split(',');\n }\n const promises = [];\n for (const videoCodec of videoCodecs) {\n for (const audioCodec of audioCodecs) {\n const copy = shaka.util.ObjectUtils.cloneObject(decodingConfig);\n if (decodingConfig.video) {\n const mimeType = shaka.util.MimeUtils.getBasicType(\n copy.video.contentType);\n copy.video.contentType = shaka.util.MimeUtils.getFullType(\n mimeType, videoCodec);\n }\n if (decodingConfig.audio) {\n const mimeType = shaka.util.MimeUtils.getBasicType(\n copy.audio.contentType);\n copy.audio.contentType = shaka.util.MimeUtils.getFullType(\n mimeType, audioCodec);\n }\n promises.push(new Promise((resolve, reject) => {\n navigator.mediaCapabilities.decodingInfo(copy).then((res) => {\n resolve(res);\n }).catch(reject);\n }));\n }\n }\n return Promise.all(promises).catch((e) => {\n shaka.log.info('MediaCapabilities.decodingInfo() failed.',\n JSON.stringify(decodingConfig), e);\n return null;\n });\n }\n\n\n /**\n * Get the decodingInfo results of the variants via MediaCapabilities.\n * This should be called after the DrmEngine is created and configured, and\n * before DrmEngine sets the mediaKeys.\n *\n * @param {!Array.} variants\n * @param {boolean} usePersistentLicenses\n * @param {boolean} srcEquals\n * @param {!Array} preferredKeySystems\n * @exportDoc\n */\n static async getDecodingInfosForVariants(variants, usePersistentLicenses,\n srcEquals, preferredKeySystems) {\n const gotDecodingInfo = variants.some((variant) =>\n variant.decodingInfos.length);\n if (gotDecodingInfo) {\n shaka.log.debug('Already got the variants\\' decodingInfo.');\n return;\n }\n\n // Try to get preferred key systems first to avoid unneeded calls to CDM.\n for (const preferredKeySystem of preferredKeySystems) {\n let keySystemSatisfied = false;\n for (const variant of variants) {\n /** @type {!Array.>} */\n const decodingConfigs = shaka.util.StreamUtils.getDecodingConfigs_(\n variant, usePersistentLicenses, srcEquals)\n .filter((configs) => {\n // All configs in a batch will have the same keySystem.\n const config = configs[0];\n const keySystem = config.keySystemConfiguration &&\n config.keySystemConfiguration.keySystem;\n return keySystem === preferredKeySystem;\n });\n\n // The reason we are performing this await in a loop rather than\n // batching into a `promise.all` is performance related.\n // https://github.com/shaka-project/shaka-player/pull/4708#discussion_r1022581178\n for (const configs of decodingConfigs) {\n // eslint-disable-next-line no-await-in-loop\n await shaka.util.StreamUtils.getDecodingInfosForVariant_(\n variant, configs);\n }\n if (variant.decodingInfos.length) {\n keySystemSatisfied = true;\n }\n } // for (const variant of variants)\n if (keySystemSatisfied) {\n // Return if any preferred key system is already satisfied.\n return;\n }\n } // for (const preferredKeySystem of preferredKeySystems)\n\n for (const variant of variants) {\n /** @type {!Array.>} */\n const decodingConfigs = shaka.util.StreamUtils.getDecodingConfigs_(\n variant, usePersistentLicenses, srcEquals)\n .filter((configs) => {\n // All configs in a batch will have the same keySystem.\n const config = configs[0];\n const keySystem = config.keySystemConfiguration &&\n config.keySystemConfiguration.keySystem;\n // Avoid checking preferred systems twice.\n return !keySystem || !preferredKeySystems.includes(keySystem);\n });\n\n // The reason we are performing this await in a loop rather than\n // batching into a `promise.all` is performance related.\n // https://github.com/shaka-project/shaka-player/pull/4708#discussion_r1022581178\n for (const configs of decodingConfigs) {\n // eslint-disable-next-line no-await-in-loop\n await shaka.util.StreamUtils.getDecodingInfosForVariant_(\n variant, configs);\n }\n }\n }\n\n\n /**\n * Generate a batch of MediaDecodingConfiguration objects to get the\n * decodingInfo results for each variant.\n * Each batch shares the same DRM information, and represents the various\n * fullMimeType combinations of the streams.\n * @param {!shaka.extern.Variant} variant\n * @param {boolean} usePersistentLicenses\n * @param {boolean} srcEquals\n * @return {!Array.>}\n * @private\n */\n static getDecodingConfigs_(variant, usePersistentLicenses, srcEquals) {\n const audio = variant.audio;\n const video = variant.video;\n\n const ContentType = shaka.util.ManifestParserUtils.ContentType;\n const ManifestParserUtils = shaka.util.ManifestParserUtils;\n const MimeUtils = shaka.util.MimeUtils;\n const StreamUtils = shaka.util.StreamUtils;\n\n const videoConfigs = [];\n const audioConfigs = [];\n if (video) {\n for (const fullMimeType of video.fullMimeTypes) {\n let videoCodecs = MimeUtils.getCodecs(fullMimeType);\n\n // For multiplexed streams with audio+video codecs, the config should\n // have AudioConfiguration and VideoConfiguration.\n // We ignore the multiplexed audio when there is normal audio also.\n if (videoCodecs.includes(',') && !audio) {\n const allCodecs = videoCodecs.split(',');\n const baseMimeType = MimeUtils.getBasicType(fullMimeType);\n\n videoCodecs = ManifestParserUtils.guessCodecs(\n ContentType.VIDEO, allCodecs);\n\n let audioCodecs = ManifestParserUtils.guessCodecs(\n ContentType.AUDIO, allCodecs);\n audioCodecs = StreamUtils.getCorrectAudioCodecs(\n audioCodecs, baseMimeType);\n\n const audioFullType = MimeUtils.getFullOrConvertedType(\n baseMimeType, audioCodecs, ContentType.AUDIO);\n\n audioConfigs.push({\n contentType: audioFullType,\n channels: 2,\n bitrate: variant.bandwidth || 1,\n samplerate: 1,\n spatialRendering: false,\n });\n }\n\n videoCodecs = StreamUtils.getCorrectVideoCodecs(videoCodecs);\n const fullType = MimeUtils.getFullOrConvertedType(\n MimeUtils.getBasicType(fullMimeType), videoCodecs,\n ContentType.VIDEO);\n\n // VideoConfiguration\n const videoConfig = {\n contentType: fullType,\n\n // NOTE: Some decoders strictly check the width and height fields and\n // won't decode smaller than 64x64. So if we don't have this info (as\n // is the case in some of our simpler tests), assume a 64x64\n // resolution to fill in this required field for MediaCapabilities.\n //\n // This became an issue specifically on Firefox on M1 Macs.\n width: video.width || 64,\n height: video.height || 64,\n\n bitrate: video.bandwidth || variant.bandwidth || 1,\n // framerate must be greater than 0, otherwise the config is invalid.\n framerate: video.frameRate || 1,\n };\n if (video.hdr) {\n switch (video.hdr) {\n case 'SDR':\n videoConfig.transferFunction = 'srgb';\n break;\n case 'PQ':\n videoConfig.transferFunction = 'pq';\n break;\n case 'HLG':\n videoConfig.transferFunction = 'hlg';\n break;\n }\n }\n if (video.colorGamut) {\n videoConfig.colorGamut = video.colorGamut;\n }\n videoConfigs.push(videoConfig);\n }\n }\n if (audio) {\n for (const fullMimeType of audio.fullMimeTypes) {\n const baseMimeType = MimeUtils.getBasicType(fullMimeType);\n const codecs = StreamUtils.getCorrectAudioCodecs(\n MimeUtils.getCodecs(fullMimeType), baseMimeType);\n const fullType = MimeUtils.getFullOrConvertedType(\n baseMimeType, codecs, ContentType.AUDIO);\n\n // AudioConfiguration\n audioConfigs.push({\n contentType: fullType,\n channels: audio.channelsCount || 2,\n bitrate: audio.bandwidth || variant.bandwidth || 1,\n samplerate: audio.audioSamplingRate || 1,\n spatialRendering: audio.spatialAudio,\n });\n }\n }\n\n // Generate each combination of video and audio config as a separate\n // MediaDecodingConfiguration, inside the main \"batch\".\n /** @type {!Array.} */\n const mediaDecodingConfigBatch = [];\n if (videoConfigs.length == 0) {\n videoConfigs.push(null);\n }\n if (audioConfigs.length == 0) {\n audioConfigs.push(null);\n }\n for (const videoConfig of videoConfigs) {\n for (const audioConfig of audioConfigs) {\n /** @type {!MediaDecodingConfiguration} */\n const mediaDecodingConfig = {\n type: srcEquals ? 'file' : 'media-source',\n };\n if (videoConfig) {\n mediaDecodingConfig.video = videoConfig;\n }\n if (audioConfig) {\n mediaDecodingConfig.audio = audioConfig;\n }\n mediaDecodingConfigBatch.push(mediaDecodingConfig);\n }\n }\n\n const videoDrmInfos = variant.video ? variant.video.drmInfos : [];\n const audioDrmInfos = variant.audio ? variant.audio.drmInfos : [];\n const allDrmInfos = videoDrmInfos.concat(audioDrmInfos);\n\n // Return a list containing the mediaDecodingConfig for unencrypted variant.\n if (!allDrmInfos.length) {\n return [mediaDecodingConfigBatch];\n }\n\n // A list of MediaDecodingConfiguration objects created for the variant.\n const configs = [];\n\n // Get all the drm info so that we can avoid using nested loops when we\n // just need the drm info.\n const drmInfoByKeySystems = new Map();\n for (const info of allDrmInfos) {\n if (!drmInfoByKeySystems.get(info.keySystem)) {\n drmInfoByKeySystems.set(info.keySystem, []);\n }\n drmInfoByKeySystems.get(info.keySystem).push(info);\n }\n\n const persistentState =\n usePersistentLicenses ? 'required' : 'optional';\n const sessionTypes =\n usePersistentLicenses ? ['persistent-license'] : ['temporary'];\n\n for (const keySystem of drmInfoByKeySystems.keys()) {\n const modifiedMediaDecodingConfigBatch = [];\n for (const base of mediaDecodingConfigBatch) {\n // Create a copy of the mediaDecodingConfig.\n const config = /** @type {!MediaDecodingConfiguration} */\n (Object.assign({}, base));\n\n const drmInfos = drmInfoByKeySystems.get(keySystem);\n\n /** @type {!MediaCapabilitiesKeySystemConfiguration} */\n const keySystemConfig = {\n keySystem: keySystem,\n initDataType: 'cenc',\n persistentState: persistentState,\n distinctiveIdentifier: 'optional',\n sessionTypes: sessionTypes,\n };\n\n for (const info of drmInfos) {\n if (info.initData && info.initData.length) {\n const initDataTypes = new Set();\n for (const initData of info.initData) {\n initDataTypes.add(initData.initDataType);\n }\n if (initDataTypes.size > 1) {\n shaka.log.v2('DrmInfo contains more than one initDataType,',\n 'and we use the initDataType of the first initData.',\n info);\n }\n keySystemConfig.initDataType = info.initData[0].initDataType;\n }\n\n if (info.distinctiveIdentifierRequired) {\n keySystemConfig.distinctiveIdentifier = 'required';\n }\n if (info.persistentStateRequired) {\n keySystemConfig.persistentState = 'required';\n }\n if (info.sessionType) {\n keySystemConfig.sessionTypes = [info.sessionType];\n }\n\n if (audio) {\n if (!keySystemConfig.audio) {\n // KeySystemTrackConfiguration\n keySystemConfig.audio = {\n robustness: info.audioRobustness,\n };\n if (info.encryptionScheme) {\n keySystemConfig.audio.encryptionScheme = info.encryptionScheme;\n }\n } else {\n if (info.encryptionScheme) {\n keySystemConfig.audio.encryptionScheme =\n keySystemConfig.audio.encryptionScheme ||\n info.encryptionScheme;\n }\n keySystemConfig.audio.robustness =\n keySystemConfig.audio.robustness ||\n info.audioRobustness;\n }\n // See: https://github.com/shaka-project/shaka-player/issues/4659\n if (keySystemConfig.audio.robustness == '') {\n delete keySystemConfig.audio.robustness;\n }\n }\n\n if (video) {\n if (!keySystemConfig.video) {\n // KeySystemTrackConfiguration\n keySystemConfig.video = {\n robustness: info.videoRobustness,\n };\n if (info.encryptionScheme) {\n keySystemConfig.video.encryptionScheme = info.encryptionScheme;\n }\n } else {\n if (info.encryptionScheme) {\n keySystemConfig.video.encryptionScheme =\n keySystemConfig.video.encryptionScheme ||\n info.encryptionScheme;\n }\n keySystemConfig.video.robustness =\n keySystemConfig.video.robustness ||\n info.videoRobustness;\n }\n // See: https://github.com/shaka-project/shaka-player/issues/4659\n if (keySystemConfig.video.robustness == '') {\n delete keySystemConfig.video.robustness;\n }\n }\n }\n config.keySystemConfiguration = keySystemConfig;\n modifiedMediaDecodingConfigBatch.push(config);\n }\n configs.push(modifiedMediaDecodingConfigBatch);\n }\n return configs;\n }\n\n\n /**\n * Generates the correct audio codec for MediaDecodingConfiguration and\n * for MediaSource.isTypeSupported.\n * @param {string} codecs\n * @param {string} mimeType\n * @return {string}\n */\n static getCorrectAudioCodecs(codecs, mimeType) {\n // According to RFC 6381 section 3.3, 'fLaC' is actually the correct\n // codec string. We still need to map it to 'flac', as some browsers\n // currently don't support 'fLaC', while 'flac' is supported by most\n // major browsers.\n // See https://bugs.chromium.org/p/chromium/issues/detail?id=1422728\n if (codecs.toLowerCase() == 'flac') {\n if (!shaka.util.Platform.isSafari()) {\n return 'flac';\n } else {\n return 'fLaC';\n }\n }\n\n // The same is true for 'Opus'.\n if (codecs.toLowerCase() === 'opus') {\n if (!shaka.util.Platform.isSafari()) {\n return 'opus';\n } else {\n if (shaka.util.MimeUtils.getContainerType(mimeType) == 'mp4') {\n return 'Opus';\n } else {\n return 'opus';\n }\n }\n }\n\n return codecs;\n }\n\n\n /**\n * Generates the correct video codec for MediaDecodingConfiguration and\n * for MediaSource.isTypeSupported.\n * @param {string} codec\n * @return {string}\n */\n static getCorrectVideoCodecs(codec) {\n if (codec.includes('avc1')) {\n // Convert avc1 codec string from RFC-4281 to RFC-6381 for\n // MediaSource.isTypeSupported\n // Example, convert avc1.66.30 to avc1.42001e (0x42 == 66 and 0x1e == 30)\n const avcdata = codec.split('.');\n if (avcdata.length == 3) {\n let result = avcdata.shift() + '.';\n result += parseInt(avcdata.shift(), 10).toString(16);\n result +=\n ('000' + parseInt(avcdata.shift(), 10).toString(16)).slice(-4);\n return result;\n }\n } else if (codec == 'vp9') {\n // MediaCapabilities supports 'vp09...' codecs, but not 'vp9'. Translate\n // vp9 codec strings into 'vp09...', to allow such content to play with\n // mediaCapabilities enabled.\n // This means profile 0, level 4.1, 8-bit color. This supports 1080p @\n // 60Hz. See https://en.wikipedia.org/wiki/VP9#Levels\n //\n // If we don't have more detailed codec info, assume this profile and\n // level because it's high enough to likely accommodate the parameters we\n // do have, such as width and height. If an implementation is checking\n // the profile and level very strictly, we want older VP9 content to\n // still work to some degree. But we don't want to set a level so high\n // that it is rejected by a hardware decoder that can't handle the\n // maximum requirements of the level.\n //\n // This became an issue specifically on Firefox on M1 Macs.\n return 'vp09.00.41.08';\n }\n return codec;\n }\n\n\n /**\n * Alters the given Manifest to filter out any streams uncompatible with the\n * current variant.\n *\n * @param {?shaka.extern.Variant} currentVariant\n * @param {shaka.extern.Manifest} manifest\n */\n static filterManifestByCurrentVariant(currentVariant, manifest) {\n const StreamUtils = shaka.util.StreamUtils;\n manifest.variants = manifest.variants.filter((variant) => {\n const audio = variant.audio;\n const video = variant.video;\n if (audio && currentVariant && currentVariant.audio) {\n if (!StreamUtils.areStreamsCompatible_(audio, currentVariant.audio)) {\n shaka.log.debug('Dropping variant - not compatible with active audio',\n 'active audio',\n StreamUtils.getStreamSummaryString_(currentVariant.audio),\n 'variant.audio',\n StreamUtils.getStreamSummaryString_(audio));\n return false;\n }\n }\n\n if (video && currentVariant && currentVariant.video) {\n if (!StreamUtils.areStreamsCompatible_(video, currentVariant.video)) {\n shaka.log.debug('Dropping variant - not compatible with active video',\n 'active video',\n StreamUtils.getStreamSummaryString_(currentVariant.video),\n 'variant.video',\n StreamUtils.getStreamSummaryString_(video));\n return false;\n }\n }\n\n return true;\n });\n }\n\n /**\n * Alters the given Manifest to filter out any unsupported text streams.\n *\n * @param {shaka.extern.Manifest} manifest\n * @private\n */\n static filterTextStreams_(manifest) {\n // Filter text streams.\n manifest.textStreams = manifest.textStreams.filter((stream) => {\n const fullMimeType = shaka.util.MimeUtils.getFullType(\n stream.mimeType, stream.codecs);\n const keep = shaka.text.TextEngine.isTypeSupported(fullMimeType);\n\n if (!keep) {\n shaka.log.debug('Dropping text stream. Is not supported by the ' +\n 'platform.', stream);\n }\n\n return keep;\n });\n }\n\n\n /**\n * Alters the given Manifest to filter out any unsupported image streams.\n *\n * @param {shaka.extern.Manifest} manifest\n * @private\n */\n static async filterImageStreams_(manifest) {\n const imageStreams = [];\n for (const stream of manifest.imageStreams) {\n let mimeType = stream.mimeType;\n if (mimeType == 'application/mp4' && stream.codecs == 'mjpg') {\n mimeType = 'image/jpg';\n }\n if (!shaka.util.StreamUtils.supportedImageMimeTypes_.has(mimeType)) {\n const minImage = shaka.util.StreamUtils.minImage_.get(mimeType);\n if (minImage) {\n // eslint-disable-next-line no-await-in-loop\n const res = await shaka.util.StreamUtils.isImageSupported_(minImage);\n shaka.util.StreamUtils.supportedImageMimeTypes_.set(mimeType, res);\n } else {\n shaka.util.StreamUtils.supportedImageMimeTypes_.set(mimeType, false);\n }\n }\n\n const keep =\n shaka.util.StreamUtils.supportedImageMimeTypes_.get(mimeType);\n\n if (!keep) {\n shaka.log.debug('Dropping image stream. Is not supported by the ' +\n 'platform.', stream);\n } else {\n imageStreams.push(stream);\n }\n }\n manifest.imageStreams = imageStreams;\n }\n\n /**\n * @param {string} minImage\n * @return {!Promise.}\n * @private\n */\n static isImageSupported_(minImage) {\n return new Promise((resolve) => {\n const imageElement = /** @type {HTMLImageElement} */(new Image());\n imageElement.src = minImage;\n if ('decode' in imageElement) {\n imageElement.decode().then(() => {\n resolve(true);\n }).catch(() => {\n resolve(false);\n });\n } else {\n imageElement.onload = imageElement.onerror = () => {\n resolve(imageElement.height === 2);\n };\n }\n });\n }\n\n /**\n * @param {shaka.extern.Stream} s0\n * @param {shaka.extern.Stream} s1\n * @return {boolean}\n * @private\n */\n static areStreamsCompatible_(s0, s1) {\n // Basic mime types and basic codecs need to match.\n // For example, we can't adapt between WebM and MP4,\n // nor can we adapt between mp4a.* to ec-3.\n // We can switch between text types on the fly,\n // so don't run this check on text.\n if (s0.mimeType != s1.mimeType) {\n return false;\n }\n\n if (s0.codecs.split('.')[0] != s1.codecs.split('.')[0]) {\n return false;\n }\n\n return true;\n }\n\n\n /**\n * @param {shaka.extern.Variant} variant\n * @return {shaka.extern.Track}\n */\n static variantToTrack(variant) {\n /** @type {?shaka.extern.Stream} */\n const audio = variant.audio;\n /** @type {?shaka.extern.Stream} */\n const video = variant.video;\n\n /** @type {?string} */\n const audioMimeType = audio ? audio.mimeType : null;\n /** @type {?string} */\n const videoMimeType = video ? video.mimeType : null;\n\n /** @type {?string} */\n const audioCodec = audio ? audio.codecs : null;\n /** @type {?string} */\n const videoCodec = video ? video.codecs : null;\n\n /** @type {!Array.} */\n const codecs = [];\n if (videoCodec) {\n codecs.push(videoCodec);\n }\n if (audioCodec) {\n codecs.push(audioCodec);\n }\n\n /** @type {!Array.} */\n const mimeTypes = [];\n if (video) {\n mimeTypes.push(video.mimeType);\n }\n if (audio) {\n mimeTypes.push(audio.mimeType);\n }\n /** @type {?string} */\n const mimeType = mimeTypes[0] || null;\n\n /** @type {!Array.} */\n const kinds = [];\n if (audio) {\n kinds.push(audio.kind);\n }\n if (video) {\n kinds.push(video.kind);\n }\n /** @type {?string} */\n const kind = kinds[0] || null;\n\n /** @type {!Set.} */\n const roles = new Set();\n if (audio) {\n for (const role of audio.roles) {\n roles.add(role);\n }\n }\n if (video) {\n for (const role of video.roles) {\n roles.add(role);\n }\n }\n\n /** @type {shaka.extern.Track} */\n const track = {\n id: variant.id,\n active: false,\n type: 'variant',\n bandwidth: variant.bandwidth,\n language: variant.language,\n label: null,\n kind: kind,\n width: null,\n height: null,\n frameRate: null,\n pixelAspectRatio: null,\n hdr: null,\n colorGamut: null,\n videoLayout: null,\n mimeType: mimeType,\n audioMimeType: audioMimeType,\n videoMimeType: videoMimeType,\n codecs: codecs.join(', '),\n audioCodec: audioCodec,\n videoCodec: videoCodec,\n primary: variant.primary,\n roles: Array.from(roles),\n audioRoles: null,\n forced: false,\n videoId: null,\n audioId: null,\n channelsCount: null,\n audioSamplingRate: null,\n spatialAudio: false,\n tilesLayout: null,\n audioBandwidth: null,\n videoBandwidth: null,\n originalVideoId: null,\n originalAudioId: null,\n originalTextId: null,\n originalImageId: null,\n accessibilityPurpose: null,\n originalLanguage: null,\n };\n\n if (video) {\n track.videoId = video.id;\n track.originalVideoId = video.originalId;\n track.width = video.width || null;\n track.height = video.height || null;\n track.frameRate = video.frameRate || null;\n track.pixelAspectRatio = video.pixelAspectRatio || null;\n track.videoBandwidth = video.bandwidth || null;\n track.hdr = video.hdr || null;\n track.colorGamut = video.colorGamut || null;\n track.videoLayout = video.videoLayout || null;\n\n if (videoCodec.includes(',')) {\n track.channelsCount = video.channelsCount;\n track.audioSamplingRate = video.audioSamplingRate;\n track.spatialAudio = video.spatialAudio;\n track.originalLanguage = video.originalLanguage;\n }\n }\n\n if (audio) {\n track.audioId = audio.id;\n track.originalAudioId = audio.originalId;\n track.channelsCount = audio.channelsCount;\n track.audioSamplingRate = audio.audioSamplingRate;\n track.audioBandwidth = audio.bandwidth || null;\n track.spatialAudio = audio.spatialAudio;\n track.label = audio.label;\n track.audioRoles = audio.roles;\n track.accessibilityPurpose = audio.accessibilityPurpose;\n track.originalLanguage = audio.originalLanguage;\n }\n\n return track;\n }\n\n\n /**\n * @param {shaka.extern.Stream} stream\n * @return {shaka.extern.Track}\n */\n static textStreamToTrack(stream) {\n const ContentType = shaka.util.ManifestParserUtils.ContentType;\n\n /** @type {shaka.extern.Track} */\n const track = {\n id: stream.id,\n active: false,\n type: ContentType.TEXT,\n bandwidth: 0,\n language: stream.language,\n label: stream.label,\n kind: stream.kind || null,\n width: null,\n height: null,\n frameRate: null,\n pixelAspectRatio: null,\n hdr: null,\n colorGamut: null,\n videoLayout: null,\n mimeType: stream.mimeType,\n audioMimeType: null,\n videoMimeType: null,\n codecs: stream.codecs || null,\n audioCodec: null,\n videoCodec: null,\n primary: stream.primary,\n roles: stream.roles,\n audioRoles: null,\n forced: stream.forced,\n videoId: null,\n audioId: null,\n channelsCount: null,\n audioSamplingRate: null,\n spatialAudio: false,\n tilesLayout: null,\n audioBandwidth: null,\n videoBandwidth: null,\n originalVideoId: null,\n originalAudioId: null,\n originalTextId: stream.originalId,\n originalImageId: null,\n accessibilityPurpose: stream.accessibilityPurpose,\n originalLanguage: stream.originalLanguage,\n };\n\n return track;\n }\n\n\n /**\n * @param {shaka.extern.Stream} stream\n * @return {shaka.extern.Track}\n */\n static imageStreamToTrack(stream) {\n const ContentType = shaka.util.ManifestParserUtils.ContentType;\n\n let width = stream.width || null;\n let height = stream.height || null;\n\n // The stream width and height represent the size of the entire thumbnail\n // sheet, so divide by the layout.\n let reference = null;\n // Note: segmentIndex is built by default for HLS, but not for DASH, but\n // in DASH this information comes at the stream level and not at the\n // segment level.\n if (stream.segmentIndex) {\n reference = stream.segmentIndex.earliestReference();\n }\n let layout = stream.tilesLayout;\n if (reference) {\n layout = reference.getTilesLayout() || layout;\n }\n if (layout && width != null) {\n width /= Number(layout.split('x')[0]);\n }\n if (layout && height != null) {\n height /= Number(layout.split('x')[1]);\n }\n // TODO: What happens if there are multiple grids, with different\n // layout sizes, inside this image stream?\n\n /** @type {shaka.extern.Track} */\n const track = {\n id: stream.id,\n active: false,\n type: ContentType.IMAGE,\n bandwidth: stream.bandwidth || 0,\n language: '',\n label: null,\n kind: null,\n width,\n height,\n frameRate: null,\n pixelAspectRatio: null,\n hdr: null,\n colorGamut: null,\n videoLayout: null,\n mimeType: stream.mimeType,\n audioMimeType: null,\n videoMimeType: null,\n codecs: stream.codecs || null,\n audioCodec: null,\n videoCodec: null,\n primary: false,\n roles: [],\n audioRoles: null,\n forced: false,\n videoId: null,\n audioId: null,\n channelsCount: null,\n audioSamplingRate: null,\n spatialAudio: false,\n tilesLayout: layout || null,\n audioBandwidth: null,\n videoBandwidth: null,\n originalVideoId: null,\n originalAudioId: null,\n originalTextId: null,\n originalImageId: stream.originalId,\n accessibilityPurpose: null,\n originalLanguage: null,\n };\n\n return track;\n }\n\n\n /**\n * Generate and return an ID for this track, since the ID field is optional.\n *\n * @param {TextTrack|AudioTrack} html5Track\n * @return {number} The generated ID.\n */\n static html5TrackId(html5Track) {\n if (!html5Track['__shaka_id']) {\n html5Track['__shaka_id'] = shaka.util.StreamUtils.nextTrackId_++;\n }\n return html5Track['__shaka_id'];\n }\n\n\n /**\n * @param {TextTrack} textTrack\n * @return {shaka.extern.Track}\n */\n static html5TextTrackToTrack(textTrack) {\n const StreamUtils = shaka.util.StreamUtils;\n\n /** @type {shaka.extern.Track} */\n const track = StreamUtils.html5TrackToGenericShakaTrack_(textTrack);\n track.active = textTrack.mode != 'disabled';\n track.type = 'text';\n track.originalTextId = textTrack.id;\n if (textTrack.kind == 'captions') {\n // See: https://github.com/shaka-project/shaka-player/issues/6233\n track.mimeType = 'unknown';\n }\n if (textTrack.kind == 'subtitles') {\n track.mimeType = 'text/vtt';\n }\n if (textTrack.kind) {\n track.roles = [textTrack.kind];\n }\n if (textTrack.kind == 'forced') {\n track.forced = true;\n }\n\n return track;\n }\n\n\n /**\n * @param {AudioTrack} audioTrack\n * @return {shaka.extern.Track}\n */\n static html5AudioTrackToTrack(audioTrack) {\n const StreamUtils = shaka.util.StreamUtils;\n\n /** @type {shaka.extern.Track} */\n const track = StreamUtils.html5TrackToGenericShakaTrack_(audioTrack);\n track.active = audioTrack.enabled;\n track.type = 'variant';\n track.originalAudioId = audioTrack.id;\n\n if (audioTrack.kind == 'main') {\n track.primary = true;\n }\n if (audioTrack.kind) {\n track.roles = [audioTrack.kind];\n track.audioRoles = [audioTrack.kind];\n track.label = audioTrack.label;\n }\n\n return track;\n }\n\n\n /**\n * Creates a Track object with non-type specific fields filled out. The\n * caller is responsible for completing the Track object with any\n * type-specific information (audio or text).\n *\n * @param {TextTrack|AudioTrack} html5Track\n * @return {shaka.extern.Track}\n * @private\n */\n static html5TrackToGenericShakaTrack_(html5Track) {\n const language = html5Track.language;\n\n /** @type {shaka.extern.Track} */\n const track = {\n id: shaka.util.StreamUtils.html5TrackId(html5Track),\n active: false,\n type: '',\n bandwidth: 0,\n language: shaka.util.LanguageUtils.normalize(language || 'und'),\n label: html5Track.label,\n kind: html5Track.kind,\n width: null,\n height: null,\n frameRate: null,\n pixelAspectRatio: null,\n hdr: null,\n colorGamut: null,\n videoLayout: null,\n mimeType: null,\n audioMimeType: null,\n videoMimeType: null,\n codecs: null,\n audioCodec: null,\n videoCodec: null,\n primary: false,\n roles: [],\n forced: false,\n audioRoles: null,\n videoId: null,\n audioId: null,\n channelsCount: null,\n audioSamplingRate: null,\n spatialAudio: false,\n tilesLayout: null,\n audioBandwidth: null,\n videoBandwidth: null,\n originalVideoId: null,\n originalAudioId: null,\n originalTextId: null,\n originalImageId: null,\n accessibilityPurpose: null,\n originalLanguage: language,\n };\n\n return track;\n }\n\n\n /**\n * Determines if the given variant is playable.\n * @param {!shaka.extern.Variant} variant\n * @return {boolean}\n */\n static isPlayable(variant) {\n return variant.allowedByApplication &&\n variant.allowedByKeySystem &&\n variant.disabledUntilTime == 0;\n }\n\n\n /**\n * Filters out unplayable variants.\n * @param {!Array.} variants\n * @return {!Array.}\n */\n static getPlayableVariants(variants) {\n return variants.filter((variant) => {\n return shaka.util.StreamUtils.isPlayable(variant);\n });\n }\n\n\n /**\n * Chooses streams according to the given config.\n * Works both for Stream and Track types due to their similarities.\n *\n * @param {!Array|!Array} streams\n * @param {string} preferredLanguage\n * @param {string} preferredRole\n * @param {boolean} preferredForced\n * @return {!Array|!Array}\n */\n static filterStreamsByLanguageAndRole(\n streams, preferredLanguage, preferredRole, preferredForced) {\n const LanguageUtils = shaka.util.LanguageUtils;\n\n /** @type {!Array|!Array} */\n let chosen = streams;\n\n // Start with the set of primary streams.\n /** @type {!Array|!Array} */\n const primary = streams.filter((stream) => {\n return stream.primary;\n });\n\n if (primary.length) {\n chosen = primary;\n }\n\n // Now reduce the set to one language. This covers both arbitrary language\n // choice and the reduction of the \"primary\" stream set to one language.\n const firstLanguage = chosen.length ? chosen[0].language : '';\n chosen = chosen.filter((stream) => {\n return stream.language == firstLanguage;\n });\n\n // Find the streams that best match our language preference. This will\n // override previous selections.\n if (preferredLanguage) {\n const closestLocale = LanguageUtils.findClosestLocale(\n LanguageUtils.normalize(preferredLanguage),\n streams.map((stream) => stream.language));\n\n // Only replace |chosen| if we found a locale that is close to our\n // preference.\n if (closestLocale) {\n chosen = streams.filter((stream) => {\n const locale = LanguageUtils.normalize(stream.language);\n return locale == closestLocale;\n });\n }\n }\n\n // Filter by forced preference\n chosen = chosen.filter((stream) => {\n return stream.forced == preferredForced;\n });\n\n // Now refine the choice based on role preference.\n if (preferredRole) {\n const roleMatches = shaka.util.StreamUtils.filterStreamsByRole_(\n chosen, preferredRole);\n if (roleMatches.length) {\n return roleMatches;\n } else {\n shaka.log.warning('No exact match for the text role could be found.');\n }\n } else {\n // Prefer text streams with no roles, if they exist.\n const noRoleMatches = chosen.filter((stream) => {\n return stream.roles.length == 0;\n });\n if (noRoleMatches.length) {\n return noRoleMatches;\n }\n }\n\n // Either there was no role preference, or it could not be satisfied.\n // Choose an arbitrary role, if there are any, and filter out any other\n // roles. This ensures we never adapt between roles.\n\n const allRoles = chosen.map((stream) => {\n return stream.roles;\n }).reduce(shaka.util.Functional.collapseArrays, []);\n\n if (!allRoles.length) {\n return chosen;\n }\n return shaka.util.StreamUtils.filterStreamsByRole_(chosen, allRoles[0]);\n }\n\n\n /**\n * Filter Streams by role.\n * Works both for Stream and Track types due to their similarities.\n *\n * @param {!Array|!Array} streams\n * @param {string} preferredRole\n * @return {!Array|!Array}\n * @private\n */\n static filterStreamsByRole_(streams, preferredRole) {\n return streams.filter((stream) => {\n return stream.roles.includes(preferredRole);\n });\n }\n\n\n /**\n * Checks if the given stream is an audio stream.\n *\n * @param {shaka.extern.Stream} stream\n * @return {boolean}\n */\n static isAudio(stream) {\n const ContentType = shaka.util.ManifestParserUtils.ContentType;\n return stream.type == ContentType.AUDIO;\n }\n\n\n /**\n * Checks if the given stream is a video stream.\n *\n * @param {shaka.extern.Stream} stream\n * @return {boolean}\n */\n static isVideo(stream) {\n const ContentType = shaka.util.ManifestParserUtils.ContentType;\n return stream.type == ContentType.VIDEO;\n }\n\n\n /**\n * Get all non-null streams in the variant as an array.\n *\n * @param {shaka.extern.Variant} variant\n * @return {!Array.}\n */\n static getVariantStreams(variant) {\n const streams = [];\n\n if (variant.audio) {\n streams.push(variant.audio);\n }\n if (variant.video) {\n streams.push(variant.video);\n }\n\n return streams;\n }\n\n\n /**\n * Indicates if some of the variant's streams are fastSwitching.\n *\n * @param {shaka.extern.Variant} variant\n * @return {boolean}\n */\n static isFastSwitching(variant) {\n if (variant.audio && variant.audio.fastSwitching) {\n return true;\n }\n if (variant.video && variant.video.fastSwitching) {\n return true;\n }\n return false;\n }\n\n\n /**\n * Set the best iframe stream to the original stream.\n *\n * @param {!shaka.extern.Stream} stream\n * @param {!Array.} iFrameStreams\n */\n static setBetterIFrameStream(stream, iFrameStreams) {\n if (!iFrameStreams.length) {\n return;\n }\n const validStreams = iFrameStreams.filter((iFrameStream) =>\n shaka.util.MimeUtils.getNormalizedCodec(stream.codecs) ==\n shaka.util.MimeUtils.getNormalizedCodec(iFrameStream.codecs))\n .sort((a, b) => {\n if (!a.bandwidth || !b.bandwidth || a.bandwidth == b.bandwidth) {\n return (a.width || 0) - (b.width || 0);\n }\n return a.bandwidth - b.bandwidth;\n });\n stream.trickModeVideo = validStreams[0];\n if (validStreams.length > 1) {\n const sameResolutionStream = validStreams.find((iFrameStream) =>\n stream.width == iFrameStream.width &&\n stream.height == iFrameStream.height);\n if (sameResolutionStream) {\n stream.trickModeVideo = sameResolutionStream;\n }\n }\n }\n\n\n /**\n * Returns a string of a variant, with the attribute values of its audio\n * and/or video streams for log printing.\n * @param {shaka.extern.Variant} variant\n * @return {string}\n * @private\n */\n static getVariantSummaryString_(variant) {\n const summaries = [];\n if (variant.audio) {\n summaries.push(shaka.util.StreamUtils.getStreamSummaryString_(\n variant.audio));\n }\n if (variant.video) {\n summaries.push(shaka.util.StreamUtils.getStreamSummaryString_(\n variant.video));\n }\n return summaries.join(', ');\n }\n\n /**\n * Returns a string of an audio or video stream for log printing.\n * @param {shaka.extern.Stream} stream\n * @return {string}\n * @private\n */\n static getStreamSummaryString_(stream) {\n // Accepted parameters for Chromecast can be found (internally) at\n // go/cast-mime-params\n\n if (shaka.util.StreamUtils.isAudio(stream)) {\n return 'type=audio' +\n ' codecs=' + stream.codecs +\n ' bandwidth='+ stream.bandwidth +\n ' channelsCount=' + stream.channelsCount +\n ' audioSamplingRate=' + stream.audioSamplingRate;\n }\n\n if (shaka.util.StreamUtils.isVideo(stream)) {\n return 'type=video' +\n ' codecs=' + stream.codecs +\n ' bandwidth=' + stream.bandwidth +\n ' frameRate=' + stream.frameRate +\n ' width=' + stream.width +\n ' height=' + stream.height;\n }\n\n return 'unexpected stream type';\n }\n\n\n /**\n * Clears underlying decoding config cache.\n */\n static clearDecodingConfigCache() {\n shaka.util.StreamUtils.decodingConfigCache_ = {};\n }\n};\n\n\n/**\n * A cache of results from mediaCapabilities.decodingInfo, indexed by the\n * (stringified) decodingConfig.\n *\n * @type {Object.<(!string), (!MediaCapabilitiesDecodingInfo)>}\n * @private\n */\nshaka.util.StreamUtils.decodingConfigCache_ = {};\n\n\n/** @private {number} */\nshaka.util.StreamUtils.nextTrackId_ = 0;\n\n/**\n * @enum {string}\n */\nshaka.util.StreamUtils.DecodingAttributes = {\n SMOOTH: 'smooth',\n POWER: 'powerEfficient',\n};\n\n/**\n * @private {!Map.}\n */\nshaka.util.StreamUtils.supportedImageMimeTypes_ = new Map()\n .set('image/svg+xml', true)\n .set('image/png', true)\n .set('image/jpeg', true)\n .set('image/jpg', true);\n\n/**\n * @const {string}\n * @private\n */\nshaka.util.StreamUtils.minWebPImage_ = 'data:image/webp;base64,UklGRjoAAABXRU' +\n 'JQVlA4IC4AAACyAgCdASoCAAIALmk0mk0iIiIiIgBoSygABc6WWgAA/veff/0PP8bA//LwY' +\n 'AAA';\n\n/**\n * @const {string}\n * @private\n */\nshaka.util.StreamUtils.minAvifImage_ = 'data:image/avif;base64,AAAAIGZ0eXBhdm' +\n 'lmAAAAAGF2aWZtaWYxbWlhZk1BMUIAAADybWV0YQAAAAAAAAAoaGRscgAAAAAAAAAAcGljd' +\n 'AAAAAAAAAAAAAAAAGxpYmF2aWYAAAAADnBpdG0AAAAAAAEAAAAeaWxvYwAAAABEAAABAAEA' +\n 'AAABAAABGgAAAB0AAAAoaWluZgAAAAAAAQAAABppbmZlAgAAAAABAABhdjAxQ29sb3IAAAA' +\n 'AamlwcnAAAABLaXBjbwAAABRpc3BlAAAAAAAAAAIAAAACAAAAEHBpeGkAAAAAAwgICAAAAA' +\n 'xhdjFDgQ0MAAAAABNjb2xybmNseAACAAIAAYAAAAAXaXBtYQAAAAAAAAABAAEEAQKDBAAAA' +\n 'CVtZGF0EgAKCBgANogQEAwgMg8f8D///8WfhwB8+ErK42A=';\n\n/**\n * @const {!Map.}\n * @private\n */\nshaka.util.StreamUtils.minImage_ = new Map()\n .set('image/webp', shaka.util.StreamUtils.minWebPImage_)\n .set('image/avif', shaka.util.StreamUtils.minAvifImage_);\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.media.DrmEngine');\n\ngoog.require('goog.asserts');\ngoog.require('shaka.log');\ngoog.require('shaka.net.NetworkingEngine');\ngoog.require('shaka.util.BufferUtils');\ngoog.require('shaka.util.Destroyer');\ngoog.require('shaka.util.DrmUtils');\ngoog.require('shaka.util.Error');\ngoog.require('shaka.util.EventManager');\ngoog.require('shaka.util.FakeEvent');\ngoog.require('shaka.util.IDestroyable');\ngoog.require('shaka.util.Iterables');\ngoog.require('shaka.util.ManifestParserUtils');\ngoog.require('shaka.util.MapUtils');\ngoog.require('shaka.util.ObjectUtils');\ngoog.require('shaka.util.Platform');\ngoog.require('shaka.util.Pssh');\ngoog.require('shaka.util.PublicPromise');\ngoog.require('shaka.util.StreamUtils');\ngoog.require('shaka.util.StringUtils');\ngoog.require('shaka.util.Timer');\ngoog.require('shaka.util.TXml');\ngoog.require('shaka.util.Uint8ArrayUtils');\n\n\n/** @implements {shaka.util.IDestroyable} */\nshaka.media.DrmEngine = class {\n /**\n * @param {shaka.media.DrmEngine.PlayerInterface} playerInterface\n */\n constructor(playerInterface) {\n /** @private {?shaka.media.DrmEngine.PlayerInterface} */\n this.playerInterface_ = playerInterface;\n\n /** @private {MediaKeys} */\n this.mediaKeys_ = null;\n\n /** @private {HTMLMediaElement} */\n this.video_ = null;\n\n /** @private {boolean} */\n this.initialized_ = false;\n\n /** @private {boolean} */\n this.initializedForStorage_ = false;\n\n /** @private {number} */\n this.licenseTimeSeconds_ = 0;\n\n /** @private {?shaka.extern.DrmInfo} */\n this.currentDrmInfo_ = null;\n\n /** @private {shaka.util.EventManager} */\n this.eventManager_ = new shaka.util.EventManager();\n\n /**\n * @private {!Map.}\n */\n this.activeSessions_ = new Map();\n\n /**\n * @private {!Map}\n */\n this.storedPersistentSessions_ = new Map();\n\n /** @private {!shaka.util.PublicPromise} */\n this.allSessionsLoaded_ = new shaka.util.PublicPromise();\n\n /** @private {?shaka.extern.DrmConfiguration} */\n this.config_ = null;\n\n /** @private {function(!shaka.util.Error)} */\n this.onError_ = (err) => {\n if (err.severity == shaka.util.Error.Severity.CRITICAL) {\n this.allSessionsLoaded_.reject(err);\n }\n\n playerInterface.onError(err);\n };\n\n /**\n * The most recent key status information we have.\n * We may not have announced this information to the outside world yet,\n * which we delay to batch up changes and avoid spurious \"missing key\"\n * errors.\n * @private {!Map.}\n */\n this.keyStatusByKeyId_ = new Map();\n\n /**\n * The key statuses most recently announced to other classes.\n * We may have more up-to-date information being collected in\n * this.keyStatusByKeyId_, which has not been batched up and released yet.\n * @private {!Map.}\n */\n this.announcedKeyStatusByKeyId_ = new Map();\n\n /** @private {shaka.util.Timer} */\n this.keyStatusTimer_ =\n new shaka.util.Timer(() => this.processKeyStatusChanges_());\n\n /** @private {boolean} */\n this.usePersistentLicenses_ = false;\n\n /** @private {!Array.} */\n this.mediaKeyMessageEvents_ = [];\n\n /** @private {boolean} */\n this.initialRequestsSent_ = false;\n\n /** @private {?shaka.util.Timer} */\n this.expirationTimer_ = new shaka.util.Timer(() => {\n this.pollExpiration_();\n });\n\n // Add a catch to the Promise to avoid console logs about uncaught errors.\n const noop = () => {};\n this.allSessionsLoaded_.catch(noop);\n\n /** @const {!shaka.util.Destroyer} */\n this.destroyer_ = new shaka.util.Destroyer(() => this.destroyNow_());\n\n /** @private {boolean} */\n this.srcEquals_ = false;\n\n /** @private {Promise} */\n this.mediaKeysAttached_ = null;\n\n /** @private {?shaka.extern.InitDataOverride} */\n this.manifestInitData_ = null;\n\n /** @private {function():boolean} */\n this.isPreload_ = () => false;\n }\n\n /** @override */\n destroy() {\n return this.destroyer_.destroy();\n }\n\n /**\n * Destroy this instance of DrmEngine. This assumes that all other checks\n * about \"if it should\" have passed.\n *\n * @private\n */\n async destroyNow_() {\n // |eventManager_| should only be |null| after we call |destroy|. Destroy it\n // first so that we will stop responding to events.\n this.eventManager_.release();\n this.eventManager_ = null;\n\n // Since we are destroying ourselves, we don't want to react to the \"all\n // sessions loaded\" event.\n this.allSessionsLoaded_.reject();\n\n // Stop all timers. This will ensure that they do not start any new work\n // while we are destroying ourselves.\n this.expirationTimer_.stop();\n this.expirationTimer_ = null;\n\n this.keyStatusTimer_.stop();\n this.keyStatusTimer_ = null;\n\n // Close all open sessions.\n await this.closeOpenSessions_();\n\n // |video_| will be |null| if we never attached to a video element.\n if (this.video_) {\n // Webkit EME implementation requires the src to be defined to clear\n // the MediaKeys.\n if (!shaka.util.Platform.isMediaKeysPolyfilled('webkit')) {\n goog.asserts.assert(\n !this.video_.src &&\n !this.video_.getElementsByTagName('source').length,\n 'video src must be removed first!');\n }\n\n try {\n await this.video_.setMediaKeys(null);\n } catch (error) {\n // Ignore any failures while removing media keys from the video element.\n shaka.log.debug(`DrmEngine.destroyNow_ exception`, error);\n }\n\n this.video_ = null;\n }\n\n // Break references to everything else we hold internally.\n this.currentDrmInfo_ = null;\n this.mediaKeys_ = null;\n this.storedPersistentSessions_ = new Map();\n this.config_ = null;\n this.onError_ = () => {};\n this.playerInterface_ = null;\n this.srcEquals_ = false;\n this.mediaKeysAttached_ = null;\n }\n\n /**\n * Called by the Player to provide an updated configuration any time it\n * changes.\n * Must be called at least once before init().\n *\n * @param {shaka.extern.DrmConfiguration} config\n * @param {(function():boolean)=} isPreload\n */\n configure(config, isPreload) {\n this.config_ = config;\n if (isPreload) {\n this.isPreload_ = isPreload;\n }\n if (this.expirationTimer_) {\n this.expirationTimer_.tickEvery(\n /* seconds= */ this.config_.updateExpirationTime);\n }\n }\n\n /**\n * @param {!boolean} value\n */\n setSrcEquals(value) {\n this.srcEquals_ = value;\n }\n\n /**\n * Initialize the drm engine for storing and deleting stored content.\n *\n * @param {!Array.} variants\n * The variants that are going to be stored.\n * @param {boolean} usePersistentLicenses\n * Whether or not persistent licenses should be requested and stored for\n * |manifest|.\n * @return {!Promise}\n */\n initForStorage(variants, usePersistentLicenses) {\n this.initializedForStorage_ = true;\n // There are two cases for this call:\n // 1. We are about to store a manifest - in that case, there are no offline\n // sessions and therefore no offline session ids.\n // 2. We are about to remove the offline sessions for this manifest - in\n // that case, we don't need to know about them right now either as\n // we will be told which ones to remove later.\n this.storedPersistentSessions_ = new Map();\n\n // What we really need to know is whether or not they are expecting to use\n // persistent licenses.\n this.usePersistentLicenses_ = usePersistentLicenses;\n\n return this.init_(variants);\n }\n\n /**\n * Initialize the drm engine for playback operations.\n *\n * @param {!Array.} variants\n * The variants that we want to support playing.\n * @param {!Array.} offlineSessionIds\n * @return {!Promise}\n */\n initForPlayback(variants, offlineSessionIds) {\n this.storedPersistentSessions_ = new Map();\n\n for (const sessionId of offlineSessionIds) {\n this.storedPersistentSessions_.set(\n sessionId, {initData: null, initDataType: null});\n }\n\n for (const metadata of this.config_.persistentSessionsMetadata) {\n this.storedPersistentSessions_.set(\n metadata.sessionId,\n {initData: metadata.initData, initDataType: metadata.initDataType});\n }\n\n this.usePersistentLicenses_ = this.storedPersistentSessions_.size > 0;\n\n return this.init_(variants);\n }\n\n /**\n * Initializes the drm engine for removing persistent sessions. Only the\n * removeSession(s) methods will work correctly, creating new sessions may not\n * work as desired.\n *\n * @param {string} keySystem\n * @param {string} licenseServerUri\n * @param {Uint8Array} serverCertificate\n * @param {!Array.} audioCapabilities\n * @param {!Array.} videoCapabilities\n * @return {!Promise}\n */\n initForRemoval(keySystem, licenseServerUri, serverCertificate,\n audioCapabilities, videoCapabilities) {\n /** @type {!Map.} */\n const configsByKeySystem = new Map();\n\n /** @type {MediaKeySystemConfiguration} */\n const config = {\n audioCapabilities: audioCapabilities,\n videoCapabilities: videoCapabilities,\n distinctiveIdentifier: 'optional',\n persistentState: 'required',\n sessionTypes: ['persistent-license'],\n label: keySystem, // Tracked by us, ignored by EME.\n };\n\n // TODO: refactor, don't stick drmInfos onto MediaKeySystemConfiguration\n config['drmInfos'] = [{ // Non-standard attribute, ignored by EME.\n keySystem: keySystem,\n licenseServerUri: licenseServerUri,\n distinctiveIdentifierRequired: false,\n persistentStateRequired: true,\n audioRobustness: '', // Not required by queryMediaKeys_\n videoRobustness: '', // Same\n serverCertificate: serverCertificate,\n serverCertificateUri: '',\n initData: null,\n keyIds: null,\n }];\n\n configsByKeySystem.set(keySystem, config);\n return this.queryMediaKeys_(configsByKeySystem,\n /* variants= */ []);\n }\n\n /**\n * Negotiate for a key system and set up MediaKeys.\n * This will assume that both |usePersistentLicences_| and\n * |storedPersistentSessions_| have been properly set.\n *\n * @param {!Array.} variants\n * The variants that we expect to operate with during the drm engine's\n * lifespan of the drm engine.\n * @return {!Promise} Resolved if/when a key system has been chosen.\n * @private\n */\n async init_(variants) {\n goog.asserts.assert(this.config_,\n 'DrmEngine configure() must be called before init()!');\n\n // ClearKey config overrides the manifest DrmInfo if present. The variants\n // are modified so that filtering in Player still works.\n // This comes before hadDrmInfo because it influences the value of that.\n /** @type {?shaka.extern.DrmInfo} */\n const clearKeyDrmInfo = this.configureClearKey_();\n if (clearKeyDrmInfo) {\n for (const variant of variants) {\n if (variant.video) {\n variant.video.drmInfos = [clearKeyDrmInfo];\n }\n if (variant.audio) {\n variant.audio.drmInfos = [clearKeyDrmInfo];\n }\n }\n }\n\n const hadDrmInfo = variants.some((variant) => {\n if (variant.video && variant.video.drmInfos.length) {\n return true;\n }\n if (variant.audio && variant.audio.drmInfos.length) {\n return true;\n }\n return false;\n });\n\n // When preparing to play live streams, it is possible that we won't know\n // about some upcoming encrypted content. If we initialize the drm engine\n // with no key systems, we won't be able to play when the encrypted content\n // comes.\n //\n // To avoid this, we will set the drm engine up to work with as many key\n // systems as possible so that we will be ready.\n if (!hadDrmInfo) {\n const servers = shaka.util.MapUtils.asMap(this.config_.servers);\n shaka.media.DrmEngine.replaceDrmInfo_(variants, servers);\n }\n\n /** @type {!Set} */\n const drmInfos = new Set();\n for (const variant of variants) {\n const variantDrmInfos = this.getVariantDrmInfos_(variant);\n for (const info of variantDrmInfos) {\n drmInfos.add(info);\n }\n }\n\n for (const info of drmInfos) {\n shaka.media.DrmEngine.fillInDrmInfoDefaults_(\n info,\n shaka.util.MapUtils.asMap(this.config_.servers),\n shaka.util.MapUtils.asMap(this.config_.advanced || {}),\n this.config_.keySystemsMapping);\n }\n\n /** @type {!Map.} */\n let configsByKeySystem;\n\n // We should get the decodingInfo results for the variants after we filling\n // in the drm infos, and before queryMediaKeys_().\n await shaka.util.StreamUtils.getDecodingInfosForVariants(variants,\n this.usePersistentLicenses_, this.srcEquals_,\n this.config_.preferredKeySystems);\n this.destroyer_.ensureNotDestroyed();\n\n const hasDrmInfo = hadDrmInfo || Object.keys(this.config_.servers).length;\n // An unencrypted content is initialized.\n if (!hasDrmInfo) {\n this.initialized_ = true;\n return Promise.resolve();\n }\n\n const p = this.queryMediaKeys_(configsByKeySystem, variants);\n\n // TODO(vaage): Look into the assertion below. If we do not have any drm\n // info, we create drm info so that content can play if it has drm info\n // later.\n // However it is okay if we fail to initialize? If we fail to initialize,\n // it means we won't be able to play the later-encrypted content, which is\n // not okay.\n\n // If the content did not originally have any drm info, then it doesn't\n // matter if we fail to initialize the drm engine, because we won't need it\n // anyway.\n return hadDrmInfo ? p : p.catch(() => {});\n }\n\n /**\n * Attach MediaKeys to the video element\n * @return {Promise}\n * @private\n */\n async attachMediaKeys_() {\n if (this.video_.mediaKeys) {\n return;\n }\n\n // An attach process has already started, let's wait it out\n if (this.mediaKeysAttached_) {\n await this.mediaKeysAttached_;\n\n this.destroyer_.ensureNotDestroyed();\n return;\n }\n\n try {\n this.mediaKeysAttached_ = this.video_.setMediaKeys(this.mediaKeys_);\n\n await this.mediaKeysAttached_;\n } catch (exception) {\n goog.asserts.assert(exception instanceof Error, 'Wrong error type!');\n\n this.onError_(new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.DRM,\n shaka.util.Error.Code.FAILED_TO_ATTACH_TO_VIDEO,\n exception.message));\n }\n\n this.destroyer_.ensureNotDestroyed();\n }\n\n /**\n * Processes encrypted event and start licence challenging\n * @return {!Promise}\n * @private\n */\n async onEncryptedEvent_(event) {\n /**\n * MediaKeys should be added when receiving an encrypted event. Setting\n * mediaKeys before could result into encrypted event not being fired on\n * some browsers\n */\n await this.attachMediaKeys_();\n\n this.newInitData(\n event.initDataType,\n shaka.util.BufferUtils.toUint8(event.initData));\n }\n\n /**\n * Start processing events.\n * @param {HTMLMediaElement} video\n * @return {!Promise}\n */\n async attach(video) {\n if (!this.mediaKeys_) {\n // Unencrypted, or so we think. We listen for encrypted events in order\n // to warn when the stream is encrypted, even though the manifest does\n // not know it.\n // Don't complain about this twice, so just listenOnce().\n // FIXME: This is ineffective when a prefixed event is translated by our\n // polyfills, since those events are only caught and translated by a\n // MediaKeys instance. With clear content and no polyfilled MediaKeys\n // instance attached, you'll never see the 'encrypted' event on those\n // platforms (Safari).\n this.eventManager_.listenOnce(video, 'encrypted', (event) => {\n this.onError_(new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.DRM,\n shaka.util.Error.Code.ENCRYPTED_CONTENT_WITHOUT_DRM_INFO));\n });\n return;\n }\n\n this.video_ = video;\n\n this.eventManager_.listenOnce(this.video_, 'play', () => this.onPlay_());\n if (this.video_.remote) {\n this.eventManager_.listen(this.video_.remote, 'connect',\n () => this.closeOpenSessions_());\n this.eventManager_.listen(this.video_.remote, 'connecting',\n () => this.closeOpenSessions_());\n this.eventManager_.listen(this.video_.remote, 'disconnect',\n () => this.closeOpenSessions_());\n } else if ('webkitCurrentPlaybackTargetIsWireless' in this.video_) {\n this.eventManager_.listen(this.video_,\n 'webkitcurrentplaybacktargetiswirelesschanged',\n () => this.closeOpenSessions_());\n }\n\n this.manifestInitData_ = this.currentDrmInfo_ ?\n (this.currentDrmInfo_.initData.find(\n (initDataOverride) => initDataOverride.initData.length > 0,\n ) || null) : null;\n\n /**\n * We can attach media keys before the playback actually begins when:\n * - If we are not using FairPlay Modern EME\n * - Some initData already has been generated (through the manifest)\n * - In case of an offline session\n */\n if (this.manifestInitData_ ||\n this.currentDrmInfo_.keySystem !== 'com.apple.fps' ||\n this.storedPersistentSessions_.size) {\n await this.attachMediaKeys_();\n }\n\n this.createOrLoad().catch(() => {\n // Silence errors\n // createOrLoad will run async, errors are triggered through onError_\n });\n\n // Explicit init data for any one stream or an offline session is\n // sufficient to suppress 'encrypted' events for all streams.\n // Also suppress 'encrypted' events when parsing in-band ppsh\n // from media segments because that serves the same purpose as the\n // 'encrypted' events.\n if (!this.manifestInitData_ && !this.storedPersistentSessions_.size &&\n !this.config_.parseInbandPsshEnabled) {\n this.eventManager_.listen(\n this.video_, 'encrypted', (e) => this.onEncryptedEvent_(e));\n }\n }\n\n /**\n * Returns true if the manifest has init data.\n *\n * @return {boolean}\n */\n hasManifestInitData() {\n return !!this.manifestInitData_;\n }\n\n /**\n * Sets the server certificate based on the current DrmInfo.\n *\n * @return {!Promise}\n */\n async setServerCertificate() {\n goog.asserts.assert(this.initialized_,\n 'Must call init() before setServerCertificate');\n\n if (!this.mediaKeys_ || !this.currentDrmInfo_) {\n return;\n }\n\n if (this.currentDrmInfo_.serverCertificateUri &&\n (!this.currentDrmInfo_.serverCertificate ||\n !this.currentDrmInfo_.serverCertificate.length)) {\n const request = shaka.net.NetworkingEngine.makeRequest(\n [this.currentDrmInfo_.serverCertificateUri],\n this.config_.retryParameters);\n\n try {\n const operation = this.playerInterface_.netEngine.request(\n shaka.net.NetworkingEngine.RequestType.SERVER_CERTIFICATE,\n request, {isPreload: this.isPreload_()});\n const response = await operation.promise;\n\n this.currentDrmInfo_.serverCertificate =\n shaka.util.BufferUtils.toUint8(response.data);\n } catch (error) {\n // Request failed!\n goog.asserts.assert(error instanceof shaka.util.Error,\n 'Wrong NetworkingEngine error type!');\n\n throw new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.DRM,\n shaka.util.Error.Code.SERVER_CERTIFICATE_REQUEST_FAILED,\n error);\n }\n\n if (this.destroyer_.destroyed()) {\n return;\n }\n }\n\n if (!this.currentDrmInfo_.serverCertificate ||\n !this.currentDrmInfo_.serverCertificate.length) {\n return;\n }\n\n try {\n const supported = await this.mediaKeys_.setServerCertificate(\n this.currentDrmInfo_.serverCertificate);\n\n if (!supported) {\n shaka.log.warning('Server certificates are not supported by the ' +\n 'key system. The server certificate has been ' +\n 'ignored.');\n }\n } catch (exception) {\n throw new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.DRM,\n shaka.util.Error.Code.INVALID_SERVER_CERTIFICATE,\n exception.message);\n }\n }\n\n /**\n * Remove an offline session and delete it's data. This can only be called\n * after a successful call to |init|. This will wait until the\n * 'license-release' message is handled. The returned Promise will be rejected\n * if there is an error releasing the license.\n *\n * @param {string} sessionId\n * @return {!Promise}\n */\n async removeSession(sessionId) {\n goog.asserts.assert(this.mediaKeys_,\n 'Must call init() before removeSession');\n\n const session = await this.loadOfflineSession_(\n sessionId, {initData: null, initDataType: null});\n\n // This will be null on error, such as session not found.\n if (!session) {\n shaka.log.v2('Ignoring attempt to remove missing session', sessionId);\n return;\n }\n\n // TODO: Consider adding a timeout to get the 'message' event.\n // Note that the 'message' event will get raised after the remove()\n // promise resolves.\n const tasks = [];\n\n const found = this.activeSessions_.get(session);\n if (found) {\n // This will force us to wait until the 'license-release' message has been\n // handled.\n found.updatePromise = new shaka.util.PublicPromise();\n tasks.push(found.updatePromise);\n }\n\n shaka.log.v2('Attempting to remove session', sessionId);\n tasks.push(session.remove());\n\n await Promise.all(tasks);\n this.activeSessions_.delete(session);\n }\n\n /**\n * Creates the sessions for the init data and waits for them to become ready.\n *\n * @return {!Promise}\n */\n async createOrLoad() {\n if (this.storedPersistentSessions_.size) {\n this.storedPersistentSessions_.forEach((metadata, sessionId) => {\n this.loadOfflineSession_(sessionId, metadata);\n });\n\n await this.allSessionsLoaded_;\n\n const keyIds = (this.currentDrmInfo_ && this.currentDrmInfo_.keyIds) ||\n new Set([]);\n\n // All the needed keys are already loaded, we don't need another license\n // Therefore we prevent starting a new session\n if (keyIds.size > 0 && this.areAllKeysUsable_()) {\n return this.allSessionsLoaded_;\n }\n\n // Reset the promise for the next sessions to come if key needs aren't\n // satisfied with persistent sessions\n this.allSessionsLoaded_ = new shaka.util.PublicPromise();\n this.allSessionsLoaded_.catch(() => {});\n }\n\n // Create sessions.\n const initDatas =\n (this.currentDrmInfo_ ? this.currentDrmInfo_.initData : []) || [];\n for (const initDataOverride of initDatas) {\n this.newInitData(\n initDataOverride.initDataType, initDataOverride.initData);\n }\n\n // If there were no sessions to load, we need to resolve the promise right\n // now or else it will never get resolved.\n // We determine this by checking areAllSessionsLoaded_, rather than checking\n // the number of initDatas, since the newInitData method can reject init\n // datas in some circumstances.\n if (this.areAllSessionsLoaded_()) {\n this.allSessionsLoaded_.resolve();\n }\n\n return this.allSessionsLoaded_;\n }\n\n /**\n * Called when new initialization data is encountered. If this data hasn't\n * been seen yet, this will create a new session for it.\n *\n * @param {string} initDataType\n * @param {!Uint8Array} initData\n */\n newInitData(initDataType, initData) {\n if (!initData.length) {\n return;\n }\n\n // Suppress duplicate init data.\n // Note that some init data are extremely large and can't portably be used\n // as keys in a dictionary.\n\n if (this.config_.ignoreDuplicateInitData) {\n const metadatas = this.activeSessions_.values();\n for (const metadata of metadatas) {\n if (shaka.util.BufferUtils.equal(initData, metadata.initData)) {\n shaka.log.debug('Ignoring duplicate init data.');\n return;\n }\n }\n let duplicate = false;\n this.storedPersistentSessions_.forEach((metadata, sessionId) => {\n if (!duplicate &&\n shaka.util.BufferUtils.equal(initData, metadata.initData)) {\n duplicate = true;\n }\n });\n if (duplicate) {\n shaka.log.debug('Ignoring duplicate init data.');\n return;\n }\n }\n\n // If there are pre-existing sessions that have all been loaded\n // then reset the allSessionsLoaded_ promise, which can now be\n // used to wait for new sesssions to be loaded\n if (this.activeSessions_.size > 0 && this.areAllSessionsLoaded_()) {\n this.allSessionsLoaded_.resolve();\n this.allSessionsLoaded_ = new shaka.util.PublicPromise();\n this.allSessionsLoaded_.catch(() => {});\n }\n this.createSession(initDataType, initData,\n this.currentDrmInfo_.sessionType);\n }\n\n /** @return {boolean} */\n initialized() {\n return this.initialized_;\n }\n\n /**\n * Returns the ID of the sessions currently active.\n *\n * @return {!Array.}\n */\n getSessionIds() {\n const sessions = this.activeSessions_.keys();\n const ids = shaka.util.Iterables.map(sessions, (s) => s.sessionId);\n\n // TODO: Make |getSessionIds| return |Iterable| instead of |Array|.\n return Array.from(ids);\n }\n\n /**\n * Returns the active sessions metadata\n *\n * @return {!Array.}\n */\n getActiveSessionsMetadata() {\n const sessions = this.activeSessions_.keys();\n\n const metadata = shaka.util.Iterables.map(sessions, (session) => {\n const metadata = this.activeSessions_.get(session);\n\n return {\n sessionId: session.sessionId,\n sessionType: metadata.type,\n initData: metadata.initData,\n initDataType: metadata.initDataType,\n };\n });\n\n return Array.from(metadata);\n }\n\n /**\n * Returns the next expiration time, or Infinity.\n * @return {number}\n */\n getExpiration() {\n // This will equal Infinity if there are no entries.\n let min = Infinity;\n\n const sessions = this.activeSessions_.keys();\n for (const session of sessions) {\n if (!isNaN(session.expiration)) {\n min = Math.min(min, session.expiration);\n }\n }\n\n return min;\n }\n\n /**\n * Returns the time spent on license requests during this session, or NaN.\n *\n * @return {number}\n */\n getLicenseTime() {\n if (this.licenseTimeSeconds_) {\n return this.licenseTimeSeconds_;\n }\n return NaN;\n }\n\n /**\n * Returns the DrmInfo that was used to initialize the current key system.\n *\n * @return {?shaka.extern.DrmInfo}\n */\n getDrmInfo() {\n return this.currentDrmInfo_;\n }\n\n /**\n * Return the media keys created from the current mediaKeySystemAccess.\n * @return {MediaKeys}\n */\n getMediaKeys() {\n return this.mediaKeys_;\n }\n\n /**\n * Returns the current key statuses.\n *\n * @return {!Object.}\n */\n getKeyStatuses() {\n return shaka.util.MapUtils.asObject(this.announcedKeyStatusByKeyId_);\n }\n\n /**\n * Returns the current media key sessions.\n *\n * @return {!Array.}\n */\n getMediaKeySessions() {\n return Array.from(this.activeSessions_.keys());\n }\n\n /**\n * @param {!Map.} configsByKeySystem\n * A dictionary of configs, indexed by key system, with an iteration order\n * (insertion order) that reflects the preference for the application.\n * @param {!Array.} variants\n * @return {!Promise} Resolved if/when a key system has been chosen.\n * @private\n */\n async queryMediaKeys_(configsByKeySystem, variants) {\n const drmInfosByKeySystem = new Map();\n\n const mediaKeySystemAccess = variants.length ?\n this.getKeySystemAccessFromVariants_(variants, drmInfosByKeySystem) :\n await this.getKeySystemAccessByConfigs_(configsByKeySystem);\n\n if (!mediaKeySystemAccess) {\n throw new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.DRM,\n shaka.util.Error.Code.REQUESTED_KEY_SYSTEM_CONFIG_UNAVAILABLE);\n }\n this.destroyer_.ensureNotDestroyed();\n\n try {\n // Store the capabilities of the key system.\n const realConfig = mediaKeySystemAccess.getConfiguration();\n\n shaka.log.v2(\n 'Got MediaKeySystemAccess with configuration',\n realConfig);\n\n if (variants.length) {\n this.currentDrmInfo_ = this.createDrmInfoByInfos_(\n mediaKeySystemAccess.keySystem,\n drmInfosByKeySystem.get(mediaKeySystemAccess.keySystem));\n } else {\n this.currentDrmInfo_ = shaka.media.DrmEngine.createDrmInfoByConfigs_(\n mediaKeySystemAccess.keySystem,\n configsByKeySystem.get(mediaKeySystemAccess.keySystem));\n }\n if (!this.currentDrmInfo_.licenseServerUri) {\n throw new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.DRM,\n shaka.util.Error.Code.NO_LICENSE_SERVER_GIVEN,\n this.currentDrmInfo_.keySystem);\n }\n\n const mediaKeys = await mediaKeySystemAccess.createMediaKeys();\n this.destroyer_.ensureNotDestroyed();\n shaka.log.info('Created MediaKeys object for key system',\n this.currentDrmInfo_.keySystem);\n\n this.mediaKeys_ = mediaKeys;\n if (this.config_.minHdcpVersion != '' &&\n 'getStatusForPolicy' in this.mediaKeys_) {\n try {\n const status = await this.mediaKeys_.getStatusForPolicy({\n minHdcpVersion: this.config_.minHdcpVersion,\n });\n if (status != 'usable') {\n throw new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.DRM,\n shaka.util.Error.Code.MIN_HDCP_VERSION_NOT_MATCH);\n }\n this.destroyer_.ensureNotDestroyed();\n } catch (e) {\n if (e instanceof shaka.util.Error) {\n throw e;\n }\n throw new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.DRM,\n shaka.util.Error.Code.ERROR_CHECKING_HDCP_VERSION,\n e.message);\n }\n }\n this.initialized_ = true;\n\n await this.setServerCertificate();\n this.destroyer_.ensureNotDestroyed();\n } catch (exception) {\n this.destroyer_.ensureNotDestroyed(exception);\n\n // Don't rewrap a shaka.util.Error from earlier in the chain:\n this.currentDrmInfo_ = null;\n if (exception instanceof shaka.util.Error) {\n throw exception;\n }\n\n // We failed to create MediaKeys. This generally shouldn't happen.\n throw new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.DRM,\n shaka.util.Error.Code.FAILED_TO_CREATE_CDM,\n exception.message);\n }\n }\n\n /**\n * Get the MediaKeySystemAccess from the decodingInfos of the variants.\n * @param {!Array.} variants\n * @param {!Map.>} drmInfosByKeySystem\n * A dictionary of drmInfos, indexed by key system.\n * @return {MediaKeySystemAccess}\n * @private\n */\n getKeySystemAccessFromVariants_(variants, drmInfosByKeySystem) {\n for (const variant of variants) {\n // Get all the key systems in the variant that shouldHaveLicenseServer.\n const drmInfos = this.getVariantDrmInfos_(variant);\n for (const info of drmInfos) {\n if (!drmInfosByKeySystem.has(info.keySystem)) {\n drmInfosByKeySystem.set(info.keySystem, []);\n }\n drmInfosByKeySystem.get(info.keySystem).push(info);\n }\n }\n\n if (drmInfosByKeySystem.size == 1 && drmInfosByKeySystem.has('')) {\n throw new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.DRM,\n shaka.util.Error.Code.NO_RECOGNIZED_KEY_SYSTEMS);\n }\n\n // If we have configured preferredKeySystems, choose a preferred keySystem\n // if available.\n for (const preferredKeySystem of this.config_.preferredKeySystems) {\n for (const variant of variants) {\n const decodingInfo = variant.decodingInfos.find((decodingInfo) => {\n return decodingInfo.supported &&\n decodingInfo.keySystemAccess != null &&\n decodingInfo.keySystemAccess.keySystem == preferredKeySystem;\n });\n if (decodingInfo) {\n return decodingInfo.keySystemAccess;\n }\n }\n }\n\n // Try key systems with configured license servers first. We only have to\n // try key systems without configured license servers for diagnostic\n // reasons, so that we can differentiate between \"none of these key\n // systems are available\" and \"some are available, but you did not\n // configure them properly.\" The former takes precedence.\n for (const shouldHaveLicenseServer of [true, false]) {\n for (const variant of variants) {\n for (const decodingInfo of variant.decodingInfos) {\n if (!decodingInfo.supported || !decodingInfo.keySystemAccess) {\n continue;\n }\n const drmInfos =\n drmInfosByKeySystem.get(decodingInfo.keySystemAccess.keySystem);\n for (const info of drmInfos) {\n if (!!info.licenseServerUri == shouldHaveLicenseServer) {\n return decodingInfo.keySystemAccess;\n }\n }\n }\n }\n }\n return null;\n }\n\n /**\n * Get the MediaKeySystemAccess by querying requestMediaKeySystemAccess.\n * @param {!Map.} configsByKeySystem\n * A dictionary of configs, indexed by key system, with an iteration order\n * (insertion order) that reflects the preference for the application.\n * @return {!Promise.} Resolved if/when a\n * mediaKeySystemAccess has been chosen.\n * @private\n */\n async getKeySystemAccessByConfigs_(configsByKeySystem) {\n /** @type {MediaKeySystemAccess} */\n let mediaKeySystemAccess;\n\n if (configsByKeySystem.size == 1 && configsByKeySystem.has('')) {\n throw new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.DRM,\n shaka.util.Error.Code.NO_RECOGNIZED_KEY_SYSTEMS);\n }\n\n // If there are no tracks of a type, these should be not present.\n // Otherwise the query will fail.\n for (const config of configsByKeySystem.values()) {\n if (config.audioCapabilities.length == 0) {\n delete config.audioCapabilities;\n }\n if (config.videoCapabilities.length == 0) {\n delete config.videoCapabilities;\n }\n }\n\n // If we have configured preferredKeySystems, choose the preferred one if\n // available.\n for (const keySystem of this.config_.preferredKeySystems) {\n if (configsByKeySystem.has(keySystem)) {\n const config = configsByKeySystem.get(keySystem);\n try {\n mediaKeySystemAccess = // eslint-disable-next-line no-await-in-loop\n await navigator.requestMediaKeySystemAccess(keySystem, [config]);\n return mediaKeySystemAccess;\n } catch (error) {\n // Suppress errors.\n shaka.log.v2(\n 'Requesting', keySystem, 'failed with config', config, error);\n }\n this.destroyer_.ensureNotDestroyed();\n }\n }\n\n // Try key systems with configured license servers first. We only have to\n // try key systems without configured license servers for diagnostic\n // reasons, so that we can differentiate between \"none of these key\n // systems are available\" and \"some are available, but you did not\n // configure them properly.\" The former takes precedence.\n // TODO: once MediaCap implementation is complete, this part can be\n // simplified or removed.\n for (const shouldHaveLicenseServer of [true, false]) {\n for (const keySystem of configsByKeySystem.keys()) {\n const config = configsByKeySystem.get(keySystem);\n // TODO: refactor, don't stick drmInfos onto\n // MediaKeySystemConfiguration\n const hasLicenseServer = config['drmInfos'].some((info) => {\n return !!info.licenseServerUri;\n });\n if (hasLicenseServer != shouldHaveLicenseServer) {\n continue;\n }\n\n try {\n mediaKeySystemAccess = // eslint-disable-next-line no-await-in-loop\n await navigator.requestMediaKeySystemAccess(keySystem, [config]);\n return mediaKeySystemAccess;\n } catch (error) {\n // Suppress errors.\n shaka.log.v2(\n 'Requesting', keySystem, 'failed with config', config, error);\n }\n this.destroyer_.ensureNotDestroyed();\n }\n }\n return mediaKeySystemAccess;\n }\n\n /**\n * Create a DrmInfo using configured clear keys.\n * The server URI will be a data URI which decodes to a clearkey license.\n * @return {?shaka.extern.DrmInfo} or null if clear keys are not configured.\n * @private\n * @see https://bit.ly/2K8gOnv for the spec on the clearkey license format.\n */\n configureClearKey_() {\n const clearKeys = shaka.util.MapUtils.asMap(this.config_.clearKeys);\n if (clearKeys.size == 0) {\n return null;\n }\n\n const ManifestParserUtils = shaka.util.ManifestParserUtils;\n return ManifestParserUtils.createDrmInfoFromClearKeys(clearKeys);\n }\n\n /**\n * Resolves the allSessionsLoaded_ promise when all the sessions are loaded\n *\n * @private\n */\n checkSessionsLoaded_() {\n if (this.areAllSessionsLoaded_()) {\n this.allSessionsLoaded_.resolve();\n }\n }\n\n /**\n * In case there are no key statuses, consider this session loaded\n * after a reasonable timeout. It should definitely not take 5\n * seconds to process a license.\n * @param {!shaka.media.DrmEngine.SessionMetaData} metadata\n * @private\n */\n setLoadSessionTimeoutTimer_(metadata) {\n const timer = new shaka.util.Timer(() => {\n metadata.loaded = true;\n this.checkSessionsLoaded_();\n });\n\n timer.tickAfter(\n /* seconds= */ shaka.media.DrmEngine.SESSION_LOAD_TIMEOUT_);\n }\n\n /**\n * @param {string} sessionId\n * @param {{initData: ?Uint8Array, initDataType: ?string}} sessionMetadata\n * @return {!Promise.}\n * @private\n */\n async loadOfflineSession_(sessionId, sessionMetadata) {\n let session;\n\n const sessionType = 'persistent-license';\n\n try {\n shaka.log.v1('Attempting to load an offline session', sessionId);\n session = this.mediaKeys_.createSession(sessionType);\n } catch (exception) {\n const error = new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.DRM,\n shaka.util.Error.Code.FAILED_TO_CREATE_SESSION,\n exception.message);\n this.onError_(error);\n return Promise.reject(error);\n }\n\n this.eventManager_.listen(session, 'message',\n /** @type {shaka.util.EventManager.ListenerType} */(\n (event) => this.onSessionMessage_(event)));\n this.eventManager_.listen(session, 'keystatuseschange',\n (event) => this.onKeyStatusesChange_(event));\n\n const metadata = {\n initData: sessionMetadata.initData,\n initDataType: sessionMetadata.initDataType,\n loaded: false,\n oldExpiration: Infinity,\n updatePromise: null,\n type: sessionType,\n };\n this.activeSessions_.set(session, metadata);\n\n try {\n const present = await session.load(sessionId);\n this.destroyer_.ensureNotDestroyed();\n shaka.log.v2('Loaded offline session', sessionId, present);\n\n if (!present) {\n this.activeSessions_.delete(session);\n\n const severity = this.config_.persistentSessionOnlinePlayback ?\n shaka.util.Error.Severity.RECOVERABLE :\n shaka.util.Error.Severity.CRITICAL;\n\n this.onError_(new shaka.util.Error(\n severity,\n shaka.util.Error.Category.DRM,\n shaka.util.Error.Code.OFFLINE_SESSION_REMOVED));\n\n metadata.loaded = true;\n }\n\n this.setLoadSessionTimeoutTimer_(metadata);\n this.checkSessionsLoaded_();\n\n return session;\n } catch (error) {\n this.destroyer_.ensureNotDestroyed(error);\n\n this.activeSessions_.delete(session);\n\n const severity = this.config_.persistentSessionOnlinePlayback ?\n shaka.util.Error.Severity.RECOVERABLE :\n shaka.util.Error.Severity.CRITICAL;\n\n this.onError_(new shaka.util.Error(\n severity,\n shaka.util.Error.Category.DRM,\n shaka.util.Error.Code.FAILED_TO_CREATE_SESSION,\n error.message));\n\n metadata.loaded = true;\n\n this.checkSessionsLoaded_();\n }\n\n return Promise.resolve();\n }\n\n /**\n * @param {string} initDataType\n * @param {!Uint8Array} initData\n * @param {string} sessionType\n */\n createSession(initDataType, initData, sessionType) {\n goog.asserts.assert(this.mediaKeys_,\n 'mediaKeys_ should be valid when creating temporary session.');\n\n let session;\n\n try {\n shaka.log.info('Creating new', sessionType, 'session');\n\n session = this.mediaKeys_.createSession(sessionType);\n } catch (exception) {\n this.onError_(new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.DRM,\n shaka.util.Error.Code.FAILED_TO_CREATE_SESSION,\n exception.message));\n return;\n }\n\n this.eventManager_.listen(session, 'message',\n /** @type {shaka.util.EventManager.ListenerType} */(\n (event) => this.onSessionMessage_(event)));\n this.eventManager_.listen(session, 'keystatuseschange',\n (event) => this.onKeyStatusesChange_(event));\n\n const metadata = {\n initData: initData,\n initDataType: initDataType,\n loaded: false,\n oldExpiration: Infinity,\n updatePromise: null,\n type: sessionType,\n };\n this.activeSessions_.set(session, metadata);\n\n try {\n initData = this.config_.initDataTransform(\n initData, initDataType, this.currentDrmInfo_);\n } catch (error) {\n let shakaError = error;\n if (!(error instanceof shaka.util.Error)) {\n shakaError = new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.DRM,\n shaka.util.Error.Code.INIT_DATA_TRANSFORM_ERROR,\n error);\n }\n this.onError_(shakaError);\n return;\n }\n\n if (this.config_.logLicenseExchange) {\n const str = shaka.util.Uint8ArrayUtils.toBase64(initData);\n shaka.log.info('EME init data: type=', initDataType, 'data=', str);\n }\n\n session.generateRequest(initDataType, initData).catch((error) => {\n if (this.destroyer_.destroyed()) {\n return;\n }\n goog.asserts.assert(error instanceof Error, 'Wrong error type!');\n\n this.activeSessions_.delete(session);\n\n // This may be supplied by some polyfills.\n /** @type {MediaKeyError} */\n const errorCode = error['errorCode'];\n\n let extended;\n if (errorCode && errorCode.systemCode) {\n extended = errorCode.systemCode;\n if (extended < 0) {\n extended += Math.pow(2, 32);\n }\n extended = '0x' + extended.toString(16);\n }\n\n this.onError_(new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.DRM,\n shaka.util.Error.Code.FAILED_TO_GENERATE_LICENSE_REQUEST,\n error.message, error, extended));\n });\n }\n\n /**\n * @param {!MediaKeyMessageEvent} event\n * @private\n */\n onSessionMessage_(event) {\n if (this.delayLicenseRequest_()) {\n this.mediaKeyMessageEvents_.push(event);\n } else {\n this.sendLicenseRequest_(event);\n }\n }\n\n /**\n * @return {boolean}\n * @private\n */\n delayLicenseRequest_() {\n if (!this.video_) {\n // If there's no video, don't delay the license request; i.e., in the case\n // of offline storage.\n return false;\n }\n return (this.config_.delayLicenseRequestUntilPlayed &&\n this.video_.paused && !this.initialRequestsSent_);\n }\n\n /**\n * Sends a license request.\n * @param {!MediaKeyMessageEvent} event\n * @private\n */\n async sendLicenseRequest_(event) {\n /** @type {!MediaKeySession} */\n const session = event.target;\n shaka.log.v1(\n 'Sending license request for session', session.sessionId, 'of type',\n event.messageType);\n if (this.config_.logLicenseExchange) {\n const str = shaka.util.Uint8ArrayUtils.toBase64(event.message);\n shaka.log.info('EME license request', str);\n }\n\n const metadata = this.activeSessions_.get(session);\n\n let url = this.currentDrmInfo_.licenseServerUri;\n const advancedConfig =\n this.config_.advanced[this.currentDrmInfo_.keySystem];\n\n if (event.messageType == 'individualization-request' && advancedConfig &&\n advancedConfig.individualizationServer) {\n url = advancedConfig.individualizationServer;\n }\n\n const requestType = shaka.net.NetworkingEngine.RequestType.LICENSE;\n const request = shaka.net.NetworkingEngine.makeRequest(\n [url], this.config_.retryParameters);\n request.body = event.message;\n request.method = 'POST';\n request.licenseRequestType = event.messageType;\n request.sessionId = session.sessionId;\n request.drmInfo = this.currentDrmInfo_;\n if (metadata) {\n request.initData = metadata.initData;\n request.initDataType = metadata.initDataType;\n }\n if (advancedConfig && advancedConfig.headers) {\n // Add these to the existing headers. Do not clobber them!\n // For PlayReady, there will already be headers in the request.\n for (const header in advancedConfig.headers) {\n request.headers[header] = advancedConfig.headers[header];\n }\n }\n // NOTE: allowCrossSiteCredentials can be set in a request filter.\n\n if (shaka.util.DrmUtils.isPlayReadyKeySystem(\n this.currentDrmInfo_.keySystem)) {\n this.unpackPlayReadyRequest_(request);\n }\n\n const startTimeRequest = Date.now();\n\n let response;\n try {\n const req = this.playerInterface_.netEngine.request(\n requestType, request, {isPreload: this.isPreload_()});\n response = await req.promise;\n } catch (error) {\n if (this.destroyer_.destroyed()) {\n return;\n }\n // Request failed!\n goog.asserts.assert(error instanceof shaka.util.Error,\n 'Wrong NetworkingEngine error type!');\n const shakaErr = new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.DRM,\n shaka.util.Error.Code.LICENSE_REQUEST_FAILED,\n error);\n if (this.activeSessions_.size == 1) {\n this.onError_(shakaErr);\n if (metadata && metadata.updatePromise) {\n metadata.updatePromise.reject(shakaErr);\n }\n } else {\n if (metadata && metadata.updatePromise) {\n metadata.updatePromise.reject(shakaErr);\n }\n this.activeSessions_.delete(session);\n if (this.areAllSessionsLoaded_()) {\n this.allSessionsLoaded_.resolve();\n this.keyStatusTimer_.tickAfter(/* seconds= */ 0.1);\n }\n }\n return;\n }\n if (this.destroyer_.destroyed()) {\n return;\n }\n\n this.licenseTimeSeconds_ += (Date.now() - startTimeRequest) / 1000;\n\n if (this.config_.logLicenseExchange) {\n const str = shaka.util.Uint8ArrayUtils.toBase64(response.data);\n shaka.log.info('EME license response', str);\n }\n\n // Request succeeded, now pass the response to the CDM.\n try {\n shaka.log.v1('Updating session', session.sessionId);\n await session.update(response.data);\n } catch (error) {\n // Session update failed!\n const shakaErr = new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.DRM,\n shaka.util.Error.Code.LICENSE_RESPONSE_REJECTED,\n error.message);\n this.onError_(shakaErr);\n if (metadata && metadata.updatePromise) {\n metadata.updatePromise.reject(shakaErr);\n }\n return;\n }\n if (this.destroyer_.destroyed()) {\n return;\n }\n\n const updateEvent = new shaka.util.FakeEvent('drmsessionupdate');\n this.playerInterface_.onEvent(updateEvent);\n\n if (metadata) {\n if (metadata.updatePromise) {\n metadata.updatePromise.resolve();\n }\n\n this.setLoadSessionTimeoutTimer_(metadata);\n }\n }\n\n /**\n * Unpacks PlayReady license requests. Modifies the request object.\n * @param {shaka.extern.Request} request\n * @private\n */\n unpackPlayReadyRequest_(request) {\n // On Edge, the raw license message is UTF-16-encoded XML. We need\n // to unpack the Challenge element (base64-encoded string containing the\n // actual license request) and any HttpHeader elements (sent as request\n // headers).\n\n // Example XML:\n\n // \n // \n // {Base64Data}\n // \n // \n // Content-Type\n // text/xml; charset=utf-8\n // \n // \n // SOAPAction\n // http://schemas.microsoft.com/DRM/etc/etc\n // \n // \n // \n // \n const TXml = shaka.util.TXml;\n\n const xml = shaka.util.StringUtils.fromUTF16(\n request.body, /* littleEndian= */ true, /* noThrow= */ true);\n if (!xml.includes('PlayReadyKeyMessage')) {\n // This does not appear to be a wrapped message as on Edge. Some\n // clients do not need this unwrapping, so we will assume this is one of\n // them. Note that \"xml\" at this point probably looks like random\n // garbage, since we interpreted UTF-8 as UTF-16.\n shaka.log.debug('PlayReady request is already unwrapped.');\n request.headers['Content-Type'] = 'text/xml; charset=utf-8';\n return;\n }\n shaka.log.debug('Unwrapping PlayReady request.');\n const dom = TXml.parseXmlString(xml, 'PlayReadyKeyMessage');\n goog.asserts.assert(dom, 'Failed to parse PlayReady XML!');\n\n // Set request headers.\n const headers = TXml.getElementsByTagName(dom, 'HttpHeader');\n for (const header of headers) {\n const name = TXml.getElementsByTagName(header, 'name')[0];\n const value = TXml.getElementsByTagName(header, 'value')[0];\n goog.asserts.assert(name && value, 'Malformed PlayReady headers!');\n request.headers[\n /** @type {string} */(shaka.util.TXml.getTextContents(name))] =\n /** @type {string} */(shaka.util.TXml.getTextContents(value));\n }\n\n // Unpack the base64-encoded challenge.\n const challenge = TXml.getElementsByTagName(dom, 'Challenge')[0];\n goog.asserts.assert(challenge,\n 'Malformed PlayReady challenge!');\n goog.asserts.assert(challenge.attributes['encoding'] == 'base64encoded',\n 'Unexpected PlayReady challenge encoding!');\n request.body = shaka.util.Uint8ArrayUtils.fromBase64(\n /** @type{string} */(shaka.util.TXml.getTextContents(challenge)));\n }\n\n /**\n * @param {!Event} event\n * @private\n * @suppress {invalidCasts} to swap keyId and status\n */\n onKeyStatusesChange_(event) {\n const session = /** @type {!MediaKeySession} */(event.target);\n shaka.log.v2('Key status changed for session', session.sessionId);\n\n const found = this.activeSessions_.get(session);\n const keyStatusMap = session.keyStatuses;\n let hasExpiredKeys = false;\n\n keyStatusMap.forEach((status, keyId) => {\n // The spec has changed a few times on the exact order of arguments here.\n // As of 2016-06-30, Edge has the order reversed compared to the current\n // EME spec. Given the back and forth in the spec, it may not be the only\n // one. Try to detect this and compensate:\n if (typeof keyId == 'string') {\n const tmp = keyId;\n keyId = /** @type {!ArrayBuffer} */(status);\n status = /** @type {string} */(tmp);\n }\n\n // Microsoft's implementation in Edge seems to present key IDs as\n // little-endian UUIDs, rather than big-endian or just plain array of\n // bytes.\n // standard: 6e 5a 1d 26 - 27 57 - 47 d7 - 80 46 ea a5 d1 d3 4b 5a\n // on Edge: 26 1d 5a 6e - 57 27 - d7 47 - 80 46 ea a5 d1 d3 4b 5a\n // Bug filed: https://bit.ly/2thuzXu\n\n // NOTE that we skip this if byteLength != 16. This is used for Edge\n // which uses single-byte dummy key IDs.\n // However, unlike Edge and Chromecast, Tizen doesn't have this problem.\n if (shaka.util.DrmUtils.isPlayReadyKeySystem(\n this.currentDrmInfo_.keySystem) &&\n keyId.byteLength == 16 &&\n (shaka.util.Platform.isEdge() || shaka.util.Platform.isPS4())) {\n // Read out some fields in little-endian:\n const dataView = shaka.util.BufferUtils.toDataView(keyId);\n const part0 = dataView.getUint32(0, /* LE= */ true);\n const part1 = dataView.getUint16(4, /* LE= */ true);\n const part2 = dataView.getUint16(6, /* LE= */ true);\n // Write it back in big-endian:\n dataView.setUint32(0, part0, /* BE= */ false);\n dataView.setUint16(4, part1, /* BE= */ false);\n dataView.setUint16(6, part2, /* BE= */ false);\n }\n\n if (status != 'status-pending') {\n found.loaded = true;\n }\n\n if (!found) {\n // We can get a key status changed for a closed session after it has\n // been removed from |activeSessions_|. If it is closed, none of its\n // keys should be usable.\n goog.asserts.assert(\n status != 'usable', 'Usable keys found in closed session');\n }\n\n if (status == 'expired') {\n hasExpiredKeys = true;\n }\n\n const keyIdHex = shaka.util.Uint8ArrayUtils.toHex(keyId).slice(0, 32);\n\n this.keyStatusByKeyId_.set(keyIdHex, status);\n });\n\n // If the session has expired, close it.\n // Some CDMs do not have sub-second time resolution, so the key status may\n // fire with hundreds of milliseconds left until the stated expiration time.\n const msUntilExpiration = session.expiration - Date.now();\n if (msUntilExpiration < 0 || (hasExpiredKeys && msUntilExpiration < 1000)) {\n // If this is part of a remove(), we don't want to close the session until\n // the update is complete. Otherwise, we will orphan the session.\n if (found && !found.updatePromise) {\n shaka.log.debug('Session has expired', session.sessionId);\n this.activeSessions_.delete(session);\n session.close().catch(() => {}); // Silence uncaught rejection errors\n }\n }\n\n if (!this.areAllSessionsLoaded_()) {\n // Don't announce key statuses or resolve the \"all loaded\" promise until\n // everything is loaded.\n return;\n }\n\n this.allSessionsLoaded_.resolve();\n\n // Batch up key status changes before checking them or notifying Player.\n // This handles cases where the statuses of multiple sessions are set\n // simultaneously by the browser before dispatching key status changes for\n // each of them. By batching these up, we only send one status change event\n // and at most one EXPIRED error on expiration.\n this.keyStatusTimer_.tickAfter(\n /* seconds= */ shaka.media.DrmEngine.KEY_STATUS_BATCH_TIME);\n }\n\n /** @private */\n processKeyStatusChanges_() {\n const privateMap = this.keyStatusByKeyId_;\n const publicMap = this.announcedKeyStatusByKeyId_;\n\n // Copy the latest key statuses into the publicly-accessible map.\n publicMap.clear();\n privateMap.forEach((status, keyId) => publicMap.set(keyId, status));\n\n // If all keys are expired, fire an error. |every| is always true for an\n // empty array but we shouldn't fire an error for a lack of key status info.\n const statuses = Array.from(publicMap.values());\n const allExpired = statuses.length &&\n statuses.every((status) => status == 'expired');\n\n if (allExpired) {\n this.onError_(new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.DRM,\n shaka.util.Error.Code.EXPIRED));\n }\n\n this.playerInterface_.onKeyStatus(shaka.util.MapUtils.asObject(publicMap));\n }\n\n /**\n * Returns a Promise to a map of EME support for well-known key systems.\n *\n * @return {!Promise.>}\n */\n static async probeSupport() {\n goog.asserts.assert(shaka.util.DrmUtils.isBrowserSupported(),\n 'Must have basic EME support');\n\n const testKeySystems = [\n 'org.w3.clearkey',\n 'com.widevine.alpha',\n 'com.widevine.alpha.experiment', // Widevine L1 in Windows\n 'com.microsoft.playready',\n 'com.microsoft.playready.hardware',\n 'com.microsoft.playready.recommendation',\n 'com.chromecast.playready',\n 'com.apple.fps.1_0',\n 'com.apple.fps',\n ];\n\n const widevineRobustness = [\n 'SW_SECURE_CRYPTO',\n 'SW_SECURE_DECODE',\n 'HW_SECURE_CRYPTO',\n 'HW_SECURE_DECODE',\n 'HW_SECURE_ALL',\n ];\n\n const playreadyRobustness = [\n '150',\n '2000',\n '3000',\n ];\n\n const testRobustness = {\n 'com.widevine.alpha': widevineRobustness,\n 'com.widevine.alpha.experiment': widevineRobustness,\n 'com.microsoft.playready.recommendation': playreadyRobustness,\n };\n\n const basicVideoCapabilities = [\n {contentType: 'video/mp4; codecs=\"avc1.42E01E\"'},\n {contentType: 'video/webm; codecs=\"vp8\"'},\n ];\n\n const basicAudioCapabilities = [\n {contentType: 'audio/mp4; codecs=\"mp4a.40.2\"'},\n {contentType: 'audio/webm; codecs=\"opus\"'},\n ];\n\n const basicConfigTemplate = {\n videoCapabilities: basicVideoCapabilities,\n audioCapabilities: basicAudioCapabilities,\n initDataTypes: ['cenc', 'sinf', 'skd', 'keyids'],\n };\n\n const testEncryptionSchemes = [\n null,\n 'cenc',\n 'cbcs',\n 'cbcs-1-9',\n ];\n\n /** @type {!Map.} */\n const support = new Map();\n\n /**\n * @param {string} keySystem\n * @param {MediaKeySystemAccess} access\n * @return {!Promise}\n */\n const processMediaKeySystemAccess = async (keySystem, access) => {\n try {\n await access.createMediaKeys();\n } catch (error) {\n // In some cases, we can get a successful access object but fail to\n // create a MediaKeys instance. When this happens, don't update the\n // support structure. If a previous test succeeded, we won't overwrite\n // any of the results.\n return;\n }\n\n // If sessionTypes is missing, assume no support for persistent-license.\n const sessionTypes = access.getConfiguration().sessionTypes;\n let persistentState = sessionTypes ?\n sessionTypes.includes('persistent-license') : false;\n\n // Tizen 3.0 doesn't support persistent licenses, but reports that it\n // does. It doesn't fail until you call update() with a license\n // response, which is way too late.\n // This is a work-around for #894.\n if (shaka.util.Platform.isTizen3()) {\n persistentState = false;\n }\n\n const videoCapabilities = access.getConfiguration().videoCapabilities;\n const audioCapabilities = access.getConfiguration().audioCapabilities;\n\n let supportValue = {\n persistentState,\n encryptionSchemes: [],\n videoRobustnessLevels: [],\n audioRobustnessLevels: [],\n };\n if (support.has(keySystem) && support.get(keySystem)) {\n // Update the existing non-null value.\n supportValue = support.get(keySystem);\n } else {\n // Set a new one.\n support.set(keySystem, supportValue);\n }\n\n // If the returned config doesn't mention encryptionScheme, the field\n // is not supported. If installed, our polyfills should make sure this\n // doesn't happen.\n const returnedScheme = videoCapabilities[0].encryptionScheme;\n if (returnedScheme &&\n !supportValue.encryptionSchemes.includes(returnedScheme)) {\n supportValue.encryptionSchemes.push(returnedScheme);\n }\n\n const videoRobustness = videoCapabilities[0].robustness;\n if (videoRobustness &&\n !supportValue.videoRobustnessLevels.includes(videoRobustness)) {\n supportValue.videoRobustnessLevels.push(videoRobustness);\n }\n\n const audioRobustness = audioCapabilities[0].robustness;\n if (audioRobustness &&\n !supportValue.audioRobustnessLevels.includes(audioRobustness)) {\n supportValue.audioRobustnessLevels.push(audioRobustness);\n }\n };\n\n const testSystemEme = async (keySystem, encryptionScheme,\n videoRobustness, audioRobustness) => {\n try {\n const basicConfig =\n shaka.util.ObjectUtils.cloneObject(basicConfigTemplate);\n for (const cap of basicConfig.videoCapabilities) {\n cap.encryptionScheme = encryptionScheme;\n cap.robustness = videoRobustness;\n }\n for (const cap of basicConfig.audioCapabilities) {\n cap.encryptionScheme = encryptionScheme;\n cap.robustness = audioRobustness;\n }\n\n const offlineConfig = shaka.util.ObjectUtils.cloneObject(basicConfig);\n offlineConfig.persistentState = 'required';\n offlineConfig.sessionTypes = ['persistent-license'];\n\n const configs = [offlineConfig, basicConfig];\n\n const access = await navigator.requestMediaKeySystemAccess(\n keySystem, configs);\n await processMediaKeySystemAccess(keySystem, access);\n } catch (error) {} // Ignore errors.\n };\n\n const testSystemMcap = async (keySystem, encryptionScheme,\n videoRobustness, audioRobustness) => {\n try {\n const decodingConfig = {\n type: 'media-source',\n video: {\n contentType: basicVideoCapabilities[0].contentType,\n width: 640,\n height: 480,\n bitrate: 1,\n framerate: 1,\n },\n audio: {\n contentType: basicAudioCapabilities[0].contentType,\n channels: 2,\n bitrate: 1,\n samplerate: 1,\n },\n keySystemConfiguration: {\n keySystem,\n video: {\n encryptionScheme,\n robustness: videoRobustness,\n },\n audio: {\n encryptionScheme,\n robustness: audioRobustness,\n },\n },\n };\n\n const decodingInfo =\n await navigator.mediaCapabilities.decodingInfo(decodingConfig);\n\n const access = decodingInfo.keySystemAccess;\n await processMediaKeySystemAccess(keySystem, access);\n } catch (error) {} // Ignore errors.\n };\n\n // Initialize the support structure for each key system.\n for (const keySystem of testKeySystems) {\n support.set(keySystem, null);\n }\n\n // Test each key system and encryption scheme.\n const tests = [];\n for (const encryptionScheme of testEncryptionSchemes) {\n for (const keySystem of testKeySystems) {\n // Our Polyfill will reject anything apart com.apple.fps key systems.\n // It seems the Safari modern EME API will allow to request a\n // MediaKeySystemAccess for the ClearKey CDM, create and update a key\n // session but playback will never start\n // Safari bug: https://bugs.webkit.org/show_bug.cgi?id=231006\n if (keySystem === 'org.w3.clearkey' &&\n shaka.util.Platform.isSafari()) {\n continue;\n }\n tests.push(testSystemEme(keySystem, encryptionScheme, '', ''));\n tests.push(testSystemMcap(keySystem, encryptionScheme, '', ''));\n }\n }\n\n for (const keySystem of testKeySystems) {\n for (const robustness of (testRobustness[keySystem] || [])) {\n tests.push(testSystemEme(keySystem, null, robustness, ''));\n tests.push(testSystemEme(keySystem, null, '', robustness));\n tests.push(testSystemMcap(keySystem, null, robustness, ''));\n tests.push(testSystemMcap(keySystem, null, '', robustness));\n }\n }\n\n await Promise.all(tests);\n return shaka.util.MapUtils.asObject(support);\n }\n\n /** @private */\n onPlay_() {\n for (const event of this.mediaKeyMessageEvents_) {\n this.sendLicenseRequest_(event);\n }\n\n this.initialRequestsSent_ = true;\n this.mediaKeyMessageEvents_ = [];\n }\n\n /**\n * Close a drm session while accounting for a bug in Chrome. Sometimes the\n * Promise returned by close() never resolves.\n *\n * See issue #2741 and http://crbug.com/1108158.\n * @param {!MediaKeySession} session\n * @return {!Promise}\n * @private\n */\n async closeSession_(session) {\n const DrmEngine = shaka.media.DrmEngine;\n\n const timeout = new Promise((resolve, reject) => {\n const timer = new shaka.util.Timer(reject);\n timer.tickAfter(DrmEngine.CLOSE_TIMEOUT_);\n });\n\n try {\n await Promise.race([\n Promise.all([session.close(), session.closed]),\n timeout,\n ]);\n } catch (e) {\n shaka.log.warning('Timeout waiting for session close');\n }\n }\n\n /** @private */\n async closeOpenSessions_() {\n // Close all open sessions.\n const openSessions = Array.from(this.activeSessions_.entries());\n this.activeSessions_.clear();\n\n // Close all sessions before we remove media keys from the video element.\n await Promise.all(openSessions.map(async ([session, metadata]) => {\n try {\n /**\n * Special case when a persistent-license session has been initiated,\n * without being registered in the offline sessions at start-up.\n * We should remove the session to prevent it from being orphaned after\n * the playback session ends\n */\n if (!this.initializedForStorage_ &&\n !this.storedPersistentSessions_.has(session.sessionId) &&\n metadata.type === 'persistent-license' &&\n !this.config_.persistentSessionOnlinePlayback) {\n shaka.log.v1('Removing session', session.sessionId);\n\n await session.remove();\n } else {\n shaka.log.v1('Closing session', session.sessionId, metadata);\n\n await this.closeSession_(session);\n }\n } catch (error) {\n // Ignore errors when closing the sessions. Closing a session that\n // generated no key requests will throw an error.\n\n shaka.log.error('Failed to close or remove the session', error);\n }\n }));\n }\n\n /**\n * Concat the audio and video drmInfos in a variant.\n * @param {shaka.extern.Variant} variant\n * @return {!Array.}\n * @private\n */\n getVariantDrmInfos_(variant) {\n const videoDrmInfos = variant.video ? variant.video.drmInfos : [];\n const audioDrmInfos = variant.audio ? variant.audio.drmInfos : [];\n return videoDrmInfos.concat(audioDrmInfos);\n }\n\n /**\n * Called in an interval timer to poll the expiration times of the sessions.\n * We don't get an event from EME when the expiration updates, so we poll it\n * so we can fire an event when it happens.\n * @private\n */\n pollExpiration_() {\n this.activeSessions_.forEach((metadata, session) => {\n const oldTime = metadata.oldExpiration;\n let newTime = session.expiration;\n if (isNaN(newTime)) {\n newTime = Infinity;\n }\n\n if (newTime != oldTime) {\n this.playerInterface_.onExpirationUpdated(session.sessionId, newTime);\n metadata.oldExpiration = newTime;\n }\n });\n }\n\n /**\n * @return {boolean}\n * @private\n */\n areAllSessionsLoaded_() {\n const metadatas = this.activeSessions_.values();\n return shaka.util.Iterables.every(metadatas, (data) => data.loaded);\n }\n\n /**\n * @return {boolean}\n * @private\n */\n areAllKeysUsable_() {\n const keyIds = (this.currentDrmInfo_ && this.currentDrmInfo_.keyIds) ||\n new Set([]);\n\n for (const keyId of keyIds) {\n const status = this.keyStatusByKeyId_.get(keyId);\n\n if (status !== 'usable') {\n return false;\n }\n }\n\n return true;\n }\n\n /**\n * Replace the drm info used in each variant in |variants| to reflect each\n * key service in |keySystems|.\n *\n * @param {!Array.} variants\n * @param {!Map.} keySystems\n * @private\n */\n static replaceDrmInfo_(variants, keySystems) {\n const drmInfos = [];\n\n keySystems.forEach((uri, keySystem) => {\n drmInfos.push({\n keySystem: keySystem,\n licenseServerUri: uri,\n distinctiveIdentifierRequired: false,\n persistentStateRequired: false,\n audioRobustness: '',\n videoRobustness: '',\n serverCertificate: null,\n serverCertificateUri: '',\n initData: [],\n keyIds: new Set(),\n });\n });\n\n for (const variant of variants) {\n if (variant.video) {\n variant.video.drmInfos = drmInfos;\n }\n if (variant.audio) {\n variant.audio.drmInfos = drmInfos;\n }\n }\n }\n\n\n /**\n * Creates a DrmInfo object describing the settings used to initialize the\n * engine.\n *\n * @param {string} keySystem\n * @param {!Array.} drmInfos\n * @return {shaka.extern.DrmInfo}\n *\n * @private\n */\n createDrmInfoByInfos_(keySystem, drmInfos) {\n /** @type {!Array.} */\n const encryptionSchemes = [];\n\n /** @type {!Array.} */\n const licenseServers = [];\n\n /** @type {!Array.} */\n const serverCertificateUris = [];\n\n /** @type {!Array.} */\n const serverCerts = [];\n\n /** @type {!Array.} */\n const initDatas = [];\n\n /** @type {!Set.} */\n const keyIds = new Set();\n\n /** @type {!Set.} */\n const keySystemUris = new Set();\n\n shaka.media.DrmEngine.processDrmInfos_(\n drmInfos, encryptionSchemes, licenseServers, serverCerts,\n serverCertificateUris, initDatas, keyIds, keySystemUris);\n\n if (encryptionSchemes.length > 1) {\n shaka.log.warning('Multiple unique encryption schemes found! ' +\n 'Only the first will be used.');\n }\n\n if (serverCerts.length > 1) {\n shaka.log.warning('Multiple unique server certificates found! ' +\n 'Only the first will be used.');\n }\n\n if (licenseServers.length > 1) {\n shaka.log.warning('Multiple unique license server URIs found! ' +\n 'Only the first will be used.');\n }\n\n if (serverCertificateUris.length > 1) {\n shaka.log.warning('Multiple unique server certificate URIs found! ' +\n 'Only the first will be used.');\n }\n\n const defaultSessionType =\n this.usePersistentLicenses_ ? 'persistent-license' : 'temporary';\n\n /** @type {shaka.extern.DrmInfo} */\n const res = {\n keySystem,\n encryptionScheme: encryptionSchemes[0],\n licenseServerUri: licenseServers[0],\n distinctiveIdentifierRequired: drmInfos[0].distinctiveIdentifierRequired,\n persistentStateRequired: drmInfos[0].persistentStateRequired,\n sessionType: drmInfos[0].sessionType || defaultSessionType,\n audioRobustness: drmInfos[0].audioRobustness || '',\n videoRobustness: drmInfos[0].videoRobustness || '',\n serverCertificate: serverCerts[0],\n serverCertificateUri: serverCertificateUris[0],\n initData: initDatas,\n keyIds,\n };\n\n if (keySystemUris.size > 0) {\n res.keySystemUris = keySystemUris;\n }\n\n for (const info of drmInfos) {\n if (info.distinctiveIdentifierRequired) {\n res.distinctiveIdentifierRequired = info.distinctiveIdentifierRequired;\n }\n\n if (info.persistentStateRequired) {\n res.persistentStateRequired = info.persistentStateRequired;\n }\n }\n\n return res;\n }\n\n /**\n * Creates a DrmInfo object describing the settings used to initialize the\n * engine.\n *\n * @param {string} keySystem\n * @param {MediaKeySystemConfiguration} config\n * @return {shaka.extern.DrmInfo}\n *\n * @private\n */\n static createDrmInfoByConfigs_(keySystem, config) {\n /** @type {!Array.} */\n const encryptionSchemes = [];\n\n /** @type {!Array.} */\n const licenseServers = [];\n\n /** @type {!Array.} */\n const serverCertificateUris = [];\n\n /** @type {!Array.} */\n const serverCerts = [];\n\n /** @type {!Array.} */\n const initDatas = [];\n\n /** @type {!Set.} */\n const keyIds = new Set();\n\n // TODO: refactor, don't stick drmInfos onto MediaKeySystemConfiguration\n shaka.media.DrmEngine.processDrmInfos_(\n config['drmInfos'], encryptionSchemes, licenseServers, serverCerts,\n serverCertificateUris, initDatas, keyIds);\n\n if (encryptionSchemes.length > 1) {\n shaka.log.warning('Multiple unique encryption schemes found! ' +\n 'Only the first will be used.');\n }\n\n if (serverCerts.length > 1) {\n shaka.log.warning('Multiple unique server certificates found! ' +\n 'Only the first will be used.');\n }\n\n if (serverCertificateUris.length > 1) {\n shaka.log.warning('Multiple unique server certificate URIs found! ' +\n 'Only the first will be used.');\n }\n\n if (licenseServers.length > 1) {\n shaka.log.warning('Multiple unique license server URIs found! ' +\n 'Only the first will be used.');\n }\n\n // TODO: This only works when all DrmInfo have the same robustness.\n const audioRobustness =\n config.audioCapabilities ? config.audioCapabilities[0].robustness : '';\n const videoRobustness =\n config.videoCapabilities ? config.videoCapabilities[0].robustness : '';\n\n const distinctiveIdentifier = config.distinctiveIdentifier;\n return {\n keySystem,\n encryptionScheme: encryptionSchemes[0],\n licenseServerUri: licenseServers[0],\n distinctiveIdentifierRequired: (distinctiveIdentifier == 'required'),\n persistentStateRequired: (config.persistentState == 'required'),\n sessionType: config.sessionTypes[0] || 'temporary',\n audioRobustness: audioRobustness || '',\n videoRobustness: videoRobustness || '',\n serverCertificate: serverCerts[0],\n serverCertificateUri: serverCertificateUris[0],\n initData: initDatas,\n keyIds,\n };\n }\n\n /**\n * Extract license server, server cert, and init data from |drmInfos|, taking\n * care to eliminate duplicates.\n *\n * @param {!Array.} drmInfos\n * @param {!Array.} licenseServers\n * @param {!Array.} encryptionSchemes\n * @param {!Array.} serverCerts\n * @param {!Array.} serverCertificateUris\n * @param {!Array.} initDatas\n * @param {!Set.} keyIds\n * @param {!Set.} [keySystemUris]\n * @private\n */\n static processDrmInfos_(\n drmInfos, encryptionSchemes, licenseServers, serverCerts,\n serverCertificateUris, initDatas, keyIds, keySystemUris) {\n /** @type {function(shaka.extern.InitDataOverride,\n * shaka.extern.InitDataOverride):boolean} */\n const initDataOverrideEqual = (a, b) => {\n if (a.keyId && a.keyId == b.keyId) {\n // Two initDatas with the same keyId are considered to be the same,\n // unless that \"same keyId\" is null.\n return true;\n }\n return a.initDataType == b.initDataType &&\n shaka.util.BufferUtils.equal(a.initData, b.initData);\n };\n\n const clearkeyDataStart = 'data:application/json;base64,';\n const clearKeyLicenseServers = [];\n\n for (const drmInfo of drmInfos) {\n // Build an array of unique encryption schemes.\n if (!encryptionSchemes.includes(drmInfo.encryptionScheme)) {\n encryptionSchemes.push(drmInfo.encryptionScheme);\n }\n\n // Build an array of unique license servers.\n if (drmInfo.keySystem == 'org.w3.clearkey' &&\n drmInfo.licenseServerUri.startsWith(clearkeyDataStart)) {\n if (!clearKeyLicenseServers.includes(drmInfo.licenseServerUri)) {\n clearKeyLicenseServers.push(drmInfo.licenseServerUri);\n }\n } else if (!licenseServers.includes(drmInfo.licenseServerUri)) {\n licenseServers.push(drmInfo.licenseServerUri);\n }\n\n // Build an array of unique license servers.\n if (!serverCertificateUris.includes(drmInfo.serverCertificateUri)) {\n serverCertificateUris.push(drmInfo.serverCertificateUri);\n }\n\n // Build an array of unique server certs.\n if (drmInfo.serverCertificate) {\n const found = serverCerts.some(\n (cert) => shaka.util.BufferUtils.equal(\n cert, drmInfo.serverCertificate));\n if (!found) {\n serverCerts.push(drmInfo.serverCertificate);\n }\n }\n\n // Build an array of unique init datas.\n if (drmInfo.initData) {\n for (const initDataOverride of drmInfo.initData) {\n const found = initDatas.some(\n (initData) =>\n initDataOverrideEqual(initData, initDataOverride));\n if (!found) {\n initDatas.push(initDataOverride);\n }\n }\n }\n\n if (drmInfo.keyIds) {\n for (const keyId of drmInfo.keyIds) {\n keyIds.add(keyId);\n }\n }\n\n if (drmInfo.keySystemUris && keySystemUris) {\n for (const keySystemUri of drmInfo.keySystemUris) {\n keySystemUris.add(keySystemUri);\n }\n }\n }\n\n if (clearKeyLicenseServers.length == 1) {\n licenseServers.push(clearKeyLicenseServers[0]);\n } else if (clearKeyLicenseServers.length > 0) {\n const keys = [];\n for (const clearKeyLicenseServer of clearKeyLicenseServers) {\n const license = window.atob(\n clearKeyLicenseServer.split(clearkeyDataStart).pop());\n const jwkSet = /** @type {{keys: !Array}} */(JSON.parse(license));\n keys.push(...jwkSet.keys);\n }\n const newJwkSet = {keys: keys};\n const newLicense = JSON.stringify(newJwkSet);\n licenseServers.push(clearkeyDataStart + window.btoa(newLicense));\n }\n }\n\n /**\n * Use |servers| and |advancedConfigs| to fill in missing values in drmInfo\n * that the parser left blank. Before working with any drmInfo, it should be\n * passed through here as it is uncommon for drmInfo to be complete when\n * fetched from a manifest because most manifest formats do not have the\n * required information. Also applies the key systems mapping.\n *\n * @param {shaka.extern.DrmInfo} drmInfo\n * @param {!Map.} servers\n * @param {!Map.}\n * advancedConfigs\n * @param {!Object.} keySystemsMapping\n * @private\n */\n static fillInDrmInfoDefaults_(drmInfo, servers, advancedConfigs,\n keySystemsMapping) {\n const originalKeySystem = drmInfo.keySystem;\n\n if (!originalKeySystem) {\n // This is a placeholder from the manifest parser for an unrecognized key\n // system. Skip this entry, to avoid logging nonsensical errors.\n return;\n }\n\n // The order of preference for drmInfo:\n // 1. Clear Key config, used for debugging, should override everything else.\n // (The application can still specify a clearkey license server.)\n // 2. Application-configured servers, if any are present, should override\n // anything from the manifest. Nuance: if key system A is in the\n // manifest and key system B is in the player config, only B will be\n // used, not A.\n // 3. Manifest-provided license servers are only used if nothing else is\n // specified.\n // This is important because it allows the application a clear way to\n // indicate which DRM systems should be used on platforms with multiple DRM\n // systems.\n // The only way to get license servers from the manifest is not to specify\n // any in your player config.\n\n if (originalKeySystem == 'org.w3.clearkey' && drmInfo.licenseServerUri) {\n // Preference 1: Clear Key with pre-configured keys will have a data URI\n // assigned as its license server. Don't change anything.\n return;\n } else if (servers.size) {\n // Preference 2: If anything is configured at the application level,\n // override whatever was in the manifest.\n const server = servers.get(originalKeySystem) || '';\n\n drmInfo.licenseServerUri = server;\n } else {\n // Preference 3: Keep whatever we had in drmInfo.licenseServerUri, which\n // comes from the manifest.\n }\n\n if (!drmInfo.keyIds) {\n drmInfo.keyIds = new Set();\n }\n\n const advancedConfig = advancedConfigs.get(originalKeySystem);\n\n if (advancedConfig) {\n if (!drmInfo.distinctiveIdentifierRequired) {\n drmInfo.distinctiveIdentifierRequired =\n advancedConfig.distinctiveIdentifierRequired;\n }\n\n if (!drmInfo.persistentStateRequired) {\n drmInfo.persistentStateRequired =\n advancedConfig.persistentStateRequired;\n }\n\n if (!drmInfo.videoRobustness) {\n drmInfo.videoRobustness = advancedConfig.videoRobustness;\n }\n\n if (!drmInfo.audioRobustness) {\n drmInfo.audioRobustness = advancedConfig.audioRobustness;\n }\n\n if (!drmInfo.serverCertificate) {\n drmInfo.serverCertificate = advancedConfig.serverCertificate;\n }\n\n if (advancedConfig.sessionType) {\n drmInfo.sessionType = advancedConfig.sessionType;\n }\n\n if (!drmInfo.serverCertificateUri) {\n drmInfo.serverCertificateUri = advancedConfig.serverCertificateUri;\n }\n }\n\n if (keySystemsMapping[originalKeySystem]) {\n drmInfo.keySystem = keySystemsMapping[originalKeySystem];\n }\n\n // Chromecast has a variant of PlayReady that uses a different key\n // system ID. Since manifest parsers convert the standard PlayReady\n // UUID to the standard PlayReady key system ID, here we will switch\n // to the Chromecast version if we are running on that platform.\n // Note that this must come after fillInDrmInfoDefaults_, since the\n // player config uses the standard PlayReady ID for license server\n // configuration.\n if (window.cast && window.cast.__platform__) {\n if (originalKeySystem == 'com.microsoft.playready') {\n drmInfo.keySystem = 'com.chromecast.playready';\n }\n }\n }\n\n /**\n * Parse pssh from a media segment and announce new initData\n *\n * @param {shaka.util.ManifestParserUtils.ContentType} contentType\n * @param {!BufferSource} mediaSegment\n * @return {!Promise}\n */\n parseInbandPssh(contentType, mediaSegment) {\n if (!this.config_.parseInbandPsshEnabled || this.manifestInitData_) {\n return Promise.resolve();\n }\n\n const ContentType = shaka.util.ManifestParserUtils.ContentType;\n if (![ContentType.AUDIO, ContentType.VIDEO].includes(contentType)) {\n return Promise.resolve();\n }\n\n const pssh = new shaka.util.Pssh(\n shaka.util.BufferUtils.toUint8(mediaSegment));\n\n let totalLength = 0;\n for (const data of pssh.data) {\n totalLength += data.length;\n }\n if (totalLength == 0) {\n return Promise.resolve();\n }\n const combinedData = new Uint8Array(totalLength);\n let pos = 0;\n for (const data of pssh.data) {\n combinedData.set(data, pos);\n pos += data.length;\n }\n this.newInitData('cenc', combinedData);\n return this.allSessionsLoaded_;\n }\n};\n\n\n/**\n * @typedef {{\n * loaded: boolean,\n * initData: Uint8Array,\n * initDataType: ?string,\n * oldExpiration: number,\n * type: string,\n * updatePromise: shaka.util.PublicPromise\n * }}\n *\n * @description A record to track sessions and suppress duplicate init data.\n * @property {boolean} loaded\n * True once the key status has been updated (to a non-pending state). This\n * does not mean the session is 'usable'.\n * @property {Uint8Array} initData\n * The init data used to create the session.\n * @property {?string} initDataType\n * The init data type used to create the session.\n * @property {!MediaKeySession} session\n * The session object.\n * @property {number} oldExpiration\n * The expiration of the session on the last check. This is used to fire\n * an event when it changes.\n * @property {string} type\n * The session type\n * @property {shaka.util.PublicPromise} updatePromise\n * An optional Promise that will be resolved/rejected on the next update()\n * call. This is used to track the 'license-release' message when calling\n * remove().\n */\nshaka.media.DrmEngine.SessionMetaData;\n\n\n/**\n * @typedef {{\n * netEngine: !shaka.net.NetworkingEngine,\n * onError: function(!shaka.util.Error),\n * onKeyStatus: function(!Object.),\n * onExpirationUpdated: function(string,number),\n * onEvent: function(!Event)\n * }}\n *\n * @property {shaka.net.NetworkingEngine} netEngine\n * The NetworkingEngine instance to use. The caller retains ownership.\n * @property {function(!shaka.util.Error)} onError\n * Called when an error occurs. If the error is recoverable (see\n * {@link shaka.util.Error}) then the caller may invoke either\n * StreamingEngine.switch*() or StreamingEngine.seeked() to attempt recovery.\n * @property {function(!Object.)} onKeyStatus\n * Called when key status changes. The argument is a map of hex key IDs to\n * statuses.\n * @property {function(string,number)} onExpirationUpdated\n * Called when the session expiration value changes.\n * @property {function(!Event)} onEvent\n * Called when an event occurs that should be sent to the app.\n */\nshaka.media.DrmEngine.PlayerInterface;\n\n/**\n * The amount of time, in seconds, we wait to consider a session closed.\n * This allows us to work around Chrome bug https://crbug.com/1108158.\n * @private {number}\n */\nshaka.media.DrmEngine.CLOSE_TIMEOUT_ = 1;\n\n\n/**\n * The amount of time, in seconds, we wait to consider session loaded even if no\n * key status information is available. This allows us to support browsers/CDMs\n * without key statuses.\n * @private {number}\n */\nshaka.media.DrmEngine.SESSION_LOAD_TIMEOUT_ = 5;\n\n\n/**\n * The amount of time, in seconds, we wait to batch up rapid key status changes.\n * This allows us to avoid multiple expiration events in most cases.\n * @type {number}\n */\nshaka.media.DrmEngine.KEY_STATUS_BATCH_TIME = 0.5;\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.media.InitSegmentReference');\ngoog.provide('shaka.media.SegmentReference');\n\ngoog.require('goog.asserts');\ngoog.require('shaka.log');\ngoog.require('shaka.util.ArrayUtils');\ngoog.require('shaka.util.BufferUtils');\n\n\n/**\n * Creates an InitSegmentReference, which provides the location to an\n * initialization segment.\n *\n * @export\n */\nshaka.media.InitSegmentReference = class {\n /**\n * @param {function():!Array.} uris A function that creates the URIs\n * of the resource containing the segment.\n * @param {number} startByte The offset from the start of the resource to the\n * start of the segment.\n * @param {?number} endByte The offset from the start of the resource\n * to the end of the segment, inclusive. A value of null indicates that the\n * segment extends to the end of the resource.\n * @param {null|shaka.extern.MediaQualityInfo=} mediaQuality Information about\n * the quality of the media associated with this init segment.\n * @param {(null|number)=} timescale\n * @param {(null|BufferSource)=} segmentData\n * @param {?shaka.extern.aesKey=} aesKey\n * The segment's AES-128-CBC full segment encryption key and iv.\n */\n constructor(uris, startByte, endByte, mediaQuality = null, timescale = null,\n segmentData = null, aesKey = null) {\n /** @type {function():!Array.} */\n this.getUris = uris;\n\n /** @const {number} */\n this.startByte = startByte;\n\n /** @const {?number} */\n this.endByte = endByte;\n\n /** @type {shaka.extern.MediaQualityInfo|null} */\n this.mediaQuality = mediaQuality;\n\n /** @type {number|null} */\n this.timescale = timescale;\n\n /** @type {BufferSource|null} */\n this.segmentData = segmentData;\n\n /** @type {?shaka.extern.aesKey} */\n this.aesKey = aesKey;\n\n /** @type {?string} */\n this.codecs = null;\n\n /** @type {?string} */\n this.mimeType = null;\n }\n\n /**\n * Returns the offset from the start of the resource to the\n * start of the segment.\n *\n * @return {number}\n * @export\n */\n getStartByte() {\n return this.startByte;\n }\n\n /**\n * Returns the offset from the start of the resource to the end of the\n * segment, inclusive. A value of null indicates that the segment extends\n * to the end of the resource.\n *\n * @return {?number}\n * @export\n */\n getEndByte() {\n return this.endByte;\n }\n\n /**\n * Returns the size of the init segment.\n * @return {?number}\n */\n getSize() {\n if (this.endByte) {\n return this.endByte - this.startByte;\n } else {\n return null;\n }\n }\n\n /**\n * Returns media quality information for the segments associated with\n * this init segment.\n *\n * @return {?shaka.extern.MediaQualityInfo}\n */\n getMediaQuality() {\n return this.mediaQuality;\n }\n\n /**\n * Return the segment data.\n *\n * @return {?BufferSource}\n */\n getSegmentData() {\n return this.segmentData;\n }\n\n\n /**\n * Check if two initSegmentReference have all the same values.\n * @param {?shaka.media.InitSegmentReference} reference1\n * @param {?shaka.media.InitSegmentReference} reference2\n * @return {boolean}\n */\n static equal(reference1, reference2) {\n const ArrayUtils = shaka.util.ArrayUtils;\n const BufferUtils = shaka.util.BufferUtils;\n\n if (reference1 === reference2) {\n return true;\n } else if (!reference1 || !reference2) {\n return reference1 == reference2;\n } else {\n return reference1.getStartByte() == reference2.getStartByte() &&\n reference1.getEndByte() == reference2.getEndByte() &&\n ArrayUtils.equal(\n reference1.getUris().sort(), reference2.getUris().sort()) &&\n BufferUtils.equal(reference1.getSegmentData(),\n reference2.getSegmentData());\n }\n }\n};\n\n\n/**\n * SegmentReference provides the start time, end time, and location to a media\n * segment.\n *\n * @export\n */\nshaka.media.SegmentReference = class {\n /**\n * @param {number} startTime The segment's start time in seconds.\n * @param {number} endTime The segment's end time in seconds. The segment\n * ends the instant before this time, so |endTime| must be strictly greater\n * than |startTime|.\n * @param {function():!Array.} uris\n * A function that creates the URIs of the resource containing the segment.\n * @param {number} startByte The offset from the start of the resource to the\n * start of the segment.\n * @param {?number} endByte The offset from the start of the resource to the\n * end of the segment, inclusive. A value of null indicates that the\n * segment extends to the end of the resource.\n * @param {shaka.media.InitSegmentReference} initSegmentReference\n * The segment's initialization segment metadata, or null if the segments\n * are self-initializing.\n * @param {number} timestampOffset\n * The amount of time, in seconds, that must be added to the segment's\n * internal timestamps to align it to the presentation timeline.\n *
\n * For DASH, this value should equal the Period start time minus the first\n * presentation timestamp of the first frame/sample in the Period. For\n * example, for MP4 based streams, this value should equal Period start\n * minus the first segment's tfdt box's 'baseMediaDecodeTime' field (after\n * it has been converted to seconds).\n *
\n * For HLS, this value should be the start time of the most recent\n * discontinuity, or 0 if there is no preceding discontinuity. Only used\n * in segments mode.\n * @param {number} appendWindowStart\n * The start of the append window for this reference, relative to the\n * presentation. Any content from before this time will be removed by\n * MediaSource.\n * @param {number} appendWindowEnd\n * The end of the append window for this reference, relative to the\n * presentation. Any content from after this time will be removed by\n * MediaSource.\n * @param {!Array.=} partialReferences\n * A list of SegmentReferences for the partial segments.\n * @param {?string=} tilesLayout\n * The value is a grid-item-dimension consisting of two positive decimal\n * integers in the format: column-x-row ('4x3'). It describes the\n * arrangement of Images in a Grid. The minimum valid LAYOUT is '1x1'.\n * @param {?number=} tileDuration\n * The explicit duration of an individual tile within the tiles grid.\n * If not provided, the duration should be automatically calculated based on\n * the duration of the reference.\n * @param {?number=} syncTime\n * A time value, expressed in seconds since 1970, which is used to\n * synchronize between streams. Both produced and consumed by the HLS\n * parser. Other components should not need this value.\n * @param {shaka.media.SegmentReference.Status=} status\n * The segment status is used to indicate that a segment does not exist or is\n * not available.\n * @param {?shaka.extern.aesKey=} aesKey\n * The segment's AES-128-CBC full segment encryption key and iv.\n * @param {boolean=} allPartialSegments\n * Indicate if the segment has all partial segments\n */\n constructor(\n startTime, endTime, uris, startByte, endByte, initSegmentReference,\n timestampOffset, appendWindowStart, appendWindowEnd,\n partialReferences = [], tilesLayout = '', tileDuration = null,\n syncTime = null, status = shaka.media.SegmentReference.Status.AVAILABLE,\n aesKey = null, allPartialSegments = false) {\n // A preload hinted Partial Segment has the same startTime and endTime.\n goog.asserts.assert(startTime <= endTime,\n 'startTime must be less than or equal to endTime');\n goog.asserts.assert((endByte == null) || (startByte < endByte),\n 'startByte must be < endByte');\n\n /** @type {number} */\n this.startTime = startTime;\n\n /** @type {number} */\n this.endTime = endTime;\n\n /**\n * The \"true\" end time of the segment, without considering the period end\n * time. This is necessary for thumbnail segments, where timing requires us\n * to know the original segment duration as described in the manifest.\n * @type {number}\n */\n this.trueEndTime = endTime;\n\n /** @type {function():!Array.} */\n this.getUrisInner = uris;\n\n /** @const {number} */\n this.startByte = startByte;\n\n /** @const {?number} */\n this.endByte = endByte;\n\n /** @type {shaka.media.InitSegmentReference} */\n this.initSegmentReference = initSegmentReference;\n\n /** @type {number} */\n this.timestampOffset = timestampOffset;\n\n /** @type {number} */\n this.appendWindowStart = appendWindowStart;\n\n /** @type {number} */\n this.appendWindowEnd = appendWindowEnd;\n\n /** @type {!Array.} */\n this.partialReferences = partialReferences;\n\n /** @type {?string} */\n this.tilesLayout = tilesLayout;\n\n /** @type {?number} */\n this.tileDuration = tileDuration;\n\n /**\n * A time value, expressed in seconds since 1970, which is used to\n * synchronize between streams. Both produced and consumed by the HLS\n * parser. Other components should not need this value.\n *\n * @type {?number}\n */\n this.syncTime = syncTime;\n\n /** @type {shaka.media.SegmentReference.Status} */\n this.status = status;\n\n /** @type {boolean} */\n this.preload = false;\n\n /** @type {boolean} */\n this.independent = true;\n\n /** @type {boolean} */\n this.byterangeOptimization = false;\n\n /** @type {?shaka.extern.aesKey} */\n this.aesKey = aesKey;\n\n /** @type {?shaka.extern.ThumbnailSprite} */\n this.thumbnailSprite = null;\n\n /** @type {number} */\n this.discontinuitySequence = -1;\n\n /** @type {boolean} */\n this.allPartialSegments = allPartialSegments;\n\n /** @type {boolean} */\n this.partial = false;\n\n /** @type {boolean} */\n this.lastPartial = false;\n\n for (const partial of this.partialReferences) {\n partial.markAsPartial();\n }\n if (this.allPartialSegments && this.partialReferences.length) {\n const lastPartial =\n this.partialReferences[this.partialReferences.length - 1];\n lastPartial.markAsLastPartial();\n }\n\n /** @type {?string} */\n this.codecs = null;\n\n /** @type {?string} */\n this.mimeType = null;\n\n /** @type {?number} */\n this.bandwidth = null;\n\n /** @type {BufferSource|null} */\n this.segmentData = null;\n }\n\n /**\n * Creates and returns the URIs of the resource containing the segment.\n *\n * @return {!Array.}\n * @export\n */\n getUris() {\n return this.getUrisInner();\n }\n\n /**\n * Returns the segment's start time in seconds.\n *\n * @return {number}\n * @export\n */\n getStartTime() {\n return this.startTime;\n }\n\n /**\n * Returns the segment's end time in seconds.\n *\n * @return {number}\n * @export\n */\n getEndTime() {\n return this.endTime;\n }\n\n /**\n * Returns the offset from the start of the resource to the\n * start of the segment.\n *\n * @return {number}\n * @export\n */\n getStartByte() {\n return this.startByte;\n }\n\n /**\n * Returns the offset from the start of the resource to the end of the\n * segment, inclusive. A value of null indicates that the segment extends to\n * the end of the resource.\n *\n * @return {?number}\n * @export\n */\n getEndByte() {\n return this.endByte;\n }\n\n /**\n * Returns the size of the segment.\n * @return {?number}\n */\n getSize() {\n if (this.endByte) {\n return this.endByte - this.startByte;\n } else {\n return null;\n }\n }\n\n /**\n * Returns true if it contains partial SegmentReferences.\n * @return {boolean}\n */\n hasPartialSegments() {\n return this.partialReferences.length > 0;\n }\n\n /**\n * Returns true if it contains all partial SegmentReferences.\n * @return {boolean}\n */\n hasAllPartialSegments() {\n return this.allPartialSegments;\n }\n\n /**\n * Returns the segment's tiles layout. Only defined in image segments.\n *\n * @return {?string}\n * @export\n */\n getTilesLayout() {\n return this.tilesLayout;\n }\n\n /**\n * Returns the segment's explicit tile duration.\n * Only defined in image segments.\n *\n * @return {?number}\n * @export\n */\n getTileDuration() {\n return this.tileDuration;\n }\n\n /**\n * Returns the segment's status.\n *\n * @return {shaka.media.SegmentReference.Status}\n * @export\n */\n getStatus() {\n return this.status;\n }\n\n /**\n * Mark the reference as unavailable.\n *\n * @export\n */\n markAsUnavailable() {\n this.status = shaka.media.SegmentReference.Status.UNAVAILABLE;\n }\n\n /**\n * Mark the reference as preload.\n *\n * @export\n */\n markAsPreload() {\n this.preload = true;\n }\n\n /**\n * Returns true if the segment is preloaded.\n *\n * @return {boolean}\n * @export\n */\n isPreload() {\n return this.preload;\n }\n\n /**\n * Mark the reference as non-independent.\n *\n * @export\n */\n markAsNonIndependent() {\n this.independent = false;\n }\n\n /**\n * Returns true if the segment is independent.\n *\n * @return {boolean}\n * @export\n */\n isIndependent() {\n return this.independent;\n }\n\n /**\n * Mark the reference as partial.\n *\n * @export\n */\n markAsPartial() {\n this.partial = true;\n }\n\n /**\n * Returns true if the segment is partial.\n *\n * @return {boolean}\n * @export\n */\n isPartial() {\n return this.partial;\n }\n\n /**\n * Mark the reference as being the last part of the full segment\n *\n * @export\n */\n markAsLastPartial() {\n this.lastPartial = true;\n }\n\n /**\n * Returns true if reference as being the last part of the full segment.\n *\n * @return {boolean}\n * @export\n */\n isLastPartial() {\n return this.lastPartial;\n }\n\n /**\n * Mark the reference as byterange optimization.\n *\n * The \"byterange optimization\" means that it is playable using MP4 low\n * latency streaming with chunked data.\n *\n * @export\n */\n markAsByterangeOptimization() {\n this.byterangeOptimization = true;\n }\n\n /**\n * Returns true if the segment has a byterange optimization.\n *\n * @return {boolean}\n * @export\n */\n hasByterangeOptimization() {\n return this.byterangeOptimization;\n }\n\n /**\n * Set the segment's thumbnail sprite.\n *\n * @param {shaka.extern.ThumbnailSprite} thumbnailSprite\n * @export\n */\n setThumbnailSprite(thumbnailSprite) {\n this.thumbnailSprite = thumbnailSprite;\n }\n\n /**\n * Returns the segment's thumbnail sprite.\n *\n * @return {?shaka.extern.ThumbnailSprite}\n * @export\n */\n getThumbnailSprite() {\n return this.thumbnailSprite;\n }\n\n /**\n * Offset the segment reference by a fixed amount.\n *\n * @param {number} offset The amount to add to the segment's start and end\n * times.\n * @export\n */\n offset(offset) {\n this.startTime += offset;\n this.endTime += offset;\n this.trueEndTime += offset;\n\n for (const partial of this.partialReferences) {\n partial.startTime += offset;\n partial.endTime += offset;\n partial.trueEndTime += offset;\n }\n }\n\n /**\n * Sync this segment against a particular sync time that will serve as \"0\" in\n * the presentation timeline.\n *\n * @param {number} lowestSyncTime\n * @export\n */\n syncAgainst(lowestSyncTime) {\n if (this.syncTime == null) {\n shaka.log.alwaysError('Sync attempted without sync time!');\n return;\n }\n const desiredStart = this.syncTime - lowestSyncTime;\n const offset = desiredStart - this.startTime;\n if (Math.abs(offset) >= 0.001) {\n this.offset(offset);\n }\n }\n\n /**\n * Set the segment data.\n *\n * @param {!BufferSource} segmentData\n * @export\n */\n setSegmentData(segmentData) {\n this.segmentData = segmentData;\n }\n\n /**\n * Return the segment data.\n *\n * @return {?BufferSource}\n * @export\n */\n getSegmentData() {\n return this.segmentData;\n }\n\n /**\n * Updates the init segment reference and propagates the update to all partial\n * references.\n * @param {shaka.media.InitSegmentReference} initSegmentReference\n */\n updateInitSegmentReference(initSegmentReference) {\n this.initSegmentReference = initSegmentReference;\n for (const partialReference of this.partialReferences) {\n partialReference.updateInitSegmentReference(initSegmentReference);\n }\n }\n};\n\n\n/**\n * Rather than using booleans to communicate what the state of the reference,\n * we have this enum.\n *\n * @enum {number}\n * @export\n */\nshaka.media.SegmentReference.Status = {\n AVAILABLE: 0,\n UNAVAILABLE: 1,\n MISSING: 2,\n};\n\n\n/**\n * A convenient typedef for when either type of reference is acceptable.\n *\n * @typedef {shaka.media.InitSegmentReference|shaka.media.SegmentReference}\n */\nshaka.media.AnySegmentReference;\n\n\n/**\n * @typedef {{\n * height: number,\n * positionX: number,\n * positionY: number,\n * width: number\n * }}\n *\n * @property {number} height\n * The thumbnail height in px.\n * @property {number} positionX\n * The thumbnail left position in px.\n * @property {number} positionY\n * The thumbnail top position in px.\n * @property {number} width\n * The thumbnail width in px.\n * @export\n */\nshaka.media.SegmentReference.ThumbnailSprite;\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.abr.SimpleAbrManager');\n\ngoog.require('goog.asserts');\ngoog.require('shaka.abr.EwmaBandwidthEstimator');\ngoog.require('shaka.log');\ngoog.require('shaka.util.EventManager');\ngoog.require('shaka.util.IReleasable');\ngoog.require('shaka.util.StreamUtils');\ngoog.require('shaka.util.Timer');\n\ngoog.requireType('shaka.util.CmsdManager');\n\n\n/**\n * @summary\n *

\n * This defines the default ABR manager for the Player. An instance of this\n * class is used when no ABR manager is given.\n *

\n *

\n * The behavior of this class is to take throughput samples using\n * segmentDownloaded to estimate the current network bandwidth. Then it will\n * use that to choose the streams that best fit the current bandwidth. It will\n * always pick the highest bandwidth variant it thinks can be played.\n *

\n *

\n * After initial choices are made, this class will call switchCallback() when\n * there is a better choice. switchCallback() will not be called more than once\n * per ({@link shaka.abr.SimpleAbrManager.SWITCH_INTERVAL_MS}).\n *

\n *\n * @implements {shaka.extern.AbrManager}\n * @implements {shaka.util.IReleasable}\n * @export\n */\nshaka.abr.SimpleAbrManager = class {\n /** */\n constructor() {\n /** @private {?shaka.extern.AbrManager.SwitchCallback} */\n this.switch_ = null;\n\n /** @private {boolean} */\n this.enabled_ = false;\n\n /** @private {shaka.abr.EwmaBandwidthEstimator} */\n this.bandwidthEstimator_ = new shaka.abr.EwmaBandwidthEstimator();\n\n /** @private {!shaka.util.EventManager} */\n this.eventManager_ = new shaka.util.EventManager();\n\n // Some browsers implement the Network Information API, which allows\n // retrieving information about a user's network connection. We listen\n // to the change event to be able to make quick changes in case the type\n // of connectivity changes.\n if (navigator.connection && navigator.connection.addEventListener) {\n this.eventManager_.listen(\n /** @type {EventTarget} */(navigator.connection),\n 'change',\n () => {\n if (this.enabled_ && this.config_.useNetworkInformation) {\n this.bandwidthEstimator_ = new shaka.abr.EwmaBandwidthEstimator();\n if (this.config_) {\n this.bandwidthEstimator_.configure(this.config_.advanced);\n }\n const chosenVariant = this.chooseVariant();\n if (chosenVariant && navigator.onLine) {\n this.switch_(chosenVariant, this.config_.clearBufferSwitch,\n this.config_.safeMarginSwitch);\n }\n }\n });\n }\n\n /**\n * A filtered list of Variants to choose from.\n * @private {!Array.}\n */\n this.variants_ = [];\n\n /** @private {number} */\n this.playbackRate_ = 1;\n\n /** @private {boolean} */\n this.startupComplete_ = false;\n\n /**\n * The last wall-clock time, in milliseconds, when streams were chosen.\n *\n * @private {?number}\n */\n this.lastTimeChosenMs_ = null;\n\n /** @private {?shaka.extern.AbrConfiguration} */\n this.config_ = null;\n\n /** @private {HTMLMediaElement} */\n this.mediaElement_ = null;\n\n /** @private {ResizeObserver} */\n this.resizeObserver_ = null;\n\n /** @private {shaka.util.Timer} */\n this.resizeObserverTimer_ = new shaka.util.Timer(() => {\n if (this.enabled_ && this.config_.restrictToElementSize) {\n const chosenVariant = this.chooseVariant();\n if (chosenVariant) {\n this.switch_(chosenVariant, this.config_.clearBufferSwitch,\n this.config_.safeMarginSwitch);\n }\n }\n });\n\n /** @private {?shaka.util.CmsdManager} */\n this.cmsdManager_ = null;\n }\n\n\n /**\n * @override\n * @export\n */\n stop() {\n this.switch_ = null;\n this.enabled_ = false;\n this.variants_ = [];\n this.playbackRate_ = 1;\n this.lastTimeChosenMs_ = null;\n this.mediaElement_ = null;\n\n if (this.resizeObserver_) {\n this.resizeObserver_.disconnect();\n this.resizeObserver_ = null;\n }\n\n this.resizeObserverTimer_.stop();\n\n this.cmsdManager_ = null;\n\n // Don't reset |startupComplete_|: if we've left the startup interval, we\n // can start using bandwidth estimates right away after init() is called.\n }\n\n /**\n * @override\n * @export\n */\n release() {\n // stop() should already have been called for unload\n this.eventManager_.release();\n this.resizeObserverTimer_ = null;\n }\n\n\n /**\n * @override\n * @export\n */\n init(switchCallback) {\n this.switch_ = switchCallback;\n }\n\n\n /**\n * @return {shaka.extern.Variant}\n * @override\n * @export\n */\n chooseVariant() {\n let maxHeight = Infinity;\n let maxWidth = Infinity;\n\n if (this.config_.restrictToScreenSize) {\n const devicePixelRatio =\n this.config_.ignoreDevicePixelRatio ? 1 : window.devicePixelRatio;\n maxHeight = window.screen.height * devicePixelRatio;\n maxWidth = window.screen.width * devicePixelRatio;\n }\n\n if (this.resizeObserver_ && this.config_.restrictToElementSize) {\n const devicePixelRatio =\n this.config_.ignoreDevicePixelRatio ? 1 : window.devicePixelRatio;\n maxHeight = Math.min(\n maxHeight, this.mediaElement_.clientHeight * devicePixelRatio);\n maxWidth = Math.min(\n maxWidth, this.mediaElement_.clientWidth * devicePixelRatio);\n }\n\n let normalVariants = this.variants_.filter((variant) => {\n return variant && !shaka.util.StreamUtils.isFastSwitching(variant);\n });\n if (!normalVariants.length) {\n normalVariants = this.variants_;\n }\n\n let variants = normalVariants;\n if (normalVariants.length != this.variants_.length) {\n variants = this.variants_.filter((variant) => {\n return variant && shaka.util.StreamUtils.isFastSwitching(variant);\n });\n }\n\n // Get sorted Variants.\n let sortedVariants = this.filterAndSortVariants_(\n this.config_.restrictions, variants,\n /* maxHeight= */ Infinity, /* maxWidth= */ Infinity);\n\n if (maxHeight != Infinity || maxWidth != Infinity) {\n const resolutions = this.getResolutionList_(sortedVariants);\n for (const resolution of resolutions) {\n if (resolution.height >= maxHeight && resolution.width >= maxWidth) {\n maxHeight = resolution.height;\n maxWidth = resolution.width;\n break;\n }\n }\n\n sortedVariants = this.filterAndSortVariants_(\n this.config_.restrictions, variants, maxHeight, maxWidth);\n }\n\n const currentBandwidth = this.getBandwidthEstimate();\n\n if (variants.length && !sortedVariants.length) {\n // If we couldn't meet the ABR restrictions, we should still play\n // something.\n // These restrictions are not \"hard\" restrictions in the way that\n // top-level or DRM-based restrictions are. Sort the variants without\n // restrictions and keep just the first (lowest-bandwidth) one.\n shaka.log.warning('No variants met the ABR restrictions. ' +\n 'Choosing a variant by lowest bandwidth.');\n sortedVariants = this.filterAndSortVariants_(\n /* restrictions= */ null, variants,\n /* maxHeight= */ Infinity, /* maxWidth= */ Infinity);\n sortedVariants = [sortedVariants[0]];\n }\n\n // Start by assuming that we will use the first Stream.\n let chosen = sortedVariants[0] || null;\n\n for (let i = 0; i < sortedVariants.length; i++) {\n const item = sortedVariants[i];\n const playbackRate =\n !isNaN(this.playbackRate_) ? Math.abs(this.playbackRate_) : 1;\n const itemBandwidth = playbackRate * item.bandwidth;\n const minBandwidth =\n itemBandwidth / this.config_.bandwidthDowngradeTarget;\n let next = {bandwidth: Infinity};\n for (let j = i + 1; j < sortedVariants.length; j++) {\n if (item.bandwidth != sortedVariants[j].bandwidth) {\n next = sortedVariants[j];\n break;\n }\n }\n const nextBandwidth = playbackRate * next.bandwidth;\n const maxBandwidth = nextBandwidth / this.config_.bandwidthUpgradeTarget;\n shaka.log.v2('Bandwidth ranges:',\n (itemBandwidth / 1e6).toFixed(3),\n (minBandwidth / 1e6).toFixed(3),\n (maxBandwidth / 1e6).toFixed(3));\n\n if (currentBandwidth >= minBandwidth &&\n currentBandwidth <= maxBandwidth &&\n (chosen.bandwidth != item.bandwidth ||\n this.isSameBandwidthAndHigherResolution_(chosen, item))) {\n chosen = item;\n }\n }\n\n this.lastTimeChosenMs_ = Date.now();\n return chosen;\n }\n\n\n /**\n * @override\n * @export\n */\n enable() {\n this.enabled_ = true;\n }\n\n\n /**\n * @override\n * @export\n */\n disable() {\n this.enabled_ = false;\n }\n\n\n /**\n * @param {number} deltaTimeMs The duration, in milliseconds, that the request\n * took to complete.\n * @param {number} numBytes The total number of bytes transferred.\n * @param {boolean} allowSwitch Indicate if the segment is allowed to switch\n * to another stream.\n * @param {shaka.extern.Request=} request\n * A reference to the request\n * @override\n * @export\n */\n segmentDownloaded(deltaTimeMs, numBytes, allowSwitch, request) {\n if (deltaTimeMs < this.config_.cacheLoadThreshold) {\n // The time indicates that it could be a cache response, so we should\n // ignore this value.\n return;\n }\n shaka.log.v2('Segment downloaded:',\n 'contentType=' + (request && request.contentType),\n 'deltaTimeMs=' + deltaTimeMs,\n 'numBytes=' + numBytes,\n 'lastTimeChosenMs=' + this.lastTimeChosenMs_,\n 'enabled=' + this.enabled_);\n goog.asserts.assert(deltaTimeMs >= 0, 'expected a non-negative duration');\n this.bandwidthEstimator_.sample(deltaTimeMs, numBytes);\n\n if (allowSwitch && (this.lastTimeChosenMs_ != null) && this.enabled_) {\n this.suggestStreams_();\n }\n }\n\n\n /**\n * @override\n * @export\n */\n trySuggestStreams() {\n if ((this.lastTimeChosenMs_ != null) && this.enabled_) {\n this.suggestStreams_();\n }\n }\n\n\n /**\n * @override\n * @export\n */\n getBandwidthEstimate() {\n const defaultBandwidthEstimate = this.getDefaultBandwidth_();\n if (navigator.connection && navigator.connection.downlink &&\n this.config_.useNetworkInformation &&\n this.config_.preferNetworkInformationBandwidth) {\n return defaultBandwidthEstimate;\n }\n const bandwidthEstimate = this.bandwidthEstimator_.getBandwidthEstimate(\n defaultBandwidthEstimate);\n if (this.cmsdManager_) {\n return this.cmsdManager_.getBandwidthEstimate(bandwidthEstimate);\n }\n return bandwidthEstimate;\n }\n\n\n /**\n * @override\n * @export\n */\n setVariants(variants) {\n this.variants_ = variants;\n }\n\n\n /**\n * @override\n * @export\n */\n playbackRateChanged(rate) {\n this.playbackRate_ = rate;\n }\n\n\n /**\n * @override\n * @export\n */\n setMediaElement(mediaElement) {\n this.mediaElement_ = mediaElement;\n if (this.resizeObserver_) {\n this.resizeObserver_.disconnect();\n this.resizeObserver_ = null;\n }\n if (this.mediaElement_ && 'ResizeObserver' in window) {\n this.resizeObserver_ = new ResizeObserver(() => {\n const SimpleAbrManager = shaka.abr.SimpleAbrManager;\n // Batch up resize changes before checking them.\n this.resizeObserverTimer_.tickAfter(\n /* seconds= */ SimpleAbrManager.RESIZE_OBSERVER_BATCH_TIME);\n });\n this.resizeObserver_.observe(this.mediaElement_);\n }\n }\n\n\n /**\n * @override\n * @export\n */\n setCmsdManager(cmsdManager) {\n this.cmsdManager_ = cmsdManager;\n }\n\n\n /**\n * @override\n * @export\n */\n configure(config) {\n this.config_ = config;\n if (this.bandwidthEstimator_ && this.config_) {\n this.bandwidthEstimator_.configure(this.config_.advanced);\n }\n }\n\n\n /**\n * Calls switch_() with the variant chosen by chooseVariant().\n *\n * @private\n */\n suggestStreams_() {\n shaka.log.v2('Suggesting Streams...');\n goog.asserts.assert(this.lastTimeChosenMs_ != null,\n 'lastTimeChosenMs_ should not be null');\n\n if (!this.startupComplete_) {\n // Check if we've got enough data yet.\n if (!this.bandwidthEstimator_.hasGoodEstimate()) {\n shaka.log.v2('Still waiting for a good estimate...');\n return;\n }\n this.startupComplete_ = true;\n\n this.lastTimeChosenMs_ -=\n (this.config_.switchInterval - this.config_.minTimeToSwitch) * 1000;\n }\n\n // Check if we've left the switch interval.\n const now = Date.now();\n const delta = now - this.lastTimeChosenMs_;\n if (delta < this.config_.switchInterval * 1000) {\n shaka.log.v2('Still within switch interval...');\n return;\n }\n\n const chosenVariant = this.chooseVariant();\n const bandwidthEstimate = this.getBandwidthEstimate();\n const currentBandwidthKbps = Math.round(bandwidthEstimate / 1000.0);\n\n if (chosenVariant) {\n shaka.log.debug(\n 'Calling switch_(), bandwidth=' + currentBandwidthKbps + ' kbps');\n // If any of these chosen streams are already chosen, Player will filter\n // them out before passing the choices on to StreamingEngine.\n this.switch_(chosenVariant, this.config_.clearBufferSwitch,\n this.config_.safeMarginSwitch);\n }\n }\n\n\n /**\n * @private\n */\n getDefaultBandwidth_() {\n let defaultBandwidthEstimate = this.config_.defaultBandwidthEstimate;\n\n // Some browsers implement the Network Information API, which allows\n // retrieving information about a user's network connection. Tizen 3 has\n // NetworkInformation, but not the downlink attribute.\n if (navigator.connection && navigator.connection.downlink &&\n this.config_.useNetworkInformation) {\n // If it's available, get the bandwidth estimate from the browser (in\n // megabits per second) and use it as defaultBandwidthEstimate.\n defaultBandwidthEstimate = navigator.connection.downlink * 1e6;\n }\n return defaultBandwidthEstimate;\n }\n\n\n /**\n * @param {?shaka.extern.Restrictions} restrictions\n * @param {!Array.} variants\n * @param {!number} maxHeight\n * @param {!number} maxWidth\n * @return {!Array.} variants filtered according to\n * |restrictions| and sorted in ascending order of bandwidth.\n * @private\n */\n filterAndSortVariants_(restrictions, variants, maxHeight, maxWidth) {\n if (this.cmsdManager_) {\n const maxBitrate = this.cmsdManager_.getMaxBitrate();\n if (maxBitrate) {\n variants = variants.filter((variant) => {\n if (!variant.bandwidth || !maxBitrate) {\n return true;\n }\n return variant.bandwidth <= maxBitrate;\n });\n }\n }\n\n if (restrictions) {\n variants = variants.filter((variant) => {\n // This was already checked in another scope, but the compiler doesn't\n // seem to understand that.\n goog.asserts.assert(restrictions, 'Restrictions should exist!');\n\n return shaka.util.StreamUtils.meetsRestrictions(\n variant, restrictions,\n /* maxHwRes= */ {width: maxWidth, height: maxHeight});\n });\n }\n\n return variants.sort((v1, v2) => {\n return v1.bandwidth - v2.bandwidth;\n });\n }\n\n /**\n * @param {!Array.} variants\n * @return {!Array.<{height: number, width: number}>}\n * @private\n */\n getResolutionList_(variants) {\n const resolutions = [];\n for (const variant of variants) {\n const video = variant.video;\n if (!video || !video.height || !video.width) {\n continue;\n }\n resolutions.push({\n height: video.height,\n width: video.width,\n });\n }\n\n return resolutions.sort((v1, v2) => {\n return v1.width - v2.width;\n });\n }\n\n /**\n * @param {shaka.extern.Variant} chosenVariant\n * @param {shaka.extern.Variant} newVariant\n * @return {boolean}\n * @private\n */\n isSameBandwidthAndHigherResolution_(chosenVariant, newVariant) {\n if (chosenVariant.bandwidth != newVariant.bandwidth) {\n return false;\n }\n if (!chosenVariant.video || !newVariant.video) {\n return false;\n }\n return chosenVariant.video.width < newVariant.video.width ||\n chosenVariant.video.height < newVariant.video.height;\n }\n};\n\n\n/**\n * The amount of time, in seconds, we wait to batch up rapid resize changes.\n * This allows us to avoid multiple resize events in most cases.\n * @type {number}\n */\nshaka.abr.SimpleAbrManager.RESIZE_OBSERVER_BATCH_TIME = 1;\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.media.AdaptationSet');\n\ngoog.require('goog.asserts');\ngoog.require('shaka.log');\ngoog.require('shaka.util.MimeUtils');\n\n\n/**\n * A set of variants that we want to adapt between.\n *\n * @final\n */\nshaka.media.AdaptationSet = class {\n /**\n * @param {shaka.extern.Variant} root\n * The variant that all other variants will be tested against when being\n * added to the adaptation set. If a variant is not compatible with the\n * root, it will not be added.\n * @param {!Iterable.=} candidates\n * Variants that may be compatible with the root and should be added if\n * compatible. If a candidate is not compatible, it will not end up in the\n * adaptation set.\n * @param {boolean=} compareCodecs\n */\n constructor(root, candidates, compareCodecs = true) {\n /** @private {shaka.extern.Variant} */\n this.root_ = root;\n /** @private {!Set.} */\n this.variants_ = new Set([root]);\n\n // Try to add all the candidates. If they cannot be added (because they\n // are not compatible with the root, they will be rejected by |add|.\n candidates = candidates || [];\n for (const candidate of candidates) {\n this.add(candidate, compareCodecs);\n }\n }\n\n /**\n * @param {shaka.extern.Variant} variant\n * @param {boolean} compareCodecs\n * @return {boolean}\n */\n add(variant, compareCodecs) {\n if (this.canInclude(variant, compareCodecs)) {\n this.variants_.add(variant);\n return true;\n }\n\n // To be nice, issue a warning if someone is trying to add something that\n // they shouldn't.\n shaka.log.warning('Rejecting variant - not compatible with root.');\n return false;\n }\n\n /**\n * Check if |variant| can be included with the set. If |canInclude| returns\n * |false|, calling |add| will result in it being ignored.\n *\n * @param {shaka.extern.Variant} variant\n * @param {boolean=} compareCodecs\n * @return {boolean}\n */\n canInclude(variant, compareCodecs = true) {\n return shaka.media.AdaptationSet\n .areAdaptable(this.root_, variant, compareCodecs);\n }\n\n /**\n * @param {shaka.extern.Variant} a\n * @param {shaka.extern.Variant} b\n * @param {boolean} compareCodecs\n * @return {boolean}\n */\n static areAdaptable(a, b, compareCodecs) {\n const AdaptationSet = shaka.media.AdaptationSet;\n\n // All variants should have audio or should all not have audio.\n if (!!a.audio != !!b.audio) {\n return false;\n }\n\n // All variants should have video or should all not have video.\n if (!!a.video != !!b.video) {\n return false;\n }\n\n // If the languages don't match, we should not adapt between them.\n if (a.language != b.language) {\n return false;\n }\n\n goog.asserts.assert(\n !!a.audio == !!b.audio,\n 'Both should either have audio or not have audio.');\n if (a.audio && b.audio &&\n !AdaptationSet.areAudiosCompatible_(a.audio, b.audio, compareCodecs)) {\n return false;\n }\n\n goog.asserts.assert(\n !!a.video == !!b.video,\n 'Both should either have video or not have video.');\n if (a.video && b.video &&\n !AdaptationSet.areVideosCompatible_(a.video, b.video, compareCodecs)) {\n return false;\n }\n\n return true;\n }\n\n /**\n * @return {!Iterable.}\n */\n values() {\n return this.variants_.values();\n }\n\n /**\n * Check if we can switch between two audio streams.\n *\n * @param {shaka.extern.Stream} a\n * @param {shaka.extern.Stream} b\n * @param {boolean} compareCodecs\n * @return {boolean}\n * @private\n */\n static areAudiosCompatible_(a, b, compareCodecs) {\n const AdaptationSet = shaka.media.AdaptationSet;\n\n // Don't adapt between channel counts, which could annoy the user\n // due to volume changes on downmixing. An exception is made for\n // stereo and mono, which should be fine to adapt between.\n if (!a.channelsCount || !b.channelsCount ||\n a.channelsCount > 2 || b.channelsCount > 2) {\n if (a.channelsCount != b.channelsCount) {\n return false;\n }\n }\n\n // Don't adapt between spatial and non spatial audio, which may\n // annoy the user.\n if (a.spatialAudio !== b.spatialAudio) {\n return false;\n }\n\n // We can only adapt between base-codecs.\n if (compareCodecs && !AdaptationSet.canTransitionBetween_(a, b)) {\n return false;\n }\n\n // Audio roles must not change between adaptations.\n if (!AdaptationSet.areRolesEqual_(a.roles, b.roles)) {\n return false;\n }\n\n // We can only adapt between the same groupId.\n if (a.groupId !== b.groupId) {\n return false;\n }\n\n return true;\n }\n\n /**\n * Check if we can switch between two video streams.\n *\n * @param {shaka.extern.Stream} a\n * @param {shaka.extern.Stream} b\n * @param {boolean} compareCodecs\n * @return {boolean}\n * @private\n */\n static areVideosCompatible_(a, b, compareCodecs) {\n const AdaptationSet = shaka.media.AdaptationSet;\n\n // We can only adapt between base-codecs.\n if (compareCodecs && !AdaptationSet.canTransitionBetween_(a, b)) {\n return false;\n }\n\n // Video roles must not change between adaptations.\n if (!AdaptationSet.areRolesEqual_(a.roles, b.roles)) {\n return false;\n }\n\n return true;\n }\n\n /**\n * Check if we can switch between two streams based on their codec and mime\n * type.\n *\n * @param {shaka.extern.Stream} a\n * @param {shaka.extern.Stream} b\n * @return {boolean}\n * @private\n */\n static canTransitionBetween_(a, b) {\n if (a.mimeType != b.mimeType) {\n return false;\n }\n\n\n // Get the base codec of each codec in each stream.\n const codecsA = shaka.util.MimeUtils.splitCodecs(a.codecs).map((codec) => {\n return shaka.util.MimeUtils.getCodecBase(codec);\n });\n const codecsB = shaka.util.MimeUtils.splitCodecs(b.codecs).map((codec) => {\n return shaka.util.MimeUtils.getCodecBase(codec);\n });\n\n // We don't want to allow switching between transmuxed and non-transmuxed\n // content so the number of codecs should be the same.\n //\n // To avoid the case where an codec is used for audio and video we will\n // codecs using arrays (not sets). While at this time, there are no codecs\n // that work for audio and video, it is possible for \"raw\" codecs to be\n // which would share the same name.\n if (codecsA.length != codecsB.length) {\n return false;\n }\n\n // Sort them so that we can walk through them and compare them\n // element-by-element.\n codecsA.sort();\n codecsB.sort();\n\n for (let i = 0; i < codecsA.length; i++) {\n if (codecsA[i] != codecsB[i]) {\n return false;\n }\n }\n\n return true;\n }\n\n /**\n * Check if two role lists are the equal. This will take into account all\n * unique behaviours when comparing roles.\n *\n * @param {!Iterable.} a\n * @param {!Iterable.} b\n * @return {boolean}\n * @private\n */\n static areRolesEqual_(a, b) {\n const aSet = new Set(a);\n const bSet = new Set(b);\n\n // Remove the main role from the role lists (we expect to see them only\n // in dash manifests).\n const mainRole = 'main';\n aSet.delete(mainRole);\n bSet.delete(mainRole);\n\n // Make sure that we have the same number roles in each list. Make sure to\n // do it after correcting for 'main'.\n if (aSet.size != bSet.size) {\n return false;\n }\n\n // Because we know the two sets are the same size, if any item is missing\n // if means that they are not the same.\n for (const x of aSet) {\n if (!bSet.has(x)) {\n return false;\n }\n }\n\n return true;\n }\n};\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.media.AdaptationSetCriteria');\ngoog.provide('shaka.media.ExampleBasedCriteria');\ngoog.provide('shaka.media.PreferenceBasedCriteria');\n\ngoog.require('shaka.config.CodecSwitchingStrategy');\ngoog.require('shaka.log');\ngoog.require('shaka.media.AdaptationSet');\ngoog.require('shaka.media.Capabilities');\ngoog.require('shaka.util.LanguageUtils');\n\n\n/**\n * An adaptation set criteria is a unit of logic that can take a set of\n * variants and return a subset of variants that should (and can) be\n * adapted between.\n *\n * @interface\n */\nshaka.media.AdaptationSetCriteria = class {\n /**\n * Take a set of variants, and return a subset of variants that can be\n * adapted between.\n *\n * @param {!Array.} variants\n * @return {!shaka.media.AdaptationSet}\n */\n create(variants) {}\n};\n\n\n/**\n * @implements {shaka.media.AdaptationSetCriteria}\n * @final\n */\nshaka.media.ExampleBasedCriteria = class {\n /**\n * @param {shaka.extern.Variant} example\n * @param {shaka.config.CodecSwitchingStrategy} codecSwitchingStrategy\n */\n constructor(example, codecSwitchingStrategy) {\n // We can't know if role and label are really important, so we don't use\n // role and label for this.\n const role = '';\n const audioLabel = '';\n const videoLabel = '';\n const hdrLevel = example.video && example.video.hdr ?\n example.video.hdr : '';\n const spatialAudio = example.audio && example.audio.spatialAudio ?\n example.audio.spatialAudio : false;\n const videoLayout = example.video && example.video.videoLayout ?\n example.video.videoLayout : '';\n const channelCount = example.audio && example.audio.channelsCount ?\n example.audio.channelsCount : 0;\n const audioCodec = example.audio && example.audio.codecs ?\n example.audio.codecs : '';\n\n /** @private {!shaka.media.AdaptationSetCriteria} */\n this.preferenceBasedCriteria_ = new shaka.media.PreferenceBasedCriteria(\n example.language, role, channelCount, hdrLevel, spatialAudio,\n videoLayout, audioLabel, videoLabel,\n codecSwitchingStrategy, audioCodec);\n }\n\n /** @override */\n create(variants) {\n return this.preferenceBasedCriteria_.create(variants);\n }\n};\n\n\n/**\n * @implements {shaka.media.AdaptationSetCriteria}\n * @final\n */\nshaka.media.PreferenceBasedCriteria = class {\n /**\n * @param {string} language\n * @param {string} role\n * @param {number} channelCount\n * @param {string} hdrLevel\n * @param {boolean} spatialAudio\n * @param {string} videoLayout\n * @param {string} audioLabel\n * @param {string} videoLabel\n * @param {shaka.config.CodecSwitchingStrategy} codecSwitchingStrategy\n * @param {string} audioCodec\n */\n constructor(language, role, channelCount, hdrLevel, spatialAudio,\n videoLayout, audioLabel, videoLabel, codecSwitchingStrategy, audioCodec) {\n /** @private {string} */\n this.language_ = language;\n /** @private {string} */\n this.role_ = role;\n /** @private {number} */\n this.channelCount_ = channelCount;\n /** @private {string} */\n this.hdrLevel_ = hdrLevel;\n /** @private {boolean} */\n this.spatialAudio_ = spatialAudio;\n /** @private {string} */\n this.videoLayout_ = videoLayout;\n /** @private {string} */\n this.audioLabel_ = audioLabel;\n /** @private {string} */\n this.videoLabel_ = videoLabel;\n /** @private {shaka.config.CodecSwitchingStrategy} */\n this.codecSwitchingStrategy_ = codecSwitchingStrategy;\n /** @private {string} */\n this.audioCodec_ = audioCodec;\n }\n\n /** @override */\n create(variants) {\n const Class = shaka.media.PreferenceBasedCriteria;\n\n let current = [];\n\n const byLanguage = Class.filterByLanguage_(variants, this.language_);\n const byPrimary = variants.filter((variant) => variant.primary);\n\n if (byLanguage.length) {\n current = byLanguage;\n } else if (byPrimary.length) {\n current = byPrimary;\n } else {\n current = variants;\n }\n\n // Now refine the choice based on role preference. Even the empty string\n // works here, and will match variants without any roles.\n const byRole = Class.filterVariantsByRole_(current, this.role_);\n if (byRole.length) {\n current = byRole;\n } else {\n shaka.log.warning('No exact match for variant role could be found.');\n }\n\n if (this.videoLayout_) {\n const byVideoLayout = Class.filterVariantsByVideoLayout_(\n current, this.videoLayout_);\n if (byVideoLayout.length) {\n current = byVideoLayout;\n } else {\n shaka.log.warning(\n 'No exact match for the video layout could be found.');\n }\n }\n\n if (this.hdrLevel_) {\n const byHdrLevel = Class.filterVariantsByHDRLevel_(\n current, this.hdrLevel_);\n if (byHdrLevel.length) {\n current = byHdrLevel;\n } else {\n shaka.log.warning(\n 'No exact match for the hdr level could be found.');\n }\n }\n\n if (this.channelCount_) {\n const byChannel = Class.filterVariantsByAudioChannelCount_(\n current, this.channelCount_);\n if (byChannel.length) {\n current = byChannel;\n } else {\n shaka.log.warning(\n 'No exact match for the channel count could be found.');\n }\n }\n\n if (this.audioLabel_) {\n const byLabel = Class.filterVariantsByAudioLabel_(\n current, this.audioLabel_);\n if (byLabel.length) {\n current = byLabel;\n } else {\n shaka.log.warning('No exact match for audio label could be found.');\n }\n }\n\n if (this.videoLabel_) {\n const byLabel = Class.filterVariantsByVideoLabel_(\n current, this.videoLabel_);\n if (byLabel.length) {\n current = byLabel;\n } else {\n shaka.log.warning('No exact match for video label could be found.');\n }\n }\n\n const bySpatialAudio = Class.filterVariantsBySpatialAudio_(\n current, this.spatialAudio_);\n if (bySpatialAudio.length) {\n current = bySpatialAudio;\n } else {\n shaka.log.warning('No exact match for spatial audio could be found.');\n }\n\n if (this.audioCodec_) {\n const byAudioCodec = Class.filterVariantsByAudioCodec_(\n current, this.audioCodec_);\n if (byAudioCodec.length) {\n current = byAudioCodec;\n } else {\n shaka.log.warning('No exact match for audio codec could be found.');\n }\n }\n\n const supportsSmoothCodecTransitions = this.codecSwitchingStrategy_ ==\n shaka.config.CodecSwitchingStrategy.SMOOTH &&\n shaka.media.Capabilities.isChangeTypeSupported();\n\n return new shaka.media.AdaptationSet(current[0], current,\n !supportsSmoothCodecTransitions);\n }\n\n /**\n * @param {!Array.} variants\n * @param {string} preferredLanguage\n * @return {!Array.}\n * @private\n */\n static filterByLanguage_(variants, preferredLanguage) {\n const LanguageUtils = shaka.util.LanguageUtils;\n\n /** @type {string} */\n const preferredLocale = LanguageUtils.normalize(preferredLanguage);\n\n /** @type {?string} */\n const closestLocale = LanguageUtils.findClosestLocale(\n preferredLocale,\n variants.map((variant) => LanguageUtils.getLocaleForVariant(variant)));\n\n // There were no locales close to what we preferred.\n if (!closestLocale) {\n return [];\n }\n\n // Find the variants that use the closest variant.\n return variants.filter((variant) => {\n return closestLocale == LanguageUtils.getLocaleForVariant(variant);\n });\n }\n\n /**\n * Filter Variants by role.\n *\n * @param {!Array.} variants\n * @param {string} preferredRole\n * @return {!Array.}\n * @private\n */\n static filterVariantsByRole_(variants, preferredRole) {\n return variants.filter((variant) => {\n if (!variant.audio) {\n return false;\n }\n\n if (preferredRole) {\n return variant.audio.roles.includes(preferredRole);\n } else {\n return variant.audio.roles.length == 0;\n }\n });\n }\n\n /**\n * Filter Variants by audio label.\n *\n * @param {!Array.} variants\n * @param {string} preferredLabel\n * @return {!Array.}\n * @private\n */\n static filterVariantsByAudioLabel_(variants, preferredLabel) {\n return variants.filter((variant) => {\n if (!variant.audio || !variant.audio.label) {\n return false;\n }\n\n const label1 = variant.audio.label.toLowerCase();\n const label2 = preferredLabel.toLowerCase();\n return label1 == label2;\n });\n }\n\n /**\n * Filter Variants by video label.\n *\n * @param {!Array.} variants\n * @param {string} preferredLabel\n * @return {!Array.}\n * @private\n */\n static filterVariantsByVideoLabel_(variants, preferredLabel) {\n return variants.filter((variant) => {\n if (!variant.video || !variant.video.label) {\n return false;\n }\n\n const label1 = variant.video.label.toLowerCase();\n const label2 = preferredLabel.toLowerCase();\n return label1 == label2;\n });\n }\n\n /**\n * Filter Variants by channelCount.\n *\n * @param {!Array.} variants\n * @param {number} channelCount\n * @return {!Array.}\n * @private\n */\n static filterVariantsByAudioChannelCount_(variants, channelCount) {\n return variants.filter((variant) => {\n if (variant.audio && variant.audio.channelsCount &&\n variant.audio.channelsCount != channelCount) {\n return false;\n }\n return true;\n });\n }\n\n /**\n * Filters variants according to the given hdr level config.\n *\n * @param {!Array.} variants\n * @param {string} hdrLevel\n * @private\n */\n static filterVariantsByHDRLevel_(variants, hdrLevel) {\n if (hdrLevel == 'AUTO') {\n // Auto detect the ideal HDR level.\n if (window.matchMedia('(color-gamut: p3)').matches) {\n const someHLG = variants.some((variant) => {\n if (variant.video && variant.video.hdr &&\n variant.video.hdr == 'HLG') {\n return true;\n }\n return false;\n });\n hdrLevel = someHLG ? 'HLG' : 'PQ';\n } else {\n hdrLevel = 'SDR';\n }\n }\n return variants.filter((variant) => {\n if (variant.video && variant.video.hdr && variant.video.hdr != hdrLevel) {\n return false;\n }\n return true;\n });\n }\n\n\n /**\n * Filters variants according to the given video layout config.\n *\n * @param {!Array.} variants\n * @param {string} videoLayout\n * @private\n */\n static filterVariantsByVideoLayout_(variants, videoLayout) {\n return variants.filter((variant) => {\n if (variant.video && variant.video.videoLayout &&\n variant.video.videoLayout != videoLayout) {\n return false;\n }\n return true;\n });\n }\n\n\n /**\n * Filters variants according to the given spatial audio config.\n *\n * @param {!Array.} variants\n * @param {boolean} spatialAudio\n * @private\n */\n static filterVariantsBySpatialAudio_(variants, spatialAudio) {\n return variants.filter((variant) => {\n if (variant.audio && variant.audio.spatialAudio != spatialAudio) {\n return false;\n }\n return true;\n });\n }\n\n\n /**\n * Filters variants according to the given audio codec.\n *\n * @param {!Array} variants\n * @param {string} audioCodec\n * @private\n */\n static filterVariantsByAudioCodec_(variants, audioCodec) {\n return variants.filter((variant) => {\n if (variant.audio && variant.audio.codecs != audioCodec) {\n return false;\n }\n return true;\n });\n }\n};\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.media.BufferingObserver');\n\n\n/**\n * The buffering observer watches how much content has been buffered and raises\n * events when the state changes (enough => not enough or vice versa).\n *\n * @final\n */\nshaka.media.BufferingObserver = class {\n /**\n * @param {number} thresholdWhenStarving\n * @param {number} thresholdWhenSatisfied\n */\n constructor(thresholdWhenStarving, thresholdWhenSatisfied) {\n const State = shaka.media.BufferingObserver.State;\n\n /** @private {shaka.media.BufferingObserver.State} */\n this.previousState_ = State.SATISFIED;\n\n /** @private {!Map.} */\n this.thresholds_ = new Map()\n .set(State.SATISFIED, thresholdWhenSatisfied)\n .set(State.STARVING, thresholdWhenStarving);\n\n /** @private {number} */\n this.lastRebufferTime_ = 0;\n }\n\n /**\n * @param {number} thresholdWhenStarving\n * @param {number} thresholdWhenSatisfied\n */\n setThresholds(thresholdWhenStarving, thresholdWhenSatisfied) {\n const State = shaka.media.BufferingObserver.State;\n this.thresholds_\n .set(State.SATISFIED, thresholdWhenSatisfied)\n .set(State.STARVING, thresholdWhenStarving);\n }\n\n /**\n * Update the observer by telling it how much content has been buffered (in\n * seconds) and if we are buffered to the end of the presentation. If the\n * controller believes the state has changed, it will return |true|.\n *\n * @param {number} bufferLead\n * @param {boolean} bufferedToEnd\n * @return {boolean}\n */\n update(bufferLead, bufferedToEnd) {\n const State = shaka.media.BufferingObserver.State;\n\n /**\n * Our threshold for how much we need before we declare ourselves as\n * starving is based on whether or not we were just starving. If we\n * were just starving, we are more likely to starve again, so we require\n * more content to be buffered than if we were not just starving.\n *\n * @type {number}\n */\n const threshold = this.thresholds_.get(this.previousState_);\n\n const oldState = this.previousState_;\n const newState = (bufferedToEnd || bufferLead >= threshold) ?\n (State.SATISFIED) :\n (State.STARVING);\n\n // Save the new state now so that calls to |getState| from any callbacks\n // will be accurate.\n this.previousState_ = newState;\n\n // Return |true| only when the state has changed.\n const stateChanged = oldState != newState;\n\n if (stateChanged && newState === State.SATISFIED) {\n this.lastRebufferTime_ = Date.now();\n }\n\n return stateChanged;\n }\n\n /**\n * Set which state that the observer should think playback was in.\n *\n * @param {shaka.media.BufferingObserver.State} state\n */\n setState(state) {\n this.previousState_ = state;\n }\n\n /**\n * Get the state that the observer last thought playback was in.\n *\n * @return {shaka.media.BufferingObserver.State}\n */\n getState() {\n return this.previousState_;\n }\n\n /**\n * Return the last time that the state went from |STARVING| to |SATISFIED|.\n * @return {number}\n */\n getLastRebufferTime() {\n return this.lastRebufferTime_;\n }\n\n /**\n * Reset the last rebuffer time to zero.\n */\n resetLastRebufferTime() {\n this.lastRebufferTime_ = 0;\n }\n};\n\n/**\n * Rather than using booleans to communicate what state we are in, we have this\n * enum.\n *\n * @enum {number}\n */\nshaka.media.BufferingObserver.State = {\n STARVING: 0,\n SATISFIED: 1,\n};\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.Player');\n\ngoog.require('goog.asserts');\ngoog.require('shaka.config.AutoShowText');\ngoog.require('shaka.Deprecate');\ngoog.require('shaka.log');\ngoog.require('shaka.media.AdaptationSetCriteria');\ngoog.require('shaka.media.BufferingObserver');\ngoog.require('shaka.media.DrmEngine');\ngoog.require('shaka.media.ExampleBasedCriteria');\ngoog.require('shaka.media.ManifestFilterer');\ngoog.require('shaka.media.ManifestParser');\ngoog.require('shaka.media.MediaSourceEngine');\ngoog.require('shaka.media.MediaSourcePlayhead');\ngoog.require('shaka.media.MetaSegmentIndex');\ngoog.require('shaka.media.PlayRateController');\ngoog.require('shaka.media.Playhead');\ngoog.require('shaka.media.PlayheadObserverManager');\ngoog.require('shaka.media.PreferenceBasedCriteria');\ngoog.require('shaka.media.PreloadManager');\ngoog.require('shaka.media.QualityObserver');\ngoog.require('shaka.media.RegionObserver');\ngoog.require('shaka.media.RegionTimeline');\ngoog.require('shaka.media.SegmentIndex');\ngoog.require('shaka.media.SegmentPrefetch');\ngoog.require('shaka.media.SegmentReference');\ngoog.require('shaka.media.SrcEqualsPlayhead');\ngoog.require('shaka.media.StreamingEngine');\ngoog.require('shaka.media.TimeRangesUtils');\ngoog.require('shaka.net.NetworkingEngine');\ngoog.require('shaka.net.NetworkingUtils');\ngoog.require('shaka.text.SimpleTextDisplayer');\ngoog.require('shaka.text.StubTextDisplayer');\ngoog.require('shaka.text.TextEngine');\ngoog.require('shaka.text.Utils');\ngoog.require('shaka.text.UITextDisplayer');\ngoog.require('shaka.text.WebVttGenerator');\ngoog.require('shaka.util.BufferUtils');\ngoog.require('shaka.util.CmcdManager');\ngoog.require('shaka.util.CmsdManager');\ngoog.require('shaka.util.ConfigUtils');\ngoog.require('shaka.util.Dom');\ngoog.require('shaka.util.DrmUtils');\ngoog.require('shaka.util.Error');\ngoog.require('shaka.util.EventManager');\ngoog.require('shaka.util.FakeEvent');\ngoog.require('shaka.util.FakeEventTarget');\ngoog.require('shaka.util.Functional');\ngoog.require('shaka.util.IDestroyable');\ngoog.require('shaka.util.LanguageUtils');\ngoog.require('shaka.util.ManifestParserUtils');\ngoog.require('shaka.util.MediaReadyState');\ngoog.require('shaka.util.MimeUtils');\ngoog.require('shaka.util.Mutex');\ngoog.require('shaka.util.ObjectUtils');\ngoog.require('shaka.util.Platform');\ngoog.require('shaka.util.PlayerConfiguration');\ngoog.require('shaka.util.PublicPromise');\ngoog.require('shaka.util.Stats');\ngoog.require('shaka.util.StreamUtils');\ngoog.require('shaka.util.Timer');\ngoog.require('shaka.lcevc.Dec');\ngoog.requireType('shaka.media.PresentationTimeline');\n\n\n/**\n * @event shaka.Player.ErrorEvent\n * @description Fired when a playback error occurs.\n * @property {string} type\n * 'error'\n * @property {!shaka.util.Error} detail\n * An object which contains details on the error. The error's\n * category and code properties will identify the\n * specific error that occurred. In an uncompiled build, you can also use the\n * message and stack properties to debug.\n * @exportDoc\n */\n\n/**\n * @event shaka.Player.StateChangeEvent\n * @description Fired when the player changes load states.\n * @property {string} type\n * 'onstatechange'\n * @property {string} state\n * The name of the state that the player just entered.\n * @exportDoc\n */\n\n/**\n * @event shaka.Player.EmsgEvent\n * @description Fired when an emsg box is found in a segment.\n * If the application calls preventDefault() on this event, further parsing\n * will not happen, and no 'metadata' event will be raised for ID3 payloads.\n * @property {string} type\n * 'emsg'\n * @property {shaka.extern.EmsgInfo} detail\n * An object which contains the content of the emsg box.\n * @exportDoc\n */\n\n\n/**\n * @event shaka.Player.DownloadFailed\n * @description Fired when a download has failed, for any reason.\n * 'downloadfailed'\n * @property {!shaka.extern.Request} request\n * @property {?shaka.util.Error} error\n * @property {number} httpResponseCode\n * @property {boolean} aborted\n * @exportDoc\n */\n\n\n/**\n * @event shaka.Player.DownloadHeadersReceived\n * @description Fired when the networking engine has received the headers for\n * a download, but before the body has been downloaded.\n * If the HTTP plugin being used does not track this information, this event\n * will default to being fired when the body is received, instead.\n * @property {!Object.} headers\n * @property {!shaka.extern.Request} request\n * @property {!shaka.net.NetworkingEngine.RequestType} type\n * 'downloadheadersreceived'\n * @exportDoc\n */\n\n\n/**\n * @event shaka.Player.DrmSessionUpdateEvent\n * @description Fired when the CDM has accepted the license response.\n * @property {string} type\n * 'drmsessionupdate'\n * @exportDoc\n */\n\n\n/**\n * @event shaka.Player.TimelineRegionAddedEvent\n * @description Fired when a media timeline region is added.\n * @property {string} type\n * 'timelineregionadded'\n * @property {shaka.extern.TimelineRegionInfo} detail\n * An object which contains a description of the region.\n * @exportDoc\n */\n\n\n/**\n * @event shaka.Player.TimelineRegionEnterEvent\n * @description Fired when the playhead enters a timeline region.\n * @property {string} type\n * 'timelineregionenter'\n * @property {shaka.extern.TimelineRegionInfo} detail\n * An object which contains a description of the region.\n * @exportDoc\n */\n\n\n/**\n * @event shaka.Player.TimelineRegionExitEvent\n * @description Fired when the playhead exits a timeline region.\n * @property {string} type\n * 'timelineregionexit'\n * @property {shaka.extern.TimelineRegionInfo} detail\n * An object which contains a description of the region.\n * @exportDoc\n */\n\n/**\n * @event shaka.Player.MediaQualityChangedEvent\n * @description Fired when the media quality changes at the playhead.\n * That may be caused by an adaptation change or a DASH period transition.\n * Separate events are emitted for audio and video contentTypes.\n * @property {string} type\n * 'mediaqualitychanged'\n * @property {shaka.extern.MediaQualityInfo} mediaQuality\n * Information about media quality at the playhead position.\n * @property {number} position\n * The playhead position.\n * @exportDoc\n */\n\n/**\n * @event shaka.Player.MediaSourceRecoveredEvent\n * @description Fired when MediaSource has been successfully recovered\n * after occurrence of video error.\n * @property {string} type\n * 'mediasourcerecovered'\n * @exportDoc\n */\n\n/**\n * @event shaka.Player.AudioTrackChangedEvent\n * @description Fired when the audio track changes at the playhead.\n * That may be caused by a user requesting to chang audio tracks.\n * @property {string} type\n * 'audiotrackchanged'\n * @property {shaka.extern.MediaQualityInfo} mediaQuality\n * Information about media quality at the playhead position.\n * @property {number} position\n * The playhead position.\n * @exportDoc\n */\n\n\n/**\n * @event shaka.Player.BufferingEvent\n * @description Fired when the player's buffering state changes.\n * @property {string} type\n * 'buffering'\n * @property {boolean} buffering\n * True when the Player enters the buffering state.\n * False when the Player leaves the buffering state.\n * @exportDoc\n */\n\n\n/**\n * @event shaka.Player.LoadingEvent\n * @description Fired when the player begins loading. The start of loading is\n * defined as when the user has communicated intent to load content (i.e.\n * Player.load has been called).\n * @property {string} type\n * 'loading'\n * @exportDoc\n */\n\n\n/**\n * @event shaka.Player.LoadedEvent\n * @description Fired when the player ends the load.\n * @property {string} type\n * 'loaded'\n * @exportDoc\n */\n\n\n/**\n * @event shaka.Player.UnloadingEvent\n * @description Fired when the player unloads or fails to load.\n * Used by the Cast receiver to determine idle state.\n * @property {string} type\n * 'unloading'\n * @exportDoc\n */\n\n\n/**\n * @event shaka.Player.TextTrackVisibilityEvent\n * @description Fired when text track visibility changes.\n * An app may want to look at getStats() or\n * getVariantTracks() to see what happened.\n * @property {string} type\n * 'texttrackvisibility'\n * @exportDoc\n */\n\n\n/**\n * @event shaka.Player.TracksChangedEvent\n * @description Fired when the list of tracks changes. For example, this will\n * happen when new tracks are added/removed or when track restrictions change.\n * An app may want to look at getVariantTracks() to see what\n * happened.\n * @property {string} type\n * 'trackschanged'\n * @exportDoc\n */\n\n\n/**\n * @event shaka.Player.AdaptationEvent\n * @description Fired when an automatic adaptation causes the active tracks\n * to change. Does not fire when the application calls\n * selectVariantTrack(), selectTextTrack(),\n * selectAudioLanguage(), or selectTextLanguage().\n * @property {string} type\n * 'adaptation'\n * @property {shaka.extern.Track} oldTrack\n * @property {shaka.extern.Track} newTrack\n * @exportDoc\n */\n\n\n/**\n * @event shaka.Player.VariantChangedEvent\n * @description Fired when a call from the application caused a variant change.\n * Can be triggered by calls to selectVariantTrack() or\n * selectAudioLanguage(). Does not fire when an automatic\n * adaptation causes a variant change.\n * An app may want to look at getStats() or\n * getVariantTracks() to see what happened.\n * @property {string} type\n * 'variantchanged'\n * @property {shaka.extern.Track} oldTrack\n * @property {shaka.extern.Track} newTrack\n * @exportDoc\n */\n\n\n/**\n * @event shaka.Player.TextChangedEvent\n * @description Fired when a call from the application caused a text stream\n * change. Can be triggered by calls to selectTextTrack() or\n * selectTextLanguage().\n * An app may want to look at getStats() or\n * getTextTracks() to see what happened.\n * @property {string} type\n * 'textchanged'\n * @exportDoc\n */\n\n\n/**\n * @event shaka.Player.ExpirationUpdatedEvent\n * @description Fired when there is a change in the expiration times of an\n * EME session.\n * @property {string} type\n * 'expirationupdated'\n * @exportDoc\n */\n\n\n/**\n * @event shaka.Player.ManifestParsedEvent\n * @description Fired after the manifest has been parsed, but before anything\n * else happens. The manifest may contain streams that will be filtered out,\n * at this stage of the loading process.\n * @property {string} type\n * 'manifestparsed'\n * @exportDoc\n */\n\n\n/**\n * @event shaka.Player.ManifestUpdatedEvent\n * @description Fired after the manifest has been updated (live streams).\n * @property {string} type\n * 'manifestupdated'\n * @property {boolean} isLive\n * True when the playlist is live. Useful to detect transition from live\n * to static playlist..\n * @exportDoc\n */\n\n\n/**\n * @event shaka.Player.MetadataEvent\n * @description Triggers after metadata associated with the stream is found.\n * Usually they are metadata of type ID3.\n * @property {string} type\n * 'metadata'\n * @property {number} startTime\n * The time that describes the beginning of the range of the metadata to\n * which the cue applies.\n * @property {?number} endTime\n * The time that describes the end of the range of the metadata to which\n * the cue applies.\n * @property {string} metadataType\n * Type of metadata. Eg: 'org.id3' or 'com.apple.quicktime.HLS'\n * @property {shaka.extern.MetadataFrame} payload\n * The metadata itself\n * @exportDoc\n */\n\n\n/**\n * @event shaka.Player.StreamingEvent\n * @description Fired after the manifest has been parsed and track information\n * is available, but before streams have been chosen and before any segments\n * have been fetched. You may use this event to configure the player based on\n * information found in the manifest.\n * @property {string} type\n * 'streaming'\n * @exportDoc\n */\n\n\n/**\n * @event shaka.Player.AbrStatusChangedEvent\n * @description Fired when the state of abr has been changed.\n * (Enabled or disabled).\n * @property {string} type\n * 'abrstatuschanged'\n * @property {boolean} newStatus\n * The new status of the application. True for 'is enabled' and\n * false otherwise.\n * @exportDoc\n */\n\n\n/**\n * @event shaka.Player.RateChangeEvent\n * @description Fired when the video's playback rate changes.\n * This allows the PlayRateController to update it's internal rate field,\n * before the UI updates playback button with the newest playback rate.\n * @property {string} type\n * 'ratechange'\n * @exportDoc\n */\n\n\n/**\n * @event shaka.Player.SegmentAppended\n * @description Fired when a segment is appended to the media element.\n * @property {string} type\n * 'segmentappended'\n * @property {number} start\n * The start time of the segment.\n * @property {number} end\n * The end time of the segment.\n * @property {string} contentType\n * The content type of the segment. E.g. 'video', 'audio', or 'text'.\n * @property {boolean} isMuxed\n * Indicates if the segment is muxed (audio + video).\n * @exportDoc\n */\n\n\n/**\n * @event shaka.Player.SessionDataEvent\n * @description Fired when the manifest parser find info about session data.\n * Specification: https://tools.ietf.org/html/rfc8216#section-4.3.4.4\n * @property {string} type\n * 'sessiondata'\n * @property {string} id\n * The id of the session data.\n * @property {string} uri\n * The uri with the session data info.\n * @property {string} language\n * The language of the session data.\n * @property {string} value\n * The value of the session data.\n * @exportDoc\n */\n\n\n/**\n * @event shaka.Player.StallDetectedEvent\n * @description Fired when a stall in playback is detected by the StallDetector.\n * Not all stalls are caused by gaps in the buffered ranges.\n * An app may want to look at getStats() to see what happened.\n * @property {string} type\n * 'stalldetected'\n * @exportDoc\n */\n\n\n/**\n * @event shaka.Player.GapJumpedEvent\n * @description Fired when the GapJumpingController jumps over a gap in the\n * buffered ranges.\n * An app may want to look at getStats() to see what happened.\n * @property {string} type\n * 'gapjumped'\n * @exportDoc\n */\n\n\n/**\n * @event shaka.Player.KeyStatusChanged\n * @description Fired when the key status changed.\n * @property {string} type\n * 'keystatuschanged'\n * @exportDoc\n */\n\n\n/**\n * @event shaka.Player.StateChanged\n * @description Fired when player state is changed.\n * @property {string} type\n * 'statechanged'\n * @property {string} newstate\n * The new state.\n * @exportDoc\n */\n\n\n/**\n * @event shaka.Player.Started\n * @description Fires when the content starts playing.\n * Only for VoD.\n * @property {string} type\n * 'started'\n * @exportDoc\n */\n\n\n/**\n * @event shaka.Player.FirstQuartile\n * @description Fires when the content playhead crosses first quartile.\n * Only for VoD.\n * @property {string} type\n * 'firstquartile'\n * @exportDoc\n */\n\n\n/**\n * @event shaka.Player.Midpoint\n * @description Fires when the content playhead crosses midpoint.\n * Only for VoD.\n * @property {string} type\n * 'midpoint'\n * @exportDoc\n */\n\n\n/**\n * @event shaka.Player.ThirdQuartile\n * @description Fires when the content playhead crosses third quartile.\n * Only for VoD.\n * @property {string} type\n * 'thirdquartile'\n * @exportDoc\n */\n\n\n/**\n * @event shaka.Player.Complete\n * @description Fires when the content completes playing.\n * Only for VoD.\n * @property {string} type\n * 'complete'\n * @exportDoc\n */\n\n\n/**\n * @event shaka.Player.SpatialVideoInfoEvent\n * @description Fired when the video has spatial video info. If a previous\n * event was fired, this include the new info.\n * @property {string} type\n * 'spatialvideoinfo'\n * @property {shaka.extern.SpatialVideoInfo} detail\n * An object which contains the content of the emsg box.\n * @exportDoc\n */\n\n\n/**\n * @event shaka.Player.NoSpatialVideoInfoEvent\n * @description Fired when the video no longer has spatial video information.\n * For it to be fired, the shaka.Player.SpatialVideoInfoEvent event must\n * have been previously fired.\n * @property {string} type\n * 'nospatialvideoinfo'\n * @exportDoc\n */\n\n\n/**\n * @event shaka.Player.ProducerReferenceTimeEvent\n * @description Fired when the content includes ProducerReferenceTime (PRFT)\n * info.\n * @property {string} type\n * 'prft'\n * @property {shaka.extern.ProducerReferenceTime} detail\n * An object which contains the content of the PRFT box.\n * @exportDoc\n */\n\n\n/**\n * @summary The main player object for Shaka Player.\n *\n * @implements {shaka.util.IDestroyable}\n * @export\n */\nshaka.Player = class extends shaka.util.FakeEventTarget {\n /**\n * @param {HTMLMediaElement=} mediaElement\n * When provided, the player will attach to mediaElement,\n * similar to calling attach. When not provided, the player\n * will remain detached.\n * @param {HTMLElement=} videoContainer\n * The videoContainer to construct UITextDisplayer\n * @param {function(shaka.Player)=} dependencyInjector Optional callback\n * which is called to inject mocks into the Player. Used for testing.\n */\n constructor(mediaElement, videoContainer = null, dependencyInjector) {\n super();\n\n /** @private {shaka.Player.LoadMode} */\n this.loadMode_ = shaka.Player.LoadMode.NOT_LOADED;\n\n /** @private {HTMLMediaElement} */\n this.video_ = null;\n\n /** @private {HTMLElement} */\n this.videoContainer_ = videoContainer;\n\n /**\n * Since we may not always have a text displayer created (e.g. before |load|\n * is called), we need to track what text visibility SHOULD be so that we\n * can ensure that when we create the text displayer. When we create our\n * text displayer, we will use this to show (or not show) text as per the\n * user's requests.\n *\n * @private {boolean}\n */\n this.isTextVisible_ = false;\n\n /**\n * For listeners scoped to the lifetime of the Player instance.\n * @private {shaka.util.EventManager}\n */\n this.globalEventManager_ = new shaka.util.EventManager();\n\n /**\n * For listeners scoped to the lifetime of the media element attachment.\n * @private {shaka.util.EventManager}\n */\n this.attachEventManager_ = new shaka.util.EventManager();\n\n /**\n * For listeners scoped to the lifetime of the loaded content.\n * @private {shaka.util.EventManager}\n */\n this.loadEventManager_ = new shaka.util.EventManager();\n\n /**\n * For listeners scoped to the lifetime of the loaded content.\n * @private {shaka.util.EventManager}\n */\n this.trickPlayEventManager_ = new shaka.util.EventManager();\n\n /**\n * For listeners scoped to the lifetime of the ad manager.\n * @private {shaka.util.EventManager}\n */\n this.adManagerEventManager_ = new shaka.util.EventManager();\n\n /** @private {shaka.net.NetworkingEngine} */\n this.networkingEngine_ = null;\n\n /** @private {shaka.media.DrmEngine} */\n this.drmEngine_ = null;\n\n /** @private {shaka.media.MediaSourceEngine} */\n this.mediaSourceEngine_ = null;\n\n /** @private {shaka.media.Playhead} */\n this.playhead_ = null;\n\n /**\n * Incremented whenever a top-level operation (load, attach, etc) is\n * performed.\n * Used to determine if a load operation has been interrupted.\n * @private {number}\n */\n this.operationId_ = 0;\n\n /** @private {!shaka.util.Mutex} */\n this.mutex_ = new shaka.util.Mutex();\n\n /**\n * The playhead observers are used to monitor the position of the playhead\n * and some other source of data (e.g. buffered content), and raise events.\n *\n * @private {shaka.media.PlayheadObserverManager}\n */\n this.playheadObservers_ = null;\n\n /**\n * This is our control over the playback rate of the media element. This\n * provides the missing functionality that we need to provide trick play,\n * for example a negative playback rate.\n *\n * @private {shaka.media.PlayRateController}\n */\n this.playRateController_ = null;\n\n // We use the buffering observer and timer to track when we move from having\n // enough buffered content to not enough. They only exist when content has\n // been loaded and are not re-used between loads.\n /** @private {shaka.util.Timer} */\n this.bufferPoller_ = null;\n\n /** @private {shaka.media.BufferingObserver} */\n this.bufferObserver_ = null;\n\n /** @private {shaka.media.RegionTimeline} */\n this.regionTimeline_ = null;\n\n /** @private {shaka.util.CmcdManager} */\n this.cmcdManager_ = null;\n\n /** @private {shaka.util.CmsdManager} */\n this.cmsdManager_ = null;\n\n // This is the canvas element that will be used for rendering LCEVC\n // enhanced frames.\n /** @private {?HTMLCanvasElement} */\n this.lcevcCanvas_ = null;\n\n // This is the LCEVC Decoder object to decode LCEVC.\n /** @private {?shaka.lcevc.Dec} */\n this.lcevcDec_ = null;\n\n /** @private {shaka.media.QualityObserver} */\n this.qualityObserver_ = null;\n\n /** @private {shaka.media.StreamingEngine} */\n this.streamingEngine_ = null;\n\n /** @private {shaka.extern.ManifestParser} */\n this.parser_ = null;\n\n /** @private {?shaka.extern.ManifestParser.Factory} */\n this.parserFactory_ = null;\n\n /** @private {?shaka.extern.Manifest} */\n this.manifest_ = null;\n\n /** @private {?string} */\n this.assetUri_ = null;\n\n /** @private {?string} */\n this.mimeType_ = null;\n\n /** @private {?number} */\n this.startTime_ = null;\n\n /** @private {boolean} */\n this.fullyLoaded_ = false;\n\n /** @private {shaka.extern.AbrManager} */\n this.abrManager_ = null;\n\n /**\n * The factory that was used to create the abrManager_ instance.\n * @private {?shaka.extern.AbrManager.Factory}\n */\n this.abrManagerFactory_ = null;\n\n /**\n * Contains an ID for use with creating streams. The manifest parser should\n * start with small IDs, so this starts with a large one.\n * @private {number}\n */\n this.nextExternalStreamId_ = 1e9;\n\n /** @private {!Array.} */\n this.externalSrcEqualsThumbnailsStreams_ = [];\n\n /** @private {number} */\n this.completionPercent_ = NaN;\n\n /** @private {?shaka.extern.PlayerConfiguration} */\n this.config_ = this.defaultConfig_();\n\n /** @private {?number} */\n this.currentTargetLatency_ = null;\n\n /** @private {number} */\n this.rebufferingCount_ = -1;\n\n /** @private {?number} */\n this.targetLatencyReached_ = null;\n\n /**\n * The TextDisplayerFactory that was last used to make a text displayer.\n * Stored so that we can tell if a new type of text displayer is desired.\n * @private {?shaka.extern.TextDisplayer.Factory}\n */\n this.lastTextFactory_;\n\n /** @private {shaka.extern.Resolution} */\n this.maxHwRes_ = {width: Infinity, height: Infinity};\n\n /** @private {!shaka.media.ManifestFilterer} */\n this.manifestFilterer_ = new shaka.media.ManifestFilterer(\n this.config_, this.maxHwRes_, null);\n\n /** @private {!Array.} */\n this.createdPreloadManagers_ = [];\n\n /** @private {shaka.util.Stats} */\n this.stats_ = null;\n\n /** @private {!shaka.media.AdaptationSetCriteria} */\n this.currentAdaptationSetCriteria_ =\n new shaka.media.PreferenceBasedCriteria(\n this.config_.preferredAudioLanguage,\n this.config_.preferredVariantRole,\n this.config_.preferredAudioChannelCount,\n this.config_.preferredVideoHdrLevel,\n this.config_.preferSpatialAudio,\n this.config_.preferredVideoLayout,\n this.config_.preferredAudioLabel,\n this.config_.preferredVideoLabel,\n this.config_.mediaSource.codecSwitchingStrategy,\n /* audioCodec= */ '');\n\n /** @private {string} */\n this.currentTextLanguage_ = this.config_.preferredTextLanguage;\n\n /** @private {string} */\n this.currentTextRole_ = this.config_.preferredTextRole;\n\n /** @private {boolean} */\n this.currentTextForced_ = this.config_.preferForcedSubs;\n\n /** @private {!Array.} */\n this.cleanupOnUnload_ = [];\n\n if (dependencyInjector) {\n dependencyInjector(this);\n }\n\n\n // Create the CMCD manager so client data can be attached to all requests\n this.cmcdManager_ = this.createCmcd_();\n\n this.cmsdManager_ = this.createCmsd_();\n\n this.networkingEngine_ = this.createNetworkingEngine();\n this.networkingEngine_.setForceHTTP(this.config_.streaming.forceHTTP);\n this.networkingEngine_.setForceHTTPS(this.config_.streaming.forceHTTPS);\n this.networkingEngine_.setMinBytesForProgressEvents(\n this.config_.streaming.minBytesForProgressEvents);\n\n /** @private {shaka.extern.IAdManager} */\n this.adManager_ = null;\n\n /** @private {?shaka.media.PreloadManager} */\n this.preloadDueAdManager_ = null;\n\n /** @private {HTMLMediaElement} */\n this.preloadDueAdManagerVideo_ = null;\n\n /** @private {boolean} */\n this.preloadDueAdManagerVideoEnded_ = false;\n\n /** @private {shaka.util.Timer} */\n this.preloadDueAdManagerTimer_ = new shaka.util.Timer(async () => {\n if (this.preloadDueAdManager_) {\n goog.asserts.assert(this.preloadDueAdManagerVideo_, 'Must have video');\n await this.attach(\n this.preloadDueAdManagerVideo_, /* initializeMediaSource= */ true);\n await this.load(this.preloadDueAdManager_);\n if (!this.preloadDueAdManagerVideoEnded_) {\n this.preloadDueAdManagerVideo_.play();\n } else {\n this.preloadDueAdManagerVideo_.pause();\n }\n this.preloadDueAdManager_ = null;\n this.preloadDueAdManagerVideoEnded_ = false;\n }\n });\n\n if (shaka.Player.adManagerFactory_) {\n this.adManager_ = shaka.Player.adManagerFactory_();\n this.adManager_.configure(this.config_.ads);\n\n // Note: we don't use shaka.ads.Utils.AD_CONTENT_PAUSE_REQUESTED to\n // avoid add a optional module in the player.\n this.adManagerEventManager_.listen(\n this.adManager_, 'ad-content-pause-requested', async (e) => {\n this.preloadDueAdManagerTimer_.stop();\n if (!this.preloadDueAdManager_) {\n this.preloadDueAdManagerVideo_ = this.video_;\n this.preloadDueAdManagerVideoEnded_ = this.video_.ended;\n const saveLivePosition = /** @type {boolean} */(\n e['saveLivePosition']) || false;\n this.preloadDueAdManager_ = await this.detachAndSavePreload(\n /* keepAdManager= */ true, saveLivePosition);\n }\n });\n\n // Note: we don't use shaka.ads.Utils.AD_CONTENT_RESUME_REQUESTED to\n // avoid add a optional module in the player.\n this.adManagerEventManager_.listen(\n this.adManager_, 'ad-content-resume-requested', (e) => {\n const offset = /** @type {number} */(e['offset']) || 0;\n if (this.preloadDueAdManager_) {\n this.preloadDueAdManager_.setOffsetToStartTime(offset);\n }\n this.preloadDueAdManagerTimer_.tickAfter(0.1);\n });\n\n // Note: we don't use shaka.ads.Utils.AD_CONTENT_ATTACH_REQUESTED to\n // avoid add a optional module in the player.\n this.adManagerEventManager_.listen(\n this.adManager_, 'ad-content-attach-requested', async (e) => {\n if (!this.video_ && this.preloadDueAdManagerVideo_) {\n goog.asserts.assert(this.preloadDueAdManagerVideo_,\n 'Must have video');\n await this.attach(this.preloadDueAdManagerVideo_,\n /* initializeMediaSource= */ true);\n }\n });\n }\n\n // If the browser comes back online after being offline, then try to play\n // again.\n this.globalEventManager_.listen(window, 'online', () => {\n this.restoreDisabledVariants_();\n this.retryStreaming();\n });\n\n /** @private {shaka.util.Timer} */\n this.checkVariantsTimer_ =\n new shaka.util.Timer(() => this.checkVariants_());\n\n /** @private {?shaka.media.PreloadManager} */\n this.preloadNextUrl_ = null;\n\n // Even though |attach| will start in later interpreter cycles, it should be\n // the LAST thing we do in the constructor because conceptually it relies on\n // player having been initialized.\n if (mediaElement) {\n shaka.Deprecate.deprecateFeature(5,\n 'Player w/ mediaElement',\n 'Please migrate from initializing Player with a mediaElement; ' +\n 'use the attach method instead.');\n this.attach(mediaElement, /* initializeMediaSource= */ true);\n }\n\n /** @private {?shaka.extern.TextDisplayer} */\n this.textDisplayer_ = null;\n }\n\n /**\n * Create a shaka.lcevc.Dec object\n * @param {shaka.extern.LcevcConfiguration} config\n * @private\n */\n createLcevcDec_(config) {\n if (this.lcevcDec_ == null) {\n this.lcevcDec_ = new shaka.lcevc.Dec(\n /** @type {HTMLVideoElement} */ (this.video_),\n this.lcevcCanvas_,\n config,\n );\n if (this.mediaSourceEngine_) {\n this.mediaSourceEngine_.updateLcevcDec(this.lcevcDec_);\n }\n }\n }\n\n /**\n * Close a shaka.lcevc.Dec object if present and hide the canvas.\n * @private\n */\n closeLcevcDec_() {\n if (this.lcevcDec_ != null) {\n this.lcevcDec_.hideCanvas();\n this.lcevcDec_.release();\n this.lcevcDec_ = null;\n }\n }\n\n /**\n * Setup shaka.lcevc.Dec object\n * @param {?shaka.extern.PlayerConfiguration} config\n * @private\n */\n setupLcevc_(config) {\n if (config.lcevc.enabled) {\n this.closeLcevcDec_();\n this.createLcevcDec_(config.lcevc);\n } else {\n this.closeLcevcDec_();\n }\n }\n\n /**\n * @param {!shaka.util.FakeEvent.EventName} name\n * @param {Map.=} data\n * @return {!shaka.util.FakeEvent}\n * @private\n */\n static makeEvent_(name, data) {\n return new shaka.util.FakeEvent(name, data);\n }\n\n /**\n * After destruction, a Player object cannot be used again.\n *\n * @override\n * @export\n */\n async destroy() {\n // Make sure we only execute the destroy logic once.\n if (this.loadMode_ == shaka.Player.LoadMode.DESTROYED) {\n return;\n }\n\n // If LCEVC Decoder exists close it.\n this.closeLcevcDec_();\n\n const detachPromise = this.detach();\n\n // Mark as \"dead\". This should stop external-facing calls from changing our\n // internal state any more. This will stop calls to |attach|, |detach|, etc.\n // from interrupting our final move to the detached state.\n this.loadMode_ = shaka.Player.LoadMode.DESTROYED;\n\n await detachPromise;\n\n // A PreloadManager can only be used with the Player instance that created\n // it, so all PreloadManagers this Player has created are now useless.\n // Destroy any remaining managers now, to help prevent memory leaks.\n await this.destroyAllPreloads();\n\n // Tear-down the event managers to ensure handlers stop firing.\n if (this.globalEventManager_) {\n this.globalEventManager_.release();\n this.globalEventManager_ = null;\n }\n if (this.attachEventManager_) {\n this.attachEventManager_.release();\n this.attachEventManager_ = null;\n }\n if (this.loadEventManager_) {\n this.loadEventManager_.release();\n this.loadEventManager_ = null;\n }\n if (this.trickPlayEventManager_) {\n this.trickPlayEventManager_.release();\n this.trickPlayEventManager_ = null;\n }\n if (this.adManagerEventManager_) {\n this.adManagerEventManager_.release();\n this.adManagerEventManager_ = null;\n }\n\n this.abrManagerFactory_ = null;\n this.config_ = null;\n this.stats_ = null;\n this.videoContainer_ = null;\n this.cmcdManager_ = null;\n this.cmsdManager_ = null;\n\n if (this.networkingEngine_) {\n await this.networkingEngine_.destroy();\n this.networkingEngine_ = null;\n }\n\n if (this.abrManager_) {\n this.abrManager_.release();\n this.abrManager_ = null;\n }\n\n // FakeEventTarget implements IReleasable\n super.release();\n }\n\n /**\n * Registers a plugin callback that will be called with\n * support(). The callback will return the value that will be\n * stored in the return value from support().\n *\n * @param {string} name\n * @param {function():*} callback\n * @export\n */\n static registerSupportPlugin(name, callback) {\n shaka.Player.supportPlugins_[name] = callback;\n }\n\n /**\n * Set a factory to create an ad manager during player construction time.\n * This method needs to be called bafore instantiating the Player class.\n *\n * @param {!shaka.extern.IAdManager.Factory} factory\n * @export\n */\n static setAdManagerFactory(factory) {\n shaka.Player.adManagerFactory_ = factory;\n }\n\n /**\n * Return whether the browser provides basic support. If this returns false,\n * Shaka Player cannot be used at all. In this case, do not construct a\n * Player instance and do not use the library.\n *\n * @return {boolean}\n * @export\n */\n static isBrowserSupported() {\n if (!window.Promise) {\n shaka.log.alwaysWarn('A Promise implementation or polyfill is required');\n }\n\n // Basic features needed for the library to be usable.\n const basicSupport = !!window.Promise && !!window.Uint8Array &&\n // eslint-disable-next-line no-restricted-syntax\n !!Array.prototype.forEach;\n if (!basicSupport) {\n return false;\n }\n\n // We do not support IE\n if (shaka.util.Platform.isIE()) {\n return false;\n }\n\n const safariVersion = shaka.util.Platform.safariVersion();\n if (safariVersion && safariVersion < 9) {\n return false;\n }\n\n // DRM support is not strictly necessary, but the APIs at least need to be\n // there. Our no-op DRM polyfill should handle that.\n // TODO(#1017): Consider making even DrmEngine optional.\n const drmSupport = shaka.util.DrmUtils.isBrowserSupported();\n if (!drmSupport) {\n return false;\n }\n\n // If we have MediaSource (MSE) support, we should be able to use Shaka.\n if (shaka.util.Platform.supportsMediaSource()) {\n return true;\n }\n\n // If we don't have MSE, we _may_ be able to use Shaka. Look for native HLS\n // support, and call this platform usable if we have it.\n return shaka.util.Platform.supportsMediaType('application/x-mpegurl');\n }\n\n /**\n * Probes the browser to determine what features are supported. This makes a\n * number of requests to EME/MSE/etc which may result in user prompts. This\n * should only be used for diagnostics.\n *\n *

\n * NOTE: This may show a request to the user for permission.\n *\n * @see https://bit.ly/2ywccmH\n * @param {boolean=} promptsOkay\n * @return {!Promise.}\n * @export\n */\n static async probeSupport(promptsOkay=true) {\n goog.asserts.assert(shaka.Player.isBrowserSupported(),\n 'Must have basic support');\n let drm = {};\n if (promptsOkay) {\n drm = await shaka.media.DrmEngine.probeSupport();\n }\n const manifest = shaka.media.ManifestParser.probeSupport();\n const media = shaka.media.MediaSourceEngine.probeSupport();\n const hardwareResolution =\n await shaka.util.Platform.detectMaxHardwareResolution();\n\n /** @type {shaka.extern.SupportType} */\n const ret = {\n manifest,\n media,\n drm,\n hardwareResolution,\n };\n\n const plugins = shaka.Player.supportPlugins_;\n for (const name in plugins) {\n ret[name] = plugins[name]();\n }\n\n return ret;\n }\n\n /**\n * Makes a fires an event corresponding to entering a state of the loading\n * process.\n * @param {string} nodeName\n * @private\n */\n makeStateChangeEvent_(nodeName) {\n this.dispatchEvent(shaka.Player.makeEvent_(\n /* name= */ shaka.util.FakeEvent.EventName.OnStateChange,\n /* data= */ (new Map()).set('state', nodeName)));\n }\n\n /**\n * Attaches the player to a media element.\n * If the player was already attached to a media element, first detaches from\n * that media element.\n *\n * @param {!HTMLMediaElement} mediaElement\n * @param {boolean=} initializeMediaSource\n * @return {!Promise}\n * @export\n */\n async attach(mediaElement, initializeMediaSource = true) {\n // Do not allow the player to be used after |destroy| is called.\n if (this.loadMode_ == shaka.Player.LoadMode.DESTROYED) {\n throw this.createAbortLoadError_();\n }\n\n const noop = this.video_ && this.video_ == mediaElement;\n\n if (this.video_ && this.video_ != mediaElement) {\n await this.detach();\n }\n\n if (await this.atomicOperationAcquireMutex_('attach')) {\n return;\n }\n\n try {\n if (!noop) {\n this.makeStateChangeEvent_('attach');\n\n const onError = (error) => this.onVideoError_(error);\n this.attachEventManager_.listen(mediaElement, 'error', onError);\n this.video_ = mediaElement;\n }\n\n // Only initialize media source if the platform supports it.\n if (initializeMediaSource &&\n shaka.util.Platform.supportsMediaSource() &&\n !this.mediaSourceEngine_) {\n await this.initializeMediaSourceEngineInner_();\n }\n } catch (error) {\n await this.detach();\n throw error;\n } finally {\n this.mutex_.release();\n }\n }\n\n\n /**\n * Calling attachCanvas will tell the player to set canvas\n * element for LCEVC decoding.\n *\n * @param {HTMLCanvasElement} canvas\n * @export\n */\n attachCanvas(canvas) {\n this.lcevcCanvas_ = canvas;\n }\n\n /**\n * Detach the player from the current media element. Leaves the player in a\n * state where it cannot play media, until it has been attached to something\n * else.\n *\n * @param {boolean=} keepAdManager\n *\n * @return {!Promise}\n * @export\n */\n async detach(keepAdManager = false) {\n // Do not allow the player to be used after |destroy| is called.\n if (this.loadMode_ == shaka.Player.LoadMode.DESTROYED) {\n throw this.createAbortLoadError_();\n }\n\n await this.unload(/* initializeMediaSource= */ false, keepAdManager);\n\n if (await this.atomicOperationAcquireMutex_('detach')) {\n return;\n }\n\n try {\n // If we were going from \"detached\" to \"detached\" we wouldn't have\n // a media element to detach from.\n if (this.video_) {\n this.attachEventManager_.removeAll();\n this.video_ = null;\n }\n\n this.makeStateChangeEvent_('detach');\n\n if (this.adManager_ && !keepAdManager) {\n // The ad manager is specific to the video, so detach it too.\n this.adManager_.release();\n }\n } finally {\n this.mutex_.release();\n }\n }\n\n /**\n * Tries to acquire the mutex, and then returns if the operation should end\n * early due to someone else starting a mutex-acquiring operation.\n * Meant for operations that can't be interrupted midway through (e.g.\n * everything but load).\n * @param {string} mutexIdentifier\n * @return {!Promise.} endEarly If false, the calling context will\n * need to release the mutex.\n * @private\n */\n async atomicOperationAcquireMutex_(mutexIdentifier) {\n const operationId = ++this.operationId_;\n await this.mutex_.acquire(mutexIdentifier);\n if (operationId != this.operationId_) {\n this.mutex_.release();\n return true;\n }\n return false;\n }\n\n /**\n * Unloads the currently playing stream, if any.\n *\n * @param {boolean=} initializeMediaSource\n * @param {boolean=} keepAdManager\n * @return {!Promise}\n * @export\n */\n async unload(initializeMediaSource = true, keepAdManager = false) {\n // Set the load mode to unload right away so that all the public methods\n // will stop using the internal components. We need to make sure that we\n // are not overriding the destroyed state because we will unload when we are\n // destroying the player.\n if (this.loadMode_ != shaka.Player.LoadMode.DESTROYED) {\n this.loadMode_ = shaka.Player.LoadMode.NOT_LOADED;\n }\n\n if (await this.atomicOperationAcquireMutex_('unload')) {\n return;\n }\n\n try {\n this.fullyLoaded_ = false;\n this.makeStateChangeEvent_('unload');\n\n // If the platform does not support media source, we will never want to\n // initialize media source.\n if (initializeMediaSource && !shaka.util.Platform.supportsMediaSource()) {\n initializeMediaSource = false;\n }\n\n // If LCEVC Decoder exists close it.\n this.closeLcevcDec_();\n\n // Run any general cleanup tasks now. This should be here at the top,\n // right after setting loadMode_, so that internal components still exist\n // as they did when the cleanup tasks were registered in the array.\n const cleanupTasks = this.cleanupOnUnload_.map((cb) => cb());\n this.cleanupOnUnload_ = [];\n await Promise.all(cleanupTasks);\n\n // Dispatch the unloading event.\n this.dispatchEvent(\n shaka.Player.makeEvent_(shaka.util.FakeEvent.EventName.Unloading));\n\n // Release the region timeline, which is created when parsing the\n // manifest.\n if (this.regionTimeline_) {\n this.regionTimeline_.release();\n this.regionTimeline_ = null;\n }\n\n // In most cases we should have a media element. The one exception would\n // be if there was an error and we, by chance, did not have a media\n // element.\n if (this.video_) {\n this.loadEventManager_.removeAll();\n this.trickPlayEventManager_.removeAll();\n }\n\n // Stop the variant checker timer\n this.checkVariantsTimer_.stop();\n\n // Some observers use some playback components, shutting down the\n // observers first ensures that they don't try to use the playback\n // components mid-destroy.\n if (this.playheadObservers_) {\n this.playheadObservers_.release();\n this.playheadObservers_ = null;\n }\n\n if (this.bufferPoller_) {\n this.bufferPoller_.stop();\n this.bufferPoller_ = null;\n }\n\n // Stop the parser early. Since it is at the start of the pipeline, it\n // should be start early to avoid is pushing new data downstream.\n if (this.parser_) {\n await this.parser_.stop();\n this.parser_ = null;\n this.parserFactory_ = null;\n }\n\n // Abr Manager will tell streaming engine what to do, so we need to stop\n // it before we destroy streaming engine. Unlike with the other\n // components, we do not release the instance, we will reuse it in later\n // loads.\n if (this.abrManager_) {\n await this.abrManager_.stop();\n }\n\n // Streaming engine will push new data to media source engine, so we need\n // to shut it down before destroy media source engine.\n if (this.streamingEngine_) {\n await this.streamingEngine_.destroy();\n this.streamingEngine_ = null;\n }\n\n if (this.playRateController_) {\n this.playRateController_.release();\n this.playRateController_ = null;\n }\n\n // Playhead is used by StreamingEngine, so we can't destroy this until\n // after StreamingEngine has stopped.\n if (this.playhead_) {\n this.playhead_.release();\n this.playhead_ = null;\n }\n\n // EME v0.1b requires the media element to clear the MediaKeys\n if (shaka.util.Platform.isMediaKeysPolyfilled('webkit') &&\n this.drmEngine_) {\n await this.drmEngine_.destroy();\n this.drmEngine_ = null;\n }\n\n // Media source engine holds onto the media element, and in order to\n // detach the media keys (with drm engine), we need to break the\n // connection between media source engine and the media element.\n if (this.mediaSourceEngine_) {\n await this.mediaSourceEngine_.destroy();\n this.mediaSourceEngine_ = null;\n }\n\n if (this.adManager_ && !keepAdManager) {\n this.adManager_.onAssetUnload();\n }\n\n if (this.preloadDueAdManager_ && !keepAdManager) {\n this.preloadDueAdManager_.destroy();\n this.preloadDueAdManager_ = null;\n }\n\n if (!keepAdManager) {\n this.preloadDueAdManagerTimer_.stop();\n }\n\n if (this.cmcdManager_) {\n this.cmcdManager_.reset();\n }\n\n if (this.cmsdManager_) {\n this.cmsdManager_.reset();\n }\n\n if (this.textDisplayer_) {\n await this.textDisplayer_.destroy();\n this.textDisplayer_ = null;\n }\n\n if (this.video_) {\n // Remove all track nodes\n shaka.util.Dom.removeAllChildren(this.video_);\n\n // In order to unload a media element, we need to remove the src\n // attribute and then load again. When we destroy media source engine,\n // this will be done for us, but for src=, we need to do it here.\n //\n // DrmEngine requires this to be done before we destroy DrmEngine\n // itself.\n if (this.video_.src) {\n this.video_.removeAttribute('src');\n this.video_.load();\n }\n }\n\n if (this.drmEngine_) {\n await this.drmEngine_.destroy();\n this.drmEngine_ = null;\n }\n\n if (this.preloadNextUrl_ &&\n this.assetUri_ != this.preloadNextUrl_.getAssetUri()) {\n if (!this.preloadNextUrl_.isDestroyed()) {\n this.preloadNextUrl_.destroy();\n }\n this.preloadNextUrl_ = null;\n }\n\n this.assetUri_ = null;\n this.mimeType_ = null;\n this.bufferObserver_ = null;\n\n if (this.manifest_) {\n for (const variant of this.manifest_.variants) {\n for (const stream of [variant.audio, variant.video]) {\n if (stream && stream.segmentIndex) {\n stream.segmentIndex.release();\n }\n }\n }\n for (const stream of this.manifest_.textStreams) {\n if (stream.segmentIndex) {\n stream.segmentIndex.release();\n }\n }\n }\n\n // On some devices, cached MediaKeySystemAccess objects may corrupt\n // after several playbacks, and they are not able anymore to properly\n // create MediaKeys objects. To prevent it, clear the cache after\n // each playback.\n if (this.config_.streaming.clearDecodingCache) {\n shaka.util.StreamUtils.clearDecodingConfigCache();\n shaka.util.DrmUtils.clearMediaKeySystemAccessMap();\n }\n\n this.manifest_ = null;\n this.stats_ = new shaka.util.Stats(); // Replace with a clean object.\n this.lastTextFactory_ = null;\n\n this.targetLatencyReached_ = null;\n this.currentTargetLatency_ = null;\n this.rebufferingCount_ = -1;\n\n this.externalSrcEqualsThumbnailsStreams_ = [];\n\n this.completionPercent_ = NaN;\n\n // Make sure that the app knows of the new buffering state.\n this.updateBufferState_();\n } finally {\n this.mutex_.release();\n }\n\n if (initializeMediaSource && shaka.util.Platform.supportsMediaSource() &&\n !this.mediaSourceEngine_ && this.video_) {\n await this.initializeMediaSourceEngineInner_();\n }\n }\n\n /**\n * Provides a way to update the stream start position during the media loading\n * process. Can for example be called from the manifestparsed\n * event handler to update the start position based on information in the\n * manifest.\n *\n * @param {number} startTime\n * @export\n */\n updateStartTime(startTime) {\n this.startTime_ = startTime;\n }\n\n /**\n * Loads a new stream.\n * If another stream was already playing, first unloads that stream.\n *\n * @param {string|shaka.media.PreloadManager} assetUriOrPreloader\n * @param {?number=} startTime\n * When startTime is null or\n * undefined, playback will start at the default start time (0\n * for VOD and liveEdge for LIVE).\n * @param {?string=} mimeType\n * @return {!Promise}\n * @export\n */\n async load(assetUriOrPreloader, startTime = null, mimeType) {\n // Do not allow the player to be used after |destroy| is called.\n if (this.loadMode_ == shaka.Player.LoadMode.DESTROYED) {\n throw this.createAbortLoadError_();\n }\n\n /** @type {?shaka.media.PreloadManager} */\n let preloadManager = null;\n let assetUri = '';\n if (assetUriOrPreloader instanceof shaka.media.PreloadManager) {\n preloadManager = assetUriOrPreloader;\n assetUri = preloadManager.getAssetUri() || '';\n } else {\n assetUri = assetUriOrPreloader || '';\n }\n\n // Quickly acquire the mutex, so this will wait for other top-level\n // operations.\n await this.mutex_.acquire('load');\n this.mutex_.release();\n\n if (!this.video_) {\n throw new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.PLAYER,\n shaka.util.Error.Code.NO_VIDEO_ELEMENT);\n }\n\n if (this.assetUri_) {\n // Note: This is used to avoid the destruction of the nextUrl\n // preloadManager that can be the current one.\n this.assetUri_ = assetUri;\n await this.unload(/* initializeMediaSource= */ false);\n }\n\n // Add a mechanism to detect if the load process has been interrupted by a\n // call to another top-level operation (unload, load, etc).\n const operationId = ++this.operationId_;\n const detectInterruption = async () => {\n if (this.operationId_ != operationId) {\n if (preloadManager) {\n await preloadManager.destroy();\n }\n throw this.createAbortLoadError_();\n }\n };\n\n /**\n * Wraps a given operation with mutex.acquire and mutex.release, along with\n * calls to detectInterruption, to catch any other top-level calls happening\n * while waiting for the mutex.\n * @param {function():!Promise} operation\n * @param {string} mutexIdentifier\n * @return {!Promise}\n */\n const mutexWrapOperation = async (operation, mutexIdentifier) => {\n try {\n await this.mutex_.acquire(mutexIdentifier);\n await detectInterruption();\n await operation();\n await detectInterruption();\n if (preloadManager && this.config_) {\n preloadManager.reconfigure(this.config_);\n }\n } finally {\n this.mutex_.release();\n }\n };\n\n try {\n if (startTime == null && preloadManager) {\n startTime = preloadManager.getStartTime();\n }\n this.startTime_ = startTime;\n this.fullyLoaded_ = false;\n\n // We dispatch the loading event when someone calls |load| because we want\n // to surface the user intent.\n this.dispatchEvent(shaka.Player.makeEvent_(\n shaka.util.FakeEvent.EventName.Loading));\n\n if (preloadManager) {\n mimeType = preloadManager.getMimeType();\n } else if (!mimeType) {\n await mutexWrapOperation(async () => {\n mimeType = await this.guessMimeType_(assetUri);\n }, 'guessMimeType_');\n }\n\n const wasPreloaded = !!preloadManager;\n if (!preloadManager) {\n // For simplicity, if an asset is NOT preloaded, start an internal\n // \"preload\" here without prefetch.\n // That way, both a preload and normal load can follow the same code\n // paths.\n // NOTE: await preloadInner_ can be outside the mutex because it should\n // not mutate \"this\".\n preloadManager = await this.preloadInner_(\n assetUri, startTime, mimeType, /* standardLoad= */ true);\n if (preloadManager) {\n preloadManager.markIsLoad();\n preloadManager.setEventHandoffTarget(this);\n this.stats_ = preloadManager.getStats();\n preloadManager.start();\n // Silence \"uncaught error\" warnings from this. Unless we are\n // interrupted, we will check the result of this process and respond\n // appropriately. If we are interrupted, we can ignore any error\n // there.\n preloadManager.waitForFinish().catch(() => {});\n } else {\n this.stats_ = new shaka.util.Stats();\n }\n } else {\n // Hook up events, so any events emitted by the preloadManager will\n // instead be emitted by the player.\n preloadManager.setEventHandoffTarget(this);\n this.stats_ = preloadManager.getStats();\n }\n // Now, if there is no preload manager, that means that this is a src=\n // asset.\n const shouldUseSrcEquals = !preloadManager;\n\n const startTimeOfLoad = Date.now() / 1000;\n\n // Stats are for a single playback/load session. Stats must be initialized\n // before we allow calls to |updateStateHistory|.\n this.stats_ =\n preloadManager ? preloadManager.getStats() : new shaka.util.Stats();\n\n this.assetUri_ = assetUri;\n this.mimeType_ = mimeType || null;\n\n if (shouldUseSrcEquals) {\n await mutexWrapOperation(async () => {\n goog.asserts.assert(mimeType, 'We should know the mimeType by now!');\n await this.initializeSrcEqualsDrmInner_(mimeType);\n }, 'initializeSrcEqualsDrmInner_');\n await mutexWrapOperation(async () => {\n goog.asserts.assert(mimeType, 'We should know the mimeType by now!');\n await this.srcEqualsInner_(startTimeOfLoad, mimeType);\n }, 'srcEqualsInner_');\n } else {\n // Wait for the manifest to be parsed.\n await mutexWrapOperation(async () => {\n await preloadManager.waitForManifest();\n // Retrieve the manifest. This is specifically put before the media\n // source engine is initialized, for the benefit of event handlers.\n this.parserFactory_ = preloadManager.getParserFactory();\n this.parser_ = preloadManager.receiveParser();\n this.manifest_ = preloadManager.getManifest();\n }, 'waitForFinish');\n\n if (!this.mediaSourceEngine_) {\n await mutexWrapOperation(async () => {\n await this.initializeMediaSourceEngineInner_();\n }, 'initializeMediaSourceEngineInner_');\n }\n\n // Wait for the preload manager to do all of the loading it can do.\n await mutexWrapOperation(async () => {\n await preloadManager.waitForFinish();\n }, 'waitForFinish');\n\n // Get manifest and associated values from preloader.\n this.config_ = preloadManager.getConfiguration();\n this.manifestFilterer_ = preloadManager.getManifestFilterer();\n if (this.parser_ && this.parser_.setMediaElement && this.video_) {\n this.parser_.setMediaElement(this.video_);\n }\n this.regionTimeline_ = preloadManager.receiveRegionTimeline();\n this.qualityObserver_ = preloadManager.getQualityObserver();\n const currentAdaptationSetCriteria =\n preloadManager.getCurrentAdaptationSetCriteria();\n if (currentAdaptationSetCriteria) {\n this.currentAdaptationSetCriteria_ = currentAdaptationSetCriteria;\n }\n if (wasPreloaded && this.video_ && this.video_.nodeName === 'AUDIO') {\n // Filter the variants to be audio-only after the fact.\n // As, when preloading, we don't know if we are going to be attached\n // to a video or audio element when we load, we have to do the auto\n // audio-only filtering here, post-facto.\n this.makeManifestAudioOnly_();\n // And continue to do so in the future.\n this.configure('manifest.disableVideo', true);\n }\n\n // Get drm engine from preloader, then finalize it.\n this.drmEngine_ = preloadManager.receiveDrmEngine();\n await mutexWrapOperation(async () => {\n await this.drmEngine_.attach(this.video_);\n }, 'drmEngine_.attach');\n\n // Also get the ABR manager, which has special logic related to being\n // received.\n const abrManagerFactory = preloadManager.getAbrManagerFactory();\n if (abrManagerFactory) {\n if (!this.abrManagerFactory_ ||\n this.abrManagerFactory_ != abrManagerFactory) {\n this.abrManager_ = preloadManager.receiveAbrManager();\n this.abrManagerFactory_ = preloadManager.getAbrManagerFactory();\n if (typeof this.abrManager_.setMediaElement != 'function') {\n shaka.Deprecate.deprecateFeature(5,\n 'AbrManager w/o setMediaElement',\n 'Please use an AbrManager with setMediaElement function.');\n this.abrManager_.setMediaElement = () => {};\n }\n if (typeof this.abrManager_.setCmsdManager != 'function') {\n shaka.Deprecate.deprecateFeature(5,\n 'AbrManager w/o setCmsdManager',\n 'Please use an AbrManager with setCmsdManager function.');\n this.abrManager_.setCmsdManager = () => {};\n }\n if (typeof this.abrManager_.trySuggestStreams != 'function') {\n shaka.Deprecate.deprecateFeature(5,\n 'AbrManager w/o trySuggestStreams',\n 'Please use an AbrManager with trySuggestStreams function.');\n this.abrManager_.trySuggestStreams = () => {};\n }\n }\n }\n\n // Load the asset.\n const segmentPrefetchById =\n preloadManager.receiveSegmentPrefetchesById();\n const prefetchedVariant = preloadManager.getPrefetchedVariant();\n await mutexWrapOperation(async () => {\n await this.loadInner_(\n startTimeOfLoad, prefetchedVariant, segmentPrefetchById);\n }, 'loadInner_');\n preloadManager.stopQueuingLatePhaseQueuedOperations();\n\n if (this.mimeType_ && shaka.util.Platform.isSafari() &&\n shaka.util.MimeUtils.isHlsType(this.mimeType_)) {\n this.mediaSourceEngine_.addSecondarySource(\n this.assetUri_, this.mimeType_);\n }\n }\n this.dispatchEvent(shaka.Player.makeEvent_(\n shaka.util.FakeEvent.EventName.Loaded));\n } catch (error) {\n if (error && error.code != shaka.util.Error.Code.LOAD_INTERRUPTED) {\n await this.unload(/* initializeMediaSource= */ false);\n }\n throw error;\n } finally {\n if (preloadManager) {\n // This will cause any resources that were generated but not used to be\n // properly destroyed or released.\n await preloadManager.destroy();\n }\n this.preloadNextUrl_ = null;\n }\n }\n\n /**\n * Modifies the current manifest so that it is audio-only.\n * @private\n */\n makeManifestAudioOnly_() {\n for (const variant of this.manifest_.variants) {\n if (variant.video) {\n variant.video.closeSegmentIndex();\n variant.video = null;\n }\n if (variant.audio && variant.audio.bandwidth) {\n variant.bandwidth = variant.audio.bandwidth;\n } else {\n variant.bandwidth = 0;\n }\n }\n this.manifest_.variants = this.manifest_.variants.filter((v) => {\n return v.audio;\n });\n }\n\n /**\n * Unloads the currently playing stream, if any, and returns a PreloadManager\n * that contains the loaded manifest of that asset, if any.\n * Allows for the asset to be re-loaded by this player faster, in the future.\n * When in src= mode, this unloads but does not make a PreloadManager.\n *\n * @param {boolean=} initializeMediaSource\n * @param {boolean=} keepAdManager\n * @return {!Promise.}\n * @export\n */\n async unloadAndSavePreload(\n initializeMediaSource = true, keepAdManager = false) {\n const preloadManager = await this.savePreload_();\n await this.unload(initializeMediaSource, keepAdManager);\n return preloadManager;\n }\n\n /**\n * Detach the player from the current media element, if any, and returns a\n * PreloadManager that contains the loaded manifest of that asset, if any.\n * Allows for the asset to be re-loaded by this player faster, in the future.\n * When in src= mode, this detach but does not make a PreloadManager.\n * Leaves the player in a state where it cannot play media, until it has been\n * attached to something else.\n *\n * @param {boolean=} keepAdManager\n * @param {boolean=} saveLivePosition\n * @return {!Promise.}\n * @export\n */\n async detachAndSavePreload(keepAdManager = false, saveLivePosition = false) {\n const preloadManager = await this.savePreload_(saveLivePosition);\n await this.detach(keepAdManager);\n return preloadManager;\n }\n\n /**\n * @param {boolean=} saveLivePosition\n * @return {!Promise.}\n * @private\n */\n async savePreload_(saveLivePosition = false) {\n let preloadManager = null;\n if (this.manifest_ && this.parser_ && this.parserFactory_ &&\n this.assetUri_) {\n let startTime = this.video_.currentTime;\n if (this.isLive() && !saveLivePosition) {\n startTime = null;\n }\n // We have enough information to make a PreloadManager!\n preloadManager = await this.makePreloadManager_(\n this.assetUri_,\n startTime,\n this.mimeType_,\n /* allowPrefetch= */ true,\n /* disableVideo= */ false,\n /* allowMakeAbrManager= */ false);\n this.createdPreloadManagers_.push(preloadManager);\n if (this.parser_ && this.parser_.setMediaElement) {\n this.parser_.setMediaElement(/* mediaElement= */ null);\n }\n preloadManager.attachManifest(\n this.manifest_, this.parser_, this.parserFactory_);\n preloadManager.attachAbrManager(\n this.abrManager_, this.abrManagerFactory_);\n preloadManager.attachAdaptationSetCriteria(\n this.currentAdaptationSetCriteria_);\n preloadManager.start();\n // Null the manifest and manifestParser, so that they won't be shut down\n // during unload and will continue to live inside the preloadManager.\n this.manifest_ = null;\n this.parser_ = null;\n this.parserFactory_ = null;\n // Null the abrManager and abrManagerFactory, so that they won't be shut\n // down during unload and will continue to live inside the preloadManager.\n this.abrManager_ = null;\n this.abrManagerFactory_ = null;\n }\n return preloadManager;\n }\n\n /**\n * Starts to preload a given asset, and returns a PreloadManager object that\n * represents that preloading process.\n * The PreloadManager will load the manifest for that asset, as well as the\n * initialization segment. It will not preload anything more than that;\n * this feature is intended for reducing start-time latency, not for fully\n * downloading assets before playing them (for that, use\n * |shaka.offline.Storage|).\n * You can pass that PreloadManager object in to the |load| method on this\n * Player instance to finish loading that particular asset, or you can call\n * the |destroy| method on the manager if the preload is no longer necessary.\n * If this returns null rather than a PreloadManager, that indicates that the\n * asset must be played with src=, which cannot be preloaded.\n *\n * @param {string} assetUri\n * @param {?number=} startTime\n * When startTime is null or\n * undefined, playback will start at the default start time (0\n * for VOD and liveEdge for LIVE).\n * @param {?string=} mimeType\n * @return {!Promise.}\n * @export\n */\n async preload(assetUri, startTime = null, mimeType) {\n const preloadManager = await this.preloadInner_(\n assetUri, startTime, mimeType);\n if (!preloadManager) {\n this.onError_(new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.PLAYER,\n shaka.util.Error.Code.SRC_EQUALS_PRELOAD_NOT_SUPPORTED));\n } else {\n preloadManager.start();\n }\n return preloadManager;\n }\n\n /**\n * Calls |destroy| on each PreloadManager object this player has created.\n * @export\n */\n async destroyAllPreloads() {\n const preloadManagerDestroys = [];\n for (const preloadManager of this.createdPreloadManagers_) {\n if (!preloadManager.isDestroyed()) {\n preloadManagerDestroys.push(preloadManager.destroy());\n }\n }\n this.createdPreloadManagers_ = [];\n await Promise.all(preloadManagerDestroys);\n }\n\n /**\n * @param {string} assetUri\n * @param {?number} startTime\n * @param {?string=} mimeType\n * @param {boolean=} standardLoad\n * @return {!Promise.}\n * @private\n */\n async preloadInner_(assetUri, startTime, mimeType, standardLoad = false) {\n goog.asserts.assert(this.networkingEngine_, 'Should have a net engine!');\n goog.asserts.assert(this.config_, 'Config must not be null!');\n if (!mimeType) {\n mimeType = await this.guessMimeType_(assetUri);\n }\n const shouldUseSrcEquals = this.shouldUseSrcEquals_(assetUri, mimeType);\n if (shouldUseSrcEquals) {\n // We cannot preload src= content.\n return null;\n }\n let disableVideo = false;\n let allowMakeAbrManager = true;\n if (standardLoad) {\n if (this.abrManager_ &&\n this.abrManagerFactory_ == this.config_.abrFactory) {\n // If there's already an abr manager, don't make a new abr manager at\n // all.\n // In standardLoad mode, the abr manager isn't used for anything anyway,\n // so it should only be created to create an abr manager for the player\n // to use... which is unnecessary if we already have one of the right\n // type.\n allowMakeAbrManager = false;\n }\n if (this.video_ && this.video_.nodeName === 'AUDIO') {\n disableVideo = true;\n }\n }\n let preloadManagerPromise = this.makePreloadManager_(\n assetUri, startTime, mimeType || null,\n /* allowPrefetch= */ !standardLoad, disableVideo, allowMakeAbrManager);\n if (!standardLoad) {\n // We only need to track the PreloadManager if it is not part of a\n // standard load. If it is, the load() method will handle destroying it.\n // Adding a standard load PreloadManager to the createdPreloadManagers_\n // array runs the risk that the user will call destroyAllPreloads and\n // destroy that PreloadManager mid-load.\n preloadManagerPromise = preloadManagerPromise.then((preloadManager) => {\n this.createdPreloadManagers_.push(preloadManager);\n return preloadManager;\n });\n } else {\n preloadManagerPromise = preloadManagerPromise.then((preloadManager) => {\n preloadManager.markIsLoad();\n return preloadManager;\n });\n }\n return preloadManagerPromise;\n }\n\n /**\n * @param {string} assetUri\n * @param {?number} startTime\n * @param {?string} mimeType\n * @param {boolean=} allowPrefetch\n * @param {boolean=} disableVideo\n * @param {boolean=} allowMakeAbrManager\n * @return {!Promise.}\n * @private\n */\n async makePreloadManager_(assetUri, startTime, mimeType,\n allowPrefetch = true, disableVideo = false, allowMakeAbrManager = true) {\n goog.asserts.assert(this.networkingEngine_, 'Must have net engine');\n /** @type {?shaka.media.PreloadManager} */\n let preloadManager = null;\n\n const config = shaka.util.ObjectUtils.cloneObject(this.config_);\n if (disableVideo) {\n config.manifest.disableVideo = true;\n }\n\n const getPreloadManager = () => {\n goog.asserts.assert(preloadManager, 'Must have preload manager');\n if (preloadManager.hasBeenAttached() && preloadManager.isDestroyed()) {\n return null;\n }\n return preloadManager;\n };\n\n const getConfig = () => {\n if (getPreloadManager()) {\n return getPreloadManager().getConfiguration();\n } else {\n return this.config_;\n }\n };\n\n const setConfig = (name, value) => {\n if (getPreloadManager()) {\n preloadManager.configure(name, value);\n } else {\n this.configure(name, value);\n }\n };\n\n // Avoid having to detect the resolution again if it has already been\n // detected or set\n if (this.maxHwRes_.width == Infinity &&\n this.maxHwRes_.height == Infinity &&\n !this.config_.ignoreHardwareResolution) {\n const maxResolution =\n await shaka.util.Platform.detectMaxHardwareResolution();\n this.maxHwRes_.width = maxResolution.width;\n this.maxHwRes_.height = maxResolution.height;\n }\n const manifestFilterer = new shaka.media.ManifestFilterer(\n config, this.maxHwRes_, null);\n const manifestPlayerInterface = {\n networkingEngine: this.networkingEngine_,\n filter: async (manifest) => {\n const tracksChanged = await manifestFilterer.filterManifest(manifest);\n if (tracksChanged) {\n // Delay the 'trackschanged' event so StreamingEngine has time to\n // absorb the changes before the user tries to query it.\n const event = shaka.Player.makeEvent_(\n shaka.util.FakeEvent.EventName.TracksChanged);\n await Promise.resolve();\n preloadManager.dispatchEvent(event);\n }\n },\n makeTextStreamsForClosedCaptions: (manifest) => {\n return this.makeTextStreamsForClosedCaptions_(manifest);\n },\n\n // Called when the parser finds a timeline region. This can be called\n // before we start playback or during playback (live/in-progress\n // manifest).\n onTimelineRegionAdded: (region) => {\n preloadManager.getRegionTimeline().addRegion(region);\n },\n\n onEvent: (event) => preloadManager.dispatchEvent(event),\n onError: (error) => preloadManager.onError(error),\n isLowLatencyMode: () => getConfig().streaming.lowLatencyMode,\n isAutoLowLatencyMode: () => getConfig().streaming.autoLowLatencyMode,\n enableLowLatencyMode: () => {\n setConfig('streaming.lowLatencyMode', true);\n },\n updateDuration: () => {\n if (this.streamingEngine_ && preloadManager.hasBeenAttached()) {\n this.streamingEngine_.updateDuration();\n }\n },\n newDrmInfo: (stream) => {\n // We may need to create new sessions for any new init data.\n const drmEngine = preloadManager.getDrmEngine();\n const currentDrmInfo = drmEngine ? drmEngine.getDrmInfo() : null;\n // DrmEngine.newInitData() requires mediaKeys to be available.\n if (currentDrmInfo && drmEngine.getMediaKeys()) {\n manifestFilterer.processDrmInfos(currentDrmInfo.keySystem, stream);\n }\n },\n onManifestUpdated: () => {\n const eventName = shaka.util.FakeEvent.EventName.ManifestUpdated;\n const data = (new Map()).set('isLive', this.isLive());\n preloadManager.dispatchEvent(shaka.Player.makeEvent_(eventName, data));\n\n preloadManager.addQueuedOperation(false, () => {\n if (this.adManager_) {\n this.adManager_.onManifestUpdated(this.isLive());\n }\n });\n },\n getBandwidthEstimate: () => this.abrManager_.getBandwidthEstimate(),\n onMetadata: (type, startTime, endTime, values) => {\n let metadataType = type;\n if (type == 'com.apple.hls.interstitial') {\n metadataType = 'com.apple.quicktime.HLS';\n /** @type {shaka.extern.HLSInterstitial} */\n const interstitial = {\n startTime,\n endTime,\n values,\n };\n if (this.adManager_) {\n goog.asserts.assert(this.video_, 'Must have video');\n this.adManager_.onHLSInterstitialMetadata(\n this, this.video_, interstitial);\n }\n }\n for (const payload of values) {\n if (payload.name == 'ID') {\n continue;\n }\n preloadManager.addQueuedOperation(false, () => {\n this.dispatchMetadataEvent_(\n startTime, endTime, metadataType, payload);\n });\n }\n },\n disableStream: (stream) => this.disableStream(\n stream, this.config_.streaming.maxDisabledTime),\n addFont: (name, url) => this.addFont(name, url),\n };\n const regionTimeline =\n new shaka.media.RegionTimeline(() => this.seekRange());\n regionTimeline.addEventListener('regionadd', (event) => {\n /** @type {shaka.extern.TimelineRegionInfo} */\n const region = event['region'];\n this.onRegionEvent_(\n shaka.util.FakeEvent.EventName.TimelineRegionAdded, region,\n preloadManager);\n\n preloadManager.addQueuedOperation(false, () => {\n if (this.adManager_) {\n this.adManager_.onDashTimedMetadata(region);\n goog.asserts.assert(this.video_, 'Must have video');\n this.adManager_.onDASHInterstitialMetadata(\n this, this.video_, region);\n }\n });\n });\n let qualityObserver = null;\n if (config.streaming.observeQualityChanges) {\n qualityObserver = new shaka.media.QualityObserver(\n () => this.getBufferedInfo());\n\n qualityObserver.addEventListener('qualitychange', (event) => {\n /** @type {shaka.extern.MediaQualityInfo} */\n const mediaQualityInfo = event['quality'];\n /** @type {number} */\n const position = event['position'];\n this.onMediaQualityChange_(mediaQualityInfo, position);\n });\n\n qualityObserver.addEventListener('audiotrackchange', (event) => {\n /** @type {shaka.extern.MediaQualityInfo} */\n const mediaQualityInfo = event['quality'];\n /** @type {number} */\n const position = event['position'];\n this.onMediaQualityChange_(mediaQualityInfo, position,\n /* audioTrackChanged= */ true);\n });\n }\n let firstEvent = true;\n const drmPlayerInterface = {\n netEngine: this.networkingEngine_,\n onError: (e) => preloadManager.onError(e),\n onKeyStatus: (map) => {\n preloadManager.addQueuedOperation(true, () => {\n this.onKeyStatus_(map);\n });\n },\n onExpirationUpdated: (id, expiration) => {\n const event = shaka.Player.makeEvent_(\n shaka.util.FakeEvent.EventName.ExpirationUpdated);\n preloadManager.dispatchEvent(event);\n const parser = preloadManager.getParser();\n if (parser && parser.onExpirationUpdated) {\n parser.onExpirationUpdated(id, expiration);\n }\n },\n onEvent: (e) => {\n preloadManager.dispatchEvent(e);\n if (e.type == shaka.util.FakeEvent.EventName.DrmSessionUpdate &&\n firstEvent) {\n firstEvent = false;\n const now = Date.now() / 1000;\n const delta = now - preloadManager.getStartTimeOfDRM();\n const stats = this.stats_ || preloadManager.getStats();\n stats.setDrmTime(delta);\n // LCEVC data by itself is not encrypted in DRM protected streams\n // and can therefore be accessed and decoded as normal. However,\n // the LCEVC decoder needs access to the VideoElement output in\n // order to apply the enhancement. In DRM contexts where the\n // browser CDM restricts access from our decoder, the enhancement\n // cannot be applied and therefore the LCEVC output canvas is\n // hidden accordingly.\n if (this.lcevcDec_) {\n this.lcevcDec_.hideCanvas();\n }\n }\n },\n };\n\n // Sadly, as the network engine creation code must be replaceable by tests,\n // it cannot be made and use the utilities defined in this function.\n const networkingEngine = this.createNetworkingEngine(getPreloadManager);\n this.networkingEngine_.copyFiltersInto(networkingEngine);\n\n /** @return {!shaka.media.DrmEngine} */\n const createDrmEngine = () => {\n return this.createDrmEngine(drmPlayerInterface);\n };\n /** @type {!shaka.media.PreloadManager.PlayerInterface} */\n const playerInterface = {\n config,\n manifestPlayerInterface,\n regionTimeline,\n qualityObserver,\n createDrmEngine,\n manifestFilterer,\n networkingEngine,\n allowPrefetch,\n allowMakeAbrManager,\n };\n preloadManager = new shaka.media.PreloadManager(\n assetUri, mimeType, startTime, playerInterface);\n return preloadManager;\n }\n\n /**\n * Determines the mimeType of the given asset, if we are not told that inside\n * the loading process.\n *\n * @param {string} assetUri\n * @return {!Promise.} mimeType\n * @private\n */\n async guessMimeType_(assetUri) {\n // If no MIME type is provided, and we can't base it on extension, make a\n // HEAD request to determine it.\n goog.asserts.assert(this.networkingEngine_, 'Should have a net engine!');\n const retryParams = this.config_.manifest.retryParameters;\n let mimeType = await shaka.net.NetworkingUtils.getMimeType(\n assetUri, this.networkingEngine_, retryParams);\n if (mimeType == 'application/x-mpegurl' && shaka.util.Platform.isApple()) {\n mimeType = 'application/vnd.apple.mpegurl';\n }\n return mimeType;\n }\n\n /**\n * Determines if we should use src equals, based on the the mimeType (if\n * known), the URI, and platform information.\n *\n * @param {string} assetUri\n * @param {?string=} mimeType\n * @return {boolean}\n * |true| if the content should be loaded with src=, |false| if the content\n * should be loaded with MediaSource.\n * @private\n */\n shouldUseSrcEquals_(assetUri, mimeType) {\n const Platform = shaka.util.Platform;\n const MimeUtils = shaka.util.MimeUtils;\n\n // If we are using a platform that does not support media source, we will\n // fall back to src= to handle all playback.\n if (!Platform.supportsMediaSource()) {\n return true;\n }\n\n if (mimeType) {\n // If we have a MIME type, check if the browser can play it natively.\n // This will cover both single files and native HLS.\n const mediaElement = this.video_ || Platform.anyMediaElement();\n const canPlayNatively = mediaElement.canPlayType(mimeType) != '';\n\n // If we can't play natively, then src= isn't an option.\n if (!canPlayNatively) {\n return false;\n }\n\n const canPlayMediaSource =\n shaka.media.ManifestParser.isSupported(mimeType);\n\n // If MediaSource isn't an option, the native option is our only chance.\n if (!canPlayMediaSource) {\n return true;\n }\n\n // If we land here, both are feasible.\n goog.asserts.assert(canPlayNatively && canPlayMediaSource,\n 'Both native and MSE playback should be possible!');\n\n // We would prefer MediaSource in some cases, and src= in others. For\n // example, Android has native HLS, but we'd prefer our own MediaSource\n // version there.\n if (MimeUtils.isHlsType(mimeType)) {\n // Native FairPlay HLS can be preferred on Apple platfforms.\n if (Platform.isApple() &&\n (this.config_.drm.servers['com.apple.fps'] ||\n this.config_.drm.servers['com.apple.fps.1_0'])) {\n return this.config_.streaming.useNativeHlsForFairPlay;\n }\n\n // Native HLS can be preferred on any platform via this flag:\n return this.config_.streaming.preferNativeHls;\n }\n\n // In all other cases, we prefer MediaSource.\n return false;\n }\n\n // Unless there are good reasons to use src= (single-file playback or native\n // HLS), we prefer MediaSource. So the final return value for choosing src=\n // is false.\n return false;\n }\n\n /**\n * @private\n */\n createTextDisplayer_() {\n // When changing text visibility we need to update both the text displayer\n // and streaming engine because we don't always stream text. To ensure\n // that the text displayer and streaming engine are always in sync, wait\n // until they are both initialized before setting the initial value.\n const textDisplayerFactory = this.config_.textDisplayFactory;\n if (textDisplayerFactory === this.lastTextFactory_) {\n return;\n }\n this.textDisplayer_ = textDisplayerFactory();\n if (this.textDisplayer_.configure) {\n this.textDisplayer_.configure(this.config_.textDisplayer);\n } else {\n shaka.Deprecate.deprecateFeature(5,\n 'Text displayer w/ configure',\n 'Text displayer should have a \"configure\" method!');\n }\n this.lastTextFactory_ = textDisplayerFactory;\n this.textDisplayer_.setTextVisibility(this.isTextVisible_);\n }\n\n /**\n * Initializes the media source engine.\n *\n * @return {!Promise}\n * @private\n */\n async initializeMediaSourceEngineInner_() {\n goog.asserts.assert(\n shaka.util.Platform.supportsMediaSource(),\n 'We should not be initializing media source on a platform that ' +\n 'does not support media source.');\n goog.asserts.assert(\n this.video_,\n 'We should have a media element when initializing media source.');\n goog.asserts.assert(\n this.mediaSourceEngine_ == null,\n 'We should not have a media source engine yet.');\n\n this.makeStateChangeEvent_('media-source');\n\n // Remove children if we had any, i.e. from previously used src= mode.\n this.video_.removeAttribute('src');\n shaka.util.Dom.removeAllChildren(this.video_);\n\n this.createTextDisplayer_();\n goog.asserts.assert(this.textDisplayer_,\n 'Text displayer should be created already');\n const mediaSourceEngine = this.createMediaSourceEngine(\n this.video_,\n this.textDisplayer_,\n {\n getKeySystem: () => this.keySystem(),\n onMetadata: (metadata, offset, endTime) => {\n this.processTimedMetadataMediaSrc_(metadata, offset, endTime);\n },\n onEvent: (event) => this.dispatchEvent(event),\n onManifestUpdate: () => this.onManifestUpdate_(),\n },\n this.lcevcDec_);\n mediaSourceEngine.configure(this.config_.mediaSource);\n const {segmentRelativeVttTiming} = this.config_.manifest;\n mediaSourceEngine.setSegmentRelativeVttTiming(segmentRelativeVttTiming);\n\n // Wait for media source engine to finish opening. This promise should\n // NEVER be rejected as per the media source engine implementation.\n await mediaSourceEngine.open();\n\n // Wait until it is ready to actually store the reference.\n this.mediaSourceEngine_ = mediaSourceEngine;\n }\n\n /**\n * Adds the basic media listeners\n *\n * @param {HTMLMediaElement} mediaElement\n * @param {number} startTimeOfLoad\n * @private\n */\n addBasicMediaListeners_(mediaElement, startTimeOfLoad) {\n const updateStateHistory = () => this.updateStateHistory_();\n const onRateChange = () => this.onRateChange_();\n this.loadEventManager_.listen(mediaElement, 'playing', updateStateHistory);\n this.loadEventManager_.listen(mediaElement, 'pause', updateStateHistory);\n this.loadEventManager_.listen(mediaElement, 'ended', updateStateHistory);\n this.loadEventManager_.listen(mediaElement, 'ratechange', onRateChange);\n if (mediaElement.remote) {\n this.loadEventManager_.listen(mediaElement.remote, 'connect',\n () => this.onTracksChanged_());\n this.loadEventManager_.listen(mediaElement.remote, 'connecting',\n () => this.onTracksChanged_());\n this.loadEventManager_.listen(mediaElement.remote, 'disconnect',\n async () => {\n if (this.streamingEngine_ &&\n mediaElement.remote.state == 'disconnected') {\n await this.streamingEngine_.resetMediaSource();\n }\n this.onTracksChanged_();\n });\n }\n if (mediaElement.audioTracks) {\n this.loadEventManager_.listen(mediaElement.audioTracks, 'addtrack',\n () => this.onTracksChanged_());\n this.loadEventManager_.listen(mediaElement.audioTracks, 'removetrack',\n () => this.onTracksChanged_());\n this.loadEventManager_.listen(mediaElement.audioTracks, 'change',\n () => this.onTracksChanged_());\n }\n\n if (mediaElement.textTracks) {\n this.loadEventManager_.listen(\n mediaElement.textTracks, 'addtrack', (e) => {\n const trackEvent = /** @type {!TrackEvent} */(e);\n if (trackEvent.track) {\n const track = trackEvent.track;\n goog.asserts.assert(\n track instanceof TextTrack, 'Wrong track type!');\n\n switch (track.kind) {\n case 'metadata':\n this.processTimedMetadataSrcEqls_(track);\n break;\n\n case 'chapters':\n this.activateChaptersTrack_(track);\n break;\n\n default:\n this.onTracksChanged_();\n break;\n }\n }\n });\n this.loadEventManager_.listen(mediaElement.textTracks, 'removetrack',\n () => this.onTracksChanged_());\n this.loadEventManager_.listen(mediaElement.textTracks, 'change',\n () => this.onTracksChanged_());\n }\n\n // Wait for the 'loadedmetadata' event to measure load() latency, but only\n // if preload is set in a way that would result in this event firing\n // automatically.\n // See https://github.com/shaka-project/shaka-player/issues/2483\n if (mediaElement.preload != 'none') {\n this.loadEventManager_.listenOnce(\n mediaElement, 'loadedmetadata', () => {\n const now = Date.now() / 1000;\n const delta = now - startTimeOfLoad;\n this.stats_.setLoadLatency(delta);\n });\n }\n }\n\n /**\n * Starts loading the content described by the parsed manifest.\n *\n * @param {number} startTimeOfLoad\n * @param {?shaka.extern.Variant} prefetchedVariant\n * @param {!Map.} segmentPrefetchById\n * @return {!Promise}\n * @private\n */\n async loadInner_(startTimeOfLoad, prefetchedVariant, segmentPrefetchById) {\n goog.asserts.assert(\n this.video_, 'We should have a media element by now.');\n goog.asserts.assert(\n this.manifest_, 'The manifest should already be parsed.');\n goog.asserts.assert(\n this.assetUri_, 'We should have an asset uri by now.');\n goog.asserts.assert(\n this.abrManager_, 'We should have an abr manager by now.');\n\n this.makeStateChangeEvent_('load');\n\n const mediaElement = this.video_;\n this.playRateController_ = new shaka.media.PlayRateController({\n getRate: () => mediaElement.playbackRate,\n getDefaultRate: () => mediaElement.defaultPlaybackRate,\n setRate: (rate) => { mediaElement.playbackRate = rate; },\n movePlayhead: (delta) => { mediaElement.currentTime += delta; },\n });\n\n // Add all media element listeners.\n this.addBasicMediaListeners_(mediaElement, startTimeOfLoad);\n\n // Check the status of the LCEVC Dec Object. Reset, create, or close\n // depending on the config.\n this.setupLcevc_(this.config_);\n\n this.currentTextLanguage_ = this.config_.preferredTextLanguage;\n this.currentTextRole_ = this.config_.preferredTextRole;\n this.currentTextForced_ = this.config_.preferForcedSubs;\n\n shaka.Player.applyPlayRange_(this.manifest_.presentationTimeline,\n this.config_.playRangeStart,\n this.config_.playRangeEnd);\n\n this.abrManager_.init((variant, clearBuffer, safeMargin) => {\n return this.switch_(variant, clearBuffer, safeMargin);\n });\n this.abrManager_.setMediaElement(mediaElement);\n this.abrManager_.setCmsdManager(this.cmsdManager_);\n\n this.streamingEngine_ = this.createStreamingEngine();\n this.streamingEngine_.configure(this.config_.streaming);\n\n // Set the load mode to \"loaded with media source\" as late as possible so\n // that public methods won't try to access internal components until\n // they're all initialized. We MUST switch to loaded before calling\n // \"streaming\" so that they can access internal information.\n this.loadMode_ = shaka.Player.LoadMode.MEDIA_SOURCE;\n\n // The event must be fired after we filter by restrictions but before the\n // active stream is picked to allow those listening for the \"streaming\"\n // event to make changes before streaming starts.\n this.dispatchEvent(shaka.Player.makeEvent_(\n shaka.util.FakeEvent.EventName.Streaming));\n\n // Pick the initial streams to play.\n // Unless the user has already picked a variant, anyway, by calling\n // selectVariantTrack before this loading stage.\n let initialVariant = prefetchedVariant;\n let toLazyLoad;\n let activeVariant;\n do {\n activeVariant = this.streamingEngine_.getCurrentVariant();\n if (!activeVariant && !initialVariant) {\n initialVariant = this.chooseVariant_();\n goog.asserts.assert(initialVariant, 'Must choose an initial variant!');\n }\n\n // Lazy-load the stream, so we will have enough info to make the playhead.\n const createSegmentIndexPromises = [];\n toLazyLoad = activeVariant || initialVariant;\n for (const stream of [toLazyLoad.video, toLazyLoad.audio]) {\n if (stream && !stream.segmentIndex) {\n createSegmentIndexPromises.push(stream.createSegmentIndex());\n }\n }\n if (createSegmentIndexPromises.length > 0) {\n // eslint-disable-next-line no-await-in-loop\n await Promise.all(createSegmentIndexPromises);\n }\n } while (!toLazyLoad || toLazyLoad.disabledUntilTime != 0);\n\n if (this.parser_ && this.parser_.onInitialVariantChosen) {\n this.parser_.onInitialVariantChosen(toLazyLoad);\n }\n\n if (this.manifest_.isLowLatency && !this.config_.streaming.lowLatencyMode) {\n shaka.log.alwaysWarn('Low-latency live stream detected, but ' +\n 'low-latency streaming mode is not enabled in Shaka Player. ' +\n 'Set streaming.lowLatencyMode configuration to true, and see ' +\n 'https://bit.ly/3clctcj for details.');\n }\n\n if (this.cmcdManager_) {\n this.cmcdManager_.setLowLatency(\n this.manifest_.isLowLatency && this.config_.streaming.lowLatencyMode);\n }\n\n shaka.Player.applyPlayRange_(this.manifest_.presentationTimeline,\n this.config_.playRangeStart,\n this.config_.playRangeEnd);\n\n this.streamingEngine_.applyPlayRange(\n this.config_.playRangeStart, this.config_.playRangeEnd);\n\n const setupPlayhead = (startTime) => {\n this.playhead_ = this.createPlayhead(startTime);\n this.playheadObservers_ =\n this.createPlayheadObserversForMSE_(startTime);\n\n // We need to start the buffer management code near the end because it\n // will set the initial buffering state and that depends on other\n // components being initialized.\n const rebufferThreshold = Math.max(\n this.manifest_.minBufferTime,\n this.config_.streaming.rebufferingGoal);\n this.startBufferManagement_(mediaElement, rebufferThreshold);\n };\n\n if (!this.config_.streaming.startAtSegmentBoundary) {\n let startTime = this.startTime_;\n if (startTime == null && this.manifest_.startTime) {\n startTime = this.manifest_.startTime;\n }\n setupPlayhead(startTime);\n }\n\n // Now we can switch to the initial variant.\n if (!activeVariant) {\n goog.asserts.assert(initialVariant,\n 'Must have choosen an initial variant!');\n\n // Now that we have initial streams, we may adjust the start time to\n // align to a segment boundary.\n if (this.config_.streaming.startAtSegmentBoundary) {\n const timeline = this.manifest_.presentationTimeline;\n let initialTime = this.startTime_ || this.video_.currentTime;\n if (this.startTime_ == null && this.manifest_.startTime) {\n initialTime = this.manifest_.startTime;\n }\n const seekRangeStart = timeline.getSeekRangeStart();\n const seekRangeEnd = timeline.getSeekRangeEnd();\n if (initialTime < seekRangeStart) {\n initialTime = seekRangeStart;\n } else if (initialTime > seekRangeEnd) {\n initialTime = seekRangeEnd;\n }\n const startTime = await this.adjustStartTime_(\n initialVariant, initialTime);\n setupPlayhead(startTime);\n }\n\n this.switchVariant_(initialVariant, /* fromAdaptation= */ true,\n /* clearBuffer= */ false, /* safeMargin= */ 0);\n }\n\n this.playhead_.ready();\n\n // Decide if text should be shown automatically.\n // similar to video/audio track, we would skip switch initial text track\n // if user already pick text track (via selectTextTrack api)\n const activeTextTrack = this.getTextTracks().find((t) => t.active);\n\n if (!activeTextTrack) {\n const initialTextStream = this.chooseTextStream_();\n\n if (initialTextStream) {\n this.addTextStreamToSwitchHistory_(\n initialTextStream, /* fromAdaptation= */ true);\n }\n\n if (initialVariant) {\n this.setInitialTextState_(initialVariant, initialTextStream);\n }\n\n // Don't initialize with a text stream unless we should be streaming\n // text.\n if (initialTextStream && this.shouldStreamText_()) {\n this.streamingEngine_.switchTextStream(initialTextStream);\n this.setTextDisplayerLanguage_();\n }\n }\n\n\n // Start streaming content. This will start the flow of content down to\n // media source.\n await this.streamingEngine_.start(segmentPrefetchById);\n\n if (this.config_.abr.enabled) {\n this.abrManager_.enable();\n this.onAbrStatusChanged_();\n }\n\n // Dispatch a 'trackschanged' event now that all initial filtering is\n // done.\n this.onTracksChanged_();\n\n // Now that we've filtered out variants that aren't compatible with the\n // active one, update abr manager with filtered variants.\n // NOTE: This may be unnecessary. We've already chosen one codec in\n // chooseCodecsAndFilterManifest_ before we started streaming. But it\n // doesn't hurt, and this will all change when we start using\n // MediaCapabilities and codec switching.\n // TODO(#1391): Re-evaluate with MediaCapabilities and codec switching.\n this.updateAbrManagerVariants_();\n\n const hasPrimary = this.manifest_.variants.some((v) => v.primary);\n if (!this.config_.preferredAudioLanguage && !hasPrimary) {\n shaka.log.warning('No preferred audio language set. ' +\n 'We have chosen an arbitrary language initially');\n }\n\n const isLive = this.isLive();\n\n if ((isLive && ((this.config_.streaming.liveSync &&\n this.config_.streaming.liveSync.enabled) ||\n this.manifest_.serviceDescription ||\n this.config_.streaming.liveSync.panicMode)) ||\n this.config_.streaming.vodDynamicPlaybackRate) {\n const onTimeUpdate = () => this.onTimeUpdate_();\n this.loadEventManager_.listen(mediaElement, 'timeupdate', onTimeUpdate);\n }\n if (!isLive) {\n const onVideoProgress = () => this.onVideoProgress_();\n this.loadEventManager_.listen(\n mediaElement, 'timeupdate', onVideoProgress);\n this.onVideoProgress_();\n if (this.manifest_.nextUrl) {\n if (this.config_.streaming.preloadNextUrlWindow > 0) {\n const onTimeUpdate = async () => {\n const timeToEnd = this.video_.duration - this.video_.currentTime;\n if (!isNaN(timeToEnd)) {\n if (timeToEnd <= this.config_.streaming.preloadNextUrlWindow) {\n this.loadEventManager_.unlisten(\n mediaElement, 'timeupdate', onTimeUpdate);\n goog.asserts.assert(this.manifest_.nextUrl,\n 'this.manifest_.nextUrl should be valid.');\n this.preloadNextUrl_ =\n await this.preload(this.manifest_.nextUrl);\n }\n }\n };\n this.loadEventManager_.listen(\n mediaElement, 'timeupdate', onTimeUpdate);\n }\n this.loadEventManager_.listen(mediaElement, 'ended', () => {\n this.load(this.preloadNextUrl_ || this.manifest_.nextUrl);\n });\n }\n }\n\n if (this.adManager_) {\n this.adManager_.onManifestUpdated(isLive);\n }\n\n this.fullyLoaded_ = true;\n }\n\n /**\n * Initializes the DRM engine for use by src equals.\n *\n * @param {string} mimeType\n * @return {!Promise}\n * @private\n */\n async initializeSrcEqualsDrmInner_(mimeType) {\n const ContentType = shaka.util.ManifestParserUtils.ContentType;\n\n goog.asserts.assert(\n this.networkingEngine_,\n '|onInitializeSrcEqualsDrm_| should never be called after |destroy|');\n goog.asserts.assert(\n this.config_,\n '|onInitializeSrcEqualsDrm_| should never be called after |destroy|');\n\n const startTime = Date.now() / 1000;\n let firstEvent = true;\n\n this.drmEngine_ = this.createDrmEngine({\n netEngine: this.networkingEngine_,\n onError: (e) => {\n this.onError_(e);\n },\n onKeyStatus: (map) => {\n // According to this.onKeyStatus_, we can't even use this information\n // in src= mode, so this is just a no-op.\n },\n onExpirationUpdated: (id, expiration) => {\n const event = shaka.Player.makeEvent_(\n shaka.util.FakeEvent.EventName.ExpirationUpdated);\n this.dispatchEvent(event);\n },\n onEvent: (e) => {\n this.dispatchEvent(e);\n if (e.type == shaka.util.FakeEvent.EventName.DrmSessionUpdate &&\n firstEvent) {\n firstEvent = false;\n const now = Date.now() / 1000;\n const delta = now - startTime;\n this.stats_.setDrmTime(delta);\n }\n },\n });\n\n this.drmEngine_.configure(this.config_.drm);\n\n // TODO: Instead of feeding DrmEngine with Variants, we should refactor\n // DrmEngine so that it takes a minimal config derived from Variants. In\n // cases like this one or in removal of stored content, the details are\n // largely unimportant. We should have a saner way to initialize\n // DrmEngine.\n // That would also insulate DrmEngine from manifest changes in the future.\n // For now, that is time-consuming and this synthetic Variant is easy, so\n // I'm putting it off. Since this is only expected to be used for native\n // HLS in Safari, this should be safe. -JCP\n /** @type {shaka.extern.Variant} */\n const variant = {\n id: 0,\n language: 'und',\n disabledUntilTime: 0,\n primary: false,\n audio: null,\n video: null,\n bandwidth: 100,\n allowedByApplication: true,\n allowedByKeySystem: true,\n decodingInfos: [],\n };\n const stream = {\n id: 0,\n originalId: null,\n groupId: null,\n createSegmentIndex: () => Promise.resolve(),\n segmentIndex: null,\n mimeType: mimeType ? shaka.util.MimeUtils.getBasicType(mimeType) : '',\n codecs: mimeType ? shaka.util.MimeUtils.getCodecs(mimeType) : '',\n encrypted: true,\n drmInfos: [], // Filled in by DrmEngine config.\n keyIds: new Set(),\n language: 'und',\n originalLanguage: null,\n label: null,\n type: ContentType.VIDEO,\n primary: false,\n trickModeVideo: null,\n emsgSchemeIdUris: null,\n roles: [],\n forced: false,\n channelsCount: null,\n audioSamplingRate: null,\n spatialAudio: false,\n closedCaptions: null,\n accessibilityPurpose: null,\n external: false,\n fastSwitching: false,\n fullMimeTypes: new Set(),\n isAudioMuxedInVideo: false,\n };\n stream.fullMimeTypes.add(shaka.util.MimeUtils.getFullType(\n stream.mimeType, stream.codecs));\n if (mimeType.startsWith('audio/')) {\n stream.type = ContentType.AUDIO;\n variant.audio = stream;\n } else {\n variant.video = stream;\n }\n\n this.drmEngine_.setSrcEquals(/* srcEquals= */ true);\n await this.drmEngine_.initForPlayback(\n [variant], /* offlineSessionIds= */ []);\n await this.drmEngine_.attach(this.video_);\n }\n\n /**\n * Passes the asset URI along to the media element, so it can be played src\n * equals style.\n *\n * @param {number} startTimeOfLoad\n * @param {string} mimeType\n * @return {!Promise}\n *\n * @private\n */\n async srcEqualsInner_(startTimeOfLoad, mimeType) {\n this.makeStateChangeEvent_('src-equals');\n\n goog.asserts.assert(\n this.video_, 'We should have a media element when loading.');\n goog.asserts.assert(\n this.assetUri_, 'We should have a valid uri when loading.');\n\n const mediaElement = this.video_;\n\n this.playhead_ = new shaka.media.SrcEqualsPlayhead(mediaElement);\n\n // This flag is used below in the language preference setup to check if\n // this load was canceled before the necessary awaits completed.\n let unloaded = false;\n this.cleanupOnUnload_.push(() => {\n unloaded = true;\n });\n\n if (this.startTime_ != null) {\n this.playhead_.setStartTime(this.startTime_);\n }\n\n this.playRateController_ = new shaka.media.PlayRateController({\n getRate: () => mediaElement.playbackRate,\n getDefaultRate: () => mediaElement.defaultPlaybackRate,\n setRate: (rate) => { mediaElement.playbackRate = rate; },\n movePlayhead: (delta) => { mediaElement.currentTime += delta; },\n });\n\n // We need to start the buffer management code near the end because it\n // will set the initial buffering state and that depends on other\n // components being initialized.\n const rebufferThreshold = this.config_.streaming.rebufferingGoal;\n this.startBufferManagement_(mediaElement, rebufferThreshold);\n\n if (mediaElement.textTracks) {\n this.createTextDisplayer_();\n const setShowingMode = () => {\n const track = this.getFilteredTextTracks_()\n .find((t) => t.mode !== 'disabled');\n if (track) {\n track.mode = 'showing';\n }\n };\n const setHiddenMode = () => {\n const track = this.getFilteredTextTracks_()\n .find((t) => t.mode !== 'disabled');\n if (track) {\n track.mode = 'hidden';\n }\n };\n this.loadEventManager_.listen(mediaElement, 'enterpictureinpicture',\n () => setShowingMode());\n this.loadEventManager_.listen(mediaElement, 'leavepictureinpicture',\n () => setHiddenMode());\n if (mediaElement.remote) {\n this.loadEventManager_.listen(mediaElement.remote, 'connect',\n () => setHiddenMode());\n this.loadEventManager_.listen(mediaElement.remote, 'connecting',\n () => setHiddenMode());\n this.loadEventManager_.listen(mediaElement.remote, 'disconnect',\n () => setHiddenMode());\n } else if ('webkitCurrentPlaybackTargetIsWireless' in mediaElement) {\n this.loadEventManager_.listen(mediaElement,\n 'webkitcurrentplaybacktargetiswirelesschanged',\n () => setHiddenMode());\n }\n const video = /** @type {HTMLVideoElement} */(mediaElement);\n if (video.webkitSupportsFullscreen) {\n this.loadEventManager_.listen(video, 'webkitpresentationmodechanged',\n () => {\n if (video.webkitPresentationMode != 'inline') {\n setShowingMode();\n } else {\n setHiddenMode();\n }\n });\n }\n }\n // Add all media element listeners.\n this.addBasicMediaListeners_(mediaElement, startTimeOfLoad);\n\n // By setting |src| we are done \"loading\" with src=. We don't need to set\n // the current time because |playhead| will do that for us.\n let playbackUri = this.cmcdManager_.appendSrcData(this.assetUri_, mimeType);\n // Apply temporal clipping using playRangeStart and playRangeEnd based\n // in https://www.w3.org/TR/media-frags/\n if (!playbackUri.includes('#t=') &&\n (this.config_.playRangeStart > 0 ||\n isFinite(this.config_.playRangeEnd))) {\n playbackUri += '#t=';\n if (this.config_.playRangeStart > 0) {\n playbackUri += this.config_.playRangeStart;\n }\n if (isFinite(this.config_.playRangeEnd)) {\n playbackUri += ',' + this.config_.playRangeEnd;\n }\n }\n\n if (this.mediaSourceEngine_ ) {\n await this.mediaSourceEngine_.destroy();\n this.mediaSourceEngine_ = null;\n }\n shaka.util.Dom.removeAllChildren(mediaElement);\n\n mediaElement.src = playbackUri;\n\n // Tizen 3 / WebOS won't load anything unless you call load() explicitly,\n // no matter the value of the preload attribute. This is harmful on some\n // other platforms by triggering unbounded loading of media data, but is\n // necessary here.\n if (shaka.util.Platform.isTizen() || shaka.util.Platform.isWebOS()) {\n mediaElement.load();\n }\n\n // In Safari using HLS won't load anything unless you call load()\n // explicitly, no matter the value of the preload attribute.\n // Note: this only happens when there are not autoplay.\n if (mediaElement.preload != 'none' && !mediaElement.autoplay &&\n shaka.util.MimeUtils.isHlsType(mimeType) &&\n shaka.util.Platform.safariVersion()) {\n mediaElement.load();\n }\n\n // Set the load mode last so that we know that all our components are\n // initialized.\n this.loadMode_ = shaka.Player.LoadMode.SRC_EQUALS;\n\n // The event doesn't mean as much for src= playback, since we don't\n // control streaming. But we should fire it in this path anyway since\n // some applications may be expecting it as a life-cycle event.\n this.dispatchEvent(shaka.Player.makeEvent_(\n shaka.util.FakeEvent.EventName.Streaming));\n\n // The \"load\" Promise is resolved when we have loaded the metadata. If we\n // wait for the full data, that won't happen on Safari until the play\n // button is hit.\n const fullyLoaded = new shaka.util.PublicPromise();\n shaka.util.MediaReadyState.waitForReadyState(mediaElement,\n HTMLMediaElement.HAVE_METADATA,\n this.loadEventManager_,\n () => {\n this.playhead_.ready();\n fullyLoaded.resolve();\n });\n\n // We can't switch to preferred languages, though, until the data is\n // loaded.\n shaka.util.MediaReadyState.waitForReadyState(mediaElement,\n HTMLMediaElement.HAVE_CURRENT_DATA,\n this.loadEventManager_,\n async () => {\n this.setupPreferredAudioOnSrc_();\n\n // Applying the text preference too soon can result in it being\n // reverted. Wait for native HLS to pick something first.\n const textTracks = this.getFilteredTextTracks_();\n if (!textTracks.find((t) => t.mode != 'disabled')) {\n await new Promise((resolve) => {\n this.loadEventManager_.listenOnce(\n mediaElement.textTracks, 'change', resolve);\n\n // We expect the event to fire because it does on Safari.\n // But in case it doesn't on some other platform or future\n // version, move on in 1 second no matter what. This keeps the\n // language settings from being completely ignored if something\n // goes wrong.\n new shaka.util.Timer(resolve).tickAfter(1);\n });\n } else if (textTracks.length > 0) {\n this.isTextVisible_ = true;\n this.textDisplayer_.setTextVisibility(true);\n }\n\n // If we have moved on to another piece of content while waiting for\n // the above event/timer, we should not change tracks here.\n if (unloaded) {\n return;\n }\n let enabledNativeTrack = false;\n for (const track of textTracks) {\n if (track.mode !== 'disabled') {\n if (!enabledNativeTrack) {\n this.enableNativeTrack_(track);\n enabledNativeTrack = true;\n } else {\n track.mode = 'disabled';\n shaka.log.alwaysWarn(\n 'Found more than one enabled text track, disabling it',\n track);\n }\n }\n }\n\n this.setupPreferredTextOnSrc_();\n });\n\n if (mediaElement.error) {\n // Already failed!\n fullyLoaded.reject(this.videoErrorToShakaError_());\n } else if (mediaElement.preload == 'none') {\n shaka.log.alwaysWarn(\n 'With

\n * First, this can be passed a single \"plain\" object. This object should\n * follow the {@link shaka.extern.PlayerConfiguration} object. Not all fields\n * need to be set; unset fields retain their old values.\n *\n *

\n * Second, this can be passed two arguments. The first is the name of the key\n * to set. This should be a '.' separated path to the key. For example,\n * 'streaming.alwaysStreamText'. The second argument is the\n * value to set.\n *\n * @param {string|!Object} config This should either be a field name or an\n * object.\n * @param {*=} value In the second mode, this is the value to set.\n * @return {boolean} True if the passed config object was valid, false if\n * there were invalid entries.\n * @export\n */\n configure(config, value) {\n const Platform = shaka.util.Platform;\n\n goog.asserts.assert(this.config_, 'Config must not be null!');\n goog.asserts.assert(typeof(config) == 'object' || arguments.length == 2,\n 'String configs should have values!');\n\n // ('fieldName', value) format\n if (arguments.length == 2 && typeof(config) == 'string') {\n config = shaka.util.ConfigUtils.convertToConfigObject(config, value);\n }\n\n goog.asserts.assert(typeof(config) == 'object', 'Should be an object!');\n\n // Deprecate 'streaming.forceTransmuxTS' configuration.\n if (config['streaming'] && 'forceTransmuxTS' in config['streaming']) {\n shaka.Deprecate.deprecateFeature(5,\n 'streaming.forceTransmuxTS configuration',\n 'Please Use mediaSource.forceTransmux instead.');\n config['mediaSource']['mediaSource'] =\n config['streaming']['forceTransmuxTS'];\n delete config['streaming']['forceTransmuxTS'];\n }\n\n // Deprecate 'streaming.forceTransmux' configuration.\n if (config['streaming'] && 'forceTransmux' in config['streaming']) {\n shaka.Deprecate.deprecateFeature(5,\n 'streaming.forceTransmux configuration',\n 'Please Use mediaSource.forceTransmux instead.');\n config['mediaSource']['mediaSource'] =\n config['streaming']['forceTransmux'];\n delete config['streaming']['forceTransmux'];\n }\n\n // Deprecate 'streaming.useNativeHlsOnSafari' configuration.\n if (config['streaming'] && 'useNativeHlsOnSafari' in config['streaming']) {\n shaka.Deprecate.deprecateFeature(5,\n 'streaming.useNativeHlsOnSafari configuration',\n 'Please Use streaming.useNativeHlsForFairPlay or ' +\n 'streaming.preferNativeHls instead.');\n config['streaming']['preferNativeHls'] =\n config['streaming']['useNativeHlsOnSafari'] && Platform.isApple();\n delete config['streaming']['useNativeHlsOnSafari'];\n }\n\n // Deprecate 'streaming.liveSync' boolean configuration.\n if (config['streaming'] &&\n typeof config['streaming']['liveSync'] == 'boolean') {\n shaka.Deprecate.deprecateFeature(5,\n 'streaming.liveSync',\n 'Please Use streaming.liveSync.enabled instead.');\n const liveSyncValue = config['streaming']['liveSync'];\n config['streaming']['liveSync'] = {};\n config['streaming']['liveSync']['enabled'] = liveSyncValue;\n }\n\n // map liveSyncMinLatency and liveSyncMaxLatency to liveSync.targetLatency\n // if liveSync.targetLatency isn't set.\n if (config['streaming'] && (!config['streaming']['liveSync'] ||\n !('targetLatency' in config['streaming']['liveSync'])) &&\n ('liveSyncMinLatency' in config['streaming'] ||\n 'liveSyncMaxLatency' in config['streaming'])) {\n const min = config['streaming']['liveSyncMinLatency'] || 0;\n const max = config['streaming']['liveSyncMaxLatency'] || 1;\n const mid = Math.abs(max - min) / 2;\n config['streaming']['liveSync'] = config['streaming']['liveSync'] || {};\n config['streaming']['liveSync']['targetLatency'] = min + mid;\n config['streaming']['liveSync']['targetLatencyTolerance'] = mid;\n }\n // Deprecate 'streaming.liveSyncMaxLatency' configuration.\n if (config['streaming'] && 'liveSyncMaxLatency' in config['streaming']) {\n shaka.Deprecate.deprecateFeature(5,\n 'streaming.liveSyncMaxLatency',\n 'Please Use streaming.liveSync.targetLatency and ' +\n 'streaming.liveSync.targetLatencyTolerance instead. ' +\n 'Or, set the values in your DASH manifest');\n delete config['streaming']['liveSyncMaxLatency'];\n }\n // Deprecate 'streaming.liveSyncMinLatency' configuration.\n if (config['streaming'] && 'liveSyncMinLatency' in config['streaming']) {\n shaka.Deprecate.deprecateFeature(5,\n 'streaming.liveSyncMinLatency',\n 'Please Use streaming.liveSync.targetLatency and ' +\n 'streaming.liveSync.targetLatencyTolerance instead. ' +\n 'Or, set the values in your DASH manifest');\n delete config['streaming']['liveSyncMinLatency'];\n }\n\n // Deprecate 'streaming.liveSyncTargetLatency' configuration.\n if (config['streaming'] && 'liveSyncTargetLatency' in config['streaming']) {\n shaka.Deprecate.deprecateFeature(5,\n 'streaming.liveSyncTargetLatency',\n 'Please Use streaming.liveSync.targetLatency instead.');\n config['streaming']['liveSync'] = config['streaming']['liveSync'] || {};\n config['streaming']['liveSync']['targetLatency'] =\n config['streaming']['liveSyncTargetLatency'];\n delete config['streaming']['liveSyncTargetLatency'];\n }\n\n // Deprecate 'streaming.liveSyncTargetLatencyTolerance' configuration.\n if (config['streaming'] &&\n 'liveSyncTargetLatencyTolerance' in config['streaming']) {\n shaka.Deprecate.deprecateFeature(5,\n 'streaming.liveSyncTargetLatencyTolerance',\n 'Please Use streaming.liveSync.targetLatencyTolerance instead.');\n config['streaming']['liveSync'] = config['streaming']['liveSync'] || {};\n config['streaming']['liveSync']['targetLatencyTolerance'] =\n config['streaming']['liveSyncTargetLatencyTolerance'];\n delete config['streaming']['liveSyncTargetLatencyTolerance'];\n }\n\n // Deprecate 'streaming.liveSyncPlaybackRate' configuration.\n if (config['streaming'] && 'liveSyncPlaybackRate' in config['streaming']) {\n shaka.Deprecate.deprecateFeature(5,\n 'streaming.liveSyncPlaybackRate',\n 'Please Use streaming.liveSync.maxPlaybackRate instead.');\n config['streaming']['liveSync'] = config['streaming']['liveSync'] || {};\n config['streaming']['liveSync']['maxPlaybackRate'] =\n config['streaming']['liveSyncPlaybackRate'];\n delete config['streaming']['liveSyncPlaybackRate'];\n }\n\n // Deprecate 'streaming.liveSyncMinPlaybackRate' configuration.\n if (config['streaming'] &&\n 'liveSyncMinPlaybackRate' in config['streaming']) {\n shaka.Deprecate.deprecateFeature(5,\n 'streaming.liveSyncMinPlaybackRate',\n 'Please Use streaming.liveSync.minPlaybackRate instead.');\n config['streaming']['liveSync'] = config['streaming']['liveSync'] || {};\n config['streaming']['liveSync']['minPlaybackRate'] =\n config['streaming']['liveSyncMinPlaybackRate'];\n delete config['streaming']['liveSyncMinPlaybackRate'];\n }\n\n // Deprecate 'streaming.liveSyncPanicMode' configuration.\n if (config['streaming'] && 'liveSyncPanicMode' in config['streaming']) {\n shaka.Deprecate.deprecateFeature(5,\n 'streaming.liveSyncPanicMode',\n 'Please Use streaming.liveSync.panicMode instead.');\n config['streaming']['liveSync'] = config['streaming']['liveSync'] || {};\n config['streaming']['liveSync']['panicMode'] =\n config['streaming']['liveSyncPanicMode'];\n delete config['streaming']['liveSyncPanicMode'];\n }\n\n // Deprecate 'streaming.liveSyncPanicThreshold' configuration.\n if (config['streaming'] &&\n 'liveSyncPanicThreshold' in config['streaming']) {\n shaka.Deprecate.deprecateFeature(5,\n 'streaming.liveSyncPanicThreshold',\n 'Please Use streaming.liveSync.panicThreshold instead.');\n config['streaming']['liveSync'] = config['streaming']['liveSync'] || {};\n config['streaming']['liveSync']['panicThreshold'] =\n config['streaming']['liveSyncPanicThreshold'];\n delete config['streaming']['liveSyncPanicThreshold'];\n }\n\n // Deprecate 'mediaSource.sourceBufferExtraFeatures' configuration.\n if (config['mediaSource'] &&\n 'sourceBufferExtraFeatures' in config['mediaSource']) {\n shaka.Deprecate.deprecateFeature(5,\n 'mediaSource.sourceBufferExtraFeatures configuration',\n 'Please Use mediaSource.addExtraFeaturesToSourceBuffer() instead.');\n const sourceBufferExtraFeatures =\n config['mediaSource']['sourceBufferExtraFeatures'];\n config['mediaSource']['addExtraFeaturesToSourceBuffer'] = () => {\n return sourceBufferExtraFeatures;\n };\n delete config['mediaSource']['sourceBufferExtraFeatures'];\n }\n\n // Deprecate 'manifest.hls.useSafariBehaviorForLive' configuration.\n if (config['manifest'] && config['manifest']['hls'] &&\n 'useSafariBehaviorForLive' in config['manifest']['hls']) {\n shaka.Deprecate.deprecateFeature(5,\n 'manifest.hls.useSafariBehaviorForLive configuration',\n 'Please Use liveSync config to keep on live Edge instead.');\n delete config['manifest']['hls']['useSafariBehaviorForLive'];\n }\n\n // Deprecate 'streaming.parsePrftBox' configuration.\n if (config['streaming'] && 'parsePrftBox' in config['streaming']) {\n shaka.Deprecate.deprecateFeature(5,\n 'streaming.parsePrftBox configuration',\n 'Now fired without needing a configuration.');\n delete config['streaming']['parsePrftBox'];\n }\n\n // Deprecate 'manifest.dash.enableAudioGroups' configuration.\n if (config['manifest'] && config['manifest']['dash'] &&\n 'enableAudioGroups' in config['manifest']['dash']) {\n shaka.Deprecate.deprecateFeature(5,\n 'manifest.dash.enableAudioGroups configuration',\n 'It is now enabled by default and cannot be disabled.');\n delete config['manifest']['dash']['enableAudioGroups'];\n }\n\n // Deprecate 'streaming.dispatchAllEmsgBoxes' configuration.\n if (config['streaming'] && 'dispatchAllEmsgBoxes' in config['streaming']) {\n shaka.Deprecate.deprecateFeature(5,\n 'streaming.dispatchAllEmsgBoxes configuration',\n 'Please Use mediaSource.dispatchAllEmsgBoxes instead.');\n config['mediaSource']['dispatchAllEmsgBoxes'] =\n config['streaming']['dispatchAllEmsgBoxes'];\n delete config['streaming']['dispatchAllEmsgBoxes'];\n }\n\n // If lowLatencyMode is enabled, and inaccurateManifestTolerance and\n // rebufferingGoal and segmentPrefetchLimit and baseDelay and\n // autoCorrectDrift and maxDisabledTime are not specified, set\n // inaccurateManifestTolerance to 0 and rebufferingGoal to 0.01 and\n // segmentPrefetchLimit to 2 and updateIntervalSeconds to 0.1 and and\n // baseDelay to 100 and autoCorrectDrift to false and maxDisabledTime\n // to 1 by default for low latency streaming.\n if (config['streaming'] && config['streaming']['lowLatencyMode']) {\n if (config['streaming']['inaccurateManifestTolerance'] == undefined) {\n config['streaming']['inaccurateManifestTolerance'] = 0;\n }\n if (config['streaming']['rebufferingGoal'] == undefined) {\n config['streaming']['rebufferingGoal'] = 0.01;\n }\n if (config['streaming']['segmentPrefetchLimit'] == undefined) {\n config['streaming']['segmentPrefetchLimit'] = 2;\n }\n if (config['streaming']['updateIntervalSeconds'] == undefined) {\n config['streaming']['updateIntervalSeconds'] = 0.1;\n }\n if (config['streaming']['maxDisabledTime'] == undefined) {\n config['streaming']['maxDisabledTime'] = 1;\n }\n if (config['streaming']['retryParameters'] == undefined) {\n config['streaming']['retryParameters'] = {};\n }\n if (config['streaming']['retryParameters']['baseDelay'] == undefined) {\n config['streaming']['retryParameters']['baseDelay'] = 100;\n }\n if (config['manifest'] == undefined) {\n config['manifest'] = {};\n }\n if (config['manifest']['dash'] == undefined) {\n config['manifest']['dash'] = {};\n }\n if (config['manifest']['dash']['autoCorrectDrift'] == undefined) {\n config['manifest']['dash']['autoCorrectDrift'] = false;\n }\n if (config['manifest']['retryParameters'] == undefined) {\n config['manifest']['retryParameters'] = {};\n }\n if (config['manifest']['retryParameters']['baseDelay'] == undefined) {\n config['manifest']['retryParameters']['baseDelay'] = 100;\n }\n if (config['drm'] == undefined) {\n config['drm'] = {};\n }\n if (config['drm']['retryParameters'] == undefined) {\n config['drm']['retryParameters'] = {};\n }\n if (config['drm']['retryParameters']['baseDelay'] == undefined) {\n config['drm']['retryParameters']['baseDelay'] = 100;\n }\n }\n const ret = shaka.util.PlayerConfiguration.mergeConfigObjects(\n this.config_, config, this.defaultConfig_());\n\n this.applyConfig_();\n return ret;\n }\n\n /**\n * Apply config changes.\n * @private\n */\n applyConfig_() {\n this.manifestFilterer_ = new shaka.media.ManifestFilterer(\n this.config_, this.maxHwRes_, this.drmEngine_);\n if (this.parser_) {\n const manifestConfig =\n shaka.util.ObjectUtils.cloneObject(this.config_.manifest);\n // Don't read video segments if the player is attached to an audio element\n if (this.video_ && this.video_.nodeName === 'AUDIO') {\n manifestConfig.disableVideo = true;\n }\n this.parser_.configure(manifestConfig);\n }\n if (this.drmEngine_) {\n this.drmEngine_.configure(this.config_.drm);\n }\n if (this.streamingEngine_) {\n this.streamingEngine_.configure(this.config_.streaming);\n\n // Need to apply the restrictions.\n // this.filterManifestWithRestrictions_() may throw.\n try {\n if (this.loadMode_ != shaka.Player.LoadMode.DESTROYED) {\n if (this.manifestFilterer_.filterManifestWithRestrictions(\n this.manifest_)) {\n this.onTracksChanged_();\n }\n }\n } catch (error) {\n this.onError_(error);\n }\n\n if (this.abrManager_) {\n // Update AbrManager variants to match these new settings.\n this.updateAbrManagerVariants_();\n }\n\n // If the streams we are playing are restricted, we need to switch.\n const activeVariant = this.streamingEngine_.getCurrentVariant();\n if (activeVariant) {\n if (!activeVariant.allowedByApplication ||\n !activeVariant.allowedByKeySystem) {\n shaka.log.debug('Choosing new variant after changing configuration');\n this.chooseVariantAndSwitch_();\n }\n }\n }\n if (this.networkingEngine_) {\n this.networkingEngine_.setForceHTTP(this.config_.streaming.forceHTTP);\n this.networkingEngine_.setForceHTTPS(this.config_.streaming.forceHTTPS);\n this.networkingEngine_.setMinBytesForProgressEvents(\n this.config_.streaming.minBytesForProgressEvents);\n }\n\n if (this.mediaSourceEngine_) {\n this.mediaSourceEngine_.configure(this.config_.mediaSource);\n const {segmentRelativeVttTiming} = this.config_.manifest;\n this.mediaSourceEngine_.setSegmentRelativeVttTiming(\n segmentRelativeVttTiming);\n }\n\n if (this.textDisplayer_) {\n const textDisplayerFactory = this.config_.textDisplayFactory;\n if (this.lastTextFactory_ != textDisplayerFactory) {\n const oldDisplayer = this.textDisplayer_;\n this.textDisplayer_ = textDisplayerFactory();\n if (this.textDisplayer_.configure) {\n this.textDisplayer_.configure(this.config_.textDisplayer);\n } else {\n shaka.Deprecate.deprecateFeature(5,\n 'Text displayer w/ configure',\n 'Text displayer should have a \"configure\" method!');\n }\n if (!this.textDisplayer_.setTextLanguage) {\n shaka.Deprecate.deprecateFeature(5,\n 'Text displayer w/ setTextLanguage',\n 'Text displayer should have a \"setTextLanguage\" method!');\n }\n this.textDisplayer_.setTextVisibility(oldDisplayer.isTextVisible());\n oldDisplayer.destroy();\n if (this.mediaSourceEngine_) {\n this.mediaSourceEngine_.setTextDisplayer(this.textDisplayer_);\n }\n this.lastTextFactory_ = textDisplayerFactory;\n\n if (this.streamingEngine_) {\n // Reload the text stream, so the cues will load again.\n this.streamingEngine_.reloadTextStream();\n }\n } else {\n if (this.textDisplayer_.configure) {\n this.textDisplayer_.configure(this.config_.textDisplayer);\n }\n }\n }\n\n if (this.abrManager_) {\n this.abrManager_.configure(this.config_.abr);\n // Simply enable/disable ABR with each call, since multiple calls to these\n // methods have no effect.\n if (this.config_.abr.enabled) {\n this.abrManager_.enable();\n } else {\n this.abrManager_.disable();\n }\n\n this.onAbrStatusChanged_();\n }\n if (this.bufferObserver_) {\n let rebufferThreshold = this.config_.streaming.rebufferingGoal;\n if (this.manifest_) {\n rebufferThreshold =\n Math.max(rebufferThreshold, this.manifest_.minBufferTime);\n }\n this.updateBufferingSettings_(rebufferThreshold);\n }\n\n if (this.manifest_) {\n shaka.Player.applyPlayRange_(this.manifest_.presentationTimeline,\n this.config_.playRangeStart,\n this.config_.playRangeEnd);\n }\n if (this.adManager_) {\n this.adManager_.configure(this.config_.ads);\n }\n if (this.cmcdManager_) {\n this.cmcdManager_.configure(this.config_.cmcd);\n }\n if (this.cmsdManager_) {\n this.cmsdManager_.configure(this.config_.cmsd);\n }\n }\n\n /**\n * Return a copy of the current configuration. Modifications of the returned\n * value will not affect the Player's active configuration. You must call\n * player.configure() to make changes.\n *\n * @return {shaka.extern.PlayerConfiguration}\n * @export\n */\n getConfiguration() {\n goog.asserts.assert(this.config_, 'Config must not be null!');\n\n const ret = this.defaultConfig_();\n shaka.util.PlayerConfiguration.mergeConfigObjects(\n ret, this.config_, this.defaultConfig_());\n return ret;\n }\n\n /**\n * Return a copy of the current non default configuration. Modifications of\n * the returned value will not affect the Player's active configuration.\n * You must call player.configure() to make changes.\n *\n * @return {!Object}\n * @export\n */\n getNonDefaultConfiguration() {\n goog.asserts.assert(this.config_, 'Config must not be null!');\n\n const ret = this.defaultConfig_();\n shaka.util.PlayerConfiguration.mergeConfigObjects(\n ret, this.config_, this.defaultConfig_());\n return shaka.util.ConfigUtils.getDifferenceFromConfigObjects(\n this.config_, this.defaultConfig_());\n }\n\n /**\n * Return a reference to the current configuration. Modifications to the\n * returned value will affect the Player's active configuration. This method\n * is not exported as sharing configuration with external objects is not\n * supported.\n *\n * @return {shaka.extern.PlayerConfiguration}\n */\n getSharedConfiguration() {\n goog.asserts.assert(\n this.config_, 'Cannot call getSharedConfiguration after call destroy!');\n return this.config_;\n }\n\n /**\n * Returns the ratio of video length buffered compared to buffering Goal\n * @return {number}\n * @export\n */\n getBufferFullness() {\n if (this.video_) {\n const bufferedLength = this.video_.buffered.length;\n const bufferedEnd =\n bufferedLength ? this.video_.buffered.end(bufferedLength - 1) : 0;\n const bufferingGoal = this.getConfiguration().streaming.bufferingGoal;\n const lengthToBeBuffered = Math.min(this.video_.currentTime +\n bufferingGoal, this.seekRange().end);\n\n if (bufferedEnd >= lengthToBeBuffered) {\n return 1;\n } else if (bufferedEnd <= this.video_.currentTime) {\n return 0;\n } else if (bufferedEnd < lengthToBeBuffered) {\n return ((bufferedEnd - this.video_.currentTime) /\n (lengthToBeBuffered - this.video_.currentTime));\n }\n }\n return 0;\n }\n\n /**\n * Reset configuration to default.\n * @export\n */\n resetConfiguration() {\n goog.asserts.assert(this.config_, 'Cannot be destroyed');\n // Remove the old keys so we remove open-ended dictionaries like drm.servers\n // but keeps the same object reference.\n for (const key in this.config_) {\n delete this.config_[key];\n }\n\n shaka.util.PlayerConfiguration.mergeConfigObjects(\n this.config_, this.defaultConfig_(), this.defaultConfig_());\n this.applyConfig_();\n }\n\n /**\n * Get the current load mode.\n *\n * @return {shaka.Player.LoadMode}\n * @export\n */\n getLoadMode() {\n return this.loadMode_;\n }\n\n /**\n * Get the current manifest type.\n *\n * @return {?string}\n * @export\n */\n getManifestType() {\n if (!this.manifest_) {\n return null;\n }\n return this.manifest_.type;\n }\n\n /**\n * Get the media element that the player is currently using to play loaded\n * content. If the player has not loaded content, this will return\n * null.\n *\n * @return {HTMLMediaElement}\n * @export\n */\n getMediaElement() {\n return this.video_;\n }\n\n /**\n * @return {shaka.net.NetworkingEngine} A reference to the Player's networking\n * engine. Applications may use this to make requests through Shaka's\n * networking plugins.\n * @export\n */\n getNetworkingEngine() {\n return this.networkingEngine_;\n }\n\n /**\n * Get the uri to the asset that the player has loaded. If the player has not\n * loaded content, this will return null.\n *\n * @return {?string}\n * @export\n */\n getAssetUri() {\n return this.assetUri_;\n }\n\n /**\n * Returns a shaka.ads.AdManager instance, responsible for Dynamic\n * Ad Insertion functionality.\n *\n * @return {shaka.extern.IAdManager}\n * @export\n */\n getAdManager() {\n // NOTE: this clause is redundant, but it keeps the compiler from\n // inlining this function. Inlining leads to setting the adManager\n // not taking effect in the compiled build.\n // Closure has a @noinline flag, but apparently not all cases are\n // supported by it, and ours isn't.\n // If they expand support, we might be able to get rid of this\n // clause.\n if (!this.adManager_) {\n return null;\n }\n\n return this.adManager_;\n }\n\n /**\n * Get if the player is playing live content. If the player has not loaded\n * content, this will return false.\n *\n * @return {boolean}\n * @export\n */\n isLive() {\n if (this.manifest_ && !this.isRemotePlayback()) {\n return this.manifest_.presentationTimeline.isLive();\n }\n\n // For native HLS, the duration for live streams seems to be Infinity.\n if (this.video_ && this.video_.src) {\n return this.video_.duration == Infinity;\n }\n\n return false;\n }\n\n /**\n * Get if the player is playing in-progress content. If the player has not\n * loaded content, this will return false.\n *\n * @return {boolean}\n * @export\n */\n isInProgress() {\n return this.manifest_ ?\n this.manifest_.presentationTimeline.isInProgress() :\n false;\n }\n\n /**\n * Check if the manifest contains only audio-only content. If the player has\n * not loaded content, this will return false.\n *\n *

\n * The player does not support content that contain more than one type of\n * variants (i.e. mixing audio-only, video-only, audio-video). Content will be\n * filtered to only contain one type of variant.\n *\n * @return {boolean}\n * @export\n */\n isAudioOnly() {\n if (this.manifest_ && !this.isRemotePlayback()) {\n const variants = this.manifest_.variants;\n if (!variants.length) {\n return false;\n }\n\n // Note that if there are some audio-only variants and some audio-video\n // variants, the audio-only variants are removed during filtering.\n // Therefore if the first variant has no video, that's sufficient to say\n // it is audio-only content.\n return !variants[0].video;\n } else if (this.video_ && this.video_.src) {\n // If we have video track info, use that. It will be the least\n // error-prone way with native HLS. In contrast, videoHeight might be\n // unset until the first frame is loaded. Since isAudioOnly is queried\n // by the UI on the 'trackschanged' event, the videoTracks info should be\n // up-to-date.\n if (this.video_.videoTracks) {\n return this.video_.videoTracks.length == 0;\n }\n\n // We cast to the more specific HTMLVideoElement to access videoHeight.\n // This might be an audio element, though, in which case videoHeight will\n // be undefined at runtime. For audio elements, this will always return\n // true.\n const video = /** @type {HTMLVideoElement} */(this.video_);\n return video.videoHeight == 0;\n } else {\n return false;\n }\n }\n\n /**\n * Get the range of time (in seconds) that seeking is allowed. If the player\n * has not loaded content and the manifest is HLS, this will return a range\n * from 0 to 0.\n *\n * @return {{start: number, end: number}}\n * @export\n */\n seekRange() {\n if (this.manifest_ && !this.isRemotePlayback()) {\n // With HLS lazy-loading, there were some situations where the manifest\n // had partially loaded, enough to move onto further load stages, but no\n // segments had been loaded, so the timeline is still unknown.\n // See: https://github.com/shaka-project/shaka-player/pull/4590\n if (!this.fullyLoaded_ &&\n this.manifest_.type == shaka.media.ManifestParser.HLS) {\n return {'start': 0, 'end': 0};\n }\n const timeline = this.manifest_.presentationTimeline;\n\n return {\n 'start': timeline.getSeekRangeStart(),\n 'end': timeline.getSeekRangeEnd(),\n };\n }\n\n // If we have loaded content with src=, we ask the video element for its\n // seekable range. This covers both plain mp4s and native HLS playbacks.\n if (this.video_ && this.video_.src) {\n const seekable = this.video_.seekable;\n if (seekable.length) {\n return {\n 'start': seekable.start(0),\n 'end': seekable.end(seekable.length - 1),\n };\n }\n }\n\n return {'start': 0, 'end': 0};\n }\n\n /**\n * Go to live in a live stream.\n *\n * @export\n */\n goToLive() {\n if (this.isLive()) {\n this.video_.currentTime = this.seekRange().end;\n } else {\n shaka.log.warning('goToLive is for live streams!');\n }\n }\n\n /**\n * Indicates if the player has fully loaded the stream.\n *\n * @return {boolean}\n * @export\n */\n isFullyLoaded() {\n return this.fullyLoaded_;\n }\n\n /**\n * Get the key system currently used by EME. If EME is not being used, this\n * will return an empty string. If the player has not loaded content, this\n * will return an empty string.\n *\n * @return {string}\n * @export\n */\n keySystem() {\n return shaka.util.DrmUtils.keySystem(this.drmInfo());\n }\n\n /**\n * Get the drm info used to initialize EME. If EME is not being used, this\n * will return null. If the player is idle or has not initialized\n * EME yet, this will return null.\n *\n * @return {?shaka.extern.DrmInfo}\n * @export\n */\n drmInfo() {\n return this.drmEngine_ ? this.drmEngine_.getDrmInfo() : null;\n }\n\n\n /**\n * Get the drm engine.\n * This method should only be used for testing. Applications SHOULD NOT\n * use this in production.\n *\n * @return {?shaka.media.DrmEngine}\n */\n getDrmEngine() {\n return this.drmEngine_;\n }\n\n\n /**\n * Get the next known expiration time for any EME session. If the session\n * never expires, this will return Infinity. If there are no EME\n * sessions, this will return Infinity. If the player has not\n * loaded content, this will return Infinity.\n *\n * @return {number}\n * @export\n */\n getExpiration() {\n return this.drmEngine_ ? this.drmEngine_.getExpiration() : Infinity;\n }\n\n /**\n * Returns the active sessions metadata\n *\n * @return {!Array.}\n * @export\n */\n getActiveSessionsMetadata() {\n return this.drmEngine_ ? this.drmEngine_.getActiveSessionsMetadata() : [];\n }\n\n /**\n * Gets a map of EME key ID to the current key status.\n *\n * @return {!Object}\n * @export\n */\n getKeyStatuses() {\n return this.drmEngine_ ? this.drmEngine_.getKeyStatuses() : {};\n }\n\n /**\n * Check if the player is currently in a buffering state (has too little\n * content to play smoothly). If the player has not loaded content, this will\n * return false.\n *\n * @return {boolean}\n * @export\n */\n isBuffering() {\n const State = shaka.media.BufferingObserver.State;\n return this.bufferObserver_ ?\n this.bufferObserver_.getState() == State.STARVING :\n false;\n }\n\n /**\n * Get the playback rate of what is playing right now. If we are using trick\n * play, this will return the trick play rate.\n * If no content is playing, this will return 0.\n * If content is buffering, this will return the expected playback rate once\n * the video starts playing.\n *\n *

\n * If the player has not loaded content, this will return a playback rate of\n * 0.\n *\n * @return {number}\n * @export\n */\n getPlaybackRate() {\n if (!this.video_) {\n return 0;\n }\n return this.playRateController_ ?\n this.playRateController_.getRealRate() :\n 1;\n }\n\n /**\n * Enable trick play to skip through content without playing by repeatedly\n * seeking. For example, a rate of 2.5 would result in 2.5 seconds of content\n * being skipped every second. A negative rate will result in moving\n * backwards.\n *\n *

\n * If the player has not loaded content or is still loading content this will\n * be a no-op. Wait until load has completed before calling.\n *\n *

\n * Trick play will be canceled automatically if the playhead hits the\n * beginning or end of the seekable range for the content.\n *\n * @param {number} rate\n * @param {boolean=} useTrickPlayTrack\n * @export\n */\n trickPlay(rate, useTrickPlayTrack = true) {\n // A playbackRate of 0 is used internally when we are in a buffering state,\n // and doesn't make sense for trick play. If you set a rate of 0 for trick\n // play, we will reject it and issue a warning. If it happens during a\n // test, we will fail the test through this assertion.\n goog.asserts.assert(rate != 0, 'Should never set a trick play rate of 0!');\n if (rate == 0) {\n shaka.log.alwaysWarn('A trick play rate of 0 is unsupported!');\n return;\n }\n this.trickPlayEventManager_.removeAll();\n\n if (this.video_.paused) {\n // Our fast forward is implemented with playbackRate and needs the video\n // to be playing (to not be paused) to take immediate effect.\n // If the video is paused, \"unpause\" it.\n this.video_.play();\n }\n this.playRateController_.set(rate);\n\n if (this.loadMode_ == shaka.Player.LoadMode.MEDIA_SOURCE) {\n this.abrManager_.playbackRateChanged(rate);\n this.streamingEngine_.setTrickPlay(\n useTrickPlayTrack && Math.abs(rate) > 1);\n }\n if (this.isLive()) {\n this.trickPlayEventManager_.listen(this.video_, 'timeupdate', () => {\n const currentTime = this.video_.currentTime;\n const seekRange = this.seekRange();\n const safeSeekOffset = this.config_.streaming.safeSeekOffset;\n\n // Cancel trick play if we hit the beginning or end of the seekable\n // (Sub-second accuracy not required here)\n if (rate > 0) {\n if (Math.floor(currentTime) >= Math.floor(seekRange.end)) {\n this.cancelTrickPlay();\n }\n } else {\n if (Math.floor(currentTime) <=\n Math.floor(seekRange.start + safeSeekOffset)) {\n this.cancelTrickPlay();\n }\n }\n });\n }\n }\n\n /**\n * Cancel trick-play. If the player has not loaded content or is still loading\n * content this will be a no-op.\n *\n * @export\n */\n cancelTrickPlay() {\n const defaultPlaybackRate = this.playRateController_.getDefaultRate();\n if (this.loadMode_ == shaka.Player.LoadMode.SRC_EQUALS) {\n this.playRateController_.set(defaultPlaybackRate);\n }\n\n if (this.loadMode_ == shaka.Player.LoadMode.MEDIA_SOURCE) {\n this.playRateController_.set(defaultPlaybackRate);\n this.abrManager_.playbackRateChanged(defaultPlaybackRate);\n this.streamingEngine_.setTrickPlay(false);\n }\n this.trickPlayEventManager_.removeAll();\n }\n\n /**\n * Return a list of variant tracks that can be switched to.\n *\n *

\n * If the player has not loaded content, this will return an empty list.\n *\n * @return {!Array.}\n * @export\n */\n getVariantTracks() {\n if (this.manifest_ && !this.isRemotePlayback()) {\n const currentVariant = this.streamingEngine_ ?\n this.streamingEngine_.getCurrentVariant() : null;\n\n const tracks = [];\n\n let activeTracks = 0;\n\n // Convert each variant to a track.\n for (const variant of this.manifest_.variants) {\n if (!shaka.util.StreamUtils.isPlayable(variant)) {\n continue;\n }\n\n const track = shaka.util.StreamUtils.variantToTrack(variant);\n track.active = variant == currentVariant;\n if (!track.active && activeTracks != 1 && currentVariant != null &&\n variant.video == currentVariant.video &&\n variant.audio == currentVariant.audio) {\n track.active = true;\n }\n\n if (track.active) {\n activeTracks++;\n }\n\n tracks.push(track);\n }\n\n goog.asserts.assert(activeTracks <= 1,\n 'It should only have one active track');\n\n return tracks;\n } else if (this.video_ && this.video_.audioTracks) {\n // Safari's native HLS always shows a single element in videoTracks.\n // You can't use that API to change resolutions. But we can use\n // audioTracks to generate a variant list that is usable for changing\n // languages.\n const audioTracks = Array.from(this.video_.audioTracks);\n return audioTracks.map((audio) =>\n shaka.util.StreamUtils.html5AudioTrackToTrack(audio));\n } else {\n return [];\n }\n }\n\n /**\n * Return a list of text tracks that can be switched to.\n *\n *

\n * If the player has not loaded content, this will return an empty list.\n *\n * @return {!Array.}\n * @export\n */\n getTextTracks() {\n if (this.manifest_ && !this.isRemotePlayback()) {\n const currentTextStream = this.streamingEngine_ ?\n this.streamingEngine_.getCurrentTextStream() : null;\n const tracks = [];\n\n // Convert all selectable text streams to tracks.\n for (const text of this.manifest_.textStreams) {\n const track = shaka.util.StreamUtils.textStreamToTrack(text);\n track.active = text == currentTextStream;\n\n tracks.push(track);\n }\n\n return tracks;\n } else if (this.video_ && this.video_.src && this.video_.textTracks) {\n const textTracks = this.getFilteredTextTracks_();\n const StreamUtils = shaka.util.StreamUtils;\n return textTracks.map((text) => StreamUtils.html5TextTrackToTrack(text));\n } else {\n return [];\n }\n }\n\n /**\n * Return a list of image tracks that can be switched to.\n *\n * If the player has not loaded content, this will return an empty list.\n *\n * @return {!Array.}\n * @export\n */\n getImageTracks() {\n const StreamUtils = shaka.util.StreamUtils;\n let imageStreams = this.externalSrcEqualsThumbnailsStreams_;\n if (this.manifest_) {\n imageStreams = this.manifest_.imageStreams;\n }\n return imageStreams.map((image) => StreamUtils.imageStreamToTrack(image));\n }\n\n /**\n * Returns Thumbnail objects for each thumbnail for a given image track ID.\n *\n * If the player has not loaded content, this will return a null.\n *\n * @param {number} trackId\n * @return {!Promise.>}\n * @export\n */\n async getAllThumbnails(trackId) {\n if (this.loadMode_ != shaka.Player.LoadMode.MEDIA_SOURCE &&\n this.loadMode_ != shaka.Player.LoadMode.SRC_EQUALS) {\n return null;\n }\n let imageStreams = this.externalSrcEqualsThumbnailsStreams_;\n if (this.manifest_) {\n imageStreams = this.manifest_.imageStreams;\n }\n const imageStream = imageStreams.find(\n (stream) => stream.id == trackId);\n if (!imageStream) {\n return null;\n }\n if (!imageStream.segmentIndex) {\n await imageStream.createSegmentIndex();\n }\n const promises = [];\n imageStream.segmentIndex.forEachTopLevelReference((reference) => {\n const dimensions = this.parseTilesLayout_(\n reference.getTilesLayout() || imageStream.tilesLayout);\n if (dimensions) {\n const numThumbnails = dimensions.rows * dimensions.columns;\n const duration = reference.trueEndTime - reference.startTime;\n for (let i = 0; i < numThumbnails; i++) {\n const sampleTime = reference.startTime + duration * i / numThumbnails;\n promises.push(this.getThumbnails(trackId, sampleTime));\n }\n }\n });\n const thumbnails = await Promise.all(promises);\n return thumbnails.filter((t) => t);\n }\n\n /**\n * Parses a tiles layout.\n *\n * @param {string|undefined} tilesLayout\n * @return {?{\n * columns: number,\n * rows: number\n * }}\n * @private\n */\n parseTilesLayout_(tilesLayout) {\n if (!tilesLayout) {\n return null;\n }\n // This expression is used to detect one or more numbers (0-9) followed\n // by an x and after one or more numbers (0-9)\n const match = /(\\d+)x(\\d+)/.exec(tilesLayout);\n if (!match) {\n shaka.log.warning('Tiles layout does not contain a valid format ' +\n ' (columns x rows)');\n return null;\n }\n const columns = parseInt(match[1], 10);\n const rows = parseInt(match[2], 10);\n return {columns, rows};\n }\n\n /**\n * Return a Thumbnail object from a image track Id and time.\n *\n * If the player has not loaded content, this will return a null.\n *\n * @param {number} trackId\n * @param {number} time\n * @return {!Promise.}\n * @export\n */\n async getThumbnails(trackId, time) {\n if (this.loadMode_ != shaka.Player.LoadMode.MEDIA_SOURCE &&\n this.loadMode_ != shaka.Player.LoadMode.SRC_EQUALS) {\n return null;\n }\n let imageStreams = this.externalSrcEqualsThumbnailsStreams_;\n if (this.manifest_) {\n imageStreams = this.manifest_.imageStreams;\n }\n const imageStream = imageStreams.find(\n (stream) => stream.id == trackId);\n if (!imageStream) {\n return null;\n }\n if (!imageStream.segmentIndex) {\n await imageStream.createSegmentIndex();\n }\n const referencePosition = imageStream.segmentIndex.find(time);\n if (referencePosition == null) {\n return null;\n }\n const reference = imageStream.segmentIndex.get(referencePosition);\n const dimensions = this.parseTilesLayout_(\n reference.getTilesLayout() || imageStream.tilesLayout);\n if (!dimensions) {\n return null;\n }\n const fullImageWidth = imageStream.width || 0;\n const fullImageHeight = imageStream.height || 0;\n let width = fullImageWidth / dimensions.columns;\n let height = fullImageHeight / dimensions.rows;\n const totalImages = dimensions.columns * dimensions.rows;\n const segmentDuration = reference.trueEndTime - reference.startTime;\n const thumbnailDuration =\n reference.getTileDuration() || (segmentDuration / totalImages);\n let thumbnailTime = reference.startTime;\n let positionX = 0;\n let positionY = 0;\n // If the number of images in the segment is greater than 1, we have to\n // find the correct image. For that we will return to the app the\n // coordinates of the position of the correct image.\n // Image search is always from left to right and top to bottom.\n // Note: The time between images within the segment is always\n // equidistant.\n //\n // Eg: Total images 5, tileLayout 5x1, segmentDuration 5, thumbnailTime 2\n // positionX = 0.4 * fullImageWidth\n // positionY = 0\n if (totalImages > 1) {\n const thumbnailPosition =\n Math.floor((time - reference.startTime) / thumbnailDuration);\n thumbnailTime = reference.startTime +\n (thumbnailPosition * thumbnailDuration);\n positionX = (thumbnailPosition % dimensions.columns) * width;\n positionY = Math.floor(thumbnailPosition / dimensions.columns) * height;\n }\n let sprite = false;\n const thumbnailSprite = reference.getThumbnailSprite();\n if (thumbnailSprite) {\n sprite = true;\n height = thumbnailSprite.height;\n positionX = thumbnailSprite.positionX;\n positionY = thumbnailSprite.positionY;\n width = thumbnailSprite.width;\n }\n return {\n segment: reference,\n imageHeight: fullImageHeight,\n imageWidth: fullImageWidth,\n height: height,\n positionX: positionX,\n positionY: positionY,\n startTime: thumbnailTime,\n duration: thumbnailDuration,\n uris: reference.getUris(),\n width: width,\n sprite: sprite,\n };\n }\n\n /**\n * Select a specific text track. track should come from a call to\n * getTextTracks. If the track is not found, this will be a\n * no-op. If the player has not loaded content, this will be a no-op.\n *\n *

\n * Note that AdaptationEvents are not fired for manual track\n * selections.\n *\n * @param {shaka.extern.Track} track\n * @export\n */\n selectTextTrack(track) {\n const selectMediaSourceMode = () => {\n const stream = this.manifest_.textStreams.find(\n (stream) => stream.id == track.id);\n\n if (!stream) {\n if (!this.isRemotePlayback()) {\n shaka.log.error('No stream with id', track.id);\n }\n return;\n }\n\n if (stream == this.streamingEngine_.getCurrentTextStream()) {\n shaka.log.debug('Text track already selected.');\n return;\n }\n\n // Add entries to the history.\n this.addTextStreamToSwitchHistory_(stream, /* fromAdaptation= */ false);\n this.streamingEngine_.switchTextStream(stream);\n this.onTextChanged_();\n this.setTextDisplayerLanguage_();\n\n // Workaround for\n // https://github.com/shaka-project/shaka-player/issues/1299\n // When track is selected, back-propagate the language to\n // currentTextLanguage_.\n this.currentTextLanguage_ = stream.language;\n };\n const selectSrcEqualsMode = () => {\n if (this.video_ && this.video_.textTracks) {\n const textTracks = this.getFilteredTextTracks_();\n const oldTrack = textTracks.find((textTrack) =>\n textTrack.mode !== 'disabled');\n const newTrack = textTracks.find((textTrack) =>\n shaka.util.StreamUtils.html5TrackId(textTrack) === track.id);\n if (!newTrack) {\n shaka.log.error('No track with id', track.id);\n return;\n }\n if (oldTrack !== newTrack) {\n if (oldTrack) {\n oldTrack.mode = 'disabled';\n this.loadEventManager_.unlisten(oldTrack, 'cuechange');\n this.textDisplayer_.remove(0, Infinity);\n }\n if (newTrack) {\n this.enableNativeTrack_(newTrack);\n }\n }\n this.onTextChanged_();\n this.setTextDisplayerLanguage_();\n }\n };\n if (this.manifest_ && this.playhead_) {\n selectMediaSourceMode();\n // When using MSE + remote we need to set tracks for both MSE and native\n // apis so that synchronization is maintained.\n if (!this.isRemotePlayback()) {\n return;\n }\n }\n selectSrcEqualsMode();\n }\n\n /**\n * @param {!TextTrack} track\n * @private\n */\n enableNativeTrack_(track) {\n this.loadEventManager_.listen(track, 'cuechange', () => {\n // Always remove cues from the past to avoid memory grow.\n const removeEnd = Math.max(0,\n this.video_.currentTime - this.config_.streaming.bufferBehind);\n this.textDisplayer_.remove(0, removeEnd);\n const cues = Array.from(track.activeCues || [])\n .map(shaka.text.Utils.mapNativeCueToShakaCue)\n .filter(shaka.util.Functional.isNotNull);\n this.textDisplayer_.append(cues);\n });\n track.mode = document.pictureInPictureElement ? 'showing' : 'hidden';\n }\n\n /**\n * Select a specific variant track to play. track should come\n * from a call to getVariantTracks. If track cannot\n * be found, this will be a no-op. If the player has not loaded content, this\n * will be a no-op.\n *\n *

\n * Changing variants will take effect once the currently buffered content has\n * been played. To force the change to happen sooner, use\n * clearBuffer with safeMargin. Setting\n * clearBuffer to true will clear all buffered\n * content after safeMargin, allowing the new variant to start\n * playing sooner.\n *\n *

\n * Note that AdaptationEvents are not fired for manual track\n * selections.\n *\n * @param {shaka.extern.Track} track\n * @param {boolean=} clearBuffer\n * @param {number=} safeMargin Optional amount of buffer (in seconds) to\n * retain when clearing the buffer. Useful for switching variant quickly\n * without causing a buffering event. Defaults to 0 if not provided. Ignored\n * if clearBuffer is false. Can cause hiccups on some browsers if chosen too\n * small, e.g. The amount of two segments is a fair minimum to consider as\n * safeMargin value.\n * @export\n */\n selectVariantTrack(track, clearBuffer = false, safeMargin = 0) {\n const selectMediaSourceMode = () => {\n const variant = this.manifest_.variants.find(\n (variant) => variant.id == track.id);\n if (!variant) {\n if (!this.isRemotePlayback()) {\n shaka.log.error('No variant with id', track.id);\n }\n return;\n }\n\n // Double check that the track is allowed to be played. The track list\n // should only contain playable variants, but if restrictions change and\n // |selectVariantTrack| is called before the track list is updated, we\n // could get a now-restricted variant.\n if (!shaka.util.StreamUtils.isPlayable(variant)) {\n shaka.log.error('Unable to switch to restricted track', track.id);\n return;\n }\n\n const active = this.streamingEngine_.getCurrentVariant();\n if (this.config_.abr.enabled && (active.video != variant.video ||\n (active.audio && variant.audio &&\n active.audio.language == variant.audio.language &&\n active.audio.channelsCount == variant.audio.channelsCount))) {\n shaka.log.alwaysWarn('Changing tracks while abr manager is enabled ' +\n 'will likely result in the selected track ' +\n 'being overriden. Consider disabling abr before ' +\n 'calling selectVariantTrack().');\n }\n\n if (this.isRemotePlayback()) {\n this.switchVariant_(\n variant, /* fromAdaptation= */ false,\n /* clearBuffer= */ false, /* safeMargin= */ 0);\n } else {\n this.switchVariant_(\n variant, /* fromAdaptation= */ false,\n clearBuffer || false, safeMargin || 0);\n }\n\n // Workaround for\n // https://github.com/shaka-project/shaka-player/issues/1299\n // When track is selected, back-propagate the language to\n // currentAudioLanguage_.\n this.currentAdaptationSetCriteria_ = new shaka.media.ExampleBasedCriteria(\n variant,\n this.config_.mediaSource.codecSwitchingStrategy);\n\n // Update AbrManager variants to match these new settings.\n this.updateAbrManagerVariants_();\n };\n const selectSrcEqualsMode = () => {\n if (this.video_ && this.video_.audioTracks) {\n // Safari's native HLS won't let you choose an explicit variant, though\n // you can choose audio languages this way.\n const audioTracks = Array.from(this.video_.audioTracks);\n for (const audioTrack of audioTracks) {\n if (shaka.util.StreamUtils.html5TrackId(audioTrack) == track.id) {\n // This will reset the \"enabled\" of other tracks to false.\n this.switchHtml5Track_(audioTrack);\n return;\n }\n }\n }\n };\n if (this.manifest_ && this.playhead_) {\n selectMediaSourceMode();\n // When using MSE + remote we need to set tracks for both MSE and native\n // apis so that synchronization is maintained.\n if (!this.isRemotePlayback()) {\n return;\n }\n }\n selectSrcEqualsMode();\n }\n\n /**\n * Return a list of audio language-role combinations available. If the\n * player has not loaded any content, this will return an empty list.\n *\n * @return {!Array.}\n * @export\n */\n getAudioLanguagesAndRoles() {\n return shaka.Player.getLanguageAndRolesFrom_(this.getVariantTracks());\n }\n\n /**\n * Return a list of text language-role combinations available. If the player\n * has not loaded any content, this will be return an empty list.\n *\n * @return {!Array.}\n * @export\n */\n getTextLanguagesAndRoles() {\n return shaka.Player.getLanguageAndRolesFrom_(this.getTextTracks());\n }\n\n /**\n * Return a list of audio languages available. If the player has not loaded\n * any content, this will return an empty list.\n *\n * @return {!Array.}\n * @export\n */\n getAudioLanguages() {\n return Array.from(shaka.Player.getLanguagesFrom_(this.getVariantTracks()));\n }\n\n /**\n * Return a list of text languages available. If the player has not loaded\n * any content, this will return an empty list.\n *\n * @return {!Array.}\n * @export\n */\n getTextLanguages() {\n return Array.from(shaka.Player.getLanguagesFrom_(this.getTextTracks()));\n }\n\n /**\n * Sets the current audio language and current variant role to the selected\n * language, role and channel count, and chooses a new variant if need be.\n * If the player has not loaded any content, this will be a no-op.\n *\n * @param {string} language\n * @param {string=} role\n * @param {number=} channelsCount\n * @param {number=} safeMargin\n * @param {string=} codec\n * @export\n */\n selectAudioLanguage(language, role, channelsCount = 0, safeMargin = 0,\n codec = '') {\n const selectMediaSourceMode = () => {\n this.currentAdaptationSetCriteria_ =\n new shaka.media.PreferenceBasedCriteria(\n language,\n role || '',\n channelsCount || 0,\n /* hdrLevel= */ '',\n /* spatialAudio= */ false,\n /* videoLayout= */ '',\n /* audioLabel= */ '',\n /* videoLabel= */ '',\n this.config_.mediaSource.codecSwitchingStrategy,\n codec || '');\n\n const diff = (a, b) => {\n if (!a.video && !b.video) {\n return 0;\n } else if (!a.video || !b.video) {\n return Infinity;\n } else {\n return Math.abs((a.video.height || 0) - (b.video.height || 0)) +\n Math.abs((a.video.width || 0) - (b.video.width || 0));\n }\n };\n // Find the variant whose size is closest to the active variant. This\n // ensures we stay at about the same resolution when just changing the\n // language/role.\n const active = this.streamingEngine_.getCurrentVariant();\n const set =\n this.currentAdaptationSetCriteria_.create(this.manifest_.variants);\n let bestVariant = null;\n for (const curVariant of set.values()) {\n if (!shaka.util.StreamUtils.isPlayable(curVariant)) {\n continue;\n }\n if (!bestVariant ||\n diff(bestVariant, active) > diff(curVariant, active)) {\n bestVariant = curVariant;\n }\n }\n if (bestVariant == active) {\n shaka.log.debug('Audio already selected.');\n return;\n }\n if (bestVariant) {\n const track = shaka.util.StreamUtils.variantToTrack(bestVariant);\n this.selectVariantTrack(\n track, /* clearBuffer= */ true, safeMargin || 0);\n return;\n }\n\n // If we haven't switched yet, just use ABR to find a new track.\n this.chooseVariantAndSwitch_();\n };\n const selectSrcEqualsMode = () => {\n if (this.video_ && this.video_.audioTracks) {\n const track = shaka.util.StreamUtils.filterStreamsByLanguageAndRole(\n this.getVariantTracks(), language, role || '', false)[0];\n if (track) {\n this.selectVariantTrack(track);\n }\n }\n };\n if (this.manifest_ && this.playhead_) {\n selectMediaSourceMode();\n // When using MSE + remote we need to set tracks for both MSE and native\n // apis so that synchronization is maintained.\n if (!this.isRemotePlayback()) {\n return;\n }\n }\n selectSrcEqualsMode();\n }\n\n /**\n * Sets the current text language and current text role to the selected\n * language and role, and chooses a new variant if need be. If the player has\n * not loaded any content, this will be a no-op.\n *\n * @param {string} language\n * @param {string=} role\n * @param {boolean=} forced\n * @export\n */\n selectTextLanguage(language, role, forced = false) {\n const selectMediaSourceMode = () => {\n this.currentTextLanguage_ = language;\n this.currentTextRole_ = role || '';\n this.currentTextForced_ = forced || false;\n\n const chosenText = this.chooseTextStream_();\n if (chosenText) {\n if (chosenText == this.streamingEngine_.getCurrentTextStream()) {\n shaka.log.debug('Text track already selected.');\n return;\n }\n\n this.addTextStreamToSwitchHistory_(\n chosenText, /* fromAdaptation= */ false);\n if (this.shouldStreamText_()) {\n this.streamingEngine_.switchTextStream(chosenText);\n this.onTextChanged_();\n this.setTextDisplayerLanguage_();\n }\n }\n };\n const selectSrcEqualsMode = () => {\n const track = shaka.util.StreamUtils.filterStreamsByLanguageAndRole(\n this.getTextTracks(), language, role || '', forced || false)[0];\n if (track) {\n this.selectTextTrack(track);\n }\n };\n if (this.manifest_ && this.playhead_) {\n selectMediaSourceMode();\n // When using MSE + remote we need to set tracks for both MSE and native\n // apis so that synchronization is maintained.\n if (!this.isRemotePlayback()) {\n return;\n }\n }\n selectSrcEqualsMode();\n }\n\n /**\n * Select variant tracks that have a given label. This assumes the\n * label uniquely identifies an audio stream, so all the variants\n * are expected to have the same variant.audio.\n *\n * @param {string} label\n * @param {boolean=} clearBuffer Optional clear buffer or not when\n * switch to new variant\n * Defaults to true if not provided\n * @param {number=} safeMargin Optional amount of buffer (in seconds) to\n * retain when clearing the buffer.\n * Defaults to 0 if not provided. Ignored if clearBuffer is false.\n * @export\n */\n selectVariantsByLabel(label, clearBuffer = true, safeMargin = 0) {\n const selectMediaSourceMode = () => {\n let firstVariantWithLabel = null;\n for (const variant of this.manifest_.variants) {\n if (variant.audio.label == label) {\n firstVariantWithLabel = variant;\n break;\n }\n }\n\n if (firstVariantWithLabel == null) {\n shaka.log.warning('No variants were found with label: ' +\n label + '. Ignoring the request to switch.');\n\n return;\n }\n\n // Label is a unique identifier of a variant's audio stream.\n // Because of that we assume that all the variants with the same\n // label have the same language.\n this.currentAdaptationSetCriteria_ =\n new shaka.media.PreferenceBasedCriteria(\n firstVariantWithLabel.language,\n /* role= */ '',\n /* channelCount= */ 0,\n /* hdrLevel= */ '',\n /* spatialAudio= */ false,\n /* videoLayout= */ '',\n label,\n /* videoLabel= */ '',\n this.config_.mediaSource.codecSwitchingStrategy,\n /* audioCodec= */ '');\n\n this.chooseVariantAndSwitch_(clearBuffer, safeMargin);\n };\n const selectSrcEqualsMode = () => {\n if (this.video_ && this.video_.audioTracks) {\n const audioTracks = Array.from(this.video_.audioTracks);\n\n let trackMatch = null;\n\n for (const audioTrack of audioTracks) {\n if (audioTrack.label == label) {\n trackMatch = audioTrack;\n }\n }\n if (trackMatch) {\n this.switchHtml5Track_(trackMatch);\n }\n }\n };\n if (this.manifest_ && this.playhead_) {\n selectMediaSourceMode();\n // When using MSE + remote we need to set tracks for both MSE and native\n // apis so that synchronization is maintained.\n if (!this.isRemotePlayback()) {\n return;\n }\n }\n selectSrcEqualsMode();\n }\n\n /**\n * Check if the text displayer is enabled.\n *\n * @return {boolean}\n * @export\n */\n isTextTrackVisible() {\n const expected = this.isTextVisible_;\n if (this.textDisplayer_) {\n const actual = this.textDisplayer_.isTextVisible();\n goog.asserts.assert(\n actual == expected, 'text visibility has fallen out of sync');\n\n // Always return the actual value so that the app has the most accurate\n // information (in the case that the values come out of sync in prod).\n return actual;\n }\n\n return expected;\n }\n\n /**\n * Return a list of chapters tracks.\n *\n * @return {!Array.}\n * @export\n */\n getChaptersTracks() {\n if (this.video_ && this.video_.currentSrc && this.video_.textTracks) {\n const textTracks = this.getChaptersTracks_();\n const StreamUtils = shaka.util.StreamUtils;\n return textTracks.map((text) => StreamUtils.html5TextTrackToTrack(text));\n } else {\n return [];\n }\n }\n\n /**\n * This returns the list of chapters.\n *\n * @param {string} language\n * @return {!Array.}\n * @export\n */\n getChapters(language) {\n if (!this.video_ || !this.video_.currentSrc || !this.video_.textTracks) {\n return [];\n }\n const LanguageUtils = shaka.util.LanguageUtils;\n const inputlanguage = LanguageUtils.normalize(language);\n const chaptersTracks = this.getChaptersTracks_();\n const chaptersTracksWithLanguage = chaptersTracks\n .filter((t) => LanguageUtils.normalize(t.language) == inputlanguage);\n if (!chaptersTracksWithLanguage || !chaptersTracksWithLanguage.length) {\n return [];\n }\n const chapters = [];\n const uniqueChapters = new Set();\n for (const chaptersTrack of chaptersTracksWithLanguage) {\n if (chaptersTrack && chaptersTrack.cues) {\n for (const cue of chaptersTrack.cues) {\n let id = cue.id;\n if (!id || id == '') {\n id = cue.startTime + '-' + cue.endTime + '-' + cue.text;\n }\n /** @type {shaka.extern.Chapter} */\n const chapter = {\n id: id,\n title: cue.text,\n startTime: cue.startTime,\n endTime: cue.endTime,\n };\n if (!uniqueChapters.has(id)) {\n chapters.push(chapter);\n uniqueChapters.add(id);\n }\n }\n }\n }\n return chapters;\n }\n\n /**\n * Ignore the TextTracks with the 'metadata' or 'chapters' kind, or the one\n * generated by the SimpleTextDisplayer.\n *\n * @return {!Array.}\n * @private\n */\n getFilteredTextTracks_() {\n goog.asserts.assert(this.video_.textTracks,\n 'TextTracks should be valid.');\n return Array.from(this.video_.textTracks)\n .filter((t) => t.kind != 'metadata' && t.kind != 'chapters' &&\n t.label != shaka.Player.TextTrackLabel);\n }\n\n /**\n * Get the TextTracks with the 'metadata' kind.\n *\n * @return {!Array.}\n * @private\n */\n getMetadataTracks_() {\n goog.asserts.assert(this.video_.textTracks,\n 'TextTracks should be valid.');\n return Array.from(this.video_.textTracks)\n .filter((t) => t.kind == 'metadata');\n }\n\n /**\n * Get the TextTracks with the 'chapters' kind.\n *\n * @return {!Array.}\n * @private\n */\n getChaptersTracks_() {\n goog.asserts.assert(this.video_.textTracks,\n 'TextTracks should be valid.');\n return Array.from(this.video_.textTracks)\n .filter((t) => t.kind == 'chapters');\n }\n\n /**\n * Enable or disable the text displayer. If the player is in an unloaded\n * state, the request will be applied next time content is loaded.\n *\n * @param {boolean} isVisible\n * @export\n */\n setTextTrackVisibility(isVisible) {\n const oldVisibilty = this.isTextVisible_;\n // Convert to boolean in case apps pass 0/1 instead false/true.\n const newVisibility = !!isVisible;\n\n if (oldVisibilty == newVisibility) {\n return;\n }\n\n this.isTextVisible_ = newVisibility;\n\n // Hold of on setting the text visibility until we have all the components\n // we need. This ensures that they stay in-sync.\n if (this.loadMode_ == shaka.Player.LoadMode.MEDIA_SOURCE) {\n this.textDisplayer_.setTextVisibility(newVisibility);\n\n // When the user wants to see captions, we stream captions. When the user\n // doesn't want to see captions, we don't stream captions. This is to\n // avoid bandwidth consumption by an unused resource. The app developer\n // can override this and configure us to always stream captions.\n if (!this.config_.streaming.alwaysStreamText) {\n if (newVisibility) {\n if (this.streamingEngine_.getCurrentTextStream()) {\n // We already have a selected text stream.\n } else {\n // Find the text stream that best matches the user's preferences.\n const streams =\n shaka.util.StreamUtils.filterStreamsByLanguageAndRole(\n this.manifest_.textStreams,\n this.currentTextLanguage_,\n this.currentTextRole_,\n this.currentTextForced_);\n\n // It is possible that there are no streams to play.\n if (streams.length > 0) {\n this.streamingEngine_.switchTextStream(streams[0]);\n this.onTextChanged_();\n this.setTextDisplayerLanguage_();\n }\n }\n } else {\n this.streamingEngine_.unloadTextStream();\n }\n }\n } else if (this.video_ && this.video_.src && this.video_.textTracks) {\n this.textDisplayer_.setTextVisibility(newVisibility);\n }\n\n // We need to fire the event after we have updated everything so that\n // everything will be in a stable state when the app responds to the\n // event.\n this.onTextTrackVisibility_();\n }\n\n /**\n * Get the current playhead position as a date.\n *\n * @return {Date}\n * @export\n */\n getPlayheadTimeAsDate() {\n let presentationTime = 0;\n if (this.playhead_) {\n presentationTime = this.playhead_.getTime();\n } else if (this.startTime_ == null) {\n // A live stream with no requested start time and no playhead yet. We\n // would start at the live edge, but we don't have that yet, so return\n // the current date & time.\n return new Date();\n } else {\n // A specific start time has been requested. This is what Playhead will\n // use once it is created.\n presentationTime = this.startTime_;\n }\n\n if (this.manifest_ && !this.isRemotePlayback()) {\n const timeline = this.manifest_.presentationTimeline;\n const startTime = timeline.getInitialProgramDateTime() ||\n timeline.getPresentationStartTime();\n return new Date(/* ms= */ (startTime + presentationTime) * 1000);\n } else if (this.video_ && this.video_.getStartDate) {\n // Apple's native HLS gives us getStartDate(), which is only available if\n // EXT-X-PROGRAM-DATETIME is in the playlist.\n const startDate = this.video_.getStartDate();\n if (isNaN(startDate.getTime())) {\n shaka.log.warning(\n 'EXT-X-PROGRAM-DATETIME required to get playhead time as Date!');\n return null;\n }\n return new Date(startDate.getTime() + (presentationTime * 1000));\n } else {\n shaka.log.warning('No way to get playhead time as Date!');\n return null;\n }\n }\n\n /**\n * Get the presentation start time as a date.\n *\n * @return {Date}\n * @export\n */\n getPresentationStartTimeAsDate() {\n if (this.manifest_ && !this.isRemotePlayback()) {\n const timeline = this.manifest_.presentationTimeline;\n const startTime = timeline.getInitialProgramDateTime() ||\n timeline.getPresentationStartTime();\n goog.asserts.assert(startTime != null,\n 'Presentation start time should not be null!');\n return new Date(/* ms= */ startTime * 1000);\n } else if (this.video_ && this.video_.getStartDate) {\n // Apple's native HLS gives us getStartDate(), which is only available if\n // EXT-X-PROGRAM-DATETIME is in the playlist.\n const startDate = this.video_.getStartDate();\n if (isNaN(startDate.getTime())) {\n shaka.log.warning(\n 'EXT-X-PROGRAM-DATETIME required to get presentation start time ' +\n 'as Date!');\n return null;\n }\n return startDate;\n } else {\n shaka.log.warning('No way to get presentation start time as Date!');\n return null;\n }\n }\n\n /**\n * Get the presentation segment availability duration. This should only be\n * called when the player has loaded a live stream. If the player has not\n * loaded a live stream, this will return null.\n *\n * @return {?number}\n * @export\n */\n getSegmentAvailabilityDuration() {\n if (!this.isLive()) {\n shaka.log.warning('getSegmentAvailabilityDuration is for live streams!');\n return null;\n }\n\n if (this.manifest_) {\n const timeline = this.manifest_.presentationTimeline;\n return timeline.getSegmentAvailabilityDuration();\n } else {\n shaka.log.warning('No way to get segment segment availability duration!');\n return null;\n }\n }\n\n /**\n * Get information about what the player has buffered. If the player has not\n * loaded content or is currently loading content, the buffered content will\n * be empty.\n *\n * @return {shaka.extern.BufferedInfo}\n * @export\n */\n getBufferedInfo() {\n if (this.loadMode_ == shaka.Player.LoadMode.MEDIA_SOURCE) {\n return this.mediaSourceEngine_.getBufferedInfo();\n }\n\n const info = {\n total: [],\n audio: [],\n video: [],\n text: [],\n };\n\n if (this.loadMode_ == shaka.Player.LoadMode.SRC_EQUALS) {\n const TimeRangesUtils = shaka.media.TimeRangesUtils;\n info.total = TimeRangesUtils.getBufferedInfo(this.video_.buffered);\n }\n\n return info;\n }\n\n /**\n * Get statistics for the current playback session. If the player is not\n * playing content, this will return an empty stats object.\n *\n * @return {shaka.extern.Stats}\n * @export\n */\n getStats() {\n // If the Player is not in a fully-loaded state, then return an empty stats\n // blob so that this call will never fail.\n const loaded = this.loadMode_ == shaka.Player.LoadMode.MEDIA_SOURCE ||\n this.loadMode_ == shaka.Player.LoadMode.SRC_EQUALS;\n if (!loaded) {\n return shaka.util.Stats.getEmptyBlob();\n }\n\n this.updateStateHistory_();\n\n goog.asserts.assert(this.video_, 'If we have stats, we should have video_');\n const element = /** @type {!HTMLVideoElement} */ (this.video_);\n\n const completionRatio = element.currentTime / element.duration;\n if (!isNaN(completionRatio) && !this.isLive()) {\n this.stats_.setCompletionPercent(Math.round(100 * completionRatio));\n }\n\n if (this.playhead_) {\n this.stats_.setGapsJumped(this.playhead_.getGapsJumped());\n this.stats_.setStallsDetected(this.playhead_.getStallsDetected());\n }\n\n if (element.getVideoPlaybackQuality) {\n const info = element.getVideoPlaybackQuality();\n\n this.stats_.setDroppedFrames(\n Number(info.droppedVideoFrames),\n Number(info.totalVideoFrames));\n this.stats_.setCorruptedFrames(Number(info.corruptedVideoFrames));\n }\n\n const licenseSeconds =\n this.drmEngine_ ? this.drmEngine_.getLicenseTime() : NaN;\n this.stats_.setLicenseTime(licenseSeconds);\n\n if (this.loadMode_ == shaka.Player.LoadMode.MEDIA_SOURCE) {\n // Event through we are loaded, it is still possible that we don't have a\n // variant yet because we set the load mode before we select the first\n // variant to stream.\n const variant = this.streamingEngine_.getCurrentVariant();\n const textStream = this.streamingEngine_.getCurrentTextStream();\n\n if (variant) {\n const rate = this.playRateController_ ?\n this.playRateController_.getRealRate() : 1;\n const variantBandwidth = rate * variant.bandwidth;\n let currentStreamBandwidth = variantBandwidth;\n if (textStream && textStream.bandwidth) {\n currentStreamBandwidth += (rate * textStream.bandwidth);\n }\n this.stats_.setCurrentStreamBandwidth(currentStreamBandwidth);\n }\n\n if (variant && variant.video) {\n this.stats_.setResolution(\n /* width= */ variant.video.width || NaN,\n /* height= */ variant.video.height || NaN);\n }\n\n if (this.isLive()) {\n const now = this.getPresentationStartTimeAsDate().valueOf() +\n element.currentTime * 1000;\n const latency = (Date.now() - now) / 1000;\n this.stats_.setLiveLatency(latency);\n }\n\n if (this.manifest_) {\n this.stats_.setManifestPeriodCount(this.manifest_.periodCount);\n this.stats_.setManifestGapCount(this.manifest_.gapCount);\n if (this.manifest_.presentationTimeline) {\n const maxSegmentDuration =\n this.manifest_.presentationTimeline.getMaxSegmentDuration();\n this.stats_.setMaxSegmentDuration(maxSegmentDuration);\n }\n }\n\n const estimate = this.abrManager_.getBandwidthEstimate();\n this.stats_.setBandwidthEstimate(estimate);\n }\n\n if (this.loadMode_ == shaka.Player.LoadMode.SRC_EQUALS) {\n this.stats_.addBytesDownloaded(NaN);\n this.stats_.setResolution(\n /* width= */ element.videoWidth || NaN,\n /* height= */ element.videoHeight || NaN);\n }\n\n return this.stats_.getBlob();\n }\n\n /**\n * Adds the given text track to the loaded manifest. load() must\n * resolve before calling. The presentation must have a duration.\n *\n * This returns the created track, which can immediately be selected by the\n * application. The track will not be automatically selected.\n *\n * @param {string} uri\n * @param {string} language\n * @param {string} kind\n * @param {string=} mimeType\n * @param {string=} codec\n * @param {string=} label\n * @param {boolean=} forced\n * @return {!Promise.}\n * @export\n */\n async addTextTrackAsync(uri, language, kind, mimeType, codec, label,\n forced = false) {\n if (this.loadMode_ != shaka.Player.LoadMode.MEDIA_SOURCE &&\n this.loadMode_ != shaka.Player.LoadMode.SRC_EQUALS) {\n shaka.log.error(\n 'Must call load() and wait for it to resolve before adding text ' +\n 'tracks.');\n throw new shaka.util.Error(\n shaka.util.Error.Severity.RECOVERABLE,\n shaka.util.Error.Category.PLAYER,\n shaka.util.Error.Code.CONTENT_NOT_LOADED);\n }\n\n if (kind != 'subtitles' && kind != 'captions') {\n shaka.log.alwaysWarn(\n 'Using a kind value different of `subtitles` or `captions` can ' +\n 'cause unwanted issues.');\n }\n\n if (!mimeType) {\n mimeType = await this.getTextMimetype_(uri);\n }\n\n let adCuePoints = [];\n if (this.adManager_) {\n adCuePoints = this.adManager_.getCuePoints();\n }\n\n if (this.loadMode_ == shaka.Player.LoadMode.SRC_EQUALS) {\n if (forced) {\n // See: https://github.com/whatwg/html/issues/4472\n kind = 'forced';\n }\n await this.addSrcTrackElement_(uri, language, kind, mimeType, label || '',\n adCuePoints);\n\n const LanguageUtils = shaka.util.LanguageUtils;\n const languageNormalized = LanguageUtils.normalize(language);\n\n const textTracks = this.getTextTracks();\n const srcTrack = textTracks.find((t) => {\n return LanguageUtils.normalize(t.language) == languageNormalized &&\n t.label == (label || '') &&\n t.kind == kind;\n });\n if (srcTrack) {\n this.onTracksChanged_();\n return srcTrack;\n }\n // This should not happen, but there are browser implementations that may\n // not support the Track element.\n shaka.log.error('Cannot add this text when loaded with src=');\n throw new shaka.util.Error(\n shaka.util.Error.Severity.RECOVERABLE,\n shaka.util.Error.Category.TEXT,\n shaka.util.Error.Code.CANNOT_ADD_EXTERNAL_TEXT_TO_SRC_EQUALS);\n }\n\n const ContentType = shaka.util.ManifestParserUtils.ContentType;\n\n let duration = this.video_.duration;\n if (this.manifest_) {\n duration = this.manifest_.presentationTimeline.getDuration();\n }\n if (duration == Infinity) {\n throw new shaka.util.Error(\n shaka.util.Error.Severity.RECOVERABLE,\n shaka.util.Error.Category.MANIFEST,\n shaka.util.Error.Code.CANNOT_ADD_EXTERNAL_TEXT_TO_LIVE_STREAM);\n }\n\n if (adCuePoints.length) {\n goog.asserts.assert(\n this.networkingEngine_, 'Need networking engine.');\n const data = await this.getTextData_(uri,\n this.networkingEngine_,\n this.config_.streaming.retryParameters);\n const vvtText = this.convertToWebVTT_(data, mimeType, adCuePoints);\n const blob = new Blob([vvtText], {type: 'text/vtt'});\n uri = shaka.media.MediaSourceEngine.createObjectURL(blob);\n mimeType = 'text/vtt';\n }\n\n /** @type {shaka.extern.Stream} */\n const stream = {\n id: this.nextExternalStreamId_++,\n originalId: null,\n groupId: null,\n createSegmentIndex: () => Promise.resolve(),\n segmentIndex: shaka.media.SegmentIndex.forSingleSegment(\n /* startTime= */ 0,\n /* duration= */ duration,\n /* uris= */ [uri]),\n mimeType: mimeType || '',\n codecs: codec || '',\n kind: kind,\n encrypted: false,\n drmInfos: [],\n keyIds: new Set(),\n language: language,\n originalLanguage: language,\n label: label || null,\n type: ContentType.TEXT,\n primary: false,\n trickModeVideo: null,\n emsgSchemeIdUris: null,\n roles: [],\n forced: !!forced,\n channelsCount: null,\n audioSamplingRate: null,\n spatialAudio: false,\n closedCaptions: null,\n accessibilityPurpose: null,\n external: true,\n fastSwitching: false,\n fullMimeTypes: new Set([shaka.util.MimeUtils.getFullType(\n mimeType || '', codec || '')]),\n isAudioMuxedInVideo: false,\n };\n\n const fullMimeType = shaka.util.MimeUtils.getFullType(\n stream.mimeType, stream.codecs);\n const supported = shaka.text.TextEngine.isTypeSupported(fullMimeType);\n if (!supported) {\n throw new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.TEXT,\n shaka.util.Error.Code.MISSING_TEXT_PLUGIN,\n mimeType);\n }\n\n this.manifest_.textStreams.push(stream);\n this.onTracksChanged_();\n return shaka.util.StreamUtils.textStreamToTrack(stream);\n }\n\n /**\n * Adds the given thumbnails track to the loaded manifest.\n * load() must resolve before calling. The presentation must\n * have a duration.\n *\n * This returns the created track, which can immediately be used by the\n * application.\n *\n * @param {string} uri\n * @param {string=} mimeType\n * @return {!Promise.}\n * @export\n */\n async addThumbnailsTrack(uri, mimeType) {\n if (this.loadMode_ != shaka.Player.LoadMode.MEDIA_SOURCE &&\n this.loadMode_ != shaka.Player.LoadMode.SRC_EQUALS) {\n shaka.log.error(\n 'Must call load() and wait for it to resolve before adding image ' +\n 'tracks.');\n throw new shaka.util.Error(\n shaka.util.Error.Severity.RECOVERABLE,\n shaka.util.Error.Category.PLAYER,\n shaka.util.Error.Code.CONTENT_NOT_LOADED);\n }\n\n if (!mimeType) {\n mimeType = await this.getTextMimetype_(uri);\n }\n\n if (mimeType != 'text/vtt') {\n throw new shaka.util.Error(\n shaka.util.Error.Severity.RECOVERABLE,\n shaka.util.Error.Category.TEXT,\n shaka.util.Error.Code.UNSUPPORTED_EXTERNAL_THUMBNAILS_URI,\n uri);\n }\n\n const ContentType = shaka.util.ManifestParserUtils.ContentType;\n let duration = this.video_.duration;\n if (this.manifest_) {\n duration = this.manifest_.presentationTimeline.getDuration();\n }\n if (duration == Infinity) {\n throw new shaka.util.Error(\n shaka.util.Error.Severity.RECOVERABLE,\n shaka.util.Error.Category.MANIFEST,\n shaka.util.Error.Code.CANNOT_ADD_EXTERNAL_THUMBNAILS_TO_LIVE_STREAM);\n }\n\n goog.asserts.assert(\n this.networkingEngine_, 'Need networking engine.');\n const buffer = await this.getTextData_(uri,\n this.networkingEngine_,\n this.config_.streaming.retryParameters);\n\n const factory = shaka.text.TextEngine.findParser(mimeType);\n if (!factory) {\n throw new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.TEXT,\n shaka.util.Error.Code.MISSING_TEXT_PLUGIN,\n mimeType);\n }\n const TextParser = factory();\n const time = {\n periodStart: 0,\n segmentStart: 0,\n segmentEnd: duration,\n vttOffset: 0,\n };\n const data = shaka.util.BufferUtils.toUint8(buffer);\n const cues = TextParser.parseMedia(data, time, uri, /* images= */ []);\n\n const references = [];\n for (const cue of cues) {\n let uris = null;\n const getUris = () => {\n if (uris == null) {\n uris = shaka.util.ManifestParserUtils.resolveUris(\n [uri], [cue.payload]);\n }\n return uris || [];\n };\n const reference = new shaka.media.SegmentReference(\n cue.startTime,\n cue.endTime,\n getUris,\n /* startByte= */ 0,\n /* endByte= */ null,\n /* initSegmentReference= */ null,\n /* timestampOffset= */ 0,\n /* appendWindowStart= */ 0,\n /* appendWindowEnd= */ Infinity,\n );\n if (cue.payload.includes('#xywh')) {\n const spriteInfo = cue.payload.split('#xywh=')[1].split(',');\n if (spriteInfo.length === 4) {\n reference.setThumbnailSprite({\n height: parseInt(spriteInfo[3], 10),\n positionX: parseInt(spriteInfo[0], 10),\n positionY: parseInt(spriteInfo[1], 10),\n width: parseInt(spriteInfo[2], 10),\n });\n }\n }\n references.push(reference);\n }\n\n let segmentMimeType = mimeType;\n if (references.length) {\n segmentMimeType = await shaka.net.NetworkingUtils.getMimeType(\n references[0].getUris()[0],\n this.networkingEngine_, this.config_.manifest.retryParameters);\n }\n\n /** @type {shaka.extern.Stream} */\n const stream = {\n id: this.nextExternalStreamId_++,\n originalId: null,\n groupId: null,\n createSegmentIndex: () => Promise.resolve(),\n segmentIndex: new shaka.media.SegmentIndex(references),\n mimeType: segmentMimeType || '',\n codecs: '',\n kind: '',\n encrypted: false,\n drmInfos: [],\n keyIds: new Set(),\n language: 'und',\n originalLanguage: null,\n label: null,\n type: ContentType.IMAGE,\n primary: false,\n trickModeVideo: null,\n emsgSchemeIdUris: null,\n roles: [],\n forced: false,\n channelsCount: null,\n audioSamplingRate: null,\n spatialAudio: false,\n closedCaptions: null,\n tilesLayout: '1x1',\n accessibilityPurpose: null,\n external: true,\n fastSwitching: false,\n fullMimeTypes: new Set([shaka.util.MimeUtils.getFullType(\n segmentMimeType || '', '')]),\n isAudioMuxedInVideo: false,\n };\n\n if (this.loadMode_ == shaka.Player.LoadMode.SRC_EQUALS) {\n this.externalSrcEqualsThumbnailsStreams_.push(stream);\n } else {\n this.manifest_.imageStreams.push(stream);\n }\n this.onTracksChanged_();\n return shaka.util.StreamUtils.imageStreamToTrack(stream);\n }\n\n /**\n * Adds the given chapters track to the loaded manifest. load()\n * must resolve before calling. The presentation must have a duration.\n *\n * This returns the created track.\n *\n * @param {string} uri\n * @param {string} language\n * @param {string=} mimeType\n * @return {!Promise.}\n * @export\n */\n async addChaptersTrack(uri, language, mimeType) {\n if (this.loadMode_ != shaka.Player.LoadMode.MEDIA_SOURCE &&\n this.loadMode_ != shaka.Player.LoadMode.SRC_EQUALS) {\n shaka.log.error(\n 'Must call load() and wait for it to resolve before adding ' +\n 'chapters tracks.');\n throw new shaka.util.Error(\n shaka.util.Error.Severity.RECOVERABLE,\n shaka.util.Error.Category.PLAYER,\n shaka.util.Error.Code.CONTENT_NOT_LOADED);\n }\n\n if (!mimeType) {\n mimeType = await this.getTextMimetype_(uri);\n }\n\n let adCuePoints = [];\n if (this.adManager_) {\n adCuePoints = this.adManager_.getCuePoints();\n }\n\n /** @type {!HTMLTrackElement} */\n const trackElement = await this.addSrcTrackElement_(\n uri, language, /* kind= */ 'chapters', mimeType, /* label= */ '',\n adCuePoints);\n\n const chaptersTracks = this.getChaptersTracks();\n const chaptersTrack = chaptersTracks.find((t) => {\n return t.language == language;\n });\n\n if (chaptersTrack) {\n await new Promise((resolve, reject) => {\n // The chapter data isn't available until the 'load' event fires, and\n // that won't happen until the chapters track is activated by the\n // activateChaptersTrack_ method.\n this.loadEventManager_.listenOnce(trackElement, 'load', resolve);\n this.loadEventManager_.listenOnce(trackElement, 'error', (event) => {\n reject(new shaka.util.Error(\n shaka.util.Error.Severity.RECOVERABLE,\n shaka.util.Error.Category.TEXT,\n shaka.util.Error.Code.CHAPTERS_TRACK_FAILED));\n });\n });\n\n this.onTracksChanged_();\n\n return chaptersTrack;\n }\n\n // This should not happen, but there are browser implementations that may\n // not support the Track element.\n shaka.log.error('Cannot add this text when loaded with src=');\n throw new shaka.util.Error(\n shaka.util.Error.Severity.RECOVERABLE,\n shaka.util.Error.Category.TEXT,\n shaka.util.Error.Code.CANNOT_ADD_EXTERNAL_TEXT_TO_SRC_EQUALS);\n }\n\n /**\n * @param {string} uri\n * @return {!Promise.}\n * @private\n */\n async getTextMimetype_(uri) {\n let mimeType;\n try {\n goog.asserts.assert(\n this.networkingEngine_, 'Need networking engine.');\n // eslint-disable-next-line require-atomic-updates\n mimeType = await shaka.net.NetworkingUtils.getMimeType(uri,\n this.networkingEngine_,\n this.config_.streaming.retryParameters);\n } catch (error) {}\n\n if (mimeType) {\n return mimeType;\n }\n\n shaka.log.error(\n 'The mimeType has not been provided and it could not be deduced ' +\n 'from its uri.');\n throw new shaka.util.Error(\n shaka.util.Error.Severity.RECOVERABLE,\n shaka.util.Error.Category.TEXT,\n shaka.util.Error.Code.TEXT_COULD_NOT_GUESS_MIME_TYPE,\n uri);\n }\n\n /**\n * @param {string} uri\n * @param {string} language\n * @param {string} kind\n * @param {string} mimeType\n * @param {string} label\n * @param {!Array.} adCuePoints\n * @return {!Promise.}\n * @private\n */\n async addSrcTrackElement_(uri, language, kind, mimeType, label,\n adCuePoints) {\n if (mimeType != 'text/vtt' || adCuePoints.length) {\n goog.asserts.assert(\n this.networkingEngine_, 'Need networking engine.');\n const data = await this.getTextData_(uri,\n this.networkingEngine_,\n this.config_.streaming.retryParameters);\n const vvtText = this.convertToWebVTT_(data, mimeType, adCuePoints);\n const blob = new Blob([vvtText], {type: 'text/vtt'});\n uri = shaka.media.MediaSourceEngine.createObjectURL(blob);\n mimeType = 'text/vtt';\n }\n\n const trackElement =\n /** @type {!HTMLTrackElement} */(document.createElement('track'));\n trackElement.src = this.cmcdManager_.appendTextTrackData(uri);\n trackElement.label = label;\n trackElement.kind = kind;\n trackElement.srclang = language;\n\n // Because we're pulling in the text track file via Javascript, the\n // same-origin policy applies. If you'd like to have a player served\n // from one domain, but the text track served from another, you'll\n // need to enable CORS in order to do so. In addition to enabling CORS\n // on the server serving the text tracks, you will need to add the\n // crossorigin attribute to the video element itself.\n if (!this.video_.getAttribute('crossorigin')) {\n this.video_.setAttribute('crossorigin', 'anonymous');\n }\n\n this.video_.appendChild(trackElement);\n return trackElement;\n }\n\n /**\n * @param {string} uri\n * @param {!shaka.net.NetworkingEngine} netEngine\n * @param {shaka.extern.RetryParameters} retryParams\n * @return {!Promise.}\n * @private\n */\n async getTextData_(uri, netEngine, retryParams) {\n const type = shaka.net.NetworkingEngine.RequestType.SEGMENT;\n\n const request = shaka.net.NetworkingEngine.makeRequest([uri], retryParams);\n request.method = 'GET';\n\n this.cmcdManager_.applyTextData(request);\n\n const response = await netEngine.request(type, request).promise;\n\n return response.data;\n }\n\n\n /**\n * Converts an input string to a WebVTT format string.\n *\n * @param {BufferSource} buffer\n * @param {string} mimeType\n * @param {!Array.} adCuePoints\n * @return {string}\n * @private\n */\n convertToWebVTT_(buffer, mimeType, adCuePoints) {\n const factory = shaka.text.TextEngine.findParser(mimeType);\n if (factory) {\n const obj = factory();\n const time = {\n periodStart: 0,\n segmentStart: 0,\n segmentEnd: this.video_.duration,\n vttOffset: 0,\n };\n const data = shaka.util.BufferUtils.toUint8(buffer);\n const cues = obj.parseMedia(\n data, time, /* uri= */ null, /* images= */ []);\n return shaka.text.WebVttGenerator.convert(cues, adCuePoints);\n }\n throw new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.TEXT,\n shaka.util.Error.Code.MISSING_TEXT_PLUGIN,\n mimeType);\n }\n\n /**\n * Set the maximum resolution that the platform's hardware can handle.\n *\n * @param {number} width\n * @param {number} height\n * @export\n */\n setMaxHardwareResolution(width, height) {\n this.maxHwRes_.width = width;\n this.maxHwRes_.height = height;\n }\n\n /**\n * Retry streaming after a streaming failure has occurred. When the player has\n * not loaded content or is loading content, this will be a no-op and will\n * return false.\n *\n *

\n * If the player has loaded content, and streaming has not seen an error, this\n * will return false.\n *\n *

\n * If the player has loaded content, and streaming seen an error, but the\n * could not resume streaming, this will return false.\n *\n * @param {number=} retryDelaySeconds\n * @return {boolean}\n * @export\n */\n retryStreaming(retryDelaySeconds = 0.1) {\n return this.loadMode_ == shaka.Player.LoadMode.MEDIA_SOURCE ?\n this.streamingEngine_.retry(retryDelaySeconds) :\n false;\n }\n\n /**\n * Get the manifest that the player has loaded. If the player has not loaded\n * any content, this will return null.\n *\n * NOTE: This structure is NOT covered by semantic versioning compatibility\n * guarantees. It may change at any time!\n *\n * This is marked as deprecated to warn Closure Compiler users at compile-time\n * to avoid using this method.\n *\n * @return {?shaka.extern.Manifest}\n * @export\n * @deprecated\n */\n getManifest() {\n shaka.log.alwaysWarn(\n 'Shaka Player\\'s internal Manifest structure is NOT covered by ' +\n 'semantic versioning compatibility guarantees. It may change at any ' +\n 'time! Please consider filing a feature request for whatever you ' +\n 'use getManifest() for.');\n return this.manifest_;\n }\n\n /**\n * Get the type of manifest parser that the player is using. If the player has\n * not loaded any content, this will return null.\n *\n * @return {?shaka.extern.ManifestParser.Factory}\n * @export\n */\n getManifestParserFactory() {\n return this.parserFactory_;\n }\n\n /**\n * Gets information about the currently fetched video, audio, and text.\n * In the case of a multi-codec or multi-mimeType manifest, this can let you\n * determine the exact codecs and mimeTypes being fetched at the moment.\n *\n * @return {!shaka.extern.PlaybackInfo}\n * @export\n */\n getFetchedPlaybackInfo() {\n const output = /** @type {!shaka.extern.PlaybackInfo} */ ({\n 'video': null,\n 'audio': null,\n 'text': null,\n });\n if (this.loadMode_ != shaka.Player.LoadMode.MEDIA_SOURCE) {\n return output;\n }\n const ContentType = shaka.util.ManifestParserUtils.ContentType;\n const variant = this.streamingEngine_.getCurrentVariant();\n const textStream = this.streamingEngine_.getCurrentTextStream();\n const currentTime = this.video_.currentTime;\n for (const stream of [variant.video, variant.audio, textStream]) {\n if (!stream || !stream.segmentIndex) {\n continue;\n }\n const position = stream.segmentIndex.find(currentTime);\n const reference = stream.segmentIndex.get(position);\n const info = /** @type {!shaka.extern.PlaybackStreamInfo} */ ({\n 'codecs': reference.codecs || stream.codecs,\n 'mimeType': reference.mimeType || stream.mimeType,\n 'bandwidth': reference.bandwidth || stream.bandwidth,\n });\n if (stream.type == ContentType.VIDEO) {\n info['width'] = stream.width;\n info['height'] = stream.height;\n output['video'] = info;\n } else if (stream.type == ContentType.AUDIO) {\n output['audio'] = info;\n } else if (stream.type == ContentType.TEXT) {\n output['text'] = info;\n }\n }\n return output;\n }\n\n /**\n * @param {shaka.extern.Variant} variant\n * @param {boolean} fromAdaptation\n * @private\n */\n addVariantToSwitchHistory_(variant, fromAdaptation) {\n const switchHistory = this.stats_.getSwitchHistory();\n switchHistory.updateCurrentVariant(variant, fromAdaptation);\n }\n\n /**\n * @param {shaka.extern.Stream} textStream\n * @param {boolean} fromAdaptation\n * @private\n */\n addTextStreamToSwitchHistory_(textStream, fromAdaptation) {\n const switchHistory = this.stats_.getSwitchHistory();\n switchHistory.updateCurrentText(textStream, fromAdaptation);\n }\n\n /**\n * @return {shaka.extern.PlayerConfiguration}\n * @private\n */\n defaultConfig_() {\n const config = shaka.util.PlayerConfiguration.createDefault();\n\n config.streaming.failureCallback = (error) => {\n this.defaultStreamingFailureCallback_(error);\n };\n\n // Because this.video_ may not be set when the config is built, the default\n // TextDisplay factory must capture a reference to \"this\".\n config.textDisplayFactory = () => {\n // On iOS where the Fullscreen API is not available we prefer\n // SimpleTextDisplayer because it works with the Fullscreen API of the\n // video element itself.\n const Platform = shaka.util.Platform;\n if (this.videoContainer_ &&\n (!Platform.safariVersion() || document.fullscreenEnabled)) {\n const latestConfig = this.getConfiguration();\n return new shaka.text.UITextDisplayer(\n this.video_, this.videoContainer_, latestConfig.textDisplayer);\n } else {\n // eslint-disable-next-line no-restricted-syntax\n if (HTMLMediaElement.prototype.addTextTrack) {\n return new shaka.text.SimpleTextDisplayer(\n this.video_, shaka.Player.TextTrackLabel);\n } else {\n shaka.log.warning('Text tracks are not supported by the ' +\n 'browser, disabling.');\n return new shaka.text.StubTextDisplayer();\n }\n }\n };\n return config;\n }\n\n /**\n * Set the videoContainer to construct UITextDisplayer.\n * @param {HTMLElement} videoContainer\n * @export\n */\n setVideoContainer(videoContainer) {\n this.videoContainer_ = videoContainer;\n }\n\n /**\n * @param {!shaka.util.Error} error\n * @private\n */\n defaultStreamingFailureCallback_(error) {\n // For live streams, we retry streaming automatically for certain errors.\n // For VOD streams, all streaming failures are fatal.\n if (!this.isLive()) {\n return;\n }\n\n let retryDelaySeconds = null;\n if (error.code == shaka.util.Error.Code.BAD_HTTP_STATUS ||\n error.code == shaka.util.Error.Code.HTTP_ERROR) {\n // These errors can be near-instant, so delay a bit before retrying.\n retryDelaySeconds = 1;\n if (this.config_.streaming.lowLatencyMode) {\n retryDelaySeconds = 0.1;\n }\n } else if (error.code == shaka.util.Error.Code.TIMEOUT) {\n // We already waited for a timeout, so retry quickly.\n retryDelaySeconds = 0.1;\n }\n\n if (retryDelaySeconds != null) {\n error.severity = shaka.util.Error.Severity.RECOVERABLE;\n shaka.log.warning('Live streaming error. Retrying automatically...');\n this.retryStreaming(retryDelaySeconds);\n }\n }\n\n /**\n * For CEA closed captions embedded in the video streams, create dummy text\n * stream. This can be safely called again on existing manifests, for\n * manifest updates.\n * @param {!shaka.extern.Manifest} manifest\n * @private\n */\n makeTextStreamsForClosedCaptions_(manifest) {\n const ContentType = shaka.util.ManifestParserUtils.ContentType;\n const TextStreamKind = shaka.util.ManifestParserUtils.TextStreamKind;\n const CEA608_MIME = shaka.util.MimeUtils.CEA608_CLOSED_CAPTION_MIMETYPE;\n const CEA708_MIME = shaka.util.MimeUtils.CEA708_CLOSED_CAPTION_MIMETYPE;\n\n // A set, to make sure we don't create two text streams for the same video.\n const closedCaptionsSet = new Set();\n for (const textStream of manifest.textStreams) {\n if (textStream.mimeType == CEA608_MIME ||\n textStream.mimeType == CEA708_MIME) {\n // This function might be called on a manifest update, so don't make a\n // new text stream for closed caption streams we have seen before.\n closedCaptionsSet.add(textStream.originalId);\n }\n }\n for (const variant of manifest.variants) {\n const video = variant.video;\n if (video && video.closedCaptions) {\n for (const id of video.closedCaptions.keys()) {\n if (!closedCaptionsSet.has(id)) {\n const mimeType = id.startsWith('CC') ? CEA608_MIME : CEA708_MIME;\n\n // Add an empty segmentIndex, for the benefit of the period combiner\n // in our builtin DASH parser.\n const segmentIndex = new shaka.media.MetaSegmentIndex();\n const language = video.closedCaptions.get(id);\n const textStream = {\n id: this.nextExternalStreamId_++, // A globally unique ID.\n originalId: id, // The CC ID string, like 'CC1', 'CC3', etc.\n groupId: null,\n createSegmentIndex: () => Promise.resolve(),\n segmentIndex,\n mimeType,\n codecs: '',\n kind: TextStreamKind.CLOSED_CAPTION,\n encrypted: false,\n drmInfos: [],\n keyIds: new Set(),\n language,\n originalLanguage: language,\n label: null,\n type: ContentType.TEXT,\n primary: false,\n trickModeVideo: null,\n emsgSchemeIdUris: null,\n roles: video.roles,\n forced: false,\n channelsCount: null,\n audioSamplingRate: null,\n spatialAudio: false,\n closedCaptions: null,\n accessibilityPurpose: null,\n external: false,\n fastSwitching: false,\n fullMimeTypes: new Set([shaka.util.MimeUtils.getFullType(\n mimeType, '')]),\n isAudioMuxedInVideo: false,\n };\n manifest.textStreams.push(textStream);\n closedCaptionsSet.add(id);\n }\n }\n }\n }\n }\n\n /**\n * @param {shaka.extern.Variant} initialVariant\n * @param {number} time\n * @return {!Promise.}\n * @private\n */\n async adjustStartTime_(initialVariant, time) {\n /** @type {?shaka.extern.Stream} */\n const activeAudio = initialVariant.audio;\n /** @type {?shaka.extern.Stream} */\n const activeVideo = initialVariant.video;\n\n /**\n * @param {?shaka.extern.Stream} stream\n * @param {number} time\n * @return {!Promise.}\n */\n const getAdjustedTime = async (stream, time) => {\n if (!stream) {\n return null;\n }\n\n await stream.createSegmentIndex();\n const iter = stream.segmentIndex.getIteratorForTime(time);\n const ref = iter ? iter.next().value : null;\n if (!ref) {\n return null;\n }\n\n const refTime = ref.startTime;\n goog.asserts.assert(refTime <= time,\n 'Segment should start before target time!');\n return refTime;\n };\n\n const audioStartTime = await getAdjustedTime(activeAudio, time);\n const videoStartTime = await getAdjustedTime(activeVideo, time);\n\n // If we have both video and audio times, pick the larger one. If we picked\n // the smaller one, that one will download an entire segment to buffer the\n // difference.\n if (videoStartTime != null && audioStartTime != null) {\n return Math.max(videoStartTime, audioStartTime);\n } else if (videoStartTime != null) {\n return videoStartTime;\n } else if (audioStartTime != null) {\n return audioStartTime;\n } else {\n return time;\n }\n }\n\n /**\n * Update the buffering state to be either \"we are buffering\" or \"we are not\n * buffering\", firing events to the app as needed.\n *\n * @private\n */\n updateBufferState_() {\n const isBuffering = this.isBuffering();\n shaka.log.v2('Player changing buffering state to', isBuffering);\n\n // Make sure we have all the components we need before we consider ourselves\n // as being loaded.\n // TODO: Make the check for \"loaded\" simpler.\n const loaded = this.stats_ && this.bufferObserver_ && this.playhead_;\n\n if (loaded) {\n this.playRateController_.setBuffering(isBuffering);\n if (this.cmcdManager_) {\n this.cmcdManager_.setBuffering(isBuffering);\n }\n this.updateStateHistory_();\n\n const dynamicTargetLatency =\n this.config_.streaming.liveSync.dynamicTargetLatency.enabled;\n const maxAttempts =\n this.config_.streaming.liveSync.dynamicTargetLatency.maxAttempts;\n\n\n if (dynamicTargetLatency && isBuffering &&\n this.rebufferingCount_ < maxAttempts) {\n const maxLatency =\n this.config_.streaming.liveSync.dynamicTargetLatency.maxLatency;\n\n const targetLatencyTolerance =\n this.config_.streaming.liveSync.targetLatencyTolerance;\n const rebufferIncrement =\n this.config_.streaming.liveSync.dynamicTargetLatency\n .rebufferIncrement;\n if (this.currentTargetLatency_) {\n this.currentTargetLatency_ = Math.min(\n this.currentTargetLatency_ +\n ++this.rebufferingCount_ * rebufferIncrement,\n maxLatency - targetLatencyTolerance);\n }\n }\n }\n\n // Surface the buffering event so that the app knows if/when we are\n // buffering.\n const eventName = shaka.util.FakeEvent.EventName.Buffering;\n const data = (new Map()).set('buffering', isBuffering);\n this.dispatchEvent(shaka.Player.makeEvent_(eventName, data));\n }\n\n /**\n * A callback for when the playback rate changes. We need to watch the\n * playback rate so that if the playback rate on the media element changes\n * (that was not caused by our play rate controller) we can notify the\n * controller so that it can stay in-sync with the change.\n *\n * @private\n */\n onRateChange_() {\n /** @type {number} */\n const newRate = this.video_.playbackRate;\n\n // On Edge, when someone seeks using the native controls, it will set the\n // playback rate to zero until they finish seeking, after which it will\n // return the playback rate.\n //\n // If the playback rate changes while seeking, Edge will cache the playback\n // rate and use it after seeking.\n //\n // https://github.com/shaka-project/shaka-player/issues/951\n if (newRate == 0) {\n return;\n }\n\n if (this.playRateController_) {\n // The playback rate has changed. This could be us or someone else.\n // If this was us, setting the rate again will be a no-op.\n this.playRateController_.set(newRate);\n }\n\n const event = shaka.Player.makeEvent_(\n shaka.util.FakeEvent.EventName.RateChange);\n this.dispatchEvent(event);\n }\n\n /**\n * Try updating the state history. If the player has not finished\n * initializing, this will be a no-op.\n *\n * @private\n */\n updateStateHistory_() {\n // If we have not finish initializing, this will be a no-op.\n if (!this.stats_) {\n return;\n }\n if (!this.bufferObserver_) {\n return;\n }\n\n const State = shaka.media.BufferingObserver.State;\n\n const history = this.stats_.getStateHistory();\n\n let updateState = 'playing';\n if (this.bufferObserver_.getState() == State.STARVING) {\n updateState = 'buffering';\n } else if (this.video_.ended) {\n updateState = 'ended';\n } else if (this.video_.paused) {\n updateState = 'paused';\n }\n const stateChanged = history.update(updateState);\n\n if (stateChanged) {\n const eventName = shaka.util.FakeEvent.EventName.StateChanged;\n const data = (new Map()).set('newstate', updateState);\n this.dispatchEvent(shaka.Player.makeEvent_(eventName, data));\n }\n }\n\n /**\n * Callback for liveSync and vodDynamicPlaybackRate\n *\n * @private\n */\n onTimeUpdate_() {\n const playbackRate = this.video_.playbackRate;\n const isLive = this.isLive();\n\n if (this.config_.streaming.vodDynamicPlaybackRate && !isLive) {\n const minPlaybackRate =\n this.config_.streaming.vodDynamicPlaybackRateLowBufferRate;\n const bufferFullness = this.getBufferFullness();\n const bufferThreshold =\n this.config_.streaming.vodDynamicPlaybackRateBufferRatio;\n\n if (bufferFullness <= bufferThreshold) {\n if (playbackRate != minPlaybackRate) {\n shaka.log.debug('Buffer fullness ratio (' + bufferFullness + ') ' +\n 'is less than the vodDynamicPlaybackRateBufferRatio (' +\n bufferThreshold + '). Updating playbackRate to ' + minPlaybackRate);\n this.trickPlay(minPlaybackRate, /* useTrickPlayTrack= */ false);\n }\n } else if (bufferFullness == 1) {\n if (playbackRate !== this.playRateController_.getDefaultRate()) {\n shaka.log.debug('Buffer is full. Cancel trick play.');\n this.cancelTrickPlay();\n }\n }\n }\n\n // If the live stream has reached its end, do not sync.\n if (!isLive) {\n return;\n }\n\n const seekRange = this.seekRange();\n if (!Number.isFinite(seekRange.end)) {\n return;\n }\n const currentTime = this.video_.currentTime;\n if (currentTime < seekRange.start) {\n // Bad stream?\n return;\n }\n\n // We don't want to block the user from pausing the stream.\n if (this.video_.paused) {\n return;\n }\n\n let targetLatency;\n let maxLatency;\n let maxPlaybackRate;\n let minLatency;\n let minPlaybackRate;\n const targetLatencyTolerance =\n this.config_.streaming.liveSync.targetLatencyTolerance;\n const dynamicTargetLatency =\n this.config_.streaming.liveSync.dynamicTargetLatency.enabled;\n const stabilityThreshold =\n this.config_.streaming.liveSync.dynamicTargetLatency.stabilityThreshold;\n\n if (this.config_.streaming.liveSync &&\n this.config_.streaming.liveSync.enabled) {\n targetLatency = this.config_.streaming.liveSync.targetLatency;\n maxLatency = targetLatency + targetLatencyTolerance;\n minLatency = Math.max(0, targetLatency - targetLatencyTolerance);\n maxPlaybackRate = this.config_.streaming.liveSync.maxPlaybackRate;\n minPlaybackRate = this.config_.streaming.liveSync.minPlaybackRate;\n } else {\n // serviceDescription must override if it is defined in the MPD and\n // liveSync configuration is not set.\n if (this.manifest_ && this.manifest_.serviceDescription) {\n targetLatency = this.manifest_.serviceDescription.targetLatency;\n if (this.manifest_.serviceDescription.targetLatency != null) {\n maxLatency = this.manifest_.serviceDescription.targetLatency +\n targetLatencyTolerance;\n } else if (this.manifest_.serviceDescription.maxLatency != null) {\n maxLatency = this.manifest_.serviceDescription.maxLatency;\n }\n if (this.manifest_.serviceDescription.targetLatency != null) {\n minLatency = Math.max(0,\n this.manifest_.serviceDescription.targetLatency -\n targetLatencyTolerance);\n } else if (this.manifest_.serviceDescription.minLatency != null) {\n minLatency = this.manifest_.serviceDescription.minLatency;\n }\n maxPlaybackRate =\n this.manifest_.serviceDescription.maxPlaybackRate ||\n this.config_.streaming.liveSync.maxPlaybackRate;\n minPlaybackRate =\n this.manifest_.serviceDescription.minPlaybackRate ||\n this.config_.streaming.liveSync.minPlaybackRate;\n }\n }\n\n if (!this.currentTargetLatency_ && typeof targetLatency === 'number') {\n this.currentTargetLatency_ = targetLatency;\n }\n\n const maxAttempts =\n this.config_.streaming.liveSync.dynamicTargetLatency.maxAttempts;\n if (dynamicTargetLatency && this.targetLatencyReached_ &&\n this.currentTargetLatency_ !== null &&\n typeof targetLatency === 'number' &&\n this.rebufferingCount_ < maxAttempts &&\n (Date.now() - this.targetLatencyReached_) > stabilityThreshold * 1000) {\n const dynamicMinLatency =\n this.config_.streaming.liveSync.dynamicTargetLatency.minLatency;\n const latencyIncrement = (targetLatency - dynamicMinLatency) / 2;\n this.currentTargetLatency_ = Math.max(\n this.currentTargetLatency_ - latencyIncrement,\n // current target latency should be within the tolerance of the min\n // latency to not overshoot it\n dynamicMinLatency + targetLatencyTolerance);\n this.targetLatencyReached_ = Date.now();\n }\n if (dynamicTargetLatency && this.currentTargetLatency_ !== null) {\n maxLatency = this.currentTargetLatency_ + targetLatencyTolerance;\n minLatency = this.currentTargetLatency_ - targetLatencyTolerance;\n }\n\n const latency = seekRange.end - this.video_.currentTime;\n let offset = 0;\n // In src= mode, the seek range isn't updated frequently enough, so we need\n // to fudge the latency number with an offset. The playback rate is used\n // as an offset, since that is the amount we catch up 1 second of\n // accelerated playback.\n if (this.loadMode_ == shaka.Player.LoadMode.SRC_EQUALS) {\n const buffered = this.video_.buffered;\n if (buffered.length > 0) {\n const bufferedEnd = buffered.end(buffered.length - 1);\n offset = Math.max(maxPlaybackRate, bufferedEnd - seekRange.end);\n }\n }\n\n const panicMode = this.config_.streaming.liveSync.panicMode;\n const panicThreshold =\n this.config_.streaming.liveSync.panicThreshold * 1000;\n const timeSinceLastRebuffer =\n Date.now() - this.bufferObserver_.getLastRebufferTime();\n if (panicMode && !minPlaybackRate) {\n minPlaybackRate = this.config_.streaming.liveSync.minPlaybackRate;\n }\n\n if (panicMode && minPlaybackRate &&\n timeSinceLastRebuffer <= panicThreshold) {\n if (playbackRate != minPlaybackRate) {\n shaka.log.debug('Time since last rebuffer (' +\n timeSinceLastRebuffer + 's) ' +\n 'is less than the live sync panicThreshold (' + panicThreshold +\n 's). Updating playbackRate to ' + minPlaybackRate);\n this.trickPlay(minPlaybackRate, /* useTrickPlayTrack= */ false);\n }\n } else if (maxLatency && maxPlaybackRate &&\n (latency - offset) > maxLatency) {\n if (playbackRate != maxPlaybackRate) {\n shaka.log.debug('Latency (' + latency + 's) is greater than ' +\n 'live sync maxLatency (' + maxLatency + 's). ' +\n 'Updating playbackRate to ' + maxPlaybackRate);\n this.trickPlay(maxPlaybackRate, /* useTrickPlayTrack= */ false);\n }\n this.targetLatencyReached_ = null;\n } else if (minLatency && minPlaybackRate &&\n (latency - offset) < minLatency) {\n if (playbackRate != minPlaybackRate) {\n shaka.log.debug('Latency (' + latency + 's) is smaller than ' +\n 'live sync minLatency (' + minLatency + 's). ' +\n 'Updating playbackRate to ' + minPlaybackRate);\n this.trickPlay(minPlaybackRate, /* useTrickPlayTrack= */ false);\n }\n this.targetLatencyReached_ = null;\n } else if (playbackRate !== this.playRateController_.getDefaultRate()) {\n this.cancelTrickPlay();\n this.targetLatencyReached_ = Date.now();\n }\n }\n\n /**\n * Callback for video progress events\n *\n * @private\n */\n onVideoProgress_() {\n if (!this.video_) {\n return;\n }\n let hasNewCompletionPercent = false;\n const completionRatio = this.video_.currentTime / this.video_.duration;\n if (!isNaN(completionRatio)) {\n const percent = Math.round(100 * completionRatio);\n if (isNaN(this.completionPercent_)) {\n this.completionPercent_ = percent;\n hasNewCompletionPercent = true;\n } else {\n const newCompletionPercent = Math.max(this.completionPercent_, percent);\n if (this.completionPercent_ != newCompletionPercent) {\n this.completionPercent_ = newCompletionPercent;\n hasNewCompletionPercent = true;\n }\n }\n }\n if (hasNewCompletionPercent) {\n let event;\n if (this.completionPercent_ == 0) {\n event = shaka.Player.makeEvent_(shaka.util.FakeEvent.EventName.Started);\n } else if (this.completionPercent_ == 25) {\n event = shaka.Player.makeEvent_(\n shaka.util.FakeEvent.EventName.FirstQuartile);\n } else if (this.completionPercent_ == 50) {\n event = shaka.Player.makeEvent_(\n shaka.util.FakeEvent.EventName.Midpoint);\n } else if (this.completionPercent_ == 75) {\n event = shaka.Player.makeEvent_(\n shaka.util.FakeEvent.EventName.ThirdQuartile);\n } else if (this.completionPercent_ == 100) {\n event = shaka.Player.makeEvent_(\n shaka.util.FakeEvent.EventName.Complete);\n }\n if (event) {\n this.dispatchEvent(event);\n }\n }\n }\n\n /**\n * Callback from Playhead.\n *\n * @private\n */\n onSeek_() {\n if (this.playheadObservers_) {\n this.playheadObservers_.notifyOfSeek();\n }\n if (this.streamingEngine_) {\n this.streamingEngine_.seeked();\n }\n if (this.bufferObserver_) {\n // If we seek into an unbuffered range, we should fire a 'buffering' event\n // immediately. If StreamingEngine can buffer fast enough, we may not\n // update our buffering tracking otherwise.\n this.pollBufferState_();\n }\n }\n\n /**\n * Update AbrManager with variants while taking into account restrictions,\n * preferences, and ABR.\n *\n * On error, this dispatches an error event and returns false.\n *\n * @return {boolean} True if successful.\n * @private\n */\n updateAbrManagerVariants_() {\n try {\n goog.asserts.assert(this.manifest_, 'Manifest should exist by now!');\n this.manifestFilterer_.checkRestrictedVariants(this.manifest_);\n } catch (e) {\n this.onError_(e);\n return false;\n }\n\n const playableVariants = shaka.util.StreamUtils.getPlayableVariants(\n this.manifest_.variants);\n\n // Update the abr manager with newly filtered variants.\n const adaptationSet = this.currentAdaptationSetCriteria_.create(\n playableVariants);\n this.abrManager_.setVariants(Array.from(adaptationSet.values()));\n return true;\n }\n\n /**\n * Chooses a variant from all possible variants while taking into account\n * restrictions, preferences, and ABR.\n *\n * On error, this dispatches an error event and returns null.\n *\n * @return {?shaka.extern.Variant}\n * @private\n */\n chooseVariant_() {\n if (this.updateAbrManagerVariants_()) {\n return this.abrManager_.chooseVariant();\n } else {\n return null;\n }\n }\n\n /**\n * Checks to re-enable variants that were temporarily disabled due to network\n * errors. If any variants are enabled this way, a new variant may be chosen\n * for playback.\n * @private\n */\n checkVariants_() {\n goog.asserts.assert(this.manifest_, 'Should have manifest!');\n\n const now = Date.now() / 1000;\n let hasVariantUpdate = false;\n\n /** @type {function(shaka.extern.Variant):string} */\n const streamsAsString = (variant) => {\n let str = '';\n if (variant.video) {\n str += 'video:' + variant.video.id;\n }\n if (variant.audio) {\n str += str ? '&' : '';\n str += 'audio:' + variant.audio.id;\n }\n return str;\n };\n\n let shouldStopTimer = true;\n for (const variant of this.manifest_.variants) {\n if (variant.disabledUntilTime > 0 && variant.disabledUntilTime <= now) {\n variant.disabledUntilTime = 0;\n hasVariantUpdate = true;\n\n shaka.log.v2('Re-enabled variant with ' + streamsAsString(variant));\n }\n if (variant.disabledUntilTime > 0) {\n shouldStopTimer = false;\n }\n }\n\n if (shouldStopTimer) {\n this.checkVariantsTimer_.stop();\n }\n\n if (hasVariantUpdate) {\n // Reconsider re-enabled variant for ABR switching.\n this.chooseVariantAndSwitch_(\n /* clearBuffer= */ false, /* safeMargin= */ undefined,\n /* force= */ false, /* fromAdaptation= */ false);\n }\n }\n\n /**\n * Choose a text stream from all possible text streams while taking into\n * account user preference.\n *\n * @return {?shaka.extern.Stream}\n * @private\n */\n chooseTextStream_() {\n const subset = shaka.util.StreamUtils.filterStreamsByLanguageAndRole(\n this.manifest_.textStreams,\n this.currentTextLanguage_,\n this.currentTextRole_,\n this.currentTextForced_);\n return subset[0] || null;\n }\n\n /**\n * Chooses a new Variant. If the new variant differs from the old one, it\n * adds the new one to the switch history and switches to it.\n *\n * Called after a config change, a key status event, or an explicit language\n * change.\n *\n * @param {boolean=} clearBuffer Optional clear buffer or not when\n * switch to new variant\n * Defaults to true if not provided\n * @param {number=} safeMargin Optional amount of buffer (in seconds) to\n * retain when clearing the buffer.\n * Defaults to 0 if not provided. Ignored if clearBuffer is false.\n * @private\n */\n chooseVariantAndSwitch_(clearBuffer = true, safeMargin = 0, force = false,\n fromAdaptation = true) {\n goog.asserts.assert(this.config_, 'Must not be destroyed');\n\n // Because we're running this after a config change (manual language\n // change) or a key status event, it is always okay to clear the buffer\n // here.\n const chosenVariant = this.chooseVariant_();\n if (chosenVariant) {\n this.switchVariant_(chosenVariant, fromAdaptation,\n clearBuffer, safeMargin, force);\n }\n }\n\n /**\n * @param {shaka.extern.Variant} variant\n * @param {boolean} fromAdaptation\n * @param {boolean} clearBuffer\n * @param {number} safeMargin\n * @param {boolean=} force\n * @private\n */\n switchVariant_(variant, fromAdaptation, clearBuffer, safeMargin,\n force = false) {\n const currentVariant = this.streamingEngine_.getCurrentVariant();\n if (variant == currentVariant) {\n shaka.log.debug('Variant already selected.');\n // If you want to clear the buffer, we force to reselect the same variant.\n // We don't need to reset the timestampOffset since it's the same variant,\n // so 'adaptation' isn't passed here.\n if (clearBuffer) {\n this.streamingEngine_.switchVariant(variant, clearBuffer, safeMargin,\n /* force= */ true);\n }\n return;\n }\n\n // Add entries to the history.\n this.addVariantToSwitchHistory_(variant, fromAdaptation);\n this.streamingEngine_.switchVariant(\n variant, clearBuffer, safeMargin, force,\n /* adaptation= */ fromAdaptation);\n let oldTrack = null;\n if (currentVariant) {\n oldTrack = shaka.util.StreamUtils.variantToTrack(currentVariant);\n }\n const newTrack = shaka.util.StreamUtils.variantToTrack(variant);\n newTrack.active = true;\n\n if (fromAdaptation) {\n // Dispatch an 'adaptation' event\n this.onAdaptation_(oldTrack, newTrack);\n } else {\n // Dispatch a 'variantchanged' event\n this.onVariantChanged_(oldTrack, newTrack);\n }\n }\n\n /**\n * @param {AudioTrack} track\n * @private\n */\n switchHtml5Track_(track) {\n goog.asserts.assert(this.video_ && this.video_.audioTracks,\n 'Video and video.audioTracks should not be null!');\n const audioTracks = Array.from(this.video_.audioTracks);\n const currentTrack = audioTracks.find((t) => t.enabled);\n\n // This will reset the \"enabled\" of other tracks to false.\n track.enabled = true;\n\n if (!currentTrack) {\n return;\n }\n\n // AirPlay does not reset the \"enabled\" of other tracks to false, so\n // it must be changed by hand.\n if (track.id !== currentTrack.id) {\n currentTrack.enabled = false;\n }\n\n const oldTrack =\n shaka.util.StreamUtils.html5AudioTrackToTrack(currentTrack);\n const newTrack =\n shaka.util.StreamUtils.html5AudioTrackToTrack(track);\n this.onVariantChanged_(oldTrack, newTrack);\n }\n\n /**\n * Decide during startup if text should be streamed/shown.\n * @private\n */\n setInitialTextState_(initialVariant, initialTextStream) {\n // Check if we should show text (based on difference between audio and text\n // languages).\n if (initialTextStream) {\n if (this.shouldInitiallyShowText_(\n initialVariant.audio, initialTextStream)) {\n this.isTextVisible_ = true;\n }\n if (this.isTextVisible_) {\n // If the cached value says to show text, then update the text displayer\n // since it defaults to not shown.\n this.textDisplayer_.setTextVisibility(true);\n goog.asserts.assert(this.shouldStreamText_(),\n 'Should be streaming text');\n }\n this.onTextTrackVisibility_();\n } else {\n this.isTextVisible_ = false;\n }\n }\n\n /**\n * Check if we should show text on screen automatically.\n *\n * @param {?shaka.extern.Stream} audioStream\n * @param {shaka.extern.Stream} textStream\n * @return {boolean}\n * @private\n */\n shouldInitiallyShowText_(audioStream, textStream) {\n const AutoShowText = shaka.config.AutoShowText;\n\n if (this.config_.autoShowText == AutoShowText.NEVER) {\n return false;\n }\n if (this.config_.autoShowText == AutoShowText.ALWAYS) {\n return true;\n }\n\n const LanguageUtils = shaka.util.LanguageUtils;\n\n /** @type {string} */\n const preferredTextLocale =\n LanguageUtils.normalize(this.config_.preferredTextLanguage);\n /** @type {string} */\n const textLocale = LanguageUtils.normalize(textStream.language);\n\n if (this.config_.autoShowText == AutoShowText.IF_PREFERRED_TEXT_LANGUAGE) {\n // Only the text language match matters.\n return LanguageUtils.areLanguageCompatible(\n textLocale,\n preferredTextLocale);\n }\n\n if (this.config_.autoShowText == AutoShowText.IF_SUBTITLES_MAY_BE_NEEDED) {\n if (!audioStream) {\n return false;\n }\n /* The text should automatically be shown if the text is\n * language-compatible with the user's text language preference, but not\n * compatible with the audio. These are cases where we deduce that\n * subtitles may be needed.\n *\n * For example:\n * preferred | chosen | chosen |\n * text | text | audio | show\n * -----------------------------------\n * en-CA | en | jp | true\n * en | en-US | fr | true\n * fr-CA | en-US | jp | false\n * en-CA | en-US | en-US | false\n *\n */\n /** @type {string} */\n const audioLocale = LanguageUtils.normalize(audioStream.language);\n\n return (\n LanguageUtils.areLanguageCompatible(textLocale, preferredTextLocale) &&\n !LanguageUtils.areLanguageCompatible(audioLocale, textLocale));\n }\n\n shaka.log.alwaysWarn('Invalid autoShowText setting!');\n return false;\n }\n\n /**\n * Callback from StreamingEngine.\n *\n * @private\n */\n onManifestUpdate_() {\n if (this.parser_ && this.parser_.update) {\n this.parser_.update();\n }\n }\n\n /**\n * Callback from StreamingEngine.\n *\n * @param {number} start\n * @param {number} end\n * @param {shaka.util.ManifestParserUtils.ContentType} contentType\n * @param {boolean} isMuxed\n *\n * @private\n */\n onSegmentAppended_(start, end, contentType, isMuxed) {\n const ContentType = shaka.util.ManifestParserUtils.ContentType;\n if (contentType != ContentType.TEXT) {\n // When we append a segment to media source (via streaming engine) we are\n // changing what data we have buffered, so notify the playhead of the\n // change.\n if (this.playhead_) {\n this.playhead_.notifyOfBufferingChange();\n // Skip the initial buffer gap\n const startTime = this.mediaSourceEngine_.bufferStart(contentType);\n if (\n !this.isLive() &&\n // If not paused then GapJumpingController will handle this gap.\n this.video_.paused &&\n startTime != null &&\n startTime > 0 &&\n this.playhead_.getTime() < startTime\n ) {\n this.playhead_.setStartTime(startTime);\n }\n }\n this.pollBufferState_();\n }\n\n // Dispatch an event for users to consume, too.\n const data = new Map()\n .set('start', start)\n .set('end', end)\n .set('contentType', contentType)\n .set('isMuxed', isMuxed);\n this.dispatchEvent(shaka.Player.makeEvent_(\n shaka.util.FakeEvent.EventName.SegmentAppended, data));\n }\n\n /**\n * Callback from AbrManager.\n *\n * @param {shaka.extern.Variant} variant\n * @param {boolean=} clearBuffer\n * @param {number=} safeMargin Optional amount of buffer (in seconds) to\n * retain when clearing the buffer.\n * Defaults to 0 if not provided. Ignored if clearBuffer is false.\n * @private\n */\n switch_(variant, clearBuffer = false, safeMargin = 0) {\n shaka.log.debug('switch_');\n goog.asserts.assert(this.config_.abr.enabled,\n 'AbrManager should not call switch while disabled!');\n\n if (!this.manifest_) {\n // It could come from a preload manager operation.\n return;\n }\n\n if (!this.streamingEngine_) {\n // There's no way to change it.\n return;\n }\n\n if (variant == this.streamingEngine_.getCurrentVariant()) {\n // This isn't a change.\n return;\n }\n\n this.switchVariant_(variant, /* fromAdaptation= */ true,\n clearBuffer, safeMargin);\n }\n\n /**\n * Dispatches an 'adaptation' event.\n * @param {?shaka.extern.Track} from\n * @param {shaka.extern.Track} to\n * @private\n */\n onAdaptation_(from, to) {\n // Delay the 'adaptation' event so that StreamingEngine has time to absorb\n // the changes before the user tries to query it.\n const data = new Map()\n .set('oldTrack', from)\n .set('newTrack', to);\n if (this.lcevcDec_) {\n this.lcevcDec_.updateVariant(to, this.getManifestType());\n }\n const event = shaka.Player.makeEvent_(\n shaka.util.FakeEvent.EventName.Adaptation, data);\n this.delayDispatchEvent_(event);\n }\n\n /**\n * Dispatches a 'trackschanged' event.\n * @private\n */\n onTracksChanged_() {\n // Delay the 'trackschanged' event so StreamingEngine has time to absorb the\n // changes before the user tries to query it.\n const event = shaka.Player.makeEvent_(\n shaka.util.FakeEvent.EventName.TracksChanged);\n this.delayDispatchEvent_(event);\n }\n\n /**\n * Dispatches a 'variantchanged' event.\n * @param {?shaka.extern.Track} from\n * @param {shaka.extern.Track} to\n * @private\n */\n onVariantChanged_(from, to) {\n // Delay the 'variantchanged' event so StreamingEngine has time to absorb\n // the changes before the user tries to query it.\n const data = new Map()\n .set('oldTrack', from)\n .set('newTrack', to);\n if (this.lcevcDec_) {\n this.lcevcDec_.updateVariant(to, this.getManifestType());\n }\n\n const event = shaka.Player.makeEvent_(\n shaka.util.FakeEvent.EventName.VariantChanged, data);\n this.delayDispatchEvent_(event);\n }\n\n /**\n * Dispatches a 'textchanged' event.\n * @private\n */\n onTextChanged_() {\n // Delay the 'textchanged' event so StreamingEngine time to absorb the\n // changes before the user tries to query it.\n const event = shaka.Player.makeEvent_(\n shaka.util.FakeEvent.EventName.TextChanged);\n this.delayDispatchEvent_(event);\n }\n\n /** @private */\n onTextTrackVisibility_() {\n const event = shaka.Player.makeEvent_(\n shaka.util.FakeEvent.EventName.TextTrackVisibility);\n this.delayDispatchEvent_(event);\n }\n\n /** @private */\n onAbrStatusChanged_() {\n // Restore disabled variants if abr get disabled\n if (!this.config_.abr.enabled) {\n this.restoreDisabledVariants_();\n }\n\n const data = (new Map()).set('newStatus', this.config_.abr.enabled);\n this.delayDispatchEvent_(shaka.Player.makeEvent_(\n shaka.util.FakeEvent.EventName.AbrStatusChanged, data));\n }\n\n /**\n * @private\n */\n setTextDisplayerLanguage_() {\n const activeTextTrack = this.getTextTracks().find((t) => t.active);\n if (activeTextTrack &&\n this.textDisplayer_ && this.textDisplayer_.setTextLanguage) {\n this.textDisplayer_.setTextLanguage(activeTextTrack.language);\n }\n }\n\n /**\n * @param {boolean} updateAbrManager\n * @private\n */\n restoreDisabledVariants_(updateAbrManager=true) {\n if (this.loadMode_ != shaka.Player.LoadMode.MEDIA_SOURCE) {\n return;\n }\n goog.asserts.assert(this.manifest_, 'Should have manifest!');\n\n shaka.log.v2('Restoring all disabled streams...');\n\n this.checkVariantsTimer_.stop();\n\n for (const variant of this.manifest_.variants) {\n variant.disabledUntilTime = 0;\n }\n\n if (updateAbrManager) {\n this.updateAbrManagerVariants_();\n }\n }\n\n /**\n * Temporarily disable all variants containing |stream|\n * @param {shaka.extern.Stream} stream\n * @param {number} disableTime\n * @return {boolean}\n */\n disableStream(stream, disableTime) {\n if (!this.config_.abr.enabled ||\n this.loadMode_ === shaka.Player.LoadMode.DESTROYED) {\n return false;\n }\n\n if (!navigator.onLine) {\n // Don't disable variants if we're completely offline, or else we end up\n // rapidly restricting all of them.\n return false;\n }\n\n if (disableTime == 0) {\n return false;\n }\n\n if (!this.manifest_) {\n return false;\n }\n\n // It only makes sense to disable a stream if we have an alternative else we\n // end up disabling all variants.\n const hasAltStream = this.manifest_.variants.some((variant) => {\n const altStream = variant[stream.type];\n\n if (altStream && altStream.id !== stream.id &&\n !variant.disabledUntilTime) {\n if (shaka.util.StreamUtils.isAudio(stream)) {\n return stream.language === altStream.language;\n }\n return true;\n }\n return false;\n });\n\n if (hasAltStream) {\n let didDisableStream = false;\n\n let isTrickModeVideo = false;\n\n for (const variant of this.manifest_.variants) {\n const candidate = variant[stream.type];\n\n if (!candidate) {\n continue;\n }\n\n if (candidate.id === stream.id) {\n variant.disabledUntilTime = (Date.now() / 1000) + disableTime;\n didDisableStream = true;\n\n shaka.log.v2(\n 'Disabled stream ' + stream.type + ':' + stream.id +\n ' for ' + disableTime + ' seconds...');\n } else if (candidate.trickModeVideo &&\n candidate.trickModeVideo.id == stream.id) {\n isTrickModeVideo = true;\n }\n }\n\n if (!didDisableStream && isTrickModeVideo) {\n return false;\n }\n\n goog.asserts.assert(didDisableStream, 'Must have disabled stream');\n\n this.checkVariantsTimer_.tickEvery(1);\n\n // Get the safeMargin to ensure a seamless playback\n const {video} = this.getBufferedInfo();\n const safeMargin =\n video.reduce((size, {start, end}) => size + end - start, 0);\n\n // Update abr manager variants and switch to recover playback\n this.chooseVariantAndSwitch_(\n /* clearBuffer= */ false, /* safeMargin= */ safeMargin,\n /* force= */ true, /* fromAdaptation= */ false);\n return true;\n }\n\n shaka.log.warning(\n 'No alternate stream found for active ' + stream.type + ' stream. ' +\n 'Will ignore request to disable stream...');\n\n return false;\n }\n\n /**\n * @param {!shaka.util.Error} error\n * @private\n */\n async onError_(error) {\n goog.asserts.assert(error instanceof shaka.util.Error, 'Wrong error type!');\n\n // Errors dispatched after |destroy| is called are not meaningful and should\n // be safe to ignore.\n if (this.loadMode_ == shaka.Player.LoadMode.DESTROYED) {\n return;\n }\n\n if (error.severity === shaka.util.Error.Severity.RECOVERABLE) {\n this.stats_.addNonFatalError();\n }\n\n let fireError = true;\n if (this.fullyLoaded_ && this.manifest_ && this.streamingEngine_ &&\n (error.code == shaka.util.Error.Code.VIDEO_ERROR ||\n error.code == shaka.util.Error.Code.MEDIA_SOURCE_OPERATION_FAILED ||\n error.code == shaka.util.Error.Code.MEDIA_SOURCE_OPERATION_THREW ||\n error.code == shaka.util.Error.Code.TRANSMUXING_FAILED)) {\n try {\n const ret = await this.streamingEngine_.resetMediaSource();\n fireError = !ret;\n if (ret) {\n const event = shaka.Player.makeEvent_(\n shaka.util.FakeEvent.EventName.MediaSourceRecovered);\n this.dispatchEvent(event);\n }\n } catch (e) {\n fireError = true;\n }\n }\n if (!fireError) {\n return;\n }\n\n // Restore disabled variant if the player experienced a critical error.\n if (error.severity === shaka.util.Error.Severity.CRITICAL) {\n this.restoreDisabledVariants_(/* updateAbrManager= */ false);\n }\n\n const eventName = shaka.util.FakeEvent.EventName.Error;\n const event = shaka.Player.makeEvent_(\n eventName, (new Map()).set('detail', error));\n this.dispatchEvent(event);\n if (event.defaultPrevented) {\n error.handled = true;\n }\n }\n\n /**\n * Load a new font on the page. If the font was already loaded, it does\n * nothing.\n *\n * @param {string} name\n * @param {string} url\n * @export\n */\n async addFont(name, url) {\n if ('fonts' in document && 'FontFace' in window ) {\n await document.fonts.ready;\n if (!('entries' in document.fonts)) {\n return;\n }\n const fontFaceSetIteratorToArray = (target) => {\n const iterable = target.entries();\n const results = [];\n let iterator = iterable.next();\n while (iterator.done === false) {\n results.push(iterator.value);\n iterator = iterable.next();\n }\n return results;\n };\n for (const fontFace of fontFaceSetIteratorToArray(document.fonts)) {\n if (fontFace.family == name && fontFace.display == 'swap') {\n // Font already loaded.\n return;\n }\n }\n const fontFace = new FontFace(name, `url(${url})`, {display: 'swap'});\n document.fonts.add(fontFace);\n }\n }\n\n /**\n * When we fire region events, we need to copy the information out of the\n * region to break the connection with the player's internal data. We do the\n * copy here because this is the transition point between the player and the\n * app.\n *\n * @param {!shaka.util.FakeEvent.EventName} eventName\n * @param {shaka.extern.TimelineRegionInfo} region\n * @param {shaka.util.FakeEventTarget=} eventTarget\n *\n * @private\n */\n onRegionEvent_(eventName, region, eventTarget = this) {\n // Always make a copy to avoid exposing our internal data to the app.\n const clone = {\n schemeIdUri: region.schemeIdUri,\n value: region.value,\n startTime: region.startTime,\n endTime: region.endTime,\n id: region.id,\n eventElement: region.eventElement,\n eventNode: region.eventNode,\n };\n\n const data = (new Map()).set('detail', clone);\n eventTarget.dispatchEvent(shaka.Player.makeEvent_(eventName, data));\n }\n\n /**\n * When notified of a media quality change we need to emit a\n * MediaQualityChange event to the app.\n *\n * @param {shaka.extern.MediaQualityInfo} mediaQuality\n * @param {number} position\n * @param {boolean} audioTrackChanged This is to specify whether this should\n * trigger a MediaQualityChangedEvent or an AudioTrackChangedEvent. Defaults\n * to false to trigger MediaQualityChangedEvent.\n *\n * @private\n */\n onMediaQualityChange_(mediaQuality, position, audioTrackChanged = false) {\n // Always make a copy to avoid exposing our internal data to the app.\n const clone = {\n bandwidth: mediaQuality.bandwidth,\n audioSamplingRate: mediaQuality.audioSamplingRate,\n codecs: mediaQuality.codecs,\n contentType: mediaQuality.contentType,\n frameRate: mediaQuality.frameRate,\n height: mediaQuality.height,\n mimeType: mediaQuality.mimeType,\n channelsCount: mediaQuality.channelsCount,\n pixelAspectRatio: mediaQuality.pixelAspectRatio,\n width: mediaQuality.width,\n label: mediaQuality.label,\n roles: mediaQuality.roles,\n language: mediaQuality.language,\n };\n\n const data = new Map()\n .set('mediaQuality', clone)\n .set('position', position);\n\n this.dispatchEvent(shaka.Player.makeEvent_(\n audioTrackChanged ?\n shaka.util.FakeEvent.EventName.AudioTrackChanged :\n shaka.util.FakeEvent.EventName.MediaQualityChanged,\n data));\n }\n\n /**\n * Turn the media element's error object into a Shaka Player error object.\n *\n * @param {boolean=} printAllErrors\n * @return {shaka.util.Error}\n * @private\n */\n videoErrorToShakaError_(printAllErrors = true) {\n goog.asserts.assert(this.video_.error,\n 'Video error expected, but missing!');\n if (!this.video_.error) {\n if (printAllErrors) {\n return new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.MEDIA,\n shaka.util.Error.Code.VIDEO_ERROR);\n }\n return null;\n }\n\n const code = this.video_.error.code;\n if (!printAllErrors && code == 1 /* MEDIA_ERR_ABORTED */) {\n // Ignore this error code, which should only occur when navigating away or\n // deliberately stopping playback of HTTP content.\n return null;\n }\n\n // Extra error information from MS Edge:\n let extended = this.video_.error.msExtendedCode;\n if (extended) {\n // Convert to unsigned:\n if (extended < 0) {\n extended += Math.pow(2, 32);\n }\n // Format as hex:\n extended = extended.toString(16);\n }\n\n // Extra error information from Chrome:\n const message = this.video_.error.message;\n\n return new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.MEDIA,\n shaka.util.Error.Code.VIDEO_ERROR,\n code, extended, message);\n }\n\n /**\n * @param {!Event} event\n * @private\n */\n onVideoError_(event) {\n const error = this.videoErrorToShakaError_(/* printAllErrors= */ false);\n if (!error) {\n return;\n }\n this.onError_(error);\n }\n\n /**\n * @param {!Object.} keyStatusMap A map of hex key IDs to\n * statuses.\n * @private\n */\n onKeyStatus_(keyStatusMap) {\n goog.asserts.assert(this.streamingEngine_, 'Cannot be called in src= mode');\n\n const event = shaka.Player.makeEvent_(\n shaka.util.FakeEvent.EventName.KeyStatusChanged);\n this.dispatchEvent(event);\n\n let keyIds = Object.keys(keyStatusMap);\n if (keyIds.length == 0) {\n shaka.log.warning(\n 'Got a key status event without any key statuses, so we don\\'t ' +\n 'know the real key statuses. If we don\\'t have all the keys, ' +\n 'you\\'ll need to set restrictions so we don\\'t select those tracks.');\n }\n\n // Non-standard version of global key status. Modify it to match standard\n // behavior.\n if (keyIds.length == 1 && keyIds[0] == '') {\n keyIds = ['00'];\n keyStatusMap = {'00': keyStatusMap['']};\n }\n\n // If EME is using a synthetic key ID, the only key ID is '00' (a single 0\n // byte). In this case, it is only used to report global success/failure.\n // See note about old platforms in: https://bit.ly/2tpez5Z\n const isGlobalStatus = keyIds.length == 1 && keyIds[0] == '00';\n if (isGlobalStatus) {\n shaka.log.warning(\n 'Got a synthetic key status event, so we don\\'t know the real key ' +\n 'statuses. If we don\\'t have all the keys, you\\'ll need to set ' +\n 'restrictions so we don\\'t select those tracks.');\n }\n\n const restrictedStatuses = shaka.media.ManifestFilterer.restrictedStatuses;\n let tracksChanged = false;\n\n goog.asserts.assert(this.drmEngine_, 'drmEngine should be non-null here.');\n\n // Only filter tracks for keys if we have some key statuses to look at.\n if (keyIds.length) {\n for (const variant of this.manifest_.variants) {\n const streams = shaka.util.StreamUtils.getVariantStreams(variant);\n\n for (const stream of streams) {\n const originalAllowed = variant.allowedByKeySystem;\n\n // Only update if we have key IDs for the stream. If the keys aren't\n // all present, then the track should be restricted.\n if (stream.keyIds.size) {\n variant.allowedByKeySystem = true;\n\n for (const keyId of stream.keyIds) {\n const keyStatus = keyStatusMap[isGlobalStatus ? '00' : keyId];\n if (keyStatus || this.drmEngine_.hasManifestInitData()) {\n variant.allowedByKeySystem = variant.allowedByKeySystem &&\n !!keyStatus && !restrictedStatuses.includes(keyStatus);\n }\n }\n }\n\n if (originalAllowed != variant.allowedByKeySystem) {\n tracksChanged = true;\n }\n } // for (const stream of streams)\n } // for (const variant of this.manifest_.variants)\n } // if (keyIds.size)\n\n if (tracksChanged) {\n this.onTracksChanged_();\n const variantsUpdated = this.updateAbrManagerVariants_();\n if (!variantsUpdated) {\n return;\n }\n }\n\n const currentVariant = this.streamingEngine_.getCurrentVariant();\n if (currentVariant && !currentVariant.allowedByKeySystem) {\n shaka.log.debug('Choosing new streams after key status changed');\n this.chooseVariantAndSwitch_();\n }\n }\n\n /**\n * @return {boolean} true if we should stream text right now.\n * @private\n */\n shouldStreamText_() {\n return this.config_.streaming.alwaysStreamText || this.isTextTrackVisible();\n }\n\n /**\n * Applies playRangeStart and playRangeEnd to the given timeline. This will\n * only affect non-live content.\n *\n * @param {shaka.media.PresentationTimeline} timeline\n * @param {number} playRangeStart\n * @param {number} playRangeEnd\n *\n * @private\n */\n static applyPlayRange_(timeline, playRangeStart, playRangeEnd) {\n if (playRangeStart > 0) {\n if (timeline.isLive()) {\n shaka.log.warning(\n '|playRangeStart| has been configured for live content. ' +\n 'Ignoring the setting.');\n } else {\n timeline.setUserSeekStart(playRangeStart);\n }\n }\n\n // If the playback has been configured to end before the end of the\n // presentation, update the duration unless it's live content.\n const fullDuration = timeline.getDuration();\n if (playRangeEnd < fullDuration) {\n if (timeline.isLive()) {\n shaka.log.warning(\n '|playRangeEnd| has been configured for live content. ' +\n 'Ignoring the setting.');\n } else {\n timeline.setDuration(playRangeEnd);\n }\n }\n }\n\n /**\n * Fire an event, but wait a little bit so that the immediate execution can\n * complete before the event is handled.\n *\n * @param {!shaka.util.FakeEvent} event\n * @private\n */\n async delayDispatchEvent_(event) {\n // Wait until the next interpreter cycle.\n await Promise.resolve();\n\n // Only dispatch the event if we are still alive.\n if (this.loadMode_ != shaka.Player.LoadMode.DESTROYED) {\n this.dispatchEvent(event);\n }\n }\n\n /**\n * Get the normalized languages for a group of tracks.\n *\n * @param {!Array.} tracks\n * @return {!Set.}\n * @private\n */\n static getLanguagesFrom_(tracks) {\n const languages = new Set();\n\n for (const track of tracks) {\n if (track.language) {\n languages.add(shaka.util.LanguageUtils.normalize(track.language));\n } else {\n languages.add('und');\n }\n }\n\n return languages;\n }\n\n /**\n * Get all permutations of normalized languages and role for a group of\n * tracks.\n *\n * @param {!Array.} tracks\n * @return {!Array.}\n * @private\n */\n static getLanguageAndRolesFrom_(tracks) {\n /** @type {!Map.} */\n const languageToRoles = new Map();\n /** @type {!Map.>} */\n const languageRoleToLabel = new Map();\n\n for (const track of tracks) {\n let language = 'und';\n let roles = [];\n\n if (track.language) {\n language = shaka.util.LanguageUtils.normalize(track.language);\n }\n\n if (track.type == 'variant') {\n roles = track.audioRoles;\n } else {\n roles = track.roles;\n }\n\n if (!roles || !roles.length) {\n // We must have an empty role so that we will still get a language-role\n // entry from our Map.\n roles = [''];\n }\n\n if (!languageToRoles.has(language)) {\n languageToRoles.set(language, new Set());\n }\n\n for (const role of roles) {\n languageToRoles.get(language).add(role);\n if (track.label) {\n if (!languageRoleToLabel.has(language)) {\n languageRoleToLabel.set(language, new Map());\n }\n languageRoleToLabel.get(language).set(role, track.label);\n }\n }\n }\n\n // Flatten our map to an array of language-role pairs.\n const pairings = [];\n languageToRoles.forEach((roles, language) => {\n for (const role of roles) {\n let label = null;\n if (languageRoleToLabel.has(language) &&\n languageRoleToLabel.get(language).has(role)) {\n label = languageRoleToLabel.get(language).get(role);\n }\n pairings.push({language, role, label});\n }\n });\n return pairings;\n }\n\n /**\n * Assuming the player is playing content with media source, check if the\n * player has buffered enough content to make it to the end of the\n * presentation.\n *\n * @return {boolean}\n * @private\n */\n isBufferedToEndMS_() {\n goog.asserts.assert(\n this.video_,\n 'We need a video element to get buffering information');\n goog.asserts.assert(\n this.mediaSourceEngine_,\n 'We need a media source engine to get buffering information');\n goog.asserts.assert(\n this.manifest_,\n 'We need a manifest to get buffering information');\n\n // This is a strong guarantee that we are buffered to the end, because it\n // means the playhead is already at that end.\n if (this.video_.ended) {\n return true;\n }\n\n // This means that MediaSource has buffered the final segment in all\n // SourceBuffers and is no longer accepting additional segments.\n if (this.mediaSourceEngine_.ended()) {\n return true;\n }\n\n // Live streams are \"buffered to the end\" when they have buffered to the\n // live edge or beyond (into the region covered by the presentation delay).\n if (this.manifest_.presentationTimeline.isLive()) {\n const liveEdge =\n this.manifest_.presentationTimeline.getSegmentAvailabilityEnd();\n const bufferEnd =\n shaka.media.TimeRangesUtils.bufferEnd(this.video_.buffered);\n\n if (bufferEnd != null && bufferEnd >= liveEdge) {\n return true;\n }\n }\n\n return false;\n }\n\n /**\n * Assuming the player is playing content with src=, check if the player has\n * buffered enough content to make it to the end of the presentation.\n *\n * @return {boolean}\n * @private\n */\n isBufferedToEndSrc_() {\n goog.asserts.assert(\n this.video_,\n 'We need a video element to get buffering information');\n\n // This is a strong guarantee that we are buffered to the end, because it\n // means the playhead is already at that end.\n if (this.video_.ended) {\n return true;\n }\n\n // If we have buffered to the duration of the content, it means we will have\n // enough content to buffer to the end of the presentation.\n const bufferEnd =\n shaka.media.TimeRangesUtils.bufferEnd(this.video_.buffered);\n\n // Because Safari's native HLS reports slightly inaccurate values for\n // bufferEnd here, we use a fudge factor. Without this, we can end up in a\n // buffering state at the end of the stream. See issue #2117.\n const fudge = 1; // 1000 ms\n return bufferEnd != null && bufferEnd >= this.video_.duration - fudge;\n }\n\n /**\n * Create an error for when we purposely interrupt a load operation.\n *\n * @return {!shaka.util.Error}\n * @private\n */\n createAbortLoadError_() {\n return new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.PLAYER,\n shaka.util.Error.Code.LOAD_INTERRUPTED);\n }\n\n /**\n * Indicate if we are using remote playback.\n *\n * @return {boolean}\n * @export\n */\n isRemotePlayback() {\n if (!this.video_ || !this.video_.remote) {\n return false;\n }\n return this.video_.remote.state != 'disconnected';\n }\n};\n\n/**\n * In order to know what method of loading the player used for some content, we\n * have this enum. It lets us know if content has not been loaded, loaded with\n * media source, or loaded with src equals.\n *\n * This enum has a low resolution, because it is only meant to express the\n * outer limits of the various states that the player is in. For example, when\n * someone calls a public method on player, it should not matter if they have\n * initialized drm engine, it should only matter if they finished loading\n * content.\n *\n * @enum {number}\n * @export\n */\nshaka.Player.LoadMode = {\n 'DESTROYED': 0,\n 'NOT_LOADED': 1,\n 'MEDIA_SOURCE': 2,\n 'SRC_EQUALS': 3,\n};\n\n/**\n * The typical buffering threshold. When we have less than this buffered (in\n * seconds), we enter a buffering state. This specific value is based on manual\n * testing and evaluation across a variety of platforms.\n *\n * To make the buffering logic work in all cases, this \"typical\" threshold will\n * be overridden if the rebufferingGoal configuration is too low.\n *\n * @const {number}\n * @private\n */\nshaka.Player.TYPICAL_BUFFERING_THRESHOLD_ = 0.5;\n\n/**\n * @define {string} A version number taken from git at compile time.\n * @export\n */\n// eslint-disable-next-line no-useless-concat, max-len\nshaka.Player.version = 'v4.12.2' + '-uncompiled'; // x-release-please-version\n\n// Initialize the deprecation system using the version string we just set\n// on the player.\nshaka.Deprecate.init(shaka.Player.version);\n\n\n/** @private {!Object.} */\nshaka.Player.supportPlugins_ = {};\n\n\n/** @private {?shaka.extern.IAdManager.Factory} */\nshaka.Player.adManagerFactory_ = null;\n\n\n/**\n * @const {string}\n */\nshaka.Player.TextTrackLabel = 'Shaka Player TextTrack';\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.config.AutoShowText');\n\n/**\n * @enum {number}\n * @export\n */\nshaka.config.AutoShowText = {\n /** Never show text automatically on startup. */\n 'NEVER': 0,\n /** Always show text automatically on startup. */\n 'ALWAYS': 1,\n /**\n * Show text automatically on startup if it matches the preferred text\n * language.\n */\n 'IF_PREFERRED_TEXT_LANGUAGE': 2,\n /**\n * Show text automatically on startup if we think that subtitles may be\n * needed. This is specifically if the selected text matches the preferred\n * text language AND is different from the initial audio language. (Example:\n * You prefer English, but the audio is only available in French, so English\n * subtitles should be enabled by default.)\n *
\n * This is the default setting.\n */\n 'IF_SUBTITLES_MAY_BE_NEEDED': 3,\n};\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.config.CodecSwitchingStrategy');\n\n/**\n * @enum {string}\n * @export\n */\nshaka.config.CodecSwitchingStrategy = {\n /**\n * Allow codec switching which will always involve reloading\n * the .\n */\n 'RELOAD': 'reload',\n /**\n * Allow codec switching; determine if SourceBuffer.changeType\n * is available and attempt to use this first, but fall back to reloading\n * MediaSource if not available.\n *
\n * Note: Some devices that support SourceBuffer.changeType can\n * become stuck in a pause state.\n */\n 'SMOOTH': 'smooth',\n};\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.net.Backoff');\n\ngoog.require('goog.asserts');\ngoog.require('shaka.util.Error');\ngoog.require('shaka.util.Timer');\n\n\n/**\n * Backoff represents delay and backoff state. This is used by NetworkingEngine\n * for individual requests and by StreamingEngine to retry streaming failures.\n *\n * @final\n */\nshaka.net.Backoff = class {\n /**\n * @param {shaka.extern.RetryParameters} parameters\n * @param {boolean=} autoReset If true, start at a \"first retry\" state and\n * and auto-reset that state when we reach maxAttempts.\n * Default set to false.\n */\n constructor(parameters, autoReset = false) {\n // Set defaults as we unpack these, so that individual app-level requests in\n // NetworkingEngine can be missing parameters.\n\n const defaults = shaka.net.Backoff.defaultRetryParameters();\n\n /**\n * @const\n * @private {number}\n */\n this.maxAttempts_ = (parameters.maxAttempts == null) ?\n defaults.maxAttempts : parameters.maxAttempts;\n\n goog.asserts.assert(this.maxAttempts_ >= 1, 'maxAttempts should be >= 1');\n\n /**\n * @const\n * @private {number}\n */\n this.baseDelay_ = (parameters.baseDelay == null) ?\n defaults.baseDelay : parameters.baseDelay;\n\n goog.asserts.assert(this.baseDelay_ >= 0, 'baseDelay should be >= 0');\n\n /**\n * @const\n * @private {number}\n */\n this.fuzzFactor_ = (parameters.fuzzFactor == null) ?\n defaults.fuzzFactor : parameters.fuzzFactor;\n\n goog.asserts.assert(this.fuzzFactor_ >= 0, 'fuzzFactor should be >= 0');\n\n /**\n * @const\n * @private {number}\n */\n this.backoffFactor_ = (parameters.backoffFactor == null) ?\n defaults.backoffFactor : parameters.backoffFactor;\n\n goog.asserts.assert(\n this.backoffFactor_ >= 0, 'backoffFactor should be >= 0');\n\n /** @private {number} */\n this.numAttempts_ = 0;\n\n /** @private {number} */\n this.nextUnfuzzedDelay_ = this.baseDelay_;\n\n /** @private {boolean} */\n this.autoReset_ = autoReset;\n\n if (this.autoReset_) {\n // There is no delay before the first attempt. In StreamingEngine (the\n // intended user of auto-reset mode), the first attempt was implied, so we\n // reset numAttempts to 1. Therefore maxAttempts (which includes the\n // first attempt) must be at least 2 for us to see a delay.\n goog.asserts.assert(this.maxAttempts_ >= 2,\n 'maxAttempts must be >= 2 for autoReset == true');\n this.numAttempts_ = 1;\n }\n }\n\n /**\n * @return {!Promise} Resolves when the caller may make an attempt, possibly\n * after a delay. Rejects if no more attempts are allowed.\n */\n async attempt() {\n if (this.numAttempts_ >= this.maxAttempts_) {\n if (this.autoReset_) {\n this.reset_();\n } else {\n throw new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.PLAYER,\n shaka.util.Error.Code.ATTEMPTS_EXHAUSTED);\n }\n }\n\n const currentAttempt = this.numAttempts_;\n this.numAttempts_++;\n\n if (currentAttempt == 0) {\n goog.asserts.assert(!this.autoReset_, 'Failed to delay with auto-reset!');\n return;\n }\n\n // We've already tried before, so delay the Promise.\n\n // Fuzz the delay to avoid tons of clients hitting the server at once\n // after it recovers from whatever is causing it to fail.\n const fuzzedDelayMs = shaka.net.Backoff.fuzz_(\n this.nextUnfuzzedDelay_, this.fuzzFactor_);\n\n await new Promise((resolve) => {\n shaka.net.Backoff.defer(fuzzedDelayMs, resolve);\n });\n\n // Update delay_ for next time.\n this.nextUnfuzzedDelay_ *= this.backoffFactor_;\n }\n\n /**\n * Gets a copy of the default retry parameters.\n *\n * @return {shaka.extern.RetryParameters}\n */\n static defaultRetryParameters() {\n // Use a function rather than a constant member so the calling code can\n // modify the values without affecting other call results.\n return {\n maxAttempts: 2,\n baseDelay: 1000,\n backoffFactor: 2,\n fuzzFactor: 0.5,\n timeout: 30000,\n stallTimeout: 5000,\n connectionTimeout: 10000,\n };\n }\n\n /**\n * Fuzz the input value by +/- fuzzFactor. For example, a fuzzFactor of 0.5\n * will create a random value that is between 50% and 150% of the input value.\n *\n * @param {number} value\n * @param {number} fuzzFactor\n * @return {number} The fuzzed value\n * @private\n */\n static fuzz_(value, fuzzFactor) {\n // A random number between -1 and +1.\n const negToPosOne = (Math.random() * 2.0) - 1.0;\n\n // A random number between -fuzzFactor and +fuzzFactor.\n const negToPosFuzzFactor = negToPosOne * fuzzFactor;\n\n // The original value, fuzzed by +/- fuzzFactor.\n return value * (1.0 + negToPosFuzzFactor);\n }\n\n /**\n * Reset state in autoReset mode.\n * @private\n */\n reset_() {\n goog.asserts.assert(this.autoReset_, 'Should only be used for auto-reset!');\n this.numAttempts_ = 1;\n this.nextUnfuzzedDelay_ = this.baseDelay_;\n }\n\n /**\n * This method is only public for testing. It allows us to intercept the\n * time-delay call.\n *\n * @param {number} delayInMs\n * @param {function()} callback\n */\n static defer(delayInMs, callback) {\n const timer = new shaka.util.Timer(callback);\n timer.tickAfter(delayInMs / 1000);\n }\n};\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.util.PublicPromise');\n\n\n/**\n * @summary\n * A utility to create Promises with convenient public resolve and reject\n * methods.\n *\n * @extends {Promise.}\n * @template T\n */\nshaka.util.PublicPromise = class {\n /**\n * @return {!Promise.}\n */\n constructor() {\n let resolvePromise;\n let rejectPromise;\n\n // Promise.call causes an error. It seems that inheriting from a native\n // Promise is not permitted by JavaScript interpreters.\n\n // The work-around is to construct a Promise object, modify it to look like\n // the compiler's picture of PublicPromise, then return it. The caller of\n // new PublicPromise will receive |promise| instead of |this|, and the\n // compiler will be aware of the additional properties |resolve| and\n // |reject|.\n\n const promise = new Promise(((resolve, reject) => {\n resolvePromise = resolve;\n rejectPromise = reject;\n }));\n\n // Now cast the Promise object to our subclass PublicPromise so that the\n // compiler will permit us to attach resolve() and reject() to it.\n const publicPromise = /** @type {shaka.util.PublicPromise} */(promise);\n publicPromise.resolve = resolvePromise;\n publicPromise.reject = rejectPromise;\n\n return publicPromise;\n }\n\n\n /** @param {T=} value */\n resolve(value) {}\n\n\n /** @param {*=} reason */\n reject(reason) {}\n};\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.util.AbortableOperation');\n\ngoog.require('shaka.util.Error');\ngoog.require('shaka.util.PublicPromise');\n\n/**\n * A utility to wrap abortable operations. Note that these are not cancelable.\n * Cancelation implies undoing what has been done so far, whereas aborting only\n * means that further work is stopped.\n *\n * @implements {shaka.extern.IAbortableOperation.}\n * @template T\n * @export\n */\nshaka.util.AbortableOperation = class {\n /**\n * @param {!Promise.} promise\n * A Promise which represents the underlying operation. It is resolved when\n * the operation is complete, and rejected if the operation fails or is\n * aborted. Aborted operations should be rejected with a shaka.util.Error\n * object using the error code OPERATION_ABORTED.\n * @param {function():!Promise} onAbort\n * Will be called by this object to abort the underlying operation.\n * This is not cancelation, and will not necessarily result in any work\n * being undone. abort() should return a Promise which is resolved when the\n * underlying operation has been aborted. The returned Promise should never\n * be rejected.\n */\n constructor(promise, onAbort) {\n /** @const {!Promise.} */\n this.promise = promise;\n\n /** @private {function():!Promise} */\n this.onAbort_ = onAbort;\n\n /** @private {?Promise} */\n this.abortPromise_ = null;\n }\n\n /**\n * @return {boolean} True if the operation has been aborted.\n * @export\n */\n get aborted() {\n return this.abortPromise_ !== null;\n }\n\n /**\n * @param {!shaka.util.Error} error\n * @return {!shaka.util.AbortableOperation} An operation which has already\n * failed with the error given by the caller.\n * @export\n */\n static failed(error) {\n return new shaka.util.AbortableOperation(\n Promise.reject(error),\n () => Promise.resolve());\n }\n\n /**\n * @return {!shaka.util.AbortableOperation} An operation which has already\n * failed with the error OPERATION_ABORTED.\n * @export\n */\n static aborted() {\n const p = Promise.reject(shaka.util.AbortableOperation.abortError());\n // Silence uncaught rejection errors, which may otherwise occur any place\n // we don't explicitly handle aborted operations.\n p.catch(() => {});\n return new shaka.util.AbortableOperation(p, () => Promise.resolve());\n }\n\n /** @return {!shaka.util.Error} */\n static abortError() {\n return new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.PLAYER,\n shaka.util.Error.Code.OPERATION_ABORTED);\n }\n\n /**\n * @param {U} value\n * @return {!shaka.util.AbortableOperation.} An operation which has already\n * completed with the given value.\n * @template U\n * @export\n */\n static completed(value) {\n return new shaka.util.AbortableOperation(\n Promise.resolve(value),\n () => Promise.resolve());\n }\n\n /**\n * @param {!Promise.} promise\n * @return {!shaka.util.AbortableOperation.} An operation which cannot be\n * aborted. It will be completed when the given Promise is resolved, or\n * will be failed when the given Promise is rejected.\n * @template U\n * @export\n */\n static notAbortable(promise) {\n return new shaka.util.AbortableOperation(\n promise,\n // abort() here will return a Promise which is resolved when the input\n // promise either resolves or fails.\n () => promise.catch(() => {}));\n }\n\n /**\n * @override\n * @export\n */\n abort() {\n if (!this.abortPromise_) {\n this.abortPromise_ = this.onAbort_();\n }\n return this.abortPromise_;\n }\n\n /**\n * @param {!Array.} operations\n * @return {!shaka.util.AbortableOperation} An operation which is resolved\n * when all operations are successful and fails when any operation fails.\n * For this operation, abort() aborts all given operations.\n * @export\n */\n static all(operations) {\n return new shaka.util.AbortableOperation(\n Promise.all(operations.map((op) => op.promise)),\n () => Promise.all(operations.map((op) => op.abort())));\n }\n\n /**\n * @override\n * @export\n */\n finally(onFinal) {\n this.promise.then((value) => onFinal(true), (e) => onFinal(false));\n return this;\n }\n\n /**\n * @param {(undefined|\n * function(T):U|\n * function(T):!Promise.|\n * function(T):!shaka.util.AbortableOperation.)} onSuccess\n * A callback to be invoked after this operation is complete, to chain to\n * another operation. The callback can return a plain value, a Promise to\n * an asynchronous value, or another AbortableOperation.\n * @param {function(*)=} onError\n * An optional callback to be invoked if this operation fails, to perform\n * some cleanup or error handling. Analogous to the second parameter of\n * Promise.prototype.then.\n * @return {!shaka.util.AbortableOperation.} An operation which is resolved\n * when this operation and the operation started by the callback are both\n * complete.\n * @template U\n * @export\n */\n chain(onSuccess, onError) {\n const newPromise = new shaka.util.PublicPromise();\n const abortError = shaka.util.AbortableOperation.abortError();\n\n // If called before \"this\" completes, just abort \"this\".\n let abort = () => {\n newPromise.reject(abortError);\n return this.abort();\n };\n\n const makeCallback = (isSuccess) => {\n return (value) => {\n if (this.abortPromise_ && isSuccess) {\n // If \"this\" is not abortable(), or if abort() is called after \"this\"\n // is complete but before the next stage in the chain begins, we\n // should stop right away.\n newPromise.reject(abortError);\n return;\n }\n\n const cb = isSuccess ? onSuccess : onError;\n if (!cb) {\n // No callback? Pass it along.\n const next = isSuccess ? newPromise.resolve : newPromise.reject;\n next(value);\n return;\n }\n\n // Call the callback, interpret the return value, set the Promise state,\n // and get the next abort function.\n abort = shaka.util.AbortableOperation.wrapChainCallback_(\n cb, value, newPromise);\n };\n };\n this.promise.then(makeCallback(true), makeCallback(false));\n\n return new shaka.util.AbortableOperation(\n newPromise,\n // By creating a closure around abort(), we can update the value of\n // abort() at various stages.\n () => abort());\n }\n\n /**\n * @param {(function(T):U|\n * function(T):!Promise.|\n * function(T):!shaka.util.AbortableOperation.|\n * function(*))} callback\n * A callback to be invoked with the given value.\n * @param {T} value\n * @param {!shaka.util.PublicPromise} newPromise The promise for the next\n * stage in the chain.\n * @return {function():!Promise} The next abort() function for the chain.\n * @private\n * @template T, U\n */\n static wrapChainCallback_(callback, value, newPromise) {\n try {\n const ret = callback(value);\n\n if (ret && ret.promise && ret.abort) {\n // This is an abortable operation, with its own abort() method.\n // After this point, abort() should abort the operation from the\n // callback, and the new promise should be tied to the promise\n // from the callback's operation.\n newPromise.resolve(ret.promise);\n // This used to say \"return ret.abort;\", but it caused subtle issues by\n // unbinding part of the abort chain. There is now a test to ensure\n // that we don't call abort with the wrong \"this\".\n return () => ret.abort();\n } else {\n // This is a Promise or a plain value, and this step cannot be aborted.\n newPromise.resolve(ret);\n // Abort is complete when the returned value/Promise is resolved or\n // fails, but never fails itself nor returns a value.\n return () => Promise.resolve(ret).then(() => {}, () => {});\n }\n } catch (exception) {\n // The callback threw an exception or error. Reject the new Promise and\n // resolve any future abort call right away.\n newPromise.reject(exception);\n return () => Promise.resolve();\n }\n }\n};\n\n/**\n * @const {!Promise.}\n * @exportInterface\n */\n// eslint-disable-next-line no-restricted-syntax\nshaka.util.AbortableOperation.prototype.promise;\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.util.FakeEvent');\n\ngoog.require('goog.asserts');\n\n\n/**\n * @summary Create an Event work-alike object based on the provided dictionary.\n * The event should contain all of the same properties from the dict.\n *\n * @extends {Event}\n * @export\n */\nshaka.util.FakeEvent = class {\n /**\n * @param {!Event} event\n * @return {!shaka.util.FakeEvent}\n */\n static fromRealEvent(event) {\n const fakeEvent = new shaka.util.FakeEvent(event.type);\n for (const key in event) {\n Object.defineProperty(fakeEvent, key, {\n value: event[key],\n writable: true,\n enumerable: true,\n });\n }\n return fakeEvent;\n }\n\n /**\n * Allows us to tell the compiler that the dictionary \"map\" is actually a\n * generic object, for backwards compatibility.\n * @param {!Map.} dict\n * @return {!Object}\n * @suppress {invalidCasts}\n * @private\n */\n static recastDictAsObject_(dict) {\n goog.asserts.assert(!(dict instanceof Map), 'dict should not be a map');\n return /** @type {!Object} */ (dict);\n }\n\n /**\n * @param {string} type\n * @param {Map.=} dict\n */\n constructor(type, dict) {\n if (dict) {\n if (dict instanceof Map) {\n // Take properties from dict if present.\n for (const key of dict.keys()) {\n Object.defineProperty(this, key, {\n value: dict.get(key),\n writable: true,\n enumerable: true,\n });\n }\n } else {\n // For backwards compatibility with external apps that may make use of\n // this public constructor, this should still accept generic objects.\n const obj = shaka.util.FakeEvent.recastDictAsObject_(dict);\n for (const key in obj) {\n Object.defineProperty(this, key, {\n value: obj[key],\n writable: true,\n enumerable: true,\n });\n }\n }\n }\n\n // The properties below cannot be set by the dict. They are all provided\n // for compatibility with native events.\n\n /** @const {boolean} */\n this.bubbles = false;\n\n /** @type {boolean} */\n this.cancelable = false;\n\n /** @type {boolean} */\n this.defaultPrevented = false;\n\n /**\n * According to MDN, Chrome uses high-res timers instead of epoch time.\n * Follow suit so that timeStamps on FakeEvents use the same base as\n * on native Events.\n * @const {number}\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Event/timeStamp\n */\n this.timeStamp = window.performance && window.performance.now ?\n window.performance.now() : Date.now();\n\n /** @const {string} */\n this.type = type;\n\n /** @const {boolean} */\n this.isTrusted = false;\n\n /** @type {EventTarget} */\n this.currentTarget = null;\n\n /** @type {EventTarget} */\n this.target = null;\n\n /**\n * Non-standard property read by FakeEventTarget to stop processing\n * listeners.\n * @type {boolean}\n */\n this.stopped = false;\n }\n\n /**\n * Prevents the default action of the event. Has no effect if the event isn't\n * cancellable.\n * @override\n */\n preventDefault() {\n if (this.cancelable) {\n this.defaultPrevented = true;\n }\n }\n\n /**\n * Stops processing event listeners for this event. Provided for\n * compatibility with native Events.\n * @override\n */\n stopImmediatePropagation() {\n this.stopped = true;\n }\n\n /**\n * Does nothing, since FakeEvents do not bubble. Provided for compatibility\n * with native Events.\n * @override\n */\n stopPropagation() {}\n};\n\n\n/**\n * An internal enum that contains the string values of all of the player events.\n * This exists primarily to act as an implicit list of events, for tests.\n *\n * @enum {string}\n */\nshaka.util.FakeEvent.EventName = {\n AbrStatusChanged: 'abrstatuschanged',\n Adaptation: 'adaptation',\n AudioTrackChanged: 'audiotrackchanged',\n Buffering: 'buffering',\n Complete: 'complete',\n DownloadFailed: 'downloadfailed',\n DownloadHeadersReceived: 'downloadheadersreceived',\n DrmSessionUpdate: 'drmsessionupdate',\n Emsg: 'emsg',\n Prft: 'prft',\n Error: 'error',\n ExpirationUpdated: 'expirationupdated',\n FirstQuartile: 'firstquartile',\n GapJumped: 'gapjumped',\n KeyStatusChanged: 'keystatuschanged',\n Loaded: 'loaded',\n Loading: 'loading',\n ManifestParsed: 'manifestparsed',\n ManifestUpdated: 'manifestupdated',\n MediaQualityChanged: 'mediaqualitychanged',\n MediaSourceRecovered: 'mediasourcerecovered',\n Metadata: 'metadata',\n Midpoint: 'midpoint',\n NoSpatialVideoInfoEvent: 'nospatialvideoinfo',\n OnStateChange: 'onstatechange',\n RateChange: 'ratechange',\n SegmentAppended: 'segmentappended',\n SessionDataEvent: 'sessiondata',\n SpatialVideoInfoEvent: 'spatialvideoinfo',\n StallDetected: 'stalldetected',\n Started: 'started',\n StateChanged: 'statechanged',\n Streaming: 'streaming',\n TextChanged: 'textchanged',\n TextTrackVisibility: 'texttrackvisibility',\n ThirdQuartile: 'thirdquartile',\n TimelineRegionAdded: 'timelineregionadded',\n TimelineRegionEnter: 'timelineregionenter',\n TimelineRegionExit: 'timelineregionexit',\n TracksChanged: 'trackschanged',\n Unloading: 'unloading',\n VariantChanged: 'variantchanged',\n};\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.util.FakeEventTarget');\n\ngoog.require('goog.asserts');\ngoog.require('shaka.log');\ngoog.require('shaka.util.FakeEvent');\ngoog.require('shaka.util.IReleasable');\ngoog.require('shaka.util.MultiMap');\n\n\n/**\n * @summary A work-alike for EventTarget. Only DOM elements may be true\n * EventTargets, but this can be used as a base class to provide event dispatch\n * to non-DOM classes. Only FakeEvents should be dispatched.\n *\n * @implements {EventTarget}\n * @implements {shaka.util.IReleasable}\n * @exportInterface\n */\nshaka.util.FakeEventTarget = class {\n /** */\n constructor() {\n /**\n * @private {shaka.util.MultiMap.}\n */\n this.listeners_ = new shaka.util.MultiMap();\n\n /**\n * The target of all dispatched events. Defaults to |this|.\n * @type {EventTarget}\n */\n this.dispatchTarget = this;\n }\n\n /**\n * Add an event listener to this object.\n *\n * @param {string} type The event type to listen for.\n * @param {shaka.util.FakeEventTarget.ListenerType} listener The callback or\n * listener object to invoke.\n * @param {(!AddEventListenerOptions|boolean)=} options Ignored.\n * @override\n * @exportInterface\n */\n addEventListener(type, listener, options) {\n if (!this.listeners_) {\n return;\n }\n this.listeners_.push(type, listener);\n }\n\n /**\n * Add an event listener to this object that is invoked for all events types\n * the object fires.\n *\n * @param {shaka.util.FakeEventTarget.ListenerType} listener The callback or\n * listener object to invoke.\n * @exportInterface\n */\n listenToAllEvents(listener) {\n this.addEventListener(shaka.util.FakeEventTarget.ALL_EVENTS_, listener);\n }\n\n /**\n * Remove an event listener from this object.\n *\n * @param {string} type The event type for which you wish to remove a\n * listener.\n * @param {shaka.util.FakeEventTarget.ListenerType} listener The callback or\n * listener object to remove.\n * @param {(EventListenerOptions|boolean)=} options Ignored.\n * @override\n * @exportInterface\n */\n removeEventListener(type, listener, options) {\n if (!this.listeners_) {\n return;\n }\n this.listeners_.remove(type, listener);\n }\n\n /**\n * Dispatch an event from this object.\n *\n * @param {!Event} event The event to be dispatched from this object.\n * @return {boolean} True if the default action was prevented.\n * @override\n * @exportInterface\n */\n dispatchEvent(event) {\n // In many browsers, it is complex to overwrite properties of actual Events.\n // Here we expect only to dispatch FakeEvents, which are simpler.\n goog.asserts.assert(event instanceof shaka.util.FakeEvent,\n 'FakeEventTarget can only dispatch FakeEvents!');\n\n if (!this.listeners_) {\n return true;\n }\n\n let listeners = this.listeners_.get(event.type) || [];\n const universalListeners =\n this.listeners_.get(shaka.util.FakeEventTarget.ALL_EVENTS_);\n if (universalListeners) {\n listeners = listeners.concat(universalListeners);\n }\n\n // Execute this event on listeners until the event has been stopped or we\n // run out of listeners.\n for (const listener of listeners) {\n // Do this every time, since events can be re-dispatched from handlers.\n event.target = this.dispatchTarget;\n event.currentTarget = this.dispatchTarget;\n\n try {\n // Check for the |handleEvent| member to test if this is a\n // |EventListener| instance or a basic function.\n if (listener.handleEvent) {\n listener.handleEvent(event);\n } else {\n // eslint-disable-next-line no-restricted-syntax\n listener.call(this, event);\n }\n } catch (exception) {\n // Exceptions during event handlers should not affect the caller,\n // but should appear on the console as uncaught, according to MDN:\n // https://mzl.la/2JXgwRo\n shaka.log.error('Uncaught exception in event handler', exception,\n exception ? exception.message : null,\n exception ? exception.stack : null);\n }\n\n if (event.stopped) {\n break;\n }\n }\n\n return event.defaultPrevented;\n }\n\n /**\n * @override\n * @exportInterface\n */\n release() {\n this.listeners_ = null;\n }\n};\n\n/**\n * These are the listener types defined in the closure extern for EventTarget.\n * @typedef {EventListener|function(!Event):*}\n * @exportInterface\n */\nshaka.util.FakeEventTarget.ListenerType;\n\n\n/**\n * @const {string}\n * @private\n */\nshaka.util.FakeEventTarget.ALL_EVENTS_ = 'All';\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.util.OperationManager');\n\ngoog.require('shaka.util.ArrayUtils');\ngoog.require('shaka.util.IDestroyable');\n\n/**\n * A utility for cleaning up AbortableOperations, to help simplify common\n * patterns and reduce code duplication.\n *\n * @implements {shaka.util.IDestroyable}\n */\nshaka.util.OperationManager = class {\n /** */\n constructor() {\n /** @private {!Array.} */\n this.operations_ = [];\n }\n\n /**\n * Manage an operation. This means aborting it on destroy() and removing it\n * from the management set when it complete.\n *\n * @param {!shaka.extern.IAbortableOperation} operation\n */\n manage(operation) {\n this.operations_.push(operation.finally(() => {\n shaka.util.ArrayUtils.remove(this.operations_, operation);\n }));\n }\n\n /** @override */\n destroy() {\n const cleanup = [];\n for (const op of this.operations_) {\n // Catch and ignore any failures. This silences error logs in the\n // JavaScript console about uncaught Promise failures.\n op.promise.catch(() => {});\n\n // Now abort the operation.\n cleanup.push(op.abort());\n }\n\n this.operations_ = [];\n return Promise.all(cleanup);\n }\n};\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.net.NetworkingEngine');\ngoog.provide('shaka.net.NetworkingEngine.AdvancedRequestType');\ngoog.provide('shaka.net.NetworkingEngine.RequestType');\ngoog.provide('shaka.net.NetworkingEngine.PendingRequest');\n\ngoog.require('goog.Uri');\ngoog.require('goog.asserts');\ngoog.require('shaka.net.Backoff');\ngoog.require('shaka.util.AbortableOperation');\ngoog.require('shaka.util.BufferUtils');\ngoog.require('shaka.util.Error');\ngoog.require('shaka.util.FakeEvent');\ngoog.require('shaka.util.FakeEventTarget');\ngoog.require('shaka.util.IDestroyable');\ngoog.require('shaka.util.ObjectUtils');\ngoog.require('shaka.util.OperationManager');\ngoog.require('shaka.util.Timer');\n\n\n/**\n * @event shaka.net.NetworkingEngine.RetryEvent\n * @description Fired when the networking engine receives a recoverable error\n * and retries.\n * @property {string} type\n * 'retry'\n * @property {?shaka.util.Error} error\n * The error that caused the retry. If it was a non-Shaka error, this is set\n * to null.\n * @exportDoc\n */\n\n\n/**\n * NetworkingEngine wraps all networking operations. This accepts plugins that\n * handle the actual request. A plugin is registered using registerScheme.\n * Each scheme has at most one plugin to handle the request.\n *\n * @implements {shaka.util.IDestroyable}\n * @export\n */\nshaka.net.NetworkingEngine = class extends shaka.util.FakeEventTarget {\n /**\n * @param {shaka.net.NetworkingEngine.onProgressUpdated=} onProgressUpdated\n * Called when\n * a progress event is triggered. Passed the duration, in milliseconds,\n * that the request took, the number of bytes transferred, and the boolean\n * of whether the switching is allowed.\n * @param {shaka.net.NetworkingEngine.OnHeadersReceived=} onHeadersReceived\n * Called when the headers are received for a download.\n * @param {shaka.net.NetworkingEngine.OnDownloadFailed=} onDownloadFailed\n * Called when a download fails, for any reason.\n * @param {shaka.net.NetworkingEngine.OnRequest=} onRequest\n * Called when a request is made\n * @param {shaka.net.NetworkingEngine.OnRetry=} onRetry\n * Called when a request retry is made\n * @param {shaka.net.NetworkingEngine.OnResponse=} onResponse\n * Called when receive the response\n */\n constructor(onProgressUpdated, onHeadersReceived, onDownloadFailed,\n onRequest, onRetry, onResponse) {\n super();\n\n /** @private {boolean} */\n this.destroyed_ = false;\n\n /** @private {!shaka.util.OperationManager} */\n this.operationManager_ = new shaka.util.OperationManager();\n\n /** @private {!Set.} */\n this.requestFilters_ = new Set();\n\n /** @private {!Set.} */\n this.responseFilters_ = new Set();\n\n /** @private {?shaka.net.NetworkingEngine.onProgressUpdated} */\n this.onProgressUpdated_ = onProgressUpdated || null;\n\n /** @private {?shaka.net.NetworkingEngine.OnHeadersReceived} */\n this.onHeadersReceived_ = onHeadersReceived || null;\n\n /** @private {?shaka.net.NetworkingEngine.OnDownloadFailed} */\n this.onDownloadFailed_ = onDownloadFailed || null;\n\n /** @private {?shaka.net.NetworkingEngine.OnRequest} */\n this.onRequest_ = onRequest || null;\n\n /** @private {?shaka.net.NetworkingEngine.OnRetry} */\n this.onRetry_ = onRetry || null;\n\n /** @private {?shaka.net.NetworkingEngine.OnResponse} */\n this.onResponse_ = onResponse || null;\n\n /** @private {boolean} */\n this.forceHTTP_ = false;\n\n /** @private {boolean} */\n this.forceHTTPS_ = false;\n\n /** @private {number} */\n this.minBytesForProgressEvents_ = 16e3;\n }\n\n /**\n * @param {boolean} forceHTTP\n * @export\n */\n setForceHTTP(forceHTTP) {\n this.forceHTTP_ = forceHTTP;\n }\n\n /**\n * @param {boolean} forceHTTPS\n * @export\n */\n setForceHTTPS(forceHTTPS) {\n this.forceHTTPS_ = forceHTTPS;\n }\n\n\n /**\n * @param {number} minBytes\n */\n setMinBytesForProgressEvents(minBytes) {\n this.minBytesForProgressEvents_ = minBytes;\n }\n\n /**\n * Registers a scheme plugin. This plugin will handle all requests with the\n * given scheme. If a plugin with the same scheme already exists, it is\n * replaced, unless the existing plugin is of higher priority.\n * If no priority is provided, this defaults to the highest priority of\n * APPLICATION.\n *\n * @param {string} scheme\n * @param {shaka.extern.SchemePlugin} plugin\n * @param {number=} priority\n * @param {boolean=} progressSupport\n * @export\n */\n static registerScheme(scheme, plugin, priority, progressSupport = false) {\n goog.asserts.assert(\n priority == undefined || priority > 0, 'explicit priority must be > 0');\n priority =\n priority || shaka.net.NetworkingEngine.PluginPriority.APPLICATION;\n const existing = shaka.net.NetworkingEngine.schemes_[scheme];\n if (!existing || priority >= existing.priority) {\n shaka.net.NetworkingEngine.schemes_[scheme] = {\n priority: priority,\n plugin: plugin,\n progressSupport: progressSupport,\n };\n }\n }\n\n /**\n * Removes a scheme plugin.\n *\n * @param {string} scheme\n * @export\n */\n static unregisterScheme(scheme) {\n delete shaka.net.NetworkingEngine.schemes_[scheme];\n }\n\n /**\n * Copies all of the filters from this networking engine into another.\n * @param {!shaka.net.NetworkingEngine} other\n */\n copyFiltersInto(other) {\n for (const filter of this.requestFilters_) {\n other.requestFilters_.add(filter);\n }\n for (const filter of this.responseFilters_) {\n other.responseFilters_.add(filter);\n }\n }\n\n /**\n * Registers a new request filter. All filters are applied in the order they\n * are registered.\n *\n * @param {shaka.extern.RequestFilter} filter\n * @export\n */\n registerRequestFilter(filter) {\n this.requestFilters_.add(filter);\n }\n\n /**\n * Removes a request filter.\n *\n * @param {shaka.extern.RequestFilter} filter\n * @export\n */\n unregisterRequestFilter(filter) {\n this.requestFilters_.delete(filter);\n }\n\n /**\n * Clears all request filters.\n *\n * @export\n */\n clearAllRequestFilters() {\n this.requestFilters_.clear();\n }\n\n /**\n * Registers a new response filter. All filters are applied in the order they\n * are registered.\n *\n * @param {shaka.extern.ResponseFilter} filter\n * @export\n */\n registerResponseFilter(filter) {\n this.responseFilters_.add(filter);\n }\n\n /**\n * Removes a response filter.\n *\n * @param {shaka.extern.ResponseFilter} filter\n * @export\n */\n unregisterResponseFilter(filter) {\n this.responseFilters_.delete(filter);\n }\n\n /**\n * Clears all response filters.\n *\n * @export\n */\n clearAllResponseFilters() {\n this.responseFilters_.clear();\n }\n\n /**\n * Gets a copy of the default retry parameters.\n *\n * @return {shaka.extern.RetryParameters}\n *\n * NOTE: The implementation moved to shaka.net.Backoff to avoid a circular\n * dependency between the two classes.\n *\n * @export\n */\n static defaultRetryParameters() {\n return shaka.net.Backoff.defaultRetryParameters();\n }\n\n /**\n * Makes a simple network request for the given URIs.\n *\n * @param {!Array.} uris\n * @param {shaka.extern.RetryParameters} retryParams\n * @param {?function(BufferSource):!Promise=} streamDataCallback\n * @return {shaka.extern.Request}\n * @export\n */\n static makeRequest(uris, retryParams, streamDataCallback = null) {\n return {\n uris: uris,\n method: 'GET',\n body: null,\n headers: {},\n allowCrossSiteCredentials: false,\n retryParameters: retryParams,\n licenseRequestType: null,\n sessionId: null,\n drmInfo: null,\n initData: null,\n initDataType: null,\n streamDataCallback: streamDataCallback,\n };\n }\n\n /**\n * @override\n * @export\n */\n destroy() {\n this.destroyed_ = true;\n this.requestFilters_.clear();\n this.responseFilters_.clear();\n\n // FakeEventTarget implements IReleasable\n super.release();\n\n return this.operationManager_.destroy();\n }\n\n /**\n * Makes a network request and returns the resulting data.\n *\n * @param {shaka.net.NetworkingEngine.RequestType} type\n * @param {shaka.extern.Request} request\n * @param {shaka.extern.RequestContext=} context\n * @return {!shaka.net.NetworkingEngine.PendingRequest}\n * @export\n */\n request(type, request, context) {\n const ObjectUtils = shaka.util.ObjectUtils;\n const numBytesRemainingObj =\n new shaka.net.NetworkingEngine.NumBytesRemainingClass();\n\n // Reject all requests made after destroy is called.\n if (this.destroyed_) {\n const p = Promise.reject(new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.PLAYER,\n shaka.util.Error.Code.OPERATION_ABORTED));\n // Silence uncaught rejection errors, which may otherwise occur any place\n // we don't explicitly handle aborted operations.\n p.catch(() => {});\n return new shaka.net.NetworkingEngine.PendingRequest(\n p, () => Promise.resolve(), numBytesRemainingObj);\n }\n\n goog.asserts.assert(\n request.uris && request.uris.length, 'Request without URIs!');\n\n // If a request comes from outside the library, some parameters may be left\n // undefined. To make it easier for application developers, we will fill\n // them in with defaults if necessary.\n //\n // We clone retryParameters and uris so that if a filter modifies the\n // request, it doesn't contaminate future requests.\n request.method = request.method || 'GET';\n request.headers = request.headers || {};\n request.retryParameters = request.retryParameters ?\n ObjectUtils.cloneObject(request.retryParameters) :\n shaka.net.NetworkingEngine.defaultRetryParameters();\n request.uris = ObjectUtils.cloneObject(request.uris);\n\n // Apply the registered filters to the request.\n const requestFilterOperation = this.filterRequest_(type, request, context);\n const requestOperation = requestFilterOperation.chain(\n () => this.makeRequestWithRetry_(type, request, context,\n numBytesRemainingObj));\n const responseFilterOperation = requestOperation.chain(\n (responseAndGotProgress) =>\n this.filterResponse_(type, responseAndGotProgress, context));\n\n // Keep track of time spent in filters.\n const requestFilterStartTime = Date.now();\n let requestFilterMs = 0;\n requestFilterOperation.promise.then(() => {\n requestFilterMs = Date.now() - requestFilterStartTime;\n }, () => {}); // Silence errors in this fork of the Promise chain.\n\n let responseFilterStartTime = 0;\n requestOperation.promise.then(() => {\n responseFilterStartTime = Date.now();\n }, () => {}); // Silence errors in this fork of the Promise chain.\n\n const op = responseFilterOperation.chain((responseAndGotProgress) => {\n const responseFilterMs = Date.now() - responseFilterStartTime;\n const response = responseAndGotProgress.response;\n response.timeMs += requestFilterMs;\n response.timeMs += responseFilterMs;\n if (!responseAndGotProgress.gotProgress &&\n this.onProgressUpdated_ &&\n !response.fromCache &&\n request.method != 'HEAD' &&\n type == shaka.net.NetworkingEngine.RequestType.SEGMENT) {\n const allowSwitch = this.allowSwitch_(context);\n this.onProgressUpdated_(\n response.timeMs, response.data.byteLength, allowSwitch);\n }\n if (this.onResponse_) {\n this.onResponse_(type, response, context);\n }\n return response;\n }, (e) => {\n // Any error thrown from elsewhere should be recategorized as CRITICAL\n // here. This is because by the time it gets here, we've exhausted\n // retries.\n if (e) {\n goog.asserts.assert(e instanceof shaka.util.Error, 'Wrong error type');\n e.severity = shaka.util.Error.Severity.CRITICAL;\n }\n\n throw e;\n });\n\n // Return the pending request, which carries the response operation, and the\n // number of bytes remaining to be downloaded, updated by the progress\n // events. Add the operation to the manager for later cleanup.\n const pendingRequest =\n new shaka.net.NetworkingEngine.PendingRequest(\n op.promise, () => op.abort(), numBytesRemainingObj);\n this.operationManager_.manage(pendingRequest);\n return pendingRequest;\n }\n\n /**\n * @param {shaka.net.NetworkingEngine.RequestType} type\n * @param {shaka.extern.Request} request\n * @param {shaka.extern.RequestContext=} context\n * @return {!shaka.util.AbortableOperation.}\n * @private\n */\n filterRequest_(type, request, context) {\n let filterOperation = shaka.util.AbortableOperation.completed(undefined);\n\n const applyFilter = (requestFilter) => {\n filterOperation = filterOperation.chain(() => {\n if (request.body) {\n // TODO: For v4.0 we should remove this or change to always pass a\n // Uint8Array. To make it easier for apps to write filters, it may be\n // better to always pass a Uint8Array so they know what they are\n // getting; but we shouldn't use ArrayBuffer since that would require\n // copying buffers if this is a partial view.\n request.body = shaka.util.BufferUtils.toArrayBuffer(request.body);\n }\n return requestFilter(type, request, context);\n });\n };\n\n if (this.onRequest_) {\n applyFilter(this.onRequest_);\n }\n\n for (const requestFilter of this.requestFilters_) {\n // Request filters are run sequentially.\n applyFilter(requestFilter);\n }\n\n // Catch any errors thrown by request filters, and substitute\n // them with a Shaka-native error.\n return filterOperation.chain(undefined, (e) => {\n if (e instanceof shaka.util.Error &&\n e.code == shaka.util.Error.Code.OPERATION_ABORTED) {\n // Don't change anything if the operation was aborted.\n throw e;\n }\n\n throw new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.NETWORK,\n shaka.util.Error.Code.REQUEST_FILTER_ERROR, e);\n });\n }\n\n /**\n * @param {shaka.net.NetworkingEngine.RequestType} type\n * @param {shaka.extern.Request} request\n * @param {(shaka.extern.RequestContext|undefined)} context\n * @param {shaka.net.NetworkingEngine.NumBytesRemainingClass}\n * numBytesRemainingObj\n * @return {!shaka.extern.IAbortableOperation.<\n * shaka.net.NetworkingEngine.ResponseAndGotProgress>}\n * @private\n */\n makeRequestWithRetry_(type, request, context, numBytesRemainingObj) {\n const backoff = new shaka.net.Backoff(\n request.retryParameters, /* autoReset= */ false);\n const index = 0;\n return this.send_(\n type, request, context, backoff, index, /* lastError= */ null,\n numBytesRemainingObj);\n }\n\n /**\n * Sends the given request to the correct plugin and retry using Backoff.\n *\n * @param {shaka.net.NetworkingEngine.RequestType} type\n * @param {shaka.extern.Request} request\n * @param {(shaka.extern.RequestContext|undefined)} context\n * @param {!shaka.net.Backoff} backoff\n * @param {number} index\n * @param {?shaka.util.Error} lastError\n * @param {shaka.net.NetworkingEngine.NumBytesRemainingClass}\n * numBytesRemainingObj\n * @return {!shaka.extern.IAbortableOperation.<\n * shaka.net.NetworkingEngine.ResponseAndGotProgress>}\n * @private\n */\n send_(type, request, context, backoff, index, lastError,\n numBytesRemainingObj) {\n if (this.forceHTTP_) {\n request.uris[index] = request.uris[index].replace('https://', 'http://');\n }\n if (this.forceHTTPS_) {\n request.uris[index] = request.uris[index].replace('http://', 'https://');\n }\n\n if (index > 0 && this.onRetry_) {\n const newUri = request.uris[index];\n const oldUri = request.uris[index - 1];\n this.onRetry_(type, context, newUri, oldUri);\n }\n\n const uri = new goog.Uri(request.uris[index]);\n let scheme = uri.getScheme();\n // Whether it got a progress event.\n let gotProgress = false;\n if (!scheme) {\n // If there is no scheme, infer one from the location.\n scheme = shaka.net.NetworkingEngine.getLocationProtocol_();\n goog.asserts.assert(\n scheme[scheme.length - 1] == ':',\n 'location.protocol expected to end with a colon!');\n // Drop the colon.\n scheme = scheme.slice(0, -1);\n\n // Override the original URI to make the scheme explicit.\n uri.setScheme(scheme);\n request.uris[index] = uri.toString();\n }\n\n // Schemes are meant to be case-insensitive.\n // See https://github.com/shaka-project/shaka-player/issues/2173\n // and https://tools.ietf.org/html/rfc3986#section-3.1\n scheme = scheme.toLowerCase();\n\n const object = shaka.net.NetworkingEngine.schemes_[scheme];\n const plugin = object ? object.plugin : null;\n if (!plugin) {\n return shaka.util.AbortableOperation.failed(\n new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.NETWORK,\n shaka.util.Error.Code.UNSUPPORTED_SCHEME,\n uri));\n }\n const progressSupport = object.progressSupport;\n\n\n // Every attempt must have an associated backoff.attempt() call so that the\n // accounting is correct.\n const backoffOperation =\n shaka.util.AbortableOperation.notAbortable(backoff.attempt());\n\n /** @type {?shaka.util.Timer} */\n let connectionTimer = null;\n\n /** @type {?shaka.util.Timer} */\n let stallTimer = null;\n\n let aborted = false;\n\n let headersReceivedCalled = false;\n\n let startTimeMs;\n const sendOperation = backoffOperation.chain(() => {\n if (this.destroyed_) {\n return shaka.util.AbortableOperation.aborted();\n }\n\n startTimeMs = Date.now();\n const segment = shaka.net.NetworkingEngine.RequestType.SEGMENT;\n let packetNumber = 0;\n\n const progressUpdated = (time, bytes, numBytesRemaining) => {\n if (connectionTimer) {\n connectionTimer.stop();\n }\n if (stallTimer) {\n stallTimer.tickAfter(stallTimeoutMs / 1000);\n }\n if (this.onProgressUpdated_ && type == segment) {\n packetNumber++;\n request.packetNumber = packetNumber;\n const allowSwitch = this.allowSwitch_(context);\n this.onProgressUpdated_(time, bytes, allowSwitch, request);\n gotProgress = true;\n numBytesRemainingObj.setBytes(numBytesRemaining);\n }\n };\n const headersReceived = (headers) => {\n headersReceivedCalled = true;\n request.timeToFirstByte = Date.now() -\n /** @type {number} */ (request.requestStartTime);\n if (this.onHeadersReceived_) {\n this.onHeadersReceived_(headers, request, type);\n }\n };\n request.requestStartTime = Date.now();\n\n const requestPlugin = plugin(\n request.uris[index], request, type, progressUpdated, headersReceived,\n {\n minBytesForProgressEvents: this.minBytesForProgressEvents_,\n });\n\n if (!progressSupport) {\n return requestPlugin;\n }\n\n const connectionTimeoutMs = request.retryParameters.connectionTimeout;\n if (connectionTimeoutMs) {\n connectionTimer = new shaka.util.Timer(() => {\n aborted = true;\n requestPlugin.abort();\n });\n\n connectionTimer.tickAfter(connectionTimeoutMs / 1000);\n }\n\n const stallTimeoutMs = request.retryParameters.stallTimeout;\n if (stallTimeoutMs) {\n stallTimer = new shaka.util.Timer(() => {\n aborted = true;\n requestPlugin.abort();\n });\n }\n\n return requestPlugin;\n }).chain((response) => {\n if (connectionTimer) {\n connectionTimer.stop();\n }\n if (stallTimer) {\n stallTimer.stop();\n }\n if (response.timeMs == undefined) {\n response.timeMs = Date.now() - startTimeMs;\n }\n const responseAndGotProgress = {\n response: response,\n gotProgress: gotProgress,\n };\n if (!headersReceivedCalled) {\n // The plugin did not call headersReceived, perhaps because it is not\n // able to track that information. So, fire the event manually.\n if (this.onHeadersReceived_) {\n this.onHeadersReceived_(response.headers, request, type);\n }\n }\n\n return responseAndGotProgress;\n }, (error) => {\n if (connectionTimer) {\n connectionTimer.stop();\n }\n if (stallTimer) {\n stallTimer.stop();\n }\n if (this.onDownloadFailed_) {\n let shakaError = null;\n let httpResponseCode = 0;\n if (error instanceof shaka.util.Error) {\n shakaError = error;\n if (error.code == shaka.util.Error.Code.BAD_HTTP_STATUS) {\n httpResponseCode = /** @type {number} */ (error.data[1]);\n }\n }\n this.onDownloadFailed_(request, shakaError, httpResponseCode, aborted);\n }\n if (this.destroyed_) {\n return shaka.util.AbortableOperation.aborted();\n }\n\n if (aborted) {\n // It is necessary to change the error code to the correct one because\n // otherwise the retry logic would not work.\n error = new shaka.util.Error(\n shaka.util.Error.Severity.RECOVERABLE,\n shaka.util.Error.Category.NETWORK,\n shaka.util.Error.Code.TIMEOUT,\n request.uris[index], type);\n }\n\n if (error instanceof shaka.util.Error) {\n if (error.code == shaka.util.Error.Code.OPERATION_ABORTED) {\n // Don't change anything if the operation was aborted.\n throw error;\n } else if (error.code == shaka.util.Error.Code.ATTEMPTS_EXHAUSTED) {\n goog.asserts.assert(lastError, 'Should have last error');\n throw lastError;\n }\n\n if (error.severity == shaka.util.Error.Severity.RECOVERABLE) {\n const data = (new Map()).set('error', error);\n const event = new shaka.util.FakeEvent('retry', data);\n this.dispatchEvent(event);\n\n // Move to the next URI.\n index = (index + 1) % request.uris.length;\n return this.send_(\n type, request, context, backoff, index, error,\n numBytesRemainingObj);\n }\n }\n\n // The error was not recoverable, so do not try again.\n throw error;\n });\n\n return sendOperation;\n }\n\n /**\n * @param {shaka.net.NetworkingEngine.RequestType} type\n * @param {shaka.net.NetworkingEngine.ResponseAndGotProgress}\n * responseAndGotProgress\n * @param {shaka.extern.RequestContext=} context\n * @return {!shaka.extern.IAbortableOperation.<\n * shaka.net.NetworkingEngine.ResponseAndGotProgress>}\n * @private\n */\n filterResponse_(type, responseAndGotProgress, context) {\n let filterOperation = shaka.util.AbortableOperation.completed(undefined);\n for (const responseFilter of this.responseFilters_) {\n // Response filters are run sequentially.\n filterOperation = filterOperation.chain(() => {\n const resp = responseAndGotProgress.response;\n if (resp.data) {\n // TODO: See TODO in filterRequest_.\n resp.data = shaka.util.BufferUtils.toArrayBuffer(resp.data);\n }\n return responseFilter(type, resp, context);\n });\n }\n // If successful, return the filtered response with whether it got\n // progress.\n return filterOperation.chain(() => {\n return responseAndGotProgress;\n }, (e) => {\n // Catch any errors thrown by request filters, and substitute\n // them with a Shaka-native error.\n\n // The error is assumed to be critical if the original wasn't a Shaka\n // error.\n let severity = shaka.util.Error.Severity.CRITICAL;\n if (e instanceof shaka.util.Error) {\n if (e.code == shaka.util.Error.Code.OPERATION_ABORTED) {\n // Don't change anything if the operation was aborted.\n throw e;\n }\n\n severity = e.severity;\n }\n\n throw new shaka.util.Error(\n severity,\n shaka.util.Error.Category.NETWORK,\n shaka.util.Error.Code.RESPONSE_FILTER_ERROR, e);\n });\n }\n\n /**\n * @param {(shaka.extern.RequestContext|undefined)} context\n * @return {boolean}\n * @private\n */\n allowSwitch_(context) {\n if (context) {\n const segment = context.segment;\n const stream = context.stream;\n if (segment && stream && stream.fastSwitching) {\n if (segment.isPartial()) {\n return false;\n }\n }\n }\n return true;\n }\n\n /**\n * This is here only for testability. We can't mock location in our tests on\n * all browsers, so instead we mock this.\n *\n * @return {string} The value of location.protocol.\n * @private\n */\n static getLocationProtocol_() {\n return location.protocol;\n }\n};\n\n/**\n * A wrapper class for the number of bytes remaining to be downloaded for the\n * request.\n * Instead of using PendingRequest directly, this class is needed to be sent to\n * plugin as a parameter, and a Promise is returned, before PendingRequest is\n * created.\n *\n * @export\n */\nshaka.net.NetworkingEngine.NumBytesRemainingClass = class {\n /**\n * Constructor\n */\n constructor() {\n /** @private {number} */\n this.bytesToLoad_ = 0;\n }\n\n /**\n * @param {number} bytesToLoad\n */\n setBytes(bytesToLoad) {\n this.bytesToLoad_ = bytesToLoad;\n }\n\n /**\n * @return {number}\n */\n getBytes() {\n return this.bytesToLoad_;\n }\n};\n\n/**\n * A pending network request. This can track the current progress of the\n * download, and allows the request to be aborted if the network is slow.\n *\n * @implements {shaka.extern.IAbortableOperation.}\n * @extends {shaka.util.AbortableOperation}\n * @export\n */\nshaka.net.NetworkingEngine.PendingRequest =\nclass extends shaka.util.AbortableOperation {\n /**\n * @param {!Promise} promise\n * A Promise which represents the underlying operation. It is resolved\n * when the operation is complete, and rejected if the operation fails or\n * is aborted. Aborted operations should be rejected with a\n * shaka.util.Error object using the error code OPERATION_ABORTED.\n * @param {function():!Promise} onAbort\n * Will be called by this object to abort the underlying operation. This\n * is not cancelation, and will not necessarily result in any work being\n * undone. abort() should return a Promise which is resolved when the\n * underlying operation has been aborted. The returned Promise should\n * never be rejected.\n * @param {shaka.net.NetworkingEngine.NumBytesRemainingClass}\n * numBytesRemainingObj\n */\n constructor(promise, onAbort, numBytesRemainingObj) {\n super(promise, onAbort);\n\n /** @private {shaka.net.NetworkingEngine.NumBytesRemainingClass} */\n this.bytesRemaining_ = numBytesRemainingObj;\n }\n\n /**\n * @return {number}\n */\n getBytesRemaining() {\n return this.bytesRemaining_.getBytes();\n }\n};\n\n/**\n * Request types. Allows a filter to decide which requests to read/alter.\n *\n * @enum {number}\n * @export\n */\nshaka.net.NetworkingEngine.RequestType = {\n 'MANIFEST': 0,\n 'SEGMENT': 1,\n 'LICENSE': 2,\n 'APP': 3,\n 'TIMING': 4,\n 'SERVER_CERTIFICATE': 5,\n 'KEY': 6,\n 'ADS': 7,\n 'CONTENT_STEERING': 8,\n};\n\n/**\n * A more advanced form of the RequestType structure, meant to describe\n * sub-types of basic request types.\n * For example, an INIT_SEGMENT is a sub-type of SEGMENT.\n * This is meant to allow for more specificity to be added to the request type\n * data, without breaking backwards compatibility.\n *\n * @enum {number}\n * @export\n */\nshaka.net.NetworkingEngine.AdvancedRequestType = {\n 'INIT_SEGMENT': 0,\n 'MEDIA_SEGMENT': 1,\n 'MEDIA_PLAYLIST': 2,\n 'MASTER_PLAYLIST': 3,\n 'MPD': 4,\n 'MSS': 5,\n 'MPD_PATCH': 6,\n 'MEDIATAILOR_SESSION_INFO': 7,\n 'MEDIATAILOR_TRACKING_INFO': 8,\n 'MEDIATAILOR_STATIC_RESOURCE': 9,\n 'MEDIATAILOR_TRACKING_EVENT': 10,\n 'INTERSTITIAL_ASSET_LIST': 11,\n 'INTERSTITIAL_AD_URL': 12,\n};\n\n\n/**\n * Priority level for network scheme plugins.\n * If multiple plugins are provided for the same scheme, only the\n * highest-priority one is used.\n *\n * @enum {number}\n * @export\n */\nshaka.net.NetworkingEngine.PluginPriority = {\n 'FALLBACK': 1,\n 'PREFERRED': 2,\n 'APPLICATION': 3,\n};\n\n\n/**\n * @typedef {{\n * plugin: shaka.extern.SchemePlugin,\n * priority: number,\n * progressSupport: boolean\n * }}\n * @property {shaka.extern.SchemePlugin} plugin\n * The associated plugin.\n * @property {number} priority\n * The plugin's priority.\n * @property {boolean} progressSupport\n * The plugin's supports progress events\n */\nshaka.net.NetworkingEngine.SchemeObject;\n\n\n/**\n * Contains the scheme plugins.\n *\n * @private {!Object.}\n */\nshaka.net.NetworkingEngine.schemes_ = {};\n\n/**\n * @typedef {{\n * response: shaka.extern.Response,\n * gotProgress: boolean\n * }}\n *\n * @description\n * Defines a response wrapper object, including the response object and whether\n * progress event is fired by the scheme plugin.\n *\n * @property {shaka.extern.Response} response\n * @property {boolean} gotProgress\n * @private\n */\nshaka.net.NetworkingEngine.ResponseAndGotProgress;\n\n\n/**\n * @typedef {function(\n * !Object.,\n * !shaka.extern.Request,\n * !shaka.net.NetworkingEngine.RequestType)}\n *\n * @description\n * A callback function that passes the shaka.extern.HeadersReceived along to\n * the player, plus some extra data.\n * @export\n */\nshaka.net.NetworkingEngine.OnHeadersReceived;\n\n/**\n * @typedef {function(\n * number,\n * number,\n * boolean,\n * shaka.extern.Request=)}\n *\n * @description\n * A callback that is passed the duration, in milliseconds,\n * that the request took, the number of bytes transferred, a boolean\n * representing whether the switching is allowed and a ref to the\n * original request.\n * @export\n */\nshaka.net.NetworkingEngine.onProgressUpdated;\n\n/**\n * @typedef {function(\n * !shaka.extern.Request,\n * ?shaka.util.Error,\n * number,\n * boolean)}\n *\n * @description\n * A callback function that notifies the player when a download fails, for any\n * reason (e.g. even if the download was aborted).\n * @export\n */\nshaka.net.NetworkingEngine.OnDownloadFailed;\n\n\n/**\n * @typedef {function(\n * !shaka.net.NetworkingEngine.RequestType,\n * !shaka.extern.Request,\n * (shaka.extern.RequestContext|undefined))}\n *\n * @description\n * A callback function called on every request\n * @export\n */\nshaka.net.NetworkingEngine.OnRequest;\n\n\n/**\n * @typedef {function(\n * !shaka.net.NetworkingEngine.RequestType,\n * (shaka.extern.RequestContext|undefined),\n * string,\n * string)}\n *\n * @description\n * A callback function called on every request retry. The first string is the\n * new URI and the second string is the old URI.\n * @export\n */\nshaka.net.NetworkingEngine.OnRetry;\n\n\n/**\n * @typedef {function(\n * !shaka.net.NetworkingEngine.RequestType,\n * !shaka.extern.Response,\n * (shaka.extern.RequestContext|undefined))}\n *\n * @description\n * A callback function called on every request\n * @export\n */\nshaka.net.NetworkingEngine.OnResponse;\n\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.util.Destroyer');\n\ngoog.require('shaka.util.Error');\ngoog.require('shaka.util.PublicPromise');\n\n\n/**\n * @summary\n * A utility class to help work with |shaka.util.IDestroyable| objects.\n *\n * @final\n */\nshaka.util.Destroyer = class {\n /**\n * @param {function():!Promise} callback\n * A callback to destroy an object. This callback will only be called once\n * regardless of how many times |destroy| is called.\n */\n constructor(callback) {\n /** @private {boolean} */\n this.destroyed_ = false;\n\n /** @private {!shaka.util.PublicPromise} */\n this.waitOnDestroy_ = new shaka.util.PublicPromise();\n\n /** @private {function():!Promise} */\n this.onDestroy_ = callback;\n }\n\n /**\n * Check if |destroy| has been called. This returning |true| does not mean\n * that the promise returned by |destroy| has resolved yet.\n *\n * @return {boolean}\n * @final\n */\n destroyed() {\n return this.destroyed_;\n }\n\n /**\n * Request that the destroy callback be called. Will return a promise that\n * will resolve once the callback terminates. The promise will never be\n * rejected.\n *\n * @return {!Promise}\n * @final\n */\n destroy() {\n if (this.destroyed_) {\n return this.waitOnDestroy_;\n }\n\n // We have started destroying this object, so we should never get here\n // again.\n this.destroyed_ = true;\n\n return this.onDestroy_().then(\n () => { this.waitOnDestroy_.resolve(); },\n () => { this.waitOnDestroy_.resolve(); });\n }\n\n /**\n * Checks if the object is destroyed and throws an error if it is.\n * @param {*=} error The inner error, if any.\n */\n ensureNotDestroyed(error) {\n if (this.destroyed_) {\n if (error instanceof shaka.util.Error &&\n error.code == shaka.util.Error.Code.OBJECT_DESTROYED) {\n throw error;\n }\n throw shaka.util.Destroyer.destroyedError(error);\n }\n }\n\n /**\n * @param {*=} error The inner error, if any.\n * @return {!shaka.util.Error}\n */\n static destroyedError(error) {\n return new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.PLAYER,\n shaka.util.Error.Code.OBJECT_DESTROYED,\n error);\n }\n};\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.util.Iterables');\n\n\n/**\n * Recreations of Array-like functions so that they work on any iterable\n * type.\n * @final\n */\nshaka.util.Iterables = class {\n /**\n * @param {!Iterable.} iterable\n * @param {function(FROM):TO} mapping\n * @return {!Iterable.}\n * @template FROM,TO\n */\n static map(iterable, mapping) {\n const array = [];\n for (const x of iterable) {\n array.push(mapping(x));\n }\n return array;\n }\n\n /**\n * @param {!Iterable.} iterable\n * @param {function(T):boolean} test\n * @return {boolean}\n * @template T\n */\n static every(iterable, test) {\n for (const x of iterable) {\n if (!test(x)) {\n return false;\n }\n }\n return true;\n }\n\n /**\n * @param {!Iterable.} iterable\n * @param {function(T):boolean} test\n * @return {boolean}\n * @template T\n */\n static some(iterable, test) {\n for (const x of iterable) {\n if (test(x)) {\n return true;\n }\n }\n return false;\n }\n\n /**\n * Iterate over an iterable object and return only the items that |filter|\n * returns true for.\n *\n * @param {!Iterable.} iterable\n * @param {function(T):boolean} filter\n * @return {!Array.}\n * @template T\n */\n static filter(iterable, filter) {\n const out = [];\n for (const x of iterable) {\n if (filter(x)) {\n out.push(x);\n }\n }\n return out;\n }\n};\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.util.MapUtils');\n\n\n/**\n * @summary A set of map/object utility functions.\n */\nshaka.util.MapUtils = class {\n /**\n * @param {!Object.} object\n * @return {!Map.}\n * @template KEY,VALUE\n */\n static asMap(object) {\n const map = new Map();\n for (const key of Object.keys(object)) {\n map.set(key, object[key]);\n }\n\n return map;\n }\n\n\n /**\n * @param {!Map.} map\n * @return {!Object.}\n * @template KEY,VALUE\n */\n static asObject(map) {\n const obj = {};\n map.forEach((value, key) => {\n obj[key] = value;\n });\n\n return obj;\n }\n\n /**\n * NOTE: This only works for simple value types and\n * will not be accurate if map values are objects!\n *\n * @param {Map.} map1\n * @param {Map.} map2\n * @return {boolean}\n * @template KEY,VALUE\n */\n static hasSameElements(map1, map2) {\n if (!map1 && !map2) {\n return true;\n } else if (map1 && !map2) {\n return false;\n } else if (map2 && !map1) {\n return false;\n }\n\n if (map1.size != map2.size) {\n return false;\n }\n\n for (const [key, val] of map1) {\n if (!map2.has(key)) {\n return false;\n }\n\n const val2 = map2.get(key);\n if (val2 != val || (val2 == undefined)) {\n return false;\n }\n }\n return true;\n }\n};\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.util.DataViewReader');\n\ngoog.require('goog.asserts');\ngoog.require('shaka.util.BufferUtils');\ngoog.require('shaka.util.Error');\ngoog.require('shaka.util.StringUtils');\n\n\n/**\n * @summary DataViewReader abstracts a DataView object.\n * @export\n */\nshaka.util.DataViewReader = class {\n /**\n * @param {BufferSource} data\n * @param {shaka.util.DataViewReader.Endianness} endianness The endianness.\n */\n constructor(data, endianness) {\n /** @private {!DataView} */\n this.dataView_ = shaka.util.BufferUtils.toDataView(data);\n\n /** @private {boolean} */\n this.littleEndian_ =\n endianness == shaka.util.DataViewReader.Endianness.LITTLE_ENDIAN;\n\n /** @private {number} */\n this.position_ = 0;\n }\n\n\n /** @return {!DataView} The underlying DataView instance. */\n getDataView() {\n return this.dataView_;\n }\n\n\n /**\n * @return {boolean} True if the reader has more data, false otherwise.\n * @export\n */\n hasMoreData() {\n return this.position_ < this.dataView_.byteLength;\n }\n\n\n /**\n * Gets the current byte position.\n * @return {number}\n * @export\n */\n getPosition() {\n return this.position_;\n }\n\n\n /**\n * Gets the byte length of the DataView.\n * @return {number}\n * @export\n */\n getLength() {\n return this.dataView_.byteLength;\n }\n\n\n /**\n * Reads an unsigned 8 bit integer, and advances the reader.\n * @return {number} The integer.\n * @export\n */\n readUint8() {\n try {\n const value = this.dataView_.getUint8(this.position_);\n this.position_ += 1;\n return value;\n } catch (exception) {\n throw this.outOfBounds_();\n }\n }\n\n\n /**\n * Reads an unsigned 16 bit integer, and advances the reader.\n * @return {number} The integer.\n * @export\n */\n readUint16() {\n try {\n const value =\n this.dataView_.getUint16(this.position_, this.littleEndian_);\n this.position_ += 2;\n return value;\n } catch (exception) {\n throw this.outOfBounds_();\n }\n }\n\n\n /**\n * Reads an unsigned 32 bit integer, and advances the reader.\n * @return {number} The integer.\n * @export\n */\n readUint32() {\n try {\n const value =\n this.dataView_.getUint32(this.position_, this.littleEndian_);\n this.position_ += 4;\n return value;\n } catch (exception) {\n throw this.outOfBounds_();\n }\n }\n\n\n /**\n * Reads a signed 32 bit integer, and advances the reader.\n * @return {number} The integer.\n * @export\n */\n readInt32() {\n try {\n const value = this.dataView_.getInt32(this.position_, this.littleEndian_);\n this.position_ += 4;\n return value;\n } catch (exception) {\n throw this.outOfBounds_();\n }\n }\n\n\n /**\n * Reads an unsigned 64 bit integer, and advances the reader.\n * @return {number} The integer.\n * @export\n */\n readUint64() {\n /** @type {number} */\n let low;\n /** @type {number} */\n let high;\n\n try {\n if (this.littleEndian_) {\n low = this.dataView_.getUint32(this.position_, true);\n high = this.dataView_.getUint32(this.position_ + 4, true);\n } else {\n high = this.dataView_.getUint32(this.position_, false);\n low = this.dataView_.getUint32(this.position_ + 4, false);\n }\n } catch (exception) {\n throw this.outOfBounds_();\n }\n\n if (high > 0x1FFFFF) {\n throw new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.MEDIA,\n shaka.util.Error.Code.JS_INTEGER_OVERFLOW);\n }\n\n this.position_ += 8;\n\n // NOTE: This is subtle, but in JavaScript you can't shift left by 32\n // and get the full range of 53-bit values possible.\n // You must multiply by 2^32.\n return (high * Math.pow(2, 32)) + low;\n }\n\n\n /**\n * Reads the specified number of raw bytes.\n * @param {number} bytes The number of bytes to read.\n * @return {!Uint8Array}\n * @export\n */\n readBytes(bytes) {\n goog.asserts.assert(bytes >= 0, 'Bad call to DataViewReader.readBytes');\n if (this.position_ + bytes > this.dataView_.byteLength) {\n throw this.outOfBounds_();\n }\n\n const value =\n shaka.util.BufferUtils.toUint8(this.dataView_, this.position_, bytes);\n this.position_ += bytes;\n return value;\n }\n\n\n /**\n * Skips the specified number of bytes.\n * @param {number} bytes The number of bytes to skip.\n * @export\n */\n skip(bytes) {\n goog.asserts.assert(bytes >= 0, 'Bad call to DataViewReader.skip');\n if (this.position_ + bytes > this.dataView_.byteLength) {\n throw this.outOfBounds_();\n }\n this.position_ += bytes;\n }\n\n\n /**\n * Rewinds the specified number of bytes.\n * @param {number} bytes The number of bytes to rewind.\n * @export\n */\n rewind(bytes) {\n goog.asserts.assert(bytes >= 0, 'Bad call to DataViewReader.rewind');\n if (this.position_ < bytes) {\n throw this.outOfBounds_();\n }\n this.position_ -= bytes;\n }\n\n\n /**\n * Seeks to a specified position.\n * @param {number} position The desired byte position within the DataView.\n * @export\n */\n seek(position) {\n goog.asserts.assert(position >= 0, 'Bad call to DataViewReader.seek');\n if (position < 0 || position > this.dataView_.byteLength) {\n throw this.outOfBounds_();\n }\n this.position_ = position;\n }\n\n\n /**\n * Keeps reading until it reaches a byte that equals to zero. The text is\n * assumed to be UTF-8.\n * @return {string}\n * @export\n */\n readTerminatedString() {\n const start = this.position_;\n while (this.hasMoreData()) {\n const value = this.dataView_.getUint8(this.position_);\n if (value == 0) {\n break;\n }\n this.position_ += 1;\n }\n\n const ret = shaka.util.BufferUtils.toUint8(\n this.dataView_, start, this.position_ - start);\n // Skip string termination.\n this.position_ += 1;\n return shaka.util.StringUtils.fromUTF8(ret);\n }\n\n\n /**\n * @return {!shaka.util.Error}\n * @private\n */\n outOfBounds_() {\n return new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.MEDIA,\n shaka.util.Error.Code.BUFFER_READ_OUT_OF_BOUNDS);\n }\n};\n\n/**\n * Endianness.\n * @enum {number}\n * @export\n */\nshaka.util.DataViewReader.Endianness = {\n 'BIG_ENDIAN': 0,\n 'LITTLE_ENDIAN': 1,\n};\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.util.Mp4Parser');\n\ngoog.require('goog.asserts');\ngoog.require('shaka.log');\ngoog.require('shaka.util.DataViewReader');\n\n\n/**\n * @export\n */\nshaka.util.Mp4Parser = class {\n /** */\n constructor() {\n /** @private {!Object.} */\n this.headers_ = [];\n\n /** @private {!Object.} */\n this.boxDefinitions_ = [];\n\n /** @private {boolean} */\n this.done_ = false;\n }\n\n\n /**\n * Declare a box type as a Box.\n *\n * @param {string} type\n * @param {!shaka.util.Mp4Parser.CallbackType} definition\n * @return {!shaka.util.Mp4Parser}\n * @export\n */\n box(type, definition) {\n const typeCode = shaka.util.Mp4Parser.typeFromString_(type);\n this.headers_[typeCode] = shaka.util.Mp4Parser.BoxType_.BASIC_BOX;\n this.boxDefinitions_[typeCode] = definition;\n return this;\n }\n\n\n /**\n * Declare a box type as a Full Box.\n *\n * @param {string} type\n * @param {!shaka.util.Mp4Parser.CallbackType} definition\n * @return {!shaka.util.Mp4Parser}\n * @export\n */\n fullBox(type, definition) {\n const typeCode = shaka.util.Mp4Parser.typeFromString_(type);\n this.headers_[typeCode] = shaka.util.Mp4Parser.BoxType_.FULL_BOX;\n this.boxDefinitions_[typeCode] = definition;\n return this;\n }\n\n\n /**\n * Stop parsing. Useful for extracting information from partial segments and\n * avoiding an out-of-bounds error once you find what you are looking for.\n *\n * @export\n */\n stop() {\n this.done_ = true;\n }\n\n\n /**\n * Parse the given data using the added callbacks.\n *\n * @param {!BufferSource} data\n * @param {boolean=} partialOkay If true, allow reading partial payloads\n * from some boxes. If the goal is a child box, we can sometimes find it\n * without enough data to find all child boxes.\n * @param {boolean=} stopOnPartial If true, stop reading if an incomplete\n * box is detected.\n * @export\n */\n parse(data, partialOkay, stopOnPartial) {\n const reader = new shaka.util.DataViewReader(\n data, shaka.util.DataViewReader.Endianness.BIG_ENDIAN);\n\n this.done_ = false;\n while (reader.hasMoreData() && !this.done_) {\n this.parseNext(0, reader, partialOkay, stopOnPartial);\n }\n }\n\n\n /**\n * Parse the next box on the current level.\n *\n * @param {number} absStart The absolute start position in the original\n * byte array.\n * @param {!shaka.util.DataViewReader} reader\n * @param {boolean=} partialOkay If true, allow reading partial payloads\n * from some boxes. If the goal is a child box, we can sometimes find it\n * without enough data to find all child boxes.\n * @param {boolean=} stopOnPartial If true, stop reading if an incomplete\n * box is detected.\n * @export\n */\n parseNext(absStart, reader, partialOkay, stopOnPartial) {\n const start = reader.getPosition();\n\n // size(4 bytes) + type(4 bytes) = 8 bytes\n if (stopOnPartial && start + 8 > reader.getLength()) {\n this.done_ = true;\n return;\n }\n\n let size = reader.readUint32();\n const type = reader.readUint32();\n const name = shaka.util.Mp4Parser.typeToString(type);\n let has64BitSize = false;\n shaka.log.v2('Parsing MP4 box', name);\n\n switch (size) {\n case 0:\n size = reader.getLength() - start;\n break;\n case 1:\n if (stopOnPartial && reader.getPosition() + 8 > reader.getLength()) {\n this.done_ = true;\n return;\n }\n size = reader.readUint64();\n has64BitSize = true;\n break;\n }\n\n const boxDefinition = this.boxDefinitions_[type];\n\n if (boxDefinition) {\n let version = null;\n let flags = null;\n\n if (this.headers_[type] == shaka.util.Mp4Parser.BoxType_.FULL_BOX) {\n if (stopOnPartial && reader.getPosition() + 4 > reader.getLength()) {\n this.done_ = true;\n return;\n }\n const versionAndFlags = reader.readUint32();\n version = versionAndFlags >>> 24;\n flags = versionAndFlags & 0xFFFFFF;\n }\n\n // Read the whole payload so that the current level can be safely read\n // regardless of how the payload is parsed.\n let end = start + size;\n if (partialOkay && end > reader.getLength()) {\n // For partial reads, truncate the payload if we must.\n end = reader.getLength();\n }\n\n if (stopOnPartial && end > reader.getLength()) {\n this.done_ = true;\n return;\n }\n const payloadSize = end - reader.getPosition();\n const payload =\n (payloadSize > 0) ? reader.readBytes(payloadSize) : new Uint8Array(0);\n\n const payloadReader = new shaka.util.DataViewReader(\n payload, shaka.util.DataViewReader.Endianness.BIG_ENDIAN);\n\n /** @type {shaka.extern.ParsedBox} */\n const box = {\n name,\n parser: this,\n partialOkay: partialOkay || false,\n version,\n flags,\n reader: payloadReader,\n size,\n start: start + absStart,\n has64BitSize,\n };\n\n boxDefinition(box);\n } else {\n // Move the read head to be at the end of the box.\n // If the box is longer than the remaining parts of the file, e.g. the\n // mp4 is improperly formatted, or this was a partial range request that\n // ended in the middle of a box, just skip to the end.\n const skipLength = Math.min(\n start + size - reader.getPosition(),\n reader.getLength() - reader.getPosition());\n reader.skip(skipLength);\n }\n }\n\n\n /**\n * A callback that tells the Mp4 parser to treat the body of a box as a series\n * of boxes. The number of boxes is limited by the size of the parent box.\n *\n * @param {!shaka.extern.ParsedBox} box\n * @export\n */\n static children(box) {\n // The \"reader\" starts at the payload, so we need to add the header to the\n // start position. The header size varies.\n const headerSize = shaka.util.Mp4Parser.headerSize(box);\n while (box.reader.hasMoreData() && !box.parser.done_) {\n box.parser.parseNext(box.start + headerSize, box.reader, box.partialOkay);\n }\n }\n\n\n /**\n * A callback that tells the Mp4 parser to treat the body of a box as a sample\n * description. A sample description box has a fixed number of children. The\n * number of children is represented by a 4 byte unsigned integer. Each child\n * is a box.\n *\n * @param {!shaka.extern.ParsedBox} box\n * @export\n */\n static sampleDescription(box) {\n // The \"reader\" starts at the payload, so we need to add the header to the\n // start position. The header size varies.\n const headerSize = shaka.util.Mp4Parser.headerSize(box);\n const count = box.reader.readUint32();\n for (let i = 0; i < count; i++) {\n box.parser.parseNext(box.start + headerSize, box.reader, box.partialOkay);\n if (box.parser.done_) {\n break;\n }\n }\n }\n\n\n /**\n * A callback that tells the Mp4 parser to treat the body of a box as a visual\n * sample entry. A visual sample entry has some fixed-sized fields\n * describing the video codec parameters, followed by an arbitrary number of\n * appended children. Each child is a box.\n *\n * @param {!shaka.extern.ParsedBox} box\n * @export\n */\n static visualSampleEntry(box) {\n // The \"reader\" starts at the payload, so we need to add the header to the\n // start position. The header size varies.\n const headerSize = shaka.util.Mp4Parser.headerSize(box);\n\n // Skip 6 reserved bytes.\n // Skip 2-byte data reference index.\n // Skip 16 more reserved bytes.\n // Skip 4 bytes for width/height.\n // Skip 8 bytes for horizontal/vertical resolution.\n // Skip 4 more reserved bytes (0)\n // Skip 2-byte frame count.\n // Skip 32-byte compressor name (length byte, then name, then 0-padding).\n // Skip 2-byte depth.\n // Skip 2 more reserved bytes (0xff)\n // 78 bytes total.\n // See also https://github.com/shaka-project/shaka-packager/blob/d5ca6e84/packager/media/formats/mp4/box_definitions.cc#L1544\n box.reader.skip(78);\n\n while (box.reader.hasMoreData() && !box.parser.done_) {\n box.parser.parseNext(box.start + headerSize, box.reader, box.partialOkay);\n }\n }\n\n\n /**\n * A callback that tells the Mp4 parser to treat the body of a box as a audio\n * sample entry. A audio sample entry has some fixed-sized fields\n * describing the audio codec parameters, followed by an arbitrary number of\n * appended children. Each child is a box.\n *\n * @param {!shaka.extern.ParsedBox} box\n * @export\n */\n static audioSampleEntry(box) {\n // The \"reader\" starts at the payload, so we need to add the header to the\n // start position. The header size varies.\n const headerSize = shaka.util.Mp4Parser.headerSize(box);\n\n // 6 bytes reserved\n // 2 bytes data reference index\n box.reader.skip(8);\n // 2 bytes version\n const version = box.reader.readUint16();\n // 2 bytes revision (0, could be ignored)\n // 4 bytes reserved\n box.reader.skip(6);\n\n if (version == 2) {\n // 16 bytes hard-coded values with no comments\n // 8 bytes sample rate\n // 4 bytes channel count\n // 4 bytes hard-coded values with no comments\n // 4 bytes bits per sample\n // 4 bytes lpcm flags\n // 4 bytes sample size\n // 4 bytes samples per packet\n box.reader.skip(48);\n } else {\n // 2 bytes channel count\n // 2 bytes bits per sample\n // 2 bytes compression ID\n // 2 bytes packet size\n // 2 bytes sample rate\n // 2 byte reserved\n box.reader.skip(12);\n }\n\n if (version == 1) {\n // 4 bytes samples per packet\n // 4 bytes bytes per packet\n // 4 bytes bytes per frame\n // 4 bytes bytes per sample\n box.reader.skip(16);\n }\n\n while (box.reader.hasMoreData() && !box.parser.done_) {\n box.parser.parseNext(box.start + headerSize, box.reader, box.partialOkay);\n }\n }\n\n\n /**\n * Create a callback that tells the Mp4 parser to treat the body of a box as a\n * binary blob and to parse the body's contents using the provided callback.\n *\n * @param {function(!Uint8Array)} callback\n * @return {!shaka.util.Mp4Parser.CallbackType}\n * @export\n */\n static allData(callback) {\n return (box) => {\n const all = box.reader.getLength() - box.reader.getPosition();\n callback(box.reader.readBytes(all));\n };\n }\n\n\n /**\n * Convert an ascii string name to the integer type for a box.\n *\n * @param {string} name The name of the box. The name must be four\n * characters long.\n * @return {number}\n * @private\n */\n static typeFromString_(name) {\n goog.asserts.assert(\n name.length == 4,\n 'Mp4 box names must be 4 characters long');\n\n let code = 0;\n for (const chr of name) {\n code = (code << 8) | chr.charCodeAt(0);\n }\n return code;\n }\n\n\n /**\n * Convert an integer type from a box into an ascii string name.\n * Useful for debugging.\n *\n * @param {number} type The type of the box, a uint32.\n * @return {string}\n * @export\n */\n static typeToString(type) {\n const name = String.fromCharCode(\n (type >> 24) & 0xff,\n (type >> 16) & 0xff,\n (type >> 8) & 0xff,\n type & 0xff);\n return name;\n }\n\n /**\n * Find the header size of the box.\n * Useful for modifying boxes in place or finding the exact offset of a field.\n *\n * @param {shaka.extern.ParsedBox} box\n * @return {number}\n * @export\n */\n static headerSize(box) {\n const basicHeaderSize = 8;\n const _64BitFieldSize = box.has64BitSize ? 8 : 0;\n const versionAndFlagsSize = box.flags != null ? 4 : 0;\n return basicHeaderSize + _64BitFieldSize + versionAndFlagsSize;\n }\n};\n\n\n/**\n * @typedef {function(!shaka.extern.ParsedBox)}\n * @exportInterface\n */\nshaka.util.Mp4Parser.CallbackType;\n\n\n/**\n * An enum used to track the type of box so that the correct values can be\n * read from the header.\n *\n * @enum {number}\n * @private\n */\nshaka.util.Mp4Parser.BoxType_ = {\n BASIC_BOX: 0,\n FULL_BOX: 1,\n};\n\n\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.util.Pssh');\n\ngoog.require('goog.asserts');\ngoog.require('shaka.log');\ngoog.require('shaka.util.BufferUtils');\ngoog.require('shaka.util.Mp4Parser');\ngoog.require('shaka.util.Uint8ArrayUtils');\n\n\n/**\n * @summary\n * Parse a PSSH box and extract the system IDs.\n */\nshaka.util.Pssh = class {\n /**\n * @param {!Uint8Array} psshBox\n */\n constructor(psshBox) {\n /**\n * In hex.\n * @type {!Array.}\n */\n this.systemIds = [];\n\n /**\n * In hex.\n * @type {!Array.}\n */\n this.cencKeyIds = [];\n\n /**\n * Array with the pssh boxes found.\n * @type {!Array.}\n */\n this.data = [];\n\n new shaka.util.Mp4Parser()\n .box('moov', shaka.util.Mp4Parser.children)\n .box('moof', shaka.util.Mp4Parser.children)\n .fullBox('pssh', (box) => this.parsePsshBox_(box))\n .parse(psshBox);\n\n if (this.data.length == 0) {\n shaka.log.v2('No pssh box found!');\n }\n }\n\n\n /**\n * @param {!shaka.extern.ParsedBox} box\n * @private\n */\n parsePsshBox_(box) {\n goog.asserts.assert(\n box.version != null,\n 'PSSH boxes are full boxes and must have a valid version');\n\n goog.asserts.assert(\n box.flags != null,\n 'PSSH boxes are full boxes and must have a valid flag');\n\n if (box.version > 1) {\n shaka.log.warning('Unrecognized PSSH version found!');\n return;\n }\n\n // The \"reader\" gives us a view on the payload of the box. Create a new\n // view that contains the whole box.\n const dataView = box.reader.getDataView();\n goog.asserts.assert(\n dataView.byteOffset >= 12, 'DataView at incorrect position');\n const pssh = shaka.util.BufferUtils.toUint8(dataView, -12, box.size);\n this.data.push(pssh);\n\n this.systemIds.push(\n shaka.util.Uint8ArrayUtils.toHex(box.reader.readBytes(16)));\n if (box.version > 0) {\n const numKeyIds = box.reader.readUint32();\n for (let i = 0; i < numKeyIds; i++) {\n const keyId =\n shaka.util.Uint8ArrayUtils.toHex(box.reader.readBytes(16));\n this.cencKeyIds.push(keyId);\n }\n }\n }\n\n /**\n * Creates a pssh blob from the given system ID, data, keyIds and version.\n *\n * @param {!Uint8Array} data\n * @param {!Uint8Array} systemId\n * @param {!Set.} keyIds\n * @param {number} version\n * @return {!Uint8Array}\n */\n static createPssh(data, systemId, keyIds, version) {\n goog.asserts.assert(systemId.byteLength == 16, 'Invalid system ID length');\n const dataLength = data.length;\n let psshSize = 0x4 + 0x4 + 0x4 + systemId.length + 0x4 + dataLength;\n if (version > 0) {\n psshSize += 0x4 + (16 * keyIds.size);\n }\n\n /** @type {!Uint8Array} */\n const psshBox = new Uint8Array(psshSize);\n /** @type {!DataView} */\n const psshData = shaka.util.BufferUtils.toDataView(psshBox);\n\n let byteCursor = 0;\n psshData.setUint32(byteCursor, psshSize);\n byteCursor += 0x4;\n psshData.setUint32(byteCursor, 0x70737368); // 'pssh'\n byteCursor += 0x4;\n (version < 1) ? psshData.setUint32(byteCursor, 0) :\n psshData.setUint32(byteCursor, 0x01000000); // version + flags\n byteCursor += 0x4;\n psshBox.set(systemId, byteCursor);\n byteCursor += systemId.length;\n\n // if version > 0, add KID count and kid values.\n if (version > 0) {\n psshData.setUint32(byteCursor, keyIds.size); // KID_count\n byteCursor += 0x4;\n const Uint8ArrayUtils = shaka.util.Uint8ArrayUtils;\n for (const keyId of keyIds) {\n const KID = Uint8ArrayUtils.fromHex(keyId);\n psshBox.set(KID, byteCursor);\n byteCursor += KID.length;\n }\n }\n\n psshData.setUint32(byteCursor, dataLength);\n byteCursor += 0x4;\n psshBox.set(data, byteCursor);\n byteCursor += dataLength;\n\n goog.asserts.assert(byteCursor === psshSize, 'PSSH invalid length.');\n return psshBox;\n }\n\n\n /**\n * Normalise the initData array. This is to apply browser specific\n * work-arounds, e.g. removing duplicates which appears to occur\n * intermittently when the native msneedkey event fires (i.e. event.initData\n * contains dupes).\n *\n * @param {!Uint8Array} initData\n * @return {!Uint8Array}\n */\n static normaliseInitData(initData) {\n if (!initData) {\n return initData;\n }\n\n const pssh = new shaka.util.Pssh(initData);\n\n // If there is only a single pssh, return the original array.\n if (pssh.data.length <= 1) {\n return initData;\n }\n\n // Dedupe psshData.\n /** @type {!Array.} */\n const dedupedInitDatas = [];\n for (const initData of pssh.data) {\n const found = dedupedInitDatas.some((x) => {\n return shaka.util.BufferUtils.equal(x, initData);\n });\n\n if (!found) {\n dedupedInitDatas.push(initData);\n }\n }\n\n return shaka.util.Uint8ArrayUtils.concat(...dedupedInitDatas);\n }\n};\n\n","/*! @license\n * Shaka Player\n * Copyright 2023 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.media.ManifestFilterer');\n\ngoog.require('goog.asserts');\ngoog.require('shaka.util.StreamUtils');\ngoog.require('shaka.media.DrmEngine');\ngoog.require('shaka.util.Error');\n\n/**\n * A class that handles the filtering of manifests.\n * Allows for manifest filtering to be done both by the player and by a\n * preload manager.\n */\nshaka.media.ManifestFilterer = class {\n /**\n * @param {?shaka.extern.PlayerConfiguration} config\n * @param {shaka.extern.Resolution} maxHwRes\n * @param {?shaka.media.DrmEngine} drmEngine\n */\n constructor(config, maxHwRes, drmEngine) {\n goog.asserts.assert(config, 'Must have config');\n\n /** @private {!shaka.extern.PlayerConfiguration} */\n this.config_ = config;\n\n /** @private {shaka.extern.Resolution} */\n this.maxHwRes_ = maxHwRes;\n\n /** @private {?shaka.media.DrmEngine} drmEngine */\n this.drmEngine_ = drmEngine;\n }\n\n /** @param {!shaka.media.DrmEngine} drmEngine */\n setDrmEngine(drmEngine) {\n this.drmEngine_ = drmEngine;\n }\n\n /**\n * Filters a manifest, removing unplayable streams/variants and choosing\n * the codecs.\n *\n * @param {?shaka.extern.Manifest} manifest\n * @return {!Promise.} tracksChanged\n */\n async filterManifest(manifest) {\n goog.asserts.assert(manifest, 'Manifest should exist!');\n await shaka.util.StreamUtils.filterManifest(this.drmEngine_, manifest,\n this.config_.drm.preferredKeySystems);\n if (!this.config_.streaming.dontChooseCodecs) {\n shaka.util.StreamUtils.chooseCodecsAndFilterManifest(\n manifest,\n this.config_.preferredVideoCodecs,\n this.config_.preferredAudioCodecs,\n this.config_.preferredDecodingAttributes,\n this.config_.preferredTextFormats);\n }\n this.checkPlayableVariants_(manifest);\n return this.filterManifestWithRestrictions(manifest);\n }\n\n\n /**\n * @param {?shaka.extern.Manifest} manifest\n * @return {boolean} tracksChanged\n */\n applyRestrictions(manifest) {\n return shaka.util.StreamUtils.applyRestrictions(\n manifest.variants, this.config_.restrictions, this.maxHwRes_);\n }\n\n\n /**\n * Apply the restrictions configuration to the manifest, and check if there's\n * a variant that meets the restrictions.\n *\n * @param {?shaka.extern.Manifest} manifest\n * @return {boolean} tracksChanged\n */\n filterManifestWithRestrictions(manifest) {\n const tracksChanged = this.applyRestrictions(manifest);\n\n if (manifest) {\n // We may need to create new sessions for any new init data.\n const currentDrmInfo =\n this.drmEngine_ ? this.drmEngine_.getDrmInfo() : null;\n // DrmEngine.newInitData() requires mediaKeys to be available.\n if (currentDrmInfo && this.drmEngine_.getMediaKeys()) {\n for (const variant of manifest.variants) {\n this.processDrmInfos(currentDrmInfo.keySystem, variant.video);\n this.processDrmInfos(currentDrmInfo.keySystem, variant.audio);\n }\n }\n this.checkRestrictedVariants(manifest);\n }\n\n return tracksChanged;\n }\n\n /**\n * Confirm some variants are playable. Otherwise, throw an exception.\n * @param {!shaka.extern.Manifest} manifest\n * @private\n */\n checkPlayableVariants_(manifest) {\n const valid = manifest.variants.some(shaka.util.StreamUtils.isPlayable);\n\n // If none of the variants are playable, throw\n // CONTENT_UNSUPPORTED_BY_BROWSER.\n if (!valid) {\n throw new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.MANIFEST,\n shaka.util.Error.Code.CONTENT_UNSUPPORTED_BY_BROWSER);\n }\n }\n\n /**\n * @param {string} keySystem\n * @param {?shaka.extern.Stream} stream\n */\n processDrmInfos(keySystem, stream) {\n if (!stream) {\n return;\n }\n\n for (const drmInfo of stream.drmInfos) {\n // Ignore any data for different key systems.\n if (drmInfo.keySystem == keySystem) {\n for (const initData of (drmInfo.initData || [])) {\n this.drmEngine_.newInitData(\n initData.initDataType, initData.initData);\n }\n }\n }\n }\n\n /**\n * Checks if the variants are all restricted, and throw an appropriate\n * exception if so.\n *\n * @param {shaka.extern.Manifest} manifest\n */\n checkRestrictedVariants(manifest) {\n const restrictedStatuses = shaka.media.ManifestFilterer.restrictedStatuses;\n const keyStatusMap =\n this.drmEngine_ ? this.drmEngine_.getKeyStatuses() : {};\n const keyIds = Object.keys(keyStatusMap);\n const isGlobalStatus = keyIds.length && keyIds[0] == '00';\n\n let hasPlayable = false;\n let hasAppRestrictions = false;\n\n /** @type {!Set.} */\n const missingKeys = new Set();\n\n /** @type {!Set.} */\n const badKeyStatuses = new Set();\n\n for (const variant of manifest.variants) {\n // TODO: Combine with onKeyStatus_.\n const streams = [];\n if (variant.audio) {\n streams.push(variant.audio);\n }\n if (variant.video) {\n streams.push(variant.video);\n }\n\n for (const stream of streams) {\n if (stream.keyIds.size) {\n for (const keyId of stream.keyIds) {\n const keyStatus = keyStatusMap[isGlobalStatus ? '00' : keyId];\n if (!keyStatus) {\n missingKeys.add(keyId);\n } else if (restrictedStatuses.includes(keyStatus)) {\n badKeyStatuses.add(keyStatus);\n }\n }\n } // if (stream.keyIds.size)\n }\n\n if (!variant.allowedByApplication) {\n hasAppRestrictions = true;\n } else if (variant.allowedByKeySystem) {\n hasPlayable = true;\n }\n }\n\n if (!hasPlayable) {\n /** @type {shaka.extern.RestrictionInfo} */\n const data = {\n hasAppRestrictions,\n missingKeys: Array.from(missingKeys),\n restrictedKeyStatuses: Array.from(badKeyStatuses),\n };\n throw new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.MANIFEST,\n shaka.util.Error.Code.RESTRICTIONS_CANNOT_BE_MET,\n data);\n }\n }\n};\n\n/**\n * These are the EME key statuses that represent restricted playback.\n * 'usable', 'released', 'output-downscaled', 'status-pending' are statuses\n * of the usable keys. 'expired' status is being handled separately in\n * DrmEngine.\n *\n * @const {!Array.}\n */\nshaka.media.ManifestFilterer.restrictedStatuses =\n ['output-restricted', 'internal-error'];\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.media.ManifestParser');\n\ngoog.require('shaka.Deprecate');\ngoog.require('shaka.log');\ngoog.require('shaka.util.Error');\ngoog.require('shaka.util.Platform');\n\n\n// TODO: revisit this when Closure Compiler supports partially-exported classes.\n/**\n * @summary An interface to register manifest parsers.\n * @export\n */\nshaka.media.ManifestParser = class {\n /**\n * Registers a manifest parser by file extension.\n *\n * @param {string} extension The file extension of the manifest.\n * @param {shaka.extern.ManifestParser.Factory} parserFactory The factory\n * used to create parser instances.\n * @export\n */\n static registerParserByExtension(extension, parserFactory) {\n shaka.Deprecate.deprecateFeature(5,\n 'ManifestParser.registerParserByExtension',\n 'Please use an ManifestParser with registerParserByMime function.');\n }\n\n\n /**\n * Registers a manifest parser by MIME type.\n *\n * @param {string} mimeType The MIME type of the manifest.\n * @param {shaka.extern.ManifestParser.Factory} parserFactory The factory\n * used to create parser instances.\n * @export\n */\n static registerParserByMime(mimeType, parserFactory) {\n shaka.media.ManifestParser.parsersByMime[mimeType] = parserFactory;\n }\n\n /**\n * Unregisters a manifest parser by MIME type.\n *\n * @param {string} mimeType The MIME type of the manifest.\n * @export\n */\n static unregisterParserByMime(mimeType) {\n delete shaka.media.ManifestParser.parsersByMime[mimeType];\n }\n\n\n /**\n * Returns a map of manifest support for well-known types.\n *\n * @return {!Object.}\n */\n static probeSupport() {\n const ManifestParser = shaka.media.ManifestParser;\n const support = {};\n\n // Make sure all registered parsers are shown, but only for MSE-enabled\n // platforms where our parsers matter.\n if (shaka.util.Platform.supportsMediaSource()) {\n for (const type in ManifestParser.parsersByMime) {\n support[type] = true;\n }\n }\n\n // Make sure all well-known types are tested as well, just to show an\n // explicit false for things people might be expecting.\n const testMimeTypes = [\n // DASH\n 'application/dash+xml',\n // HLS\n 'application/x-mpegurl',\n 'application/vnd.apple.mpegurl',\n // SmoothStreaming\n 'application/vnd.ms-sstr+xml',\n ];\n\n for (const type of testMimeTypes) {\n // Only query our parsers for MSE-enabled platforms. Otherwise, query a\n // temporary media element for native support for these types.\n if (shaka.util.Platform.supportsMediaSource()) {\n support[type] = !!ManifestParser.parsersByMime[type];\n } else {\n support[type] = shaka.util.Platform.supportsMediaType(type);\n }\n }\n\n return support;\n }\n\n\n /**\n * Get a factory that can create a manifest parser that should be able to\n * parse the manifest at |uri|.\n *\n * @param {string} uri\n * @param {?string} mimeType\n * @return {shaka.extern.ManifestParser.Factory}\n */\n static getFactory(uri, mimeType) {\n const ManifestParser = shaka.media.ManifestParser;\n\n // Try using the MIME type we were given.\n if (mimeType) {\n const factory = ManifestParser.parsersByMime[mimeType.toLowerCase()];\n if (factory) {\n return factory;\n }\n\n shaka.log.warning(\n 'Could not determine manifest type using MIME type ', mimeType);\n }\n\n throw new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.MANIFEST,\n shaka.util.Error.Code.UNABLE_TO_GUESS_MANIFEST_TYPE,\n uri,\n mimeType);\n }\n\n\n /**\n * Determines whether or not the MIME type is supported by our own\n * manifest parsers on this platform. This takes into account whether or not\n * MediaSource is available, as well as which parsers are registered to the\n * system.\n *\n * @param {string} mimeType\n * @return {boolean}\n */\n static isSupported(mimeType) {\n // Without MediaSource, our own parsers are useless.\n if (!shaka.util.Platform.supportsMediaSource()) {\n return false;\n }\n\n if (mimeType in shaka.media.ManifestParser.parsersByMime) {\n return true;\n }\n\n return false;\n }\n};\n\n\n/**\n * @const {string}\n */\nshaka.media.ManifestParser.HLS = 'HLS';\n\n\n/**\n * @const {string}\n */\nshaka.media.ManifestParser.DASH = 'DASH';\n\n\n/**\n * @const {string}\n */\nshaka.media.ManifestParser.MSS = 'MSS';\n\n\n/**\n * @const {string}\n */\nshaka.media.ManifestParser.UNKNOWN = 'UNKNOWN';\n\n\n/**\n * @enum {string}\n * @export\n */\nshaka.media.ManifestParser.AccessibilityPurpose = {\n VISUALLY_IMPAIRED: 'visually impaired',\n HARD_OF_HEARING: 'hard of hearing',\n};\n\n\n/**\n * Contains the parser factory functions indexed by MIME type.\n *\n * @type {!Object.}\n */\nshaka.media.ManifestParser.parsersByMime = {};\n\n\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.media.ContentWorkarounds');\n\ngoog.require('goog.asserts');\ngoog.require('shaka.log');\ngoog.require('shaka.util.BufferUtils');\ngoog.require('shaka.util.Error');\ngoog.require('shaka.util.Lazy');\ngoog.require('shaka.util.Mp4Parser');\ngoog.require('shaka.util.Platform');\ngoog.require('shaka.util.Uint8ArrayUtils');\n\n\n/**\n * @summary\n * A collection of methods to work around content issues on various platforms.\n */\nshaka.media.ContentWorkarounds = class {\n /**\n * Transform the init segment into a new init segment buffer that indicates\n * encryption. If the init segment already indicates encryption, return the\n * original init segment.\n *\n * Should only be called for MP4 init segments, and only on platforms that\n * need this workaround.\n *\n * @param {!BufferSource} initSegmentBuffer\n * @param {?string} uri\n * @return {!Uint8Array}\n * @see https://github.com/shaka-project/shaka-player/issues/2759\n */\n static fakeEncryption(initSegmentBuffer, uri) {\n const ContentWorkarounds = shaka.media.ContentWorkarounds;\n const initSegment = shaka.util.BufferUtils.toUint8(initSegmentBuffer);\n let modifiedInitSegment = initSegment;\n let isEncrypted = false;\n /** @type {shaka.extern.ParsedBox} */\n let stsdBox;\n const ancestorBoxes = [];\n\n const onSimpleAncestorBox = (box) => {\n ancestorBoxes.push(box);\n shaka.util.Mp4Parser.children(box);\n };\n\n const onEncryptionMetadataBox = (box) => {\n isEncrypted = true;\n };\n\n // Multiplexed content could have multiple boxes that we need to modify.\n // Add to this array in order of box offset. This will be important later,\n // when we process the boxes.\n /** @type {!Array.<{box: shaka.extern.ParsedBox, newType: number}>} */\n const boxesToModify = [];\n\n new shaka.util.Mp4Parser()\n .box('moov', onSimpleAncestorBox)\n .box('trak', onSimpleAncestorBox)\n .box('mdia', onSimpleAncestorBox)\n .box('minf', onSimpleAncestorBox)\n .box('stbl', onSimpleAncestorBox)\n .fullBox('stsd', (box) => {\n stsdBox = box;\n ancestorBoxes.push(box);\n shaka.util.Mp4Parser.sampleDescription(box);\n })\n .fullBox('encv', onEncryptionMetadataBox)\n .fullBox('enca', onEncryptionMetadataBox)\n .fullBox('dvav', (box) => {\n boxesToModify.push({\n box,\n newType: ContentWorkarounds.BOX_TYPE_ENCV_,\n });\n })\n .fullBox('dva1', (box) => {\n boxesToModify.push({\n box,\n newType: ContentWorkarounds.BOX_TYPE_ENCV_,\n });\n })\n .fullBox('dvh1', (box) => {\n boxesToModify.push({\n box,\n newType: ContentWorkarounds.BOX_TYPE_ENCV_,\n });\n })\n .fullBox('dvhe', (box) => {\n boxesToModify.push({\n box,\n newType: ContentWorkarounds.BOX_TYPE_ENCV_,\n });\n })\n .fullBox('dvc1', (box) => {\n boxesToModify.push({\n box,\n newType: ContentWorkarounds.BOX_TYPE_ENCV_,\n });\n })\n .fullBox('dvi1', (box) => {\n boxesToModify.push({\n box,\n newType: ContentWorkarounds.BOX_TYPE_ENCV_,\n });\n })\n .fullBox('hev1', (box) => {\n boxesToModify.push({\n box,\n newType: ContentWorkarounds.BOX_TYPE_ENCV_,\n });\n })\n .fullBox('hvc1', (box) => {\n boxesToModify.push({\n box,\n newType: ContentWorkarounds.BOX_TYPE_ENCV_,\n });\n })\n .fullBox('avc1', (box) => {\n boxesToModify.push({\n box,\n newType: ContentWorkarounds.BOX_TYPE_ENCV_,\n });\n })\n .fullBox('avc3', (box) => {\n boxesToModify.push({\n box,\n newType: ContentWorkarounds.BOX_TYPE_ENCV_,\n });\n })\n .fullBox('ac-3', (box) => {\n boxesToModify.push({\n box,\n newType: ContentWorkarounds.BOX_TYPE_ENCA_,\n });\n })\n .fullBox('ec-3', (box) => {\n boxesToModify.push({\n box,\n newType: ContentWorkarounds.BOX_TYPE_ENCA_,\n });\n })\n .fullBox('ac-4', (box) => {\n boxesToModify.push({\n box,\n newType: ContentWorkarounds.BOX_TYPE_ENCA_,\n });\n })\n .fullBox('mp4a', (box) => {\n boxesToModify.push({\n box,\n newType: ContentWorkarounds.BOX_TYPE_ENCA_,\n });\n }).parse(initSegment);\n\n if (isEncrypted) {\n shaka.log.debug('Init segment already indicates encryption.');\n return initSegment;\n }\n\n if (boxesToModify.length == 0 || !stsdBox) {\n shaka.log.error('Failed to find boxes needed to fake encryption!');\n shaka.log.v2('Failed init segment (hex):',\n shaka.util.Uint8ArrayUtils.toHex(initSegment));\n throw new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.MEDIA,\n shaka.util.Error.Code.CONTENT_TRANSFORMATION_FAILED,\n uri);\n }\n\n // Modify boxes in order from largest offset to smallest, so that earlier\n // boxes don't have their offsets changed before we process them.\n boxesToModify.reverse(); // in place!\n for (const workItem of boxesToModify) {\n const insertedBoxType =\n shaka.util.Mp4Parser.typeToString(workItem.newType);\n shaka.log.debug(`Inserting \"${insertedBoxType}\" box into init segment.`);\n modifiedInitSegment = ContentWorkarounds.insertEncryptionMetadata_(\n modifiedInitSegment, stsdBox, workItem.box, ancestorBoxes,\n workItem.newType);\n }\n\n // Edge Windows needs the unmodified init segment to be appended after the\n // patched one, otherwise video element throws following error:\n // CHUNK_DEMUXER_ERROR_APPEND_FAILED: Sample encryption info is not\n // available.\n if (shaka.util.Platform.isEdge() && shaka.util.Platform.isWindows() &&\n !shaka.util.Platform.isXboxOne()) {\n const doubleInitSegment = new Uint8Array(initSegment.byteLength +\n modifiedInitSegment.byteLength);\n doubleInitSegment.set(modifiedInitSegment);\n doubleInitSegment.set(initSegment, modifiedInitSegment.byteLength);\n return doubleInitSegment;\n }\n\n return modifiedInitSegment;\n }\n\n /**\n * Insert an encryption metadata box (\"encv\" or \"enca\" box) into the MP4 init\n * segment, based on the source box (\"mp4a\", \"avc1\", etc). Returns a new\n * buffer containing the modified init segment.\n *\n * @param {!Uint8Array} initSegment\n * @param {shaka.extern.ParsedBox} stsdBox\n * @param {shaka.extern.ParsedBox} sourceBox\n * @param {!Array.} ancestorBoxes\n * @param {number} metadataBoxType\n * @return {!Uint8Array}\n * @private\n */\n static insertEncryptionMetadata_(\n initSegment, stsdBox, sourceBox, ancestorBoxes, metadataBoxType) {\n const ContentWorkarounds = shaka.media.ContentWorkarounds;\n const metadataBoxArray = ContentWorkarounds.createEncryptionMetadata_(\n initSegment, sourceBox, metadataBoxType);\n\n // Construct a new init segment array with room for the encryption metadata\n // box we're adding.\n const newInitSegment =\n new Uint8Array(initSegment.byteLength + metadataBoxArray.byteLength);\n\n // For Xbox One & Edge, we cut and insert at the start of the source box.\n // For other platforms, we cut and insert at the end of the source box. It's\n // not clear why this is necessary on Xbox One, but it seems to be evidence\n // of another bug in the firmware implementation of MediaSource & EME.\n const cutPoint =\n (shaka.util.Platform.isXboxOne() || shaka.util.Platform.isEdge()) ?\n sourceBox.start :\n sourceBox.start + sourceBox.size;\n\n // The data before the cut point will be copied to the same location as\n // before. The data after that will be appended after the added metadata\n // box.\n const beforeData = initSegment.subarray(0, cutPoint);\n const afterData = initSegment.subarray(cutPoint);\n\n newInitSegment.set(beforeData);\n newInitSegment.set(metadataBoxArray, cutPoint);\n newInitSegment.set(afterData, cutPoint + metadataBoxArray.byteLength);\n\n // The parents up the chain from the encryption metadata box need their\n // sizes adjusted to account for the added box. These offsets should not be\n // changed, because they should all be within the first section we copy.\n for (const box of ancestorBoxes) {\n goog.asserts.assert(box.start < cutPoint,\n 'Ancestor MP4 box found in the wrong location! ' +\n 'Modified init segment will not make sense!');\n ContentWorkarounds.updateBoxSize_(\n newInitSegment, box.start, box.size + metadataBoxArray.byteLength);\n }\n\n // Add one to the sample entries field of the \"stsd\" box. This is a 4-byte\n // field just past the box header.\n const stsdBoxView = shaka.util.BufferUtils.toDataView(\n newInitSegment, stsdBox.start);\n const stsdBoxHeaderSize = shaka.util.Mp4Parser.headerSize(stsdBox);\n const numEntries = stsdBoxView.getUint32(stsdBoxHeaderSize);\n stsdBoxView.setUint32(stsdBoxHeaderSize, numEntries + 1);\n\n return newInitSegment;\n }\n\n /**\n * Create an encryption metadata box (\"encv\" or \"enca\" box), based on the\n * source box (\"mp4a\", \"avc1\", etc). Returns a new buffer containing the\n * encryption metadata box.\n *\n * @param {!Uint8Array} initSegment\n * @param {shaka.extern.ParsedBox} sourceBox\n * @param {number} metadataBoxType\n * @return {!Uint8Array}\n * @private\n */\n static createEncryptionMetadata_(initSegment, sourceBox, metadataBoxType) {\n const ContentWorkarounds = shaka.media.ContentWorkarounds;\n const sinfBoxArray = ContentWorkarounds.CANNED_SINF_BOX_.value();\n\n // Create a subarray which points to the source box data.\n const sourceBoxArray = initSegment.subarray(\n /* start= */ sourceBox.start,\n /* end= */ sourceBox.start + sourceBox.size);\n\n // Create a view on the source box array.\n const sourceBoxView = shaka.util.BufferUtils.toDataView(sourceBoxArray);\n\n // Create an array to hold the new encryption metadata box, which is based\n // on the source box.\n const metadataBoxArray = new Uint8Array(\n sourceBox.size + sinfBoxArray.byteLength);\n\n // Copy the source box into the new array.\n metadataBoxArray.set(sourceBoxArray, /* targetOffset= */ 0);\n\n // Change the box type.\n const metadataBoxView = shaka.util.BufferUtils.toDataView(metadataBoxArray);\n metadataBoxView.setUint32(\n ContentWorkarounds.BOX_TYPE_OFFSET_, metadataBoxType);\n\n // Append the \"sinf\" box to the encryption metadata box.\n metadataBoxArray.set(sinfBoxArray, /* targetOffset= */ sourceBox.size);\n\n // Update the \"sinf\" box's format field (in the child \"frma\" box) to reflect\n // the format of the original source box.\n const sourceBoxType = sourceBoxView.getUint32(\n ContentWorkarounds.BOX_TYPE_OFFSET_);\n metadataBoxView.setUint32(\n sourceBox.size + ContentWorkarounds.CANNED_SINF_BOX_FORMAT_OFFSET_,\n sourceBoxType);\n\n // Now update the encryption metadata box size.\n ContentWorkarounds.updateBoxSize_(\n metadataBoxArray, /* boxStart= */ 0, metadataBoxArray.byteLength);\n\n return metadataBoxArray;\n }\n\n /**\n * Modify an MP4 box's size field in-place.\n *\n * @param {!Uint8Array} dataArray\n * @param {number} boxStart The start position of the box in dataArray.\n * @param {number} newBoxSize The new size of the box.\n * @private\n */\n static updateBoxSize_(dataArray, boxStart, newBoxSize) {\n const ContentWorkarounds = shaka.media.ContentWorkarounds;\n const boxView = shaka.util.BufferUtils.toDataView(dataArray, boxStart);\n const sizeField = boxView.getUint32(ContentWorkarounds.BOX_SIZE_OFFSET_);\n if (sizeField == 0) { // Means \"the rest of the box\".\n // No adjustment needed for this box.\n } else if (sizeField == 1) { // Means \"use 64-bit size box\".\n // Set the 64-bit int in two 32-bit parts.\n // The high bits should definitely be 0 in practice, but we're being\n // thorough here.\n boxView.setUint32(ContentWorkarounds.BOX_SIZE_64_OFFSET_,\n newBoxSize >> 32);\n boxView.setUint32(ContentWorkarounds.BOX_SIZE_64_OFFSET_ + 4,\n newBoxSize & 0xffffffff);\n } else { // Normal 32-bit size field.\n // Not checking the size of the value here, since a box larger than 4GB is\n // unrealistic.\n boxView.setUint32(ContentWorkarounds.BOX_SIZE_OFFSET_, newBoxSize);\n }\n }\n};\n\n/**\n * A canned \"sinf\" box for use when adding fake encryption metadata to init\n * segments.\n *\n * @const {!shaka.util.Lazy.}\n * @private\n * @see https://github.com/shaka-project/shaka-player/issues/2759\n */\nshaka.media.ContentWorkarounds.CANNED_SINF_BOX_ =\n new shaka.util.Lazy(() => new Uint8Array([\n // sinf box\n // Size: 0x50 = 80\n 0x00, 0x00, 0x00, 0x50,\n\n // Type: sinf\n 0x73, 0x69, 0x6e, 0x66,\n\n // Children of sinf...\n\n // frma box\n // Size: 0x0c = 12\n 0x00, 0x00, 0x00, 0x0c,\n\n // Type: frma (child of sinf)\n 0x66, 0x72, 0x6d, 0x61,\n\n // Format: filled in later based on the source box (\"avc1\", \"mp4a\", etc)\n 0x00, 0x00, 0x00, 0x00,\n // end of frma box\n\n // schm box\n // Size: 0x14 = 20\n 0x00, 0x00, 0x00, 0x14,\n\n // Type: schm (child of sinf)\n 0x73, 0x63, 0x68, 0x6d,\n\n // Version: 0, Flags: 0\n 0x00, 0x00, 0x00, 0x00,\n\n // Scheme: cenc\n 0x63, 0x65, 0x6e, 0x63,\n\n // Scheme version: 1.0\n 0x00, 0x01, 0x00, 0x00,\n // end of schm box\n\n // schi box\n // Size: 0x28 = 40\n 0x00, 0x00, 0x00, 0x28,\n\n // Type: schi (child of sinf)\n 0x73, 0x63, 0x68, 0x69,\n\n // Children of schi...\n\n // tenc box\n // Size: 0x20 = 32\n 0x00, 0x00, 0x00, 0x20,\n\n // Type: tenc (child of schi)\n 0x74, 0x65, 0x6e, 0x63,\n\n // Version: 0, Flags: 0\n 0x00, 0x00, 0x00, 0x00,\n\n // Reserved fields\n 0x00, 0x00,\n\n // Default protected: true\n 0x01,\n\n // Default per-sample IV size: 8\n 0x08,\n\n // Default key ID: all zeros (dummy)\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n // end of tenc box\n\n // end of schi box\n\n // end of sinf box\n ]));\n\n/**\n * The location of the format field in the \"frma\" box inside the canned \"sinf\"\n * box above.\n *\n * @const {number}\n * @private\n */\nshaka.media.ContentWorkarounds.CANNED_SINF_BOX_FORMAT_OFFSET_ = 0x10;\n\n/**\n * Offset to a box's size field.\n *\n * @const {number}\n * @private\n */\nshaka.media.ContentWorkarounds.BOX_SIZE_OFFSET_ = 0;\n\n/**\n * Offset to a box's type field.\n *\n * @const {number}\n * @private\n */\nshaka.media.ContentWorkarounds.BOX_TYPE_OFFSET_ = 4;\n\n/**\n * Offset to a box's 64-bit size field, if it has one.\n *\n * @const {number}\n * @private\n */\nshaka.media.ContentWorkarounds.BOX_SIZE_64_OFFSET_ = 8;\n\n/**\n * Box type for \"encv\".\n *\n * @const {number}\n * @private\n */\nshaka.media.ContentWorkarounds.BOX_TYPE_ENCV_ = 0x656e6376;\n\n/**\n * Box type for \"enca\".\n *\n * @const {number}\n * @private\n */\nshaka.media.ContentWorkarounds.BOX_TYPE_ENCA_ = 0x656e6361;\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.media.TimeRangesUtils');\n\n\n/**\n * @summary A set of utility functions for dealing with TimeRanges objects.\n */\nshaka.media.TimeRangesUtils = class {\n /**\n * Returns whether the buffer is small enough to be ignored.\n *\n * @param {TimeRanges} b\n * @return {boolean}\n * @private\n */\n static isBufferNegligible_(b) {\n // Workaround Safari bug: https://bit.ly/2trx6O8\n // Firefox may leave <1e-4s of data in buffer after clearing all content\n return b.length == 1 && b.end(0) - b.start(0) < 1e-4;\n }\n\n /**\n * Gets the first timestamp in the buffer.\n *\n * @param {TimeRanges} b\n * @return {?number} The first buffered timestamp, in seconds, if |buffered|\n * is non-empty; otherwise, return null.\n */\n static bufferStart(b) {\n if (!b) {\n return null;\n }\n if (shaka.media.TimeRangesUtils.isBufferNegligible_(b)) {\n return null;\n }\n // Workaround Edge bug: https://bit.ly/2JYLPeB\n if (b.length == 1 && b.start(0) < 0) {\n return 0;\n }\n return b.length ? b.start(0) : null;\n }\n\n\n /**\n * Gets the last timestamp in the buffer.\n *\n * @param {TimeRanges} b\n * @return {?number} The last buffered timestamp, in seconds, if |buffered|\n * is non-empty; otherwise, return null.\n */\n static bufferEnd(b) {\n if (!b) {\n return null;\n }\n if (shaka.media.TimeRangesUtils.isBufferNegligible_(b)) {\n return null;\n }\n return b.length ? b.end(b.length - 1) : null;\n }\n\n\n /**\n * Determines if the given time is inside a buffered range.\n *\n * @param {TimeRanges} b\n * @param {number} time Playhead time\n * @return {boolean}\n */\n static isBuffered(b, time) {\n if (!b || !b.length) {\n return false;\n }\n if (shaka.media.TimeRangesUtils.isBufferNegligible_(b)) {\n return false;\n }\n\n if (time > b.end(b.length - 1)) {\n return false;\n }\n\n return time >= b.start(0);\n }\n\n\n /**\n * Computes how far ahead of the given timestamp is buffered. To provide\n * smooth playback while jumping gaps, we don't include the gaps when\n * calculating this.\n * This only includes the amount of content that is buffered.\n *\n * @param {TimeRanges} b\n * @param {number} time\n * @return {number} The number of seconds buffered, in seconds, ahead of the\n * given time.\n */\n static bufferedAheadOf(b, time) {\n if (!b || !b.length) {\n return 0;\n }\n if (shaka.media.TimeRangesUtils.isBufferNegligible_(b)) {\n return 0;\n }\n\n // We calculate the buffered amount by ONLY accounting for the content\n // buffered (i.e. we ignore the times of the gaps). We also buffer through\n // all gaps.\n // Therefore, we start at the end and add up all buffers until |time|.\n let result = 0;\n for (const {start, end} of shaka.media.TimeRangesUtils.getBufferedInfo(b)) {\n if (end > time) {\n result += end - Math.max(start, time);\n }\n }\n\n return result;\n }\n\n\n /**\n * Determines if the given time is inside a gap between buffered ranges. If\n * it is, this returns the index of the buffer that is *ahead* of the gap.\n *\n * @param {TimeRanges} b\n * @param {number} time\n * @param {number} threshold\n * @return {?number} The index of the buffer after the gap, or null if not in\n * a gap.\n */\n static getGapIndex(b, time, threshold) {\n const TimeRangesUtils = shaka.media.TimeRangesUtils;\n\n if (!b || !b.length) {\n return null;\n }\n if (shaka.media.TimeRangesUtils.isBufferNegligible_(b)) {\n return null;\n }\n\n const idx = TimeRangesUtils.getBufferedInfo(b).findIndex((item, i, arr) => {\n return item.start > time &&\n (i == 0 || arr[i - 1].end - time <= threshold);\n });\n return idx >= 0 ? idx : null;\n }\n\n\n /**\n * @param {TimeRanges} b\n * @return {!Array.}\n */\n static getBufferedInfo(b) {\n if (!b) {\n return [];\n }\n const ret = [];\n for (let i = 0; i < b.length; i++) {\n ret.push({start: b.start(i), end: b.end(i)});\n }\n return ret;\n }\n\n /**\n * This operation can be potentially EXPENSIVE and should only be done in\n * debug builds for debugging purposes.\n *\n * @param {TimeRanges} oldRanges\n * @param {TimeRanges} newRanges\n * @return {?shaka.extern.BufferedRange} The last added range,\n * chronologically by presentation time.\n */\n static computeAddedRange(oldRanges, newRanges) {\n const TimeRangesUtils = shaka.media.TimeRangesUtils;\n\n if (!oldRanges || !oldRanges.length) {\n return null;\n }\n if (!newRanges || !newRanges.length) {\n return TimeRangesUtils.getBufferedInfo(newRanges).pop();\n }\n\n const newRangesReversed =\n TimeRangesUtils.getBufferedInfo(newRanges).reverse();\n const oldRangesReversed =\n TimeRangesUtils.getBufferedInfo(oldRanges).reverse();\n for (const newRange of newRangesReversed) {\n let foundOverlap = false;\n\n for (const oldRange of oldRangesReversed) {\n if (oldRange.end >= newRange.start && oldRange.end <= newRange.end) {\n foundOverlap = true;\n\n // If the new range goes beyond the corresponding old one, the\n // difference is newly-added.\n if (newRange.end > oldRange.end) {\n return {start: oldRange.end, end: newRange.end};\n }\n }\n }\n\n if (!foundOverlap) {\n return newRange;\n }\n }\n\n return null;\n }\n};\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\n\ngoog.provide('shaka.util.Dom');\n\ngoog.require('goog.asserts');\n\n\n// TODO: revisit this when Closure Compiler supports partially-exported classes.\n/** @export */\nshaka.util.Dom = class {\n /**\n * Creates an element, and cast the type from Element to HTMLElement.\n *\n * @param {string} tagName\n * @return {!HTMLElement}\n */\n static createHTMLElement(tagName) {\n const element =\n /** @type {!HTMLElement} */ (document.createElement(tagName));\n return element;\n }\n\n\n /**\n * Create a \"button\" element with the correct type.\n *\n * The compiler is very picky about the use of the \"disabled\" property on\n * HTMLElement, since it is only defined on certain subclasses of that. This\n * method merely creates a button and casts it to the correct type.\n *\n * @return {!HTMLButtonElement}\n */\n static createButton() {\n const button = document.createElement('button');\n button.setAttribute('type', 'button');\n return /** @type {!HTMLButtonElement} */ (button);\n }\n\n\n /**\n * @param {string} url\n * @param {string=} mimeType\n * @return {!HTMLSourceElement}\n */\n static createSourceElement(url, mimeType = '') {\n const source =\n /** @type {HTMLSourceElement} */ (document.createElement('source'));\n source.src = url;\n source.type = mimeType;\n return source;\n }\n\n\n /**\n * Cast a Node/Element to an HTMLElement\n *\n * @param {!Node|!Element} original\n * @return {!HTMLElement}\n */\n static asHTMLElement(original) {\n return /** @type {!HTMLElement}*/ (original);\n }\n\n\n /**\n * Cast a Node/Element to an HTMLCanvasElement\n *\n * @param {!Node|!Element} original\n * @return {!HTMLCanvasElement}\n */\n static asHTMLCanvasElement(original) {\n return /** @type {!HTMLCanvasElement}*/ (original);\n }\n\n\n /**\n * Cast a Node/Element to an HTMLMediaElement\n *\n * @param {!Node|!Element} original\n * @return {!HTMLMediaElement}\n */\n static asHTMLMediaElement(original) {\n return /** @type {!HTMLMediaElement}*/ (original);\n }\n\n\n /**\n * Returns the element with a given class name.\n * Assumes the class name to be unique for a given parent.\n *\n * @param {string} className\n * @param {!HTMLElement} parent\n * @return {!HTMLElement}\n */\n static getElementByClassName(className, parent) {\n const elements = parent.getElementsByClassName(className);\n goog.asserts.assert(elements.length == 1,\n 'Should only be one element with class name ' + className);\n\n return shaka.util.Dom.asHTMLElement(elements[0]);\n }\n\n /**\n * Remove all of the child nodes of an element.\n * @param {!Element} element\n * @export\n */\n static removeAllChildren(element) {\n while (element.firstChild) {\n element.removeChild(element.firstChild);\n }\n }\n};\n\n","/*! @license\n * Shaka Player\n * Copyright 2022 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.util.Id3Utils');\n\ngoog.require('shaka.log');\ngoog.require('shaka.util.BufferUtils');\ngoog.require('shaka.util.StringUtils');\n\n\n/**\n * @summary A set of Id3Utils utility functions.\n * @export\n */\nshaka.util.Id3Utils = class {\n /**\n * @param {Uint8Array} data\n * @param {number} offset\n * @return {boolean}\n * @private\n */\n static isHeader_(data, offset) {\n /*\n * http://id3.org/id3v2.3.0\n * [0] = 'I'\n * [1] = 'D'\n * [2] = '3'\n * [3,4] = {Version}\n * [5] = {Flags}\n * [6-9] = {ID3 Size}\n *\n * An ID3v2 tag can be detected with the following pattern:\n * $49 44 33 yy yy xx zz zz zz zz\n * Where yy is less than $FF, xx is the 'flags' byte and zz is less than $80\n */\n if (offset + 10 <= data.length) {\n // look for 'ID3' identifier\n if (data[offset] === 0x49 &&\n data[offset + 1] === 0x44 &&\n data[offset + 2] === 0x33) {\n // check version is within range\n if (data[offset + 3] < 0xff && data[offset + 4] < 0xff) {\n // check size is within range\n if (data[offset + 6] < 0x80 &&\n data[offset + 7] < 0x80 &&\n data[offset + 8] < 0x80 &&\n data[offset + 9] < 0x80) {\n return true;\n }\n }\n }\n }\n\n return false;\n }\n\n /**\n * @param {Uint8Array} data\n * @param {number} offset\n * @return {boolean}\n * @private\n */\n static isFooter_(data, offset) {\n /*\n * The footer is a copy of the header, but with a different identifier\n */\n if (offset + 10 <= data.length) {\n // look for '3DI' identifier\n if (data[offset] === 0x33 &&\n data[offset + 1] === 0x44 &&\n data[offset + 2] === 0x49) {\n // check version is within range\n if (data[offset + 3] < 0xff && data[offset + 4] < 0xff) {\n // check size is within range\n if (data[offset + 6] < 0x80 &&\n data[offset + 7] < 0x80 &&\n data[offset + 8] < 0x80 &&\n data[offset + 9] < 0x80) {\n return true;\n }\n }\n }\n }\n\n return false;\n }\n\n /**\n * @param {Uint8Array} data\n * @param {number} offset\n * @return {number}\n * @private\n */\n static readSize_(data, offset) {\n let size = 0;\n size = (data[offset] & 0x7f) << 21;\n size |= (data[offset + 1] & 0x7f) << 14;\n size |= (data[offset + 2] & 0x7f) << 7;\n size |= data[offset + 3] & 0x7f;\n return size;\n }\n\n /**\n * @param {Uint8Array} data\n * @return {shaka.extern.MetadataRawFrame}\n * @private\n */\n static getFrameData_(data) {\n /*\n * Frame ID $xx xx xx xx (four characters)\n * Size $xx xx xx xx\n * Flags $xx xx\n */\n const type = String.fromCharCode(data[0], data[1], data[2], data[3]);\n const size = shaka.util.Id3Utils.readSize_(data, 4);\n\n // skip frame id, size, and flags\n const offset = 10;\n\n return {\n type,\n size,\n data: data.subarray(offset, offset + size),\n };\n }\n\n /**\n * @param {shaka.extern.MetadataRawFrame} frame\n * @return {?shaka.extern.MetadataFrame}\n * @private\n */\n static decodeFrame_(frame) {\n const BufferUtils = shaka.util.BufferUtils;\n const StringUtils = shaka.util.StringUtils;\n\n const metadataFrame = {\n key: frame.type,\n description: '',\n data: '',\n mimeType: null,\n pictureType: null,\n };\n\n if (frame.type === 'APIC') {\n /*\n * Format:\n * [0] = {Text Encoding}\n * [1 - X] = {MIME Type}\\0\n * [X+1] = {Picture Type}\n * [X+2 - Y] = {Description}\\0\n * [Y - ?] = {Picture Data or Picture URL}\n */\n if (frame.size < 2) {\n return null;\n }\n if (frame.data[0] !== shaka.util.Id3Utils.UTF8_encoding) {\n shaka.log.warning('Ignore frame with unrecognized character ' +\n 'encoding');\n return null;\n }\n\n const mimeTypeEndIndex = frame.data.subarray(1).indexOf(0);\n if (mimeTypeEndIndex === -1) {\n return null;\n }\n const mimeType = StringUtils.fromUTF8(\n BufferUtils.toUint8(frame.data, 1, mimeTypeEndIndex));\n const pictureType = frame.data[2 + mimeTypeEndIndex];\n const descriptionEndIndex = frame.data.subarray(3 + mimeTypeEndIndex)\n .indexOf(0);\n if (descriptionEndIndex === -1) {\n return null;\n }\n const description = StringUtils.fromUTF8(\n BufferUtils.toUint8(frame.data, 3 + mimeTypeEndIndex,\n descriptionEndIndex));\n let data;\n if (mimeType === '-->') {\n data = StringUtils.fromUTF8(\n BufferUtils.toUint8(\n frame.data, 4 + mimeTypeEndIndex + descriptionEndIndex));\n } else {\n data = BufferUtils.toArrayBuffer(\n frame.data.subarray(4 + mimeTypeEndIndex + descriptionEndIndex));\n }\n metadataFrame.mimeType = mimeType;\n metadataFrame.pictureType = pictureType;\n metadataFrame.description = description;\n metadataFrame.data = data;\n return metadataFrame;\n } else if (frame.type === 'TXXX') {\n /*\n * Format:\n * [0] = {Text Encoding}\n * [1-?] = {Description}\\0{Value}\n */\n if (frame.size < 2) {\n return null;\n }\n if (frame.data[0] !== shaka.util.Id3Utils.UTF8_encoding) {\n shaka.log.warning('Ignore frame with unrecognized character ' +\n 'encoding');\n return null;\n }\n const descriptionEndIndex = frame.data.subarray(1).indexOf(0);\n\n if (descriptionEndIndex === -1) {\n return null;\n }\n const description = StringUtils.fromUTF8(\n BufferUtils.toUint8(frame.data, 1, descriptionEndIndex));\n const data = StringUtils.fromUTF8(\n BufferUtils.toUint8(frame.data, 2 + descriptionEndIndex))\n .replace(/\\0*$/, '');\n\n metadataFrame.description = description;\n metadataFrame.data = data;\n return metadataFrame;\n } else if (frame.type === 'WXXX') {\n /*\n * Format:\n * [0] = {Text Encoding}\n * [1-?] = {Description}\\0{URL}\n */\n if (frame.size < 2) {\n return null;\n }\n if (frame.data[0] !== shaka.util.Id3Utils.UTF8_encoding) {\n shaka.log.warning('Ignore frame with unrecognized character ' +\n 'encoding');\n return null;\n }\n const descriptionEndIndex = frame.data.subarray(1).indexOf(0);\n\n if (descriptionEndIndex === -1) {\n return null;\n }\n const description = StringUtils.fromUTF8(\n BufferUtils.toUint8(frame.data, 1, descriptionEndIndex));\n const data = StringUtils.fromUTF8(\n BufferUtils.toUint8(frame.data, 2 + descriptionEndIndex))\n .replace(/\\0*$/, '');\n\n metadataFrame.description = description;\n metadataFrame.data = data;\n return metadataFrame;\n } else if (frame.type === 'PRIV') {\n /*\n * Format: \\0\n */\n if (frame.size < 2) {\n return null;\n }\n const textEndIndex = frame.data.indexOf(0);\n if (textEndIndex === -1) {\n return null;\n }\n const text = StringUtils.fromUTF8(\n BufferUtils.toUint8(frame.data, 0, textEndIndex));\n metadataFrame.description = text;\n if (text == 'com.apple.streaming.transportStreamTimestamp') {\n const data = frame.data.subarray(text.length + 1);\n // timestamp is 33 bit expressed as a big-endian eight-octet number,\n // with the upper 31 bits set to zero.\n const pts33Bit = data[3] & 0x1;\n let timestamp =\n (data[4] << 23) + (data[5] << 15) + (data[6] << 7) + data[7];\n timestamp /= 45;\n\n if (pts33Bit) {\n timestamp += 47721858.84;\n } // 2^32 / 90\n\n metadataFrame.data = timestamp;\n } else {\n const data = BufferUtils.toArrayBuffer(\n frame.data.subarray(text.length + 1));\n metadataFrame.data = data;\n }\n return metadataFrame;\n } else if (frame.type[0] === 'T') {\n /*\n * Format:\n * [0] = {Text Encoding}\n * [1-?] = {Value}\n */\n if (frame.size < 2) {\n return null;\n }\n if (frame.data[0] !== shaka.util.Id3Utils.UTF8_encoding) {\n shaka.log.warning('Ignore frame with unrecognized character ' +\n 'encoding');\n return null;\n }\n const text = StringUtils.fromUTF8(frame.data.subarray(1))\n .replace(/\\0*$/, '');\n metadataFrame.data = text;\n return metadataFrame;\n } else if (frame.type[0] === 'W') {\n /*\n * Format:\n * [0-?] = {URL}\n */\n const url = StringUtils.fromUTF8(frame.data)\n .replace(/\\0*$/, '');\n metadataFrame.data = url;\n return metadataFrame;\n } else if (frame.data) {\n shaka.log.warning('Unrecognized ID3 frame type:', frame.type);\n metadataFrame.data = BufferUtils.toArrayBuffer(frame.data);\n return metadataFrame;\n }\n\n return null;\n }\n\n /**\n * Returns an array of ID3 frames found in all the ID3 tags in the id3Data\n * @param {Uint8Array} id3Data - The ID3 data containing one or more ID3 tags\n * @return {!Array.}\n * @export\n */\n static getID3Frames(id3Data) {\n const Id3Utils = shaka.util.Id3Utils;\n let offset = 0;\n const frames = [];\n while (Id3Utils.isHeader_(id3Data, offset)) {\n const size = Id3Utils.readSize_(id3Data, offset + 6);\n\n if ((id3Data[offset + 5] >> 6) & 1) {\n // skip extended header\n offset += 10;\n }\n // skip past ID3 header\n offset += 10;\n\n const end = offset + size;\n // loop through frames in the ID3 tag\n while (offset + 10 < end) {\n const frameData = Id3Utils.getFrameData_(id3Data.subarray(offset));\n const frame = Id3Utils.decodeFrame_(frameData);\n if (frame) {\n frames.push(frame);\n }\n\n // skip frame header and frame data\n offset += frameData.size + 10;\n }\n\n if (Id3Utils.isFooter_(id3Data, offset)) {\n offset += 10;\n }\n }\n return frames;\n }\n\n /**\n * Returns any adjacent ID3 tags found in data starting at offset, as one\n * block of data\n * @param {Uint8Array} id3Data - The ID3 data containing one or more ID3 tags\n * @param {number=} offset - The offset at which to start searching\n * @return {!Uint8Array}\n * @export\n */\n static getID3Data(id3Data, offset = 0) {\n const Id3Utils = shaka.util.Id3Utils;\n const front = offset;\n let length = 0;\n\n while (Id3Utils.isHeader_(id3Data, offset)) {\n if ((id3Data[offset + 5] >> 6) & 1) {\n // skip extended header\n length += 10;\n }\n // skip past ID3 header\n length += 10;\n\n const size = Id3Utils.readSize_(id3Data, offset + 6);\n length += size;\n\n if (Id3Utils.isFooter_(id3Data, offset + 10)) {\n // ID3 footer is 10 bytes\n length += 10;\n }\n offset += length;\n }\n\n if (length > 0) {\n return id3Data.subarray(front, front + length);\n }\n return new Uint8Array([]);\n }\n};\n\n/**\n * UTF8 encoding byte\n * @const {number}\n */\nshaka.util.Id3Utils.UTF8_encoding = 0x03;\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.util.Mp4BoxParsers');\n\ngoog.require('shaka.util.DataViewReader');\ngoog.require('shaka.util.Mp4Parser');\ngoog.require('shaka.util.Uint8ArrayUtils');\n\nshaka.util.Mp4BoxParsers = class {\n /**\n * Parses a TFHD Box.\n * @param {!shaka.util.DataViewReader} reader\n * @param {number} flags\n * @return {!shaka.util.ParsedTFHDBox}\n */\n static parseTFHD(reader, flags) {\n let defaultSampleDuration = null;\n let defaultSampleSize = null;\n let baseDataOffset = null;\n\n const trackId = reader.readUint32(); // Read \"track_ID\"\n\n // Skip \"base_data_offset\" if present.\n if (flags & 0x000001) {\n baseDataOffset = reader.readUint64();\n }\n\n // Skip \"sample_description_index\" if present.\n if (flags & 0x000002) {\n reader.skip(4);\n }\n\n // Read \"default_sample_duration\" if present.\n if (flags & 0x000008) {\n defaultSampleDuration = reader.readUint32();\n }\n\n // Read \"default_sample_size\" if present.\n if (flags & 0x000010) {\n defaultSampleSize = reader.readUint32();\n }\n\n return {\n trackId,\n defaultSampleDuration,\n defaultSampleSize,\n baseDataOffset,\n };\n }\n\n /**\n * Parses a TFDT Box.\n * @param {!shaka.util.DataViewReader} reader\n * @param {number} version\n * @return {!shaka.util.ParsedTFDTBox}\n */\n static parseTFDT(reader, version) {\n const baseMediaDecodeTime = version == 1 ?\n reader.readUint64() : reader.readUint32();\n\n return {\n baseMediaDecodeTime,\n };\n }\n\n /**\n * Parses a TFDT Box, with a loss of precision beyond 53 bits.\n * Use only when exact integers are not required, e.g. when\n * dividing by the timescale.\n *\n * @param {!shaka.util.DataViewReader} reader\n * @param {number} version\n * @return {!shaka.util.ParsedTFDTBox}\n */\n static parseTFDTInaccurate(reader, version) {\n if (version == 1) {\n const high = reader.readUint32();\n const low = reader.readUint32();\n return {\n baseMediaDecodeTime: (high * Math.pow(2, 32)) + low,\n };\n } else {\n return {\n baseMediaDecodeTime: reader.readUint32(),\n };\n }\n }\n\n /**\n * Parses a PRFT Box, with a loss of precision beyond 53 bits.\n * Use only when exact integers are not required, e.g. when\n * dividing by the timescale.\n *\n * @param {!shaka.util.DataViewReader} reader\n * @param {number} version\n * @return {!shaka.util.ParsedPRFTBox}\n */\n static parsePRFTInaccurate(reader, version) {\n reader.readUint32(); // Ignore referenceTrackId\n const ntpTimestampSec = reader.readUint32();\n const ntpTimestampFrac = reader.readUint32();\n const ntpTimestamp = ntpTimestampSec * 1000 +\n ntpTimestampFrac / 2**32 * 1000;\n\n let mediaTime;\n if (version === 0) {\n mediaTime = reader.readUint32();\n } else {\n const high = reader.readUint32();\n const low = reader.readUint32();\n mediaTime = (high * Math.pow(2, 32)) + low;\n }\n return {\n mediaTime,\n ntpTimestamp,\n };\n }\n\n /**\n * Parses a MDHD Box.\n * @param {!shaka.util.DataViewReader} reader\n * @param {number} version\n * @return {!shaka.util.ParsedMDHDBox}\n */\n static parseMDHD(reader, version) {\n if (version == 1) {\n reader.skip(8); // Skip \"creation_time\"\n reader.skip(8); // Skip \"modification_time\"\n } else {\n reader.skip(4); // Skip \"creation_time\"\n reader.skip(4); // Skip \"modification_time\"\n }\n\n const timescale = reader.readUint32();\n\n reader.skip(4); // Skip \"duration\"\n\n const language = reader.readUint16();\n\n // language is stored as an ISO-639-2/T code in an array of three\n // 5-bit fields each field is the packed difference between its ASCII\n // value and 0x60\n const languageString =\n String.fromCharCode((language >> 10) + 0x60) +\n String.fromCharCode(((language & 0x03c0) >> 5) + 0x60) +\n String.fromCharCode((language & 0x1f) + 0x60);\n\n return {\n timescale,\n language: languageString,\n };\n }\n\n /**\n * Parses a TREX Box.\n * @param {!shaka.util.DataViewReader} reader\n * @return {!shaka.util.ParsedTREXBox}\n */\n static parseTREX(reader) {\n reader.skip(4); // Skip \"track_ID\"\n reader.skip(4); // Skip \"default_sample_description_index\"\n const defaultSampleDuration = reader.readUint32();\n const defaultSampleSize = reader.readUint32();\n\n return {\n defaultSampleDuration,\n defaultSampleSize,\n };\n }\n\n /**\n * Parses a TRUN Box.\n * @param {!shaka.util.DataViewReader} reader\n * @param {number} version\n * @param {number} flags\n * @return {!shaka.util.ParsedTRUNBox}\n */\n static parseTRUN(reader, version, flags) {\n const sampleCount = reader.readUint32();\n const sampleData = [];\n let dataOffset = null;\n\n // \"data_offset\"\n if (flags & 0x000001) {\n dataOffset = reader.readUint32();\n }\n\n // Skip \"first_sample_flags\" if present.\n if (flags & 0x000004) {\n reader.skip(4);\n }\n\n for (let i = 0; i < sampleCount; i++) {\n /** @type {shaka.util.ParsedTRUNSample} */\n const sample = {\n sampleDuration: null,\n sampleSize: null,\n sampleCompositionTimeOffset: null,\n };\n\n // Read \"sample duration\" if present.\n if (flags & 0x000100) {\n sample.sampleDuration = reader.readUint32();\n }\n\n // Read \"sample_size\" if present.\n if (flags & 0x000200) {\n sample.sampleSize = reader.readUint32();\n }\n\n // Skip \"sample_flags\" if present.\n if (flags & 0x000400) {\n reader.skip(4);\n }\n\n // Read \"sample_time_offset\" if present.\n if (flags & 0x000800) {\n sample.sampleCompositionTimeOffset = version == 0 ?\n reader.readUint32() :\n reader.readInt32();\n }\n\n sampleData.push(sample);\n }\n\n return {\n sampleCount,\n sampleData,\n dataOffset,\n };\n }\n\n /**\n * Parses a TKHD Box.\n * @param {!shaka.util.DataViewReader} reader\n * @param {number} version\n * @return {!shaka.util.ParsedTKHDBox}\n */\n static parseTKHD(reader, version) {\n if (version == 1) {\n reader.skip(8); // Skip \"creation_time\"\n reader.skip(8); // Skip \"modification_time\"\n } else {\n reader.skip(4); // Skip \"creation_time\"\n reader.skip(4); // Skip \"modification_time\"\n }\n\n const trackId = reader.readUint32();\n\n if (version == 1) {\n reader.skip(8); // Skip \"reserved\"\n } else {\n reader.skip(4); // Skip \"reserved\"\n }\n reader.skip(4); // Skip \"duration\"\n reader.skip(8); // Skip \"reserved\"\n reader.skip(2); // Skip \"layer\"\n reader.skip(2); // Skip \"alternate_group\"\n reader.skip(2); // Skip \"volume\"\n reader.skip(2); // Skip \"reserved\"\n reader.skip(36); // Skip \"matrix_structure\"\n\n const width = reader.readUint16() + (reader.readUint16() / 16);\n const height = reader.readUint16() + (reader.readUint16() / 16);\n\n return {\n trackId,\n width,\n height,\n };\n }\n\n\n /**\n * Parses an visual sample entry box.\n * @param {!shaka.util.DataViewReader} reader\n * @return {!shaka.util.ParsedVisualSampleEntryBox}\n */\n static visualSampleEntry(reader) {\n // Skip 6 reserved bytes.\n // Skip 2-byte data reference index.\n // Skip 16 more reserved bytes.\n reader.skip(24);\n // 4 bytes for width/height.\n const width = reader.readUint16();\n const height = reader.readUint16();\n // Skip 8 bytes for horizontal/vertical resolution.\n // Skip 4 more reserved bytes (0)\n // Skip 2-byte frame count.\n // Skip 32-byte compressor name (length byte, then name, then 0-padding).\n // Skip 2-byte depth.\n // Skip 2 more reserved bytes (0xff)\n reader.skip(50);\n\n return {\n width: width,\n height: height,\n };\n }\n\n\n /**\n * Parses an audio sample entry box.\n * @param {!shaka.util.DataViewReader} reader\n * @return {!shaka.util.ParsedAudioSampleEntryBox}\n */\n static audioSampleEntry(reader) {\n reader.skip(6); // Skip \"reserved\"\n reader.skip(2); // Skip \"data_reference_index\"\n reader.skip(8); // Skip \"reserved\"\n const channelCount = reader.readUint16();\n reader.skip(2); // Skip \"samplesize\"\n reader.skip(2); // Skip \"pre_defined\"\n reader.skip(2); // Skip \"reserved\"\n const sampleRate = reader.readUint16() + (reader.readUint16() / 65536);\n\n return {\n channelCount,\n sampleRate,\n };\n }\n\n /**\n * Parses a ESDS box.\n * @param {!shaka.util.DataViewReader} reader\n * @return {!shaka.util.ParsedESDSBox}\n */\n static parseESDS(reader) {\n let codec = 'mp4a';\n let tag;\n let oti;\n while (reader.hasMoreData()) {\n tag = reader.readUint8();\n let byteRead = reader.readUint8();\n while (byteRead & 0x80) {\n byteRead = reader.readUint8();\n }\n if (tag == 0x03) {\n reader.readUint16();\n const flags = reader.readUint8();\n if (flags & 0x80) {\n reader.readUint16();\n }\n if (flags & 0x40) {\n reader.skip(reader.readUint8());\n }\n if (flags & 0x20) {\n reader.readUint16();\n }\n } else if (tag == 0x04) {\n oti = reader.readUint8();\n reader.skip(12);\n } else if (tag == 0x05) {\n break;\n }\n }\n if (oti) {\n codec += '.' + shaka.util.Mp4BoxParsers.toHex_(oti);\n if (tag == 0x05 && reader.hasMoreData()) {\n const firstData = reader.readUint8();\n let audioObjectType = (firstData & 0xF8) >> 3;\n if (audioObjectType === 31 && reader.hasMoreData()) {\n audioObjectType = 32 + ((firstData & 0x7) << 3) +\n ((reader.readUint8() & 0xE0) >> 5);\n }\n codec += '.' + audioObjectType;\n }\n }\n return {codec};\n }\n\n /**\n * Parses a AVCC box.\n * @param {string} codecBase\n * @param {!shaka.util.DataViewReader} reader\n * @param {string} boxName\n * @return {!shaka.util.ParsedAVCCBox}\n */\n static parseAVCC(codecBase, reader, boxName) {\n const Mp4BoxParsers = shaka.util.Mp4BoxParsers;\n reader.skip(1); // Skip \"configurationVersion\"\n const codec = codecBase + '.' +\n Mp4BoxParsers.toHex_(reader.readUint8()) +\n Mp4BoxParsers.toHex_(reader.readUint8()) +\n Mp4BoxParsers.toHex_(reader.readUint8());\n return {codec};\n }\n\n /**\n * Parses a HVCC box.\n * @param {string} codecBase\n * @param {!shaka.util.DataViewReader} reader\n * @param {string} boxName\n * @return {!shaka.util.ParsedHVCCBox}\n */\n static parseHVCC(codecBase, reader, boxName) {\n const Mp4BoxParsers = shaka.util.Mp4BoxParsers;\n reader.skip(1); // Skip \"configurationVersion\"\n const profileByte = reader.readUint8();\n const profileSpace = ['', 'A', 'B', 'C'][profileByte >> 6];\n const generalProfileIdc = profileByte & 0x1f;\n const profileCompat = reader.readUint32();\n const tierFlag = (profileByte & 0x20) >> 5 ? 'H' : 'L';\n const constraintIndicator = [\n reader.readUint8(),\n reader.readUint8(),\n reader.readUint8(),\n reader.readUint8(),\n reader.readUint8(),\n reader.readUint8(),\n ];\n const levelIDC = reader.readUint8();\n let codec = codecBase;\n codec += '.' + profileSpace + generalProfileIdc;\n codec += '.' + Mp4BoxParsers.toHex_(\n Mp4BoxParsers.reverseBits_(profileCompat),\n /* removeInitialZero= */ true);\n codec += '.' + tierFlag + levelIDC;\n let constraintString = '';\n for (let i = constraintIndicator.length; i--; ) {\n const byte = constraintIndicator[i];\n if (byte || constraintString) {\n const encodedByte = byte.toString(16).toUpperCase();\n constraintString = '.' + encodedByte + constraintString;\n }\n }\n codec += constraintString;\n\n return {codec};\n }\n\n /**\n * Parses a DVCC box.\n * @param {string} codecBase\n * @param {!shaka.util.DataViewReader} reader\n * @param {string} boxName\n * @return {!shaka.util.ParsedDVCCBox}\n */\n static parseDVCC(codecBase, reader, boxName) {\n const Mp4BoxParsers = shaka.util.Mp4BoxParsers;\n reader.skip(2); // Skip \"dv_version_major\" and \"dv_version_minor\"\n const thirdByte = reader.readUint8();\n const fourthByte = reader.readUint8();\n const profile = (thirdByte >> 1) & 0x7f;\n const level = ((thirdByte << 5) & 0x20) | ((fourthByte >> 3) & 0x1f);\n const codec = codecBase + '.' +\n Mp4BoxParsers.addLeadingZero_(profile) + '.' +\n Mp4BoxParsers.addLeadingZero_(level);\n\n return {codec};\n }\n\n /**\n * Parses a DVVC box.\n * @param {string} codecBase\n * @param {!shaka.util.DataViewReader} reader\n * @param {string} boxName\n * @return {!shaka.util.ParsedDVVCBox}\n */\n static parseDVVC(codecBase, reader, boxName) {\n const Mp4BoxParsers = shaka.util.Mp4BoxParsers;\n reader.skip(2); // Skip \"dv_version_major\" and \"dv_version_minor\"\n const thirdByte = reader.readUint8();\n const fourthByte = reader.readUint8();\n const profile = (thirdByte >> 1) & 0x7f;\n const level = ((thirdByte << 5) & 0x20) | ((fourthByte >> 3) & 0x1f);\n const codec = codecBase + '.' +\n Mp4BoxParsers.addLeadingZero_(profile) + '.' +\n Mp4BoxParsers.addLeadingZero_(level);\n\n return {codec};\n }\n\n /**\n * Parses a VPCC box.\n * @param {string} codecBase\n * @param {!shaka.util.DataViewReader} reader\n * @param {string} boxName\n * @return {!shaka.util.ParsedVPCCBox}\n */\n static parseVPCC(codecBase, reader, boxName) {\n const Mp4BoxParsers = shaka.util.Mp4BoxParsers;\n const profile = reader.readUint8();\n const level = reader.readUint8();\n const bitDepth = (reader.readUint8() >> 4) & 0x0f;\n const codec = codecBase + '.' +\n Mp4BoxParsers.addLeadingZero_(profile) + '.' +\n Mp4BoxParsers.addLeadingZero_(level) + '.' +\n Mp4BoxParsers.addLeadingZero_(bitDepth);\n\n return {codec};\n }\n\n /**\n * Parses a AV1C box.\n * @param {string} codecBase\n * @param {!shaka.util.DataViewReader} reader\n * @param {string} boxName\n * @return {!shaka.util.ParsedAV1CBox}\n */\n static parseAV1C(codecBase, reader, boxName) {\n const Mp4BoxParsers = shaka.util.Mp4BoxParsers;\n // More info https://aomediacodec.github.io/av1-isobmff/#av1codecconfigurationbox-syntax\n reader.skip(1); // Skip \"marker\" and \"version\"\n const secondByte = reader.readUint8();\n const thirdByte = reader.readUint8();\n const profile = secondByte >>> 5;\n const level = secondByte & 0x1f;\n const tierFlag = thirdByte >>> 7 ? 'H' : 'M';\n const highBitDepth = (thirdByte & 0x40) >> 6;\n const twelveBit = (thirdByte & 0x20) >> 5;\n const bitDepth = profile === 2 && highBitDepth ?\n (twelveBit ? 12 : 10) : (highBitDepth ? 10 : 8);\n const monochrome = (thirdByte & 0x10) >> 4;\n const chromaSubsamplingX = (thirdByte & 0x08) >> 3;\n const chromaSubsamplingY = (thirdByte & 0x04) >> 2;\n const chromaSamplePosition = thirdByte & 0x03;\n // TODO: parse color_description_present_flag\n // default it to BT.709/limited range for now\n const colorPrimaries = 1;\n const transferCharacteristics = 1;\n const matrixCoefficients = 1;\n const videoFullRangeFlag = 0;\n const codec = codecBase + '.' + profile +\n '.' + Mp4BoxParsers.addLeadingZero_(level) + tierFlag +\n '.' + Mp4BoxParsers.addLeadingZero_(bitDepth) +\n '.' + monochrome +\n '.' + chromaSubsamplingX + chromaSubsamplingY + chromaSamplePosition +\n '.' + Mp4BoxParsers.addLeadingZero_(colorPrimaries) +\n '.' + Mp4BoxParsers.addLeadingZero_(transferCharacteristics) +\n '.' + Mp4BoxParsers.addLeadingZero_(matrixCoefficients) +\n '.' + videoFullRangeFlag;\n\n return {codec};\n }\n\n /**\n * Parses a FRMA box.\n * @param {!shaka.util.DataViewReader} reader\n * @return {!shaka.util.ParsedFRMABox}\n */\n static parseFRMA(reader) {\n const fourcc = reader.readUint32();\n const codec = shaka.util.Mp4Parser.typeToString(fourcc);\n return {codec};\n }\n\n /**\n * Parses a TENC box.\n * @param {!shaka.util.DataViewReader} reader\n * @return {!shaka.util.ParsedTENCBox}\n */\n static parseTENC(reader) {\n const Uint8ArrayUtils = shaka.util.Uint8ArrayUtils;\n reader.readUint8(); // reserved\n reader.readUint8();\n reader.readUint8(); // default_isProtected\n reader.readUint8(); // default_Per_Sample_IV_Size\n const defaultKID = Uint8ArrayUtils.toHex(reader.readBytes(16));\n return {defaultKID};\n }\n\n /**\n * Parses a HDLR box.\n * @param {!shaka.util.DataViewReader} reader\n * @return {!shaka.util.ParsedHDLRBox}\n */\n static parseHDLR(reader) {\n reader.skip(8); // Skip \"pre_defined\"\n\n const handlerType = reader.readTerminatedString();\n return {handlerType};\n }\n\n /**\n * Parses a PRJI box.\n * @param {!shaka.util.DataViewReader} reader\n * @return {!shaka.util.ParsedPRJIBox}\n */\n static parsePRJI(reader) {\n const projection = reader.readTerminatedString();\n return {projection};\n }\n\n /**\n * Parses a HFOV box.\n * @param {!shaka.util.DataViewReader} reader\n * @return {!shaka.util.ParsedHFOVBox}\n */\n static parseHFOV(reader) {\n const millidegrees = reader.readUint32();\n\n return {\n hfov: millidegrees / 1000,\n };\n }\n\n /**\n * Parses a COLR box.\n * @param {!shaka.util.DataViewReader} reader\n * @return {!shaka.util.ParsedCOLRBox}\n */\n static parseCOLR(reader) {\n let colorGamut = null;\n let videoRange = null;\n const data = reader.readBytes(4);\n let colorType = '';\n colorType += String.fromCharCode(data[0]);\n colorType += String.fromCharCode(data[1]);\n colorType += String.fromCharCode(data[2]);\n colorType += String.fromCharCode(data[3]);\n if (colorType === 'nclx') {\n const colorPrimaries = reader.readUint16();\n switch (colorPrimaries) {\n case 1:\n case 5:\n case 6:\n case 7:\n colorGamut = 'srgb';\n break;\n case 9:\n colorGamut = 'rec2020';\n break;\n case 11:\n case 12:\n colorGamut = 'p3';\n break;\n }\n const transferCharacteristics = reader.readUint16();\n reader.readUint16(); // matrix_coefficients\n switch (transferCharacteristics) {\n case 1:\n case 6:\n case 13:\n case 14:\n case 15:\n videoRange = 'SDR';\n break;\n case 16:\n videoRange = 'PQ';\n break;\n case 18:\n videoRange = 'HLG';\n break;\n }\n }\n return {\n colorGamut,\n videoRange,\n };\n }\n\n /**\n * Parses AV1 codec string with COLR box information.\n *\n * AV1 codec info: https://aomediacodec.github.io/av1-isobmff/#codecsparam\n *\n * @param {string} codec\n * @param {!shaka.util.DataViewReader} reader\n * @return {string}\n */\n static updateAV1CodecWithCOLRBox(codec, reader) {\n const Mp4BoxParsers = shaka.util.Mp4BoxParsers;\n const initialPosition = reader.getPosition();\n const data = reader.readBytes(4);\n let colorType = '';\n colorType += String.fromCharCode(data[0]);\n colorType += String.fromCharCode(data[1]);\n colorType += String.fromCharCode(data[2]);\n colorType += String.fromCharCode(data[3]);\n if (colorType === 'nclx') {\n const colorPrimaries = reader.readUint16();\n const transferCharacteristics = reader.readUint16();\n const matrixCoefficients = reader.readUint16();\n const videoFullRangeFlag = reader.readUint8() >> 7;\n const codecParts = codec.split('.');\n if (codecParts.length == 10) {\n codecParts[6] = Mp4BoxParsers.addLeadingZero_(colorPrimaries);\n codecParts[7] = Mp4BoxParsers.addLeadingZero_(transferCharacteristics);\n codecParts[8] = Mp4BoxParsers.addLeadingZero_(matrixCoefficients);\n codecParts[9] = String(videoFullRangeFlag);\n codec = codecParts.join('.');\n }\n }\n reader.seek(initialPosition);\n return codec;\n }\n\n /**\n * Convert a number to hex\n * @param {number} x\n * @param {boolean=} removeInitialZero\n * @return {string}\n * @private\n */\n static toHex_(x, removeInitialZero = false) {\n const value = x.toString(16).toUpperCase();\n if (removeInitialZero) {\n return value;\n }\n return ('0' + value).slice(-2);\n }\n\n /**\n * Reverse a number bit to bit\n * @param {number} x\n * @return {number}\n * @private\n */\n static reverseBits_(x) {\n let val = x;\n let reversed = 0;\n for (let i = 0; i < 32; i++) {\n reversed |= val & 1;\n if (i == 31) {\n break;\n }\n reversed <<= 1;\n val >>= 1;\n }\n return reversed;\n }\n\n /**\n *\n * @param {number} x\n * @return {string}\n * @private\n */\n static addLeadingZero_(x) {\n return (x < 10 ? '0' : '') + x;\n }\n};\n\n\n/**\n * @typedef {{\n * trackId: number,\n * defaultSampleDuration: ?number,\n * defaultSampleSize: ?number,\n * baseDataOffset: ?number\n * }}\n *\n * @property {number} trackId\n * As per the spec: an integer that uniquely identifies this\n * track over the entire life‐time of this presentation\n * @property {?number} defaultSampleDuration\n * If specified via flags, this overrides the default sample\n * duration in the Track Extends Box for this fragment\n * @property {?number} defaultSampleSize\n * If specified via flags, this overrides the default sample\n * size in the Track Extends Box for this fragment\n * @property {?number} baseDataOffset\n * If specified via flags, this indicate the base data offset\n *\n * @exportDoc\n */\nshaka.util.ParsedTFHDBox;\n\n/**\n * @typedef {{\n * baseMediaDecodeTime: number\n * }}\n *\n * @property {number} baseMediaDecodeTime\n * As per the spec: the absolute decode time, measured on the media\n * timeline, of the first sample in decode order in the track fragment\n *\n * @exportDoc\n */\nshaka.util.ParsedTFDTBox;\n\n/**\n * @typedef {{\n * mediaTime: number,\n * ntpTimestamp: number\n * }}\n *\n * @exportDoc\n */\nshaka.util.ParsedPRFTBox;\n\n/**\n * @typedef {{\n * timescale: number,\n * language: string\n * }}\n *\n * @property {number} timescale\n * As per the spec: an integer that specifies the time‐scale for this media;\n * this is the number of time units that pass in one second\n * @property {string} language\n * Language code for this media\n *\n * @exportDoc\n */\nshaka.util.ParsedMDHDBox;\n\n/**\n * @typedef {{\n * defaultSampleDuration: number,\n * defaultSampleSize: number\n * }}\n *\n * @property {number} defaultSampleDuration\n * The default sample duration to be used in track fragments\n * @property {number} defaultSampleSize\n * The default sample size to be used in track fragments\n *\n * @exportDoc\n */\nshaka.util.ParsedTREXBox;\n\n/**\n * @typedef {{\n * sampleCount: number,\n * sampleData: !Array.,\n * dataOffset: ?number\n * }}\n *\n * @property {number} sampleCount\n * As per the spec: the number of samples being added in this run;\n * @property {!Array.} sampleData\n * An array of size containing data for each sample\n * @property {?number} dataOffset\n * If specified via flags, this indicate the offset of the sample in bytes.\n *\n * @exportDoc\n */\nshaka.util.ParsedTRUNBox;\n\n/**\n * @typedef {{\n * sampleDuration: ?number,\n * sampleSize: ?number,\n * sampleCompositionTimeOffset: ?number\n * }}\n *\n * @property {?number} sampleDuration\n * The length of the sample in timescale units.\n * @property {?number} sampleSize\n * The size of the sample in bytes.\n * @property {?number} sampleCompositionTimeOffset\n * The time since the start of the sample in timescale units. Time\n * offset is based of the start of the sample. If this value is\n * missing, the accumulated durations preceeding this time sample will\n * be used to create the start time.\n *\n * @exportDoc\n */\nshaka.util.ParsedTRUNSample;\n\n/**\n * @typedef {{\n * trackId: number,\n * width: number,\n * height: number\n * }}\n *\n * @property {number} trackId\n * Unique ID indicative of this track\n * @property {number} width\n * Width of this track in pixels\n * @property {number} height\n * Height of this track in pixels.\n *\n * @exportDoc\n */\nshaka.util.ParsedTKHDBox;\n\n/**\n * @typedef {{\n * codec: string\n * }}\n *\n * @property {string} codec\n * A fourcc for a codec\n *\n * @exportDoc\n */\nshaka.util.ParsedFRMABox;\n\n/**\n * @typedef {{\n * defaultKID: string\n * }}\n *\n * @property {string} defaultKID\n *\n * @exportDoc\n */\nshaka.util.ParsedTENCBox;\n\n/**\n * @typedef {{\n * width: number,\n * height: number\n * }}\n *\n * @property {number} width\n * @property {number} height\n *\n * @exportDoc\n */\nshaka.util.ParsedVisualSampleEntryBox;\n\n/**\n * @typedef {{\n * channelCount: number,\n * sampleRate: number\n * }}\n *\n * @property {number} channelCount\n * @property {number} sampleRate\n *\n * @exportDoc\n */\nshaka.util.ParsedAudioSampleEntryBox;\n\n/**\n * @typedef {{\n * codec: string\n * }}\n *\n * @property {string} codec\n *\n * @exportDoc\n */\nshaka.util.ParsedESDSBox;\n\n/**\n * @typedef {{\n * codec: string\n * }}\n *\n * @property {string} codec\n *\n * @exportDoc\n */\nshaka.util.ParsedAVCCBox;\n\n/**\n * @typedef {{\n * codec: string\n * }}\n *\n * @property {string} codec\n *\n * @exportDoc\n */\nshaka.util.ParsedHVCCBox;\n\n/**\n * @typedef {{\n * codec: string\n * }}\n *\n * @property {string} codec\n *\n * @exportDoc\n */\nshaka.util.ParsedDVCCBox;\n\n/**\n * @typedef {{\n * codec: string\n * }}\n *\n * @property {string} codec\n *\n * @exportDoc\n */\nshaka.util.ParsedDVVCBox;\n\n/**\n * @typedef {{\n * codec: string\n * }}\n *\n * @property {string} codec\n *\n * @exportDoc\n */\nshaka.util.ParsedVPCCBox;\n\n/**\n * @typedef {{\n * codec: string\n * }}\n *\n * @property {string} codec\n *\n * @exportDoc\n */\nshaka.util.ParsedAV1CBox;\n\n/**\n * @typedef {{\n * handlerType: string\n * }}\n *\n * @property {string} handlerType\n * A four-character code that identifies the type of the media handler or\n * data handler. For media handlers, this field defines the type of\n * data—for example, 'vide' for video data, 'soun' for sound data.\n *\n * @exportDoc\n */\nshaka.util.ParsedHDLRBox;\n\n/**\n * @typedef {{\n * projection: string\n * }}\n *\n * @property {string} projection\n * A four-character code that identifies the type of the projection.\n * Possible values:\n * - Rectangular: ‘rect’\n * - Half equirectangular: ‘hequ’\n * - Equirectanguler: ?\n * - Fisheye: ‘fish’\n *\n * @exportDoc\n */\nshaka.util.ParsedPRJIBox;\n\n/**\n * @typedef {{\n * hfov: number\n * }}\n *\n * @property {number} hfov\n *\n * @exportDoc\n */\nshaka.util.ParsedHFOVBox;\n\n/**\n * @typedef {{\n * colorGamut: ?string,\n * videoRange: ?string\n * }}\n *\n * @property {?string} colorGamut\n * @property {?string} videoRange\n *\n * @exportDoc\n */\nshaka.util.ParsedCOLRBox;\n","/**\n * @license\n * Copyright Brightcove, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\ngoog.provide('shaka.util.ExpGolomb');\n\ngoog.require('shaka.util.BufferUtils');\ngoog.require('shaka.util.DataViewReader');\n\n\n/**\n * @summary\n * Parser for exponential Golomb codes, a variable-bitwidth number encoding\n * scheme used by h264.\n * Based on https://github.com/videojs/mux.js/blob/main/lib/utils/exp-golomb.js\n *\n * @export\n */\nshaka.util.ExpGolomb = class {\n /**\n * @param {!Uint8Array} data\n * @param {boolean=} convertEbsp2rbsp\n */\n constructor(data, convertEbsp2rbsp = false) {\n /** @private {!Uint8Array} */\n this.data_ = data;\n if (convertEbsp2rbsp) {\n this.data_ = this.ebsp2rbsp_(data);\n }\n\n /** @private {number} */\n this.workingBytesAvailable_ = this.data_.byteLength;\n\n // the current word being examined\n /** @private {number} */\n this.workingWord_ = 0;\n\n // the number of bits left to examine in the current word\n /** @private {number} */\n this.workingBitsAvailable_ = 0;\n }\n\n /**\n * @param {!Uint8Array} data\n * @return {!Uint8Array}\n * @private\n */\n ebsp2rbsp_(data) {\n const ret = new Uint8Array(data.byteLength);\n let retIndex = 0;\n\n for (let i = 0; i < data.byteLength; i++) {\n if (i >= 2) {\n // Unescape: Skip 0x03 after 00 00\n if (data[i] == 0x03 && data[i - 1] == 0x00 && data[i - 2] == 0x00) {\n continue;\n }\n }\n ret[retIndex] = data[i];\n retIndex++;\n }\n\n return shaka.util.BufferUtils.toUint8(ret, 0, retIndex);\n }\n\n /**\n * Load the next word\n *\n * @private\n */\n loadWord_() {\n const position = this.data_.byteLength - this.workingBytesAvailable_;\n const bytes = new Uint8Array(4);\n const availableBytes = Math.min(4, this.workingBytesAvailable_);\n\n if (availableBytes === 0) {\n return;\n }\n\n bytes.set(this.data_.subarray(position, position + availableBytes));\n const dataView = new shaka.util.DataViewReader(\n bytes, shaka.util.DataViewReader.Endianness.BIG_ENDIAN);\n this.workingWord_ = dataView.readUint32();\n\n // track the amount of data that has been processed\n this.workingBitsAvailable_ = availableBytes * 8;\n this.workingBytesAvailable_ -= availableBytes;\n }\n\n /**\n * Skip n bits\n *\n * @param {number} count\n */\n skipBits(count) {\n if (this.workingBitsAvailable_ <= count) {\n count -= this.workingBitsAvailable_;\n const skipBytes = Math.floor(count / 8);\n count -= (skipBytes * 8);\n this.workingBitsAvailable_ -= skipBytes;\n this.loadWord_();\n }\n this.workingWord_ <<= count;\n this.workingBitsAvailable_ -= count;\n }\n\n /**\n * Read n bits\n *\n * @param {number} size\n * @return {number}\n */\n readBits(size) {\n let bits = Math.min(this.workingBitsAvailable_, size);\n const valu = this.workingWord_ >>> (32 - bits);\n this.workingBitsAvailable_ -= bits;\n if (this.workingBitsAvailable_ > 0) {\n this.workingWord_ <<= bits;\n } else if (this.workingBytesAvailable_ > 0) {\n this.loadWord_();\n }\n bits = size - bits;\n if (bits > 0) {\n return (valu << bits) | this.readBits(bits);\n }\n return valu;\n }\n\n /**\n * Return the number of skip leading zeros\n *\n * @return {number}\n * @private\n */\n skipLeadingZeros_() {\n let i;\n for (i = 0; i < this.workingBitsAvailable_; ++i) {\n if ((this.workingWord_ & (0x80000000 >>> i)) !== 0) {\n // the first bit of working word is 1\n this.workingWord_ <<= i;\n this.workingBitsAvailable_ -= i;\n return i;\n }\n }\n\n // we exhausted workingWord and still have not found a 1\n this.loadWord_();\n return i + this.skipLeadingZeros_();\n }\n\n /**\n * Skip exponential Golomb\n */\n skipExpGolomb() {\n this.skipBits(1 + this.skipLeadingZeros_());\n }\n\n /**\n * Return unsigned exponential Golomb\n *\n * @return {number}\n */\n readUnsignedExpGolomb() {\n const clz = this.skipLeadingZeros_();\n return this.readBits(clz + 1) - 1;\n }\n\n /**\n * Return exponential Golomb\n *\n * @return {number}\n */\n readExpGolomb() {\n const valu = this.readUnsignedExpGolomb();\n if (0x01 & valu) {\n // the number is odd if the low order bit is set\n // add 1 to make it even, and divide by 2\n return (1 + valu) >>> 1;\n }\n // divide by two then make it negative\n return -1 * (valu >>> 1);\n }\n\n /**\n * Read 1 bit as boolean\n *\n * @return {boolean}\n */\n readBoolean() {\n return this.readBits(1) === 1;\n }\n\n /**\n * Read 8 bits\n *\n * @return {number}\n */\n readUnsignedByte() {\n return this.readBits(8);\n }\n\n /**\n * The scaling list is optionally transmitted as part of a Sequence Parameter\n * Set (SPS).\n *\n * @param {number} count the number of entries in this scaling list\n * @see Recommendation ITU-T H.264, Section 7.3.2.1.1.1\n */\n skipScalingList(count) {\n let lastScale = 8;\n let nextScale = 8;\n\n for (let j = 0; j < count; j++) {\n if (nextScale !== 0) {\n const deltaScale = this.readExpGolomb();\n nextScale = (lastScale + deltaScale + 256) % 256;\n }\n lastScale = (nextScale === 0) ? lastScale : nextScale;\n }\n }\n\n /**\n * Return the slice type\n *\n * @return {number}\n */\n readSliceType() {\n // skip Nalu type\n this.readUnsignedByte();\n // discard first_mb_in_slice\n this.readUnsignedExpGolomb();\n // return slice_type\n return this.readUnsignedExpGolomb();\n }\n};\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.util.TsParser');\n\ngoog.require('goog.asserts');\ngoog.require('shaka.Deprecate');\ngoog.require('shaka.log');\ngoog.require('shaka.util.ExpGolomb');\ngoog.require('shaka.util.Id3Utils');\ngoog.require('shaka.util.StringUtils');\ngoog.require('shaka.util.Uint8ArrayUtils');\n\n\n/**\n * @see https://en.wikipedia.org/wiki/MPEG_transport_stream\n * @export\n */\nshaka.util.TsParser = class {\n /** */\n constructor() {\n /** @private {?number} */\n this.pmtId_ = null;\n\n /** @private {boolean} */\n this.pmtParsed_ = false;\n\n /** @private {?number} */\n this.videoPid_ = null;\n\n /** @private {?string} */\n this.videoCodec_ = null;\n\n /** @private {!Array.>} */\n this.videoData_ = [];\n\n /** @private {!Array.} */\n this.videoPes_ = [];\n\n /** @private {?number} */\n this.audioPid_ = null;\n\n /** @private {?string} */\n this.audioCodec_ = null;\n\n /** @private {!Array.>} */\n this.audioData_ = [];\n\n /** @private {!Array.} */\n this.audioPes_ = [];\n\n /** @private {?number} */\n this.id3Pid_ = null;\n\n /** @private {!Array.>} */\n this.id3Data_ = [];\n\n /** @private {?number} */\n this.referencePts_ = null;\n\n /** @private {?number} */\n this.referenceDts_ = null;\n\n /** @private {?shaka.util.TsParser.OpusMetadata} */\n this.opusMetadata_ = null;\n }\n\n /**\n * Clear previous data\n *\n * @export\n */\n clearData() {\n this.videoData_ = [];\n this.videoPes_ = [];\n this.audioData_ = [];\n this.audioPes_ = [];\n this.id3Data_ = [];\n }\n\n /**\n * Parse the given data\n *\n * @param {Uint8Array} data\n * @return {!shaka.util.TsParser}\n * @export\n */\n parse(data) {\n const packetLength = shaka.util.TsParser.PacketLength_;\n\n // A TS fragment should contain at least 3 TS packets, a PAT, a PMT, and\n // one PID.\n if (data.length < 3 * packetLength) {\n return this;\n }\n const syncOffset = Math.max(0, shaka.util.TsParser.syncOffset(data));\n\n const length = data.length - (data.length + syncOffset) % packetLength;\n\n let unknownPIDs = false;\n\n // loop through TS packets\n for (let start = syncOffset; start < length; start += packetLength) {\n if (data[start] == 0x47) {\n const payloadUnitStartIndicator = !!(data[start + 1] & 0x40);\n // pid is a 13-bit field starting at the last 5 bits of TS[1]\n const pid = ((data[start + 1] & 0x1f) << 8) + data[start + 2];\n const adaptationFieldControl = (data[start + 3] & 0x30) >> 4;\n\n // if an adaption field is present, its length is specified by the\n // fifth byte of the TS packet header.\n let offset;\n if (adaptationFieldControl > 1) {\n offset = start + 5 + data[start + 4];\n // continue if there is only adaptation field\n if (offset == start + packetLength) {\n continue;\n }\n } else {\n offset = start + 4;\n }\n switch (pid) {\n case 0:\n if (payloadUnitStartIndicator) {\n offset += data[offset] + 1;\n }\n\n this.pmtId_ = this.getPmtId_(data, offset);\n break;\n case 17:\n case 0x1fff:\n break;\n case this.pmtId_: {\n if (payloadUnitStartIndicator) {\n offset += data[offset] + 1;\n }\n\n const parsedPIDs = this.parsePMT_(data, offset);\n\n // only update track id if track PID found while parsing PMT\n // this is to avoid resetting the PID to -1 in case\n // track PID transiently disappears from the stream\n // this could happen in case of transient missing audio samples\n // for example\n // NOTE this is only the PID of the track as found in TS,\n // but we are not using this for MP4 track IDs.\n if (parsedPIDs.video != -1) {\n this.videoPid_ = parsedPIDs.video;\n this.videoCodec_ = parsedPIDs.videoCodec;\n }\n if (parsedPIDs.audio != -1) {\n this.audioPid_ = parsedPIDs.audio;\n this.audioCodec_ = parsedPIDs.audioCodec;\n }\n if (parsedPIDs.id3 != -1) {\n this.id3Pid_ = parsedPIDs.id3;\n }\n\n if (unknownPIDs && !this.pmtParsed_) {\n shaka.log.debug('reparse from beginning');\n unknownPIDs = false;\n // we set it to -188, the += 188 in the for loop will reset\n // start to 0\n start = syncOffset - packetLength;\n }\n this.pmtParsed_ = true;\n break;\n }\n case this.videoPid_: {\n const videoData = data.subarray(offset, start + packetLength);\n if (payloadUnitStartIndicator) {\n this.videoData_.push([videoData]);\n } else if (this.videoData_.length) {\n const prevVideoData = this.videoData_[this.videoData_.length - 1];\n if (prevVideoData) {\n this.videoData_[this.videoData_.length - 1].push(videoData);\n }\n }\n break;\n }\n case this.audioPid_: {\n const audioData = data.subarray(offset, start + packetLength);\n if (payloadUnitStartIndicator) {\n this.audioData_.push([audioData]);\n } else if (this.audioData_.length) {\n const prevAudioData = this.audioData_[this.audioData_.length - 1];\n if (prevAudioData) {\n this.audioData_[this.audioData_.length - 1].push(audioData);\n }\n }\n break;\n }\n case this.id3Pid_: {\n const id3Data = data.subarray(offset, start + packetLength);\n if (payloadUnitStartIndicator) {\n this.id3Data_.push([id3Data]);\n } else if (this.id3Data_.length) {\n const prevId3Data = this.id3Data_[this.id3Data_.length - 1];\n if (prevId3Data) {\n this.id3Data_[this.id3Data_.length - 1].push(id3Data);\n }\n }\n break;\n }\n default:\n unknownPIDs = true;\n break;\n }\n } else {\n shaka.log.warning('Found TS packet that do not start with 0x47');\n }\n }\n return this;\n }\n\n /**\n * Get the PMT ID from the PAT\n *\n * @param {Uint8Array} data\n * @param {number} offset\n * @return {number}\n * @private\n */\n getPmtId_(data, offset) {\n // skip the PSI header and parse the first PMT entry\n return ((data[offset + 10] & 0x1f) << 8) | data[offset + 11];\n }\n\n /**\n * Parse PMT\n *\n * @param {Uint8Array} data\n * @param {number} offset\n * @return {!shaka.util.TsParser.PMT}\n * @private\n */\n parsePMT_(data, offset) {\n const StringUtils = shaka.util.StringUtils;\n const result = {\n audio: -1,\n video: -1,\n id3: -1,\n audioCodec: '',\n videoCodec: '',\n };\n const sectionLength = ((data[offset + 1] & 0x0f) << 8) | data[offset + 2];\n const tableEnd = offset + 3 + sectionLength - 4;\n // to determine where the table is, we have to figure out how\n // long the program info descriptors are\n const programInfoLength =\n ((data[offset + 10] & 0x0f) << 8) | data[offset + 11];\n // advance the offset to the first entry in the mapping table\n offset += 12 + programInfoLength;\n while (offset < tableEnd) {\n const pid = ((data[offset + 1] & 0x1f) << 8) | data[offset + 2];\n const esInfoLength = ((data[offset + 3] & 0x0f) << 8) | data[offset + 4];\n switch (data[offset]) {\n case 0x06:\n // stream_type 6 can mean a lot of different things in case of DVB.\n // We need to look at the descriptors. Right now, we're only\n // interested in a few audio and video formats,.\n if (esInfoLength > 0) {\n let parsePos = offset + 5;\n let remaining = esInfoLength;\n // Descriptor info: https://www.streamguru.de/mpeg-analyzer/supported-descriptor-list/\n while (remaining > 2) {\n const descriptorId = data[parsePos];\n const descriptorLen = data[parsePos + 1] + 2;\n switch (descriptorId) {\n // Registration descriptor\n case 0x05: {\n const registrationData =\n data.subarray(parsePos + 2, parsePos + descriptorLen);\n const registration =\n StringUtils.fromCharCode(registrationData);\n if (result.audio == -1 && registration === 'Opus') {\n result.audio = pid;\n result.audioCodec = 'opus';\n } else if (result.video == -1 && registration === 'AV01') {\n result.video = pid;\n result.videoCodec = 'av1';\n }\n break;\n }\n // DVB Descriptor for AC-3\n case 0x6a:\n if (result.audio == -1) {\n result.audio = pid;\n result.audioCodec = 'ac3';\n }\n break;\n // DVB Descriptor for EC-3\n case 0x7a:\n if (result.audio == -1) {\n result.audio = pid;\n result.audioCodec = 'ec3';\n }\n break;\n // DVB Descriptor for AAC\n case 0x7c:\n if (result.audio == -1) {\n result.audio = pid;\n result.audioCodec = 'aac';\n }\n break;\n // DVB extension descriptor\n case 0x7f:\n if (result.audioCodec == 'opus') {\n const extensionDescriptorId = data[parsePos + 2];\n let channelConfigCode = null;\n // User defined (provisional Opus)\n if (extensionDescriptorId === 0x80) {\n channelConfigCode = data[parsePos + 3];\n }\n\n if (channelConfigCode == null) {\n // Not Supported Opus channel count.\n break;\n }\n const channelCount = (channelConfigCode & 0x0F) === 0 ?\n 2 : (channelConfigCode & 0x0F);\n this.opusMetadata_ = {\n channelCount,\n channelConfigCode,\n sampleRate: 48000,\n };\n }\n break;\n }\n parsePos += descriptorLen;\n remaining -= descriptorLen;\n }\n }\n break;\n // SAMPLE-AES AAC\n case 0xcf:\n break;\n // ISO/IEC 13818-7 ADTS AAC (MPEG-2 lower bit-rate audio)\n case 0x0f:\n if (result.audio == -1) {\n result.audio = pid;\n result.audioCodec = 'aac';\n }\n break;\n // LOAS/LATM AAC\n case 0x11:\n if (result.audio == -1) {\n result.audio = pid;\n result.audioCodec = 'aac-loas';\n }\n break;\n // Packetized metadata (ID3)\n case 0x15:\n if (result.id3 == -1) {\n result.id3 = pid;\n }\n break;\n // SAMPLE-AES AVC\n case 0xdb:\n break;\n // ITU-T Rec. H.264 and ISO/IEC 14496-10 (lower bit-rate video)\n case 0x1b:\n if (result.video == -1) {\n result.video = pid;\n result.videoCodec = 'avc';\n }\n break;\n // ISO/IEC 11172-3 (MPEG-1 audio)\n // or ISO/IEC 13818-3 (MPEG-2 halved sample rate audio)\n case 0x03:\n case 0x04:\n if (result.audio == -1) {\n result.audio = pid;\n result.audioCodec = 'mp3';\n }\n break;\n // HEVC\n case 0x24:\n if (result.video == -1) {\n result.video = pid;\n result.videoCodec = 'hvc';\n }\n break;\n // AC-3\n case 0x81:\n if (result.audio == -1) {\n result.audio = pid;\n result.audioCodec = 'ac3';\n }\n break;\n // EC-3\n case 0x84:\n case 0x87:\n if (result.audio == -1) {\n result.audio = pid;\n result.audioCodec = 'ec3';\n }\n break;\n default:\n // shaka.log.warning('Unknown stream type:', data[offset]);\n break;\n }\n // move to the next table entry\n // skip past the elementary stream descriptors, if present\n offset += esInfoLength + 5;\n }\n return result;\n }\n\n /**\n * Parse PES\n *\n * @param {Uint8Array} data\n * @return {?shaka.extern.MPEG_PES}\n * @private\n */\n parsePES_(data) {\n const startPrefix = (data[0] << 16) | (data[1] << 8) | data[2];\n // In certain live streams, the start of a TS fragment has ts packets\n // that are frame data that is continuing from the previous fragment. This\n // is to check that the pes data is the start of a new pes data\n if (startPrefix !== 1) {\n return null;\n }\n /** @type {shaka.extern.MPEG_PES} */\n const pes = {\n data: new Uint8Array(0),\n // get the packet length, this will be 0 for video\n packetLength: ((data[4] << 8) | data[5]),\n pts: null,\n dts: null,\n nalus: [],\n };\n\n // if PES parsed length is not zero and greater than total received length,\n // stop parsing. PES might be truncated. minus 6 : PES header size\n if (pes.packetLength && pes.packetLength > data.byteLength - 6) {\n return null;\n }\n\n // PES packets may be annotated with a PTS value, or a PTS value\n // and a DTS value. Determine what combination of values is\n // available to work with.\n const ptsDtsFlags = data[7];\n\n // PTS and DTS are normally stored as a 33-bit number. Javascript\n // performs all bitwise operations on 32-bit integers but javascript\n // supports a much greater range (52-bits) of integer using standard\n // mathematical operations.\n // We construct a 31-bit value using bitwise operators over the 31\n // most significant bits and then multiply by 4 (equal to a left-shift\n // of 2) before we add the final 2 least significant bits of the\n // timestamp (equal to an OR.)\n if (ptsDtsFlags & 0xC0) {\n // the PTS and DTS are not written out directly. For information\n // on how they are encoded, see\n // http://dvd.sourceforge.net/dvdinfo/pes-hdr.html\n const pts =\n (data[9] & 0x0e) * 536870912 + // 1 << 29\n (data[10] & 0xff) * 4194304 + // 1 << 22\n (data[11] & 0xfe) * 16384 + // 1 << 14\n (data[12] & 0xff) * 128 + // 1 << 7\n (data[13] & 0xfe) / 2;\n\n if (this.referencePts_ == null) {\n this.referencePts_ = pts;\n }\n\n pes.pts = this.handleRollover_(pts, this.referencePts_);\n this.referencePts_ = pes.pts;\n\n pes.dts = pes.pts;\n if (ptsDtsFlags & 0x40) {\n const dts =\n (data[14] & 0x0e) * 536870912 + // 1 << 29\n (data[15] & 0xff) * 4194304 + // 1 << 22\n (data[16] & 0xfe) * 16384 + // 1 << 14\n (data[17] & 0xff) * 128 + // 1 << 7\n (data[18] & 0xfe) / 2;\n\n if (this.referenceDts_ == null) {\n this.referenceDts_ = dts;\n }\n\n pes.dts = this.handleRollover_(dts, this.referenceDts_);\n }\n this.referenceDts_ = pes.dts;\n }\n\n const pesHdrLen = data[8];\n // 9 bytes : 6 bytes for PES header + 3 bytes for PES extension\n const payloadStartOffset = pesHdrLen + 9;\n if (data.byteLength <= payloadStartOffset) {\n return null;\n }\n\n pes.data = data.subarray(payloadStartOffset);\n\n return pes;\n }\n\n /**\n * Parse AVC Nalus\n *\n * The code is based on hls.js\n * Credit to https://github.com/video-dev/hls.js/blob/master/src/demux/tsdemuxer.ts\n *\n * @param {shaka.extern.MPEG_PES} pes\n * @param {?shaka.extern.MPEG_PES=} nextPes\n * @return {!Array.}\n * @export\n */\n parseAvcNalus(pes, nextPes) {\n shaka.Deprecate.deprecateFeature(5,\n 'TsParser.parseAvcNalus',\n 'Please use parseNalus function instead.');\n return this.parseNalus(pes);\n }\n\n /**\n * Parse AVC and HVC Nalus\n *\n * The code is based on hls.js\n * Credit to https://github.com/video-dev/hls.js/blob/master/src/demux/tsdemuxer.ts\n *\n * @param {shaka.extern.MPEG_PES} pes\n * @param {?shaka.extern.VideoNalu=} lastNalu\n * @param {?number=} lastState\n * @return {!Array.}\n * @export\n */\n parseNalus(pes, lastNalu, lastState) {\n const timescale = shaka.util.TsParser.Timescale;\n const time = pes.pts ? pes.pts / timescale : null;\n const data = pes.data;\n const len = data.byteLength;\n\n let naluHeaderSize = 1;\n if (this.videoCodec_ == 'hvc') {\n naluHeaderSize = 2;\n }\n\n // A NALU does not contain is its size.\n // The Annex B specification solves this by requiring ‘Start Codes’ to\n // precede each NALU. A start code is 2 or 3 0x00 bytes followed with a\n // 0x01 byte. e.g. 0x000001 or 0x00000001.\n // More info in: https://stackoverflow.com/questions/24884827/possible-locations-for-sequence-picture-parameter-sets-for-h-264-stream/24890903#24890903\n let numZeros = lastState || 0;\n\n /** @type {!Array.} */\n const nalus = [];\n\n // Start position includes the first byte where we read the type.\n // The data we extract begins at the next byte.\n let lastNaluStart = -1;\n // Extracted from the first byte.\n let lastNaluType = 0;\n\n /** @type {?shaka.extern.VideoNalu} */\n let infoOfLastNalu;\n\n for (let i = 0; i < len; ++i) {\n const value = data[i];\n if (!value) {\n numZeros++;\n } else if (numZeros >= 2 && value == 1) {\n if (lastNalu && !nalus.length && lastNaluStart == -1) {\n // If we are scanning the next PES, we need append the data to the\n // previous Nalu and don't scan for more nalus.\n const startCodeSize = numZeros > 3 ? 3 : numZeros;\n const lastByteToKeep = i - startCodeSize;\n // Optimization\n if (lastState && lastByteToKeep != 0) {\n const prevData = data.subarray(0, lastByteToKeep);\n lastNalu.data = shaka.util.Uint8ArrayUtils.concat(\n lastNalu.data, prevData);\n lastNalu.fullData = shaka.util.Uint8ArrayUtils.concat(\n lastNalu.fullData, prevData);\n }\n }\n // We just read a start code. Consume the NALU we passed, if any.\n if (lastNaluStart >= 0) {\n // Because the start position includes the header size.\n const firstByteToKeep = lastNaluStart + naluHeaderSize;\n\n // Compute the last byte to keep. The start code is at most 3 zeros.\n // Any earlier zeros are not part of the start code.\n const startCodeSize = (numZeros > 3 ? 3 : numZeros) + 1;\n const lastByteToKeep = i - startCodeSize;\n\n /** @type {shaka.extern.VideoNalu} */\n const nalu = {\n // subarray's end position is exclusive, so add one.\n data: data.subarray(firstByteToKeep, lastByteToKeep + 1),\n fullData: data.subarray(lastNaluStart, lastByteToKeep + 1),\n type: lastNaluType,\n time: time,\n };\n nalus.push(nalu);\n } else if (lastNalu && !nalus.length) {\n const overflow = i - numZeros;\n if (overflow > 0) {\n const prevData = data.subarray(0, overflow);\n lastNalu.data = shaka.util.Uint8ArrayUtils.concat(\n lastNalu.data, prevData);\n lastNalu.fullData = shaka.util.Uint8ArrayUtils.concat(\n lastNalu.fullData, prevData);\n }\n }\n\n // We just read a start code, so there should be another byte here, at\n // least, for the NALU type. Check just in case.\n if (i >= len - naluHeaderSize) {\n shaka.log.warning('Malformed TS, incomplete NALU, ignoring.');\n return nalus;\n }\n\n // Advance and read the type of the next NALU.\n i++;\n lastNaluStart = i;\n if (this.videoCodec_ == 'hvc') {\n lastNaluType = (data[i] >> 1) & 0x3f;\n } else {\n lastNaluType = data[i] & 0x1f;\n }\n numZeros = 0;\n } else {\n numZeros = 0;\n }\n // If we have gone through all the data from the PES and we have an\n // unfinished Nalu, we will try to use the next PES to complete the\n // unfinished Nalu.\n if (i >= (len - 1) && lastNaluStart >= 0 && numZeros >= 0) {\n // The rest of the buffer was a NALU.\n // Because the start position includes the header size.\n const firstByteToKeep = lastNaluStart + naluHeaderSize;\n infoOfLastNalu = {\n data: data.subarray(firstByteToKeep, len),\n fullData: data.subarray(lastNaluStart, len),\n type: lastNaluType,\n time: time,\n };\n }\n }\n\n if (infoOfLastNalu) {\n nalus.push(infoOfLastNalu);\n }\n if (!nalus.length && lastNalu) {\n lastNalu.data = shaka.util.Uint8ArrayUtils.concat(\n lastNalu.data, data);\n lastNalu.fullData = shaka.util.Uint8ArrayUtils.concat(\n lastNalu.fullData, data);\n }\n lastState = Math.min(3, numZeros);\n return nalus;\n }\n\n /**\n * Return the ID3 metadata\n *\n * @return {!Array.}\n * @export\n */\n getMetadata() {\n const timescale = shaka.util.TsParser.Timescale;\n const metadata = [];\n for (const id3DataArray of this.id3Data_) {\n const id3Data = shaka.util.Uint8ArrayUtils.concat(...id3DataArray);\n const pes = this.parsePES_(id3Data);\n if (pes) {\n metadata.push({\n cueTime: pes.pts ? pes.pts / timescale : null,\n data: pes.data,\n frames: shaka.util.Id3Utils.getID3Frames(pes.data),\n dts: pes.dts,\n pts: pes.pts,\n });\n }\n }\n return metadata;\n }\n\n /**\n * Return the audio data\n *\n * @return {!Array.}\n * @export\n */\n getAudioData() {\n if (this.audioData_.length && !this.audioPes_.length) {\n let sort = false;\n for (const audioDataArray of this.audioData_) {\n const audioData = shaka.util.Uint8ArrayUtils.concat(...audioDataArray);\n const pes = this.parsePES_(audioData);\n let previousPes = this.audioPes_.length ?\n this.audioPes_[this.audioPes_.length - 1] : null;\n if (pes && pes.pts != null && pes.dts != null && (!previousPes ||\n (previousPes.pts != pes.pts && previousPes.dts != pes.dts))) {\n if (this.audioPes_.length && pes.dts < (previousPes.dts || 0)) {\n sort = true;\n }\n this.audioPes_.push(pes);\n } else if (this.audioPes_.length) {\n const data = pes ? pes.data : audioData;\n if (!data) {\n continue;\n }\n previousPes = this.audioPes_.pop();\n previousPes.data =\n shaka.util.Uint8ArrayUtils.concat(previousPes.data, data);\n this.audioPes_.push(previousPes);\n }\n }\n if (sort) {\n this.audioPes_ = this.audioPes_.sort((a, b) => {\n const deltadts = (a.dts || 0) - (b.dts || 0);\n const deltapts = (a.pts || 0) - (b.pts || 0);\n return deltadts || deltapts;\n });\n }\n }\n return this.audioPes_;\n }\n\n /**\n * Return the video data\n *\n * @param {boolean=} naluProcessing\n * @return {!Array.}\n * @export\n */\n getVideoData(naluProcessing = true) {\n if (this.videoData_.length && !this.videoPes_.length) {\n let sort = false;\n for (const videoDataArray of this.videoData_) {\n const videoData = shaka.util.Uint8ArrayUtils.concat(...videoDataArray);\n const pes = this.parsePES_(videoData);\n let previousPes = this.videoPes_.length ?\n this.videoPes_[this.videoPes_.length - 1] : null;\n if (pes && pes.pts != null && pes.dts != null && (!previousPes ||\n (previousPes.pts != pes.pts && previousPes.dts != pes.dts))) {\n if (this.videoPes_.length && pes.dts < (previousPes.dts || 0)) {\n sort = true;\n }\n this.videoPes_.push(pes);\n } else if (this.videoPes_.length) {\n const data = pes ? pes.data : videoData;\n if (!data) {\n continue;\n }\n previousPes = this.videoPes_.pop();\n previousPes.data =\n shaka.util.Uint8ArrayUtils.concat(previousPes.data, data);\n this.videoPes_.push(previousPes);\n }\n }\n if (naluProcessing) {\n let lastNalu;\n let lastState;\n const pesWithLength = [];\n for (const pes of this.videoPes_) {\n pes.nalus = this.parseNalus(pes, lastNalu, lastState);\n if (pes.nalus.length) {\n pesWithLength.push(pes);\n lastNalu = pes.nalus[pes.nalus.length - 1];\n }\n }\n this.videoPes_ = pesWithLength;\n }\n if (sort) {\n this.videoPes_ = this.videoPes_.sort((a, b) => {\n const deltadts = (a.dts || 0) - (b.dts || 0);\n const deltapts = (a.pts || 0) - (b.pts || 0);\n return deltadts || deltapts;\n });\n }\n }\n if (!naluProcessing) {\n const prevVideoPes = this.videoPes_;\n this.videoPes_ = [];\n return prevVideoPes;\n }\n return this.videoPes_;\n }\n\n /**\n * Return the start time for the audio and video\n *\n * @param {string} contentType\n * @return {?number}\n * @export\n */\n getStartTime(contentType) {\n const timescale = shaka.util.TsParser.Timescale;\n if (contentType == 'audio') {\n let audioStartTime = null;\n const audioData = this.getAudioData();\n if (audioData.length) {\n const pes = audioData[0];\n audioStartTime = Math.min(pes.dts, pes.pts) / timescale;\n }\n return audioStartTime;\n } else if (contentType == 'video') {\n let videoStartTime = null;\n const videoData = this.getVideoData(/* naluProcessing= */ false);\n if (videoData.length) {\n const pes = videoData[0];\n videoStartTime = Math.min(pes.dts, pes.pts) / timescale;\n }\n return videoStartTime;\n }\n return null;\n }\n\n /**\n * Return the audio and video codecs\n *\n * @return {{audio: ?string, video: ?string}}\n * @export\n */\n getCodecs() {\n return {\n audio: this.audioCodec_,\n video: this.videoCodec_,\n };\n }\n\n /**\n * Return the video data\n *\n * @return {!Array.}\n * @export\n */\n getVideoNalus() {\n const nalus = [];\n for (const pes of this.getVideoData()) {\n nalus.push(...pes.nalus);\n }\n return nalus;\n }\n\n /**\n * Return the video resolution\n *\n * @return {{height: ?string, width: ?string}}\n * @export\n */\n getVideoResolution() {\n shaka.Deprecate.deprecateFeature(5,\n 'TsParser.getVideoResolution',\n 'Please use getVideoInfo function instead.');\n const videoInfo = this.getVideoInfo();\n return {\n height: videoInfo.height,\n width: videoInfo.width,\n };\n }\n\n /**\n * Return the video information\n *\n * @return {{height: ?string, width: ?string, codec: ?string,\n * frameRate: ?string}}\n * @export\n */\n getVideoInfo() {\n if (this.videoCodec_ == 'hvc') {\n return this.getHvcInfo_();\n }\n return this.getAvcInfo_();\n }\n\n /**\n * @return {?string}\n * @private\n */\n getFrameRate_() {\n const timescale = shaka.util.TsParser.Timescale;\n const videoData = this.getVideoData();\n if (videoData.length > 1) {\n const firstPts = videoData[0].pts;\n goog.asserts.assert(typeof(firstPts) == 'number',\n 'Should be an number!');\n const secondPts = videoData[1].pts;\n goog.asserts.assert(typeof(secondPts) == 'number',\n 'Should be an number!');\n if (!isNaN(secondPts - firstPts)) {\n return String(1 / (secondPts - firstPts) * timescale);\n }\n }\n return null;\n }\n\n /**\n * Return the video information for AVC\n *\n * @return {{height: ?string, width: ?string, codec: ?string,\n * frameRate: ?string}}\n * @private\n */\n getAvcInfo_() {\n const TsParser = shaka.util.TsParser;\n const videoInfo = {\n height: null,\n width: null,\n codec: null,\n frameRate: null,\n };\n const videoNalus = this.getVideoNalus();\n if (!videoNalus.length) {\n return videoInfo;\n }\n const spsNalu = videoNalus.find((nalu) => {\n return nalu.type == TsParser.H264_NALU_TYPE_SPS_;\n });\n if (!spsNalu) {\n return videoInfo;\n }\n\n const expGolombDecoder = new shaka.util.ExpGolomb(spsNalu.data);\n // profile_idc\n const profileIdc = expGolombDecoder.readUnsignedByte();\n // constraint_set[0-5]_flag\n const profileCompatibility = expGolombDecoder.readUnsignedByte();\n // level_idc u(8)\n const levelIdc = expGolombDecoder.readUnsignedByte();\n // seq_parameter_set_id\n expGolombDecoder.skipExpGolomb();\n\n // some profiles have more optional data we don't need\n if (TsParser.PROFILES_WITH_OPTIONAL_SPS_DATA_.includes(profileIdc)) {\n const chromaFormatIdc = expGolombDecoder.readUnsignedExpGolomb();\n if (chromaFormatIdc === 3) {\n // separate_colour_plane_flag\n expGolombDecoder.skipBits(1);\n }\n // bit_depth_luma_minus8\n expGolombDecoder.skipExpGolomb();\n // bit_depth_chroma_minus8\n expGolombDecoder.skipExpGolomb();\n // qpprime_y_zero_transform_bypass_flag\n expGolombDecoder.skipBits(1);\n // seq_scaling_matrix_present_flag\n if (expGolombDecoder.readBoolean()) {\n const scalingListCount = (chromaFormatIdc !== 3) ? 8 : 12;\n for (let i = 0; i < scalingListCount; i++) {\n // seq_scaling_list_present_flag[ i ]\n if (expGolombDecoder.readBoolean()) {\n if (i < 6) {\n expGolombDecoder.skipScalingList(16);\n } else {\n expGolombDecoder.skipScalingList(64);\n }\n }\n }\n }\n }\n\n // log2_max_frame_num_minus4\n expGolombDecoder.skipExpGolomb();\n const picOrderCntType = expGolombDecoder.readUnsignedExpGolomb();\n\n if (picOrderCntType === 0) {\n // log2_max_pic_order_cnt_lsb_minus4\n expGolombDecoder.readUnsignedExpGolomb();\n } else if (picOrderCntType === 1) {\n // delta_pic_order_always_zero_flag\n expGolombDecoder.skipBits(1);\n // offset_for_non_ref_pic\n expGolombDecoder.skipExpGolomb();\n // offset_for_top_to_bottom_field\n expGolombDecoder.skipExpGolomb();\n const numRefFramesInPicOrderCntCycle =\n expGolombDecoder.readUnsignedExpGolomb();\n for (let i = 0; i < numRefFramesInPicOrderCntCycle; i++) {\n // offset_for_ref_frame[ i ]\n expGolombDecoder.skipExpGolomb();\n }\n }\n\n // max_num_ref_frames\n expGolombDecoder.skipExpGolomb();\n // gaps_in_frame_num_value_allowed_flag\n expGolombDecoder.skipBits(1);\n\n const picWidthInMbsMinus1 =\n expGolombDecoder.readUnsignedExpGolomb();\n const picHeightInMapUnitsMinus1 =\n expGolombDecoder.readUnsignedExpGolomb();\n\n const frameMbsOnlyFlag = expGolombDecoder.readBits(1);\n if (frameMbsOnlyFlag === 0) {\n // mb_adaptive_frame_field_flag\n expGolombDecoder.skipBits(1);\n }\n // direct_8x8_inference_flag\n expGolombDecoder.skipBits(1);\n\n let frameCropLeftOffset = 0;\n let frameCropRightOffset = 0;\n let frameCropTopOffset = 0;\n let frameCropBottomOffset = 0;\n\n // frame_cropping_flag\n if (expGolombDecoder.readBoolean()) {\n frameCropLeftOffset = expGolombDecoder.readUnsignedExpGolomb();\n frameCropRightOffset = expGolombDecoder.readUnsignedExpGolomb();\n frameCropTopOffset = expGolombDecoder.readUnsignedExpGolomb();\n frameCropBottomOffset = expGolombDecoder.readUnsignedExpGolomb();\n }\n\n videoInfo.height = String(((2 - frameMbsOnlyFlag) *\n (picHeightInMapUnitsMinus1 + 1) * 16) - (frameCropTopOffset * 2) -\n (frameCropBottomOffset * 2));\n videoInfo.width = String(((picWidthInMbsMinus1 + 1) * 16) -\n frameCropLeftOffset * 2 - frameCropRightOffset * 2);\n videoInfo.codec = 'avc1.' + this.byteToHex_(profileIdc) +\n this.byteToHex_(profileCompatibility) + this.byteToHex_(levelIdc);\n videoInfo.frameRate = this.getFrameRate_();\n\n return videoInfo;\n }\n\n /**\n * Return the video information for HVC\n *\n * @return {{height: ?string, width: ?string, codec: ?string,\n * frameRate: ?string}}\n * @private\n */\n getHvcInfo_() {\n const TsParser = shaka.util.TsParser;\n const videoInfo = {\n height: null,\n width: null,\n codec: null,\n frameRate: null,\n };\n const videoNalus = this.getVideoNalus();\n if (!videoNalus.length) {\n return videoInfo;\n }\n const spsNalu = videoNalus.find((nalu) => {\n return nalu.type == TsParser.H265_NALU_TYPE_SPS_;\n });\n if (!spsNalu) {\n return videoInfo;\n }\n\n const gb = new shaka.util.ExpGolomb(\n spsNalu.fullData, /* convertEbsp2rbsp= */ true);\n\n // remove NALu Header\n gb.readUnsignedByte();\n gb.readUnsignedByte();\n\n // SPS\n gb.readBits(4); // video_paramter_set_id\n const maxSubLayersMinus1 = gb.readBits(3);\n gb.readBoolean(); // temporal_id_nesting_flag\n\n // profile_tier_level begin\n const generalProfileSpace = gb.readBits(2);\n const generalTierFlag = gb.readBits(1);\n const generalProfileIdc = gb.readBits(5);\n const generalProfileCompatibilityFlags = gb.readBits(32);\n const generalConstraintIndicatorFlags1 = gb.readUnsignedByte();\n const generalConstraintIndicatorFlags2 = gb.readUnsignedByte();\n const generalConstraintIndicatorFlags3 = gb.readUnsignedByte();\n const generalConstraintIndicatorFlags4 = gb.readUnsignedByte();\n const generalConstraintIndicatorFlags5 = gb.readUnsignedByte();\n const generalConstraintIndicatorFlags6 = gb.readUnsignedByte();\n const generalLevelIdc = gb.readUnsignedByte();\n const subLayerProfilePresentFlag = [];\n const subLayerLevelPresentFlag = [];\n for (let i = 0; i < maxSubLayersMinus1; i++) {\n subLayerProfilePresentFlag.push(gb.readBoolean());\n subLayerLevelPresentFlag.push(gb.readBoolean());\n }\n if (maxSubLayersMinus1 > 0) {\n for (let i = maxSubLayersMinus1; i < 8; i++) {\n gb.readBits(2);\n }\n }\n for (let i = 0; i < maxSubLayersMinus1; i++) {\n if (subLayerProfilePresentFlag[i]) {\n gb.readBits(88);\n }\n if (subLayerLevelPresentFlag[i]) {\n gb.readUnsignedByte();\n }\n }\n // profile_tier_level end\n\n gb.readUnsignedExpGolomb(); // seq_parameter_set_id\n const chromaFormatIdc = gb.readUnsignedExpGolomb();\n if (chromaFormatIdc == 3) {\n gb.readBits(1); // separate_colour_plane_flag\n }\n const picWidthInLumaSamples = gb.readUnsignedExpGolomb();\n const picHeightInLumaSamples = gb.readUnsignedExpGolomb();\n let leftOffset = 0;\n let rightOffset = 0;\n let topOffset = 0;\n let bottomOffset = 0;\n const conformanceWindowFlag = gb.readBoolean();\n if (conformanceWindowFlag) {\n leftOffset += gb.readUnsignedExpGolomb();\n rightOffset += gb.readUnsignedExpGolomb();\n topOffset += gb.readUnsignedExpGolomb();\n bottomOffset += gb.readUnsignedExpGolomb();\n }\n\n const subWc = chromaFormatIdc === 1 || chromaFormatIdc === 2 ? 2 : 1;\n const subHc = chromaFormatIdc === 1 ? 2 : 1;\n videoInfo.width =\n String(picWidthInLumaSamples - (leftOffset + rightOffset) * subWc);\n videoInfo.height =\n String(picHeightInLumaSamples - (topOffset + bottomOffset) * subHc);\n\n const reverseBits = (integer) => {\n let result = 0;\n for (let i = 0; i < 32; i++) {\n result |= ((integer >> i) & 1) << (31 - i);\n }\n return result >>> 0;\n };\n\n const profileSpace = ['', 'A', 'B', 'C'][generalProfileSpace];\n const profileCompatibility = reverseBits(generalProfileCompatibilityFlags);\n const tierFlag = generalTierFlag == 1 ? 'H' : 'L';\n\n let codec = 'hvc1';\n codec += '.' + profileSpace + generalProfileIdc;\n codec += '.' + profileCompatibility.toString(16).toUpperCase();\n codec += '.' + tierFlag + generalLevelIdc;\n if (generalConstraintIndicatorFlags6) {\n codec += '.' +\n generalConstraintIndicatorFlags6.toString(16).toUpperCase();\n }\n if (generalConstraintIndicatorFlags5) {\n codec += '.' +\n generalConstraintIndicatorFlags5.toString(16).toUpperCase();\n }\n if (generalConstraintIndicatorFlags4) {\n codec += '.' +\n generalConstraintIndicatorFlags4.toString(16).toUpperCase();\n }\n if (generalConstraintIndicatorFlags3) {\n codec += '.' +\n generalConstraintIndicatorFlags3.toString(16).toUpperCase();\n }\n if (generalConstraintIndicatorFlags2) {\n codec += '.' +\n generalConstraintIndicatorFlags2.toString(16).toUpperCase();\n }\n if (generalConstraintIndicatorFlags1) {\n codec += '.' +\n generalConstraintIndicatorFlags1.toString(16).toUpperCase();\n }\n videoInfo.codec = codec;\n videoInfo.frameRate = this.getFrameRate_();\n\n return videoInfo;\n }\n\n /**\n * Return the Opus metadata\n *\n * @return {?shaka.util.TsParser.OpusMetadata}\n */\n getOpusMetadata() {\n return this.opusMetadata_;\n }\n\n /**\n * Convert a byte to 2 digits of hex. (Only handles values 0-255.)\n *\n * @param {number} x\n * @return {string}\n * @private\n */\n byteToHex_(x) {\n return ('0' + x.toString(16).toUpperCase()).slice(-2);\n }\n\n /**\n * @param {number} value\n * @param {number} reference\n * @return {number}\n * @private\n */\n handleRollover_(value, reference) {\n const MAX_TS = 8589934592;\n const RO_THRESH = 4294967296;\n\n let direction = 1;\n\n if (value > reference) {\n // If the current timestamp value is greater than our reference timestamp\n // and we detect a timestamp rollover, this means the roll over is\n // happening in the opposite direction.\n // Example scenario: Enter a long stream/video just after a rollover\n // occurred. The reference point will be set to a small number, e.g. 1.\n // The user then seeks backwards over the rollover point. In loading this\n // segment, the timestamp values will be very large, e.g. 2^33 - 1. Since\n // this comes before the data we loaded previously, we want to adjust the\n // time stamp to be `value - 2^33`.\n direction = -1;\n }\n\n // Note: A seek forwards or back that is greater than the RO_THRESH\n // (2^32, ~13 hours) will cause an incorrect adjustment.\n while (Math.abs(reference - value) > RO_THRESH) {\n value += (direction * MAX_TS);\n }\n\n return value;\n }\n\n /**\n * Check if the passed data corresponds to an MPEG2-TS\n *\n * @param {Uint8Array} data\n * @return {boolean}\n * @export\n */\n static probe(data) {\n const syncOffset = shaka.util.TsParser.syncOffset(data);\n if (syncOffset < 0) {\n return false;\n } else {\n if (syncOffset > 0) {\n shaka.log.warning('MPEG2-TS detected but first sync word found @ ' +\n 'offset ' + syncOffset + ', junk ahead ?');\n }\n return true;\n }\n }\n\n /**\n * Returns the synchronization offset\n *\n * @param {Uint8Array} data\n * @return {number}\n * @export\n */\n static syncOffset(data) {\n const packetLength = shaka.util.TsParser.PacketLength_;\n // scan 1000 first bytes\n const scanwindow = Math.min(1000, data.length - 3 * packetLength);\n let i = 0;\n while (i < scanwindow) {\n // a TS fragment should contain at least 3 TS packets, a PAT, a PMT, and\n // one PID, each starting with 0x47\n if (data[i] == 0x47 &&\n data[i + packetLength] == 0x47 &&\n data[i + 2 * packetLength] == 0x47) {\n return i;\n } else {\n i++;\n }\n }\n return -1;\n }\n};\n\n\n/**\n * @const {number}\n * @export\n */\nshaka.util.TsParser.Timescale = 90000;\n\n\n/**\n * @const {number}\n * @private\n */\nshaka.util.TsParser.PacketLength_ = 188;\n\n\n/**\n * NALU type for Sequence Parameter Set (SPS) for H.264.\n * @const {number}\n * @private\n */\nshaka.util.TsParser.H264_NALU_TYPE_SPS_ = 0x07;\n\n\n/**\n * NALU type for Sequence Parameter Set (SPS) for H.265.\n * @const {number}\n * @private\n */\nshaka.util.TsParser.H265_NALU_TYPE_SPS_ = 0x21;\n\n\n/**\n * Values of profile_idc that indicate additional fields are included in the\n * SPS.\n * see Recommendation ITU-T H.264 (4/2013)\n * 7.3.2.1.1 Sequence parameter set data syntax\n *\n * @const {!Array.}\n * @private\n */\nshaka.util.TsParser.PROFILES_WITH_OPTIONAL_SPS_DATA_ =\n [100, 110, 122, 244, 44, 83, 86, 118, 128, 138, 139, 134];\n\n\n/**\n * @typedef {{\n * audio: number,\n * video: number,\n * id3: number,\n * audioCodec: string,\n * videoCodec: string\n * }}\n *\n * @summary PMT.\n * @property {number} audio\n * Audio PID\n * @property {number} video\n * Video PID\n * @property {number} id3\n * ID3 PID\n * @property {string} audioCodec\n * Audio codec\n * @property {string} videoCodec\n * Video codec\n */\nshaka.util.TsParser.PMT;\n\n\n/**\n * @typedef {{\n * channelCount: number,\n * channelConfigCode: number,\n * sampleRate: number\n * }}\n *\n * @summary PMT.\n * @property {number} channelCount\n * @property {number} channelConfigCode\n * @property {number} sampleRate\n */\nshaka.util.TsParser.OpusMetadata;\n\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.lcevc.Dec');\ngoog.require('shaka.log');\ngoog.require('shaka.Deprecate');\ngoog.require('shaka.util.IReleasable');\n\n/**\n * @summary\n * lcevcDec - (MPEG-5 Part 2 LCEVC - Decoder) provides\n * all the operations related to the enhancement and rendering\n * of LCEVC enabled streams and on to a canvas.\n * @implements {shaka.util.IReleasable}\n * @export\n */\nshaka.lcevc.Dec = class {\n /**\n * @param {HTMLVideoElement} media The video element that will be attached to\n * LCEVC Decoder for input.\n * @param {HTMLCanvasElement} canvas The canvas element that will be attached\n * to LCEVC Decoder to render the enhanced frames.\n * @param {shaka.extern.LcevcConfiguration} lcevcConfig LCEVC configuration\n * object to initialize the LCEVC Decoder.\n */\n constructor(media, canvas, lcevcConfig) {\n /**\n * LCEVC Decoder library based on availability, to check if either\n * lcevc_dil or lcevc_dec is present.\n * @private {LCEVCmodule}\n */\n this.lcevcLib_;\n\n /** @private {?LCEVCdec.LCEVCdec} */\n this.dec_ = null;\n\n /** @private {number} */\n this.variantId_ = -1;\n\n /** @private {HTMLVideoElement} */\n this.media_ = media;\n\n /** @private {HTMLCanvasElement} */\n this.canvas_ = canvas;\n\n /** @private {shaka.extern.LcevcConfiguration} */\n this.decConfig_ = lcevcConfig;\n\n /** @private {boolean} */\n this.toBeDeprecated_ = false;\n\n this.create_();\n }\n\n /**\n * Append data to the LCEVC Dec.\n * @param {BufferSource} data\n * @param {number} timestampOffset\n */\n appendBuffer(data, timestampOffset) {\n if (this.dec_) {\n // Timestamp offset describes how much offset should be applied to the\n // LCEVC enhancement to match the decoded video frame, as such it needs\n // to be negated.\n this.dec_.appendBuffer(data, 'video', this.variantId_, -timestampOffset);\n }\n }\n\n /**\n * Hide the canvas specifically in the case of a DRM Content\n */\n hideCanvas() {\n if (this.dec_) {\n this.canvas_.classList.add('shaka-hidden');\n }\n }\n\n /**\n * Create LCEVC Decoder.\n * @private\n */\n create_() {\n if (this.isSupported_() && !this.dec_) {\n if (this.lcevcLib_.SupportObject.webGLSupport(this.canvas_)) {\n // Make sure the canvas is not hidden from a previous playback session.\n this.canvas_.classList.remove('shaka-hidden');\n // Initiate LCEVC Dec Library based on the type of module available.\n if (this.toBeDeprecated_) {\n this.dec_ = new this.lcevcLib_.LcevcDil(\n this.media_,\n this.canvas_,\n this.decConfig_);\n } else {\n this.dec_ = new this.lcevcLib_.LCEVCdec(\n this.media_,\n this.canvas_,\n this.decConfig_);\n }\n }\n }\n }\n\n /**\n * Close LCEVC Decoder.\n * @override\n * @export\n */\n release() {\n if (this.dec_) {\n this.dec_.close();\n this.dec_ = null;\n }\n }\n\n /**\n * Check if the LCEVC Decoder lib is present and is supported by the browser.\n * @return {boolean}\n * @private\n */\n isSupported_() {\n if (typeof libDPIModule === 'undefined') {\n shaka.log.alwaysWarn(\n 'Could not find LCEVC Library dependencies on this page');\n }\n\n // This is a check to make the LCEVC Dec Integration is backwards compatible\n // with previous Integration. This logic checks for both implementations\n // and uses the one available.\n if (typeof LCEVCdec !== 'undefined') {\n this.lcevcLib_ = LCEVCdec;\n } else {\n if (typeof LcevcDil !== 'undefined') {\n this.lcevcLib_ = LcevcDil;\n this.toBeDeprecated_ = true;\n shaka.Deprecate.deprecateFeature(5,\n 'LcevcDil',\n 'lcevc_dil.js is deprecated, please use lcevc_dec.js instead');\n } else {\n shaka.log.alwaysWarn('Could not find LCEVC Library on this page');\n return false;\n }\n }\n\n // Making Sure if there is a valid LCEVC Dec Library exists.\n if (typeof this.lcevcLib_.SupportObject === 'undefined') {\n shaka.log.alwaysWarn('Could not find LCEVC Library on this page');\n return false;\n } else {\n if (!this.lcevcLib_.SupportObject.SupportStatus) {\n shaka.log.alwaysWarn(this.lcevcLib_.SupportObject.SupportError);\n }\n }\n\n return typeof this.lcevcLib_ !== 'undefined' &&\n typeof libDPIModule !== 'undefined' &&\n this.canvas_ instanceof HTMLCanvasElement &&\n this.lcevcLib_.SupportObject.SupportStatus;\n }\n\n /**\n * Update current active variant\n * @param {shaka.extern.Track} track\n */\n updateVariant(track, manifestType) {\n let containerFormat = shaka.lcevc.Dec.ContainerFormat.MPEG2_TS;\n let streamingFormat = shaka.lcevc.Dec.StreamingFormat.OTHER;\n switch (track.mimeType) {\n case 'video/webm': {\n containerFormat = shaka.lcevc.Dec.ContainerFormat.WEBM;\n break;\n }\n case 'video/mp4': {\n containerFormat = shaka.lcevc.Dec.ContainerFormat.MP4;\n break;\n }\n }\n switch (manifestType) {\n case 'DASH': {\n streamingFormat = shaka.lcevc.Dec.StreamingFormat.DASH;\n break;\n }\n case 'HLS': {\n streamingFormat = shaka.lcevc.Dec.StreamingFormat.HLS;\n break;\n }\n }\n if (this.dec_) {\n this.variantId_ = track.id;\n this.dec_.setLevelSwitching(track.id, true);\n this.dec_.setContainerFormat(containerFormat);\n // This functionality is only available on the LCEVC Dec Library.\n if (!this.toBeDeprecated_) {\n this.dec_.setStreamingFormat(streamingFormat);\n }\n }\n }\n};\n\n/**\n * Container Formats.\n * @const @enum {number}\n */\nshaka.lcevc.Dec.ContainerFormat = {\n MPEG2_TS: 0,\n WEBM: 1,\n MP4: 2,\n};\n\n/**\n * Streaming Formats.\n * @const @enum {number}\n */\nshaka.lcevc.Dec.StreamingFormat = {\n HLS: 0,\n DASH: 1,\n OTHER: -1,\n};\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.media.MediaSourceEngine');\n\ngoog.require('goog.asserts');\ngoog.require('shaka.log');\ngoog.require('shaka.config.CodecSwitchingStrategy');\ngoog.require('shaka.media.Capabilities');\ngoog.require('shaka.media.ContentWorkarounds');\ngoog.require('shaka.media.ClosedCaptionParser');\ngoog.require('shaka.media.IClosedCaptionParser');\ngoog.require('shaka.media.ManifestParser');\ngoog.require('shaka.media.SegmentReference');\ngoog.require('shaka.media.TimeRangesUtils');\ngoog.require('shaka.text.TextEngine');\ngoog.require('shaka.transmuxer.TransmuxerEngine');\ngoog.require('shaka.util.BufferUtils');\ngoog.require('shaka.util.Destroyer');\ngoog.require('shaka.util.Dom');\ngoog.require('shaka.util.Error');\ngoog.require('shaka.util.EventManager');\ngoog.require('shaka.util.FakeEvent');\ngoog.require('shaka.util.Functional');\ngoog.require('shaka.util.IDestroyable');\ngoog.require('shaka.util.Id3Utils');\ngoog.require('shaka.util.ManifestParserUtils');\ngoog.require('shaka.util.MimeUtils');\ngoog.require('shaka.util.Mp4BoxParsers');\ngoog.require('shaka.util.Mp4Parser');\ngoog.require('shaka.util.Platform');\ngoog.require('shaka.util.PublicPromise');\ngoog.require('shaka.util.StreamUtils');\ngoog.require('shaka.util.TsParser');\ngoog.require('shaka.lcevc.Dec');\n\n\n/**\n * @summary\n * MediaSourceEngine wraps all operations on MediaSource and SourceBuffers.\n * All asynchronous operations return a Promise, and all operations are\n * internally synchronized and serialized as needed. Operations that can\n * be done in parallel will be done in parallel.\n *\n * @implements {shaka.util.IDestroyable}\n */\nshaka.media.MediaSourceEngine = class {\n /**\n * @param {HTMLMediaElement} video The video element, whose source is tied to\n * MediaSource during the lifetime of the MediaSourceEngine.\n * @param {!shaka.extern.TextDisplayer} textDisplayer\n * The text displayer that will be used with the text engine.\n * MediaSourceEngine takes ownership of the displayer. When\n * MediaSourceEngine is destroyed, it will destroy the displayer.\n * @param {!shaka.media.MediaSourceEngine.PlayerInterface} playerInterface\n * Interface for common player methods.\n * @param {?shaka.lcevc.Dec} [lcevcDec] Optional - LCEVC Decoder Object\n */\n constructor(video, textDisplayer, playerInterface, lcevcDec) {\n /** @private {HTMLMediaElement} */\n this.video_ = video;\n\n /** @private {?shaka.media.MediaSourceEngine.PlayerInterface} */\n this.playerInterface_ = playerInterface;\n\n /** @private {?shaka.extern.MediaSourceConfiguration} */\n this.config_ = null;\n\n /** @private {shaka.extern.TextDisplayer} */\n this.textDisplayer_ = textDisplayer;\n\n /** @private {!Object.} */\n this.sourceBuffers_ = {};\n\n /** @private {!Object.} */\n this.sourceBufferTypes_ = {};\n\n\n /** @private {!Object.} */\n this.expectedEncryption_ = {};\n\n /** @private {shaka.text.TextEngine} */\n this.textEngine_ = null;\n\n /** @private {boolean} */\n this.segmentRelativeVttTiming_ = false;\n\n /** @private {?shaka.lcevc.Dec} */\n this.lcevcDec_ = lcevcDec || null;\n\n /**\n * @private {!Object.>}\n */\n this.queues_ = {};\n\n /** @private {shaka.util.EventManager} */\n this.eventManager_ = new shaka.util.EventManager();\n\n /** @private {!Object.} */\n this.transmuxers_ = {};\n\n /** @private {?shaka.media.IClosedCaptionParser} */\n this.captionParser_ = null;\n\n /** @private {!shaka.util.PublicPromise} */\n this.mediaSourceOpen_ = new shaka.util.PublicPromise();\n\n /** @private {string} */\n this.url_ = '';\n\n /** @private {boolean} */\n this.playbackHasBegun_ = false;\n\n /** @private {boolean} */\n this.streamingAllowed_ = true;\n\n /** @private {boolean} */\n this.usingRemotePlayback_ = false;\n\n /** @private {HTMLSourceElement} */\n this.source_ = null;\n\n /**\n * Fallback source element with direct media URI, used for casting\n * purposes.\n * @private {HTMLSourceElement}\n */\n this.secondarySource_ = null;\n\n /** @private {MediaSource} */\n this.mediaSource_ = this.createMediaSource(this.mediaSourceOpen_);\n\n /** @private {boolean} */\n this.reloadingMediaSource_ = false;\n\n /** @type {!shaka.util.Destroyer} */\n this.destroyer_ = new shaka.util.Destroyer(() => this.doDestroy_());\n\n /** @private {boolean} */\n this.sequenceMode_ = false;\n\n /** @private {string} */\n this.manifestType_ = shaka.media.ManifestParser.UNKNOWN;\n\n /** @private {boolean} */\n this.ignoreManifestTimestampsInSegmentsMode_ = false;\n\n /** @private {boolean} */\n this.attemptTimestampOffsetCalculation_ = false;\n\n /** @private {!shaka.util.PublicPromise.} */\n this.textSequenceModeOffset_ = new shaka.util.PublicPromise();\n\n /** @private {boolean} */\n this.needSplitMuxedContent_ = false;\n\n /** @private {?number} */\n this.lastDuration_ = null;\n\n /** @private {!Object.} */\n this.tsParsers_ = {};\n\n /** @private {?number} */\n this.firstVideoTimestamp_ = null;\n\n /** @private {?number} */\n this.firstVideoReferenceStartTime_ = null;\n\n /** @private {?number} */\n this.firstAudioTimestamp_ = null;\n\n /** @private {?number} */\n this.firstAudioReferenceStartTime_ = null;\n\n /** @private {!shaka.util.PublicPromise.} */\n this.audioCompensation_ = new shaka.util.PublicPromise();\n\n if (this.video_.remote) {\n this.usingRemotePlayback_ = this.video_.remote.state != 'disconnected';\n\n this.eventManager_.listen(this.video_.remote, 'connect', () => {\n this.usingRemotePlayback_ = this.video_.remote.state != 'disconnected';\n });\n\n this.eventManager_.listen(this.video_.remote, 'connecting', () => {\n this.usingRemotePlayback_ = this.video_.remote.state != 'disconnected';\n });\n\n this.eventManager_.listen(this.video_.remote, 'disconnect', () => {\n this.usingRemotePlayback_ = this.video_.remote.state != 'disconnected';\n });\n }\n }\n\n /**\n * Create a MediaSource object, attach it to the video element, and return it.\n * Resolves the given promise when the MediaSource is ready.\n *\n * Replaced by unit tests.\n *\n * @param {!shaka.util.PublicPromise} p\n * @return {!MediaSource}\n */\n createMediaSource(p) {\n this.streamingAllowed_ = true;\n\n /** @type {!MediaSource} */\n let mediaSource;\n\n if (window.ManagedMediaSource) {\n if (!this.secondarySource_) {\n this.video_.disableRemotePlayback = true;\n }\n\n mediaSource = new ManagedMediaSource();\n\n this.eventManager_.listen(\n mediaSource, 'startstreaming', () => {\n shaka.log.info('MMS startstreaming');\n this.streamingAllowed_ = true;\n });\n\n this.eventManager_.listen(\n mediaSource, 'endstreaming', () => {\n shaka.log.info('MMS endstreaming');\n this.streamingAllowed_ = false;\n });\n } else {\n mediaSource = new MediaSource();\n }\n\n // Set up MediaSource on the video element.\n this.eventManager_.listenOnce(\n mediaSource, 'sourceopen', () => this.onSourceOpen_(p));\n\n // Correctly set when playback has begun.\n this.eventManager_.listenOnce(this.video_, 'playing', () => {\n this.playbackHasBegun_ = true;\n });\n\n // Store the object URL for releasing it later.\n this.url_ = shaka.media.MediaSourceEngine.createObjectURL(mediaSource);\n\n this.video_.removeAttribute('src');\n if (this.source_) {\n this.video_.removeChild(this.source_);\n }\n if (this.secondarySource_) {\n this.video_.removeChild(this.secondarySource_);\n }\n this.source_ = shaka.util.Dom.createSourceElement(this.url_);\n this.video_.appendChild(this.source_);\n if (this.secondarySource_) {\n this.video_.appendChild(this.secondarySource_);\n }\n this.video_.load();\n\n return mediaSource;\n }\n\n /**\n * @param {string} uri\n * @param {string} mimeType\n */\n addSecondarySource(uri, mimeType) {\n if (!this.video_ || !(this.mediaSource_ instanceof ManagedMediaSource)) {\n shaka.log.warning(\n 'Secondary source is used only with ManagedMediaSource');\n return;\n }\n if (this.secondarySource_) {\n this.video_.removeChild(this.secondarySource_);\n }\n this.secondarySource_ = shaka.util.Dom.createSourceElement(uri, mimeType);\n this.video_.appendChild(this.secondarySource_);\n this.video_.disableRemotePlayback = false;\n }\n\n /**\n * @param {shaka.util.PublicPromise} p\n * @private\n */\n onSourceOpen_(p) {\n goog.asserts.assert(this.url_, 'Must have object URL');\n\n // Release the object URL that was previously created, to prevent memory\n // leak.\n // createObjectURL creates a strong reference to the MediaSource object\n // inside the browser. Setting the src of the video then creates another\n // reference within the video element. revokeObjectURL will remove the\n // strong reference to the MediaSource object, and allow it to be\n // garbage-collected later.\n URL.revokeObjectURL(this.url_);\n p.resolve();\n }\n\n /**\n * Checks if a certain type is supported.\n *\n * @param {shaka.extern.Stream} stream\n * @param {shaka.util.ManifestParserUtils.ContentType} contentType\n * @return {!Promise.}\n */\n static async isStreamSupported(stream, contentType) {\n if (stream.createSegmentIndex) {\n await stream.createSegmentIndex();\n }\n if (!stream.segmentIndex) {\n return false;\n }\n if (stream.segmentIndex.isEmpty()) {\n return true;\n }\n const MimeUtils = shaka.util.MimeUtils;\n const TransmuxerEngine = shaka.transmuxer.TransmuxerEngine;\n const ContentType = shaka.util.ManifestParserUtils.ContentType;\n const StreamUtils = shaka.util.StreamUtils;\n const seenCombos = new Set();\n // Check each combination of mimeType and codecs within the segment index.\n // Unfortunately we cannot use fullMimeTypes, as we ALSO need to check the\n // getFullTypeWithAllCodecs (for the sake of the transmuxer) and we have no\n // way of going from a full mimeType to a full mimeType with all codecs.\n // As this function is only called in debug mode, a little inefficiency is\n // acceptable.\n for (const ref of stream.segmentIndex) {\n const mimeType = ref.mimeType || stream.mimeType || '';\n let codecs = ref.codecs || stream.codecs || '';\n // Don't check the same combination of mimetype + codecs twice.\n const combo = mimeType + ':' + codecs;\n if (seenCombos.has(combo)) {\n continue;\n }\n seenCombos.add(combo);\n if (contentType == ContentType.TEXT) {\n const fullMimeType = MimeUtils.getFullType(mimeType, codecs);\n if (!shaka.text.TextEngine.isTypeSupported(fullMimeType)) {\n return false;\n }\n } else {\n if (contentType == ContentType.VIDEO) {\n codecs = StreamUtils.getCorrectVideoCodecs(codecs);\n } else if (contentType == ContentType.AUDIO) {\n codecs = StreamUtils.getCorrectAudioCodecs(codecs, mimeType);\n }\n const extendedMimeType = MimeUtils.getExtendedType(\n stream, mimeType, codecs);\n const fullMimeType = MimeUtils.getFullTypeWithAllCodecs(\n mimeType, codecs);\n if (!shaka.media.Capabilities.isTypeSupported(extendedMimeType) &&\n !TransmuxerEngine.isSupported(fullMimeType, stream.type)) {\n return false;\n }\n }\n }\n return true;\n }\n\n /**\n * Returns a map of MediaSource support for well-known types.\n *\n * @return {!Object.}\n */\n static probeSupport() {\n const testMimeTypes = [\n // MP4 types\n 'video/mp4; codecs=\"avc1.42E01E\"',\n 'video/mp4; codecs=\"avc3.42E01E\"',\n 'video/mp4; codecs=\"hev1.1.6.L93.90\"',\n 'video/mp4; codecs=\"hvc1.1.6.L93.90\"',\n 'video/mp4; codecs=\"hev1.2.4.L153.B0\"; eotf=\"smpte2084\"', // HDR HEVC\n 'video/mp4; codecs=\"hvc1.2.4.L153.B0\"; eotf=\"smpte2084\"', // HDR HEVC\n 'video/mp4; codecs=\"vp9\"',\n 'video/mp4; codecs=\"vp09.00.10.08\"',\n 'video/mp4; codecs=\"av01.0.01M.08\"',\n 'video/mp4; codecs=\"dvh1.05.01\"',\n 'video/mp4; codecs=\"dvh1.20.01\"',\n 'audio/mp4; codecs=\"mp4a.40.2\"',\n 'audio/mp4; codecs=\"ac-3\"',\n 'audio/mp4; codecs=\"ec-3\"',\n 'audio/mp4; codecs=\"ac-4.02.01.01\"',\n 'audio/mp4; codecs=\"opus\"',\n 'audio/mp4; codecs=\"flac\"',\n 'audio/mp4; codecs=\"dtsc\"', // DTS Digital Surround\n 'audio/mp4; codecs=\"dtse\"', // DTS Express\n 'audio/mp4; codecs=\"dtsx\"', // DTS:X\n // WebM types\n 'video/webm; codecs=\"vp8\"',\n 'video/webm; codecs=\"vp9\"',\n 'video/webm; codecs=\"vp09.00.10.08\"',\n 'audio/webm; codecs=\"vorbis\"',\n 'audio/webm; codecs=\"opus\"',\n // MPEG2 TS types (video/ is also used for audio: https://bit.ly/TsMse)\n 'video/mp2t; codecs=\"avc1.42E01E\"',\n 'video/mp2t; codecs=\"avc3.42E01E\"',\n 'video/mp2t; codecs=\"hvc1.1.6.L93.90\"',\n 'video/mp2t; codecs=\"mp4a.40.2\"',\n 'video/mp2t; codecs=\"ac-3\"',\n 'video/mp2t; codecs=\"ec-3\"',\n // WebVTT types\n 'text/vtt',\n 'application/mp4; codecs=\"wvtt\"',\n // TTML types\n 'application/ttml+xml',\n 'application/mp4; codecs=\"stpp\"',\n // Containerless types\n ...shaka.util.MimeUtils.RAW_FORMATS,\n ];\n\n const support = {};\n for (const type of testMimeTypes) {\n if (shaka.text.TextEngine.isTypeSupported(type)) {\n support[type] = true;\n } else if (shaka.util.Platform.supportsMediaSource()) {\n support[type] = shaka.media.Capabilities.isTypeSupported(type) ||\n shaka.transmuxer.TransmuxerEngine.isSupported(type);\n } else {\n support[type] = shaka.util.Platform.supportsMediaType(type);\n }\n\n const basicType = type.split(';')[0];\n support[basicType] = support[basicType] || support[type];\n }\n\n return support;\n }\n\n /** @override */\n destroy() {\n return this.destroyer_.destroy();\n }\n\n /** @private */\n async doDestroy_() {\n const Functional = shaka.util.Functional;\n\n const cleanup = [];\n\n for (const contentType in this.queues_) {\n // Make a local copy of the queue and the first item.\n const q = this.queues_[contentType];\n const inProgress = q[0];\n\n // Drop everything else out of the original queue.\n this.queues_[contentType] = q.slice(0, 1);\n\n // We will wait for this item to complete/fail.\n if (inProgress) {\n cleanup.push(inProgress.p.catch(Functional.noop));\n }\n\n // The rest will be rejected silently if possible.\n for (const item of q.slice(1)) {\n item.p.reject(shaka.util.Destroyer.destroyedError());\n }\n }\n\n if (this.textEngine_) {\n cleanup.push(this.textEngine_.destroy());\n }\n\n for (const contentType in this.transmuxers_) {\n cleanup.push(this.transmuxers_[contentType].destroy());\n }\n\n\n await Promise.all(cleanup);\n if (this.eventManager_) {\n this.eventManager_.release();\n this.eventManager_ = null;\n }\n\n if (this.video_ && this.secondarySource_) {\n this.video_.removeChild(this.secondarySource_);\n }\n if (this.video_ && this.source_) {\n // \"unload\" the video element.\n this.video_.removeChild(this.source_);\n this.video_.load();\n this.video_.disableRemotePlayback = false;\n }\n\n this.video_ = null;\n this.source_ = null;\n this.secondarySource_ = null;\n this.config_ = null;\n this.mediaSource_ = null;\n this.textEngine_ = null;\n this.textDisplayer_ = null;\n this.sourceBuffers_ = {};\n this.transmuxers_ = {};\n this.captionParser_ = null;\n if (goog.DEBUG) {\n for (const contentType in this.queues_) {\n goog.asserts.assert(\n this.queues_[contentType].length == 0,\n contentType + ' queue should be empty after destroy!');\n }\n }\n this.queues_ = {};\n\n // This object is owned by Player\n this.lcevcDec_ = null;\n\n this.tsParsers_ = {};\n this.playerInterface_ = null;\n }\n\n /**\n * @return {!Promise} Resolved when MediaSource is open and attached to the\n * media element. This process is actually initiated by the constructor.\n */\n open() {\n return this.mediaSourceOpen_;\n }\n\n /**\n * Initialize MediaSourceEngine.\n *\n * Note that it is not valid to call this multiple times, except to add or\n * reinitialize text streams.\n *\n * @param {!Map.} streamsByType\n * A map of content types to streams. All streams must be supported\n * according to MediaSourceEngine.isStreamSupported.\n * @param {boolean=} sequenceMode\n * If true, the media segments are appended to the SourceBuffer in strict\n * sequence.\n * @param {string=} manifestType\n * Indicates the type of the manifest.\n * @param {boolean=} ignoreManifestTimestampsInSegmentsMode\n * If true, don't adjust the timestamp offset to account for manifest\n * segment durations being out of sync with segment durations. In other\n * words, assume that there are no gaps in the segments when appending\n * to the SourceBuffer, even if the manifest and segment times disagree.\n * Indicates if the manifest has text streams.\n *\n * @return {!Promise}\n */\n async init(streamsByType, sequenceMode=false,\n manifestType=shaka.media.ManifestParser.UNKNOWN,\n ignoreManifestTimestampsInSegmentsMode=false) {\n const ContentType = shaka.util.ManifestParserUtils.ContentType;\n\n await this.mediaSourceOpen_;\n\n this.sequenceMode_ = sequenceMode;\n this.manifestType_ = manifestType;\n this.ignoreManifestTimestampsInSegmentsMode_ =\n ignoreManifestTimestampsInSegmentsMode;\n\n this.attemptTimestampOffsetCalculation_ = !this.sequenceMode_ &&\n this.manifestType_ == shaka.media.ManifestParser.HLS &&\n !this.ignoreManifestTimestampsInSegmentsMode_;\n\n this.tsParsers_ = {};\n this.firstVideoTimestamp_ = null;\n this.firstVideoReferenceStartTime_ = null;\n this.firstAudioTimestamp_ = null;\n this.firstAudioReferenceStartTime_ = null;\n this.audioCompensation_ = new shaka.util.PublicPromise();\n\n for (const contentType of streamsByType.keys()) {\n const stream = streamsByType.get(contentType);\n // eslint-disable-next-line no-await-in-loop\n await this.initSourceBuffer_(contentType, stream, stream.codecs);\n if (this.needSplitMuxedContent_) {\n this.queues_[ContentType.AUDIO] = [];\n this.queues_[ContentType.VIDEO] = [];\n } else {\n this.queues_[contentType] = [];\n }\n }\n const audio = streamsByType.get(ContentType.AUDIO);\n if (audio && audio.isAudioMuxedInVideo) {\n this.needSplitMuxedContent_ = true;\n }\n }\n\n /**\n * Initialize a specific SourceBuffer.\n *\n * @param {shaka.util.ManifestParserUtils.ContentType} contentType\n * @param {shaka.extern.Stream} stream\n * @param {string} codecs\n * @return {!Promise}\n * @private\n */\n async initSourceBuffer_(contentType, stream, codecs) {\n const ContentType = shaka.util.ManifestParserUtils.ContentType;\n\n goog.asserts.assert(\n await shaka.media.MediaSourceEngine.isStreamSupported(\n stream, contentType),\n 'Type negotiation should happen before MediaSourceEngine.init!');\n\n let mimeType = shaka.util.MimeUtils.getFullType(\n stream.mimeType, codecs);\n if (contentType == ContentType.TEXT) {\n this.reinitText(mimeType, this.sequenceMode_, stream.external);\n } else {\n let needTransmux = this.config_.forceTransmux;\n if (!shaka.media.Capabilities.isTypeSupported(mimeType) ||\n (!this.sequenceMode_ &&\n shaka.util.MimeUtils.RAW_FORMATS.includes(mimeType))) {\n needTransmux = true;\n }\n const mimeTypeWithAllCodecs =\n shaka.util.MimeUtils.getFullTypeWithAllCodecs(\n stream.mimeType, codecs);\n if (needTransmux) {\n const audioCodec = shaka.util.ManifestParserUtils.guessCodecsSafe(\n ContentType.AUDIO, (codecs || '').split(','));\n const videoCodec = shaka.util.ManifestParserUtils.guessCodecsSafe(\n ContentType.VIDEO, (codecs || '').split(','));\n if (audioCodec && videoCodec) {\n this.needSplitMuxedContent_ = true;\n await this.initSourceBuffer_(ContentType.AUDIO, stream, audioCodec);\n await this.initSourceBuffer_(ContentType.VIDEO, stream, videoCodec);\n return;\n }\n const transmuxerPlugin = shaka.transmuxer.TransmuxerEngine\n .findTransmuxer(mimeTypeWithAllCodecs);\n if (transmuxerPlugin) {\n const transmuxer = transmuxerPlugin();\n this.transmuxers_[contentType] = transmuxer;\n mimeType =\n transmuxer.convertCodecs(contentType, mimeTypeWithAllCodecs);\n }\n }\n const type = this.addExtraFeaturesToMimeType_(mimeType);\n\n this.destroyer_.ensureNotDestroyed();\n\n let sourceBuffer;\n\n try {\n sourceBuffer = this.mediaSource_.addSourceBuffer(type);\n } catch (exception) {\n throw new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.MEDIA,\n shaka.util.Error.Code.MEDIA_SOURCE_OPERATION_THREW,\n exception,\n 'The mediaSource_ status was ' + this.mediaSource_.readyState +\n ' expected \\'open\\'',\n null);\n }\n\n if (this.sequenceMode_) {\n sourceBuffer.mode =\n shaka.media.MediaSourceEngine.SourceBufferMode_.SEQUENCE;\n }\n\n this.eventManager_.listen(\n sourceBuffer, 'error',\n () => this.onError_(contentType));\n this.eventManager_.listen(\n sourceBuffer, 'updateend',\n () => this.onUpdateEnd_(contentType));\n this.sourceBuffers_[contentType] = sourceBuffer;\n this.sourceBufferTypes_[contentType] = mimeType;\n this.expectedEncryption_[contentType] = !!stream.drmInfos.length;\n }\n }\n\n /**\n * Called by the Player to provide an updated configuration any time it\n * changes. Must be called at least once before init().\n *\n * @param {shaka.extern.MediaSourceConfiguration} config\n */\n configure(config) {\n this.config_ = config;\n if (this.textEngine_) {\n this.textEngine_.setModifyCueCallback(config.modifyCueCallback);\n }\n }\n\n /**\n * Indicate if the streaming is allowed by MediaSourceEngine.\n * If we using MediaSource we allways returns true.\n *\n * @return {boolean}\n */\n isStreamingAllowed() {\n return this.streamingAllowed_ && !this.usingRemotePlayback_;\n }\n\n /**\n * Reinitialize the TextEngine for a new text type.\n * @param {string} mimeType\n * @param {boolean} sequenceMode\n * @param {boolean} external\n */\n reinitText(mimeType, sequenceMode, external) {\n if (!this.textEngine_) {\n this.textEngine_ = new shaka.text.TextEngine(this.textDisplayer_);\n if (this.textEngine_) {\n this.textEngine_.setModifyCueCallback(this.config_.modifyCueCallback);\n }\n }\n this.textEngine_.initParser(mimeType, sequenceMode,\n external || this.segmentRelativeVttTiming_, this.manifestType_);\n }\n\n /**\n * @return {boolean} True if the MediaSource is in an \"ended\" state, or if the\n * object has been destroyed.\n */\n ended() {\n if (this.reloadingMediaSource_) {\n return false;\n }\n return this.mediaSource_ ? this.mediaSource_.readyState == 'ended' : true;\n }\n\n /**\n * Gets the first timestamp in buffer for the given content type.\n *\n * @param {shaka.util.ManifestParserUtils.ContentType} contentType\n * @return {?number} The timestamp in seconds, or null if nothing is buffered.\n */\n bufferStart(contentType) {\n if (!Object.keys(this.sourceBuffers_).length) {\n return null;\n }\n const ContentType = shaka.util.ManifestParserUtils.ContentType;\n if (contentType == ContentType.TEXT) {\n return this.textEngine_.bufferStart();\n }\n return shaka.media.TimeRangesUtils.bufferStart(\n this.getBuffered_(contentType));\n }\n\n /**\n * Gets the last timestamp in buffer for the given content type.\n *\n * @param {shaka.util.ManifestParserUtils.ContentType} contentType\n * @return {?number} The timestamp in seconds, or null if nothing is buffered.\n */\n bufferEnd(contentType) {\n if (!Object.keys(this.sourceBuffers_).length) {\n return null;\n }\n const ContentType = shaka.util.ManifestParserUtils.ContentType;\n if (contentType == ContentType.TEXT) {\n return this.textEngine_.bufferEnd();\n }\n return shaka.media.TimeRangesUtils.bufferEnd(\n this.getBuffered_(contentType));\n }\n\n /**\n * Determines if the given time is inside the buffered range of the given\n * content type.\n *\n * @param {shaka.util.ManifestParserUtils.ContentType} contentType\n * @param {number} time Playhead time\n * @return {boolean}\n */\n isBuffered(contentType, time) {\n const ContentType = shaka.util.ManifestParserUtils.ContentType;\n if (contentType == ContentType.TEXT) {\n return this.textEngine_.isBuffered(time);\n } else {\n const buffered = this.getBuffered_(contentType);\n return shaka.media.TimeRangesUtils.isBuffered(buffered, time);\n }\n }\n\n /**\n * Computes how far ahead of the given timestamp is buffered for the given\n * content type.\n *\n * @param {shaka.util.ManifestParserUtils.ContentType} contentType\n * @param {number} time\n * @return {number} The amount of time buffered ahead in seconds.\n */\n bufferedAheadOf(contentType, time) {\n const ContentType = shaka.util.ManifestParserUtils.ContentType;\n if (contentType == ContentType.TEXT) {\n return this.textEngine_.bufferedAheadOf(time);\n } else {\n const buffered = this.getBuffered_(contentType);\n return shaka.media.TimeRangesUtils.bufferedAheadOf(buffered, time);\n }\n }\n\n /**\n * Returns info about what is currently buffered.\n * @return {shaka.extern.BufferedInfo}\n */\n getBufferedInfo() {\n const ContentType = shaka.util.ManifestParserUtils.ContentType;\n const TimeRangesUtils = shaka.media.TimeRangesUtils;\n\n const info = {\n total: this.reloadingMediaSource_ ? [] :\n TimeRangesUtils.getBufferedInfo(this.video_.buffered),\n audio:\n TimeRangesUtils.getBufferedInfo(this.getBuffered_(ContentType.AUDIO)),\n video:\n TimeRangesUtils.getBufferedInfo(this.getBuffered_(ContentType.VIDEO)),\n text: [],\n };\n\n if (this.textEngine_) {\n const start = this.textEngine_.bufferStart();\n const end = this.textEngine_.bufferEnd();\n\n if (start != null && end != null) {\n info.text.push({start: start, end: end});\n }\n }\n return info;\n }\n\n /**\n * @param {shaka.util.ManifestParserUtils.ContentType} contentType\n * @return {TimeRanges} The buffered ranges for the given content type, or\n * null if the buffered ranges could not be obtained.\n * @private\n */\n getBuffered_(contentType) {\n if (this.reloadingMediaSource_ || this.usingRemotePlayback_) {\n return null;\n }\n try {\n return this.sourceBuffers_[contentType].buffered;\n } catch (exception) {\n if (contentType in this.sourceBuffers_) {\n // Note: previous MediaSource errors may cause access to |buffered| to\n // throw.\n shaka.log.error('failed to get buffered range for ' + contentType,\n exception);\n }\n return null;\n }\n }\n\n /**\n * Create a new closed caption parser. This will ONLY be replaced by tests as\n * a way to inject fake closed caption parser instances.\n *\n * @param {string} mimeType\n * @return {!shaka.media.IClosedCaptionParser}\n */\n getCaptionParser(mimeType) {\n return new shaka.media.ClosedCaptionParser(mimeType);\n }\n\n /**\n * This method is only public for testing.\n *\n * @param {shaka.util.ManifestParserUtils.ContentType} contentType\n * @param {!BufferSource} data\n * @param {!shaka.media.SegmentReference} reference The segment reference\n * we are appending\n * @param {shaka.extern.Stream} stream\n * @param {!string} mimeType\n * @return {{timestamp: ?number, metadata: !Array.}}\n */\n getTimestampAndDispatchMetadata(contentType, data, reference, stream,\n mimeType) {\n let timestamp = null;\n let metadata = [];\n\n const uint8ArrayData = shaka.util.BufferUtils.toUint8(data);\n if (shaka.util.MimeUtils.RAW_FORMATS.includes(mimeType)) {\n const frames = shaka.util.Id3Utils.getID3Frames(uint8ArrayData);\n if (frames.length && reference) {\n const metadataTimestamp = frames.find((frame) => {\n return frame.description ===\n 'com.apple.streaming.transportStreamTimestamp';\n });\n if (metadataTimestamp && metadataTimestamp.data) {\n timestamp = Math.round(metadataTimestamp.data) / 1000;\n }\n /** @private {shaka.extern.ID3Metadata} */\n const id3Metadata = {\n cueTime: reference.startTime,\n data: uint8ArrayData,\n frames: frames,\n dts: reference.startTime,\n pts: reference.startTime,\n };\n this.playerInterface_.onMetadata(\n [id3Metadata], /* offset= */ 0, reference.endTime);\n }\n } else if (mimeType.includes('/mp4') &&\n reference &&\n reference.initSegmentReference &&\n reference.initSegmentReference.timescale) {\n const timescale = reference.initSegmentReference.timescale;\n if (!isNaN(timescale)) {\n const hasEmsg = ((stream.emsgSchemeIdUris != null &&\n stream.emsgSchemeIdUris.length > 0) ||\n this.config_.dispatchAllEmsgBoxes);\n const Mp4Parser = shaka.util.Mp4Parser;\n let startTime = 0;\n let parsedMedia = false;\n const parser = new Mp4Parser();\n if (hasEmsg) {\n parser.fullBox('emsg', (box) =>\n this.parseEMSG_(reference, stream.emsgSchemeIdUris, box));\n }\n parser.fullBox('prft', (box) => this.parsePrft_(timescale, box))\n .box('moof', Mp4Parser.children)\n .box('traf', Mp4Parser.children)\n .fullBox('tfdt', (box) => {\n goog.asserts.assert(\n box.version == 0 || box.version == 1,\n 'TFDT version can only be 0 or 1');\n const parsed = shaka.util.Mp4BoxParsers.parseTFDTInaccurate(\n box.reader, box.version);\n startTime = parsed.baseMediaDecodeTime / timescale;\n parsedMedia = true;\n box.parser.stop();\n }).parse(data, /* partialOkay= */ true);\n if (parsedMedia && reference.timestampOffset == 0) {\n timestamp = startTime;\n }\n }\n } else if (!mimeType.includes('/mp4') && !mimeType.includes('/webm') &&\n shaka.util.TsParser.probe(uint8ArrayData)) {\n if (!this.tsParsers_[contentType]) {\n this.tsParsers_[contentType] = new shaka.util.TsParser();\n } else {\n this.tsParsers_[contentType].clearData();\n }\n const tsParser = this.tsParsers_[contentType].parse(uint8ArrayData);\n const startTime = tsParser.getStartTime(contentType);\n if (startTime != null) {\n timestamp = startTime;\n }\n metadata = tsParser.getMetadata();\n }\n return {timestamp, metadata};\n }\n\n\n /**\n * Parse the EMSG box from a MP4 container.\n *\n * @param {!shaka.media.SegmentReference} reference\n * @param {?Array.} emsgSchemeIdUris Array of emsg\n * scheme_id_uri for which emsg boxes should be parsed.\n * @param {!shaka.extern.ParsedBox} box\n * @private\n * https://dashif-documents.azurewebsites.net/Events/master/event.html#emsg-format\n * aligned(8) class DASHEventMessageBox\n * extends FullBox(‘emsg’, version, flags = 0){\n * if (version==0) {\n * string scheme_id_uri;\n * string value;\n * unsigned int(32) timescale;\n * unsigned int(32) presentation_time_delta;\n * unsigned int(32) event_duration;\n * unsigned int(32) id;\n * } else if (version==1) {\n * unsigned int(32) timescale;\n * unsigned int(64) presentation_time;\n * unsigned int(32) event_duration;\n * unsigned int(32) id;\n * string scheme_id_uri;\n * string value;\n * }\n * unsigned int(8) message_data[];\n */\n parseEMSG_(reference, emsgSchemeIdUris, box) {\n let timescale;\n let id;\n let eventDuration;\n let schemeId;\n let startTime;\n let presentationTimeDelta;\n let value;\n\n if (box.version === 0) {\n schemeId = box.reader.readTerminatedString();\n value = box.reader.readTerminatedString();\n timescale = box.reader.readUint32();\n presentationTimeDelta = box.reader.readUint32();\n eventDuration = box.reader.readUint32();\n id = box.reader.readUint32();\n startTime = reference.startTime + (presentationTimeDelta / timescale);\n } else {\n timescale = box.reader.readUint32();\n const pts = box.reader.readUint64();\n startTime = (pts / timescale) + reference.timestampOffset;\n presentationTimeDelta = startTime - reference.startTime;\n eventDuration = box.reader.readUint32();\n id = box.reader.readUint32();\n schemeId = box.reader.readTerminatedString();\n value = box.reader.readTerminatedString();\n }\n const messageData = box.reader.readBytes(\n box.reader.getLength() - box.reader.getPosition());\n\n // See DASH sec. 5.10.3.3.1\n // If a DASH client detects an event message box with a scheme that is not\n // defined in MPD, the client is expected to ignore it.\n if ((emsgSchemeIdUris && emsgSchemeIdUris.includes(schemeId)) ||\n this.config_.dispatchAllEmsgBoxes) {\n // See DASH sec. 5.10.4.1\n // A special scheme in DASH used to signal manifest updates.\n if (schemeId == 'urn:mpeg:dash:event:2012') {\n this.playerInterface_.onManifestUpdate();\n } else {\n // All other schemes are dispatched as a general 'emsg' event.\n const endTime = startTime + (eventDuration / timescale);\n /** @type {shaka.extern.EmsgInfo} */\n const emsg = {\n startTime: startTime,\n endTime: endTime,\n schemeIdUri: schemeId,\n value: value,\n timescale: timescale,\n presentationTimeDelta: presentationTimeDelta,\n eventDuration: eventDuration,\n id: id,\n messageData: messageData,\n };\n\n // Dispatch an event to notify the application about the emsg box.\n const eventName = shaka.util.FakeEvent.EventName.Emsg;\n const data = (new Map()).set('detail', emsg);\n const event = new shaka.util.FakeEvent(eventName, data);\n // A user can call preventDefault() on a cancelable event.\n event.cancelable = true;\n\n this.playerInterface_.onEvent(event);\n\n if (event.defaultPrevented) {\n // If the caller uses preventDefault() on the 'emsg' event, don't\n // process any further, and don't generate an ID3 'metadata' event\n // for the same data.\n return;\n }\n\n // Additionally, ID3 events generate a 'metadata' event. This is a\n // pre-parsed version of the metadata blob already dispatched in the\n // 'emsg' event.\n if (schemeId == 'https://aomedia.org/emsg/ID3' ||\n schemeId == 'https://developer.apple.com/streaming/emsg-id3') {\n // See https://aomediacodec.github.io/id3-emsg/\n const frames = shaka.util.Id3Utils.getID3Frames(messageData);\n if (frames.length) {\n /** @private {shaka.extern.ID3Metadata} */\n const metadata = {\n cueTime: startTime,\n data: messageData,\n frames: frames,\n dts: startTime,\n pts: startTime,\n };\n this.playerInterface_.onMetadata(\n [metadata], /* offset= */ 0, endTime);\n }\n }\n }\n }\n }\n\n /**\n * Parse PRFT box.\n * @param {number} timescale\n * @param {!shaka.extern.ParsedBox} box\n * @private\n */\n parsePrft_(timescale, box) {\n goog.asserts.assert(\n box.version == 0 || box.version == 1,\n 'PRFT version can only be 0 or 1');\n const parsed = shaka.util.Mp4BoxParsers.parsePRFTInaccurate(\n box.reader, box.version);\n\n const wallClockTime = this.convertNtp_(parsed.ntpTimestamp);\n const programStartDate = new Date(wallClockTime -\n (parsed.mediaTime / timescale) * 1000);\n /** @type {shaka.extern.ProducerReferenceTime} */\n const prftInfo = {\n wallClockTime,\n programStartDate,\n };\n\n const eventName = shaka.util.FakeEvent.EventName.Prft;\n const data = (new Map()).set('detail', prftInfo);\n const event = new shaka.util.FakeEvent(\n eventName, data);\n this.playerInterface_.onEvent(event);\n }\n\n\n /**\n * Convert Ntp ntpTimeStamp to UTC Time\n *\n * @param {number} ntpTimeStamp\n * @return {number} utcTime\n * @private\n */\n convertNtp_(ntpTimeStamp) {\n const start = new Date(Date.UTC(1900, 0, 1, 0, 0, 0));\n return new Date(start.getTime() + ntpTimeStamp).getTime();\n }\n\n /**\n * Enqueue an operation to append data to the SourceBuffer.\n * Start and end times are needed for TextEngine, but not for MediaSource.\n * Start and end times may be null for initialization segments; if present\n * they are relative to the presentation timeline.\n *\n * @param {shaka.util.ManifestParserUtils.ContentType} contentType\n * @param {!BufferSource} data\n * @param {?shaka.media.SegmentReference} reference The segment reference\n * we are appending, or null for init segments\n * @param {shaka.extern.Stream} stream\n * @param {?boolean} hasClosedCaptions True if the buffer contains CEA closed\n * captions\n * @param {boolean=} seeked True if we just seeked\n * @param {boolean=} adaptation True if we just automatically switched active\n * variant(s).\n * @param {boolean=} isChunkedData True if we add to the buffer from the\n * partial read of the segment.\n * @return {!Promise}\n */\n async appendBuffer(\n contentType, data, reference, stream, hasClosedCaptions, seeked = false,\n adaptation = false, isChunkedData = false, fromSplit = false) {\n const ContentType = shaka.util.ManifestParserUtils.ContentType;\n\n if (contentType == ContentType.TEXT) {\n if (this.manifestType_ == shaka.media.ManifestParser.HLS &&\n reference.discontinuitySequence >= 0) {\n // This won't be known until the first video segment is appended.\n const offset = await this.textSequenceModeOffset_;\n this.textEngine_.setTimestampOffset(offset);\n }\n await this.textEngine_.appendBuffer(\n data,\n reference ? reference.startTime : null,\n reference ? reference.endTime : null,\n reference ? reference.getUris()[0] : null);\n return;\n }\n\n if (!fromSplit && this.needSplitMuxedContent_) {\n await this.appendBuffer(ContentType.AUDIO, data, reference, stream,\n hasClosedCaptions, seeked, adaptation, isChunkedData,\n /* fromSplit= */ true);\n await this.appendBuffer(ContentType.VIDEO, data, reference, stream,\n hasClosedCaptions, seeked, adaptation, isChunkedData,\n /* fromSplit= */ true);\n return;\n }\n\n if (!this.sourceBuffers_[contentType]) {\n shaka.log.warning('Attempted to restore a non-existent source buffer');\n return;\n }\n\n let timestampOffset = this.sourceBuffers_[contentType].timestampOffset;\n\n let mimeType = this.sourceBufferTypes_[contentType];\n if (this.transmuxers_[contentType]) {\n mimeType = this.transmuxers_[contentType].getOriginalMimeType();\n }\n if (reference) {\n const {timestamp, metadata} = this.getTimestampAndDispatchMetadata(\n contentType, data, reference, stream, mimeType);\n if (timestamp != null) {\n if (this.firstVideoTimestamp_ == null &&\n contentType == ContentType.VIDEO) {\n this.firstVideoTimestamp_ = timestamp;\n this.firstVideoReferenceStartTime_ = reference.startTime;\n if (this.firstAudioTimestamp_ != null) {\n let compensation = 0;\n // Only apply compensation if video and audio segment startTime\n // match, to avoid introducing sync issues.\n if (this.firstVideoReferenceStartTime_ ==\n this.firstAudioReferenceStartTime_) {\n compensation =\n this.firstVideoTimestamp_ - this.firstAudioTimestamp_;\n }\n this.audioCompensation_.resolve(compensation);\n }\n }\n if (this.firstAudioTimestamp_ == null &&\n contentType == ContentType.AUDIO) {\n this.firstAudioTimestamp_ = timestamp;\n this.firstAudioReferenceStartTime_ = reference.startTime;\n if (this.firstVideoTimestamp_ != null) {\n let compensation = 0;\n // Only apply compensation if video and audio segment startTime\n // match, to avoid introducing sync issues.\n if (this.firstVideoReferenceStartTime_ ==\n this.firstAudioReferenceStartTime_) {\n compensation =\n this.firstVideoTimestamp_ - this.firstAudioTimestamp_;\n }\n this.audioCompensation_.resolve(compensation);\n }\n }\n const calculatedTimestampOffset = reference.startTime - timestamp;\n const timestampOffsetDifference =\n Math.abs(timestampOffset - calculatedTimestampOffset);\n if ((timestampOffsetDifference >= 0.001 || seeked || adaptation) &&\n (!isChunkedData || calculatedTimestampOffset > 0 ||\n !timestampOffset)) {\n timestampOffset = calculatedTimestampOffset;\n if (this.attemptTimestampOffsetCalculation_) {\n this.enqueueOperation_(\n contentType,\n () => this.abort_(contentType),\n null);\n this.enqueueOperation_(\n contentType,\n () => this.setTimestampOffset_(contentType, timestampOffset),\n null);\n }\n }\n // Timestamps can only be reliably extracted from video, not audio.\n // Packed audio formats do not have internal timestamps at all.\n // Prefer video for this when available.\n const isBestSourceBufferForTimestamps =\n contentType == ContentType.VIDEO ||\n !(ContentType.VIDEO in this.sourceBuffers_);\n if (isBestSourceBufferForTimestamps) {\n this.textSequenceModeOffset_.resolve(timestampOffset);\n }\n }\n if (metadata.length) {\n this.playerInterface_.onMetadata(metadata, timestampOffset,\n reference ? reference.endTime : null);\n }\n }\n if (hasClosedCaptions && contentType == ContentType.VIDEO) {\n if (!this.textEngine_) {\n this.reinitText(shaka.util.MimeUtils.CEA608_CLOSED_CAPTION_MIMETYPE,\n this.sequenceMode_, /* external= */ false);\n }\n if (!this.captionParser_) {\n const basicType = mimeType.split(';', 1)[0];\n this.captionParser_ = this.getCaptionParser(basicType);\n }\n // If it is the init segment for closed captions, initialize the closed\n // caption parser.\n if (!reference) {\n this.captionParser_.init(data, adaptation);\n } else {\n const closedCaptions = this.captionParser_.parseFrom(data);\n if (closedCaptions.length) {\n this.textEngine_.storeAndAppendClosedCaptions(\n closedCaptions,\n reference.startTime,\n reference.endTime,\n timestampOffset);\n }\n }\n }\n\n if (this.transmuxers_[contentType]) {\n data = await this.transmuxers_[contentType].transmux(\n data, stream, reference, this.mediaSource_.duration, contentType);\n }\n\n data = this.workAroundBrokenPlatforms_(\n data, reference ? reference.startTime : null, contentType,\n reference ? reference.getUris()[0] : null);\n\n if (reference && this.sequenceMode_ && contentType != ContentType.TEXT) {\n // In sequence mode, for non-text streams, if we just cleared the buffer\n // and are either performing an unbuffered seek or handling an automatic\n // adaptation, we need to set a new timestampOffset on the sourceBuffer.\n if (seeked || adaptation) {\n let timestampOffset = reference.startTime;\n // Audio and video may not be aligned, so we will compensate for audio\n // if necessary.\n if (this.manifestType_ == shaka.media.ManifestParser.HLS &&\n !this.needSplitMuxedContent_ &&\n contentType == ContentType.AUDIO &&\n this.sourceBuffers_[ContentType.VIDEO]) {\n const compensation = await this.audioCompensation_;\n // Only apply compensation if the difference is greater than 100ms\n if (Math.abs(compensation) > 0.1) {\n timestampOffset -= compensation;\n }\n }\n // The logic to call abort() before setting the timestampOffset is\n // extended during unbuffered seeks or automatic adaptations; it is\n // possible for the append state to be PARSING_MEDIA_SEGMENT from the\n // previous SourceBuffer#appendBuffer() call.\n this.enqueueOperation_(\n contentType,\n () => this.abort_(contentType),\n null);\n this.enqueueOperation_(\n contentType,\n () => this.setTimestampOffset_(contentType, timestampOffset),\n null);\n }\n }\n\n let bufferedBefore = null;\n\n await this.enqueueOperation_(contentType, () => {\n if (goog.DEBUG && reference && !reference.isPreload() && !isChunkedData) {\n bufferedBefore = this.getBuffered_(contentType);\n }\n this.append_(contentType, data, timestampOffset);\n }, reference ? reference.getUris()[0] : null);\n\n if (goog.DEBUG && reference && !reference.isPreload() && !isChunkedData) {\n const bufferedAfter = this.getBuffered_(contentType);\n const newBuffered = shaka.media.TimeRangesUtils.computeAddedRange(\n bufferedBefore, bufferedAfter);\n if (newBuffered) {\n const segmentDuration = reference.endTime - reference.startTime;\n const timeAdded = newBuffered.end - newBuffered.start;\n // Check end times instead of start times. We may be overwriting a\n // buffer and only the end changes, and that would be fine.\n // Also, exclude tiny segments. Sometimes alignment segments as small\n // as 33ms are seen in Google DAI content. For such tiny segments,\n // half a segment duration would be no issue.\n const offset = Math.abs(newBuffered.end - reference.endTime);\n if (segmentDuration > 0.100 && (offset > segmentDuration / 2 ||\n Math.abs(segmentDuration - timeAdded) > 0.030)) {\n shaka.log.error('Possible encoding problem detected!',\n 'Unexpected buffered range for reference', reference,\n 'from URIs', reference.getUris(),\n 'should be', {start: reference.startTime, end: reference.endTime},\n 'but got', newBuffered);\n }\n }\n }\n }\n\n /**\n * Set the selected closed captions Id and language.\n *\n * @param {string} id\n */\n setSelectedClosedCaptionId(id) {\n const VIDEO = shaka.util.ManifestParserUtils.ContentType.VIDEO;\n const videoBufferEndTime = this.bufferEnd(VIDEO) || 0;\n this.textEngine_.setSelectedClosedCaptionId(id, videoBufferEndTime);\n }\n\n /** Disable embedded closed captions. */\n clearSelectedClosedCaptionId() {\n if (this.textEngine_) {\n this.textEngine_.setSelectedClosedCaptionId('', 0);\n }\n }\n\n /**\n * Enqueue an operation to remove data from the SourceBuffer.\n *\n * @param {shaka.util.ManifestParserUtils.ContentType} contentType\n * @param {number} startTime relative to the start of the presentation\n * @param {number} endTime relative to the start of the presentation\n * @return {!Promise}\n */\n async remove(contentType, startTime, endTime) {\n const ContentType = shaka.util.ManifestParserUtils.ContentType;\n if (contentType == ContentType.TEXT) {\n await this.textEngine_.remove(startTime, endTime);\n } else {\n await this.enqueueOperation_(\n contentType,\n () => this.remove_(contentType, startTime, endTime),\n null);\n if (this.needSplitMuxedContent_) {\n await this.enqueueOperation_(\n ContentType.AUDIO,\n () => this.remove_(ContentType.AUDIO, startTime, endTime),\n null);\n }\n }\n }\n\n /**\n * Enqueue an operation to clear the SourceBuffer.\n *\n * @param {shaka.util.ManifestParserUtils.ContentType} contentType\n * @return {!Promise}\n */\n async clear(contentType) {\n const ContentType = shaka.util.ManifestParserUtils.ContentType;\n if (contentType == ContentType.TEXT) {\n if (!this.textEngine_) {\n return;\n }\n await this.textEngine_.remove(0, Infinity);\n } else {\n // Note that not all platforms allow clearing to Infinity.\n await this.enqueueOperation_(\n contentType,\n () => this.remove_(contentType, 0, this.mediaSource_.duration),\n null);\n if (this.needSplitMuxedContent_) {\n await this.enqueueOperation_(\n ContentType.AUDIO,\n () => this.remove_(\n ContentType.AUDIO, 0, this.mediaSource_.duration),\n null);\n }\n }\n }\n\n /**\n * Fully reset the state of the caption parser owned by MediaSourceEngine.\n */\n resetCaptionParser() {\n if (this.captionParser_) {\n this.captionParser_.reset();\n }\n }\n\n /**\n * Enqueue an operation to flush the SourceBuffer.\n * This is a workaround for what we believe is a Chromecast bug.\n *\n * @param {shaka.util.ManifestParserUtils.ContentType} contentType\n * @return {!Promise}\n */\n async flush(contentType) {\n // Flush the pipeline. Necessary on Chromecast, even though we have removed\n // everything.\n const ContentType = shaka.util.ManifestParserUtils.ContentType;\n if (contentType == ContentType.TEXT) {\n // Nothing to flush for text.\n return;\n }\n await this.enqueueOperation_(\n contentType,\n () => this.flush_(contentType),\n null);\n if (this.needSplitMuxedContent_) {\n await this.enqueueOperation_(\n ContentType.AUDIO,\n () => this.flush_(ContentType.AUDIO),\n null);\n }\n }\n\n /**\n * Sets the timestamp offset and append window end for the given content type.\n *\n * @param {shaka.util.ManifestParserUtils.ContentType} contentType\n * @param {number} timestampOffset The timestamp offset. Segments which start\n * at time t will be inserted at time t + timestampOffset instead. This\n * value does not affect segments which have already been inserted.\n * @param {number} appendWindowStart The timestamp to set the append window\n * start to. For future appends, frames/samples with timestamps less than\n * this value will be dropped.\n * @param {number} appendWindowEnd The timestamp to set the append window end\n * to. For future appends, frames/samples with timestamps greater than this\n * value will be dropped.\n * @param {boolean} ignoreTimestampOffset If true, the timestampOffset will\n * not be applied in this step.\n * @param {string} mimeType\n * @param {string} codecs\n * @param {!Map.} streamsByType\n * A map of content types to streams. All streams must be supported\n * according to MediaSourceEngine.isStreamSupported.\n *\n * @return {!Promise}\n */\n async setStreamProperties(\n contentType, timestampOffset, appendWindowStart, appendWindowEnd,\n ignoreTimestampOffset, mimeType, codecs, streamsByType) {\n const ContentType = shaka.util.ManifestParserUtils.ContentType;\n if (contentType == ContentType.TEXT) {\n if (!ignoreTimestampOffset) {\n this.textEngine_.setTimestampOffset(timestampOffset);\n }\n this.textEngine_.setAppendWindow(appendWindowStart, appendWindowEnd);\n return;\n }\n const operations = [];\n\n const hasChangedCodecs = await this.codecSwitchIfNecessary_(\n contentType, mimeType, codecs, streamsByType);\n\n if (!hasChangedCodecs) {\n // Queue an abort() to help MSE splice together overlapping segments.\n // We set appendWindowEnd when we change periods in DASH content, and the\n // period transition may result in overlap.\n //\n // An abort() also helps with MPEG2-TS. When we append a TS segment, we\n // always enter a PARSING_MEDIA_SEGMENT state and we can't change the\n // timestamp offset. By calling abort(), we reset the state so we can\n // set it.\n operations.push(this.enqueueOperation_(\n contentType,\n () => this.abort_(contentType),\n null));\n if (this.needSplitMuxedContent_) {\n operations.push(this.enqueueOperation_(\n ContentType.AUDIO,\n () => this.abort_(ContentType.AUDIO),\n null));\n }\n }\n if (!ignoreTimestampOffset) {\n operations.push(this.enqueueOperation_(\n contentType,\n () => this.setTimestampOffset_(contentType, timestampOffset),\n null));\n if (this.needSplitMuxedContent_) {\n operations.push(this.enqueueOperation_(\n ContentType.AUDIO,\n () => this.setTimestampOffset_(\n ContentType.AUDIO, timestampOffset),\n null));\n }\n }\n operations.push(this.enqueueOperation_(\n contentType,\n () => this.setAppendWindow_(\n contentType, appendWindowStart, appendWindowEnd),\n null));\n if (this.needSplitMuxedContent_) {\n operations.push(this.enqueueOperation_(\n ContentType.AUDIO,\n () => this.setAppendWindow_(\n ContentType.AUDIO, appendWindowStart, appendWindowEnd),\n null));\n }\n\n await Promise.all(operations);\n }\n\n /**\n * Adjust timestamp offset to maintain AV sync across discontinuities.\n *\n * @param {shaka.util.ManifestParserUtils.ContentType} contentType\n * @param {number} timestampOffset\n * @return {!Promise}\n */\n async resync(contentType, timestampOffset) {\n const ContentType = shaka.util.ManifestParserUtils.ContentType;\n\n if (contentType == ContentType.TEXT) {\n // This operation is for audio and video only.\n return;\n }\n\n // Reset the promise in case the timestamp offset changed during\n // a period/discontinuity transition.\n if (contentType == ContentType.VIDEO) {\n this.textSequenceModeOffset_ = new shaka.util.PublicPromise();\n }\n\n if (!this.sequenceMode_) {\n return;\n }\n\n // Queue an abort() to help MSE splice together overlapping segments.\n // We set appendWindowEnd when we change periods in DASH content, and the\n // period transition may result in overlap.\n //\n // An abort() also helps with MPEG2-TS. When we append a TS segment, we\n // always enter a PARSING_MEDIA_SEGMENT state and we can't change the\n // timestamp offset. By calling abort(), we reset the state so we can\n // set it.\n this.enqueueOperation_(\n contentType,\n () => this.abort_(contentType),\n null);\n if (this.needSplitMuxedContent_) {\n this.enqueueOperation_(\n ContentType.AUDIO,\n () => this.abort_(ContentType.AUDIO),\n null);\n }\n await this.enqueueOperation_(\n contentType,\n () => this.setTimestampOffset_(contentType, timestampOffset),\n null);\n if (this.needSplitMuxedContent_) {\n await this.enqueueOperation_(\n ContentType.AUDIO,\n () => this.setTimestampOffset_(ContentType.AUDIO, timestampOffset),\n null);\n }\n }\n\n /**\n * @param {string=} reason Valid reasons are 'network' and 'decode'.\n * @return {!Promise}\n * @see http://w3c.github.io/media-source/#idl-def-EndOfStreamError\n */\n async endOfStream(reason) {\n await this.enqueueBlockingOperation_(() => {\n // If endOfStream() has already been called on the media source,\n // don't call it again. Also do not call if readyState is\n // 'closed' (not attached to video element) since it is not a\n // valid operation.\n if (this.ended() || this.mediaSource_.readyState === 'closed') {\n return;\n }\n // Tizen won't let us pass undefined, but it will let us omit the\n // argument.\n if (reason) {\n this.mediaSource_.endOfStream(reason);\n } else {\n this.mediaSource_.endOfStream();\n }\n });\n }\n\n /**\n * @param {number} duration\n * @return {!Promise}\n */\n async setDuration(duration) {\n await this.enqueueBlockingOperation_(() => {\n // Reducing the duration causes the MSE removal algorithm to run, which\n // triggers an 'updateend' event to fire. To handle this scenario, we\n // have to insert a dummy operation into the beginning of each queue,\n // which the 'updateend' handler will remove.\n if (duration < this.mediaSource_.duration) {\n for (const contentType in this.sourceBuffers_) {\n const dummyOperation = {\n start: () => {},\n p: new shaka.util.PublicPromise(),\n uri: null,\n };\n this.queues_[contentType].unshift(dummyOperation);\n }\n }\n\n this.mediaSource_.duration = duration;\n this.lastDuration_ = duration;\n });\n }\n\n /**\n * Get the current MediaSource duration.\n *\n * @return {number}\n */\n getDuration() {\n return this.mediaSource_.duration;\n }\n\n /**\n * Append data to the SourceBuffer.\n * @param {shaka.util.ManifestParserUtils.ContentType} contentType\n * @param {BufferSource} data\n * @param {number} timestampOffset\n * @private\n */\n append_(contentType, data, timestampOffset) {\n const ContentType = shaka.util.ManifestParserUtils.ContentType;\n\n // Append only video data to the LCEVC Dec.\n if (contentType == ContentType.VIDEO && this.lcevcDec_) {\n // Append video buffers to the LCEVC Dec for parsing and storing\n // of LCEVC data.\n this.lcevcDec_.appendBuffer(data, timestampOffset);\n }\n\n // This will trigger an 'updateend' event.\n this.sourceBuffers_[contentType].appendBuffer(data);\n }\n\n /**\n * Remove data from the SourceBuffer.\n * @param {shaka.util.ManifestParserUtils.ContentType} contentType\n * @param {number} startTime relative to the start of the presentation\n * @param {number} endTime relative to the start of the presentation\n * @private\n */\n remove_(contentType, startTime, endTime) {\n if (endTime <= startTime) {\n // Ignore removal of inverted or empty ranges.\n // Fake 'updateend' event to resolve the operation.\n this.onUpdateEnd_(contentType);\n return;\n }\n\n // This will trigger an 'updateend' event.\n this.sourceBuffers_[contentType].remove(startTime, endTime);\n }\n\n /**\n * Call abort() on the SourceBuffer.\n * This resets MSE's last_decode_timestamp on all track buffers, which should\n * trigger the splicing logic for overlapping segments.\n * @param {shaka.util.ManifestParserUtils.ContentType} contentType\n * @private\n */\n abort_(contentType) {\n // Save the append window, which is reset on abort().\n const appendWindowStart =\n this.sourceBuffers_[contentType].appendWindowStart;\n const appendWindowEnd = this.sourceBuffers_[contentType].appendWindowEnd;\n\n // This will not trigger an 'updateend' event, since nothing is happening.\n // This is only to reset MSE internals, not to abort an actual operation.\n this.sourceBuffers_[contentType].abort();\n\n // Restore the append window.\n this.sourceBuffers_[contentType].appendWindowStart = appendWindowStart;\n this.sourceBuffers_[contentType].appendWindowEnd = appendWindowEnd;\n\n // Fake an 'updateend' event to resolve the operation.\n this.onUpdateEnd_(contentType);\n }\n\n /**\n * Nudge the playhead to force the media pipeline to be flushed.\n * This seems to be necessary on Chromecast to get new content to replace old\n * content.\n * @param {shaka.util.ManifestParserUtils.ContentType} contentType\n * @private\n */\n flush_(contentType) {\n // Never use flush_ if there's data. It causes a hiccup in playback.\n goog.asserts.assert(\n this.video_.buffered.length == 0, 'MediaSourceEngine.flush_ should ' +\n 'only be used after clearing all data!');\n\n // Seeking forces the pipeline to be flushed.\n this.video_.currentTime -= 0.001;\n\n // Fake an 'updateend' event to resolve the operation.\n this.onUpdateEnd_(contentType);\n }\n\n /**\n * Set the SourceBuffer's timestamp offset.\n * @param {shaka.util.ManifestParserUtils.ContentType} contentType\n * @param {number} timestampOffset\n * @private\n */\n setTimestampOffset_(contentType, timestampOffset) {\n // Work around for\n // https://github.com/shaka-project/shaka-player/issues/1281:\n // TODO(https://bit.ly/2ttKiBU): follow up when this is fixed in Edge\n if (timestampOffset < 0) {\n // Try to prevent rounding errors in Edge from removing the first\n // keyframe.\n timestampOffset += 0.001;\n }\n\n this.sourceBuffers_[contentType].timestampOffset = timestampOffset;\n\n // Fake an 'updateend' event to resolve the operation.\n this.onUpdateEnd_(contentType);\n }\n\n /**\n * Set the SourceBuffer's append window end.\n * @param {shaka.util.ManifestParserUtils.ContentType} contentType\n * @param {number} appendWindowStart\n * @param {number} appendWindowEnd\n * @private\n */\n setAppendWindow_(contentType, appendWindowStart, appendWindowEnd) {\n // You can't set start > end, so first set start to 0, then set the new\n // end, then set the new start. That way, there are no intermediate\n // states which are invalid.\n this.sourceBuffers_[contentType].appendWindowStart = 0;\n this.sourceBuffers_[contentType].appendWindowEnd = appendWindowEnd;\n this.sourceBuffers_[contentType].appendWindowStart = appendWindowStart;\n\n // Fake an 'updateend' event to resolve the operation.\n this.onUpdateEnd_(contentType);\n }\n\n /**\n * @param {shaka.util.ManifestParserUtils.ContentType} contentType\n * @private\n */\n onError_(contentType) {\n const operation = this.queues_[contentType][0];\n goog.asserts.assert(operation, 'Spurious error event!');\n goog.asserts.assert(!this.sourceBuffers_[contentType].updating,\n 'SourceBuffer should not be updating on error!');\n const code = this.video_.error ? this.video_.error.code : 0;\n operation.p.reject(new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.MEDIA,\n shaka.util.Error.Code.MEDIA_SOURCE_OPERATION_FAILED,\n code, operation.uri));\n // Do not pop from queue. An 'updateend' event will fire next, and to\n // avoid synchronizing these two event handlers, we will allow that one to\n // pop from the queue as normal. Note that because the operation has\n // already been rejected, the call to resolve() in the 'updateend' handler\n // will have no effect.\n }\n\n /**\n * @param {shaka.util.ManifestParserUtils.ContentType} contentType\n * @private\n */\n onUpdateEnd_(contentType) {\n if (this.reloadingMediaSource_) {\n return;\n }\n const operation = this.queues_[contentType][0];\n goog.asserts.assert(operation, 'Spurious updateend event!');\n if (!operation) {\n return;\n }\n goog.asserts.assert(!this.sourceBuffers_[contentType].updating,\n 'SourceBuffer should not be updating on updateend!');\n operation.p.resolve();\n this.popFromQueue_(contentType);\n }\n\n /**\n * Enqueue an operation and start it if appropriate.\n *\n * @param {shaka.util.ManifestParserUtils.ContentType} contentType\n * @param {function()} start\n * @param {?string} uri\n * @return {!Promise}\n * @private\n */\n enqueueOperation_(contentType, start, uri) {\n this.destroyer_.ensureNotDestroyed();\n const operation = {\n start: start,\n p: new shaka.util.PublicPromise(),\n uri,\n };\n this.queues_[contentType].push(operation);\n\n if (this.queues_[contentType].length == 1) {\n this.startOperation_(contentType);\n }\n return operation.p;\n }\n\n /**\n * Enqueue an operation which must block all other operations on all\n * SourceBuffers.\n *\n * @param {function():(Promise|undefined)} run\n * @return {!Promise}\n * @private\n */\n async enqueueBlockingOperation_(run) {\n this.destroyer_.ensureNotDestroyed();\n\n /** @type {!Array.} */\n const allWaiters = [];\n\n // Enqueue a 'wait' operation onto each queue.\n // This operation signals its readiness when it starts.\n // When all wait operations are ready, the real operation takes place.\n for (const contentType in this.sourceBuffers_) {\n const ready = new shaka.util.PublicPromise();\n const operation = {\n start: () => ready.resolve(),\n p: ready,\n uri: null,\n };\n\n this.queues_[contentType].push(operation);\n allWaiters.push(ready);\n\n if (this.queues_[contentType].length == 1) {\n operation.start();\n }\n }\n\n // Return a Promise to the real operation, which waits to begin until\n // there are no other in-progress operations on any SourceBuffers.\n try {\n await Promise.all(allWaiters);\n } catch (error) {\n // One of the waiters failed, which means we've been destroyed.\n goog.asserts.assert(\n this.destroyer_.destroyed(), 'Should be destroyed by now');\n // We haven't popped from the queue. Canceled waiters have been removed\n // by destroy. What's left now should just be resolved waiters. In\n // uncompiled mode, we will maintain good hygiene and make sure the\n // assert at the end of destroy passes. In compiled mode, the queues\n // are wiped in destroy.\n if (goog.DEBUG) {\n for (const contentType in this.sourceBuffers_) {\n if (this.queues_[contentType].length) {\n goog.asserts.assert(\n this.queues_[contentType].length == 1,\n 'Should be at most one item in queue!');\n goog.asserts.assert(\n allWaiters.includes(this.queues_[contentType][0].p),\n 'The item in queue should be one of our waiters!');\n this.queues_[contentType].shift();\n }\n }\n }\n throw error;\n }\n\n if (goog.DEBUG) {\n // If we did it correctly, nothing is updating.\n for (const contentType in this.sourceBuffers_) {\n goog.asserts.assert(\n this.sourceBuffers_[contentType].updating == false,\n 'SourceBuffers should not be updating after a blocking op!');\n }\n }\n\n // Run the real operation, which can be asynchronous.\n try {\n await run();\n } catch (exception) {\n throw new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.MEDIA,\n shaka.util.Error.Code.MEDIA_SOURCE_OPERATION_THREW,\n exception,\n this.video_.error || 'No error in the media element',\n null);\n } finally {\n // Unblock the queues.\n for (const contentType in this.sourceBuffers_) {\n this.popFromQueue_(contentType);\n }\n }\n }\n\n /**\n * Pop from the front of the queue and start a new operation.\n * @param {shaka.util.ManifestParserUtils.ContentType} contentType\n * @private\n */\n popFromQueue_(contentType) {\n // Remove the in-progress operation, which is now complete.\n this.queues_[contentType].shift();\n this.startOperation_(contentType);\n }\n\n /**\n * Starts the next operation in the queue.\n * @param {shaka.util.ManifestParserUtils.ContentType} contentType\n * @private\n */\n startOperation_(contentType) {\n // Retrieve the next operation, if any, from the queue and start it.\n const next = this.queues_[contentType][0];\n if (next) {\n try {\n next.start();\n } catch (exception) {\n if (exception.name == 'QuotaExceededError') {\n next.p.reject(new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.MEDIA,\n shaka.util.Error.Code.QUOTA_EXCEEDED_ERROR,\n contentType));\n } else {\n next.p.reject(new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.MEDIA,\n shaka.util.Error.Code.MEDIA_SOURCE_OPERATION_THREW,\n exception,\n this.video_.error || 'No error in the media element',\n next.uri));\n }\n this.popFromQueue_(contentType);\n }\n }\n }\n\n /**\n * @return {!shaka.extern.TextDisplayer}\n */\n getTextDisplayer() {\n goog.asserts.assert(\n this.textDisplayer_,\n 'TextDisplayer should only be null when this is destroyed');\n\n return this.textDisplayer_;\n }\n\n /**\n * @param {!shaka.extern.TextDisplayer} textDisplayer\n */\n setTextDisplayer(textDisplayer) {\n this.textDisplayer_ = textDisplayer;\n if (this.textEngine_) {\n this.textEngine_.setDisplayer(textDisplayer);\n }\n }\n\n /**\n * @param {boolean} segmentRelativeVttTiming\n */\n setSegmentRelativeVttTiming(segmentRelativeVttTiming) {\n this.segmentRelativeVttTiming_ = segmentRelativeVttTiming;\n }\n\n /**\n * Apply platform-specific transformations to this segment to work around\n * issues in the platform.\n *\n * @param {!BufferSource} segment\n * @param {?number} startTime\n * @param {shaka.util.ManifestParserUtils.ContentType} contentType\n * @param {?string} uri\n * @return {!BufferSource}\n * @private\n */\n workAroundBrokenPlatforms_(segment, startTime, contentType, uri) {\n const Platform = shaka.util.Platform;\n\n const isInitSegment = startTime == null;\n const encryptionExpected = this.expectedEncryption_[contentType];\n const keySystem = this.playerInterface_.getKeySystem();\n\n // If:\n // 1. the configuration tells to insert fake encryption,\n // 2. and this is an init segment,\n // 3. and encryption is expected,\n // 4. and the platform requires encryption in all init segments,\n // 5. and the content is MP4 (mimeType == \"video/mp4\" or \"audio/mp4\"),\n // then insert fake encryption metadata for init segments that lack it.\n // The MP4 requirement is because we can currently only do this\n // transformation on MP4 containers.\n // See: https://github.com/shaka-project/shaka-player/issues/2759\n if (this.config_.insertFakeEncryptionInInit &&\n isInitSegment &&\n encryptionExpected &&\n Platform.requiresEncryptionInfoInAllInitSegments(keySystem) &&\n shaka.util.MimeUtils.getContainerType(\n this.sourceBufferTypes_[contentType]) == 'mp4') {\n shaka.log.debug('Forcing fake encryption information in init segment.');\n segment = shaka.media.ContentWorkarounds.fakeEncryption(segment, uri);\n }\n\n return segment;\n }\n\n /**\n * Prepare the SourceBuffer to parse a potentially new type or codec.\n *\n * @param {shaka.util.ManifestParserUtils.ContentType} contentType\n * @param {string} mimeType\n * @param {?shaka.extern.Transmuxer} transmuxer\n * @private\n */\n change_(contentType, mimeType, transmuxer) {\n const ContentType = shaka.util.ManifestParserUtils.ContentType;\n if (contentType === ContentType.TEXT) {\n shaka.log.debug(`Change not supported for ${contentType}`);\n return;\n }\n shaka.log.debug(\n `Change Type: ${this.sourceBufferTypes_[contentType]} -> ${mimeType}`);\n if (shaka.media.Capabilities.isChangeTypeSupported()) {\n if (this.transmuxers_[contentType]) {\n this.transmuxers_[contentType].destroy();\n delete this.transmuxers_[contentType];\n }\n if (transmuxer) {\n this.transmuxers_[contentType] = transmuxer;\n }\n const type = this.addExtraFeaturesToMimeType_(mimeType);\n this.sourceBuffers_[contentType].changeType(type);\n this.sourceBufferTypes_[contentType] = mimeType;\n } else {\n shaka.log.debug('Change Type not supported');\n }\n\n // Fake an 'updateend' event to resolve the operation.\n this.onUpdateEnd_(contentType);\n }\n\n /**\n * Enqueue an operation to prepare the SourceBuffer to parse a potentially new\n * type or codec.\n *\n * @param {shaka.util.ManifestParserUtils.ContentType} contentType\n * @param {string} mimeType\n * @param {?shaka.extern.Transmuxer} transmuxer\n * @return {!Promise}\n */\n changeType(contentType, mimeType, transmuxer) {\n return this.enqueueOperation_(\n contentType,\n () => this.change_(contentType, mimeType, transmuxer),\n null);\n }\n\n /**\n * Returns the source buffer parameters\n * @param {shaka.util.ManifestParserUtils.ContentType} contentType\n * @return {?shaka.media.MediaSourceEngine.SourceBufferParams}\n * @private\n */\n getSourceBufferParams_(contentType) {\n if (!this.sourceBuffers_[contentType]) {\n return null;\n }\n return {\n timestampOffset: this.sourceBuffers_[contentType].timestampOffset,\n appendWindowStart: this.sourceBuffers_[contentType].appendWindowStart,\n appendWindowEnd: this.sourceBuffers_[contentType].appendWindowEnd,\n };\n }\n\n /**\n * Restore source buffer parameters\n * @param {shaka.util.ManifestParserUtils.ContentType} contentType\n * @param {?shaka.media.MediaSourceEngine.SourceBufferParams} params\n * @private\n */\n restoreSourceBufferParams_(contentType, params) {\n if (!params) {\n return;\n }\n\n if (!this.sourceBuffers_[contentType]) {\n shaka.log.warning('Attempted to restore a non-existent source buffer');\n return;\n }\n\n this.sourceBuffers_[contentType].timestampOffset =\n params.timestampOffset;\n // `end` needs to be set before `start`\n this.sourceBuffers_[contentType].appendWindowEnd =\n params.appendWindowEnd;\n this.sourceBuffers_[contentType].appendWindowStart =\n params.appendWindowStart;\n }\n\n /**\n * Resets the MediaSource and re-adds source buffers due to codec mismatch\n *\n * @param {!Map.} streamsByType\n * @private\n */\n async reset_(streamsByType) {\n const Functional = shaka.util.Functional;\n const ContentType = shaka.util.ManifestParserUtils.ContentType;\n this.reloadingMediaSource_ = true;\n this.needSplitMuxedContent_ = false;\n const currentTime = this.video_.currentTime;\n\n // When codec switching if the user is currently paused we don't want\n // to trigger a play when switching codec.\n // Playing can also end up in a paused state after a codec switch\n // so we need to remember the current states.\n const previousAutoPlayState = this.video_.autoplay;\n const previousPausedState = this.video_.paused;\n if (this.playbackHasBegun_) {\n // Only set autoplay to false if the video playback has already begun.\n // When a codec switch happens before playback has begun this can cause\n // autoplay not to work as expected.\n this.video_.autoplay = false;\n }\n\n try {\n this.eventManager_.removeAll();\n\n const cleanup = [];\n for (const contentType in this.transmuxers_) {\n cleanup.push(this.transmuxers_[contentType].destroy());\n }\n for (const contentType in this.queues_) {\n // Make a local copy of the queue and the first item.\n const q = this.queues_[contentType];\n const inProgress = q[0];\n\n // Drop everything else out of the original queue.\n this.queues_[contentType] = q.slice(0, 1);\n\n // We will wait for this item to complete/fail.\n if (inProgress) {\n cleanup.push(inProgress.p.catch(Functional.noop));\n }\n\n // The rest will be rejected silently if possible.\n for (const item of q.slice(1)) {\n item.p.reject(shaka.util.Destroyer.destroyedError());\n }\n }\n for (const contentType in this.sourceBuffers_) {\n const sourceBuffer = this.sourceBuffers_[contentType];\n try {\n this.mediaSource_.removeSourceBuffer(sourceBuffer);\n } catch (e) {}\n }\n await Promise.all(cleanup);\n this.transmuxers_ = {};\n\n const previousDuration = this.mediaSource_.duration;\n this.mediaSourceOpen_ = new shaka.util.PublicPromise();\n this.mediaSource_ = this.createMediaSource(this.mediaSourceOpen_);\n await this.mediaSourceOpen_;\n if (!isNaN(previousDuration) && previousDuration) {\n this.mediaSource_.duration = previousDuration;\n } else if (!isNaN(this.lastDuration_) && this.lastDuration_) {\n this.mediaSource_.duration = this.lastDuration_;\n }\n\n const sourceBufferAdded = new shaka.util.PublicPromise();\n const sourceBuffers =\n /** @type {EventTarget} */(this.mediaSource_.sourceBuffers);\n\n const totalOfBuffers = streamsByType.size;\n let numberOfSourceBufferAdded = 0;\n const onSourceBufferAdded = () => {\n numberOfSourceBufferAdded++;\n if (numberOfSourceBufferAdded === totalOfBuffers) {\n sourceBufferAdded.resolve();\n this.eventManager_.unlisten(sourceBuffers, 'addsourcebuffer',\n onSourceBufferAdded);\n }\n };\n\n this.eventManager_.listen(sourceBuffers, 'addsourcebuffer',\n onSourceBufferAdded);\n\n for (const contentType of streamsByType.keys()) {\n const previousParams = this.getSourceBufferParams_(contentType);\n const stream = streamsByType.get(contentType);\n // eslint-disable-next-line no-await-in-loop\n await this.initSourceBuffer_(contentType, stream, stream.codecs);\n if (this.needSplitMuxedContent_) {\n this.queues_[ContentType.AUDIO] = [];\n this.queues_[ContentType.VIDEO] = [];\n } else {\n this.queues_[contentType] = [];\n }\n\n this.restoreSourceBufferParams_(contentType, previousParams);\n }\n const audio = streamsByType.get(ContentType.AUDIO);\n if (audio && audio.isAudioMuxedInVideo) {\n this.needSplitMuxedContent_ = true;\n }\n\n // Fake a seek to catchup the playhead.\n this.video_.currentTime = currentTime;\n\n await sourceBufferAdded;\n } finally {\n this.reloadingMediaSource_ = false;\n\n this.destroyer_.ensureNotDestroyed();\n\n this.eventManager_.listenOnce(this.video_, 'canplaythrough', () => {\n // Don't use ensureNotDestroyed() from this event listener, because\n // that results in an uncaught exception. Instead, just check the\n // flag.\n if (this.destroyer_.destroyed()) {\n return;\n }\n\n this.video_.autoplay = previousAutoPlayState;\n if (!previousPausedState) {\n this.video_.play();\n }\n });\n }\n }\n\n /**\n * Resets the Media Source\n * @param {!Map.} streamsByType\n * @return {!Promise}\n */\n reset(streamsByType) {\n return this.enqueueBlockingOperation_(\n () => this.reset_(streamsByType));\n }\n\n /**\n * Codec switch if necessary, this will not resolve until the codec\n * switch is over.\n * @param {shaka.util.ManifestParserUtils.ContentType} contentType\n * @param {string} mimeType\n * @param {string} codecs\n * @param {!Map.} streamsByType\n * @return {!Promise.} true if there was a codec switch,\n * false otherwise.\n * @private\n */\n async codecSwitchIfNecessary_(contentType, mimeType, codecs, streamsByType) {\n const ContentType = shaka.util.ManifestParserUtils.ContentType;\n if (contentType == ContentType.TEXT) {\n return false;\n }\n const MimeUtils = shaka.util.MimeUtils;\n const currentCodec = MimeUtils.getNormalizedCodec(\n MimeUtils.getCodecs(this.sourceBufferTypes_[contentType]));\n const currentBasicType = MimeUtils.getBasicType(\n this.sourceBufferTypes_[contentType]);\n\n /** @type {?shaka.extern.Transmuxer} */\n let transmuxer;\n let transmuxerMuxed = false;\n let newMimeType = shaka.util.MimeUtils.getFullType(mimeType, codecs);\n let needTransmux = this.config_.forceTransmux;\n if (!shaka.media.Capabilities.isTypeSupported(newMimeType) ||\n (!this.sequenceMode_ &&\n shaka.util.MimeUtils.RAW_FORMATS.includes(newMimeType))) {\n needTransmux = true;\n }\n const TransmuxerEngine = shaka.transmuxer.TransmuxerEngine;\n if (needTransmux) {\n const newMimeTypeWithAllCodecs =\n shaka.util.MimeUtils.getFullTypeWithAllCodecs(mimeType, codecs);\n const transmuxerPlugin =\n TransmuxerEngine.findTransmuxer(newMimeTypeWithAllCodecs);\n if (transmuxerPlugin) {\n transmuxer = transmuxerPlugin();\n const audioCodec = shaka.util.ManifestParserUtils.guessCodecsSafe(\n ContentType.AUDIO, (codecs || '').split(','));\n const videoCodec = shaka.util.ManifestParserUtils.guessCodecsSafe(\n ContentType.VIDEO, (codecs || '').split(','));\n if (audioCodec && videoCodec) {\n transmuxerMuxed = true;\n let codec = videoCodec;\n if (contentType == ContentType.AUDIO) {\n codec = audioCodec;\n }\n newMimeType = transmuxer.convertCodecs(contentType,\n shaka.util.MimeUtils.getFullTypeWithAllCodecs(mimeType, codec));\n } else {\n newMimeType =\n transmuxer.convertCodecs(contentType, newMimeTypeWithAllCodecs);\n }\n }\n }\n\n const newCodec = MimeUtils.getNormalizedCodec(\n MimeUtils.getCodecs(newMimeType));\n const newBasicType = MimeUtils.getBasicType(newMimeType);\n\n // Current/new codecs base and basic type match then no need to switch\n if (currentCodec === newCodec && currentBasicType === newBasicType) {\n if (this.transmuxers_[contentType] && !transmuxer) {\n this.transmuxers_[contentType].destroy();\n delete this.transmuxers_[contentType];\n } else if (!this.transmuxers_[contentType] && transmuxer) {\n this.transmuxers_[contentType] = transmuxer;\n } else if (transmuxer) {\n // Compare if the transmuxer is different\n if (this.transmuxers_[contentType] &&\n this.transmuxers_[contentType].transmux != transmuxer.transmux) {\n this.transmuxers_[contentType].destroy();\n delete this.transmuxers_[contentType];\n this.transmuxers_[contentType] = transmuxer;\n } else {\n transmuxer.destroy();\n }\n }\n return false;\n }\n\n let allowChangeType = true;\n if (this.needSplitMuxedContent_ || (transmuxerMuxed &&\n transmuxer && !this.transmuxers_[contentType])) {\n allowChangeType = false;\n }\n\n if (allowChangeType && this.config_.codecSwitchingStrategy ===\n shaka.config.CodecSwitchingStrategy.SMOOTH &&\n shaka.media.Capabilities.isChangeTypeSupported()) {\n await this.changeType(contentType, newMimeType, transmuxer);\n } else {\n if (transmuxer) {\n transmuxer.destroy();\n }\n await this.reset(streamsByType);\n }\n return true;\n }\n\n /**\n * Returns true if it's necessary codec switch to load the new stream.\n *\n * @param {shaka.util.ManifestParserUtils.ContentType} contentType\n * @param {shaka.extern.Stream} stream\n * @param {string} refMimeType\n * @param {string} refCodecs\n * @return {boolean}\n * @private\n */\n isCodecSwitchNecessary_(contentType, stream, refMimeType, refCodecs) {\n if (contentType == shaka.util.ManifestParserUtils.ContentType.TEXT) {\n return false;\n }\n const MimeUtils = shaka.util.MimeUtils;\n const currentCodec = MimeUtils.getNormalizedCodec(\n MimeUtils.getCodecs(this.sourceBufferTypes_[contentType]));\n const currentBasicType = MimeUtils.getBasicType(\n this.sourceBufferTypes_[contentType]);\n\n let newMimeType = shaka.util.MimeUtils.getFullType(refMimeType, refCodecs);\n let needTransmux = this.config_.forceTransmux;\n if (!shaka.media.Capabilities.isTypeSupported(newMimeType) ||\n (!this.sequenceMode_ &&\n shaka.util.MimeUtils.RAW_FORMATS.includes(newMimeType))) {\n needTransmux = true;\n }\n const newMimeTypeWithAllCodecs =\n shaka.util.MimeUtils.getFullTypeWithAllCodecs(\n refMimeType, refCodecs);\n const TransmuxerEngine = shaka.transmuxer.TransmuxerEngine;\n if (needTransmux) {\n const transmuxerPlugin =\n TransmuxerEngine.findTransmuxer(newMimeTypeWithAllCodecs);\n if (transmuxerPlugin) {\n const transmuxer = transmuxerPlugin();\n newMimeType =\n transmuxer.convertCodecs(contentType, newMimeTypeWithAllCodecs);\n transmuxer.destroy();\n }\n }\n\n const newCodec = MimeUtils.getNormalizedCodec(\n MimeUtils.getCodecs(newMimeType));\n const newBasicType = MimeUtils.getBasicType(newMimeType);\n\n return currentCodec !== newCodec || currentBasicType !== newBasicType;\n }\n\n /**\n * Returns true if it's necessary reset the media source to load the\n * new stream.\n *\n * @param {shaka.util.ManifestParserUtils.ContentType} contentType\n * @param {shaka.extern.Stream} stream\n * @param {string} mimeType\n * @param {string} codecs\n * @return {boolean}\n */\n isResetMediaSourceNecessary(contentType, stream, mimeType, codecs) {\n if (!this.isCodecSwitchNecessary_(contentType, stream, mimeType, codecs)) {\n return false;\n }\n\n return this.config_.codecSwitchingStrategy !==\n shaka.config.CodecSwitchingStrategy.SMOOTH ||\n !shaka.media.Capabilities.isChangeTypeSupported() ||\n this.needSplitMuxedContent_;\n }\n\n /**\n * Update LCEVC Decoder object when ready for LCEVC Decode.\n * @param {?shaka.lcevc.Dec} lcevcDec\n */\n updateLcevcDec(lcevcDec) {\n this.lcevcDec_ = lcevcDec;\n }\n\n /**\n * @param {string} mimeType\n * @return {string}\n * @private\n */\n addExtraFeaturesToMimeType_(mimeType) {\n const extraFeatures = this.config_.addExtraFeaturesToSourceBuffer(mimeType);\n const extendedType = mimeType + extraFeatures;\n shaka.log.debug('Using full mime type', extendedType);\n\n return extendedType;\n }\n};\n\n\n/**\n * Internal reference to window.URL.createObjectURL function to avoid\n * compatibility issues with other libraries and frameworks such as React\n * Native. For use in unit tests only, not meant for external use.\n *\n * @type {function(?):string}\n */\nshaka.media.MediaSourceEngine.createObjectURL = window.URL.createObjectURL;\n\n\n/**\n * @typedef {{\n * start: function(),\n * p: !shaka.util.PublicPromise,\n * uri: ?string\n * }}\n *\n * @summary An operation in queue.\n * @property {function()} start\n * The function which starts the operation.\n * @property {!shaka.util.PublicPromise} p\n * The PublicPromise which is associated with this operation.\n * @property {?string} uri\n * A segment URI (if any) associated with this operation.\n */\nshaka.media.MediaSourceEngine.Operation;\n\n\n/**\n * @enum {string}\n * @private\n */\nshaka.media.MediaSourceEngine.SourceBufferMode_ = {\n SEQUENCE: 'sequence',\n SEGMENTS: 'segments',\n};\n\n\n/**\n * @typedef {{\n * getKeySystem: function():?string,\n * onMetadata: function(!Array, number, ?number),\n * onEvent: function(!Event),\n * onManifestUpdate: function()\n * }}\n *\n * @summary Player interface\n * @property {function():?string} getKeySystem\n * Gets currently used key system or null if not used.\n * @property {function(\n * !Array, number, ?number)} onMetadata\n * Callback to use when metadata arrives.\n * @property {function(!Event)} onEvent\n * Called when an event occurs that should be sent to the app.\n * @property {function()} onManifestUpdate\n * Called when an embedded 'emsg' box should trigger a manifest update.\n */\nshaka.media.MediaSourceEngine.PlayerInterface;\n\n/**\n * @typedef {{\n * timestampOffset: number,\n * appendWindowStart: number,\n * appendWindowEnd: number\n * }}\n */\nshaka.media.MediaSourceEngine.SourceBufferParams;\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.media.MetaSegmentIndex');\ngoog.provide('shaka.media.SegmentIndex');\ngoog.provide('shaka.media.SegmentIterator');\n\ngoog.require('goog.asserts');\ngoog.require('shaka.log');\ngoog.require('shaka.media.SegmentReference');\ngoog.require('shaka.util.IReleasable');\ngoog.require('shaka.util.Timer');\n\n\n/**\n * SegmentIndex.\n *\n * @implements {shaka.extern.SegmentIndex}\n * @implements {shaka.util.IReleasable}\n * @implements {Iterable.}\n * @export\n */\nshaka.media.SegmentIndex = class {\n /**\n * @param {!Array.} references The list of\n * SegmentReferences, which must be sorted first by their start times\n * (ascending) and second by their end times (ascending).\n */\n constructor(references) {\n if (goog.DEBUG) {\n shaka.media.SegmentIndex.assertCorrectReferences_(references);\n }\n\n /** @protected {!Array.} */\n this.references = references;\n\n /** @private {shaka.util.Timer} */\n this.timer_ = null;\n\n /**\n * The number of references that have been removed from the front of the\n * array. Used to create stable positions in the find/get APIs.\n *\n * @protected {number}\n */\n this.numEvicted_ = 0;\n\n /** @private {boolean} */\n this.immutable_ = false;\n }\n\n /**\n * Get immutability\n *\n * @return {boolean}\n */\n getIsImmutable() {\n return this.immutable_;\n }\n\n /**\n * @override\n * @export\n */\n getNumReferences() {\n return this.references.length;\n }\n\n /**\n * @override\n * @export\n */\n getNumEvicted() {\n return this.numEvicted_;\n }\n\n /**\n * @override\n * @export\n */\n release() {\n if (this.immutable_) {\n return;\n }\n\n this.references = [];\n\n if (this.timer_) {\n this.timer_.stop();\n }\n this.timer_ = null;\n }\n\n\n /**\n * Marks the index as immutable. Segments cannot be added or removed after\n * this point. This doesn't affect the references themselves. This also\n * makes the destroy/release methods do nothing.\n *\n * This is mainly for testing.\n *\n * @export\n */\n markImmutable() {\n this.immutable_ = true;\n }\n\n\n /**\n * Iterates over all top-level segment references in this segment index.\n * @param {function(!shaka.media.SegmentReference)} fn\n */\n forEachTopLevelReference(fn) {\n for (const reference of this.references) {\n fn(reference);\n }\n }\n\n\n /**\n * Return the earliest reference, or null if empty.\n * @return {shaka.media.SegmentReference}\n */\n earliestReference() {\n return this.references[0] || null;\n }\n\n\n /**\n * Drop the first N references.\n * Used in early HLS synchronization, and does not count as eviction.\n * @param {number} n\n */\n dropFirstReferences(n) {\n this.references.splice(0, n);\n }\n\n\n /**\n * @override\n * @export\n */\n find(time) {\n // For live streams, searching from the end is faster. For VOD, it balances\n // out either way. In both cases, references.length is small enough that\n // the difference isn't huge.\n const lastReferenceIndex = this.references.length - 1;\n for (let i = lastReferenceIndex; i >= 0; --i) {\n const r = this.references[i];\n const start = r.startTime;\n // A rounding error can cause /time/ to equal e.endTime or fall in between\n // the references by a fraction of a second. To account for this, we use\n // the start of the next segment as /end/, unless this is the last\n // reference, in which case we use its end time as /end/.\n const end = i < lastReferenceIndex ?\n this.references[i + 1].startTime : r.endTime;\n // Note that a segment ends immediately before the end time.\n if ((time >= start) && (time < end)) {\n return i + this.numEvicted_;\n }\n }\n if (this.references.length && time < this.references[0].startTime) {\n return this.numEvicted_;\n }\n\n return null;\n }\n\n\n /**\n * @override\n * @export\n */\n get(position) {\n if (this.references.length == 0) {\n return null;\n }\n\n const index = position - this.numEvicted_;\n if (index < 0 || index >= this.references.length) {\n return null;\n }\n\n return this.references[index];\n }\n\n\n /**\n * Offset all segment references by a fixed amount.\n *\n * @param {number} offset The amount to add to each segment's start and end\n * times.\n * @export\n */\n offset(offset) {\n if (!this.immutable_) {\n for (const ref of this.references) {\n ref.offset(offset);\n }\n }\n }\n\n\n /**\n * Merges the given SegmentReferences. Supports extending the original\n * references only. Will replace old references with equivalent new ones, and\n * keep any unique old ones.\n *\n * Used, for example, by the DASH and HLS parser, where manifests may not list\n * all available references, so we must keep available references in memory to\n * fill the availability window.\n *\n * @param {!Array.} references The list of\n * SegmentReferences, which must be sorted first by their start times\n * (ascending) and second by their end times (ascending).\n */\n merge(references) {\n if (goog.DEBUG) {\n shaka.media.SegmentIndex.assertCorrectReferences_(references);\n }\n if (this.immutable_) {\n return;\n }\n\n if (!references.length) {\n return;\n }\n\n // Partial segments are used for live edge, and should be removed when they\n // get older. Remove the old SegmentReferences after the first new\n // reference's start time.\n // Use times rounded to the millisecond for filtering purposes, so that\n // tiny rounding errors will not result in duplicate segments in the index.\n const firstStartTime = Math.round(references[0].startTime * 1000) / 1000;\n this.references = this.references.filter((r) => {\n return (Math.round(r.startTime * 1000) / 1000) < firstStartTime;\n });\n\n this.references.push(...references);\n\n if (goog.DEBUG) {\n shaka.media.SegmentIndex.assertCorrectReferences_(this.references);\n }\n }\n\n /**\n * Merges the given SegmentReferences and evicts the ones that end before the\n * given time. Supports extending the original references only.\n * Will not replace old references or interleave new ones.\n * Used, for example, by the DASH and HLS parser, where manifests may not list\n * all available references, so we must keep available references in memory to\n * fill the availability window.\n *\n * @param {!Array.} references The list of\n * SegmentReferences, which must be sorted first by their start times\n * (ascending) and second by their end times (ascending).\n * @param {number} windowStart The start of the availability window to filter\n * out the references that are no longer available.\n * @export\n */\n mergeAndEvict(references, windowStart) {\n // Filter out the references that are no longer available to avoid\n // repeatedly evicting them and messing up eviction count.\n references = references.filter((r) => {\n return r.endTime > windowStart &&\n (this.references.length == 0 ||\n r.endTime > this.references[0].startTime);\n });\n\n const oldFirstRef = this.references[0];\n this.merge(references);\n const newFirstRef = this.references[0];\n\n if (oldFirstRef) {\n // We don't compare the actual ref, since the object could legitimately be\n // replaced with an equivalent. Even the URIs could change due to\n // load-balancing actions taken by the server. However, if the time\n // changes, its not an equivalent reference.\n goog.asserts.assert(oldFirstRef.startTime == newFirstRef.startTime,\n 'SegmentIndex.merge should not change the first reference time!');\n }\n\n this.evict(windowStart);\n }\n\n /**\n * Removes all SegmentReferences that end before the given time.\n *\n * @param {number} time The time in seconds.\n * @export\n */\n evict(time) {\n if (this.immutable_) {\n return;\n }\n\n const oldSize = this.references.length;\n\n this.references = this.references.filter((ref) => ref.endTime > time);\n\n const newSize = this.references.length;\n const diff = oldSize - newSize;\n // Tracking the number of evicted refs will keep their \"positions\" stable\n // for the caller.\n this.numEvicted_ += diff;\n }\n\n\n /**\n * Drops references that start after windowEnd, or end before windowStart,\n * and contracts the last reference so that it ends at windowEnd.\n *\n * Do not call on the last period of a live presentation (unknown duration).\n * It is okay to call on the other periods of a live presentation, where the\n * duration is known and another period has been added.\n *\n * @param {number} windowStart\n * @param {?number} windowEnd\n * @param {boolean=} isNew Whether this is a new SegmentIndex and we shouldn't\n * update the number of evicted elements.\n * @export\n */\n fit(windowStart, windowEnd, isNew = false) {\n goog.asserts.assert(windowEnd != null,\n 'Content duration must be known for static content!');\n goog.asserts.assert(windowEnd != Infinity,\n 'Content duration must be finite for static content!');\n if (this.immutable_) {\n return;\n }\n\n // Trim out references we will never use.\n while (this.references.length) {\n const lastReference = this.references[this.references.length - 1];\n if (lastReference.startTime >= windowEnd) {\n this.references.pop();\n } else {\n break;\n }\n }\n\n while (this.references.length) {\n const firstReference = this.references[0];\n if (firstReference.endTime <= windowStart) {\n this.references.shift();\n if (!isNew) {\n this.numEvicted_++;\n }\n } else {\n break;\n }\n }\n\n if (this.references.length == 0) {\n return;\n }\n\n // Adjust the last SegmentReference.\n const lastReference = this.references[this.references.length - 1];\n const newReference = new shaka.media.SegmentReference(\n lastReference.startTime,\n /* endTime= */ windowEnd,\n lastReference.getUrisInner,\n lastReference.startByte,\n lastReference.endByte,\n lastReference.initSegmentReference,\n lastReference.timestampOffset,\n lastReference.appendWindowStart,\n lastReference.appendWindowEnd,\n lastReference.partialReferences,\n lastReference.tilesLayout,\n lastReference.tileDuration,\n lastReference.syncTime,\n lastReference.status,\n lastReference.aesKey,\n );\n newReference.mimeType = lastReference.mimeType;\n newReference.codecs = lastReference.codecs;\n newReference.discontinuitySequence = lastReference.discontinuitySequence;\n this.references[this.references.length - 1] = newReference;\n }\n\n\n /**\n * Updates the references every so often. Stops when the references list\n * returned by the callback is null.\n *\n * @param {number} interval The interval in seconds.\n * @param {function():Array.} updateCallback\n * @export\n */\n updateEvery(interval, updateCallback) {\n goog.asserts.assert(!this.timer_, 'SegmentIndex timer already started!');\n if (this.immutable_) {\n return;\n }\n if (this.timer_) {\n this.timer_.stop();\n }\n\n this.timer_ = new shaka.util.Timer(() => {\n const references = updateCallback();\n if (references) {\n this.references.push(...references);\n } else {\n this.timer_.stop();\n this.timer_ = null;\n }\n });\n this.timer_.tickEvery(interval);\n }\n\n\n /** @return {!shaka.media.SegmentIterator} */\n [Symbol.iterator]() {\n const iter = this.getIteratorForTime(0);\n goog.asserts.assert(iter != null, 'Iterator for 0 should never be null!');\n return iter;\n }\n\n /**\n * Returns a new iterator that initially points to the segment that contains\n * the given time, or the nearest independent segment before it.\n *\n * Like the normal iterator, next() must be called first to get to the first\n * element. Returns null if we do not find a segment at the\n * requested time.\n *\n * The first segment returned by the iterator _MUST_ be an independent\n * segment. Assumes that only partial references can be dependent, based on\n * RFC 8216 rev 13, section 8.1: \"Each (non-Partial) Media Segment in a Media\n * Playlist will contain at least one independent frame.\"\n *\n * @param {number} time\n * @param {boolean=} allowNonIndepedent\n * @param {boolean=} reverse\n * @return {?shaka.media.SegmentIterator}\n * @export\n */\n getIteratorForTime(time, allowNonIndepedent = false, reverse = false) {\n let index = this.find(time);\n if (index == null) {\n return null;\n }\n\n const ref = this.get(index);\n\n // Adjust index to point to previous or next index (if reversed), so first\n // next() call will traverse in proper direction.\n if (!reverse) {\n index--;\n } else {\n index++;\n }\n\n let partialSegmentIndex = -1;\n if (ref && ref.hasPartialSegments()) {\n // Look for a partial SegmentReference.\n for (let i = ref.partialReferences.length - 1; i >= 0; --i) {\n let r = ref.partialReferences[i];\n // Note that a segment ends immediately before the end time.\n if ((time >= r.startTime) && (time < r.endTime)) {\n if (!allowNonIndepedent) {\n // Find an independent partial segment by moving backwards.\n while (i && (!r.isIndependent())) {\n i--;\n r = ref.partialReferences[i];\n }\n if (!r.isIndependent()) {\n shaka.log.alwaysError('No independent partial segment found!');\n return null;\n }\n }\n // Call to next() should move the partial segment, not the full\n // segment.\n if (reverse) {\n index--;\n } else {\n index++;\n }\n partialSegmentIndex = i - 1;\n break;\n }\n }\n }\n return new shaka.media.SegmentIterator(\n this, index, partialSegmentIndex, reverse);\n }\n\n /**\n * @return {boolean}\n */\n isEmpty() {\n return this.getNumReferences() == 0;\n }\n\n /**\n * Create a SegmentIndex for a single segment of the given start time and\n * duration at the given URIs.\n *\n * @param {number} startTime\n * @param {number} duration\n * @param {!Array.} uris\n * @return {!shaka.media.SegmentIndex}\n * @export\n */\n static forSingleSegment(startTime, duration, uris) {\n const reference = new shaka.media.SegmentReference(\n /* startTime= */ startTime,\n /* endTime= */ startTime + duration,\n /* getUris= */ () => uris,\n /* startByte= */ 0,\n /* endByte= */ null,\n /* initSegmentReference= */ null,\n /* presentationTimeOffset= */ startTime,\n /* appendWindowStart= */ startTime,\n /* appendWindowEnd= */ startTime + duration);\n return new shaka.media.SegmentIndex([reference]);\n }\n};\n\n\nif (goog.DEBUG) {\n /**\n * Asserts that the given SegmentReferences are sorted.\n *\n * @param {!Array.} references\n * @private\n */\n shaka.media.SegmentIndex.assertCorrectReferences_ = (references) => {\n goog.asserts.assert(references.every((r2, i) => {\n if (i == 0) {\n return true;\n }\n const r1 = references[i - 1];\n if (r1.startTime < r2.startTime) {\n return true;\n } else if (r1.startTime > r2.startTime) {\n return false;\n } else {\n if (r1.endTime <= r2.endTime) {\n return true;\n } else {\n return false;\n }\n }\n }), 'SegmentReferences are incorrect');\n };\n}\n\n\n/**\n * An iterator over a SegmentIndex's references.\n *\n * @implements {Iterator.}\n * @export\n */\nshaka.media.SegmentIterator = class {\n /**\n * @param {shaka.media.SegmentIndex} segmentIndex\n * @param {number} index\n * @param {number} partialSegmentIndex\n * @param {boolean} reverse\n */\n constructor(segmentIndex, index, partialSegmentIndex, reverse) {\n /** @private {shaka.media.SegmentIndex} */\n this.segmentIndex_ = segmentIndex;\n\n /** @private {number} */\n this.currentPosition_ = index;\n\n /** @private {number} */\n this.currentPartialPosition_ = partialSegmentIndex;\n\n /** @private {boolean} */\n this.reverse = reverse;\n }\n\n /**\n * @param {boolean} reverse\n * @export\n */\n setReverse(reverse) {\n this.reverse = reverse;\n }\n\n /**\n * @return {number}\n * @export\n */\n currentPosition() {\n return this.currentPosition_;\n }\n\n /**\n * @return {shaka.media.SegmentReference}\n * @export\n */\n current() {\n let ref = this.segmentIndex_.get(this.currentPosition_);\n\n // When we advance past the end of partial references in next(), then add\n // new references in merge(), the pointers may not make sense any more.\n // This adjusts the invalid pointer values to point to the next newly added\n // segment or partial segment.\n if (ref && ref.hasPartialSegments() && ref.hasAllPartialSegments() &&\n this.currentPartialPosition_ >= ref.partialReferences.length) {\n this.currentPosition_++;\n this.currentPartialPosition_ = 0;\n ref = this.segmentIndex_.get(this.currentPosition_);\n }\n\n // If the regular segment contains partial segments, get the current\n // partial SegmentReference.\n if (ref && ref.hasPartialSegments()) {\n const partial = ref.partialReferences[this.currentPartialPosition_];\n return partial;\n }\n return ref;\n }\n\n /**\n * @override\n * @export\n */\n next() {\n const ref = this.segmentIndex_.get(this.currentPosition_);\n\n if (!this.reverse) {\n if (ref && ref.hasPartialSegments()) {\n // If the regular segment contains partial segments, move to the next\n // partial SegmentReference.\n this.currentPartialPosition_++;\n // If the current regular segment has been published completely, and\n // we've reached the end of its partial segments list, move to the next\n // regular segment.\n // If the Partial Segments list is still on the fly, do not move to\n // the next regular segment.\n if (ref.hasAllPartialSegments() &&\n this.currentPartialPosition_ == ref.partialReferences.length) {\n this.currentPosition_++;\n this.currentPartialPosition_ = 0;\n }\n } else {\n // If the regular segment doesn't contain partial segments, move to the\n // next regular segment.\n this.currentPosition_++;\n this.currentPartialPosition_ = 0;\n }\n } else {\n if (ref && ref.hasPartialSegments()) {\n // If the regular segment contains partial segments, move to the\n // previous partial SegmentReference.\n this.currentPartialPosition_--;\n if (this.currentPartialPosition_ < 0) {\n this.currentPosition_--;\n const prevRef = this.segmentIndex_.get(this.currentPosition_);\n if (prevRef && prevRef.hasPartialSegments()) {\n this.currentPartialPosition_ = prevRef.partialReferences.length - 1;\n } else {\n this.currentPartialPosition_ = 0;\n }\n }\n } else {\n // If the regular segment doesn't contain partial segments, move to the\n // previous regular segment.\n this.currentPosition_--;\n this.currentPartialPosition_ = 0;\n }\n }\n\n const res = this.current();\n\n return {\n 'value': res,\n 'done': !res,\n };\n }\n\n /**\n * @export\n */\n resetToLastIndependent() {\n const current = this.current();\n if (current.isPartial() && !current.isIndependent()) {\n const ref = this.segmentIndex_.get(this.currentPosition_);\n if (ref && ref.hasPartialSegments()) {\n let partial = ref.partialReferences[this.currentPartialPosition_];\n while (partial.isIndependent()) {\n if (this.currentPartialPosition_ <= 0) {\n break;\n }\n this.currentPartialPosition_--;\n partial = ref.partialReferences[this.currentPartialPosition_];\n }\n }\n }\n }\n};\n\n\n/**\n * A meta-SegmentIndex composed of multiple other SegmentIndexes.\n * Used in constructing multi-Period Streams for DASH.\n *\n * @extends shaka.media.SegmentIndex\n * @implements {shaka.util.IReleasable}\n * @implements {Iterable.}\n * @export\n */\nshaka.media.MetaSegmentIndex = class extends shaka.media.SegmentIndex {\n /** */\n constructor() {\n super([]);\n\n /** @private {!Array.} */\n this.indexes_ = [];\n }\n\n /** Evicts all old SegmentIndexes in this MetaSegmentIndex that are empty. */\n evictEmpty() {\n while (this.indexes_.length > 1 && this.indexes_[0].isEmpty()) {\n const index = this.indexes_.shift();\n // In the case of this class, this.numEvicted_ represents the evicted\n // segments that were in indexes that were entirely evicted.\n this.numEvicted_ += index.getNumEvicted();\n index.release();\n }\n }\n\n /**\n * Append a SegmentIndex to this MetaSegmentIndex. This effectively stitches\n * the underlying Stream onto the end of the multi-Period Stream represented\n * by this MetaSegmentIndex.\n *\n * @param {!shaka.media.SegmentIndex} segmentIndex\n */\n appendSegmentIndex(segmentIndex) {\n goog.asserts.assert(\n this.indexes_.length == 0 || segmentIndex.getNumEvicted() == 0,\n 'Should not append a new segment index with already-evicted segments');\n this.indexes_.push(segmentIndex);\n }\n\n /**\n * Create a clone of this MetaSegmentIndex containing all the same indexes.\n *\n * @return {!shaka.media.MetaSegmentIndex}\n */\n clone() {\n const clone = new shaka.media.MetaSegmentIndex();\n // Be careful to clone the Array. We don't want to share the reference with\n // our clone and affect each other accidentally.\n clone.indexes_ = this.indexes_.slice();\n clone.numEvicted_ = this.numEvicted_;\n return clone;\n }\n\n /**\n * @override\n * @export\n */\n release() {\n for (const index of this.indexes_) {\n index.release();\n }\n\n this.indexes_ = [];\n }\n\n /**\n * @override\n * @export\n */\n forEachTopLevelReference(fn) {\n for (const index of this.indexes_) {\n index.forEachTopLevelReference(fn);\n }\n }\n\n /**\n * @override\n * @export\n */\n find(time) {\n let numPassedInEarlierIndexes = this.numEvicted_;\n\n for (const index of this.indexes_) {\n const position = index.find(time);\n\n if (position != null) {\n return position + numPassedInEarlierIndexes;\n }\n\n numPassedInEarlierIndexes += index.getNumEvicted() +\n index.getNumReferences();\n }\n\n return null;\n }\n\n /**\n * @override\n * @export\n */\n get(position) {\n let numPassedInEarlierIndexes = this.numEvicted_;\n let sawSegments = false;\n\n for (const index of this.indexes_) {\n goog.asserts.assert(\n !sawSegments || index.getNumEvicted() == 0,\n 'Should not see evicted segments after available segments');\n const reference = index.get(position - numPassedInEarlierIndexes);\n\n if (reference) {\n return reference;\n }\n\n const num = index.getNumReferences();\n numPassedInEarlierIndexes += index.getNumEvicted() + num;\n sawSegments = sawSegments || num != 0;\n }\n\n return null;\n }\n\n /**\n * @override\n * @export\n */\n offset(offset) {\n // offset() is only used by HLS, and MetaSegmentIndex is only used for DASH.\n goog.asserts.assert(\n false, 'offset() should not be used in MetaSegmentIndex!');\n }\n\n /**\n * @override\n * @export\n */\n merge(references) {\n // merge() is only used internally by the DASH and HLS parser on\n // SegmentIndexes, but never on MetaSegmentIndex.\n goog.asserts.assert(\n false, 'merge() should not be used in MetaSegmentIndex!');\n }\n\n /**\n * @override\n * @export\n */\n evict(time) {\n for (const index of this.indexes_) {\n index.evict(time);\n }\n this.evictEmpty();\n }\n\n /**\n * @override\n * @export\n */\n mergeAndEvict(references, windowStart) {\n // mergeAndEvict() is only used internally by the DASH and HLS parser on\n // SegmentIndexes, but never on MetaSegmentIndex.\n goog.asserts.assert(\n false, 'mergeAndEvict() should not be used in MetaSegmentIndex!');\n }\n\n /**\n * @override\n * @export\n */\n fit(windowStart, windowEnd) {\n // fit() is only used internally by manifest parsers on SegmentIndexes, but\n // never on MetaSegmentIndex.\n goog.asserts.assert(false, 'fit() should not be used in MetaSegmentIndex!');\n }\n\n /**\n * @override\n * @export\n */\n updateEvery(interval, updateCallback) {\n // updateEvery() is only used internally by the DASH parser on\n // SegmentIndexes, but never on MetaSegmentIndex.\n goog.asserts.assert(\n false, 'updateEvery() should not be used in MetaSegmentIndex!');\n }\n};\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.media.PresentationTimeline');\n\ngoog.require('goog.asserts');\ngoog.require('shaka.log');\ngoog.require('shaka.media.SegmentReference');\n\n\n/**\n * PresentationTimeline.\n * @export\n */\nshaka.media.PresentationTimeline = class {\n /**\n * @param {?number} presentationStartTime The wall-clock time, in seconds,\n * when the presentation started or will start. Only required for live.\n * @param {number} presentationDelay The delay to give the presentation, in\n * seconds. Only required for live.\n * @param {boolean=} autoCorrectDrift Whether to account for drift when\n * determining the availability window.\n *\n * @see {shaka.extern.Manifest}\n * @see {@tutorial architecture}\n */\n constructor(presentationStartTime, presentationDelay,\n autoCorrectDrift = true) {\n /** @private {?number} */\n this.presentationStartTime_ = presentationStartTime;\n\n /** @private {number} */\n this.presentationDelay_ = presentationDelay;\n\n /** @private {number} */\n this.duration_ = Infinity;\n\n /** @private {number} */\n this.segmentAvailabilityDuration_ = Infinity;\n\n /**\n * The maximum segment duration (in seconds). Can be based on explicitly-\n * known segments or on signalling in the manifest.\n *\n * @private {number}\n */\n this.maxSegmentDuration_ = 1;\n\n /**\n * The minimum segment start time (in seconds, in the presentation timeline)\n * for segments we explicitly know about.\n *\n * This is null if we have no explicit descriptions of segments, such as in\n * DASH when using SegmentTemplate w/ duration.\n *\n * @private {?number}\n */\n this.minSegmentStartTime_ = null;\n\n /**\n * The maximum segment end time (in seconds, in the presentation timeline)\n * for segments we explicitly know about.\n *\n * This is null if we have no explicit descriptions of segments, such as in\n * DASH when using SegmentTemplate w/ duration. When this is non-null, the\n * presentation start time is calculated from the segment end times.\n *\n * @private {?number}\n */\n this.maxSegmentEndTime_ = null;\n\n /** @private {number} */\n this.clockOffset_ = 0;\n\n /** @private {boolean} */\n this.static_ = true;\n\n /** @private {boolean} */\n this.isLive2VodTransition_ = false;\n\n /** @private {number} */\n this.userSeekStart_ = 0;\n\n /** @private {boolean} */\n this.autoCorrectDrift_ = autoCorrectDrift;\n\n /**\n * For low latency Dash, availabilityTimeOffset indicates a segment is\n * available for download earlier than its availability start time.\n * This field is the minimum availabilityTimeOffset value among the\n * segments. We reduce the distance from live edge by this value.\n *\n * @private {number}\n */\n this.availabilityTimeOffset_ = 0;\n\n /** @private {boolean} */\n this.startTimeLocked_ = false;\n\n /** @private {?number} */\n this.initialProgramDateTime_ = presentationStartTime;\n }\n\n\n /**\n * @return {number} The presentation's duration in seconds.\n * Infinity indicates that the presentation continues indefinitely.\n * @export\n */\n getDuration() {\n return this.duration_;\n }\n\n\n /**\n * @return {number} The presentation's max segment duration in seconds.\n * @export\n */\n getMaxSegmentDuration() {\n return this.maxSegmentDuration_;\n }\n\n\n /**\n * Sets the presentation's start time.\n *\n * @param {number} presentationStartTime The wall-clock time, in seconds,\n * when the presentation started or will start. Only required for live.\n * @export\n */\n setPresentationStartTime(presentationStartTime) {\n goog.asserts.assert(presentationStartTime >= 0,\n 'presentationStartTime must be >= 0');\n this.presentationStartTime_ = presentationStartTime;\n }\n\n\n /**\n * Sets the presentation's duration.\n *\n * @param {number} duration The presentation's duration in seconds.\n * Infinity indicates that the presentation continues indefinitely.\n * @export\n */\n setDuration(duration) {\n goog.asserts.assert(duration > 0, 'duration must be > 0');\n this.duration_ = duration;\n }\n\n\n /**\n * @return {?number} The presentation's start time in seconds.\n * @export\n */\n getPresentationStartTime() {\n return this.presentationStartTime_;\n }\n\n\n /**\n * Sets the clock offset, which is the difference between the client's clock\n * and the server's clock, in milliseconds (i.e., serverTime = Date.now() +\n * clockOffset).\n *\n * @param {number} offset The clock offset, in ms.\n * @export\n */\n setClockOffset(offset) {\n this.clockOffset_ = offset;\n }\n\n\n /**\n * Sets the presentation's static flag.\n *\n * @param {boolean} isStatic If true, the presentation is static, meaning all\n * segments are available at once.\n * @export\n */\n setStatic(isStatic) {\n // NOTE: the argument name is not \"static\" because that's a keyword in ES6\n if (isStatic && !this.static_) {\n this.isLive2VodTransition_ = true;\n }\n this.static_ = isStatic;\n }\n\n\n /**\n * Sets the presentation's segment availability duration. The segment\n * availability duration should only be set for live.\n *\n * @param {number} segmentAvailabilityDuration The presentation's new segment\n * availability duration in seconds.\n * @export\n */\n setSegmentAvailabilityDuration(segmentAvailabilityDuration) {\n goog.asserts.assert(segmentAvailabilityDuration >= 0,\n 'segmentAvailabilityDuration must be >= 0');\n this.segmentAvailabilityDuration_ = segmentAvailabilityDuration;\n }\n\n\n /**\n * Gets the presentation's segment availability duration.\n *\n * @return {number}\n * @export\n */\n getSegmentAvailabilityDuration() {\n return this.segmentAvailabilityDuration_;\n }\n\n\n /**\n * Sets the presentation delay in seconds.\n *\n * @param {number} delay\n * @export\n */\n setDelay(delay) {\n // NOTE: This is no longer used internally, but is exported.\n // So we cannot remove it without deprecating it and waiting one release\n // cycle, or else we risk breaking custom manifest parsers.\n goog.asserts.assert(delay >= 0, 'delay must be >= 0');\n this.presentationDelay_ = delay;\n }\n\n\n /**\n * Gets the presentation delay in seconds.\n * @return {number}\n * @export\n */\n getDelay() {\n return this.presentationDelay_;\n }\n\n /**\n * Gives PresentationTimeline a Stream's timeline so it can size and position\n * the segment availability window, and account for missing segment\n * information.\n *\n * @param {!Array.} timeline\n * @param {number} startOffset\n * @export\n */\n notifyTimeRange(timeline, startOffset) {\n if (timeline.length == 0) {\n return;\n }\n\n // Date.now() is in milliseconds, from which we compute \"now\" in seconds.\n const now = (Date.now() + this.clockOffset_) / 1000.0;\n // Exclude time ranges that are in the \"future\".\n const timelineForStart = timeline.filter((timeRange) =>\n timeRange.start + startOffset < now);\n if (timelineForStart.length == 0) {\n return;\n }\n\n const firstStartTime = timelineForStart[0].start + startOffset;\n const lastEndTime = timelineForStart[timelineForStart.length - 1].end +\n startOffset;\n\n this.notifyMinSegmentStartTime(firstStartTime);\n\n this.maxSegmentDuration_ = timelineForStart.reduce(\n (max, r) => { return Math.max(max, r.end - r.start); },\n this.maxSegmentDuration_);\n\n this.maxSegmentEndTime_ =\n Math.max(this.maxSegmentEndTime_, lastEndTime);\n\n if (this.presentationStartTime_ != null && this.autoCorrectDrift_ &&\n !this.startTimeLocked_) {\n // Since we have explicit segment end times, calculate a presentation\n // start based on them. This start time accounts for drift.\n this.presentationStartTime_ =\n now - this.maxSegmentEndTime_ - this.maxSegmentDuration_;\n }\n\n shaka.log.v1('notifySegments:',\n 'maxSegmentDuration=' + this.maxSegmentDuration_);\n }\n\n\n /**\n * Gives PresentationTimeline an array of segments so it can size and position\n * the segment availability window, and account for missing segment\n * information. These segments do not necessarily need to all be from the\n * same stream.\n *\n * @param {!Array.} references\n * @export\n */\n notifySegments(references) {\n if (references.length == 0) {\n return;\n }\n\n let firstReferenceStartTime = references[0].startTime;\n let lastReferenceEndTime = references[0].endTime;\n\n // Date.now() is in milliseconds, from which we compute \"now\" in seconds.\n const now = (Date.now() + this.clockOffset_) / 1000.0;\n\n for (const reference of references) {\n // Exclude segments that are in the \"future\".\n if (now < reference.startTime) {\n continue;\n }\n\n firstReferenceStartTime = Math.min(\n firstReferenceStartTime, reference.startTime);\n lastReferenceEndTime = Math.max(lastReferenceEndTime, reference.endTime);\n this.maxSegmentDuration_ = Math.max(\n this.maxSegmentDuration_, reference.endTime - reference.startTime);\n }\n this.notifyMinSegmentStartTime(firstReferenceStartTime);\n this.maxSegmentEndTime_ =\n Math.max(this.maxSegmentEndTime_, lastReferenceEndTime);\n\n if (this.presentationStartTime_ != null && this.autoCorrectDrift_ &&\n !this.startTimeLocked_) {\n // Since we have explicit segment end times, calculate a presentation\n // start based on them. This start time accounts for drift.\n this.presentationStartTime_ =\n now - this.maxSegmentEndTime_ - this.maxSegmentDuration_;\n }\n\n shaka.log.v1('notifySegments:',\n 'maxSegmentDuration=' + this.maxSegmentDuration_);\n }\n\n\n /**\n * Gives PresentationTimeline an startTime and endTime of the period.\n * This should be only set for Dash.\n *\n * @param {number} startTime\n * @param {number} endTime\n * @export\n */\n notifyPeriodDuration(startTime, endTime) {\n this.notifyMinSegmentStartTime(startTime);\n if (endTime != Infinity && !this.isLive()) {\n this.maxSegmentEndTime_ = Math.max(this.maxSegmentEndTime_, endTime);\n }\n }\n\n\n /**\n * Gets the end time of the last available segment.\n *\n * @return {?number}\n * @export\n */\n getMaxSegmentEndTime() {\n return this.maxSegmentEndTime_;\n }\n\n\n /**\n * Lock the presentation timeline's start time. After this is called, no\n * further adjustments to presentationStartTime_ will be permitted.\n *\n * This should be called after all Periods have been parsed, and all calls to\n * notifySegments() from the initial manifest parse have been made.\n *\n * Without this, we can get assertion failures in SegmentIndex for certain\n * DAI content. If DAI adds ad segments to the manifest faster than\n * real-time, adjustments to presentationStartTime_ can cause availability\n * windows to jump around on updates.\n *\n * @export\n */\n lockStartTime() {\n this.startTimeLocked_ = true;\n }\n\n\n /**\n * Returns if the presentation timeline's start time is locked.\n *\n * @return {boolean}\n * @export\n */\n isStartTimeLocked() {\n return this.startTimeLocked_;\n }\n\n\n /**\n * Sets the initial program date time.\n *\n * @param {number} initialProgramDateTime\n * @export\n */\n setInitialProgramDateTime(initialProgramDateTime) {\n this.initialProgramDateTime_ = initialProgramDateTime;\n }\n\n\n /**\n * @return {?number} The initial program date time in seconds.\n * @export\n */\n getInitialProgramDateTime() {\n return this.initialProgramDateTime_;\n }\n\n\n /**\n * Gives PresentationTimeline a Stream's minimum segment start time.\n *\n * @param {number} startTime\n * @export\n */\n notifyMinSegmentStartTime(startTime) {\n if (this.minSegmentStartTime_ == null) {\n // No data yet, and Math.min(null, startTime) is always 0. So just store\n // startTime.\n this.minSegmentStartTime_ = startTime;\n } else if (!this.isLive2VodTransition_) {\n this.minSegmentStartTime_ =\n Math.min(this.minSegmentStartTime_, startTime);\n }\n }\n\n\n /**\n * Gives PresentationTimeline a Stream's maximum segment duration so it can\n * size and position the segment availability window. This function should be\n * called once for each Stream (no more, no less), but does not have to be\n * called if notifySegments() is called instead for a particular stream.\n *\n * @param {number} maxSegmentDuration The maximum segment duration for a\n * particular stream.\n * @export\n */\n notifyMaxSegmentDuration(maxSegmentDuration) {\n this.maxSegmentDuration_ = Math.max(\n this.maxSegmentDuration_, maxSegmentDuration);\n\n shaka.log.v1('notifyNewSegmentDuration:',\n 'maxSegmentDuration=' + this.maxSegmentDuration_);\n }\n\n\n /**\n * Offsets the segment times by the given amount.\n *\n * @param {number} offset The number of seconds to offset by. A positive\n * number adjusts the segment times forward.\n * @export\n */\n offset(offset) {\n if (this.minSegmentStartTime_ != null) {\n this.minSegmentStartTime_ += offset;\n }\n if (this.maxSegmentEndTime_ != null) {\n this.maxSegmentEndTime_ += offset;\n }\n }\n\n\n /**\n * @return {boolean} True if the presentation is live; otherwise, return\n * false.\n * @export\n */\n isLive() {\n return this.duration_ == Infinity &&\n !this.static_;\n }\n\n\n /**\n * @return {boolean} True if the presentation is in progress (meaning not\n * live, but also not completely available); otherwise, return false.\n * @export\n */\n isInProgress() {\n return this.duration_ != Infinity &&\n !this.static_;\n }\n\n\n /**\n * Gets the presentation's current segment availability start time. Segments\n * ending at or before this time should be assumed to be unavailable.\n *\n * @return {number} The current segment availability start time, in seconds,\n * relative to the start of the presentation.\n * @export\n */\n getSegmentAvailabilityStart() {\n goog.asserts.assert(this.segmentAvailabilityDuration_ >= 0,\n 'The availability duration should be positive');\n\n const end = this.getSegmentAvailabilityEnd();\n const start = end - this.segmentAvailabilityDuration_;\n return Math.max(this.userSeekStart_, start);\n }\n\n\n /**\n * Sets the start time of the user-defined seek range. This is only used for\n * VOD content.\n *\n * @param {number} time\n * @export\n */\n setUserSeekStart(time) {\n this.userSeekStart_ = time;\n }\n\n\n /**\n * Gets the presentation's current segment availability end time. Segments\n * starting after this time should be assumed to be unavailable.\n *\n * @return {number} The current segment availability end time, in seconds,\n * relative to the start of the presentation. For VOD, the availability\n * end time is the content's duration. If the Player's playRangeEnd\n * configuration is used, this can override the duration.\n * @export\n */\n getSegmentAvailabilityEnd() {\n if (!this.isLive() && !this.isInProgress()) {\n // It's a static manifest (can also be a dynamic->static conversion)\n if (this.maxSegmentEndTime_) {\n // If we know segment times, use the min of that and duration.\n // Note that the playRangeEnd configuration changes this.duration_.\n // See https://github.com/shaka-project/shaka-player/issues/4026\n return Math.min(this.maxSegmentEndTime_, this.duration_);\n } else {\n // If we don't have segment times, use duration.\n return this.duration_;\n }\n }\n // Can be either live or \"in-progress recording\" (live with known duration)\n return Math.min(this.getLiveEdge_() + this.availabilityTimeOffset_,\n this.duration_);\n }\n\n\n /**\n * Gets the seek range start time, offset by the given amount. This is used\n * to ensure that we don't \"fall\" back out of the seek window while we are\n * buffering.\n *\n * @param {number} offset The offset to add to the start time for live\n * streams.\n * @return {number} The current seek start time, in seconds, relative to the\n * start of the presentation.\n * @export\n */\n getSafeSeekRangeStart(offset) {\n // The earliest known segment time, ignoring segment availability duration.\n const earliestSegmentTime =\n Math.max(this.minSegmentStartTime_, this.userSeekStart_);\n\n // For VOD, the offset and end time are ignored, and we just return the\n // earliest segment time. All segments are \"safe\" in VOD. However, we\n // should round up to the nearest millisecond to avoid issues like\n // https://github.com/shaka-project/shaka-player/issues/2831, in which we\n // tried to seek repeatedly to catch up to the seek range, and never\n // actually \"arrived\" within it. The video's currentTime is not as\n // accurate as the JS number representing the earliest segment time for\n // some content.\n if (this.segmentAvailabilityDuration_ == Infinity) {\n return Math.ceil(earliestSegmentTime * 1e3) / 1e3;\n }\n\n // AKA the live edge for live streams.\n const availabilityEnd = this.getSegmentAvailabilityEnd();\n\n // The ideal availability start, not considering known segments.\n const availabilityStart =\n availabilityEnd - this.segmentAvailabilityDuration_;\n\n // Add the offset to the availability start to ensure that we don't fall\n // outside the availability window while we buffer; we don't need to add the\n // offset to earliestSegmentTime since that won't change over time.\n // Also see: https://github.com/shaka-project/shaka-player/issues/692\n const desiredStart =\n Math.min(availabilityStart + offset, this.getSeekRangeEnd());\n return Math.max(earliestSegmentTime, desiredStart);\n }\n\n\n /**\n * Gets the seek range start time.\n *\n * @return {number}\n * @export\n */\n getSeekRangeStart() {\n return this.getSafeSeekRangeStart(/* offset= */ 0);\n }\n\n\n /**\n * Gets the seek range end.\n *\n * @return {number}\n * @export\n */\n getSeekRangeEnd() {\n const useDelay = this.isLive() || this.isInProgress();\n const delay = useDelay ? this.presentationDelay_ : 0;\n return Math.max(0, this.getSegmentAvailabilityEnd() - delay);\n }\n\n\n /**\n * True if the presentation start time is being used to calculate the live\n * edge.\n * Using the presentation start time means that the stream may be subject to\n * encoder drift. At runtime, we will avoid using the presentation start time\n * whenever possible.\n *\n * @return {boolean}\n * @export\n */\n usingPresentationStartTime() {\n // If it's VOD, IPR, or an HLS \"event\", we are not using the presentation\n // start time.\n if (this.presentationStartTime_ == null) {\n return false;\n }\n\n // If we have explicit segment times, we're not using the presentation\n // start time.\n if (this.maxSegmentEndTime_ != null && this.autoCorrectDrift_) {\n return false;\n }\n\n return true;\n }\n\n\n /**\n * @return {number} The current presentation time in seconds.\n * @private\n */\n getLiveEdge_() {\n goog.asserts.assert(this.presentationStartTime_ != null,\n 'Cannot compute timeline live edge without start time');\n // Date.now() is in milliseconds, from which we compute \"now\" in seconds.\n const now = (Date.now() + this.clockOffset_) / 1000.0;\n return Math.max(\n 0, now - this.maxSegmentDuration_ - this.presentationStartTime_);\n }\n\n /**\n * Sets the presentation's segment availability time offset. This should be\n * only set for Low Latency Dash.\n * The segments are available earlier for download than the availability start\n * time, so we can move closer to the live edge.\n *\n * @param {number} offset\n * @export\n */\n setAvailabilityTimeOffset(offset) {\n this.availabilityTimeOffset_ = offset;\n }\n\n\n /**\n * Gets the presentation's segment availability time offset. This should be\n * only configured for Low Latency Dash.\n *\n * @return {number} availabilityTimeOffset parameter\n * @export\n */\n getAvailabilityTimeOffset() {\n return this.availabilityTimeOffset_;\n }\n\n\n /**\n * Debug only: assert that the timeline parameters make sense for the type\n * of presentation (VOD, IPR, live).\n */\n assertIsValid() {\n if (goog.DEBUG) {\n if (this.isLive()) {\n // Implied by isLive(): infinite and dynamic.\n // Live streams should have a start time.\n goog.asserts.assert(this.presentationStartTime_ != null,\n 'Detected as live stream, but does not match our model of live!');\n } else if (this.isInProgress()) {\n // Implied by isInProgress(): finite and dynamic.\n // IPR streams should have a start time, and segments should not expire.\n goog.asserts.assert(this.presentationStartTime_ != null &&\n this.segmentAvailabilityDuration_ == Infinity,\n 'Detected as IPR stream, but does not match our model of IPR!');\n } else { // VOD\n // VOD segments should not expire and the presentation should be finite\n // and static.\n goog.asserts.assert(this.segmentAvailabilityDuration_ == Infinity &&\n this.duration_ != Infinity &&\n this.static_,\n 'Detected as VOD stream, but does not match our model of VOD!');\n }\n }\n }\n};\n\n\n/**\n * @typedef {{\n * start: number,\n * unscaledStart: number,\n * end: number,\n * partialSegments: number,\n * segmentPosition: number\n * }}\n *\n * @description\n * Defines a time range of a media segment. Times are in seconds.\n *\n * @property {number} start\n * The start time of the range.\n * @property {number} unscaledStart\n * The start time of the range in representation timescale units.\n * @property {number} end\n * The end time (exclusive) of the range.\n * @property {number} partialSegments\n * The number of partial segments\n * @property {number} segmentPosition\n * The segment position of the timeline entry as it appears in the manifest\n *\n * @export\n */\nshaka.media.PresentationTimeline.TimeRange;\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.media.StallDetector');\ngoog.provide('shaka.media.StallDetector.Implementation');\ngoog.provide('shaka.media.StallDetector.MediaElementImplementation');\n\ngoog.require('shaka.media.TimeRangesUtils');\ngoog.require('shaka.util.FakeEvent');\ngoog.require('shaka.util.IReleasable');\n\n/**\n * Some platforms/browsers can get stuck in the middle of a buffered range (e.g.\n * when seeking in a background tab). Detect when we get stuck so that the\n * player can respond.\n *\n * @implements {shaka.util.IReleasable}\n * @final\n */\nshaka.media.StallDetector = class {\n /**\n * @param {shaka.media.StallDetector.Implementation} implementation\n * @param {number} stallThresholdSeconds\n * @param {function(!Event)} onEvent\n * Called when an event is raised to be sent to the application.\n */\n constructor(implementation, stallThresholdSeconds, onEvent) {\n /** @private {?function(!Event)} */\n this.onEvent_ = onEvent;\n /** @private {shaka.media.StallDetector.Implementation} */\n this.implementation_ = implementation;\n /** @private {boolean} */\n this.wasMakingProgress_ = implementation.shouldBeMakingProgress();\n /** @private {number} */\n this.value_ = implementation.getPresentationSeconds();\n /** @private {number} */\n this.lastUpdateSeconds_ = implementation.getWallSeconds();\n /** @private {boolean} */\n this.didJump_ = false;\n /** @private {number} */\n this.stallsDetected_ = 0;\n\n /**\n * The amount of time in seconds that we must have the same value of\n * |value_| before we declare it as a stall.\n *\n * @private {number}\n */\n this.stallThresholdSeconds_ = stallThresholdSeconds;\n\n /** @private {function(number, number)} */\n this.onStall_ = () => {};\n }\n\n /** @override */\n release() {\n // Drop external references to make things easier on the GC.\n this.implementation_ = null;\n this.onEvent_ = null;\n this.onStall_ = () => {};\n }\n\n /**\n * Set the callback that should be called when a stall is detected. Calling\n * this will override any previous calls to |onStall|.\n *\n * @param {function(number, number)} doThis\n */\n onStall(doThis) {\n this.onStall_ = doThis;\n }\n\n /**\n * Returns the number of playback stalls detected.\n */\n getStallsDetected() {\n return this.stallsDetected_;\n }\n\n /**\n * Have the detector update itself and fire the \"on stall\" callback if a stall\n * was detected.\n *\n * @return {boolean} True if action was taken.\n */\n poll() {\n const impl = this.implementation_;\n\n const shouldBeMakingProgress = impl.shouldBeMakingProgress();\n const value = impl.getPresentationSeconds();\n const wallTimeSeconds = impl.getWallSeconds();\n\n const acceptUpdate = this.value_ != value ||\n this.wasMakingProgress_ != shouldBeMakingProgress;\n\n if (acceptUpdate) {\n this.lastUpdateSeconds_ = wallTimeSeconds;\n this.value_ = value;\n this.wasMakingProgress_ = shouldBeMakingProgress;\n this.didJump_ = false;\n }\n\n const stallSeconds = wallTimeSeconds - this.lastUpdateSeconds_;\n\n const triggerCallback = stallSeconds >= this.stallThresholdSeconds_ &&\n shouldBeMakingProgress && !this.didJump_;\n\n if (triggerCallback) {\n this.onStall_(this.value_, stallSeconds);\n this.didJump_ = true;\n // If the onStall_ method updated the current time, update our stored\n // value so we don't think that was an update.\n this.value_ = impl.getPresentationSeconds();\n this.stallsDetected_++;\n this.onEvent_(new shaka.util.FakeEvent(\n shaka.util.FakeEvent.EventName.StallDetected));\n }\n\n return triggerCallback;\n }\n};\n\n/**\n * @interface\n */\nshaka.media.StallDetector.Implementation = class {\n /**\n * Check if the presentation time should be changing. This will return |true|\n * when we expect the presentation time to change.\n *\n * @return {boolean}\n */\n shouldBeMakingProgress() {}\n\n /**\n * Get the presentation time in seconds.\n *\n * @return {number}\n */\n getPresentationSeconds() {}\n\n /**\n * Get the time wall time in seconds.\n *\n * @return {number}\n */\n getWallSeconds() {}\n};\n\n\n/**\n * Some platforms/browsers can get stuck in the middle of a buffered range (e.g.\n * when seeking in a background tab). Force a seek to help get it going again.\n *\n * @implements {shaka.media.StallDetector.Implementation}\n * @final\n */\nshaka.media.StallDetector.MediaElementImplementation = class {\n /**\n * @param {!HTMLMediaElement} mediaElement\n */\n constructor(mediaElement) {\n /** @private {!HTMLMediaElement} */\n this.mediaElement_ = mediaElement;\n }\n\n /** @override */\n shouldBeMakingProgress() {\n // If we are not trying to play, the lack of change could be misidentified\n // as a stall.\n if (this.mediaElement_.paused) {\n return false;\n }\n if (this.mediaElement_.playbackRate == 0) {\n return false;\n }\n\n // If we have don't have enough content, we are not stalled, we are\n // buffering.\n if (this.mediaElement_.buffered.length == 0) {\n return false;\n }\n\n return shaka.media.StallDetector.MediaElementImplementation.hasContentFor_(\n this.mediaElement_.buffered,\n /* timeInSeconds= */ this.mediaElement_.currentTime);\n }\n\n /** @override */\n getPresentationSeconds() {\n return this.mediaElement_.currentTime;\n }\n\n /** @override */\n getWallSeconds() {\n return Date.now() / 1000;\n }\n\n /**\n * Check if we have buffered enough content to play at |timeInSeconds|. Ignore\n * the end of the buffered range since it may not play any more on all\n * platforms.\n *\n * @param {!TimeRanges} buffered\n * @param {number} timeInSeconds\n * @return {boolean}\n * @private\n */\n static hasContentFor_(buffered, timeInSeconds) {\n const TimeRangesUtils = shaka.media.TimeRangesUtils;\n for (const {start, end} of TimeRangesUtils.getBufferedInfo(buffered)) {\n // Can be as much as 100ms before the range\n if (timeInSeconds < start - 0.1) {\n continue;\n }\n // Must be at least 500ms inside the range\n if (timeInSeconds > end - 0.5) {\n continue;\n }\n\n return true;\n }\n\n return false;\n }\n};\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.media.GapJumpingController');\n\ngoog.require('shaka.log');\ngoog.require('shaka.media.PresentationTimeline');\ngoog.require('shaka.media.StallDetector');\ngoog.require('shaka.media.TimeRangesUtils');\ngoog.require('shaka.util.EventManager');\ngoog.require('shaka.util.FakeEvent');\ngoog.require('shaka.util.IReleasable');\ngoog.require('shaka.util.Platform');\ngoog.require('shaka.util.Timer');\n\n\n/**\n * GapJumpingController handles jumping gaps that appear within the content.\n * This will only jump gaps between two buffered ranges, so we should not have\n * to worry about the availability window.\n *\n * @implements {shaka.util.IReleasable}\n */\nshaka.media.GapJumpingController = class {\n /**\n * @param {!HTMLMediaElement} video\n * @param {!shaka.media.PresentationTimeline} timeline\n * @param {shaka.extern.StreamingConfiguration} config\n * @param {shaka.media.StallDetector} stallDetector\n * The stall detector is used to keep the playhead moving while in a\n * playable region. The gap jumping controller takes ownership over the\n * stall detector.\n * If no stall detection logic is desired, |null| may be provided.\n * @param {function(!Event)} onEvent\n * Called when an event is raised to be sent to the application.\n */\n constructor(video, timeline, config, stallDetector, onEvent) {\n /** @private {?function(!Event)} */\n this.onEvent_ = onEvent;\n\n /** @private {HTMLMediaElement} */\n this.video_ = video;\n\n /** @private {?shaka.media.PresentationTimeline} */\n this.timeline_ = timeline;\n\n /** @private {?shaka.extern.StreamingConfiguration} */\n this.config_ = config;\n\n /** @private {shaka.util.EventManager} */\n this.eventManager_ = new shaka.util.EventManager();\n\n /** @private {boolean} */\n this.seekingEventReceived_ = false;\n\n /** @private {number} */\n this.prevReadyState_ = video.readyState;\n\n /** @private {number} */\n this.startTime_ = 0;\n\n /** @private {number} */\n this.gapsJumped_ = 0;\n\n /**\n * The stall detector tries to keep the playhead moving forward. It is\n * managed by the gap-jumping controller to avoid conflicts. On some\n * platforms, the stall detector is not wanted, so it may be null.\n *\n * @private {shaka.media.StallDetector}\n */\n this.stallDetector_ = stallDetector;\n\n /** @private {boolean} */\n this.hadSegmentAppended_ = false;\n\n this.eventManager_.listen(video, 'waiting', () => this.onPollGapJump_());\n\n /**\n * We can't trust |readyState| or 'waiting' events on all platforms. To make\n * up for this, we poll the current time. If we think we are in a gap, jump\n * out of it.\n *\n * See: https://bit.ly/2McuXxm and https://bit.ly/2K5xmJO\n *\n * @private {?shaka.util.Timer}\n */\n this.gapJumpTimer_ = new shaka.util.Timer(() => {\n this.onPollGapJump_();\n }).tickEvery(this.config_.gapJumpTimerTime);\n }\n\n\n /** @override */\n release() {\n if (this.eventManager_) {\n this.eventManager_.release();\n this.eventManager_ = null;\n }\n\n if (this.gapJumpTimer_ != null) {\n this.gapJumpTimer_.stop();\n this.gapJumpTimer_ = null;\n }\n\n if (this.stallDetector_) {\n this.stallDetector_.release();\n this.stallDetector_ = null;\n }\n\n this.onEvent_ = null;\n this.timeline_ = null;\n this.video_ = null;\n }\n\n\n /**\n * Called when a segment is appended by StreamingEngine, but not when a clear\n * is pending. This means StreamingEngine will continue buffering forward from\n * what is buffered. So we know about any gaps before the start.\n */\n onSegmentAppended() {\n this.hadSegmentAppended_ = true;\n this.onPollGapJump_();\n }\n\n /**\n * Called when playback has started and the video element is\n * listening for seeks.\n *\n * @param {number} startTime\n */\n onStarted(startTime) {\n if (this.video_.seeking && !this.seekingEventReceived_) {\n this.seekingEventReceived_ = true;\n this.startTime_ = startTime;\n }\n }\n\n /** Called when a seek has started. */\n onSeeking() {\n this.seekingEventReceived_ = true;\n this.hadSegmentAppended_ = false;\n }\n\n\n /**\n * Returns the total number of playback gaps jumped.\n * @return {number}\n */\n getGapsJumped() {\n return this.gapsJumped_;\n }\n\n\n /**\n * Called on a recurring timer to check for gaps in the media. This is also\n * called in a 'waiting' event.\n *\n * @private\n */\n onPollGapJump_() {\n // Don't gap jump before the video is ready to play.\n if (this.video_.readyState == 0) {\n return;\n }\n // Do not gap jump if seeking has begun, but the seeking event has not\n // yet fired for this particular seek.\n if (this.video_.seeking) {\n if (!this.seekingEventReceived_) {\n return;\n }\n } else {\n this.seekingEventReceived_ = false;\n }\n // Don't gap jump while paused, so that you don't constantly jump ahead\n // while paused on a livestream. We make an exception for time 0, since we\n // may be _required_ to seek on startup before play can begin, but only if\n // autoplay is enabled.\n if (this.video_.paused && (this.video_.currentTime != this.startTime_ ||\n (!this.video_.autoplay && this.video_.currentTime == this.startTime_))) {\n return;\n }\n\n\n // When the ready state changes, we have moved on, so we should fire the\n // large gap event if we see one.\n if (this.video_.readyState != this.prevReadyState_) {\n this.prevReadyState_ = this.video_.readyState;\n }\n\n if (this.stallDetector_ && this.stallDetector_.poll()) {\n // Some action was taken by StallDetector, so don't do anything yet.\n return;\n }\n\n\n const currentTime = this.video_.currentTime;\n const buffered = this.video_.buffered;\n const gapDetectionThreshold = this.config_.gapDetectionThreshold;\n\n const gapIndex = shaka.media.TimeRangesUtils.getGapIndex(\n buffered, currentTime, gapDetectionThreshold);\n\n // The current time is unbuffered or is too far from a gap.\n if (gapIndex == null) {\n return;\n }\n\n // If we are before the first buffered range, this could be an unbuffered\n // seek. So wait until a segment is appended so we are sure it is a gap.\n if (gapIndex == 0 && !this.hadSegmentAppended_) {\n return;\n }\n\n // StreamingEngine can buffer past the seek end, but still don't allow\n // seeking past it.\n let jumpTo = buffered.start(gapIndex);\n // Workaround for Xbox with Legacy Edge. On this platform video element\n // often rounds value we want to set as currentTime and we are not able\n // to jump over the gap.\n if (shaka.util.Platform.isLegacyEdge() ||\n shaka.util.Platform.isXboxOne() ||\n shaka.util.Platform.isTizen()) {\n const gapPadding = this.config_.gapPadding;\n jumpTo = Math.ceil((jumpTo + gapPadding) * 100) / 100;\n }\n const seekEnd = this.timeline_.getSeekRangeEnd();\n if (jumpTo >= seekEnd) {\n return;\n }\n\n const jumpSize = jumpTo - currentTime;\n\n // If we jump to exactly the gap start, we may detect a small gap due to\n // rounding errors or browser bugs. We can ignore these extremely small\n // gaps since the browser should play through them for us.\n if (jumpSize < shaka.media.GapJumpingController.BROWSER_GAP_TOLERANCE) {\n return;\n }\n\n if (gapIndex == 0) {\n shaka.log.info(\n 'Jumping forward', jumpSize,\n 'seconds because of gap before start time of', jumpTo);\n } else {\n shaka.log.info(\n 'Jumping forward', jumpSize, 'seconds because of gap starting at',\n buffered.end(gapIndex - 1), 'and ending at', jumpTo);\n }\n\n this.video_.currentTime = jumpTo;\n // This accounts for the possibility that we jump a gap at the start\n // position but we jump _into_ another gap. By setting the start\n // position to the new jumpTo we ensure that the check above will\n // pass even though the video is still paused.\n if (currentTime == this.startTime_) {\n this.startTime_ = jumpTo;\n }\n this.gapsJumped_++;\n this.onEvent_(\n new shaka.util.FakeEvent(shaka.util.FakeEvent.EventName.GapJumped));\n }\n};\n\n\n/**\n * The limit, in seconds, for the gap size that we will assume the browser will\n * handle for us.\n * @const\n */\nshaka.media.GapJumpingController.BROWSER_GAP_TOLERANCE = 0.001;\n\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.util.MediaReadyState');\n\ngoog.require('shaka.util.EventManager');\ngoog.require('shaka.util.Lazy');\n\n\nshaka.util.MediaReadyState = class {\n /**\n * @param {!HTMLMediaElement} mediaElement\n * @param {number} readyState\n * @param {shaka.util.EventManager} eventManager\n * @param {function()} callback\n */\n static waitForReadyState(mediaElement, readyState, eventManager, callback) {\n if (readyState == HTMLMediaElement.HAVE_NOTHING ||\n mediaElement.readyState >= readyState) {\n callback();\n } else {\n const MediaReadyState = shaka.util.MediaReadyState;\n const eventName =\n MediaReadyState.READY_STATES_TO_EVENT_NAMES_.value().get(readyState);\n eventManager.listenOnce(mediaElement, eventName, callback);\n }\n }\n};\n\n/**\n * @const {!shaka.util.Lazy.>}\n * @private\n */\nshaka.util.MediaReadyState.READY_STATES_TO_EVENT_NAMES_ =\n new shaka.util.Lazy(() => new Map([\n [HTMLMediaElement.HAVE_METADATA, 'loadedmetadata'],\n [HTMLMediaElement.HAVE_CURRENT_DATA, 'loadeddata'],\n [HTMLMediaElement.HAVE_FUTURE_DATA, 'canplay'],\n [HTMLMediaElement.HAVE_ENOUGH_DATA, 'canplaythrough'],\n ]));\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.media.VideoWrapper');\ngoog.provide('shaka.media.VideoWrapper.PlayheadMover');\n\ngoog.require('goog.asserts');\ngoog.require('shaka.log');\ngoog.require('shaka.util.EventManager');\ngoog.require('shaka.util.IReleasable');\ngoog.require('shaka.util.MediaReadyState');\ngoog.require('shaka.util.Timer');\n\n\n/**\n * Creates a new VideoWrapper that manages setting current time and playback\n * rate. This handles seeks before content is loaded and ensuring the video\n * time is set properly. This doesn't handle repositioning within the\n * presentation window.\n *\n * @implements {shaka.util.IReleasable}\n */\nshaka.media.VideoWrapper = class {\n /**\n * @param {!HTMLMediaElement} video\n * @param {function()} onSeek Called when the video seeks.\n * @param {function(number)} onStarted Called when the video has started.\n * @param {function():number} getStartTime Calle to get the time to start at.\n */\n constructor(video, onSeek, onStarted, getStartTime) {\n /** @private {HTMLMediaElement} */\n this.video_ = video;\n\n /** @private {function()} */\n this.onSeek_ = onSeek;\n\n /** @private {function(number)} */\n this.onStarted_ = onStarted;\n\n /** @private {?number} */\n this.startTime_ = null;\n\n /** @private {function():number} */\n this.getStartTime_ = () => {\n if (this.startTime_ == null) {\n this.startTime_ = getStartTime();\n }\n return this.startTime_;\n };\n\n /** @private {boolean} */\n this.started_ = false;\n\n /** @private {shaka.util.EventManager} */\n this.eventManager_ = new shaka.util.EventManager();\n\n /** @private {shaka.media.VideoWrapper.PlayheadMover} */\n this.mover_ = new shaka.media.VideoWrapper.PlayheadMover(\n /* mediaElement= */ video,\n /* maxAttempts= */ 10);\n\n // Before we can set the start time, we must check if the video element is\n // ready. If the video element is not ready, we cannot set the time. To work\n // around this, we will wait for the \"loadedmetadata\" event which tells us\n // that the media element is now ready.\n shaka.util.MediaReadyState.waitForReadyState(this.video_,\n HTMLMediaElement.HAVE_METADATA,\n this.eventManager_,\n () => {\n this.setStartTime_(this.getStartTime_());\n });\n }\n\n\n /** @override */\n release() {\n if (this.eventManager_) {\n this.eventManager_.release();\n this.eventManager_ = null;\n }\n\n if (this.mover_ != null) {\n this.mover_.release();\n this.mover_ = null;\n }\n\n this.onSeek_ = () => {};\n this.video_ = null;\n }\n\n\n /**\n * Gets the video's current (logical) position.\n *\n * @return {number}\n */\n getTime() {\n return this.started_ ? this.video_.currentTime : this.getStartTime_();\n }\n\n\n /**\n * Sets the current time of the video.\n *\n * @param {number} time\n */\n setTime(time) {\n if (this.video_.readyState > 0) {\n this.mover_.moveTo(time);\n } else {\n shaka.util.MediaReadyState.waitForReadyState(this.video_,\n HTMLMediaElement.HAVE_METADATA,\n this.eventManager_,\n () => {\n this.setStartTime_(this.getStartTime_());\n });\n }\n }\n\n\n /**\n * Set the start time for the content. The given start time will be ignored if\n * the content does not start at 0.\n *\n * @param {number} startTime\n * @private\n */\n setStartTime_(startTime) {\n // If we start close enough to our intended start time, then we won't do\n // anything special.\n if (Math.abs(this.video_.currentTime - startTime) < 0.001) {\n this.startListeningToSeeks_();\n return;\n }\n\n // We will need to delay adding our normal seeking listener until we have\n // seen the first seek event. We will force the first seek event later in\n // this method.\n this.eventManager_.listenOnce(this.video_, 'seeking', () => {\n this.startListeningToSeeks_();\n });\n\n // If the currentTime != 0, it indicates that the user has seeked after\n // calling |Player.load|, meaning that |currentTime| is more meaningful than\n // |startTime|.\n //\n // Seeking to the current time is a work around for Issue 1298 and 4888.\n // If we don't do this, the video may get stuck and not play.\n //\n // TODO: Need further investigation why it happens. Before and after\n // setting the current time, video.readyState is 1, video.paused is true,\n // and video.buffered's TimeRanges length is 0.\n // See: https://github.com/shaka-project/shaka-player/issues/1298\n this.mover_.moveTo(\n (!this.video_.currentTime || this.video_.currentTime == 0) ?\n startTime :\n this.video_.currentTime);\n }\n\n\n /**\n * Add the listener for seek-events. This will call the externally-provided\n * |onSeek| callback whenever the media element seeks.\n *\n * @private\n */\n startListeningToSeeks_() {\n goog.asserts.assert(\n this.video_.readyState > 0,\n 'The media element should be ready before we listen for seeking.');\n\n // Now that any startup seeking is complete, we can trust the video element\n // for currentTime.\n this.started_ = true;\n\n this.eventManager_.listen(this.video_, 'seeking', () => this.onSeek_());\n this.onStarted_(this.video_.currentTime);\n }\n};\n\n/**\n * A class used to move the playhead away from its current time. Sometimes,\n * legacy Edge ignores re-seeks. After changing the current time, check every\n * 100ms, retrying if the change was not accepted.\n *\n * Delay stats over 100 runs of a re-seeking integration test:\n * Edge - 0ms - 2%\n * Edge - 100ms - 40%\n * Edge - 200ms - 32%\n * Edge - 300ms - 24%\n * Edge - 400ms - 2%\n * Chrome - 0ms - 100%\n *\n * Unfortunately, legacy Edge is not receiving updates anymore, but it still\n * must be supported as it is used for web browsers on XBox.\n *\n * @implements {shaka.util.IReleasable}\n * @final\n */\nshaka.media.VideoWrapper.PlayheadMover = class {\n /**\n * @param {!HTMLMediaElement} mediaElement\n * The media element that the mover can manipulate.\n *\n * @param {number} maxAttempts\n * To prevent us from infinitely trying to change the current time, the\n * mover accepts a max attempts value. At most, the mover will check if the\n * video moved |maxAttempts| times. If this is zero of negative, no\n * attempts will be made.\n */\n constructor(mediaElement, maxAttempts) {\n /** @private {HTMLMediaElement} */\n this.mediaElement_ = mediaElement;\n\n /** @private {number} */\n this.maxAttempts_ = maxAttempts;\n\n /** @private {number} */\n this.remainingAttempts_ = 0;\n\n /** @private {number} */\n this.originTime_ = 0;\n\n /** @private {number} */\n this.targetTime_ = 0;\n\n /** @private {shaka.util.Timer} */\n this.timer_ = new shaka.util.Timer(() => this.onTick_());\n }\n\n /** @override */\n release() {\n if (this.timer_) {\n this.timer_.stop();\n this.timer_ = null;\n }\n\n this.mediaElement_ = null;\n }\n\n /**\n * Try forcing the media element to move to |timeInSeconds|. If a previous\n * call to |moveTo| is still in progress, this will override it.\n *\n * @param {number} timeInSeconds\n */\n moveTo(timeInSeconds) {\n this.originTime_ = this.mediaElement_.currentTime;\n this.targetTime_ = timeInSeconds;\n\n this.remainingAttempts_ = this.maxAttempts_;\n\n // Set the time and then start the timer. The timer will check if the set\n // was successful, and retry if not.\n this.mediaElement_.currentTime = timeInSeconds;\n this.timer_.tickEvery(/* seconds= */ 0.1);\n }\n\n /**\n * @private\n */\n onTick_() {\n // Sigh... We ran out of retries...\n if (this.remainingAttempts_ <= 0) {\n shaka.log.warning([\n 'Failed to move playhead from', this.originTime_,\n 'to', this.targetTime_,\n ].join(' '));\n\n this.timer_.stop();\n return;\n }\n\n // Yay! We were successful.\n if (this.mediaElement_.currentTime != this.originTime_ ||\n this.mediaElement_.currentTime === this.targetTime_) {\n this.timer_.stop();\n return;\n }\n\n // Sigh... Try again...\n this.mediaElement_.currentTime = this.targetTime_;\n this.remainingAttempts_--;\n }\n};\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.media.MediaSourcePlayhead');\ngoog.provide('shaka.media.Playhead');\ngoog.provide('shaka.media.SrcEqualsPlayhead');\n\ngoog.require('goog.asserts');\ngoog.require('shaka.log');\ngoog.require('shaka.media.GapJumpingController');\ngoog.require('shaka.media.StallDetector');\ngoog.require('shaka.media.StallDetector.MediaElementImplementation');\ngoog.require('shaka.media.TimeRangesUtils');\ngoog.require('shaka.media.VideoWrapper');\ngoog.require('shaka.util.EventManager');\ngoog.require('shaka.util.IReleasable');\ngoog.require('shaka.util.MediaReadyState');\ngoog.require('shaka.util.Platform');\ngoog.require('shaka.util.Timer');\ngoog.requireType('shaka.media.PresentationTimeline');\n\n\n/**\n * Creates a Playhead, which manages the video's current time.\n *\n * The Playhead provides mechanisms for setting the presentation's start time,\n * restricting seeking to valid time ranges, and stopping playback for startup\n * and re-buffering.\n *\n * @extends {shaka.util.IReleasable}\n * @interface\n */\nshaka.media.Playhead = class {\n /**\n * Called when the Player is ready to begin playback. Anything that depends\n * on setStartTime() should be done here, not in the constructor.\n *\n * @see https://github.com/shaka-project/shaka-player/issues/4244\n */\n ready() {}\n\n /**\n * Set the start time. If the content has already started playback, this will\n * be ignored.\n *\n * @param {number} startTime\n */\n setStartTime(startTime) {}\n\n /**\n * Get the number of playback stalls detected by the StallDetector.\n *\n * @return {number}\n */\n getStallsDetected() {}\n\n /**\n * Get the number of playback gaps jumped by the GapJumpingController.\n *\n * @return {number}\n */\n getGapsJumped() {}\n\n /**\n * Get the current playhead position. The position will be restricted to valid\n * time ranges.\n *\n * @return {number}\n */\n getTime() {}\n\n /**\n * Notify the playhead that the buffered ranges have changed.\n */\n notifyOfBufferingChange() {}\n};\n\n\n/**\n * A playhead implementation that only relies on the media element.\n *\n * @implements {shaka.media.Playhead}\n * @final\n */\nshaka.media.SrcEqualsPlayhead = class {\n /**\n * @param {!HTMLMediaElement} mediaElement\n */\n constructor(mediaElement) {\n /** @private {HTMLMediaElement} */\n this.mediaElement_ = mediaElement;\n /** @private {boolean} */\n this.started_ = false;\n /** @private {?number} */\n this.startTime_ = null;\n\n /** @private {shaka.util.EventManager} */\n this.eventManager_ = new shaka.util.EventManager();\n }\n\n /** @override */\n ready() {\n goog.asserts.assert(\n this.mediaElement_ != null,\n 'Playhead should not be released before calling ready()',\n );\n\n // We listen for the loaded-data-event so that we know when we can\n // interact with |currentTime|.\n const onLoaded = () => {\n if (this.startTime_ == null ||\n (this.startTime_ == 0 && this.mediaElement_.duration != Infinity)) {\n this.started_ = true;\n } else {\n const currentTime = this.mediaElement_.currentTime;\n let newTime = this.startTime_;\n // Using the currentTime allows using a negative number in Live HLS\n if (this.startTime_ < 0) {\n newTime = Math.max(0, currentTime + this.startTime_);\n }\n if (currentTime != newTime) {\n // Startup is complete only when the video element acknowledges the\n // seek.\n this.eventManager_.listenOnce(this.mediaElement_, 'seeking', () => {\n this.started_ = true;\n });\n this.mediaElement_.currentTime = newTime;\n } else {\n this.started_ = true;\n }\n }\n };\n\n shaka.util.MediaReadyState.waitForReadyState(this.mediaElement_,\n HTMLMediaElement.HAVE_CURRENT_DATA,\n this.eventManager_, () => {\n onLoaded();\n });\n }\n\n /** @override */\n release() {\n if (this.eventManager_) {\n this.eventManager_.release();\n this.eventManager_ = null;\n }\n\n this.mediaElement_ = null;\n }\n\n /** @override */\n setStartTime(startTime) {\n // If we have already started playback, ignore updates to the start time.\n // This is just to make things consistent.\n this.startTime_ = this.started_ ? this.startTime_ : startTime;\n }\n\n /** @override */\n getTime() {\n // If we have not started playback yet, return the start time. However once\n // we start playback we assume that we can always return the current time.\n const time = this.started_ ?\n this.mediaElement_.currentTime :\n this.startTime_;\n\n // In the case that we have not started playback, but the start time was\n // never set, we don't know what the start time should be. To ensure we\n // always return a number, we will default back to 0.\n return time || 0;\n }\n\n /** @override */\n getStallsDetected() {\n return 0;\n }\n\n /** @override */\n getGapsJumped() {\n return 0;\n }\n\n /** @override */\n notifyOfBufferingChange() {}\n};\n\n\n/**\n * A playhead implementation that relies on the media element and a manifest.\n * When provided with a manifest, we can provide more accurate control than\n * the SrcEqualsPlayhead.\n *\n * TODO: Clean up and simplify Playhead. There are too many layers of, methods\n * for, and conditions on timestamp adjustment.\n *\n * @implements {shaka.media.Playhead}\n * @final\n */\nshaka.media.MediaSourcePlayhead = class {\n /**\n * @param {!HTMLMediaElement} mediaElement\n * @param {shaka.extern.Manifest} manifest\n * @param {shaka.extern.StreamingConfiguration} config\n * @param {?number} startTime\n * The playhead's initial position in seconds. If null, defaults to the\n * start of the presentation for VOD and the live-edge for live.\n * @param {function()} onSeek\n * Called when the user agent seeks to a time within the presentation\n * timeline.\n * @param {function(!Event)} onEvent\n * Called when an event is raised to be sent to the application.\n */\n constructor(mediaElement, manifest, config, startTime, onSeek, onEvent) {\n /**\n * The seek range must be at least this number of seconds long. If it is\n * smaller than this, change it to be this big so we don't repeatedly seek\n * to keep within a zero-width window.\n *\n * This is 3s long, to account for the weaker hardware on platforms like\n * Chromecast.\n *\n * @private {number}\n */\n this.minSeekRange_ = 3.0;\n\n /** @private {HTMLMediaElement} */\n this.mediaElement_ = mediaElement;\n\n /** @private {shaka.media.PresentationTimeline} */\n this.timeline_ = manifest.presentationTimeline;\n\n /** @private {number} */\n this.minBufferTime_ = manifest.minBufferTime || 0;\n\n /** @private {?shaka.extern.StreamingConfiguration} */\n this.config_ = config;\n\n /** @private {function()} */\n this.onSeek_ = onSeek;\n\n /** @private {?number} */\n this.lastCorrectiveSeek_ = null;\n\n /** @private {shaka.media.StallDetector} */\n this.stallDetector_ =\n this.createStallDetector_(mediaElement, config, onEvent);\n\n /** @private {shaka.media.GapJumpingController} */\n this.gapController_ = new shaka.media.GapJumpingController(\n mediaElement,\n manifest.presentationTimeline,\n config,\n this.stallDetector_,\n onEvent);\n\n /** @private {shaka.media.VideoWrapper} */\n this.videoWrapper_ = new shaka.media.VideoWrapper(\n mediaElement,\n () => this.onSeeking_(),\n (realStartTime) => this.onStarted_(realStartTime),\n () => this.getStartTime_(startTime));\n\n /** @type {shaka.util.Timer} */\n this.checkWindowTimer_ = new shaka.util.Timer(() => {\n this.onPollWindow_();\n });\n }\n\n /** @override */\n ready() {\n this.checkWindowTimer_.tickEvery(/* seconds= */ 0.25);\n }\n\n /** @override */\n release() {\n if (this.videoWrapper_) {\n this.videoWrapper_.release();\n this.videoWrapper_ = null;\n }\n\n if (this.gapController_) {\n this.gapController_.release();\n this.gapController_= null;\n }\n\n if (this.checkWindowTimer_) {\n this.checkWindowTimer_.stop();\n this.checkWindowTimer_ = null;\n }\n\n this.config_ = null;\n this.timeline_ = null;\n this.videoWrapper_ = null;\n this.mediaElement_ = null;\n\n this.onSeek_ = () => {};\n }\n\n /** @override */\n setStartTime(startTime) {\n this.videoWrapper_.setTime(startTime);\n }\n\n /** @override */\n getTime() {\n const time = this.videoWrapper_.getTime();\n\n // Although we restrict the video's currentTime elsewhere, clamp it here to\n // ensure timing issues don't cause us to return a time outside the segment\n // availability window. E.g., the user agent seeks and calls this function\n // before we receive the 'seeking' event.\n //\n // We don't buffer when the livestream video is paused and the playhead time\n // is out of the seek range; thus, we do not clamp the current time when the\n // video is paused.\n // https://github.com/shaka-project/shaka-player/issues/1121\n if (this.mediaElement_.readyState > 0 && !this.mediaElement_.paused) {\n return this.clampTime_(time);\n }\n\n return time;\n }\n\n /** @override */\n getStallsDetected() {\n return this.stallDetector_ ? this.stallDetector_.getStallsDetected() : 0;\n }\n\n /** @override */\n getGapsJumped() {\n return this.gapController_.getGapsJumped();\n }\n\n /**\n * Gets the playhead's initial position in seconds.\n *\n * @param {?number} startTime\n * @return {number}\n * @private\n */\n getStartTime_(startTime) {\n if (startTime == null) {\n if (this.timeline_.getDuration() < Infinity) {\n // If the presentation is VOD, or if the presentation is live but has\n // finished broadcasting, then start from the beginning.\n startTime = this.timeline_.getSeekRangeStart();\n } else {\n // Otherwise, start near the live-edge.\n startTime = this.timeline_.getSeekRangeEnd();\n }\n } else if (startTime < 0) {\n // For live streams, if the startTime is negative, start from a certain\n // offset time from the live edge. If the offset from the live edge is\n // not available, start from the current available segment start point\n // instead, handled by clampTime_().\n startTime = this.timeline_.getSeekRangeEnd() + startTime;\n }\n\n return this.clampSeekToDuration_(this.clampTime_(startTime));\n }\n\n /** @override */\n notifyOfBufferingChange() {\n this.gapController_.onSegmentAppended();\n }\n\n /**\n * Called on a recurring timer to keep the playhead from falling outside the\n * availability window.\n *\n * @private\n */\n onPollWindow_() {\n // Don't catch up to the seek range when we are paused or empty.\n // The definition of \"seeking\" says that we are seeking until the buffered\n // data intersects with the playhead. If we fall outside of the seek range,\n // it doesn't matter if we are in a \"seeking\" state. We can and should go\n // ahead and catch up while seeking.\n if (this.mediaElement_.readyState == 0 || this.mediaElement_.paused) {\n return;\n }\n\n const currentTime = this.videoWrapper_.getTime();\n let seekStart = this.timeline_.getSeekRangeStart();\n const seekEnd = this.timeline_.getSeekRangeEnd();\n\n if (seekEnd - seekStart < this.minSeekRange_) {\n seekStart = seekEnd - this.minSeekRange_;\n }\n\n if (currentTime < seekStart) {\n // The seek range has moved past the playhead. Move ahead to catch up.\n const targetTime = this.reposition_(currentTime);\n shaka.log.info('Jumping forward ' + (targetTime - currentTime) +\n ' seconds to catch up with the seek range.');\n this.mediaElement_.currentTime = targetTime;\n }\n }\n\n /**\n * Called when the video element has started up and is listening for new seeks\n *\n * @param {number} startTime\n * @private\n */\n onStarted_(startTime) {\n this.gapController_.onStarted(startTime);\n }\n\n /**\n * Handles when a seek happens on the video.\n *\n * @private\n */\n onSeeking_() {\n this.gapController_.onSeeking();\n const currentTime = this.videoWrapper_.getTime();\n const targetTime = this.reposition_(currentTime);\n\n const gapLimit = shaka.media.GapJumpingController.BROWSER_GAP_TOLERANCE;\n if (Math.abs(targetTime - currentTime) > gapLimit) {\n let canCorrectiveSeek = false;\n if (shaka.util.Platform.isSeekingSlow()) {\n // You can only seek like this every so often. This is to prevent an\n // infinite loop on systems where changing currentTime takes a\n // significant amount of time (e.g. Chromecast).\n const time = Date.now() / 1000;\n const seekDelay = shaka.util.Platform.isFuchsiaCastDevice() ? 3 : 1;\n if (!this.lastCorrectiveSeek_ ||\n this.lastCorrectiveSeek_ < time - seekDelay) {\n this.lastCorrectiveSeek_ = time;\n canCorrectiveSeek = true;\n }\n } else {\n canCorrectiveSeek = true;\n }\n if (canCorrectiveSeek) {\n this.videoWrapper_.setTime(targetTime);\n return;\n }\n }\n\n shaka.log.v1('Seek to ' + currentTime);\n this.onSeek_();\n }\n\n /**\n * Clamp seek times and playback start times so that we never seek to the\n * presentation duration. Seeking to or starting at duration does not work\n * consistently across browsers.\n *\n * @see https://github.com/shaka-project/shaka-player/issues/979\n * @param {number} time\n * @return {number} The adjusted seek time.\n * @private\n */\n clampSeekToDuration_(time) {\n const duration = this.timeline_.getDuration();\n if (time >= duration) {\n goog.asserts.assert(this.config_.durationBackoff >= 0,\n 'Duration backoff must be non-negative!');\n return duration - this.config_.durationBackoff;\n }\n return time;\n }\n\n /**\n * Computes a new playhead position that's within the presentation timeline.\n *\n * @param {number} currentTime\n * @return {number} The time to reposition the playhead to.\n * @private\n */\n reposition_(currentTime) {\n goog.asserts.assert(\n this.config_,\n 'Cannot reposition playhead when it has beeen destroyed');\n\n /** @type {function(number)} */\n const isBuffered = (playheadTime) => shaka.media.TimeRangesUtils.isBuffered(\n this.mediaElement_.buffered, playheadTime);\n\n const rebufferingGoal = Math.max(\n this.minBufferTime_,\n this.config_.rebufferingGoal);\n\n const safeSeekOffset = this.config_.safeSeekOffset;\n\n let start = this.timeline_.getSeekRangeStart();\n const end = this.timeline_.getSeekRangeEnd();\n const duration = this.timeline_.getDuration();\n\n if (end - start < this.minSeekRange_) {\n start = end - this.minSeekRange_;\n }\n\n // With live content, the beginning of the availability window is moving\n // forward. This means we cannot seek to it since we will \"fall\" outside\n // the window while we buffer. So we define a \"safe\" region that is far\n // enough away. For VOD, |safe == start|.\n const safe = this.timeline_.getSafeSeekRangeStart(rebufferingGoal);\n\n // These are the times to seek to rather than the exact destinations. When\n // we seek, we will get another event (after a slight delay) and these steps\n // will run again. So if we seeked directly to |start|, |start| would move\n // on the next call and we would loop forever.\n const seekStart = this.timeline_.getSafeSeekRangeStart(safeSeekOffset);\n const seekSafe = this.timeline_.getSafeSeekRangeStart(\n rebufferingGoal + safeSeekOffset);\n\n if (currentTime >= duration) {\n shaka.log.v1('Playhead past duration.');\n return this.clampSeekToDuration_(currentTime);\n }\n\n if (currentTime > end) {\n shaka.log.v1('Playhead past end.');\n // We remove the safeSeekEndOffset of the seek end to avoid the player\n // to be block at the edge in a live stream\n return end - this.config_.safeSeekEndOffset;\n }\n\n if (currentTime < start) {\n if (isBuffered(seekStart)) {\n shaka.log.v1('Playhead before start & start is buffered');\n return seekStart;\n } else {\n shaka.log.v1('Playhead before start & start is unbuffered');\n return seekSafe;\n }\n }\n\n if (currentTime >= safe || isBuffered(currentTime)) {\n shaka.log.v1('Playhead in safe region or in buffered region.');\n return currentTime;\n } else {\n shaka.log.v1('Playhead outside safe region & in unbuffered region.');\n return seekSafe;\n }\n }\n\n /**\n * Clamps the given time to the seek range.\n *\n * @param {number} time The time in seconds.\n * @return {number} The clamped time in seconds.\n * @private\n */\n clampTime_(time) {\n const start = this.timeline_.getSeekRangeStart();\n if (time < start) {\n return start;\n }\n\n const end = this.timeline_.getSeekRangeEnd();\n if (time > end) {\n return end;\n }\n\n return time;\n }\n\n /**\n * Create and configure a stall detector using the player's streaming\n * configuration settings. If the player is configured to have no stall\n * detector, this will return |null|.\n *\n * @param {!HTMLMediaElement} mediaElement\n * @param {shaka.extern.StreamingConfiguration} config\n * @param {function(!Event)} onEvent\n * Called when an event is raised to be sent to the application.\n * @return {shaka.media.StallDetector}\n * @private\n */\n createStallDetector_(mediaElement, config, onEvent) {\n if (!config.stallEnabled) {\n return null;\n }\n\n // Cache the values from the config so that changes to the config won't\n // change the initialized behaviour.\n const threshold = config.stallThreshold;\n const skip = config.stallSkip;\n\n // When we see a stall, we will try to \"jump-start\" playback by moving the\n // playhead forward.\n const detector = new shaka.media.StallDetector(\n new shaka.media.StallDetector.MediaElementImplementation(mediaElement),\n threshold, onEvent);\n\n detector.onStall((at, duration) => {\n shaka.log.debug(`Stall detected at ${at} for ${duration} seconds.`);\n\n if (skip) {\n shaka.log.debug(`Seeking forward ${skip} seconds to break stall.`);\n mediaElement.currentTime += skip;\n } else {\n shaka.log.debug('Pausing and unpausing to break stall.');\n mediaElement.pause();\n mediaElement.play();\n }\n });\n\n return detector;\n }\n};\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.media.PlayRateController');\n\ngoog.require('goog.asserts');\ngoog.require('shaka.log');\ngoog.require('shaka.util.IReleasable');\ngoog.require('shaka.util.Timer');\n\n/**\n * The play rate controller controls the playback rate on the media element.\n * This provides some missing functionality (e.g. negative playback rate). If\n * the playback rate on the media element can change outside of the controller,\n * the playback controller will need to be updated to stay in-sync.\n *\n * @implements {shaka.util.IReleasable}\n * @final\n */\nshaka.media.PlayRateController = class {\n /**\n * @param {shaka.media.PlayRateController.Harness} harness\n */\n constructor(harness) {\n /** @private {?shaka.media.PlayRateController.Harness} */\n this.harness_ = harness;\n\n /** @private {boolean} */\n this.isBuffering_ = false;\n\n /** @private {number} */\n this.rate_ = this.harness_.getRate();\n\n /** @private {number} */\n this.pollRate_ = 0.25;\n\n /** @private {shaka.util.Timer} */\n this.timer_ = new shaka.util.Timer(() => {\n this.harness_.movePlayhead(this.rate_ * this.pollRate_);\n });\n }\n\n /** @override */\n release() {\n this.set(this.getDefaultRate());\n if (this.timer_) {\n this.timer_.stop();\n this.timer_ = null;\n }\n\n this.harness_ = null;\n }\n\n /**\n * Sets the buffering flag, which controls the effective playback rate.\n *\n * @param {boolean} isBuffering If true, forces playback rate to 0 internally.\n */\n setBuffering(isBuffering) {\n this.isBuffering_ = isBuffering;\n this.apply_();\n }\n\n /**\n * Set the playback rate. This rate will only be used as provided when the\n * player is not buffering. You should never set the rate to 0.\n *\n * @param {number} rate\n */\n set(rate) {\n goog.asserts.assert(rate != 0, 'Should never set rate of 0 explicitly!');\n this.rate_ = rate;\n this.apply_();\n }\n\n /**\n * Get the real rate of the playback. This means that if we are using trick\n * play, this will report the trick play rate. If playback is occurring as\n * normal, this will report 1.\n *\n * @return {number}\n */\n getRealRate() {\n return this.rate_;\n }\n\n /**\n * Get the default play rate of the playback.\n *\n * @return {number}\n */\n getDefaultRate() {\n return this.harness_.getDefaultRate();\n }\n\n /**\n * Reapply the effects of |this.rate_| and |this.active_| to the media\n * element. This will only update the rate via the harness if the desired rate\n * has changed.\n *\n * @private\n */\n apply_() {\n // Always stop the timer. We may not start it again.\n this.timer_.stop();\n\n /** @type {number} */\n const rate = this.calculateCurrentRate_();\n\n shaka.log.v1('Changing effective playback rate to', rate);\n\n if (rate >= 0) {\n try {\n this.applyRate_(rate);\n return;\n } catch (e) {\n // Fall through to the next clause.\n //\n // Fast forward is accomplished through setting video.playbackRate.\n // If the play rate value is not supported by the browser (too big),\n // the browsers will throw.\n // Use this as a cue to fall back to fast forward through repeated\n // seeking, which is what we do for rewind as well.\n }\n }\n\n // When moving backwards or forwards in large steps,\n // set the playback rate to 0 so that we can manually\n // seek backwards with out fighting the playhead.\n this.timer_.tickEvery(this.pollRate_);\n this.applyRate_(0);\n }\n\n /**\n * Calculate the rate that the controller wants the media element to have\n * based on the current state of the controller.\n *\n * @return {number}\n * @private\n */\n calculateCurrentRate_() {\n return this.isBuffering_ ? 0 : this.rate_;\n }\n\n /**\n * If the new rate is different than the media element's playback rate, this\n * will change the playback rate. If the rate does not need to change, it will\n * not be set. This will avoid unnecessary ratechange events.\n *\n * @param {number} newRate\n * @return {boolean}\n * @private\n */\n applyRate_(newRate) {\n const oldRate = this.harness_.getRate();\n\n if (oldRate != newRate) {\n this.harness_.setRate(newRate);\n }\n\n return oldRate != newRate;\n }\n};\n\n\n/**\n * @typedef {{\n * getRate: function():number,\n * getDefaultRate: function():number,\n * setRate: function(number),\n * movePlayhead: function(number)\n * }}\n *\n * @description\n * A layer of abstraction between the controller and what it is controlling.\n * In tests this will be implemented with spies. In production this will be\n * implemented using a media element.\n *\n * @property {function():number} getRate\n * Get the current playback rate being seen by the user.\n *\n * @property {function():number} getDefaultRate\n * Get the default playback rate that the user should see.\n *\n * @property {function(number)} setRate\n * Set the playback rate that the user should see.\n *\n * @property {function(number)} movePlayhead\n * Move the playhead N seconds. If N is positive, the playhead will move\n * forward abs(N) seconds. If N is negative, the playhead will move backwards\n * abs(N) seconds.\n */\nshaka.media.PlayRateController.Harness;\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.media.IPlayheadObserver');\ngoog.provide('shaka.media.PlayheadObserverManager');\n\ngoog.require('shaka.util.IReleasable');\ngoog.require('shaka.util.Timer');\n\n\n/**\n * A playhead observer is a system that watches for meaningful changes in state\n * that are dependent on playhead information. The observer is responsible for\n * managing its own listeners.\n *\n * @extends {shaka.util.IReleasable}\n * @interface\n */\nshaka.media.IPlayheadObserver = class {\n /**\n * Check again (using an update playhead summary) if an event should be fired.\n * If an event should be fired, fire it.\n *\n * @param {number} positionInSeconds\n * @param {boolean} wasSeeking\n */\n poll(positionInSeconds, wasSeeking) {}\n};\n\n\n/**\n * The playhead observer manager is responsible for owning playhead observer\n * instances and polling them when needed. Destroying the manager will destroy\n * all observers managed by the manager.\n *\n * @implements {shaka.util.IReleasable}\n * @final\n */\nshaka.media.PlayheadObserverManager = class {\n /**\n * @param {!HTMLMediaElement} mediaElement\n */\n constructor(mediaElement) {\n /** @private {HTMLMediaElement} */\n this.mediaElement_ = mediaElement;\n\n /**\n * The set of all observers that this manager is responsible for updating.\n * We are using a set to ensure that we don't double update an observer if\n * it is accidentally added twice.\n *\n * @private {!Set.}\n */\n this.observers_ = new Set();\n\n /**\n * To fire events semi-accurately, poll the observers 4 times a second. This\n * should be frequent enough to trigger an event close enough to its actual\n * occurrence without the user noticing a delay.\n *\n * @private {shaka.util.Timer}\n */\n this.pollingLoop_ = new shaka.util.Timer(() => {\n this.pollAllObservers_(/* seeking= */ false);\n }).tickEvery(/* seconds= */ 0.25);\n }\n\n /** @override */\n release() {\n // We need to stop the loop or else we may try to use a released resource.\n this.pollingLoop_.stop();\n\n for (const observer of this.observers_) {\n observer.release();\n }\n\n this.observers_.clear();\n }\n\n /**\n * Have the playhead observer manager manage a new observer. This will ensure\n * that observers are only tracked once within the manager. After this call,\n * the manager will be responsible for the life cycle of |observer|.\n *\n * @param {!shaka.media.IPlayheadObserver} observer\n */\n manage(observer) {\n this.observers_.add(observer);\n }\n\n /**\n * Notify all the observers that we just seeked.\n */\n notifyOfSeek() {\n this.pollAllObservers_(/* seeking= */ true);\n }\n\n /**\n * @param {boolean} seeking\n * @private\n */\n pollAllObservers_(seeking) {\n for (const observer of this.observers_) {\n observer.poll(\n this.mediaElement_.currentTime,\n seeking);\n }\n }\n};\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.util.StateHistory');\n\ngoog.require('goog.asserts');\ngoog.require('shaka.log');\n\n\n/**\n * This class is used to track the time spent in arbitrary states. When told of\n * a state, it will assume that state was active until a new state is provided.\n * When provided with identical states back-to-back, the existing entry will be\n * updated.\n *\n * @final\n */\nshaka.util.StateHistory = class {\n /** */\n constructor() {\n /**\n * The state that we think is still the current change. It is \"open\" for\n * updating.\n *\n * @private {?shaka.extern.StateChange}\n */\n this.open_ = null;\n\n /**\n * The stats that are \"closed\" for updating. The \"open\" state becomes closed\n * once we move to a new state.\n *\n * @private {!Array.}\n */\n this.closed_ = [];\n }\n\n /**\n * @param {string} state\n * @return {boolean} True if this changed the state\n */\n update(state) {\n // |open_| will only be |null| when we first call |update|.\n if (this.open_ == null) {\n this.start_(state);\n return true;\n } else {\n return this.update_(state);\n }\n }\n\n /**\n * Go through all entries in the history and count how much time was spend in\n * the given state.\n *\n * @param {string} state\n * @return {number}\n */\n getTimeSpentIn(state) {\n let sum = 0;\n\n if (this.open_ && this.open_.state == state) {\n sum += this.open_.duration;\n }\n\n for (const entry of this.closed_) {\n sum += entry.state == state ? entry.duration : 0;\n }\n\n return sum;\n }\n\n /**\n * Get a copy of each state change entry in the history. A copy of each entry\n * is created to break the reference to the internal data.\n *\n * @return {!Array.}\n */\n getCopy() {\n const clone = (entry) => {\n return {\n timestamp: entry.timestamp,\n state: entry.state,\n duration: entry.duration,\n };\n };\n\n const copy = [];\n for (const entry of this.closed_) {\n copy.push(clone(entry));\n }\n if (this.open_) {\n copy.push(clone(this.open_));\n }\n\n return copy;\n }\n\n /**\n * @param {string} state\n * @private\n */\n start_(state) {\n goog.asserts.assert(\n this.open_ == null,\n 'There must be no open entry in order when we start');\n shaka.log.v1('Changing Player state to', state);\n\n this.open_ = {\n timestamp: this.getNowInSeconds_(),\n state: state,\n duration: 0,\n };\n }\n\n /**\n * @param {string} state\n * @return {boolean} True if this changed the state\n * @private\n */\n update_(state) {\n goog.asserts.assert(\n this.open_,\n 'There must be an open entry in order to update it');\n\n const currentTimeSeconds = this.getNowInSeconds_();\n\n // Always update the duration so that it can always be as accurate as\n // possible.\n this.open_.duration = currentTimeSeconds - this.open_.timestamp;\n\n // If the state has not changed, there is no need to add a new entry.\n if (this.open_.state == state) {\n return false;\n }\n\n // We have changed states, so \"close\" the open state.\n shaka.log.v1('Changing Player state to', state);\n this.closed_.push(this.open_);\n this.open_ = {\n timestamp: currentTimeSeconds,\n state: state,\n duration: 0,\n };\n return true;\n }\n\n /**\n * Get the system time in seconds.\n *\n * @return {number}\n * @private\n */\n getNowInSeconds_() {\n return Date.now() / 1000;\n }\n};\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.util.SwitchHistory');\n\n\n/**\n * This class is used to track changes in variant and text selections. This\n * class will make sure that redundant switches are not recorded in the history.\n *\n * @final\n */\nshaka.util.SwitchHistory = class {\n /** */\n constructor() {\n /** @private {?shaka.extern.Variant} */\n this.currentVariant_ = null;\n\n /** @private {?shaka.extern.Stream} */\n this.currentText_ = null;\n\n /** @private {!Array.} */\n this.history_ = [];\n }\n\n /**\n * Update the history to show that we are currently playing |newVariant|. If\n * we are already playing |newVariant|, this update will be ignored.\n *\n * @param {shaka.extern.Variant} newVariant\n * @param {boolean} fromAdaptation\n */\n updateCurrentVariant(newVariant, fromAdaptation) {\n if (this.currentVariant_ == newVariant) {\n return;\n }\n\n this.currentVariant_ = newVariant;\n this.history_.push({\n timestamp: this.getNowInSeconds_(),\n id: newVariant.id,\n type: 'variant',\n fromAdaptation: fromAdaptation,\n bandwidth: newVariant.bandwidth,\n });\n }\n\n /**\n * Update the history to show that we are currently playing |newText|. If we\n * are already playing |newText|, this update will be ignored.\n *\n * @param {shaka.extern.Stream} newText\n * @param {boolean} fromAdaptation\n */\n updateCurrentText(newText, fromAdaptation) {\n if (this.currentText_ == newText) {\n return;\n }\n\n this.currentText_ = newText;\n this.history_.push({\n timestamp: this.getNowInSeconds_(),\n id: newText.id,\n type: 'text',\n fromAdaptation: fromAdaptation,\n bandwidth: null,\n });\n }\n\n /**\n * Get a copy of the switch history. This will make sure to expose no internal\n * references.\n *\n * @return {!Array.}\n */\n getCopy() {\n const copy = [];\n\n for (const entry of this.history_) {\n copy.push(this.clone_(entry));\n }\n\n return copy;\n }\n\n /**\n * Get the system time in seconds.\n *\n * @return {number}\n * @private\n */\n getNowInSeconds_() {\n return Date.now() / 1000;\n }\n\n /**\n * @param {shaka.extern.TrackChoice} entry\n * @return {shaka.extern.TrackChoice}\n * @private\n */\n clone_(entry) {\n return {\n timestamp: entry.timestamp,\n id: entry.id,\n type: entry.type,\n fromAdaptation: entry.fromAdaptation,\n bandwidth: entry.bandwidth,\n };\n }\n};\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.util.Stats');\n\ngoog.require('shaka.util.StateHistory');\ngoog.require('shaka.util.SwitchHistory');\n\n\n/**\n * This class tracks all the various components (some optional) that are used to\n * populate |shaka.extern.Stats| which is passed to the app.\n *\n * @final\n */\nshaka.util.Stats = class {\n /** */\n constructor() {\n /** @private {number} */\n this.width_ = NaN;\n /** @private {number} */\n this.height_ = NaN;\n\n /** @private {number} */\n this.totalDroppedFrames_ = NaN;\n /** @private {number} */\n this.totalDecodedFrames_ = NaN;\n /** @private {number} */\n this.totalCorruptedFrames_ = NaN;\n\n /** @private {number} */\n this.totalStallsDetected_ = NaN;\n /** @private {number} */\n this.totalGapsJumped_ = NaN;\n\n /** @private {number} */\n this.completionPercent_ = NaN;\n\n /** @private {number} */\n this.loadLatencySeconds_ = NaN;\n\n /** @private {number} */\n this.manifestTimeSeconds_ = NaN;\n\n /** @private {number} */\n this.drmTimeSeconds_ = NaN;\n\n /** @private {number} */\n this.licenseTimeSeconds_ = NaN;\n\n /** @private {number} */\n this.liveLatencySeconds_ = NaN;\n\n /** @private {number} */\n this.maxSegmentDurationSeconds_ = NaN;\n\n /** @private {number} */\n this.currentStreamBandwidth_ = NaN;\n /** @private {number} */\n this.bandwidthEstimate_ = NaN;\n\n /** @private {number} */\n this.manifestSizeBytes_ = NaN;\n /** @private {number} */\n this.bytesDownloaded_ = NaN;\n\n /** @private {number} */\n this.nonFatalErrorCount_ = 0;\n /** @private {number} */\n this.manifestPeriodCount_ = NaN;\n /** @private {number} */\n this.manifestGapCount_ = NaN;\n\n /** @private {!shaka.util.StateHistory} */\n this.stateHistory_ = new shaka.util.StateHistory();\n\n /** @private {!shaka.util.SwitchHistory} */\n this.switchHistory_ = new shaka.util.SwitchHistory();\n }\n\n /**\n * Update the ratio of dropped frames to total frames. This will replace the\n * previous values.\n *\n * @param {number} dropped\n * @param {number} decoded\n */\n setDroppedFrames(dropped, decoded) {\n this.totalDroppedFrames_ = dropped;\n this.totalDecodedFrames_ = decoded;\n }\n\n /**\n * Update corrupted frames. This will replace the previous values.\n *\n * @param {number} corrupted\n */\n setCorruptedFrames(corrupted) {\n this.totalCorruptedFrames_ = corrupted;\n }\n\n /**\n * Update number of stalls detected. This will replace the previous value.\n *\n * @param {number} stallsDetected\n */\n setStallsDetected(stallsDetected) {\n this.totalStallsDetected_ = stallsDetected;\n }\n\n /**\n * Update number of playback gaps jumped over. This will replace the previous\n * value.\n *\n * @param {number} gapsJumped\n */\n setGapsJumped(gapsJumped) {\n this.totalGapsJumped_ = gapsJumped;\n }\n\n /**\n * Set the width and height of the video we are currently playing.\n *\n * @param {number} width\n * @param {number} height\n */\n setResolution(width, height) {\n this.width_ = width;\n this.height_ = height;\n }\n\n /**\n * Record the time it took between the user signalling \"I want to play this\"\n * to \"I am now seeing this\".\n *\n * @param {number} seconds\n */\n setLoadLatency(seconds) {\n this.loadLatencySeconds_ = seconds;\n }\n\n /**\n * Record the time it took to download and parse the manifest.\n *\n * @param {number} seconds\n */\n setManifestTime(seconds) {\n this.manifestTimeSeconds_ = seconds;\n }\n\n /**\n * Record the current completion percent. This is the \"high water mark\", so it\n * will store the highest provided completion percent.\n *\n * @param {number} percent\n */\n setCompletionPercent(percent) {\n if (isNaN(this.completionPercent_)) {\n this.completionPercent_ = percent;\n } else {\n this.completionPercent_ = Math.max(this.completionPercent_, percent);\n }\n }\n\n /**\n * Record the time it took to download the first drm key.\n *\n * @param {number} seconds\n */\n setDrmTime(seconds) {\n this.drmTimeSeconds_ = seconds;\n }\n\n /**\n * Record the cumulative time spent on license requests during this session.\n *\n * @param {number} seconds\n */\n setLicenseTime(seconds) {\n this.licenseTimeSeconds_ = seconds;\n }\n\n /**\n * Record the latency in live streams.\n *\n * @param {number} seconds\n */\n setLiveLatency(seconds) {\n this.liveLatencySeconds_ = seconds;\n }\n\n /**\n * Record the presentation's max segment duration.\n *\n * @param {number} seconds\n */\n setMaxSegmentDuration(seconds) {\n this.maxSegmentDurationSeconds_ = seconds;\n }\n\n /**\n * @param {number} bandwidth\n */\n setCurrentStreamBandwidth(bandwidth) {\n this.currentStreamBandwidth_ = bandwidth;\n }\n\n /**\n * @param {number} bandwidth\n */\n setBandwidthEstimate(bandwidth) {\n this.bandwidthEstimate_ = bandwidth;\n }\n\n /**\n * @param {number} size\n */\n setManifestSize(size) {\n this.manifestSizeBytes_ = size;\n }\n\n /**\n * @param {number} bytesDownloaded\n */\n addBytesDownloaded(bytesDownloaded) {\n if (isNaN(this.bytesDownloaded_)) {\n this.bytesDownloaded_ = bytesDownloaded;\n } else {\n this.bytesDownloaded_ += bytesDownloaded;\n }\n }\n\n /** */\n addNonFatalError() {\n this.nonFatalErrorCount_++;\n }\n\n /**\n * @param {number} count\n */\n setManifestPeriodCount(count) {\n this.manifestPeriodCount_ = count;\n }\n\n /**\n * @param {number} count\n */\n setManifestGapCount(count) {\n this.manifestGapCount_ = count;\n }\n\n /**\n * @return {!shaka.util.StateHistory}\n */\n getStateHistory() {\n return this.stateHistory_;\n }\n\n /**\n * @return {!shaka.util.SwitchHistory}\n */\n getSwitchHistory() {\n return this.switchHistory_;\n }\n\n /**\n * Create a stats blob that we can pass up to the app. This blob will not\n * reference any internal data.\n *\n * @return {shaka.extern.Stats}\n */\n getBlob() {\n return {\n width: this.width_,\n height: this.height_,\n streamBandwidth: this.currentStreamBandwidth_,\n decodedFrames: this.totalDecodedFrames_,\n droppedFrames: this.totalDroppedFrames_,\n corruptedFrames: this.totalCorruptedFrames_,\n stallsDetected: this.totalStallsDetected_,\n gapsJumped: this.totalGapsJumped_,\n estimatedBandwidth: this.bandwidthEstimate_,\n completionPercent: this.completionPercent_,\n loadLatency: this.loadLatencySeconds_,\n manifestTimeSeconds: this.manifestTimeSeconds_,\n drmTimeSeconds: this.drmTimeSeconds_,\n playTime: this.stateHistory_.getTimeSpentIn('playing'),\n pauseTime: this.stateHistory_.getTimeSpentIn('paused'),\n bufferingTime: this.stateHistory_.getTimeSpentIn('buffering'),\n licenseTime: this.licenseTimeSeconds_,\n liveLatency: this.liveLatencySeconds_,\n maxSegmentDuration: this.maxSegmentDurationSeconds_,\n manifestSizeBytes: this.manifestSizeBytes_,\n bytesDownloaded: this.bytesDownloaded_,\n nonFatalErrorCount: this.nonFatalErrorCount_,\n manifestPeriodCount: this.manifestPeriodCount_,\n manifestGapCount: this.manifestGapCount_,\n stateHistory: this.stateHistory_.getCopy(),\n switchHistory: this.switchHistory_.getCopy(),\n };\n }\n\n /**\n * Create an empty stats blob. This resembles the stats when we are not\n * playing any content.\n *\n * @return {shaka.extern.Stats}\n */\n static getEmptyBlob() {\n return {\n width: NaN,\n height: NaN,\n streamBandwidth: NaN,\n decodedFrames: NaN,\n droppedFrames: NaN,\n corruptedFrames: NaN,\n stallsDetected: NaN,\n gapsJumped: NaN,\n estimatedBandwidth: NaN,\n completionPercent: NaN,\n loadLatency: NaN,\n manifestTimeSeconds: NaN,\n drmTimeSeconds: NaN,\n playTime: NaN,\n pauseTime: NaN,\n bufferingTime: NaN,\n licenseTime: NaN,\n liveLatency: NaN,\n maxSegmentDuration: NaN,\n manifestSizeBytes: NaN,\n bytesDownloaded: NaN,\n nonFatalErrorCount: NaN,\n manifestPeriodCount: NaN,\n manifestGapCount: NaN,\n switchHistory: [],\n stateHistory: [],\n };\n }\n};\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.media.SegmentPrefetch');\n\ngoog.require('goog.asserts');\ngoog.require('shaka.log');\ngoog.require('shaka.media.InitSegmentReference');\ngoog.require('shaka.media.SegmentIterator');\ngoog.require('shaka.media.SegmentReference');\ngoog.require('shaka.net.NetworkingEngine');\ngoog.require('shaka.util.Error');\ngoog.require('shaka.util.Uint8ArrayUtils');\n\n\n/**\n * @summary\n * This class manages segment prefetch operations.\n * Called by StreamingEngine to prefetch next N segments\n * ahead of playhead, to reduce the chances of rebuffering.\n */\nshaka.media.SegmentPrefetch = class {\n /**\n * @param {number} prefetchLimit\n * @param {shaka.extern.Stream} stream\n * @param {shaka.media.SegmentPrefetch.FetchDispatcher} fetchDispatcher\n * @param {boolean} reverse\n */\n constructor(prefetchLimit, stream, fetchDispatcher, reverse) {\n /** @private {number} */\n this.prefetchLimit_ = prefetchLimit;\n\n /** @private {shaka.extern.Stream} */\n this.stream_ = stream;\n\n /** @private {shaka.media.SegmentPrefetch.FetchDispatcher} */\n this.fetchDispatcher_ = fetchDispatcher;\n\n /**\n * @private {!Map.<\n * !(shaka.media.SegmentReference),\n * !shaka.media.SegmentPrefetchOperation>}\n */\n this.segmentPrefetchMap_ = new Map();\n\n /**\n * @private {!Map.<\n * !(shaka.media.InitSegmentReference),\n * !shaka.media.SegmentPrefetchOperation>}\n */\n this.initSegmentPrefetchMap_ = new Map();\n\n /** @private {?shaka.media.SegmentIterator} */\n this.iterator_ = null;\n\n /** @private {boolean} */\n this.reverse_ = reverse;\n }\n\n /**\n * @param {shaka.media.SegmentPrefetch.FetchDispatcher} fetchDispatcher\n */\n replaceFetchDispatcher(fetchDispatcher) {\n this.fetchDispatcher_ = fetchDispatcher;\n for (const operation of this.segmentPrefetchMap_.values()) {\n operation.replaceFetchDispatcher(fetchDispatcher);\n }\n }\n\n /**\n * Fetch next segments ahead of current time.\n *\n * @param {number} currTime\n * @param {boolean=} skipFirst\n * @return {!Promise}\n * @public\n */\n prefetchSegmentsByTime(currTime, skipFirst = false) {\n goog.asserts.assert(this.prefetchLimit_ > 0,\n 'SegmentPrefetch can not be used when prefetchLimit <= 0.');\n\n const logPrefix = shaka.media.SegmentPrefetch.logPrefix_(this.stream_);\n if (!this.stream_.segmentIndex) {\n shaka.log.debug(logPrefix, 'missing segmentIndex');\n return Promise.resolve();\n }\n if (!this.iterator_) {\n this.iterator_ = this.stream_.segmentIndex.getIteratorForTime(\n currTime, /* allowNonIndepedent= */ true, this.reverse_);\n }\n if (!this.iterator_) {\n shaka.log.debug(logPrefix, 'missing iterator');\n return Promise.resolve();\n }\n if (skipFirst) {\n this.iterator_.next();\n }\n const promises = [];\n while (this.segmentPrefetchMap_.size < this.prefetchLimit_) {\n const reference = this.iterator_.next().value;\n if (!reference) {\n break;\n }\n // By default doesn't prefech preload partial segments when using\n // byterange\n let prefetchAllowed = true;\n if (reference.isPreload() && reference.endByte != null) {\n prefetchAllowed = false;\n }\n if (reference.getStatus() ==\n shaka.media.SegmentReference.Status.MISSING) {\n prefetchAllowed = false;\n }\n if (reference.getSegmentData()) {\n prefetchAllowed = false;\n }\n if (prefetchAllowed && reference.initSegmentReference) {\n promises.push(this.prefetchInitSegment(\n reference.initSegmentReference));\n }\n if (prefetchAllowed && !this.segmentPrefetchMap_.has(reference)) {\n const segmentPrefetchOperation =\n new shaka.media.SegmentPrefetchOperation(this.fetchDispatcher_);\n promises.push(segmentPrefetchOperation.dispatchFetch(\n reference, this.stream_));\n this.segmentPrefetchMap_.set(reference, segmentPrefetchOperation);\n }\n }\n this.clearInitSegments_();\n return Promise.all(promises);\n }\n\n /**\n * Fetch init segment.\n *\n * @param {!shaka.media.InitSegmentReference} initSegmentReference\n * @return {!Promise}\n */\n prefetchInitSegment(initSegmentReference) {\n goog.asserts.assert(this.prefetchLimit_ > 0,\n 'SegmentPrefetch can not be used when prefetchLimit <= 0.');\n\n const logPrefix = shaka.media.SegmentPrefetch.logPrefix_(this.stream_);\n if (!this.stream_.segmentIndex) {\n shaka.log.debug(logPrefix, 'missing segmentIndex');\n return Promise.resolve();\n }\n\n if (initSegmentReference.getSegmentData()) {\n return Promise.resolve();\n }\n\n // init segments are ignored from the prefetch limit\n const initSegments = Array.from(this.initSegmentPrefetchMap_.keys());\n const someReference = initSegments.some((reference) => {\n return shaka.media.InitSegmentReference.equal(\n reference, initSegmentReference);\n });\n if (someReference) {\n return Promise.resolve();\n }\n const segmentPrefetchOperation = new shaka.media.SegmentPrefetchOperation(\n this.fetchDispatcher_);\n const promise = segmentPrefetchOperation.dispatchFetch(\n initSegmentReference, this.stream_);\n this.initSegmentPrefetchMap_.set(\n initSegmentReference, segmentPrefetchOperation);\n return promise;\n }\n\n /**\n * Get the result of prefetched segment if already exists.\n * @param {!(shaka.media.SegmentReference|shaka.media.InitSegmentReference)}\n * reference\n * @param {?function(BufferSource):!Promise=} streamDataCallback\n * @return {?shaka.net.NetworkingEngine.PendingRequest} op\n * @public\n */\n getPrefetchedSegment(reference, streamDataCallback) {\n goog.asserts.assert(this.prefetchLimit_ > 0,\n 'SegmentPrefetch can not be used when prefetchLimit <= 0.');\n\n const logPrefix = shaka.media.SegmentPrefetch.logPrefix_(this.stream_);\n\n let prefetchMap = this.segmentPrefetchMap_;\n if (reference instanceof shaka.media.InitSegmentReference) {\n prefetchMap = this.initSegmentPrefetchMap_;\n }\n\n if (prefetchMap.has(reference)) {\n const segmentPrefetchOperation = prefetchMap.get(reference);\n if (streamDataCallback) {\n segmentPrefetchOperation.setStreamDataCallback(streamDataCallback);\n }\n if (reference instanceof shaka.media.SegmentReference) {\n shaka.log.debug(\n logPrefix,\n 'reused prefetched segment at time:', reference.startTime,\n 'mapSize', prefetchMap.size);\n } else {\n shaka.log.debug(\n logPrefix,\n 'reused prefetched init segment at time, mapSize',\n prefetchMap.size);\n }\n return segmentPrefetchOperation.getOperation();\n } else {\n if (reference instanceof shaka.media.SegmentReference) {\n shaka.log.debug(\n logPrefix,\n 'missed segment at time:', reference.startTime,\n 'mapSize', prefetchMap.size);\n } else {\n shaka.log.debug(\n logPrefix,\n 'missed init segment at time, mapSize',\n prefetchMap.size);\n }\n return null;\n }\n }\n\n /**\n * Clear All Helper\n * @private\n */\n clearMap_(map) {\n for (const reference of map.keys()) {\n if (reference) {\n this.abortPrefetchedSegment_(reference);\n }\n }\n }\n\n /** */\n resetPosition() {\n this.iterator_ = null;\n }\n\n /**\n * Clear all segment data.\n * @public\n */\n clearAll() {\n this.clearMap_(this.segmentPrefetchMap_);\n this.clearMap_(this.initSegmentPrefetchMap_);\n this.resetPosition();\n const logPrefix = shaka.media.SegmentPrefetch.logPrefix_(this.stream_);\n shaka.log.debug(logPrefix, 'cleared all');\n }\n\n /**\n * Remove a reference of prefetched segment if already exists.\n * @param {!shaka.media.SegmentReference} reference\n * @public\n */\n removeReference(reference) {\n this.abortPrefetchedSegment_(reference);\n }\n\n /**\n * @param {number} time\n * @param {boolean=} clearInitSegments\n */\n evict(time, clearInitSegments = false) {\n for (const ref of this.segmentPrefetchMap_.keys()) {\n if (time > ref.endTime) {\n this.abortPrefetchedSegment_(ref);\n }\n }\n if (clearInitSegments) {\n this.clearInitSegments_();\n }\n }\n\n /**\n * @param {boolean} reverse\n */\n setReverse(reverse) {\n this.reverse_ = reverse;\n if (this.iterator_) {\n this.iterator_.setReverse(reverse);\n }\n }\n\n /**\n * Remove all init segments that don't have associated segments in\n * the segment prefetch map.\n * By default, with delete on get, the init segments should get removed as\n * they are used. With deleteOnGet set to false, we need to clear them\n * every so often once the segments that are associated with each init segment\n * is no longer prefetched.\n * @private\n */\n clearInitSegments_() {\n const segmentReferences = Array.from(this.segmentPrefetchMap_.keys());\n for (const initSegmentReference of this.initSegmentPrefetchMap_.keys()) {\n // if no segment references this init segment, we should remove it.\n const someReference = segmentReferences.some((segmentReference) => {\n return shaka.media.InitSegmentReference.equal(\n segmentReference.initSegmentReference, initSegmentReference);\n });\n if (!someReference) {\n this.abortPrefetchedSegment_(initSegmentReference);\n }\n }\n }\n\n /**\n * Reset the prefetchLimit and clear all internal states.\n * Called by StreamingEngine when configure() was called.\n * @param {number} newPrefetchLimit\n * @public\n */\n resetLimit(newPrefetchLimit) {\n goog.asserts.assert(newPrefetchLimit >= 0,\n 'The new prefetch limit must be >= 0.');\n\n const logPrefix = shaka.media.SegmentPrefetch.logPrefix_(this.stream_);\n shaka.log.debug(logPrefix, 'resetting prefetch limit to', newPrefetchLimit);\n this.prefetchLimit_ = newPrefetchLimit;\n const keyArr = Array.from(this.segmentPrefetchMap_.keys());\n while (keyArr.length > newPrefetchLimit) {\n const reference = keyArr.pop();\n if (reference) {\n this.abortPrefetchedSegment_(reference);\n }\n }\n this.clearInitSegments_();\n }\n\n /**\n * Called by Streaming Engine when switching variant.\n * @param {shaka.extern.Stream} stream\n * @public\n */\n switchStream(stream) {\n if (stream && stream !== this.stream_) {\n this.clearAll();\n this.stream_ = stream;\n }\n }\n\n /**\n * Get the current stream.\n * @public\n * @return {shaka.extern.Stream}\n */\n getStream() {\n return this.stream_;\n }\n\n /**\n * Remove a segment from prefetch map and abort it.\n * @param {!(shaka.media.SegmentReference|shaka.media.InitSegmentReference)}\n * reference\n * @private\n */\n abortPrefetchedSegment_(reference) {\n const logPrefix = shaka.media.SegmentPrefetch.logPrefix_(this.stream_);\n\n let prefetchMap = this.segmentPrefetchMap_;\n if (reference instanceof shaka.media.InitSegmentReference) {\n prefetchMap = this.initSegmentPrefetchMap_;\n }\n\n const segmentPrefetchOperation = prefetchMap.get(reference);\n prefetchMap.delete(reference);\n\n if (segmentPrefetchOperation) {\n segmentPrefetchOperation.abort();\n if (reference instanceof shaka.media.SegmentReference) {\n shaka.log.debug(\n logPrefix,\n 'pop and abort prefetched segment at time:', reference.startTime);\n } else {\n shaka.log.debug(logPrefix, 'pop and abort prefetched init segment');\n }\n }\n }\n\n /**\n * The prefix of the logs that are created in this class.\n * @return {string}\n * @private\n */\n static logPrefix_(stream) {\n return 'SegmentPrefetch(' + stream.type + ':' + stream.id + ')';\n }\n};\n\n/**\n * @summary\n * This class manages a segment prefetch operation.\n */\nshaka.media.SegmentPrefetchOperation = class {\n /**\n * @param {shaka.media.SegmentPrefetch.FetchDispatcher} fetchDispatcher\n */\n constructor(fetchDispatcher) {\n /** @private {shaka.media.SegmentPrefetch.FetchDispatcher} */\n this.fetchDispatcher_ = fetchDispatcher;\n\n /** @private {?function(BufferSource):!Promise} */\n this.streamDataCallback_ = null;\n\n /** @private {?shaka.net.NetworkingEngine.PendingRequest} */\n this.operation_ = null;\n }\n\n /**\n * @param {shaka.media.SegmentPrefetch.FetchDispatcher} fetchDispatcher\n */\n replaceFetchDispatcher(fetchDispatcher) {\n this.fetchDispatcher_ = fetchDispatcher;\n }\n\n /**\n * Fetch a segments\n *\n * @param {!(shaka.media.SegmentReference|shaka.media.InitSegmentReference)}\n * reference\n * @param {!shaka.extern.Stream} stream\n * @return {!Promise}\n * @public\n */\n dispatchFetch(reference, stream) {\n // We need to store the data, because streamDataCallback_ might not be\n // available when you start getting the first data.\n let buffered = new Uint8Array(0);\n this.operation_ = this.fetchDispatcher_(\n reference, stream, async (data) => {\n if (buffered.byteLength > 0) {\n buffered = shaka.util.Uint8ArrayUtils.concat(buffered, data);\n } else {\n buffered = data;\n }\n if (this.streamDataCallback_) {\n await this.streamDataCallback_(buffered);\n buffered = new Uint8Array(0);\n }\n });\n return this.operation_.promise.catch((e) => {\n // Ignore OPERATION_ABORTED errors.\n if (e instanceof shaka.util.Error &&\n e.code == shaka.util.Error.Code.OPERATION_ABORTED) {\n return Promise.resolve();\n }\n // Continue to surface other errors.\n return Promise.reject(e);\n });\n }\n\n /**\n * Get the operation of prefetched segment if already exists.\n *\n * @return {?shaka.net.NetworkingEngine.PendingRequest} op\n * @public\n */\n getOperation() {\n return this.operation_;\n }\n\n /**\n * @param {?function(BufferSource):!Promise} streamDataCallback\n * @public\n */\n setStreamDataCallback(streamDataCallback) {\n this.streamDataCallback_ = streamDataCallback;\n }\n\n /**\n * Abort the current operation if exists.\n */\n abort() {\n if (this.operation_) {\n this.operation_.abort();\n }\n }\n};\n\n/**\n * @typedef {function(\n * !(shaka.media.InitSegmentReference|shaka.media.SegmentReference),\n * shaka.extern.Stream,\n * ?function(BufferSource):!Promise=\n * ):!shaka.net.NetworkingEngine.PendingRequest}\n *\n * @description\n * A callback function that fetches a segment.\n * @export\n */\nshaka.media.SegmentPrefetch.FetchDispatcher;\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.media.RegionTimeline');\n\ngoog.require('shaka.util.FakeEvent');\ngoog.require('shaka.util.FakeEventTarget');\ngoog.require('shaka.util.IReleasable');\ngoog.require('shaka.util.Timer');\n\n\n/**\n * The region timeline is a set of unique timeline region info entries. When\n * a new entry is added, the 'regionadd' event will be fired. When an entry is\n * deleted, the 'regionremove' event will be fired.\n *\n * @implements {shaka.util.IReleasable}\n * @final\n */\nshaka.media.RegionTimeline = class extends shaka.util.FakeEventTarget {\n /**\n * @param {!function():{start: number, end: number}} getSeekRange\n */\n constructor(getSeekRange) {\n super();\n\n /** @private {!Set.} */\n this.regions_ = new Set();\n\n /** @private {!function():{start: number, end: number}} */\n this.getSeekRange_ = getSeekRange;\n\n /**\n * Make sure all of the regions we're tracking are within the\n * seek range or further in the future. We don't want to store\n * regions that fall before the start of the seek range.\n *\n * @private {shaka.util.Timer}\n */\n this.filterTimer_ = new shaka.util.Timer(() => {\n this.filterBySeekRange_();\n }).tickEvery(\n /* seconds= */ shaka.media.RegionTimeline.REGION_FILTER_INTERVAL);\n }\n\n /** @override */\n release() {\n this.regions_.clear();\n this.filterTimer_.stop();\n super.release();\n }\n\n /**\n * @param {shaka.extern.TimelineRegionInfo} region\n */\n addRegion(region) {\n const similarRegion = this.findSimilarRegion_(region);\n\n // Make sure we don't add duplicate regions. We keep track of this here\n // instead of making the parser track it.\n if (similarRegion == null) {\n this.regions_.add(region);\n const event = new shaka.util.FakeEvent('regionadd', new Map([\n ['region', region],\n ]));\n this.dispatchEvent(event);\n }\n }\n\n /**\n * @private\n */\n filterBySeekRange_() {\n const seekRange = this.getSeekRange_();\n for (const region of this.regions_) {\n // Only consider the seek range start here.\n // Future regions might become relevant eventually,\n // but regions that are in the past and can't ever be\n // seeked to will never come up again, and there's no\n // reson to store or process them.\n if (region.endTime < seekRange.start) {\n this.regions_.delete(region);\n const event = new shaka.util.FakeEvent('regionremove', new Map([\n ['region', region],\n ]));\n this.dispatchEvent(event);\n }\n }\n }\n\n /**\n * Find a region in the timeline that has the same scheme id uri, event id,\n * start time and end time. If these four parameters match, we assume it\n * to be the same region. If no similar region can be found, |null| will be\n * returned.\n *\n * @param {shaka.extern.TimelineRegionInfo} region\n * @return {?shaka.extern.TimelineRegionInfo}\n * @private\n */\n findSimilarRegion_(region) {\n for (const existing of this.regions_) {\n // The same scheme ID and time range means that it is similar-enough to\n // be the same region.\n const isSimilar = existing.schemeIdUri == region.schemeIdUri &&\n existing.id == region.id &&\n existing.startTime == region.startTime &&\n existing.endTime == region.endTime;\n\n if (isSimilar) {\n return existing;\n }\n }\n\n return null;\n }\n\n /**\n * Get an iterable for all the regions in the timeline. This will allow\n * others to see what regions are in the timeline while not being able to\n * change the collection.\n *\n * @return {!Iterable.}\n */\n regions() {\n return this.regions_;\n }\n};\n\n/** @const {number} */\nshaka.media.RegionTimeline.REGION_FILTER_INTERVAL = 2; // in seconds\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.media.QualityObserver');\n\ngoog.require('shaka.media.IPlayheadObserver');\ngoog.require('shaka.log');\ngoog.require('shaka.util.ArrayUtils');\ngoog.require('shaka.util.FakeEvent');\ngoog.require('shaka.util.FakeEventTarget');\ngoog.require('shaka.util.ManifestParserUtils');\n\n/**\n * Monitors the quality of content being appended to the source buffers and\n * fires 'qualitychange' events when the media quality at the playhead changes.\n *\n * @implements {shaka.media.IPlayheadObserver}\n * @final\n */\nshaka.media.QualityObserver = class extends shaka.util.FakeEventTarget {\n /**\n * Creates a new QualityObserver.\n *\n * @param {!function():!shaka.extern.BufferedInfo} getBufferedInfo\n * Buffered info is needed to purge QualityChanges that are no\n * longer relevant.\n */\n constructor(getBufferedInfo) {\n super();\n\n /**\n * @private {!Map.}\n */\n this.contentTypeStates_ = new Map();\n\n /** @private function():!shaka.extern.BufferedInfo */\n this.getBufferedInfo_ = getBufferedInfo;\n }\n\n /** @override */\n release() {\n this.contentTypeStates_.clear();\n super.release();\n }\n\n /**\n * Get the ContenTypeState for a contentType, creating a new\n * one if necessary.\n *\n * @param {!string} contentType\n * The contend type e.g. \"video\" or \"audio\".\n * @return {!shaka.media.QualityObserver.ContentTypeState}\n * @private\n */\n getContentTypeState_(contentType) {\n let contentTypeState = this.contentTypeStates_.get(contentType);\n if (!contentTypeState) {\n contentTypeState = {\n qualityChangePositions: [],\n currentQuality: null,\n contentType: contentType,\n };\n this.contentTypeStates_.set(contentType, contentTypeState);\n }\n return contentTypeState;\n }\n\n /**\n * Adds a QualityChangePosition for the contentType identified by\n * the mediaQuality.contentType.\n *\n * @param {!shaka.extern.MediaQualityInfo} mediaQuality\n * @param {!number} position\n * Position in seconds of the quality change.\n */\n addMediaQualityChange(mediaQuality, position) {\n const contentTypeState =\n this.getContentTypeState_(mediaQuality.contentType);\n\n // Remove unneeded QualityChangePosition(s) before adding the new one\n this.purgeQualityChangePositions_(contentTypeState);\n\n const newChangePosition = {\n mediaQuality: mediaQuality,\n position: position,\n };\n\n const changePositions = contentTypeState.qualityChangePositions;\n const insertBeforeIndex = changePositions.findIndex(\n (qualityChange) => (qualityChange.position >= position));\n\n if (insertBeforeIndex >= 0) {\n const duplicatePositions =\n (changePositions[insertBeforeIndex].position == position) ? 1 : 0;\n changePositions.splice(\n insertBeforeIndex, duplicatePositions, newChangePosition);\n } else {\n changePositions.push(newChangePosition);\n }\n }\n\n /**\n * Determines the media quality at a specific position in the source buffer.\n *\n * @param {!number} position\n * Position in seconds\n * @param {!shaka.media.QualityObserver.ContentTypeState} contentTypeState\n * @return {?shaka.extern.MediaQualityInfo}\n * @private\n */\n static getMediaQualityAtPosition_(position, contentTypeState) {\n // The qualityChangePositions must be ordered by position ascending\n // Find the last QualityChangePosition prior to the position\n const changePositions = contentTypeState.qualityChangePositions;\n for (let i = changePositions.length - 1; i >= 0; i--) {\n const qualityChange = changePositions[i];\n if (qualityChange.position <= position) {\n return qualityChange.mediaQuality;\n }\n }\n return null;\n }\n\n /**\n * Determines if two MediaQualityInfo objects are the same or not.\n *\n * @param {?shaka.extern.MediaQualityInfo} mq1\n * @param {?shaka.extern.MediaQualityInfo} mq2\n * @return {boolean}\n * @private\n */\n static mediaQualitiesAreTheSame_(mq1, mq2) {\n if (mq1 === mq2) {\n return true;\n }\n if (!mq1 || !mq2) {\n return false;\n }\n return (mq1.bandwidth == mq2.bandwidth) &&\n (mq1.audioSamplingRate == mq2.audioSamplingRate) &&\n (mq1.codecs == mq2.codecs) &&\n (mq1.contentType == mq2.contentType) &&\n (mq1.frameRate == mq2.frameRate) &&\n (mq1.height == mq2.height) &&\n (mq1.mimeType == mq2.mimeType) &&\n (mq1.channelsCount == mq2.channelsCount) &&\n (mq1.pixelAspectRatio == mq2.pixelAspectRatio) &&\n (mq1.width == mq2.width);\n }\n\n /** @override */\n poll(positionInSeconds, wasSeeking) {\n for (const contentTypeState of this.contentTypeStates_.values()) {\n const currentQuality = contentTypeState.currentQuality;\n const qualityAtPosition =\n shaka.media.QualityObserver.getMediaQualityAtPosition_(\n positionInSeconds, contentTypeState);\n\n const differentQualities = qualityAtPosition &&\n !shaka.media.QualityObserver.mediaQualitiesAreTheSame_(\n currentQuality, qualityAtPosition);\n const differentLabel = qualityAtPosition && currentQuality &&\n qualityAtPosition.label && currentQuality.label &&\n currentQuality.label !== qualityAtPosition.label;\n const differentLanguage = qualityAtPosition && currentQuality &&\n qualityAtPosition.language && currentQuality.language &&\n currentQuality.language !== qualityAtPosition.language;\n const differentRoles = qualityAtPosition && currentQuality &&\n qualityAtPosition.roles && currentQuality.roles &&\n !shaka.util.ArrayUtils.equal(currentQuality.roles,\n qualityAtPosition.roles);\n\n if (differentLabel || differentLanguage || differentRoles) {\n if (this.positionIsBuffered_(\n positionInSeconds, qualityAtPosition.contentType)) {\n contentTypeState.currentQuality = qualityAtPosition;\n\n const event = new shaka.util.FakeEvent('audiotrackchange', new Map([\n ['quality', qualityAtPosition],\n ['position', positionInSeconds],\n ]));\n this.dispatchEvent(event);\n }\n }\n\n if (differentQualities) {\n if (this.positionIsBuffered_(\n positionInSeconds, qualityAtPosition.contentType)) {\n contentTypeState.currentQuality = qualityAtPosition;\n\n shaka.log.debug('Media quality changed at position ' +\n positionInSeconds + ' ' + JSON.stringify(qualityAtPosition));\n\n const event = new shaka.util.FakeEvent('qualitychange', new Map([\n ['quality', qualityAtPosition],\n ['position', positionInSeconds],\n ]));\n this.dispatchEvent(event);\n }\n }\n }\n }\n\n /**\n * Determine if a position is buffered for a given content type.\n *\n * @param {!number} position\n * @param {!string} contentType\n * @private\n */\n positionIsBuffered_(position, contentType) {\n const bufferedInfo = this.getBufferedInfo_();\n const bufferedRanges = bufferedInfo[contentType];\n if (bufferedRanges && bufferedRanges.length > 0) {\n const bufferStart = bufferedRanges[0].start;\n const bufferEnd = bufferedRanges[bufferedRanges.length - 1].end;\n if (position >= bufferStart && position < bufferEnd) {\n return true;\n }\n }\n return false;\n }\n\n /**\n * Removes the QualityChangePosition(s) that are not relevant to the buffered\n * content of the specified contentType. Note that this function is\n * invoked just before adding the quality change info associated with\n * the next media segment to be appended.\n *\n * @param {!shaka.media.QualityObserver.ContentTypeState} contentTypeState\n * @private\n */\n purgeQualityChangePositions_(contentTypeState) {\n const bufferedInfo = this.getBufferedInfo_();\n const bufferedRanges = bufferedInfo[contentTypeState.contentType];\n\n if (bufferedRanges && bufferedRanges.length > 0) {\n const bufferStart = bufferedRanges[0].start;\n const bufferEnd = bufferedRanges[bufferedRanges.length - 1].end;\n const oldChangePositions = contentTypeState.qualityChangePositions;\n contentTypeState.qualityChangePositions =\n oldChangePositions.filter(\n (qualityChange, index) => {\n // Remove all but last quality change before bufferStart.\n if ((qualityChange.position <= bufferStart) &&\n (index + 1 < oldChangePositions.length) &&\n (oldChangePositions[index + 1].position <= bufferStart)) {\n return false;\n }\n // Remove all quality changes after bufferEnd.\n if (qualityChange.position >= bufferEnd) {\n return false;\n }\n return true;\n });\n } else {\n // Nothing is buffered; so remove all quality changes.\n contentTypeState.qualityChangePositions = [];\n }\n }\n\n /**\n * Create a MediaQualityInfo object from a stream object.\n *\n * @param {!shaka.extern.Stream} stream\n * @return {!shaka.extern.MediaQualityInfo}\n */\n static createQualityInfo(stream) {\n const basicQuality = {\n bandwidth: stream.bandwidth || 0,\n audioSamplingRate: null,\n codecs: stream.codecs,\n contentType: stream.type,\n frameRate: null,\n height: null,\n mimeType: stream.mimeType,\n channelsCount: null,\n pixelAspectRatio: null,\n width: null,\n label: null,\n roles: stream.roles,\n language: null,\n };\n if (stream.type == shaka.util.ManifestParserUtils.ContentType.VIDEO) {\n basicQuality.frameRate = stream.frameRate || null;\n basicQuality.height = stream.height || null;\n basicQuality.pixelAspectRatio = stream.pixelAspectRatio || null;\n basicQuality.width = stream.width || null;\n }\n if (stream.type == shaka.util.ManifestParserUtils.ContentType.AUDIO) {\n basicQuality.audioSamplingRate = stream.audioSamplingRate;\n basicQuality.channelsCount = stream.channelsCount;\n basicQuality.label = stream.label || null;\n basicQuality.language = stream.language;\n }\n return basicQuality;\n }\n};\n\n/**\n * @typedef {{\n * mediaQuality: !shaka.extern.MediaQualityInfo,\n * position: !number\n * }}\n *\n * @description\n * Identifies the position of a media quality change in the\n * source buffer.\n *\n * @property {shaka.extern.MediaQualityInfo} !mediaQuality\n * The new media quality for content after position in the source buffer.\n * @property {number} !position\n * A position in seconds in the source buffer\n */\nshaka.media.QualityObserver.QualityChangePosition;\n\n/**\n * @typedef {{\n * qualityChangePositions:\n * !Array.,\n * currentQuality: ?shaka.extern.MediaQualityInfo,\n * contentType: !string\n * }}\n *\n * @description\n * Contains media quality information for a specific content type\n * e.g. video or audio.\n *\n * @property {!Array.}\n * qualityChangePositions\n * Quality changes ordered by position ascending.\n * @property {?shaka.media.MediaQualityInfo} currentMediaQuality\n * The media quality at the playhead position.\n * @property {string} contentType\n * The contentType e.g. 'video' or 'audio'\n */\nshaka.media.QualityObserver.ContentTypeState;\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.media.SegmentUtils');\n\ngoog.require('goog.asserts');\ngoog.require('shaka.log');\ngoog.require('shaka.media.Capabilities');\ngoog.require('shaka.media.ClosedCaptionParser');\ngoog.require('shaka.util.BufferUtils');\ngoog.require('shaka.util.ManifestParserUtils');\ngoog.require('shaka.util.MimeUtils');\ngoog.require('shaka.util.Mp4BoxParsers');\ngoog.require('shaka.util.Mp4Parser');\ngoog.require('shaka.util.TsParser');\n\n\n/**\n * @summary Utility functions for segment parsing.\n */\nshaka.media.SegmentUtils = class {\n /**\n * @param {string} mimeType\n * @return {shaka.media.SegmentUtils.BasicInfo}\n */\n static getBasicInfoFromMimeType(mimeType) {\n const baseMimeType = shaka.util.MimeUtils.getBasicType(mimeType);\n const type = baseMimeType.split('/')[0];\n const codecs = shaka.util.MimeUtils.getCodecs(mimeType);\n return {\n type: type,\n mimeType: baseMimeType,\n codecs: codecs,\n language: null,\n height: null,\n width: null,\n channelCount: null,\n sampleRate: null,\n closedCaptions: new Map(),\n videoRange: null,\n colorGamut: null,\n frameRate: null,\n };\n }\n\n /**\n * @param {!BufferSource} data\n * @return {?shaka.media.SegmentUtils.BasicInfo}\n */\n static getBasicInfoFromTs(data) {\n const uint8ArrayData = shaka.util.BufferUtils.toUint8(data);\n const tsParser = new shaka.util.TsParser().parse(uint8ArrayData);\n const tsCodecs = tsParser.getCodecs();\n const videoInfo = tsParser.getVideoInfo();\n const codecs = [];\n let hasAudio = false;\n let hasVideo = false;\n switch (tsCodecs.audio) {\n case 'aac':\n case 'aac-loas':\n codecs.push('mp4a.40.2');\n hasAudio = true;\n break;\n case 'mp3':\n codecs.push('mp4a.40.34');\n hasAudio = true;\n break;\n case 'ac3':\n codecs.push('ac-3');\n hasAudio = true;\n break;\n case 'ec3':\n codecs.push('ec-3');\n hasAudio = true;\n break;\n case 'opus':\n codecs.push('opus');\n hasAudio = true;\n break;\n }\n switch (tsCodecs.video) {\n case 'avc':\n if (videoInfo.codec) {\n codecs.push(videoInfo.codec);\n } else {\n codecs.push('avc1.42E01E');\n }\n hasVideo = true;\n break;\n case 'hvc':\n if (videoInfo.codec) {\n codecs.push(videoInfo.codec);\n } else {\n codecs.push('hvc1.1.6.L93.90');\n }\n hasVideo = true;\n break;\n case 'av1':\n codecs.push('av01.0.01M.08');\n hasVideo = true;\n break;\n }\n if (!codecs.length) {\n return null;\n }\n const onlyAudio = hasAudio && !hasVideo;\n const closedCaptions = new Map();\n if (hasVideo) {\n const captionParser = new shaka.media.ClosedCaptionParser('video/mp2t');\n captionParser.parseFrom(data);\n for (const stream of captionParser.getStreams()) {\n closedCaptions.set(stream, stream);\n }\n captionParser.reset();\n }\n return {\n type: onlyAudio ? 'audio' : 'video',\n mimeType: 'video/mp2t',\n codecs: codecs.join(', '),\n language: null,\n height: videoInfo.height,\n width: videoInfo.width,\n channelCount: null,\n sampleRate: null,\n closedCaptions: closedCaptions,\n videoRange: null,\n colorGamut: null,\n frameRate: videoInfo.frameRate,\n };\n }\n\n /**\n * @param {?BufferSource} initData\n * @param {!BufferSource} data\n * @return {?shaka.media.SegmentUtils.BasicInfo}\n */\n static getBasicInfoFromMp4(initData, data) {\n const Mp4Parser = shaka.util.Mp4Parser;\n const SegmentUtils = shaka.media.SegmentUtils;\n\n const audioCodecs = [];\n let videoCodecs = [];\n\n let hasAudio = false;\n let hasVideo = false;\n\n const addCodec = (codec) => {\n const codecLC = codec.toLowerCase();\n switch (codecLC) {\n case 'avc1':\n case 'avc3':\n videoCodecs.push(codecLC + '.42E01E');\n hasVideo = true;\n break;\n case 'hev1':\n case 'hvc1':\n videoCodecs.push(codecLC + '.1.6.L93.90');\n hasVideo = true;\n break;\n case 'dvh1':\n case 'dvhe':\n videoCodecs.push(codecLC + '.05.04');\n hasVideo = true;\n break;\n case 'vp09':\n videoCodecs.push(codecLC + '.00.10.08');\n hasVideo = true;\n break;\n case 'av01':\n videoCodecs.push(codecLC + '.0.01M.08');\n hasVideo = true;\n break;\n case 'mp4a':\n // We assume AAC, but this can be wrong since mp4a supports\n // others codecs\n audioCodecs.push('mp4a.40.2');\n hasAudio = true;\n break;\n case 'ac-3':\n case 'ec-3':\n case 'ac-4':\n case 'opus':\n case 'flac':\n audioCodecs.push(codecLC);\n hasAudio = true;\n break;\n }\n };\n\n const codecBoxParser = (box) => addCodec(box.name);\n\n /** @type {?string} */\n let language = null;\n /** @type {?string} */\n let height = null;\n /** @type {?string} */\n let width = null;\n /** @type {?number} */\n let channelCount = null;\n /** @type {?number} */\n let sampleRate = null;\n /** @type {?string} */\n let realVideoRange = null;\n /** @type {?string} */\n let realColorGamut = null;\n /** @type {?string} */\n const realFrameRate = null;\n\n /** @type {?string} */\n let baseBox;\n\n const genericAudioBox = (box) => {\n const parsedAudioSampleEntryBox =\n shaka.util.Mp4BoxParsers.audioSampleEntry(box.reader);\n channelCount = parsedAudioSampleEntryBox.channelCount;\n sampleRate = parsedAudioSampleEntryBox.sampleRate;\n codecBoxParser(box);\n };\n\n const genericVideoBox = (box) => {\n baseBox = box.name;\n const parsedVisualSampleEntryBox =\n shaka.util.Mp4BoxParsers.visualSampleEntry(box.reader);\n width = String(parsedVisualSampleEntryBox.width);\n height = String(parsedVisualSampleEntryBox.height);\n if (box.reader.hasMoreData()) {\n Mp4Parser.children(box);\n }\n };\n\n new Mp4Parser()\n .box('moov', Mp4Parser.children)\n .box('trak', Mp4Parser.children)\n .box('mdia', Mp4Parser.children)\n .fullBox('mdhd', (box) => {\n goog.asserts.assert(\n box.version != null,\n 'MDHD is a full box and should have a valid version.');\n const parsedMDHDBox = shaka.util.Mp4BoxParsers.parseMDHD(\n box.reader, box.version);\n language = parsedMDHDBox.language;\n })\n .box('minf', Mp4Parser.children)\n .box('stbl', Mp4Parser.children)\n .fullBox('stsd', Mp4Parser.sampleDescription)\n\n // AUDIO\n // These are the various boxes that signal a codec.\n .box('mp4a', (box) => {\n const parsedAudioSampleEntryBox =\n shaka.util.Mp4BoxParsers.audioSampleEntry(box.reader);\n channelCount = parsedAudioSampleEntryBox.channelCount;\n sampleRate = parsedAudioSampleEntryBox.sampleRate;\n if (box.reader.hasMoreData()) {\n Mp4Parser.children(box);\n } else {\n codecBoxParser(box);\n }\n })\n .box('esds', (box) => {\n const parsedESDSBox = shaka.util.Mp4BoxParsers.parseESDS(box.reader);\n audioCodecs.push(parsedESDSBox.codec);\n hasAudio = true;\n })\n .box('ac-3', genericAudioBox)\n .box('ec-3', genericAudioBox)\n .box('ac-4', genericAudioBox)\n .box('Opus', genericAudioBox)\n .box('fLaC', genericAudioBox)\n\n // VIDEO\n // These are the various boxes that signal a codec.\n .box('avc1', genericVideoBox)\n .box('avc3', genericVideoBox)\n .box('hev1', genericVideoBox)\n .box('hvc1', genericVideoBox)\n .box('dva1', genericVideoBox)\n .box('dvav', genericVideoBox)\n .box('dvh1', genericVideoBox)\n .box('dvhe', genericVideoBox)\n .box('vp09', genericVideoBox)\n .box('av01', genericVideoBox)\n .box('avcC', (box) => {\n let codecBase = baseBox || '';\n switch (baseBox) {\n case 'dvav':\n codecBase = 'avc3';\n break;\n case 'dva1':\n codecBase = 'avc1';\n break;\n }\n const parsedAVCCBox = shaka.util.Mp4BoxParsers.parseAVCC(\n codecBase, box.reader, box.name);\n videoCodecs.push(parsedAVCCBox.codec);\n hasVideo = true;\n })\n .box('hvcC', (box) => {\n let codecBase = baseBox || '';\n switch (baseBox) {\n case 'dvh1':\n codecBase = 'hvc1';\n break;\n case 'dvhe':\n codecBase = 'hev1';\n break;\n }\n const parsedHVCCBox = shaka.util.Mp4BoxParsers.parseHVCC(\n codecBase, box.reader, box.name);\n videoCodecs.push(parsedHVCCBox.codec);\n hasVideo = true;\n })\n .box('dvcC', (box) => {\n let codecBase = baseBox || '';\n switch (baseBox) {\n case 'hvc1':\n codecBase = 'dvh1';\n break;\n case 'hev1':\n codecBase = 'dvhe';\n break;\n case 'avc1':\n codecBase = 'dva1';\n break;\n case 'avc3':\n codecBase = 'dvav';\n break;\n case 'av01':\n codecBase = 'dav1';\n break;\n }\n const parsedDVCCBox = shaka.util.Mp4BoxParsers.parseDVCC(\n codecBase, box.reader, box.name);\n videoCodecs.push(parsedDVCCBox.codec);\n hasVideo = true;\n })\n .box('dvvC', (box) => {\n let codecBase = baseBox || '';\n switch (baseBox) {\n case 'hvc1':\n codecBase = 'dvh1';\n break;\n case 'hev1':\n codecBase = 'dvhe';\n break;\n case 'avc1':\n codecBase = 'dva1';\n break;\n case 'avc3':\n codecBase = 'dvav';\n break;\n case 'av01':\n codecBase = 'dav1';\n break;\n }\n const parsedDVCCBox = shaka.util.Mp4BoxParsers.parseDVVC(\n codecBase, box.reader, box.name);\n videoCodecs.push(parsedDVCCBox.codec);\n hasVideo = true;\n })\n .fullBox('vpcC', (box) => {\n const codecBase = baseBox || '';\n const parsedVPCCBox = shaka.util.Mp4BoxParsers.parseVPCC(\n codecBase, box.reader, box.name);\n videoCodecs.push(parsedVPCCBox.codec);\n hasVideo = true;\n })\n .box('av1C', (box) => {\n let codecBase = baseBox || '';\n switch (baseBox) {\n case 'dav1':\n codecBase = 'av01';\n break;\n }\n const parsedAV1CBox = shaka.util.Mp4BoxParsers.parseAV1C(\n codecBase, box.reader, box.name);\n videoCodecs.push(parsedAV1CBox.codec);\n hasVideo = true;\n })\n\n // This signals an encrypted sample, which we can go inside of to\n // find the codec used.\n // Note: If encrypted, you can only have audio or video, not both.\n .box('enca', Mp4Parser.audioSampleEntry)\n .box('encv', Mp4Parser.visualSampleEntry)\n .box('sinf', Mp4Parser.children)\n .box('frma', (box) => {\n const {codec} = shaka.util.Mp4BoxParsers.parseFRMA(box.reader);\n addCodec(codec);\n })\n\n .box('colr', (box) => {\n videoCodecs = videoCodecs.map((codec) => {\n if (codec.startsWith('av01.')) {\n return shaka.util.Mp4BoxParsers.updateAV1CodecWithCOLRBox(\n codec, box.reader);\n }\n return codec;\n });\n const {videoRange, colorGamut} =\n shaka.util.Mp4BoxParsers.parseCOLR(box.reader);\n realVideoRange = videoRange;\n realColorGamut = colorGamut;\n })\n\n .parse(initData || data, /* partialOkay= */ true);\n if (!audioCodecs.length && !videoCodecs.length) {\n return null;\n }\n const onlyAudio = hasAudio && !hasVideo;\n const closedCaptions = new Map();\n if (hasVideo) {\n const captionParser = new shaka.media.ClosedCaptionParser('video/mp4');\n if (initData) {\n captionParser.init(initData);\n }\n captionParser.parseFrom(data);\n for (const stream of captionParser.getStreams()) {\n closedCaptions.set(stream, stream);\n }\n captionParser.reset();\n }\n const codecs = audioCodecs.concat(videoCodecs);\n return {\n type: onlyAudio ? 'audio' : 'video',\n mimeType: onlyAudio ? 'audio/mp4' : 'video/mp4',\n codecs: SegmentUtils.codecsFiltering(codecs).join(', '),\n language: language,\n height: height,\n width: width,\n channelCount: channelCount,\n sampleRate: sampleRate,\n closedCaptions: closedCaptions,\n videoRange: realVideoRange,\n colorGamut: realColorGamut,\n frameRate: realFrameRate,\n };\n }\n\n /**\n * @param {!Array.} codecs\n * @return {!Array.} codecs\n */\n static codecsFiltering(codecs) {\n const ContentType = shaka.util.ManifestParserUtils.ContentType;\n const ManifestParserUtils = shaka.util.ManifestParserUtils;\n const SegmentUtils = shaka.media.SegmentUtils;\n const allCodecs = SegmentUtils.filterDuplicateCodecs_(codecs);\n const audioCodecs =\n ManifestParserUtils.guessAllCodecsSafe(ContentType.AUDIO, allCodecs);\n const videoCodecs =\n ManifestParserUtils.guessAllCodecsSafe(ContentType.VIDEO, allCodecs);\n const textCodecs =\n ManifestParserUtils.guessAllCodecsSafe(ContentType.TEXT, allCodecs);\n const validVideoCodecs = SegmentUtils.chooseBetterCodecs_(videoCodecs);\n const finalCodecs =\n audioCodecs.concat(validVideoCodecs).concat(textCodecs);\n if (allCodecs.length && !finalCodecs.length) {\n return allCodecs;\n }\n return finalCodecs;\n }\n\n /**\n * @param {!Array.} codecs\n * @return {!Array.} codecs\n * @private\n */\n static filterDuplicateCodecs_(codecs) {\n // Filter out duplicate codecs.\n const seen = new Set();\n const ret = [];\n for (const codec of codecs) {\n const shortCodec = shaka.util.MimeUtils.getCodecBase(codec);\n if (!seen.has(shortCodec)) {\n ret.push(codec);\n seen.add(shortCodec);\n } else {\n shaka.log.debug('Ignoring duplicate codec');\n }\n }\n return ret;\n }\n\n /**\n * Prioritizes Dolby Vision if supported. This is necessary because with\n * Dolby Vision we could have hvcC and dvcC boxes at the same time.\n *\n * @param {!Array.} codecs\n * @return {!Array.} codecs\n * @private\n */\n static chooseBetterCodecs_(codecs) {\n if (codecs.length <= 1) {\n return codecs;\n }\n const dolbyVision = codecs.find((codec) => {\n return codec.startsWith('dvav.') ||\n codec.startsWith('dva1.') ||\n codec.startsWith('dvh1.') ||\n codec.startsWith('dvhe.') ||\n codec.startsWith('dav1.') ||\n codec.startsWith('dvc1.') ||\n codec.startsWith('dvi1.');\n });\n if (!dolbyVision) {\n return codecs;\n }\n const type = `video/mp4; codecs=\"${dolbyVision}\"`;\n if (shaka.media.Capabilities.isTypeSupported(type)) {\n return [dolbyVision];\n }\n return codecs.filter((codec) => codec != dolbyVision);\n }\n\n /**\n * @param {!BufferSource} data\n * @return {?string}\n */\n static getDefaultKID(data) {\n const Mp4Parser = shaka.util.Mp4Parser;\n\n let defaultKID = null;\n new Mp4Parser()\n .box('moov', Mp4Parser.children)\n .box('trak', Mp4Parser.children)\n .box('mdia', Mp4Parser.children)\n .box('minf', Mp4Parser.children)\n .box('stbl', Mp4Parser.children)\n .fullBox('stsd', Mp4Parser.sampleDescription)\n .box('encv', Mp4Parser.visualSampleEntry)\n .box('enca', Mp4Parser.audioSampleEntry)\n .box('sinf', Mp4Parser.children)\n .box('schi', Mp4Parser.children)\n .fullBox('tenc', (box) => {\n const parsedTENCBox = shaka.util.Mp4BoxParsers.parseTENC(box.reader);\n defaultKID = parsedTENCBox.defaultKID;\n })\n\n .parse(data, /* partialOkay= */ true);\n return defaultKID;\n }\n\n /**\n * @param {!BufferSource} rawResult\n * @param {shaka.extern.aesKey} aesKey\n * @param {number} position\n * @return {!Promise.}\n */\n static async aesDecrypt(rawResult, aesKey, position) {\n const key = aesKey;\n if (!key.cryptoKey) {\n goog.asserts.assert(key.fetchKey, 'If AES cryptoKey was not ' +\n 'preloaded, fetchKey function should be provided');\n await key.fetchKey();\n goog.asserts.assert(key.cryptoKey, 'AES cryptoKey should now be set');\n }\n let iv = key.iv;\n if (!iv) {\n iv = shaka.util.BufferUtils.toUint8(new ArrayBuffer(16));\n let sequence = key.firstMediaSequenceNumber + position;\n for (let i = iv.byteLength - 1; i >= 0; i--) {\n iv[i] = sequence & 0xff;\n sequence >>= 8;\n }\n }\n let algorithm;\n if (aesKey.blockCipherMode == 'CBC') {\n algorithm = {\n name: 'AES-CBC',\n iv,\n };\n } else {\n algorithm = {\n name: 'AES-CTR',\n counter: iv,\n // NIST SP800-38A standard suggests that the counter should occupy half\n // of the counter block\n length: 64,\n };\n }\n return window.crypto.subtle.decrypt(algorithm, key.cryptoKey, rawResult);\n }\n};\n\n\n/**\n * @typedef {{\n * type: string,\n * mimeType: string,\n * codecs: string,\n * language: ?string,\n * height: ?string,\n * width: ?string,\n * channelCount: ?number,\n * sampleRate: ?number,\n * closedCaptions: Map.,\n * videoRange: ?string,\n * colorGamut: ?string,\n * frameRate: ?string\n * }}\n *\n * @property {string} type\n * @property {string} mimeType\n * @property {string} codecs\n * @property {?string} language\n * @property {?string} height\n * @property {?string} width\n * @property {?number} channelCount\n * @property {?number} sampleRate\n * @property {Map.} closedCaptions\n * @property {?string} videoRange\n * @property {?string} colorGamut\n * @property {?string} frameRate\n */\nshaka.media.SegmentUtils.BasicInfo;\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.util.Networking');\n\ngoog.require('shaka.net.NetworkingEngine');\n\n\n/**\n * A collection of shared utilities that bridge the gap between our networking\n * code and the other parts of our code base. This is to allow\n * |shaka.net.NetworkingEngine| to remain general.\n *\n * @final\n */\nshaka.util.Networking = class {\n /**\n * Create a request message for a segment. Providing |start| and |end|\n * will set the byte range. A non-zero start must be provided for |end| to\n * be used.\n *\n * @param {!Array.} uris\n * @param {?number} start\n * @param {?number} end\n * @param {shaka.extern.RetryParameters} retryParameters\n * @param {?function(BufferSource):!Promise=} streamDataCallback\n * @return {shaka.extern.Request}\n */\n static createSegmentRequest(uris, start, end, retryParameters,\n streamDataCallback) {\n const request = shaka.net.NetworkingEngine.makeRequest(\n uris, retryParameters, streamDataCallback);\n\n if (start == 0 && end == null) {\n // This is a request for the entire segment. The Range header is not\n // required. Note that some web servers don't accept Range headers, so\n // don't set one if it's not strictly required.\n } else {\n if (end) {\n request.headers['Range'] = 'bytes=' + start + '-' + end;\n } else {\n request.headers['Range'] = 'bytes=' + start + '-';\n }\n }\n\n return request;\n }\n};\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/**\n * @fileoverview\n */\n\ngoog.provide('shaka.media.StreamingEngine');\n\ngoog.require('goog.asserts');\ngoog.require('shaka.log');\ngoog.require('shaka.media.InitSegmentReference');\ngoog.require('shaka.media.ManifestParser');\ngoog.require('shaka.media.MediaSourceEngine');\ngoog.require('shaka.media.MetaSegmentIndex');\ngoog.require('shaka.media.SegmentIterator');\ngoog.require('shaka.media.SegmentReference');\ngoog.require('shaka.media.SegmentPrefetch');\ngoog.require('shaka.media.SegmentUtils');\ngoog.require('shaka.net.Backoff');\ngoog.require('shaka.net.NetworkingEngine');\ngoog.require('shaka.util.DelayedTick');\ngoog.require('shaka.util.Destroyer');\ngoog.require('shaka.util.Error');\ngoog.require('shaka.util.FakeEvent');\ngoog.require('shaka.util.IDestroyable');\ngoog.require('shaka.util.LanguageUtils');\ngoog.require('shaka.util.ManifestParserUtils');\ngoog.require('shaka.util.MimeUtils');\ngoog.require('shaka.util.Mp4BoxParsers');\ngoog.require('shaka.util.Mp4Parser');\ngoog.require('shaka.util.Networking');\n\n\n/**\n * @summary Creates a Streaming Engine.\n * The StreamingEngine is responsible for setting up the Manifest's Streams\n * (i.e., for calling each Stream's createSegmentIndex() function), for\n * downloading segments, for co-ordinating audio, video, and text buffering.\n * The StreamingEngine provides an interface to switch between Streams, but it\n * does not choose which Streams to switch to.\n *\n * The StreamingEngine does not need to be notified about changes to the\n * Manifest's SegmentIndexes; however, it does need to be notified when new\n * Variants are added to the Manifest.\n *\n * To start the StreamingEngine the owner must first call configure(), followed\n * by one call to switchVariant(), one optional call to switchTextStream(), and\n * finally a call to start(). After start() resolves, switch*() can be used\n * freely.\n *\n * The owner must call seeked() each time the playhead moves to a new location\n * within the presentation timeline; however, the owner may forego calling\n * seeked() when the playhead moves outside the presentation timeline.\n *\n * @implements {shaka.util.IDestroyable}\n */\nshaka.media.StreamingEngine = class {\n /**\n * @param {shaka.extern.Manifest} manifest\n * @param {shaka.media.StreamingEngine.PlayerInterface} playerInterface\n */\n constructor(manifest, playerInterface) {\n /** @private {?shaka.media.StreamingEngine.PlayerInterface} */\n this.playerInterface_ = playerInterface;\n\n /** @private {?shaka.extern.Manifest} */\n this.manifest_ = manifest;\n\n /** @private {?shaka.extern.StreamingConfiguration} */\n this.config_ = null;\n\n /**\n * Retains a reference to the function used to close SegmentIndex objects\n * for streams which were switched away from during an ongoing update_().\n * @private {!Map.}\n */\n this.deferredCloseSegmentIndex_ = new Map();\n\n /** @private {number} */\n this.bufferingScale_ = 1;\n\n /** @private {?shaka.extern.Variant} */\n this.currentVariant_ = null;\n\n /** @private {?shaka.extern.Stream} */\n this.currentTextStream_ = null;\n\n /** @private {number} */\n this.textStreamSequenceId_ = 0;\n\n /**\n * Maps a content type, e.g., 'audio', 'video', or 'text', to a MediaState.\n *\n * @private {!Map.}\n */\n this.mediaStates_ = new Map();\n\n /**\n * Set to true once the initial media states have been created.\n *\n * @private {boolean}\n */\n this.startupComplete_ = false;\n\n /**\n * Used for delay and backoff of failure callbacks, so that apps do not\n * retry instantly.\n *\n * @private {shaka.net.Backoff}\n */\n this.failureCallbackBackoff_ = null;\n\n /**\n * Set to true on fatal error. Interrupts fetchAndAppend_().\n *\n * @private {boolean}\n */\n this.fatalError_ = false;\n\n /** @private {!shaka.util.Destroyer} */\n this.destroyer_ = new shaka.util.Destroyer(() => this.doDestroy_());\n\n /** @private {number} */\n this.lastMediaSourceReset_ = Date.now() / 1000;\n\n /**\n * @private {!Map}\n */\n this.audioPrefetchMap_ = new Map();\n\n /** @private {!shaka.extern.SpatialVideoInfo} */\n this.spatialVideoInfo_ = {\n projection: null,\n hfov: null,\n };\n\n /** @private {number} */\n this.playRangeStart_ = 0;\n\n /** @private {number} */\n this.playRangeEnd_ = Infinity;\n\n /** @private {?shaka.media.StreamingEngine.MediaState_} */\n this.lastTextMediaStateBeforeUnload_ = null;\n }\n\n /** @override */\n destroy() {\n return this.destroyer_.destroy();\n }\n\n /**\n * @return {!Promise}\n * @private\n */\n async doDestroy_() {\n const aborts = [];\n\n for (const state of this.mediaStates_.values()) {\n this.cancelUpdate_(state);\n aborts.push(this.abortOperations_(state));\n if (state.segmentPrefetch) {\n state.segmentPrefetch.clearAll();\n state.segmentPrefetch = null;\n }\n }\n for (const prefetch of this.audioPrefetchMap_.values()) {\n prefetch.clearAll();\n }\n\n await Promise.all(aborts);\n\n this.mediaStates_.clear();\n this.audioPrefetchMap_.clear();\n\n this.playerInterface_ = null;\n this.manifest_ = null;\n this.config_ = null;\n }\n\n /**\n * Called by the Player to provide an updated configuration any time it\n * changes. Must be called at least once before start().\n *\n * @param {shaka.extern.StreamingConfiguration} config\n */\n configure(config) {\n this.config_ = config;\n\n // Create separate parameters for backoff during streaming failure.\n\n /** @type {shaka.extern.RetryParameters} */\n const failureRetryParams = {\n // The term \"attempts\" includes the initial attempt, plus all retries.\n // In order to see a delay, there would have to be at least 2 attempts.\n maxAttempts: Math.max(config.retryParameters.maxAttempts, 2),\n baseDelay: config.retryParameters.baseDelay,\n backoffFactor: config.retryParameters.backoffFactor,\n fuzzFactor: config.retryParameters.fuzzFactor,\n timeout: 0, // irrelevant\n stallTimeout: 0, // irrelevant\n connectionTimeout: 0, // irrelevant\n };\n\n // We don't want to ever run out of attempts. The application should be\n // allowed to retry streaming infinitely if it wishes.\n const autoReset = true;\n this.failureCallbackBackoff_ =\n new shaka.net.Backoff(failureRetryParams, autoReset);\n\n const ContentType = shaka.util.ManifestParserUtils.ContentType;\n\n // disable audio segment prefetch if this is now set\n if (config.disableAudioPrefetch) {\n const state = this.mediaStates_.get(ContentType.AUDIO);\n if (state && state.segmentPrefetch) {\n state.segmentPrefetch.clearAll();\n state.segmentPrefetch = null;\n }\n\n for (const stream of this.audioPrefetchMap_.keys()) {\n const prefetch = this.audioPrefetchMap_.get(stream);\n prefetch.clearAll();\n this.audioPrefetchMap_.delete(stream);\n }\n }\n // disable text segment prefetch if this is now set\n if (config.disableTextPrefetch) {\n const state = this.mediaStates_.get(ContentType.TEXT);\n if (state && state.segmentPrefetch) {\n state.segmentPrefetch.clearAll();\n state.segmentPrefetch = null;\n }\n }\n\n // disable video segment prefetch if this is now set\n if (config.disableVideoPrefetch) {\n const state = this.mediaStates_.get(ContentType.VIDEO);\n if (state && state.segmentPrefetch) {\n state.segmentPrefetch.clearAll();\n state.segmentPrefetch = null;\n }\n }\n\n // Allow configuring the segment prefetch in middle of the playback.\n for (const type of this.mediaStates_.keys()) {\n const state = this.mediaStates_.get(type);\n if (state.segmentPrefetch) {\n state.segmentPrefetch.resetLimit(config.segmentPrefetchLimit);\n if (!(config.segmentPrefetchLimit > 0)) {\n // ResetLimit is still needed in this case,\n // to abort existing prefetch operations.\n state.segmentPrefetch.clearAll();\n state.segmentPrefetch = null;\n }\n } else if (config.segmentPrefetchLimit > 0) {\n state.segmentPrefetch = this.createSegmentPrefetch_(state.stream);\n }\n }\n\n if (!config.disableAudioPrefetch) {\n this.updatePrefetchMapForAudio_();\n }\n }\n\n\n /**\n * Applies a playback range. This will only affect non-live content.\n *\n * @param {number} playRangeStart\n * @param {number} playRangeEnd\n */\n applyPlayRange(playRangeStart, playRangeEnd) {\n if (!this.manifest_.presentationTimeline.isLive()) {\n this.playRangeStart_ = playRangeStart;\n this.playRangeEnd_ = playRangeEnd;\n }\n }\n\n\n /**\n * Initialize and start streaming.\n *\n * By calling this method, StreamingEngine will start streaming the variant\n * chosen by a prior call to switchVariant(), and optionally, the text stream\n * chosen by a prior call to switchTextStream(). Once the Promise resolves,\n * switch*() may be called freely.\n *\n * @param {!Map.=} segmentPrefetchById\n * If provided, segments prefetched for these streams will be used as needed\n * during playback.\n * @return {!Promise}\n */\n async start(segmentPrefetchById) {\n goog.asserts.assert(this.config_,\n 'StreamingEngine configure() must be called before init()!');\n\n // Setup the initial set of Streams and then begin each update cycle.\n await this.initStreams_(segmentPrefetchById || (new Map()));\n this.destroyer_.ensureNotDestroyed();\n\n shaka.log.debug('init: completed initial Stream setup');\n this.startupComplete_ = true;\n }\n\n /**\n * Get the current variant we are streaming. Returns null if nothing is\n * streaming.\n * @return {?shaka.extern.Variant}\n */\n getCurrentVariant() {\n return this.currentVariant_;\n }\n\n /**\n * Get the text stream we are streaming. Returns null if there is no text\n * streaming.\n * @return {?shaka.extern.Stream}\n */\n getCurrentTextStream() {\n return this.currentTextStream_;\n }\n\n /**\n * Start streaming text, creating a new media state.\n *\n * @param {shaka.extern.Stream} stream\n * @return {!Promise}\n * @private\n */\n async loadNewTextStream_(stream) {\n const ContentType = shaka.util.ManifestParserUtils.ContentType;\n goog.asserts.assert(!this.mediaStates_.has(ContentType.TEXT),\n 'Should not call loadNewTextStream_ while streaming text!');\n this.textStreamSequenceId_++;\n const currentSequenceId = this.textStreamSequenceId_;\n\n try {\n // Clear MediaSource's buffered text, so that the new text stream will\n // properly replace the old buffered text.\n // TODO: Should this happen in unloadTextStream() instead?\n await this.playerInterface_.mediaSourceEngine.clear(ContentType.TEXT);\n } catch (error) {\n if (this.playerInterface_) {\n this.playerInterface_.onError(error);\n }\n }\n\n const mimeType = shaka.util.MimeUtils.getFullType(\n stream.mimeType, stream.codecs);\n this.playerInterface_.mediaSourceEngine.reinitText(\n mimeType, this.manifest_.sequenceMode, stream.external);\n\n const textDisplayer =\n this.playerInterface_.mediaSourceEngine.getTextDisplayer();\n const streamText =\n textDisplayer.isTextVisible() || this.config_.alwaysStreamText;\n\n if (streamText && (this.textStreamSequenceId_ == currentSequenceId)) {\n const state = this.createMediaState_(stream);\n this.mediaStates_.set(ContentType.TEXT, state);\n this.scheduleUpdate_(state, 0);\n }\n }\n\n\n /**\n * Stop fetching text stream when the user chooses to hide the captions.\n */\n unloadTextStream() {\n const ContentType = shaka.util.ManifestParserUtils.ContentType;\n\n const state = this.mediaStates_.get(ContentType.TEXT);\n if (state) {\n this.cancelUpdate_(state);\n this.abortOperations_(state).catch(() => {});\n this.lastTextMediaStateBeforeUnload_ =\n this.mediaStates_.get(ContentType.TEXT);\n this.mediaStates_.delete(ContentType.TEXT);\n }\n this.currentTextStream_ = null;\n }\n\n /**\n * Set trick play on or off.\n * If trick play is on, related trick play streams will be used when possible.\n * @param {boolean} on\n */\n setTrickPlay(on) {\n const ContentType = shaka.util.ManifestParserUtils.ContentType;\n\n this.updateSegmentIteratorReverse_();\n\n const mediaState = this.mediaStates_.get(ContentType.VIDEO);\n if (!mediaState) {\n return;\n }\n\n const stream = mediaState.stream;\n if (!stream) {\n return;\n }\n\n shaka.log.debug('setTrickPlay', on);\n if (on) {\n const trickModeVideo = stream.trickModeVideo;\n if (!trickModeVideo) {\n return; // Can't engage trick play.\n }\n\n const normalVideo = mediaState.restoreStreamAfterTrickPlay;\n if (normalVideo) {\n return; // Already in trick play.\n }\n\n shaka.log.debug('Engaging trick mode stream', trickModeVideo);\n this.switchInternal_(trickModeVideo, /* clearBuffer= */ false,\n /* safeMargin= */ 0, /* force= */ false);\n\n mediaState.restoreStreamAfterTrickPlay = stream;\n } else {\n const normalVideo = mediaState.restoreStreamAfterTrickPlay;\n if (!normalVideo) {\n return;\n }\n\n shaka.log.debug('Restoring non-trick-mode stream', normalVideo);\n mediaState.restoreStreamAfterTrickPlay = null;\n this.switchInternal_(normalVideo, /* clearBuffer= */ true,\n /* safeMargin= */ 0, /* force= */ false);\n }\n }\n\n\n /**\n * @param {shaka.extern.Variant} variant\n * @param {boolean=} clearBuffer\n * @param {number=} safeMargin\n * @param {boolean=} force\n * If true, reload the variant even if it did not change.\n * @param {boolean=} adaptation\n * If true, update the media state to indicate MediaSourceEngine should\n * reset the timestamp offset to ensure the new track segments are correctly\n * placed on the timeline.\n */\n switchVariant(\n variant, clearBuffer = false, safeMargin = 0, force = false,\n adaptation = false) {\n this.currentVariant_ = variant;\n\n if (!this.startupComplete_) {\n // The selected variant will be used in start().\n return;\n }\n\n if (variant.video) {\n this.switchInternal_(\n variant.video, /* clearBuffer= */ clearBuffer,\n /* safeMargin= */ safeMargin, /* force= */ force,\n /* adaptation= */ adaptation);\n }\n if (variant.audio) {\n this.switchInternal_(\n variant.audio, /* clearBuffer= */ clearBuffer,\n /* safeMargin= */ safeMargin, /* force= */ force,\n /* adaptation= */ adaptation);\n }\n }\n\n\n /**\n * @param {shaka.extern.Stream} textStream\n */\n async switchTextStream(textStream) {\n this.lastTextMediaStateBeforeUnload_ = null;\n this.currentTextStream_ = textStream;\n\n if (!this.startupComplete_) {\n // The selected text stream will be used in start().\n return;\n }\n\n const ContentType = shaka.util.ManifestParserUtils.ContentType;\n goog.asserts.assert(textStream && textStream.type == ContentType.TEXT,\n 'Wrong stream type passed to switchTextStream!');\n\n // In HLS it is possible that the mimetype changes when the media\n // playlist is downloaded, so it is necessary to have the updated data\n // here.\n if (!textStream.segmentIndex) {\n await textStream.createSegmentIndex();\n }\n\n this.switchInternal_(\n textStream, /* clearBuffer= */ true,\n /* safeMargin= */ 0, /* force= */ false);\n }\n\n\n /** Reload the current text stream. */\n reloadTextStream() {\n const ContentType = shaka.util.ManifestParserUtils.ContentType;\n const mediaState = this.mediaStates_.get(ContentType.TEXT);\n if (mediaState) { // Don't reload if there's no text to begin with.\n this.switchInternal_(\n mediaState.stream, /* clearBuffer= */ true,\n /* safeMargin= */ 0, /* force= */ true);\n }\n }\n\n\n /**\n * Handles deferred releases of old SegmentIndexes for the mediaState's\n * content type from a previous update.\n * @param {!shaka.media.StreamingEngine.MediaState_} mediaState\n * @private\n */\n handleDeferredCloseSegmentIndexes_(mediaState) {\n for (const [key, value] of this.deferredCloseSegmentIndex_.entries()) {\n const streamId = /** @type {string} */ (key);\n const closeSegmentIndex = /** @type {!function()} */ (value);\n if (streamId.includes(mediaState.type)) {\n closeSegmentIndex();\n this.deferredCloseSegmentIndex_.delete(streamId);\n }\n }\n }\n\n\n /**\n * Switches to the given Stream. |stream| may be from any Variant.\n *\n * @param {shaka.extern.Stream} stream\n * @param {boolean} clearBuffer\n * @param {number} safeMargin\n * @param {boolean} force\n * If true, reload the text stream even if it did not change.\n * @param {boolean=} adaptation\n * If true, update the media state to indicate MediaSourceEngine should\n * reset the timestamp offset to ensure the new track segments are correctly\n * placed on the timeline.\n * @private\n */\n switchInternal_(stream, clearBuffer, safeMargin, force, adaptation) {\n const ContentType = shaka.util.ManifestParserUtils.ContentType;\n const type = /** @type {!ContentType} */(stream.type);\n const mediaState = this.mediaStates_.get(type);\n\n if (!mediaState && stream.type == ContentType.TEXT) {\n this.loadNewTextStream_(stream);\n return;\n }\n\n goog.asserts.assert(mediaState, 'switch: expected mediaState to exist');\n if (!mediaState) {\n return;\n }\n\n if (mediaState.restoreStreamAfterTrickPlay) {\n shaka.log.debug('switch during trick play mode', stream);\n\n // Already in trick play mode, so stick with trick mode tracks if\n // possible.\n if (stream.trickModeVideo) {\n // Use the trick mode stream, but revert to the new selection later.\n mediaState.restoreStreamAfterTrickPlay = stream;\n stream = stream.trickModeVideo;\n shaka.log.debug('switch found trick play stream', stream);\n } else {\n // There is no special trick mode video for this stream!\n mediaState.restoreStreamAfterTrickPlay = null;\n shaka.log.debug('switch found no special trick play stream');\n }\n }\n\n if (mediaState.stream == stream && !force) {\n const streamTag = shaka.media.StreamingEngine.logPrefix_(mediaState);\n shaka.log.debug('switch: Stream ' + streamTag + ' already active');\n return;\n }\n\n if (this.audioPrefetchMap_.has(stream)) {\n mediaState.segmentPrefetch = this.audioPrefetchMap_.get(stream);\n } else if (mediaState.segmentPrefetch) {\n mediaState.segmentPrefetch.switchStream(stream);\n }\n\n if (stream.type == ContentType.TEXT) {\n // Mime types are allowed to change for text streams.\n // Reinitialize the text parser, but only if we are going to fetch the\n // init segment again.\n const fullMimeType = shaka.util.MimeUtils.getFullType(\n stream.mimeType, stream.codecs);\n this.playerInterface_.mediaSourceEngine.reinitText(\n fullMimeType, this.manifest_.sequenceMode, stream.external);\n }\n\n // Releases the segmentIndex of the old stream.\n // Do not close segment indexes we are prefetching.\n if (!this.audioPrefetchMap_.has(mediaState.stream)) {\n if (mediaState.stream.closeSegmentIndex) {\n if (mediaState.performingUpdate) {\n const oldStreamTag =\n shaka.media.StreamingEngine.logPrefix_(mediaState);\n if (!this.deferredCloseSegmentIndex_.has(oldStreamTag)) {\n // The ongoing update is still using the old stream's segment\n // reference information.\n // If we close the old stream now, the update will not complete\n // correctly.\n // The next onUpdate_() for this content type will resume the\n // closeSegmentIndex() operation for the old stream once the ongoing\n // update has finished, then immediately create a new segment index.\n this.deferredCloseSegmentIndex_.set(\n oldStreamTag, mediaState.stream.closeSegmentIndex);\n }\n } else {\n mediaState.stream.closeSegmentIndex();\n }\n }\n }\n\n const shouldResetMediaSource =\n mediaState.stream.isAudioMuxedInVideo != stream.isAudioMuxedInVideo;\n\n mediaState.stream = stream;\n mediaState.segmentIterator = null;\n mediaState.adaptation = !!adaptation;\n\n const streamTag = shaka.media.StreamingEngine.logPrefix_(mediaState);\n shaka.log.debug('switch: switching to Stream ' + streamTag);\n\n if (shouldResetMediaSource) {\n this.resetMediaSource(/* force= */ true, /* clearBuffer= */ false);\n return;\n }\n\n if (clearBuffer) {\n if (mediaState.clearingBuffer) {\n // We are already going to clear the buffer, but make sure it is also\n // flushed.\n mediaState.waitingToFlushBuffer = true;\n } else if (mediaState.performingUpdate) {\n // We are performing an update, so we have to wait until it's finished.\n // onUpdate_() will call clearBuffer_() when the update has finished.\n // We need to save the safe margin because its value will be needed when\n // clearing the buffer after the update.\n mediaState.waitingToClearBuffer = true;\n mediaState.clearBufferSafeMargin = safeMargin;\n mediaState.waitingToFlushBuffer = true;\n } else {\n // Cancel the update timer, if any.\n this.cancelUpdate_(mediaState);\n // Clear right away.\n this.clearBuffer_(mediaState, /* flush= */ true, safeMargin)\n .catch((error) => {\n if (this.playerInterface_) {\n goog.asserts.assert(error instanceof shaka.util.Error,\n 'Wrong error type!');\n this.playerInterface_.onError(error);\n }\n });\n }\n } else {\n if (!mediaState.performingUpdate && !mediaState.updateTimer) {\n this.scheduleUpdate_(mediaState, 0);\n }\n }\n\n this.makeAbortDecision_(mediaState).catch((error) => {\n if (this.playerInterface_) {\n goog.asserts.assert(error instanceof shaka.util.Error,\n 'Wrong error type!');\n this.playerInterface_.onError(error);\n }\n });\n }\n\n\n /**\n * Decide if it makes sense to abort the current operation, and abort it if\n * so.\n *\n * @param {!shaka.media.StreamingEngine.MediaState_} mediaState\n * @private\n */\n async makeAbortDecision_(mediaState) {\n // If the operation is completed, it will be set to null, and there's no\n // need to abort the request.\n if (!mediaState.operation) {\n return;\n }\n\n const originalStream = mediaState.stream;\n const originalOperation = mediaState.operation;\n\n if (!originalStream.segmentIndex) {\n // Create the new segment index so the time taken is accounted for when\n // deciding whether to abort.\n await originalStream.createSegmentIndex();\n }\n\n if (mediaState.operation != originalOperation) {\n // The original operation completed while we were getting a segment index,\n // so there's nothing to do now.\n return;\n }\n\n if (mediaState.stream != originalStream) {\n // The stream changed again while we were getting a segment index. We\n // can't carry out this check, since another one might be in progress by\n // now.\n return;\n }\n\n goog.asserts.assert(mediaState.stream.segmentIndex,\n 'Segment index should exist by now!');\n\n if (this.shouldAbortCurrentRequest_(mediaState)) {\n shaka.log.info('Aborting current segment request.');\n mediaState.operation.abort();\n }\n }\n\n /**\n * Returns whether we should abort the current request.\n *\n * @param {!shaka.media.StreamingEngine.MediaState_} mediaState\n * @return {boolean}\n * @private\n */\n shouldAbortCurrentRequest_(mediaState) {\n goog.asserts.assert(mediaState.operation,\n 'Abort logic requires an ongoing operation!');\n goog.asserts.assert(mediaState.stream && mediaState.stream.segmentIndex,\n 'Abort logic requires a segment index');\n\n const presentationTime = this.playerInterface_.getPresentationTime();\n const bufferEnd =\n this.playerInterface_.mediaSourceEngine.bufferEnd(mediaState.type);\n\n // The next segment to append from the current stream. This doesn't\n // account for a pending network request and will likely be different from\n // that since we just switched.\n const timeNeeded = this.getTimeNeeded_(mediaState, presentationTime);\n const index = mediaState.stream.segmentIndex.find(timeNeeded);\n const newSegment =\n index == null ? null : mediaState.stream.segmentIndex.get(index);\n\n let newSegmentSize = newSegment ? newSegment.getSize() : null;\n if (newSegment && !newSegmentSize) {\n // compute approximate segment size using stream bandwidth\n const duration = newSegment.getEndTime() - newSegment.getStartTime();\n const bandwidth = mediaState.stream.bandwidth || 0;\n // bandwidth is in bits per second, and the size is in bytes\n newSegmentSize = duration * bandwidth / 8;\n }\n\n if (!newSegmentSize) {\n return false;\n }\n\n // When switching, we'll need to download the init segment.\n const init = newSegment.initSegmentReference;\n if (init) {\n newSegmentSize += init.getSize() || 0;\n }\n\n const bandwidthEstimate = this.playerInterface_.getBandwidthEstimate();\n\n // The estimate is in bits per second, and the size is in bytes. The time\n // remaining is in seconds after this calculation.\n const timeToFetchNewSegment = (newSegmentSize * 8) / bandwidthEstimate;\n\n // If the new segment can be finished in time without risking a buffer\n // underflow, we should abort the old one and switch.\n const bufferedAhead = (bufferEnd || 0) - presentationTime;\n const safetyBuffer = Math.max(\n this.manifest_.minBufferTime || 0,\n this.config_.rebufferingGoal);\n const safeBufferedAhead = bufferedAhead - safetyBuffer;\n if (timeToFetchNewSegment < safeBufferedAhead) {\n return true;\n }\n\n // If the thing we want to switch to will be done more quickly than what\n // we've got in progress, we should abort the old one and switch.\n const bytesRemaining = mediaState.operation.getBytesRemaining();\n if (bytesRemaining > newSegmentSize) {\n return true;\n }\n\n // Otherwise, complete the operation in progress.\n return false;\n }\n\n\n /**\n * Notifies the StreamingEngine that the playhead has moved to a valid time\n * within the presentation timeline.\n */\n seeked() {\n if (!this.playerInterface_) {\n // Already destroyed.\n return;\n }\n\n const presentationTime = this.playerInterface_.getPresentationTime();\n const ContentType = shaka.util.ManifestParserUtils.ContentType;\n const newTimeIsBuffered = (type) => {\n return this.playerInterface_.mediaSourceEngine.isBuffered(\n type, presentationTime);\n };\n\n let streamCleared = false;\n for (const type of this.mediaStates_.keys()) {\n const mediaState = this.mediaStates_.get(type);\n const logPrefix = shaka.media.StreamingEngine.logPrefix_(mediaState);\n\n if (!newTimeIsBuffered(type)) {\n if (mediaState.segmentPrefetch) {\n mediaState.segmentPrefetch.resetPosition();\n }\n if (mediaState.type === ContentType.AUDIO) {\n for (const prefetch of this.audioPrefetchMap_.values()) {\n prefetch.resetPosition();\n }\n }\n mediaState.segmentIterator = null;\n const bufferEnd =\n this.playerInterface_.mediaSourceEngine.bufferEnd(type);\n const somethingBuffered = bufferEnd != null;\n\n // Don't clear the buffer unless something is buffered. This extra\n // check prevents extra, useless calls to clear the buffer.\n if (somethingBuffered || mediaState.performingUpdate) {\n this.forceClearBuffer_(mediaState);\n streamCleared = true;\n }\n\n // If there is an operation in progress, stop it now.\n if (mediaState.operation) {\n mediaState.operation.abort();\n shaka.log.debug(logPrefix, 'Aborting operation due to seek');\n mediaState.operation = null;\n }\n\n // The pts has shifted from the seek, invalidating captions currently\n // in the text buffer. Thus, clear and reset the caption parser.\n if (type === ContentType.TEXT) {\n this.playerInterface_.mediaSourceEngine.resetCaptionParser();\n }\n\n // Mark the media state as having seeked, so that the new buffers know\n // that they will need to be at a new position (for sequence mode).\n mediaState.seeked = true;\n }\n }\n\n if (!streamCleared) {\n shaka.log.debug(\n '(all): seeked: buffered seek: presentationTime=' + presentationTime);\n }\n }\n\n\n /**\n * Clear the buffer for a given stream. Unlike clearBuffer_, this will handle\n * cases where a MediaState is performing an update. After this runs, the\n * MediaState will have a pending update.\n * @param {!shaka.media.StreamingEngine.MediaState_} mediaState\n * @private\n */\n forceClearBuffer_(mediaState) {\n const logPrefix = shaka.media.StreamingEngine.logPrefix_(mediaState);\n\n if (mediaState.clearingBuffer) {\n // We're already clearing the buffer, so we don't need to clear the\n // buffer again.\n shaka.log.debug(logPrefix, 'clear: already clearing the buffer');\n return;\n }\n\n if (mediaState.waitingToClearBuffer) {\n // May not be performing an update, but an update will still happen.\n // See: https://github.com/shaka-project/shaka-player/issues/334\n shaka.log.debug(logPrefix, 'clear: already waiting');\n return;\n }\n\n if (mediaState.performingUpdate) {\n // We are performing an update, so we have to wait until it's finished.\n // onUpdate_() will call clearBuffer_() when the update has finished.\n shaka.log.debug(logPrefix, 'clear: currently updating');\n mediaState.waitingToClearBuffer = true;\n // We can set the offset to zero to remember that this was a call to\n // clearAllBuffers.\n mediaState.clearBufferSafeMargin = 0;\n return;\n }\n\n const type = mediaState.type;\n if (this.playerInterface_.mediaSourceEngine.bufferStart(type) == null) {\n // Nothing buffered.\n shaka.log.debug(logPrefix, 'clear: nothing buffered');\n if (mediaState.updateTimer == null) {\n // Note: an update cycle stops when we buffer to the end of the\n // presentation, or when we raise an error.\n this.scheduleUpdate_(mediaState, 0);\n }\n return;\n }\n\n // An update may be scheduled, but we can just cancel it and clear the\n // buffer right away. Note: clearBuffer_() will schedule the next update.\n shaka.log.debug(logPrefix, 'clear: handling right now');\n this.cancelUpdate_(mediaState);\n this.clearBuffer_(mediaState, /* flush= */ false, 0).catch((error) => {\n if (this.playerInterface_) {\n goog.asserts.assert(error instanceof shaka.util.Error,\n 'Wrong error type!');\n this.playerInterface_.onError(error);\n }\n });\n }\n\n\n /**\n * Initializes the initial streams and media states. This will schedule\n * updates for the given types.\n *\n * @param {!Map.} segmentPrefetchById\n * @return {!Promise}\n * @private\n */\n async initStreams_(segmentPrefetchById) {\n const ContentType = shaka.util.ManifestParserUtils.ContentType;\n\n goog.asserts.assert(this.config_,\n 'StreamingEngine configure() must be called before init()!');\n\n if (!this.currentVariant_) {\n shaka.log.error('init: no Streams chosen');\n throw new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.STREAMING,\n shaka.util.Error.Code.STREAMING_ENGINE_STARTUP_INVALID_STATE);\n }\n\n /**\n * @type {!Map.}\n */\n const streamsByType = new Map();\n /** @type {!Set.} */\n const streams = new Set();\n\n if (this.currentVariant_.audio) {\n streamsByType.set(ContentType.AUDIO, this.currentVariant_.audio);\n streams.add(this.currentVariant_.audio);\n }\n\n if (this.currentVariant_.video) {\n streamsByType.set(ContentType.VIDEO, this.currentVariant_.video);\n streams.add(this.currentVariant_.video);\n }\n\n if (this.currentTextStream_) {\n streamsByType.set(ContentType.TEXT, this.currentTextStream_);\n streams.add(this.currentTextStream_);\n }\n\n // Init MediaSourceEngine.\n const mediaSourceEngine = this.playerInterface_.mediaSourceEngine;\n\n await mediaSourceEngine.init(streamsByType,\n this.manifest_.sequenceMode,\n this.manifest_.type,\n this.manifest_.ignoreManifestTimestampsInSegmentsMode,\n );\n this.destroyer_.ensureNotDestroyed();\n\n this.updateDuration();\n\n for (const type of streamsByType.keys()) {\n const stream = streamsByType.get(type);\n if (!this.mediaStates_.has(type)) {\n const mediaState = this.createMediaState_(stream);\n if (segmentPrefetchById.has(stream.id)) {\n const segmentPrefetch = segmentPrefetchById.get(stream.id);\n segmentPrefetch.replaceFetchDispatcher(\n (reference, stream, streamDataCallback) => {\n return this.dispatchFetch_(\n reference, stream, streamDataCallback);\n });\n mediaState.segmentPrefetch = segmentPrefetch;\n }\n this.mediaStates_.set(type, mediaState);\n this.scheduleUpdate_(mediaState, 0);\n }\n }\n }\n\n\n /**\n * Creates a media state.\n *\n * @param {shaka.extern.Stream} stream\n * @return {shaka.media.StreamingEngine.MediaState_}\n * @private\n */\n createMediaState_(stream) {\n return /** @type {shaka.media.StreamingEngine.MediaState_} */ ({\n stream,\n type: stream.type,\n segmentIterator: null,\n segmentPrefetch: this.createSegmentPrefetch_(stream),\n lastSegmentReference: null,\n lastInitSegmentReference: null,\n lastTimestampOffset: null,\n lastAppendWindowStart: null,\n lastAppendWindowEnd: null,\n restoreStreamAfterTrickPlay: null,\n endOfStream: false,\n performingUpdate: false,\n updateTimer: null,\n waitingToClearBuffer: false,\n clearBufferSafeMargin: 0,\n waitingToFlushBuffer: false,\n clearingBuffer: false,\n // The playhead might be seeking on startup, if a start time is set, so\n // start \"seeked\" as true.\n seeked: true,\n recovering: false,\n hasError: false,\n operation: null,\n });\n }\n\n /**\n * Creates a media state.\n *\n * @param {shaka.extern.Stream} stream\n * @return {shaka.media.SegmentPrefetch | null}\n * @private\n */\n createSegmentPrefetch_(stream) {\n const ContentType = shaka.util.ManifestParserUtils.ContentType;\n if (stream.type === ContentType.VIDEO &&\n this.config_.disableVideoPrefetch) {\n return null;\n }\n if (stream.type === ContentType.AUDIO &&\n this.config_.disableAudioPrefetch) {\n return null;\n }\n const MimeUtils = shaka.util.MimeUtils;\n const CEA608_MIME = MimeUtils.CEA608_CLOSED_CAPTION_MIMETYPE;\n const CEA708_MIME = MimeUtils.CEA708_CLOSED_CAPTION_MIMETYPE;\n if (stream.type === ContentType.TEXT &&\n (stream.mimeType == CEA608_MIME || stream.mimeType == CEA708_MIME)) {\n return null;\n }\n if (stream.type === ContentType.TEXT &&\n this.config_.disableTextPrefetch) {\n return null;\n }\n if (this.audioPrefetchMap_.has(stream)) {\n return this.audioPrefetchMap_.get(stream);\n }\n const type = /** @type {!shaka.util.ManifestParserUtils.ContentType} */\n (stream.type);\n const mediaState = this.mediaStates_.get(type);\n const currentSegmentPrefetch = mediaState && mediaState.segmentPrefetch;\n if (currentSegmentPrefetch &&\n stream === currentSegmentPrefetch.getStream()) {\n return currentSegmentPrefetch;\n }\n if (this.config_.segmentPrefetchLimit > 0) {\n const reverse = this.playerInterface_.getPlaybackRate() < 0;\n return new shaka.media.SegmentPrefetch(\n this.config_.segmentPrefetchLimit,\n stream,\n (reference, stream, streamDataCallback) => {\n return this.dispatchFetch_(reference, stream, streamDataCallback);\n },\n reverse);\n }\n return null;\n }\n\n /**\n * Populates the prefetch map depending on the configuration\n * @private\n */\n updatePrefetchMapForAudio_() {\n const prefetchLimit = this.config_.segmentPrefetchLimit;\n const prefetchLanguages = this.config_.prefetchAudioLanguages;\n const LanguageUtils = shaka.util.LanguageUtils;\n\n for (const variant of this.manifest_.variants) {\n if (!variant.audio) {\n continue;\n }\n\n if (this.audioPrefetchMap_.has(variant.audio)) {\n // if we already have a segment prefetch,\n // update it's prefetch limit and if the new limit isn't positive,\n // remove the segment prefetch from our prefetch map.\n const prefetch = this.audioPrefetchMap_.get(variant.audio);\n prefetch.resetLimit(prefetchLimit);\n if (!(prefetchLimit > 0) ||\n !prefetchLanguages.some(\n (lang) => LanguageUtils.areLanguageCompatible(\n variant.audio.language, lang))\n ) {\n const type = /** @type {!shaka.util.ManifestParserUtils.ContentType}*/\n (variant.audio.type);\n const mediaState = this.mediaStates_.get(type);\n const currentSegmentPrefetch = mediaState &&\n mediaState.segmentPrefetch;\n // if this prefetch isn't the current one, we want to clear it\n if (prefetch !== currentSegmentPrefetch) {\n prefetch.clearAll();\n }\n this.audioPrefetchMap_.delete(variant.audio);\n }\n continue;\n }\n\n // don't try to create a new segment prefetch if the limit isn't positive.\n if (prefetchLimit <= 0) {\n continue;\n }\n\n // only create a segment prefetch if its language is configured\n // to be prefetched\n if (!prefetchLanguages.some(\n (lang) => LanguageUtils.areLanguageCompatible(\n variant.audio.language, lang))) {\n continue;\n }\n\n // use the helper to create a segment prefetch to ensure that existing\n // objects are reused.\n const segmentPrefetch = this.createSegmentPrefetch_(variant.audio);\n\n // if a segment prefetch wasn't created, skip the rest\n if (!segmentPrefetch) {\n continue;\n }\n\n if (!variant.audio.segmentIndex) {\n variant.audio.createSegmentIndex();\n }\n\n this.audioPrefetchMap_.set(variant.audio, segmentPrefetch);\n }\n }\n\n /**\n * Sets the MediaSource's duration.\n */\n updateDuration() {\n const duration = this.manifest_.presentationTimeline.getDuration();\n if (duration < Infinity) {\n this.playerInterface_.mediaSourceEngine.setDuration(duration);\n } else {\n // To set the media source live duration as Infinity\n // If infiniteLiveStreamDuration as true\n const duration =\n this.config_.infiniteLiveStreamDuration ? Infinity : Math.pow(2, 32);\n // Not all platforms support infinite durations, so set a finite duration\n // so we can append segments and so the user agent can seek.\n this.playerInterface_.mediaSourceEngine.setDuration(duration);\n }\n }\n\n\n /**\n * Called when |mediaState|'s update timer has expired.\n *\n * @param {!shaka.media.StreamingEngine.MediaState_} mediaState\n * @suppress {suspiciousCode} The compiler assumes that updateTimer can't\n * change during the await, and so complains about the null check.\n * @private\n */\n async onUpdate_(mediaState) {\n this.destroyer_.ensureNotDestroyed();\n\n const logPrefix = shaka.media.StreamingEngine.logPrefix_(mediaState);\n\n // Sanity check.\n goog.asserts.assert(\n !mediaState.performingUpdate && (mediaState.updateTimer != null),\n logPrefix + ' unexpected call to onUpdate_()');\n if (mediaState.performingUpdate || (mediaState.updateTimer == null)) {\n return;\n }\n\n goog.asserts.assert(\n !mediaState.clearingBuffer, logPrefix +\n ' onUpdate_() should not be called when clearing the buffer');\n if (mediaState.clearingBuffer) {\n return;\n }\n\n mediaState.updateTimer = null;\n\n // Handle pending buffer clears.\n if (mediaState.waitingToClearBuffer) {\n // Note: clearBuffer_() will schedule the next update.\n shaka.log.debug(logPrefix, 'skipping update and clearing the buffer');\n await this.clearBuffer_(\n mediaState, mediaState.waitingToFlushBuffer,\n mediaState.clearBufferSafeMargin);\n return;\n }\n\n // If stream switches happened during the previous update_() for this\n // content type, close out the old streams that were switched away from.\n // Even if we had switched away from the active stream 'A' during the\n // update_(), e.g. (A -> B -> A), closing 'A' is permissible here since we\n // will immediately re-create it in the logic below.\n this.handleDeferredCloseSegmentIndexes_(mediaState);\n\n // Make sure the segment index exists. If not, create the segment index.\n if (!mediaState.stream.segmentIndex) {\n const thisStream = mediaState.stream;\n\n try {\n await mediaState.stream.createSegmentIndex();\n } catch (error) {\n await this.handleStreamingError_(mediaState, error);\n return;\n }\n\n if (thisStream != mediaState.stream) {\n // We switched streams while in the middle of this async call to\n // createSegmentIndex. Abandon this update and schedule a new one if\n // there's not already one pending.\n // Releases the segmentIndex of the old stream.\n if (thisStream.closeSegmentIndex) {\n goog.asserts.assert(!mediaState.stream.segmentIndex,\n 'mediastate.stream should not have segmentIndex yet.');\n thisStream.closeSegmentIndex();\n }\n if (!mediaState.performingUpdate && !mediaState.updateTimer) {\n this.scheduleUpdate_(mediaState, 0);\n }\n return;\n }\n }\n\n // Update the MediaState.\n try {\n const delay = this.update_(mediaState);\n if (delay != null) {\n this.scheduleUpdate_(mediaState, delay);\n mediaState.hasError = false;\n }\n } catch (error) {\n await this.handleStreamingError_(mediaState, error);\n return;\n }\n\n const mediaStates = Array.from(this.mediaStates_.values());\n\n // Check if we've buffered to the end of the presentation. We delay adding\n // the audio and video media states, so it is possible for the text stream\n // to be the only state and buffer to the end. So we need to wait until we\n // have completed startup to determine if we have reached the end.\n if (this.startupComplete_ &&\n mediaStates.every((ms) => ms.endOfStream)) {\n shaka.log.v1(logPrefix, 'calling endOfStream()...');\n await this.playerInterface_.mediaSourceEngine.endOfStream();\n this.destroyer_.ensureNotDestroyed();\n\n // If the media segments don't reach the end, then we need to update the\n // timeline duration to match the final media duration to avoid\n // buffering forever at the end.\n // We should only do this if the duration needs to shrink.\n // Growing it by less than 1ms can actually cause buffering on\n // replay, as in https://github.com/shaka-project/shaka-player/issues/979\n // On some platforms, this can spuriously be 0, so ignore this case.\n // https://github.com/shaka-project/shaka-player/issues/1967,\n const duration = this.playerInterface_.mediaSourceEngine.getDuration();\n if (duration != 0 &&\n duration < this.manifest_.presentationTimeline.getDuration()) {\n this.manifest_.presentationTimeline.setDuration(duration);\n }\n }\n }\n\n\n /**\n * Updates the given MediaState.\n *\n * @param {shaka.media.StreamingEngine.MediaState_} mediaState\n * @return {?number} The number of seconds to wait until updating again or\n * null if another update does not need to be scheduled.\n * @private\n */\n update_(mediaState) {\n goog.asserts.assert(this.manifest_, 'manifest_ should not be null');\n goog.asserts.assert(this.config_, 'config_ should not be null');\n\n const ContentType = shaka.util.ManifestParserUtils.ContentType;\n\n // Do not schedule update for closed captions text mediastate, since closed\n // captions are embedded in video streams.\n if (shaka.media.StreamingEngine.isEmbeddedText_(mediaState)) {\n this.playerInterface_.mediaSourceEngine.setSelectedClosedCaptionId(\n mediaState.stream.originalId || '');\n return null;\n } else if (mediaState.type == ContentType.TEXT) {\n // Disable embedded captions if not desired (e.g. if transitioning from\n // embedded to not-embedded captions).\n this.playerInterface_.mediaSourceEngine.clearSelectedClosedCaptionId();\n }\n\n if (mediaState.stream.isAudioMuxedInVideo) {\n return null;\n }\n\n if (!this.playerInterface_.mediaSourceEngine.isStreamingAllowed() &&\n mediaState.type != ContentType.TEXT) {\n // It is not allowed to add segments yet, so we schedule an update to\n // check again later. So any prediction we make now could be terribly\n // invalid soon.\n return this.config_.updateIntervalSeconds / 2;\n }\n\n const logPrefix = shaka.media.StreamingEngine.logPrefix_(mediaState);\n\n // Compute how far we've buffered ahead of the playhead.\n const presentationTime = this.playerInterface_.getPresentationTime();\n\n if (mediaState.type === ContentType.AUDIO) {\n // evict all prefetched segments that are before the presentationTime\n for (const stream of this.audioPrefetchMap_.keys()) {\n const prefetch = this.audioPrefetchMap_.get(stream);\n prefetch.evict(presentationTime, /* clearInitSegments= */ true);\n prefetch.prefetchSegmentsByTime(presentationTime);\n }\n }\n\n // Get the next timestamp we need.\n const timeNeeded = this.getTimeNeeded_(mediaState, presentationTime);\n shaka.log.v2(logPrefix, 'timeNeeded=' + timeNeeded);\n\n // Get the amount of content we have buffered, accounting for drift. This\n // is only used to determine if we have meet the buffering goal. This\n // should be the same method that PlayheadObserver uses.\n const bufferedAhead =\n this.playerInterface_.mediaSourceEngine.bufferedAheadOf(\n mediaState.type, presentationTime);\n\n shaka.log.v2(logPrefix,\n 'update_:',\n 'presentationTime=' + presentationTime,\n 'bufferedAhead=' + bufferedAhead);\n\n const unscaledBufferingGoal = Math.max(\n this.manifest_.minBufferTime || 0,\n this.config_.rebufferingGoal,\n this.config_.bufferingGoal);\n\n const scaledBufferingGoal = Math.max(1,\n unscaledBufferingGoal * this.bufferingScale_);\n\n // Check if we've buffered to the end of the presentation.\n const timeUntilEnd =\n this.manifest_.presentationTimeline.getDuration() - timeNeeded;\n const oneMicrosecond = 1e-6;\n\n const bufferEnd =\n this.playerInterface_.mediaSourceEngine.bufferEnd(mediaState.type);\n\n if (timeUntilEnd < oneMicrosecond && !!bufferEnd) {\n // We shouldn't rebuffer if the playhead is close to the end of the\n // presentation.\n shaka.log.debug(logPrefix, 'buffered to end of presentation');\n mediaState.endOfStream = true;\n\n if (mediaState.type == ContentType.VIDEO) {\n // Since the text stream of CEA closed captions doesn't have update\n // timer, we have to set the text endOfStream based on the video\n // stream's endOfStream state.\n const textState = this.mediaStates_.get(ContentType.TEXT);\n if (textState &&\n shaka.media.StreamingEngine.isEmbeddedText_(textState)) {\n textState.endOfStream = true;\n }\n }\n return null;\n }\n mediaState.endOfStream = false;\n\n // If we've buffered to the buffering goal then schedule an update.\n if (bufferedAhead >= scaledBufferingGoal) {\n shaka.log.v2(logPrefix, 'buffering goal met');\n\n // Do not try to predict the next update. Just poll according to\n // configuration (seconds). The playback rate can change at any time, so\n // any prediction we make now could be terribly invalid soon.\n return this.config_.updateIntervalSeconds / 2;\n }\n\n // Lack of segment iterator is the best indicator stream has changed.\n const streamChanged = !mediaState.segmentIterator;\n const reference = this.getSegmentReferenceNeeded_(\n mediaState, presentationTime, bufferEnd);\n if (!reference) {\n // The segment could not be found, does not exist, or is not available.\n // In any case just try again... if the manifest is incomplete or is not\n // being updated then we'll idle forever; otherwise, we'll end up getting\n // a SegmentReference eventually.\n return this.config_.updateIntervalSeconds;\n }\n // Get media state adaptation and reset this value. By guarding it during\n // actual stream change we ensure it won't be cleaned by accident on regular\n // append.\n let adaptation = false;\n if (streamChanged && mediaState.adaptation) {\n adaptation = true;\n mediaState.adaptation = false;\n }\n\n // Do not let any one stream get far ahead of any other.\n let minTimeNeeded = Infinity;\n const mediaStates = Array.from(this.mediaStates_.values());\n for (const otherState of mediaStates) {\n // Do not consider embedded captions in this calculation. It could lead\n // to hangs in streaming.\n if (shaka.media.StreamingEngine.isEmbeddedText_(otherState)) {\n continue;\n }\n // If there is no next segment, ignore this stream. This happens with\n // text when there's a Period with no text in it.\n if (otherState.segmentIterator && !otherState.segmentIterator.current()) {\n continue;\n }\n\n const timeNeeded = this.getTimeNeeded_(otherState, presentationTime);\n minTimeNeeded = Math.min(minTimeNeeded, timeNeeded);\n }\n\n const maxSegmentDuration =\n this.manifest_.presentationTimeline.getMaxSegmentDuration();\n const maxRunAhead = maxSegmentDuration *\n shaka.media.StreamingEngine.MAX_RUN_AHEAD_SEGMENTS_;\n if (timeNeeded >= minTimeNeeded + maxRunAhead) {\n // Wait and give other media types time to catch up to this one.\n // For example, let video buffering catch up to audio buffering before\n // fetching another audio segment.\n shaka.log.v2(logPrefix, 'waiting for other streams to buffer');\n return this.config_.updateIntervalSeconds;\n }\n\n if (mediaState.segmentPrefetch && mediaState.segmentIterator &&\n !this.audioPrefetchMap_.has(mediaState.stream)) {\n mediaState.segmentPrefetch.evict(reference.startTime);\n mediaState.segmentPrefetch.prefetchSegmentsByTime(reference.startTime);\n }\n\n const p = this.fetchAndAppend_(mediaState, presentationTime, reference,\n adaptation);\n p.catch(() => {}); // TODO(#1993): Handle asynchronous errors.\n return null;\n }\n\n\n /**\n * Gets the next timestamp needed. Returns the playhead's position if the\n * buffer is empty; otherwise, returns the time at which the last segment\n * appended ends.\n *\n * @param {shaka.media.StreamingEngine.MediaState_} mediaState\n * @param {number} presentationTime\n * @return {number} The next timestamp needed.\n * @private\n */\n getTimeNeeded_(mediaState, presentationTime) {\n // Get the next timestamp we need. We must use |lastSegmentReference|\n // to determine this and not the actual buffer for two reasons:\n // 1. Actual segments end slightly before their advertised end times, so\n // the next timestamp we need is actually larger than |bufferEnd|.\n // 2. There may be drift (the timestamps in the segments are ahead/behind\n // of the timestamps in the manifest), but we need drift-free times\n // when comparing times against the presentation timeline.\n if (!mediaState.lastSegmentReference) {\n return presentationTime;\n }\n\n return mediaState.lastSegmentReference.endTime;\n }\n\n\n /**\n * Gets the SegmentReference of the next segment needed.\n *\n * @param {shaka.media.StreamingEngine.MediaState_} mediaState\n * @param {number} presentationTime\n * @param {?number} bufferEnd\n * @return {shaka.media.SegmentReference} The SegmentReference of the\n * next segment needed. Returns null if a segment could not be found, does\n * not exist, or is not available.\n * @private\n */\n getSegmentReferenceNeeded_(mediaState, presentationTime, bufferEnd) {\n const logPrefix = shaka.media.StreamingEngine.logPrefix_(mediaState);\n goog.asserts.assert(\n mediaState.stream.segmentIndex,\n 'segment index should have been generated already');\n\n if (mediaState.segmentIterator) {\n // Something is buffered from the same Stream. Use the current position\n // in the segment index. This is updated via next() after each segment is\n // appended.\n return mediaState.segmentIterator.current();\n } else if (mediaState.lastSegmentReference || bufferEnd) {\n // Something is buffered from another Stream.\n const time = mediaState.lastSegmentReference ?\n mediaState.lastSegmentReference.endTime :\n bufferEnd;\n goog.asserts.assert(time != null, 'Should have a time to search');\n shaka.log.v1(\n logPrefix, 'looking up segment from new stream endTime:', time);\n\n const reverse = this.playerInterface_.getPlaybackRate() < 0;\n if (mediaState.stream.segmentIndex) {\n mediaState.segmentIterator =\n mediaState.stream.segmentIndex.getIteratorForTime(\n time, /* allowNonIndepedent= */ false, reverse);\n }\n const ref = mediaState.segmentIterator &&\n mediaState.segmentIterator.next().value;\n if (ref == null) {\n shaka.log.warning(logPrefix, 'cannot find segment', 'endTime:', time);\n }\n return ref;\n } else {\n // Nothing is buffered. Start at the playhead time.\n\n // If there's positive drift then we need to adjust the lookup time, and\n // may wind up requesting the previous segment to be safe.\n // inaccurateManifestTolerance should be 0 for low latency streaming.\n const inaccurateTolerance = this.manifest_.sequenceMode ?\n 0 : this.config_.inaccurateManifestTolerance;\n const lookupTime = Math.max(presentationTime - inaccurateTolerance, 0);\n\n shaka.log.v1(logPrefix, 'looking up segment',\n 'lookupTime:', lookupTime,\n 'presentationTime:', presentationTime);\n\n const reverse = this.playerInterface_.getPlaybackRate() < 0;\n let ref = null;\n if (inaccurateTolerance) {\n if (mediaState.stream.segmentIndex) {\n mediaState.segmentIterator =\n mediaState.stream.segmentIndex.getIteratorForTime(\n lookupTime, /* allowNonIndepedent= */ false, reverse);\n }\n ref = mediaState.segmentIterator &&\n mediaState.segmentIterator.next().value;\n }\n if (!ref) {\n // If we can't find a valid segment with the drifted time, look for a\n // segment with the presentation time.\n if (mediaState.stream.segmentIndex) {\n mediaState.segmentIterator =\n mediaState.stream.segmentIndex.getIteratorForTime(\n presentationTime, /* allowNonIndepedent= */ false, reverse);\n }\n ref = mediaState.segmentIterator &&\n mediaState.segmentIterator.next().value;\n }\n if (ref == null) {\n shaka.log.warning(logPrefix, 'cannot find segment',\n 'lookupTime:', lookupTime,\n 'presentationTime:', presentationTime);\n }\n return ref;\n }\n }\n\n\n /**\n * Fetches and appends the given segment. Sets up the given MediaState's\n * associated SourceBuffer and evicts segments if either are required\n * beforehand. Schedules another update after completing successfully.\n *\n * @param {!shaka.media.StreamingEngine.MediaState_} mediaState\n * @param {number} presentationTime\n * @param {!shaka.media.SegmentReference} reference\n * @param {boolean} adaptation\n * @private\n */\n async fetchAndAppend_(mediaState, presentationTime, reference, adaptation) {\n const ContentType = shaka.util.ManifestParserUtils.ContentType;\n const StreamingEngine = shaka.media.StreamingEngine;\n const logPrefix = StreamingEngine.logPrefix_(mediaState);\n\n shaka.log.v1(logPrefix,\n 'fetchAndAppend_:',\n 'presentationTime=' + presentationTime,\n 'reference.startTime=' + reference.startTime,\n 'reference.endTime=' + reference.endTime);\n\n // Subtlety: The playhead may move while asynchronous update operations are\n // in progress, so we should avoid calling playhead.getTime() in any\n // callbacks. Furthermore, switch() or seeked() may be called at any time,\n // so we store the old iterator. This allows the mediaState to change and\n // we'll update the old iterator.\n const stream = mediaState.stream;\n const iter = mediaState.segmentIterator;\n\n mediaState.performingUpdate = true;\n\n try {\n if (reference.getStatus() ==\n shaka.media.SegmentReference.Status.MISSING) {\n throw new shaka.util.Error(\n shaka.util.Error.Severity.RECOVERABLE,\n shaka.util.Error.Category.NETWORK,\n shaka.util.Error.Code.SEGMENT_MISSING);\n }\n await this.initSourceBuffer_(mediaState, reference, adaptation);\n this.destroyer_.ensureNotDestroyed();\n if (this.fatalError_) {\n return;\n }\n\n shaka.log.v2(logPrefix, 'fetching segment');\n const isMP4 = stream.mimeType == 'video/mp4' ||\n stream.mimeType == 'audio/mp4';\n const isReadableStreamSupported = window.ReadableStream;\n const lowLatencyMode = this.config_.lowLatencyMode &&\n this.manifest_.isLowLatency;\n // Enable MP4 low latency streaming with ReadableStream chunked data.\n // And only for DASH and HLS with byterange optimization.\n if (lowLatencyMode && isReadableStreamSupported && isMP4 &&\n (this.manifest_.type != shaka.media.ManifestParser.HLS ||\n reference.hasByterangeOptimization())) {\n let remaining = new Uint8Array(0);\n let processingResult = false;\n let callbackCalled = false;\n let streamDataCallbackError;\n const streamDataCallback = async (data) => {\n if (processingResult) {\n // If the fallback result processing was triggered, don't also\n // append the buffer here. In theory this should never happen,\n // but it does on some older TVs.\n return;\n }\n callbackCalled = true;\n this.destroyer_.ensureNotDestroyed();\n if (this.fatalError_) {\n return;\n }\n try {\n // Append the data with complete boxes.\n // Every time streamDataCallback gets called, append the new data\n // to the remaining data.\n // Find the last fully completed Mdat box, and slice the data into\n // two parts: the first part with completed Mdat boxes, and the\n // second part with an incomplete box.\n // Append the first part, and save the second part as remaining\n // data, and handle it with the next streamDataCallback call.\n remaining = this.concatArray_(remaining, data);\n let sawMDAT = false;\n let offset = 0;\n new shaka.util.Mp4Parser()\n .box('mdat', (box) => {\n offset = box.size + box.start;\n sawMDAT = true;\n })\n .parse(remaining, /* partialOkay= */ false,\n /* isChunkedData= */ true);\n if (sawMDAT) {\n const dataToAppend = remaining.subarray(0, offset);\n remaining = remaining.subarray(offset);\n await this.append_(\n mediaState, presentationTime, stream, reference, dataToAppend,\n /* isChunkedData= */ true, adaptation);\n\n if (mediaState.segmentPrefetch && mediaState.segmentIterator) {\n mediaState.segmentPrefetch.prefetchSegmentsByTime(\n reference.startTime, /* skipFirst= */ true);\n }\n }\n } catch (error) {\n streamDataCallbackError = error;\n }\n };\n\n const result =\n await this.fetch_(mediaState, reference, streamDataCallback);\n if (streamDataCallbackError) {\n throw streamDataCallbackError;\n }\n if (!callbackCalled) {\n // In some environments, we might be forced to use network plugins\n // that don't support streamDataCallback. In those cases, as a\n // fallback, append the buffer here.\n processingResult = true;\n this.destroyer_.ensureNotDestroyed();\n if (this.fatalError_) {\n return;\n }\n\n // If the text stream gets switched between fetch_() and append_(),\n // the new text parser is initialized, but the new init segment is\n // not fetched yet. That would cause an error in\n // TextParser.parseMedia().\n // See http://b/168253400\n if (mediaState.waitingToClearBuffer) {\n shaka.log.info(logPrefix, 'waitingToClearBuffer, skip append');\n mediaState.performingUpdate = false;\n this.scheduleUpdate_(mediaState, 0);\n return;\n }\n\n await this.append_(mediaState, presentationTime, stream, reference,\n result, /* chunkedData= */ false, adaptation);\n }\n\n if (mediaState.segmentPrefetch && mediaState.segmentIterator) {\n mediaState.segmentPrefetch.prefetchSegmentsByTime(\n reference.startTime, /* skipFirst= */ true);\n }\n } else {\n if (lowLatencyMode && !isReadableStreamSupported) {\n shaka.log.warning('Low latency streaming mode is enabled, but ' +\n 'ReadableStream is not supported by the browser.');\n }\n const fetchSegment = this.fetch_(mediaState, reference);\n const result = await fetchSegment;\n this.destroyer_.ensureNotDestroyed();\n if (this.fatalError_) {\n return;\n }\n this.destroyer_.ensureNotDestroyed();\n\n // If the text stream gets switched between fetch_() and append_(), the\n // new text parser is initialized, but the new init segment is not\n // fetched yet. That would cause an error in TextParser.parseMedia().\n // See http://b/168253400\n if (mediaState.waitingToClearBuffer) {\n shaka.log.info(logPrefix, 'waitingToClearBuffer, skip append');\n mediaState.performingUpdate = false;\n this.scheduleUpdate_(mediaState, 0);\n return;\n }\n\n await this.append_(mediaState, presentationTime, stream, reference,\n result, /* chunkedData= */ false, adaptation);\n }\n\n this.destroyer_.ensureNotDestroyed();\n if (this.fatalError_) {\n return;\n }\n // move to next segment after appending the current segment.\n mediaState.lastSegmentReference = reference;\n const newRef = iter.next().value;\n shaka.log.v2(logPrefix, 'advancing to next segment', newRef);\n\n mediaState.performingUpdate = false;\n mediaState.recovering = false;\n\n const info = this.playerInterface_.mediaSourceEngine.getBufferedInfo();\n const buffered = info[mediaState.type];\n // Convert the buffered object to a string capture its properties on\n // WebOS.\n shaka.log.v1(logPrefix, 'finished fetch and append',\n JSON.stringify(buffered));\n\n if (!mediaState.waitingToClearBuffer) {\n this.playerInterface_.onSegmentAppended(reference, mediaState.stream);\n }\n\n // Update right away.\n this.scheduleUpdate_(mediaState, 0);\n } catch (error) {\n this.destroyer_.ensureNotDestroyed(error);\n if (this.fatalError_) {\n return;\n }\n goog.asserts.assert(error instanceof shaka.util.Error,\n 'Should only receive a Shaka error');\n\n mediaState.performingUpdate = false;\n\n if (error.code == shaka.util.Error.Code.OPERATION_ABORTED) {\n // If the network slows down, abort the current fetch request and start\n // a new one, and ignore the error message.\n mediaState.performingUpdate = false;\n this.cancelUpdate_(mediaState);\n this.scheduleUpdate_(mediaState, 0);\n } else if (mediaState.type == ContentType.TEXT &&\n this.config_.ignoreTextStreamFailures) {\n if (error.code == shaka.util.Error.Code.BAD_HTTP_STATUS) {\n shaka.log.warning(logPrefix,\n 'Text stream failed to download. Proceeding without it.');\n } else {\n shaka.log.warning(logPrefix,\n 'Text stream failed to parse. Proceeding without it.');\n }\n this.mediaStates_.delete(ContentType.TEXT);\n } else if (error.code == shaka.util.Error.Code.QUOTA_EXCEEDED_ERROR) {\n await this.handleQuotaExceeded_(mediaState, error);\n } else {\n shaka.log.error(logPrefix, 'failed fetch and append: code=' +\n error.code);\n mediaState.hasError = true;\n\n if (error.category == shaka.util.Error.Category.NETWORK &&\n mediaState.segmentPrefetch) {\n mediaState.segmentPrefetch.removeReference(reference);\n }\n\n error.severity = shaka.util.Error.Severity.CRITICAL;\n await this.handleStreamingError_(mediaState, error);\n }\n }\n }\n\n\n /**\n * Clear per-stream error states and retry any failed streams.\n * @param {number} delaySeconds\n * @return {boolean} False if unable to retry.\n */\n retry(delaySeconds) {\n if (this.destroyer_.destroyed()) {\n shaka.log.error('Unable to retry after StreamingEngine is destroyed!');\n return false;\n }\n\n if (this.fatalError_) {\n shaka.log.error('Unable to retry after StreamingEngine encountered a ' +\n 'fatal error!');\n return false;\n }\n\n for (const mediaState of this.mediaStates_.values()) {\n const logPrefix = shaka.media.StreamingEngine.logPrefix_(mediaState);\n // Only schedule an update if it has an error, but it's not mid-update\n // and there is not already an update scheduled.\n if (mediaState.hasError && !mediaState.performingUpdate &&\n !mediaState.updateTimer) {\n shaka.log.info(logPrefix, 'Retrying after failure...');\n mediaState.hasError = false;\n this.scheduleUpdate_(mediaState, delaySeconds);\n }\n }\n\n return true;\n }\n\n\n /**\n * Append the data to the remaining data.\n * @param {!Uint8Array} remaining\n * @param {!Uint8Array} data\n * @return {!Uint8Array}\n * @private\n */\n concatArray_(remaining, data) {\n const result = new Uint8Array(remaining.length + data.length);\n result.set(remaining);\n result.set(data, remaining.length);\n return result;\n }\n\n\n /**\n * Handles a QUOTA_EXCEEDED_ERROR.\n *\n * @param {shaka.media.StreamingEngine.MediaState_} mediaState\n * @param {!shaka.util.Error} error\n * @return {!Promise}\n * @private\n */\n async handleQuotaExceeded_(mediaState, error) {\n const logPrefix = shaka.media.StreamingEngine.logPrefix_(mediaState);\n\n // The segment cannot fit into the SourceBuffer. Ideally, MediaSource would\n // have evicted old data to accommodate the segment; however, it may have\n // failed to do this if the segment is very large, or if it could not find\n // a suitable time range to remove.\n //\n // We can overcome the latter by trying to append the segment again;\n // however, to avoid continuous QuotaExceededErrors we must reduce the size\n // of the buffer going forward.\n //\n // If we've recently reduced the buffering goals, wait until the stream\n // which caused the first QuotaExceededError recovers. Doing this ensures\n // we don't reduce the buffering goals too quickly.\n\n const mediaStates = Array.from(this.mediaStates_.values());\n const waitingForAnotherStreamToRecover = mediaStates.some((ms) => {\n return ms != mediaState && ms.recovering;\n });\n\n if (!waitingForAnotherStreamToRecover) {\n const maxDisabledTime = this.getDisabledTime_(error);\n if (maxDisabledTime) {\n shaka.log.debug(logPrefix, 'Disabling stream due to quota', error);\n }\n const handled = this.playerInterface_.disableStream(\n mediaState.stream, maxDisabledTime);\n if (handled) {\n return;\n }\n // Reduction schedule: 80%, 60%, 40%, 20%, 16%, 12%, 8%, 4%, fail.\n // Note: percentages are used for comparisons to avoid rounding errors.\n const percentBefore = Math.round(100 * this.bufferingScale_);\n if (percentBefore > 20) {\n this.bufferingScale_ -= 0.2;\n } else if (percentBefore > 4) {\n this.bufferingScale_ -= 0.04;\n } else {\n shaka.log.error(\n logPrefix, 'MediaSource threw QuotaExceededError too many times');\n mediaState.hasError = true;\n this.fatalError_ = true;\n this.playerInterface_.onError(error);\n return;\n }\n const percentAfter = Math.round(100 * this.bufferingScale_);\n shaka.log.warning(\n logPrefix,\n 'MediaSource threw QuotaExceededError:',\n 'reducing buffering goals by ' + (100 - percentAfter) + '%');\n mediaState.recovering = true;\n const presentationTime = this.playerInterface_.getPresentationTime();\n await this.evict_(mediaState, presentationTime);\n } else {\n shaka.log.debug(\n logPrefix,\n 'MediaSource threw QuotaExceededError:',\n 'waiting for another stream to recover...');\n }\n\n // QuotaExceededError gets thrown if eviction didn't help to make room\n // for a segment. We want to wait for a while (4 seconds is just an\n // arbitrary number) before updating to give the playhead a chance to\n // advance, so we don't immediately throw again.\n this.scheduleUpdate_(mediaState, 4);\n }\n\n\n /**\n * Sets the given MediaState's associated SourceBuffer's timestamp offset,\n * append window, and init segment if they have changed. If an error occurs\n * then neither the timestamp offset or init segment are unset, since another\n * call to switch() will end up superseding them.\n *\n * @param {shaka.media.StreamingEngine.MediaState_} mediaState\n * @param {!shaka.media.SegmentReference} reference\n * @param {boolean} adaptation\n * @return {!Promise}\n * @private\n */\n async initSourceBuffer_(mediaState, reference, adaptation) {\n const ContentType = shaka.util.ManifestParserUtils.ContentType;\n const MimeUtils = shaka.util.MimeUtils;\n const StreamingEngine = shaka.media.StreamingEngine;\n const logPrefix = StreamingEngine.logPrefix_(mediaState);\n const nullLastReferences = mediaState.lastSegmentReference == null;\n\n /** @type {!Array.} */\n const operations = [];\n\n // Rounding issues can cause us to remove the first frame of a Period, so\n // reduce the window start time slightly.\n const appendWindowStart = Math.max(0,\n Math.max(reference.appendWindowStart, this.playRangeStart_) -\n StreamingEngine.APPEND_WINDOW_START_FUDGE_);\n const appendWindowEnd =\n Math.min(reference.appendWindowEnd, this.playRangeEnd_) +\n StreamingEngine.APPEND_WINDOW_END_FUDGE_;\n\n goog.asserts.assert(\n reference.startTime <= appendWindowEnd,\n logPrefix + ' segment should start before append window end');\n\n const fullCodecs = (reference.codecs || mediaState.stream.codecs);\n const codecs = MimeUtils.getCodecBase(fullCodecs);\n const mimeType = MimeUtils.getBasicType(\n reference.mimeType || mediaState.stream.mimeType);\n const timestampOffset = reference.timestampOffset;\n if (timestampOffset != mediaState.lastTimestampOffset ||\n appendWindowStart != mediaState.lastAppendWindowStart ||\n appendWindowEnd != mediaState.lastAppendWindowEnd ||\n codecs != mediaState.lastCodecs ||\n mimeType != mediaState.lastMimeType) {\n shaka.log.v1(logPrefix, 'setting timestamp offset to ' + timestampOffset);\n shaka.log.v1(logPrefix,\n 'setting append window start to ' + appendWindowStart);\n shaka.log.v1(logPrefix,\n 'setting append window end to ' + appendWindowEnd);\n\n const isResetMediaSourceNecessary =\n mediaState.lastCodecs && mediaState.lastMimeType &&\n this.playerInterface_.mediaSourceEngine.isResetMediaSourceNecessary(\n mediaState.type, mediaState.stream, mimeType, fullCodecs);\n if (isResetMediaSourceNecessary) {\n let otherState = null;\n if (mediaState.type === ContentType.VIDEO) {\n otherState = this.mediaStates_.get(ContentType.AUDIO);\n } else if (mediaState.type === ContentType.AUDIO) {\n otherState = this.mediaStates_.get(ContentType.VIDEO);\n }\n if (otherState) {\n // First, abort all operations in progress on the other stream.\n await this.abortOperations_(otherState).catch(() => {});\n // Then clear our cache of the last init segment, since MSE will be\n // reloaded and no init segment will be there post-reload.\n otherState.lastInitSegmentReference = null;\n // Now force the existing buffer to be cleared. It is not necessary\n // to perform the MSE clear operation, but this has the side-effect\n // that our state for that stream will then match MSE's post-reload\n // state.\n this.forceClearBuffer_(otherState);\n }\n }\n\n // Dispatching init asynchronously causes the sourceBuffers in\n // the MediaSourceEngine to become detached do to race conditions\n // with mediaSource and sourceBuffers being created simultaneously.\n await this.setProperties_(mediaState, timestampOffset, appendWindowStart,\n appendWindowEnd, reference, codecs, mimeType);\n }\n\n if (!shaka.media.InitSegmentReference.equal(\n reference.initSegmentReference, mediaState.lastInitSegmentReference)) {\n mediaState.lastInitSegmentReference = reference.initSegmentReference;\n\n if (reference.isIndependent() && reference.initSegmentReference) {\n shaka.log.v1(logPrefix, 'fetching init segment');\n\n const fetchInit =\n this.fetch_(mediaState, reference.initSegmentReference);\n const append = async () => {\n try {\n const initSegment = await fetchInit;\n this.destroyer_.ensureNotDestroyed();\n\n let lastTimescale = null;\n const timescaleMap = new Map();\n\n /** @type {!shaka.extern.SpatialVideoInfo} */\n const spatialVideoInfo = {\n projection: null,\n hfov: null,\n };\n\n const parser = new shaka.util.Mp4Parser();\n const Mp4Parser = shaka.util.Mp4Parser;\n const Mp4BoxParsers = shaka.util.Mp4BoxParsers;\n parser.box('moov', Mp4Parser.children)\n .box('trak', Mp4Parser.children)\n .box('mdia', Mp4Parser.children)\n .fullBox('mdhd', (box) => {\n goog.asserts.assert(\n box.version != null,\n 'MDHD is a full box and should have a valid version.');\n const parsedMDHDBox = Mp4BoxParsers.parseMDHD(\n box.reader, box.version);\n lastTimescale = parsedMDHDBox.timescale;\n })\n .box('hdlr', (box) => {\n const parsedHDLR = Mp4BoxParsers.parseHDLR(box.reader);\n switch (parsedHDLR.handlerType) {\n case 'soun':\n timescaleMap.set(ContentType.AUDIO, lastTimescale);\n break;\n case 'vide':\n timescaleMap.set(ContentType.VIDEO, lastTimescale);\n break;\n }\n lastTimescale = null;\n })\n .box('minf', Mp4Parser.children)\n .box('stbl', Mp4Parser.children)\n .fullBox('stsd', Mp4Parser.sampleDescription)\n .box('encv', Mp4Parser.visualSampleEntry)\n .box('avc1', Mp4Parser.visualSampleEntry)\n .box('avc3', Mp4Parser.visualSampleEntry)\n .box('hev1', Mp4Parser.visualSampleEntry)\n .box('hvc1', Mp4Parser.visualSampleEntry)\n .box('dvav', Mp4Parser.visualSampleEntry)\n .box('dva1', Mp4Parser.visualSampleEntry)\n .box('dvh1', Mp4Parser.visualSampleEntry)\n .box('dvhe', Mp4Parser.visualSampleEntry)\n .box('dvc1', Mp4Parser.visualSampleEntry)\n .box('dvi1', Mp4Parser.visualSampleEntry)\n .box('vexu', Mp4Parser.children)\n .box('proj', Mp4Parser.children)\n .fullBox('prji', (box) => {\n const parsedPRJIBox = Mp4BoxParsers.parsePRJI(box.reader);\n spatialVideoInfo.projection = parsedPRJIBox.projection;\n })\n .box('hfov', (box) => {\n const parsedHFOVBox = Mp4BoxParsers.parseHFOV(box.reader);\n spatialVideoInfo.hfov = parsedHFOVBox.hfov;\n })\n .parse(initSegment);\n\n this.updateSpatialVideoInfo_(spatialVideoInfo);\n\n if (timescaleMap.has(mediaState.type)) {\n reference.initSegmentReference.timescale =\n timescaleMap.get(mediaState.type);\n } else if (lastTimescale != null) {\n // Fallback for segments without HDLR box\n reference.initSegmentReference.timescale = lastTimescale;\n }\n\n shaka.log.v1(logPrefix, 'appending init segment');\n const hasClosedCaptions = mediaState.stream.closedCaptions &&\n mediaState.stream.closedCaptions.size > 0;\n await this.playerInterface_.beforeAppendSegment(\n mediaState.type, initSegment);\n await this.playerInterface_.mediaSourceEngine.appendBuffer(\n mediaState.type, initSegment, /* reference= */ null,\n mediaState.stream, hasClosedCaptions, mediaState.seeked,\n adaptation);\n } catch (error) {\n mediaState.lastInitSegmentReference = null;\n throw error;\n }\n };\n let initSegmentTime = reference.startTime;\n if (nullLastReferences) {\n const bufferEnd =\n this.playerInterface_.mediaSourceEngine.bufferEnd(mediaState.type);\n if (bufferEnd != null) {\n // Adjust init segment appendance time if we have something in\n // a buffer, i.e. due to running switchVariant() with non zero\n // safe margin value.\n initSegmentTime = bufferEnd;\n }\n }\n this.playerInterface_.onInitSegmentAppended(\n initSegmentTime, reference.initSegmentReference);\n operations.push(append());\n }\n }\n\n const lastDiscontinuitySequence =\n mediaState.lastSegmentReference ?\n mediaState.lastSegmentReference.discontinuitySequence : null;\n // Across discontinuity bounds, we should resync timestamps. The next\n // segment appended should land at its theoretical timestamp from the\n // segment index.\n if (reference.discontinuitySequence != lastDiscontinuitySequence) {\n operations.push(this.playerInterface_.mediaSourceEngine.resync(\n mediaState.type, reference.startTime));\n }\n\n await Promise.all(operations);\n }\n\n /**\n *\n * @param {!shaka.media.StreamingEngine.MediaState_} mediaState\n * @param {number} timestampOffset\n * @param {number} appendWindowStart\n * @param {number} appendWindowEnd\n * @param {!shaka.media.SegmentReference} reference\n * @param {?string=} codecs\n * @param {?string=} mimeType\n * @private\n */\n async setProperties_(mediaState, timestampOffset, appendWindowStart,\n appendWindowEnd, reference, codecs, mimeType) {\n const ContentType = shaka.util.ManifestParserUtils.ContentType;\n\n /**\n * @type {!Map.}\n */\n const streamsByType = new Map();\n if (this.currentVariant_.audio) {\n streamsByType.set(ContentType.AUDIO, this.currentVariant_.audio);\n }\n if (this.currentVariant_.video) {\n streamsByType.set(ContentType.VIDEO, this.currentVariant_.video);\n }\n try {\n mediaState.lastAppendWindowStart = appendWindowStart;\n mediaState.lastAppendWindowEnd = appendWindowEnd;\n if (codecs) {\n mediaState.lastCodecs = codecs;\n }\n if (mimeType) {\n mediaState.lastMimeType = mimeType;\n }\n mediaState.lastTimestampOffset = timestampOffset;\n\n const ignoreTimestampOffset = this.manifest_.sequenceMode ||\n this.manifest_.type == shaka.media.ManifestParser.HLS;\n\n await this.playerInterface_.mediaSourceEngine.setStreamProperties(\n mediaState.type, timestampOffset, appendWindowStart,\n appendWindowEnd, ignoreTimestampOffset,\n reference.mimeType || mediaState.stream.mimeType,\n reference.codecs || mediaState.stream.codecs, streamsByType);\n } catch (error) {\n mediaState.lastAppendWindowStart = null;\n mediaState.lastAppendWindowEnd = null;\n mediaState.lastCodecs = null;\n mediaState.lastMimeType = null;\n mediaState.lastTimestampOffset = null;\n\n throw error;\n }\n }\n\n\n /**\n * Appends the given segment and evicts content if required to append.\n *\n * @param {!shaka.media.StreamingEngine.MediaState_} mediaState\n * @param {number} presentationTime\n * @param {shaka.extern.Stream} stream\n * @param {!shaka.media.SegmentReference} reference\n * @param {BufferSource} segment\n * @param {boolean=} isChunkedData\n * @param {boolean=} adaptation\n * @return {!Promise}\n * @private\n */\n async append_(mediaState, presentationTime, stream, reference, segment,\n isChunkedData = false, adaptation = false) {\n const logPrefix = shaka.media.StreamingEngine.logPrefix_(mediaState);\n\n const hasClosedCaptions = stream.closedCaptions &&\n stream.closedCaptions.size > 0;\n\n if (this.config_.shouldFixTimestampOffset) {\n let parser;\n\n const isMP4 = stream.mimeType == 'video/mp4' ||\n stream.mimeType == 'audio/mp4';\n let timescale = null;\n if (reference.initSegmentReference) {\n timescale = reference.initSegmentReference.timescale;\n }\n const shouldFixTimestampOffset = isMP4 && timescale &&\n stream.type === shaka.util.ManifestParserUtils.ContentType.VIDEO &&\n this.manifest_.type == shaka.media.ManifestParser.DASH;\n\n if (shouldFixTimestampOffset) {\n parser = new shaka.util.Mp4Parser();\n }\n\n if (shouldFixTimestampOffset) {\n parser\n .box('moof', shaka.util.Mp4Parser.children)\n .box('traf', shaka.util.Mp4Parser.children)\n .fullBox('tfdt', async (box) => {\n goog.asserts.assert(\n box.version != null,\n 'TFDT is a full box and should have a valid version.');\n\n const parsedTFDT = shaka.util.Mp4BoxParsers.parseTFDTInaccurate(\n box.reader, box.version);\n\n const baseMediaDecodeTime = parsedTFDT.baseMediaDecodeTime;\n\n // In case the time is 0, it is not updated\n if (!baseMediaDecodeTime) {\n return;\n }\n goog.asserts.assert(typeof(timescale) == 'number',\n 'Should be an number!');\n\n const scaledMediaDecodeTime = -baseMediaDecodeTime / timescale;\n\n const comparison1 = Number(mediaState.lastTimestampOffset) || 0;\n\n if (comparison1 < scaledMediaDecodeTime) {\n const lastAppendWindowStart = mediaState.lastAppendWindowStart;\n const lastAppendWindowEnd = mediaState.lastAppendWindowEnd;\n goog.asserts.assert(typeof(lastAppendWindowStart) == 'number',\n 'Should be an number!');\n goog.asserts.assert(typeof(lastAppendWindowEnd) == 'number',\n 'Should be an number!');\n await this.setProperties_(mediaState, scaledMediaDecodeTime,\n lastAppendWindowStart, lastAppendWindowEnd, reference);\n }\n });\n }\n\n if (shouldFixTimestampOffset) {\n parser.parse(segment, /* partialOkay= */ false, isChunkedData);\n }\n }\n\n await this.evict_(mediaState, presentationTime);\n this.destroyer_.ensureNotDestroyed();\n\n // 'seeked' or 'adaptation' triggered logic applies only to this\n // appendBuffer() call.\n const seeked = mediaState.seeked;\n mediaState.seeked = false;\n\n await this.playerInterface_.beforeAppendSegment(mediaState.type, segment);\n await this.playerInterface_.mediaSourceEngine.appendBuffer(\n mediaState.type,\n segment,\n reference,\n stream,\n hasClosedCaptions,\n seeked,\n adaptation,\n isChunkedData);\n this.destroyer_.ensureNotDestroyed();\n shaka.log.v2(logPrefix, 'appended media segment');\n }\n\n /**\n * Evicts media to meet the max buffer behind limit.\n *\n * @param {shaka.media.StreamingEngine.MediaState_} mediaState\n * @param {number} presentationTime\n * @private\n */\n async evict_(mediaState, presentationTime) {\n const segmentIndex = mediaState.stream.segmentIndex;\n if (segmentIndex instanceof shaka.media.MetaSegmentIndex) {\n segmentIndex.evict(\n this.manifest_.presentationTimeline.getSeekRangeStart());\n }\n\n const logPrefix = shaka.media.StreamingEngine.logPrefix_(mediaState);\n shaka.log.v2(logPrefix, 'checking buffer length');\n\n // Use the max segment duration, if it is longer than the bufferBehind, to\n // avoid accidentally clearing too much data when dealing with a manifest\n // with a long keyframe interval.\n const bufferBehind = Math.max(\n this.config_.bufferBehind * this.bufferingScale_,\n this.manifest_.presentationTimeline.getMaxSegmentDuration());\n\n const startTime =\n this.playerInterface_.mediaSourceEngine.bufferStart(mediaState.type);\n if (startTime == null) {\n if (this.lastTextMediaStateBeforeUnload_ == mediaState) {\n this.lastTextMediaStateBeforeUnload_ = null;\n }\n shaka.log.v2(logPrefix,\n 'buffer behind okay because nothing buffered:',\n 'presentationTime=' + presentationTime,\n 'bufferBehind=' + bufferBehind);\n return;\n }\n const bufferedBehind = presentationTime - startTime;\n\n const overflow = bufferedBehind - bufferBehind;\n // See: https://github.com/shaka-project/shaka-player/issues/6240\n if (overflow <= this.config_.evictionGoal) {\n shaka.log.v2(logPrefix,\n 'buffer behind okay:',\n 'presentationTime=' + presentationTime,\n 'bufferedBehind=' + bufferedBehind,\n 'bufferBehind=' + bufferBehind,\n 'evictionGoal=' + this.config_.evictionGoal,\n 'underflow=' + Math.abs(overflow));\n return;\n }\n\n shaka.log.v1(logPrefix,\n 'buffer behind too large:',\n 'presentationTime=' + presentationTime,\n 'bufferedBehind=' + bufferedBehind,\n 'bufferBehind=' + bufferBehind,\n 'evictionGoal=' + this.config_.evictionGoal,\n 'overflow=' + overflow);\n\n await this.playerInterface_.mediaSourceEngine.remove(mediaState.type,\n startTime, startTime + overflow);\n\n this.destroyer_.ensureNotDestroyed();\n shaka.log.v1(logPrefix, 'evicted ' + overflow + ' seconds');\n\n if (this.lastTextMediaStateBeforeUnload_) {\n await this.evict_(this.lastTextMediaStateBeforeUnload_, presentationTime);\n this.destroyer_.ensureNotDestroyed();\n }\n }\n\n\n /**\n * @param {shaka.media.StreamingEngine.MediaState_} mediaState\n * @return {boolean}\n * @private\n */\n static isEmbeddedText_(mediaState) {\n const MimeUtils = shaka.util.MimeUtils;\n const CEA608_MIME = MimeUtils.CEA608_CLOSED_CAPTION_MIMETYPE;\n const CEA708_MIME = MimeUtils.CEA708_CLOSED_CAPTION_MIMETYPE;\n return mediaState &&\n mediaState.type == shaka.util.ManifestParserUtils.ContentType.TEXT &&\n (mediaState.stream.mimeType == CEA608_MIME ||\n mediaState.stream.mimeType == CEA708_MIME);\n }\n\n\n /**\n * Fetches the given segment.\n *\n * @param {!shaka.media.StreamingEngine.MediaState_} mediaState\n * @param {(!shaka.media.InitSegmentReference|!shaka.media.SegmentReference)}\n * reference\n * @param {?function(BufferSource):!Promise=} streamDataCallback\n *\n * @return {!Promise.}\n * @private\n */\n async fetch_(mediaState, reference, streamDataCallback) {\n const segmentData = reference.getSegmentData();\n if (segmentData) {\n return segmentData;\n }\n let op = null;\n if (mediaState.segmentPrefetch) {\n op = mediaState.segmentPrefetch.getPrefetchedSegment(\n reference, streamDataCallback);\n }\n if (!op) {\n op = this.dispatchFetch_(\n reference, mediaState.stream, streamDataCallback);\n }\n\n let position = 0;\n if (mediaState.segmentIterator) {\n position = mediaState.segmentIterator.currentPosition();\n }\n\n mediaState.operation = op;\n const response = await op.promise;\n mediaState.operation = null;\n let result = response.data;\n if (reference.aesKey) {\n result = await shaka.media.SegmentUtils.aesDecrypt(\n result, reference.aesKey, position);\n }\n return result;\n }\n\n /**\n * Fetches the given segment.\n *\n * @param {!shaka.extern.Stream} stream\n * @param {(!shaka.media.InitSegmentReference|!shaka.media.SegmentReference)}\n * reference\n * @param {?function(BufferSource):!Promise=} streamDataCallback\n * @param {boolean=} isPreload\n *\n * @return {!shaka.net.NetworkingEngine.PendingRequest}\n * @private\n */\n dispatchFetch_(reference, stream, streamDataCallback, isPreload = false) {\n goog.asserts.assert(\n this.playerInterface_.netEngine, 'Must have net engine');\n return shaka.media.StreamingEngine.dispatchFetch(\n reference, stream, streamDataCallback || null,\n this.config_.retryParameters, this.playerInterface_.netEngine);\n }\n\n /**\n * Fetches the given segment.\n *\n * @param {!shaka.extern.Stream} stream\n * @param {(!shaka.media.InitSegmentReference|!shaka.media.SegmentReference)}\n * reference\n * @param {?function(BufferSource):!Promise} streamDataCallback\n * @param {shaka.extern.RetryParameters} retryParameters\n * @param {!shaka.net.NetworkingEngine} netEngine\n * @param {boolean=} isPreload\n *\n * @return {!shaka.net.NetworkingEngine.PendingRequest}\n */\n static dispatchFetch(\n reference, stream, streamDataCallback, retryParameters, netEngine,\n isPreload = false) {\n const requestType = shaka.net.NetworkingEngine.RequestType.SEGMENT;\n const segment = reference instanceof shaka.media.SegmentReference ?\n reference : undefined;\n const type = segment ?\n shaka.net.NetworkingEngine.AdvancedRequestType.MEDIA_SEGMENT :\n shaka.net.NetworkingEngine.AdvancedRequestType.INIT_SEGMENT;\n const request = shaka.util.Networking.createSegmentRequest(\n reference.getUris(),\n reference.startByte,\n reference.endByte,\n retryParameters,\n streamDataCallback);\n request.contentType = stream.type;\n\n shaka.log.v2('fetching: reference=', reference);\n\n return netEngine.request(\n requestType, request, {type, stream, segment, isPreload});\n }\n\n /**\n * Clears the buffer and schedules another update.\n * The optional parameter safeMargin allows to retain a certain amount\n * of buffer, which can help avoiding rebuffering events.\n * The value of the safe margin should be provided by the ABR manager.\n *\n * @param {!shaka.media.StreamingEngine.MediaState_} mediaState\n * @param {boolean} flush\n * @param {number} safeMargin\n * @private\n */\n async clearBuffer_(mediaState, flush, safeMargin) {\n const logPrefix = shaka.media.StreamingEngine.logPrefix_(mediaState);\n\n goog.asserts.assert(\n !mediaState.performingUpdate && (mediaState.updateTimer == null),\n logPrefix + ' unexpected call to clearBuffer_()');\n\n mediaState.waitingToClearBuffer = false;\n mediaState.waitingToFlushBuffer = false;\n mediaState.clearBufferSafeMargin = 0;\n mediaState.clearingBuffer = true;\n mediaState.lastSegmentReference = null;\n mediaState.segmentIterator = null;\n\n shaka.log.debug(logPrefix, 'clearing buffer');\n if (mediaState.segmentPrefetch &&\n !this.audioPrefetchMap_.has(mediaState.stream)) {\n mediaState.segmentPrefetch.clearAll();\n }\n\n if (safeMargin) {\n const presentationTime = this.playerInterface_.getPresentationTime();\n const duration = this.playerInterface_.mediaSourceEngine.getDuration();\n await this.playerInterface_.mediaSourceEngine.remove(\n mediaState.type, presentationTime + safeMargin, duration);\n } else {\n await this.playerInterface_.mediaSourceEngine.clear(mediaState.type);\n this.destroyer_.ensureNotDestroyed();\n\n if (flush) {\n await this.playerInterface_.mediaSourceEngine.flush(\n mediaState.type);\n }\n }\n\n this.destroyer_.ensureNotDestroyed();\n\n shaka.log.debug(logPrefix, 'cleared buffer');\n mediaState.clearingBuffer = false;\n mediaState.endOfStream = false;\n // Since the clear operation was async, check to make sure we're not doing\n // another update and we don't have one scheduled yet.\n if (!mediaState.performingUpdate && !mediaState.updateTimer) {\n this.scheduleUpdate_(mediaState, 0);\n }\n }\n\n\n /**\n * Schedules |mediaState|'s next update.\n *\n * @param {!shaka.media.StreamingEngine.MediaState_} mediaState\n * @param {number} delay The delay in seconds.\n * @private\n */\n scheduleUpdate_(mediaState, delay) {\n const logPrefix = shaka.media.StreamingEngine.logPrefix_(mediaState);\n\n // If the text's update is canceled and its mediaState is deleted, stop\n // scheduling another update.\n const type = mediaState.type;\n if (type == shaka.util.ManifestParserUtils.ContentType.TEXT &&\n !this.mediaStates_.has(type)) {\n shaka.log.v1(logPrefix, 'Text stream is unloaded. No update is needed.');\n return;\n }\n\n shaka.log.v2(logPrefix, 'updating in ' + delay + ' seconds');\n goog.asserts.assert(mediaState.updateTimer == null,\n logPrefix + ' did not expect update to be scheduled');\n\n mediaState.updateTimer = new shaka.util.DelayedTick(async () => {\n try {\n await this.onUpdate_(mediaState);\n } catch (error) {\n if (this.playerInterface_) {\n this.playerInterface_.onError(error);\n }\n }\n }).tickAfter(delay);\n }\n\n\n /**\n * If |mediaState| is scheduled to update, stop it.\n *\n * @param {shaka.media.StreamingEngine.MediaState_} mediaState\n * @private\n */\n cancelUpdate_(mediaState) {\n if (mediaState.updateTimer == null) {\n return;\n }\n\n mediaState.updateTimer.stop();\n mediaState.updateTimer = null;\n }\n\n\n /**\n * If |mediaState| holds any in-progress operations, abort them.\n *\n * @return {!Promise}\n * @private\n */\n async abortOperations_(mediaState) {\n if (mediaState.operation) {\n await mediaState.operation.abort();\n }\n }\n\n /**\n * Handle streaming errors by delaying, then notifying the application by\n * error callback and by streaming failure callback.\n *\n * @param {shaka.media.StreamingEngine.MediaState_} mediaState\n * @param {!shaka.util.Error} error\n * @return {!Promise}\n * @private\n */\n async handleStreamingError_(mediaState, error) {\n const logPrefix = shaka.media.StreamingEngine.logPrefix_(mediaState);\n\n // If we invoke the callback right away, the application could trigger a\n // rapid retry cycle that could be very unkind to the server. Instead,\n // use the backoff system to delay and backoff the error handling.\n await this.failureCallbackBackoff_.attempt();\n this.destroyer_.ensureNotDestroyed();\n\n // Try to recover from network errors, but not timeouts.\n // See https://github.com/shaka-project/shaka-player/issues/7368\n if (error.category === shaka.util.Error.Category.NETWORK &&\n error.code != shaka.util.Error.Code.TIMEOUT) {\n if (mediaState.restoreStreamAfterTrickPlay) {\n this.setTrickPlay(/* on= */ false);\n return;\n }\n const maxDisabledTime = this.getDisabledTime_(error);\n if (maxDisabledTime) {\n shaka.log.debug(logPrefix, 'Disabling stream due to error', error);\n }\n error.handled = this.playerInterface_.disableStream(\n mediaState.stream, maxDisabledTime);\n\n // Decrease the error severity to recoverable\n if (error.handled) {\n error.severity = shaka.util.Error.Severity.RECOVERABLE;\n }\n }\n\n // First fire an error event.\n if (!error.handled ||\n error.code != shaka.util.Error.Code.SEGMENT_MISSING) {\n this.playerInterface_.onError(error);\n }\n\n // If the error was not handled by the application, call the failure\n // callback.\n if (!error.handled) {\n this.config_.failureCallback(error);\n }\n }\n\n /**\n * @param {!shaka.util.Error} error\n * @return {number}\n * @private\n */\n getDisabledTime_(error) {\n if (this.config_.maxDisabledTime === 0 &&\n error.code == shaka.util.Error.Code.SEGMENT_MISSING) {\n // Spec: https://datatracker.ietf.org/doc/html/draft-pantos-hls-rfc8216bis#section-6.3.3\n // The client SHOULD NOT attempt to load Media Segments that have been\n // marked with an EXT-X-GAP tag, or to load Partial Segments with a\n // GAP=YES attribute. Instead, clients are encouraged to look for\n // another Variant Stream of the same Rendition which does not have the\n // same gap, and play that instead.\n return 1;\n }\n\n return this.config_.maxDisabledTime;\n }\n\n /**\n * Reset Media Source\n *\n * @param {boolean=} force\n * @return {!Promise.}\n */\n async resetMediaSource(force = false, clearBuffer = true) {\n const now = (Date.now() / 1000);\n const minTimeBetweenRecoveries = this.config_.minTimeBetweenRecoveries;\n if (!force) {\n if (!this.config_.allowMediaSourceRecoveries ||\n (now - this.lastMediaSourceReset_) < minTimeBetweenRecoveries) {\n return false;\n }\n this.lastMediaSourceReset_ = now;\n }\n const ContentType = shaka.util.ManifestParserUtils.ContentType;\n const audioMediaState = this.mediaStates_.get(ContentType.AUDIO);\n if (audioMediaState) {\n audioMediaState.lastInitSegmentReference = null;\n if (clearBuffer) {\n this.forceClearBuffer_(audioMediaState);\n }\n this.abortOperations_(audioMediaState).catch(() => {});\n if (audioMediaState.segmentIterator) {\n audioMediaState.segmentIterator.resetToLastIndependent();\n }\n }\n const videoMediaState = this.mediaStates_.get(ContentType.VIDEO);\n if (videoMediaState) {\n videoMediaState.lastInitSegmentReference = null;\n if (clearBuffer) {\n this.forceClearBuffer_(videoMediaState);\n }\n this.abortOperations_(videoMediaState).catch(() => {});\n if (videoMediaState.segmentIterator) {\n videoMediaState.segmentIterator.resetToLastIndependent();\n }\n }\n /**\n * @type {!Map.}\n */\n const streamsByType = new Map();\n if (this.currentVariant_.audio) {\n streamsByType.set(ContentType.AUDIO, this.currentVariant_.audio);\n }\n if (this.currentVariant_.video) {\n streamsByType.set(ContentType.VIDEO, this.currentVariant_.video);\n }\n await this.playerInterface_.mediaSourceEngine.reset(streamsByType);\n if (videoMediaState &&\n !videoMediaState.performingUpdate && !videoMediaState.updateTimer) {\n this.scheduleUpdate_(videoMediaState, 0);\n }\n if (audioMediaState &&\n !audioMediaState.performingUpdate && !audioMediaState.updateTimer) {\n this.scheduleUpdate_(audioMediaState, 0);\n }\n return true;\n }\n\n /**\n * Update the spatial video info and notify to the app.\n *\n * @param {shaka.extern.SpatialVideoInfo} info\n * @private\n */\n updateSpatialVideoInfo_(info) {\n if (this.spatialVideoInfo_.projection != info.projection ||\n this.spatialVideoInfo_.hfov != info.hfov) {\n const EventName = shaka.util.FakeEvent.EventName;\n let event;\n if (info.projection != null || info.hfov != null) {\n const eventName = EventName.SpatialVideoInfoEvent;\n const data = (new Map()).set('detail', info);\n event = new shaka.util.FakeEvent(eventName, data);\n } else {\n const eventName = EventName.NoSpatialVideoInfoEvent;\n event = new shaka.util.FakeEvent(eventName);\n }\n event.cancelable = true;\n this.playerInterface_.onEvent(event);\n this.spatialVideoInfo_ = info;\n }\n }\n\n /**\n * Update the segment iterator direction.\n *\n * @private\n */\n updateSegmentIteratorReverse_() {\n const reverse = this.playerInterface_.getPlaybackRate() < 0;\n for (const mediaState of this.mediaStates_.values()) {\n if (mediaState.segmentIterator) {\n mediaState.segmentIterator.setReverse(reverse);\n }\n if (mediaState.segmentPrefetch) {\n mediaState.segmentPrefetch.setReverse(reverse);\n }\n }\n for (const prefetch of this.audioPrefetchMap_.values()) {\n prefetch.setReverse(reverse);\n }\n }\n\n /**\n * @param {shaka.media.StreamingEngine.MediaState_} mediaState\n * @return {string} A log prefix of the form ($CONTENT_TYPE:$STREAM_ID), e.g.,\n * \"(audio:5)\" or \"(video:hd)\".\n * @private\n */\n static logPrefix_(mediaState) {\n return '(' + mediaState.type + ':' + mediaState.stream.id + ')';\n }\n};\n\n\n/**\n * @typedef {{\n * getPresentationTime: function():number,\n * getBandwidthEstimate: function():number,\n * getPlaybackRate: function():number,\n * mediaSourceEngine: !shaka.media.MediaSourceEngine,\n * netEngine: shaka.net.NetworkingEngine,\n * onError: function(!shaka.util.Error),\n * onEvent: function(!Event),\n * onSegmentAppended: function(!shaka.media.SegmentReference,\n * !shaka.extern.Stream),\n * onInitSegmentAppended: function(!number,!shaka.media.InitSegmentReference),\n * beforeAppendSegment: function(\n * shaka.util.ManifestParserUtils.ContentType,!BufferSource):Promise,\n * disableStream: function(!shaka.extern.Stream, number):boolean\n * }}\n *\n * @property {function():number} getPresentationTime\n * Get the position in the presentation (in seconds) of the content that the\n * viewer is seeing on screen right now.\n * @property {function():number} getBandwidthEstimate\n * Get the estimated bandwidth in bits per second.\n * @property {function():number} getPlaybackRate\n * Get the playback rate\n * @property {!shaka.media.MediaSourceEngine} mediaSourceEngine\n * The MediaSourceEngine. The caller retains ownership.\n * @property {shaka.net.NetworkingEngine} netEngine\n * The NetworkingEngine instance to use. The caller retains ownership.\n * @property {function(!shaka.util.Error)} onError\n * Called when an error occurs. If the error is recoverable (see\n * {@link shaka.util.Error}) then the caller may invoke either\n * StreamingEngine.switch*() or StreamingEngine.seeked() to attempt recovery.\n * @property {function(!Event)} onEvent\n * Called when an event occurs that should be sent to the app.\n * @property {function(!shaka.media.SegmentReference,\n * !shaka.extern.Stream)} onSegmentAppended\n * Called after a segment is successfully appended to a MediaSource.\n * @property\n * {function(!number, !shaka.media.InitSegmentReference)} onInitSegmentAppended\n * Called when an init segment is appended to a MediaSource.\n * @property {!function(shaka.util.ManifestParserUtils.ContentType,\n * !BufferSource):Promise} beforeAppendSegment\n * A function called just before appending to the source buffer.\n * @property {function(!shaka.extern.Stream, number):boolean} disableStream\n * Called to temporarily disable a stream i.e. disabling all variant\n * containing said stream.\n */\nshaka.media.StreamingEngine.PlayerInterface;\n\n\n/**\n * @typedef {{\n * type: shaka.util.ManifestParserUtils.ContentType,\n * stream: shaka.extern.Stream,\n * segmentIterator: shaka.media.SegmentIterator,\n * lastSegmentReference: shaka.media.SegmentReference,\n * lastInitSegmentReference: shaka.media.InitSegmentReference,\n * lastTimestampOffset: ?number,\n * lastAppendWindowStart: ?number,\n * lastAppendWindowEnd: ?number,\n * lastCodecs: ?string,\n * lastMimeType: ?string,\n * restoreStreamAfterTrickPlay: ?shaka.extern.Stream,\n * endOfStream: boolean,\n * performingUpdate: boolean,\n * updateTimer: shaka.util.DelayedTick,\n * waitingToClearBuffer: boolean,\n * waitingToFlushBuffer: boolean,\n * clearBufferSafeMargin: number,\n * clearingBuffer: boolean,\n * seeked: boolean,\n * adaptation: boolean,\n * recovering: boolean,\n * hasError: boolean,\n * operation: shaka.net.NetworkingEngine.PendingRequest,\n * segmentPrefetch: shaka.media.SegmentPrefetch\n * }}\n *\n * @description\n * Contains the state of a logical stream, i.e., a sequence of segmented data\n * for a particular content type. At any given time there is a Stream object\n * associated with the state of the logical stream.\n *\n * @property {shaka.util.ManifestParserUtils.ContentType} type\n * The stream's content type, e.g., 'audio', 'video', or 'text'.\n * @property {shaka.extern.Stream} stream\n * The current Stream.\n * @property {shaka.media.SegmentIndexIterator} segmentIterator\n * An iterator through the segments of |stream|.\n * @property {shaka.media.SegmentReference} lastSegmentReference\n * The SegmentReference of the last segment that was appended.\n * @property {shaka.media.InitSegmentReference} lastInitSegmentReference\n * The InitSegmentReference of the last init segment that was appended.\n * @property {?number} lastTimestampOffset\n * The last timestamp offset given to MediaSourceEngine for this type.\n * @property {?number} lastAppendWindowStart\n * The last append window start given to MediaSourceEngine for this type.\n * @property {?number} lastAppendWindowEnd\n * The last append window end given to MediaSourceEngine for this type.\n * @property {?string} lastCodecs\n * The last append codecs given to MediaSourceEngine for this type.\n * @property {?string} lastMimeType\n * The last append mime type given to MediaSourceEngine for this type.\n * @property {?shaka.extern.Stream} restoreStreamAfterTrickPlay\n * The Stream to restore after trick play mode is turned off.\n * @property {boolean} endOfStream\n * True indicates that the end of the buffer has hit the end of the\n * presentation.\n * @property {boolean} performingUpdate\n * True indicates that an update is in progress.\n * @property {shaka.util.DelayedTick} updateTimer\n * A timer used to update the media state.\n * @property {boolean} waitingToClearBuffer\n * True indicates that the buffer must be cleared after the current update\n * finishes.\n * @property {boolean} waitingToFlushBuffer\n * True indicates that the buffer must be flushed after it is cleared.\n * @property {number} clearBufferSafeMargin\n * The amount of buffer to retain when clearing the buffer after the update.\n * @property {boolean} clearingBuffer\n * True indicates that the buffer is being cleared.\n * @property {boolean} seeked\n * True indicates that the presentation just seeked.\n * @property {boolean} adaptation\n * True indicates that the presentation just automatically switched variants.\n * @property {boolean} recovering\n * True indicates that the last segment was not appended because it could not\n * fit in the buffer.\n * @property {boolean} hasError\n * True indicates that the stream has encountered an error and has stopped\n * updating.\n * @property {shaka.net.NetworkingEngine.PendingRequest} operation\n * Operation with the number of bytes to be downloaded.\n * @property {?shaka.media.SegmentPrefetch} segmentPrefetch\n * A prefetch object for managing prefetching. Null if unneeded\n * (if prefetching is disabled, etc).\n */\nshaka.media.StreamingEngine.MediaState_;\n\n\n/**\n * The fudge factor for appendWindowStart. By adjusting the window backward, we\n * avoid rounding errors that could cause us to remove the keyframe at the start\n * of the Period.\n *\n * NOTE: This was increased as part of the solution to\n * https://github.com/shaka-project/shaka-player/issues/1281\n *\n * @const {number}\n * @private\n */\nshaka.media.StreamingEngine.APPEND_WINDOW_START_FUDGE_ = 0.1;\n\n\n/**\n * The fudge factor for appendWindowEnd. By adjusting the window backward, we\n * avoid rounding errors that could cause us to remove the last few samples of\n * the Period. This rounding error could then create an artificial gap and a\n * stutter when the gap-jumping logic takes over.\n *\n * https://github.com/shaka-project/shaka-player/issues/1597\n *\n * @const {number}\n * @private\n */\nshaka.media.StreamingEngine.APPEND_WINDOW_END_FUDGE_ = 0.01;\n\n\n/**\n * The maximum number of segments by which a stream can get ahead of other\n * streams.\n *\n * Introduced to keep StreamingEngine from letting one media type get too far\n * ahead of another. For example, audio segments are typically much smaller\n * than video segments, so in the time it takes to fetch one video segment, we\n * could fetch many audio segments. This doesn't help with buffering, though,\n * since the intersection of the two buffered ranges is what counts.\n *\n * @const {number}\n * @private\n */\nshaka.media.StreamingEngine.MAX_RUN_AHEAD_SEGMENTS_ = 1;\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.util.ConfigUtils');\n\ngoog.require('goog.asserts');\ngoog.require('shaka.log');\ngoog.require('shaka.util.ObjectUtils');\n\n\n/** @export */\nshaka.util.ConfigUtils = class {\n /**\n * @param {!Object} destination\n * @param {!Object} source\n * @param {!Object} template supplies default values\n * @param {!Object} overrides\n * Supplies override type checking. When the current path matches\n * the key in this object, each sub-value must match the type in this\n * object. If this contains an Object, it is used as the template.\n * @param {string} path to this part of the config\n * @return {boolean}\n * @export\n */\n static mergeConfigObjects(destination, source, template, overrides, path) {\n goog.asserts.assert(destination, 'Destination config must not be null!');\n\n // If true, override the template.\n const overrideTemplate = path in overrides;\n\n // If true, treat the source as a generic object to be copied without\n // descending more deeply.\n let genericObject = false;\n if (overrideTemplate) {\n genericObject = template.constructor == Object &&\n Object.keys(overrides).length == 0;\n } else {\n genericObject = template.constructor == Object &&\n Object.keys(template).length == 0;\n }\n\n // If true, don't validate the keys in the next level.\n const ignoreKeys = overrideTemplate || genericObject;\n\n let isValid = true;\n\n for (const k in source) {\n const subPath = path + '.' + k;\n const subTemplate = overrideTemplate ? overrides[path] : template[k];\n\n // The order of these checks is important.\n if (!ignoreKeys && !(k in template)) {\n shaka.log.alwaysError('Invalid config, unrecognized key ' + subPath);\n isValid = false;\n } else if (source[k] === undefined) {\n // An explicit 'undefined' value causes the key to be deleted from the\n // destination config and replaced with a default from the template if\n // possible.\n if (subTemplate === undefined || ignoreKeys) {\n // There is nothing in the template, so delete.\n delete destination[k];\n } else {\n // There is something in the template, so go back to that.\n destination[k] = shaka.util.ObjectUtils.cloneObject(subTemplate);\n }\n } else if (genericObject) {\n // Copy the fields of a generic object directly without a template and\n // without descending any deeper.\n destination[k] = source[k];\n } else if (subTemplate.constructor == Object &&\n source[k] &&\n source[k].constructor == Object) {\n // These are plain Objects with no other constructor.\n\n if (!destination[k]) {\n // Initialize the destination with the template so that normal\n // merging and type-checking can happen.\n destination[k] = shaka.util.ObjectUtils.cloneObject(subTemplate);\n }\n\n const subMergeValid = shaka.util.ConfigUtils.mergeConfigObjects(\n destination[k], source[k], subTemplate, overrides, subPath);\n isValid = isValid && subMergeValid;\n } else if (typeof source[k] != typeof subTemplate ||\n source[k] == null ||\n // Function cosntructors are not informative, and differ\n // between sync and async functions. So don't look at\n // constructor for function types.\n (typeof source[k] != 'function' &&\n source[k].constructor != subTemplate.constructor)) {\n // The source is the wrong type. This check allows objects to be\n // nulled, but does not allow null for any non-object fields.\n shaka.log.alwaysError('Invalid config, wrong type for ' + subPath);\n isValid = false;\n } else if (typeof template[k] == 'function' &&\n template[k].length != source[k].length) {\n shaka.log.alwaysWarn(\n 'Unexpected number of arguments for ' + subPath);\n destination[k] = source[k];\n } else {\n destination[k] = source[k];\n }\n }\n\n return isValid;\n }\n\n\n /**\n * Convert config from ('fieldName', value) format to a partial config object.\n *\n * E. g. from ('manifest.retryParameters.maxAttempts', 1) to\n * { manifest: { retryParameters: { maxAttempts: 1 }}}.\n *\n * @param {string} fieldName\n * @param {*} value\n * @return {!Object}\n * @export\n */\n static convertToConfigObject(fieldName, value) {\n const configObject = {};\n let last = configObject;\n let searchIndex = 0;\n let nameStart = 0;\n while (true) { // eslint-disable-line no-constant-condition\n const idx = fieldName.indexOf('.', searchIndex);\n if (idx < 0) {\n break;\n }\n if (idx == 0 || fieldName[idx - 1] != '\\\\') {\n const part = fieldName.substring(nameStart, idx).replace(/\\\\\\./g, '.');\n last[part] = {};\n last = last[part];\n nameStart = idx + 1;\n }\n searchIndex = idx + 1;\n }\n\n last[fieldName.substring(nameStart).replace(/\\\\\\./g, '.')] = value;\n return configObject;\n }\n\n /**\n * Reference the input parameters so the compiler doesn't remove them from\n * the calling function. Return whatever value is specified.\n *\n * This allows an empty or default implementation of a config callback that\n * still bears the complete function signature even in compiled mode.\n *\n * The caller should look something like this:\n *\n * const callback = (a, b, c, d) => {\n * return referenceParametersAndReturn(\n [a, b, c, d],\n a); // Can be anything, doesn't need to be one of the parameters\n * };\n *\n * @param {!Array.} parameters\n * @param {T} returnValue\n * @return {T}\n * @template T\n * @noinline\n */\n static referenceParametersAndReturn(parameters, returnValue) {\n return parameters && returnValue;\n }\n\n /**\n * @param {!Object} object\n * @param {!Object} base\n * @return {!Object}\n * @export\n */\n static getDifferenceFromConfigObjects(object, base) {\n const isObject = (obj) => {\n return obj && typeof obj === 'object' && !Array.isArray(obj);\n };\n\n const isArrayEmpty = (array) => {\n return Array.isArray(array) && array.length === 0;\n };\n\n const changes = (object, base) => {\n return Object.keys(object).reduce((acc, key) => {\n const value = object[key];\n // eslint-disable-next-line no-prototype-builtins\n if (!base.hasOwnProperty(key)) {\n acc[key] = value;\n } else if (isObject(value) && isObject(base[key])) {\n const diff = changes(value, base[key]);\n if (Object.keys(diff).length > 0 || !isObject(diff)) {\n acc[key] = diff;\n }\n } else if (isArrayEmpty(value) && isArrayEmpty(base[key])) {\n // Do nothing if both are empty arrays\n } else if (Number.isNaN(value) && Number.isNaN(base[key])) {\n // Do nothing if both are NaN\n } else if (value !== base[key]) {\n acc[key] = value;\n }\n return acc;\n }, {});\n };\n\n const diff = changes(object, base);\n\n const removeEmpty = (obj) => {\n for (const key of Object.keys(obj)) {\n if (isObject(obj[key]) && Object.keys(obj[key]).length === 0) {\n delete obj[key];\n } else if (isArrayEmpty(obj[key])) {\n delete obj[key];\n } else if (typeof obj[key] == 'function') {\n delete obj[key];\n } else if (isObject(obj[key])) {\n removeEmpty(obj[key]);\n if (Object.keys(obj[key]).length === 0) {\n delete obj[key];\n }\n }\n }\n };\n\n removeEmpty(diff);\n return diff;\n }\n};\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.util.FairPlayUtils');\n\ngoog.require('goog.Uri');\ngoog.require('goog.asserts');\ngoog.require('shaka.net.NetworkingEngine');\ngoog.require('shaka.util.BufferUtils');\ngoog.require('shaka.util.Error');\ngoog.require('shaka.util.StringUtils');\ngoog.require('shaka.util.Uint8ArrayUtils');\n\n\n/**\n * @summary A set of FairPlay utility functions.\n * @export\n */\nshaka.util.FairPlayUtils = class {\n /**\n * Check if FairPlay is supported.\n *\n * @return {!Promise.}\n * @export\n */\n static async isFairPlaySupported() {\n const config = {\n initDataTypes: ['cenc', 'sinf', 'skd'],\n videoCapabilities: [\n {\n contentType: 'video/mp4; codecs=\"avc1.42E01E\"',\n },\n ],\n };\n try {\n await navigator.requestMediaKeySystemAccess('com.apple.fps', [config]);\n return true;\n } catch (err) {\n return false;\n }\n }\n\n /**\n * Using the default method, extract a content ID from the init data. This is\n * based on the FairPlay example documentation.\n *\n * @param {!BufferSource} initData\n * @return {string}\n * @export\n */\n static defaultGetContentId(initData) {\n const uriString = shaka.util.StringUtils.fromBytesAutoDetect(initData);\n\n // The domain of that URI is the content ID according to Apple's FPS\n // sample.\n const uri = new goog.Uri(uriString);\n return uri.getDomain();\n }\n\n /**\n * Transforms the init data buffer using the given data. The format is:\n *\n *

\n   * [4 bytes] initDataSize\n   * [initDataSize bytes] initData\n   * [4 bytes] contentIdSize\n   * [contentIdSize bytes] contentId\n   * [4 bytes] certSize\n   * [certSize bytes] cert\n   * 
\n *\n * @param {!BufferSource} initData\n * @param {!BufferSource|string} contentId\n * @param {?BufferSource} cert The server certificate; this will throw if not\n * provided.\n * @return {!Uint8Array}\n * @export\n */\n static initDataTransform(initData, contentId, cert) {\n if (!cert || !cert.byteLength) {\n throw new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.DRM,\n shaka.util.Error.Code.SERVER_CERTIFICATE_REQUIRED);\n }\n\n // From that, we build a new init data to use in the session. This is\n // composed of several parts. First, the init data as a UTF-16 sdk:// URL.\n // Second, a 4-byte LE length followed by the content ID in UTF-16-LE.\n // Third, a 4-byte LE length followed by the certificate.\n /** @type {BufferSource} */\n let contentIdArray;\n if (typeof contentId == 'string') {\n contentIdArray =\n shaka.util.StringUtils.toUTF16(contentId, /* littleEndian= */ true);\n } else {\n contentIdArray = contentId;\n }\n\n // The init data we get is a UTF-8 string; convert that to a UTF-16 string.\n const sdkUri = shaka.util.StringUtils.fromBytesAutoDetect(initData);\n const utf16 =\n shaka.util.StringUtils.toUTF16(sdkUri, /* littleEndian= */ true);\n\n const rebuiltInitData = new Uint8Array(\n 12 + utf16.byteLength + contentIdArray.byteLength + cert.byteLength);\n\n let offset = 0;\n /** @param {BufferSource} array */\n const append = (array) => {\n rebuiltInitData.set(shaka.util.BufferUtils.toUint8(array), offset);\n offset += array.byteLength;\n };\n /** @param {BufferSource} array */\n const appendWithLength = (array) => {\n const view = shaka.util.BufferUtils.toDataView(rebuiltInitData);\n const value = array.byteLength;\n view.setUint32(offset, value, /* littleEndian= */ true);\n offset += 4;\n append(array);\n };\n\n appendWithLength(utf16);\n appendWithLength(contentIdArray);\n appendWithLength(cert);\n\n goog.asserts.assert(\n offset == rebuiltInitData.length, 'Inconsistent init data length');\n return rebuiltInitData;\n }\n\n /**\n * Basic initDataTransform configuration.\n *\n * @param {!Uint8Array} initData\n * @param {string} initDataType\n * @param {?shaka.extern.DrmInfo} drmInfo\n * @private\n */\n static basicInitDataTransform_(initData, initDataType, drmInfo) {\n if (initDataType !== 'skd') {\n return initData;\n }\n const StringUtils = shaka.util.StringUtils;\n const FairPlayUtils = shaka.util.FairPlayUtils;\n const cert = drmInfo.serverCertificate;\n const initDataAsString = StringUtils.fromBytesAutoDetect(initData);\n const contentId = initDataAsString.split('skd://').pop();\n return FairPlayUtils.initDataTransform(initData, contentId, cert);\n }\n\n /**\n * Verimatrix initDataTransform configuration.\n *\n * @param {!Uint8Array} initData\n * @param {string} initDataType\n * @param {?shaka.extern.DrmInfo} drmInfo\n * @export\n */\n static verimatrixInitDataTransform(initData, initDataType, drmInfo) {\n return shaka.util.FairPlayUtils.basicInitDataTransform_(\n initData, initDataType, drmInfo);\n }\n\n /**\n * EZDRM initDataTransform configuration.\n *\n * @param {!Uint8Array} initData\n * @param {string} initDataType\n * @param {?shaka.extern.DrmInfo} drmInfo\n * @export\n */\n static ezdrmInitDataTransform(initData, initDataType, drmInfo) {\n if (initDataType !== 'skd') {\n return initData;\n }\n const StringUtils = shaka.util.StringUtils;\n const FairPlayUtils = shaka.util.FairPlayUtils;\n const cert = drmInfo.serverCertificate;\n const initDataAsString = StringUtils.fromBytesAutoDetect(initData);\n const contentId = initDataAsString.split(';').pop();\n return FairPlayUtils.initDataTransform(initData, contentId, cert);\n }\n\n /**\n * Conax initDataTransform configuration.\n *\n * @param {!Uint8Array} initData\n * @param {string} initDataType\n * @param {?shaka.extern.DrmInfo} drmInfo\n * @export\n */\n static conaxInitDataTransform(initData, initDataType, drmInfo) {\n if (initDataType !== 'skd') {\n return initData;\n }\n const StringUtils = shaka.util.StringUtils;\n const FairPlayUtils = shaka.util.FairPlayUtils;\n const cert = drmInfo.serverCertificate;\n const initDataAsString = StringUtils.fromBytesAutoDetect(initData);\n const skdValue = initDataAsString.split('skd://').pop().split('?').shift();\n const stringToArray = (string) => {\n // 2 bytes for each char\n const buffer = new ArrayBuffer(string.length * 2);\n const array = shaka.util.BufferUtils.toUint16(buffer);\n for (let i = 0, strLen = string.length; i < strLen; i++) {\n array[i] = string.charCodeAt(i);\n }\n return array;\n };\n const contentId = stringToArray(window.atob(skdValue));\n return FairPlayUtils.initDataTransform(initData, contentId, cert);\n }\n\n /**\n * ExpressPlay initDataTransform configuration.\n *\n * @param {!Uint8Array} initData\n * @param {string} initDataType\n * @param {?shaka.extern.DrmInfo} drmInfo\n * @export\n */\n static expressplayInitDataTransform(initData, initDataType, drmInfo) {\n return shaka.util.FairPlayUtils.basicInitDataTransform_(\n initData, initDataType, drmInfo);\n }\n\n /**\n * Verimatrix FairPlay request.\n *\n * @param {shaka.net.NetworkingEngine.RequestType} type\n * @param {shaka.extern.Request} request\n * @param {shaka.extern.RequestContext=} context\n * @export\n */\n static verimatrixFairPlayRequest(type, request, context) {\n if (type !== shaka.net.NetworkingEngine.RequestType.LICENSE) {\n return;\n }\n const body = /** @type {!(ArrayBuffer|ArrayBufferView)} */(request.body);\n const originalPayload = shaka.util.BufferUtils.toUint8(body);\n const base64Payload = shaka.util.Uint8ArrayUtils.toBase64(originalPayload);\n request.headers['Content-Type'] = 'application/x-www-form-urlencoded';\n request.body = shaka.util.StringUtils.toUTF8('spc=' + base64Payload);\n }\n\n /**\n * Set content-type to application/octet-stream in a FairPlay request.\n *\n * @param {shaka.net.NetworkingEngine.RequestType} type\n * @param {shaka.extern.Request} request\n * @param {shaka.extern.RequestContext=} context\n * @private\n */\n static octetStreamFairPlayRequest_(type, request, context) {\n if (type !== shaka.net.NetworkingEngine.RequestType.LICENSE) {\n return;\n }\n request.headers['Content-Type'] = 'application/octet-stream';\n }\n\n /**\n * EZDRM FairPlay request.\n *\n * @param {shaka.net.NetworkingEngine.RequestType} type\n * @param {shaka.extern.Request} request\n * @param {shaka.extern.RequestContext=} context\n * @export\n */\n static ezdrmFairPlayRequest(type, request, context) {\n shaka.util.FairPlayUtils.octetStreamFairPlayRequest_(type, request);\n }\n\n /**\n * Conax FairPlay request.\n *\n * @param {shaka.net.NetworkingEngine.RequestType} type\n * @param {shaka.extern.Request} request\n * @param {shaka.extern.RequestContext=} context\n * @export\n */\n static conaxFairPlayRequest(type, request, context) {\n shaka.util.FairPlayUtils.octetStreamFairPlayRequest_(type, request);\n }\n\n /**\n * ExpressPlay FairPlay request.\n *\n * @param {shaka.net.NetworkingEngine.RequestType} type\n * @param {shaka.extern.Request} request\n * @param {shaka.extern.RequestContext=} context\n * @export\n */\n static expressplayFairPlayRequest(type, request, context) {\n shaka.util.FairPlayUtils.octetStreamFairPlayRequest_(type, request);\n }\n\n /**\n * Common FairPlay response transform for some DRMs providers.\n *\n * @param {shaka.net.NetworkingEngine.RequestType} type\n * @param {shaka.extern.Response} response\n * @param {shaka.extern.RequestContext=} context\n * @export\n */\n static commonFairPlayResponse(type, response, context) {\n if (type !== shaka.net.NetworkingEngine.RequestType.LICENSE) {\n return;\n }\n\n // In Apple's docs, responses can be of the form:\n // '\\nbase64encoded\\n' or 'base64encoded'\n // We have also seen responses in JSON format from some of our partners.\n // In all of these text-based formats, the CKC data is base64-encoded.\n\n let responseText;\n try {\n // Convert it to text for further processing.\n responseText = shaka.util.StringUtils.fromUTF8(response.data);\n } catch (error) {\n // Assume it's not a text format of any kind and leave it alone.\n return;\n }\n\n let licenseProcessing = false;\n\n // Trim whitespace.\n responseText = responseText.trim();\n\n // Look for wrapper and remove it.\n if (responseText.substr(0, 5) === '' &&\n responseText.substr(-6) === '') {\n responseText = responseText.slice(5, -6);\n licenseProcessing = true;\n }\n\n // Look for a JSON wrapper and remove it.\n try {\n const responseObject = /** @type {!Object} */(JSON.parse(responseText));\n if (responseObject['ckc']) {\n responseText = responseObject['ckc'];\n licenseProcessing = true;\n }\n if (responseObject['CkcMessage']) {\n responseText = responseObject['CkcMessage'];\n licenseProcessing = true;\n }\n if (responseObject['License']) {\n responseText = responseObject['License'];\n licenseProcessing = true;\n }\n } catch (err) {\n // It wasn't JSON. Fall through with other transformations.\n }\n\n if (licenseProcessing) {\n // Decode the base64-encoded data into the format the browser expects.\n // It's not clear why FairPlay license servers don't just serve this\n // directly.\n response.data = shaka.util.BufferUtils.toArrayBuffer(\n shaka.util.Uint8ArrayUtils.fromBase64(responseText));\n }\n }\n};\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.util.PlayerConfiguration');\n\ngoog.require('goog.asserts');\ngoog.require('shaka.abr.SimpleAbrManager');\ngoog.require('shaka.config.AutoShowText');\ngoog.require('shaka.config.CodecSwitchingStrategy');\ngoog.require('shaka.log');\ngoog.require('shaka.media.Capabilities');\ngoog.require('shaka.net.NetworkingEngine');\ngoog.require('shaka.util.ConfigUtils');\ngoog.require('shaka.util.FairPlayUtils');\ngoog.require('shaka.util.LanguageUtils');\ngoog.require('shaka.util.ManifestParserUtils');\ngoog.require('shaka.util.Platform');\n\n\n/**\n * @final\n * @export\n */\nshaka.util.PlayerConfiguration = class {\n /**\n * @return {shaka.extern.PlayerConfiguration}\n * @export\n */\n static createDefault() {\n // This is a relatively safe default in the absence of clues from the\n // browser. For slower connections, the default estimate may be too high.\n const bandwidthEstimate = 1e6; // 1Mbps\n const minBytes = 16e3;\n\n let abrMaxHeight = Infinity;\n\n // Some browsers implement the Network Information API, which allows\n // retrieving information about a user's network connection.\n if (navigator.connection) {\n // If the user has checked a box in the browser to ask it to use less\n // data, the browser will expose this intent via connection.saveData.\n // When that is true, we will default the max ABR height to 360p. Apps\n // can override this if they wish.\n //\n // The decision to use 360p was somewhat arbitrary. We needed a default\n // limit, and rather than restrict to a certain bandwidth, we decided to\n // restrict resolution. This will implicitly restrict bandwidth and\n // therefore save data. We (Shaka+Chrome) judged that:\n // - HD would be inappropriate\n // - If a user is asking their browser to save data, 360p it reasonable\n // - 360p would not look terrible on small mobile device screen\n // We also found that:\n // - YouTube's website on mobile defaults to 360p (as of 2018)\n // - iPhone 6, in portrait mode, has a physical resolution big enough\n // for 360p widescreen, but a little smaller than 480p widescreen\n // (https://apple.co/2yze4es)\n // If the content's lowest resolution is above 360p, AbrManager will use\n // the lowest resolution.\n if (navigator.connection.saveData) {\n abrMaxHeight = 360;\n }\n }\n\n const drm = {\n retryParameters: shaka.net.NetworkingEngine.defaultRetryParameters(),\n // These will all be verified by special cases in mergeConfigObjects_():\n servers: {}, // key is arbitrary key system ID, value must be string\n clearKeys: {}, // key is arbitrary key system ID, value must be string\n advanced: {}, // key is arbitrary key system ID, value is a record type\n delayLicenseRequestUntilPlayed: false,\n persistentSessionOnlinePlayback: false,\n persistentSessionsMetadata: [],\n initDataTransform: (initData, initDataType, drmInfo) => {\n if (shaka.util.Platform.isMediaKeysPolyfilled() &&\n initDataType == 'skd') {\n const cert = drmInfo.serverCertificate;\n const contentId =\n shaka.util.FairPlayUtils.defaultGetContentId(initData);\n initData = shaka.util.FairPlayUtils.initDataTransform(\n initData, contentId, cert);\n }\n return initData;\n },\n logLicenseExchange: false,\n updateExpirationTime: 1,\n preferredKeySystems: [],\n keySystemsMapping: {},\n // The Xbox One browser does not detect DRM key changes signalled by a\n // change in the PSSH in media segments. We need to parse PSSH from media\n // segments to detect key changes.\n parseInbandPsshEnabled: shaka.util.Platform.isXboxOne(),\n minHdcpVersion: '',\n ignoreDuplicateInitData: !shaka.util.Platform.isTizen2(),\n };\n\n // The Xbox One and PS4 only support the Playready DRM, so they should\n // prefer that key system by default to improve startup performance.\n if (shaka.util.Platform.isXboxOne() ||\n shaka.util.Platform.isPS4()) {\n drm.preferredKeySystems.push('com.microsoft.playready');\n }\n\n let codecSwitchingStrategy = shaka.config.CodecSwitchingStrategy.RELOAD;\n let multiTypeVariantsAllowed = false;\n if (shaka.media.Capabilities.isChangeTypeSupported() &&\n shaka.util.Platform.supportsSmoothCodecSwitching()) {\n codecSwitchingStrategy = shaka.config.CodecSwitchingStrategy.SMOOTH;\n multiTypeVariantsAllowed = true;\n }\n\n const manifest = {\n retryParameters: shaka.net.NetworkingEngine.defaultRetryParameters(),\n availabilityWindowOverride: NaN,\n disableAudio: false,\n disableVideo: false,\n disableText: false,\n disableThumbnails: false,\n disableIFrames: false,\n defaultPresentationDelay: 0,\n segmentRelativeVttTiming: false,\n raiseFatalErrorOnManifestUpdateRequestFailure: false,\n continueLoadingWhenPaused: true,\n dash: {\n clockSyncUri: '',\n ignoreDrmInfo: false,\n disableXlinkProcessing: true,\n xlinkFailGracefully: false,\n ignoreMinBufferTime: false,\n autoCorrectDrift: true,\n initialSegmentLimit: 1000,\n ignoreSuggestedPresentationDelay: false,\n ignoreEmptyAdaptationSet: false,\n ignoreMaxSegmentDuration: false,\n keySystemsByURI: {\n 'urn:uuid:1077efec-c0b2-4d02-ace3-3c1e52e2fb4b':\n 'org.w3.clearkey',\n 'urn:uuid:e2719d58-a985-b3c9-781a-b030af78d30e':\n 'org.w3.clearkey',\n 'urn:uuid:edef8ba9-79d6-4ace-a3c8-27dcd51d21ed':\n 'com.widevine.alpha',\n 'urn:uuid:9a04f079-9840-4286-ab92-e65be0885f95':\n 'com.microsoft.playready',\n 'urn:uuid:79f0049a-4098-8642-ab92-e65be0885f95':\n 'com.microsoft.playready',\n 'urn:uuid:94ce86fb-07ff-4f43-adb8-93d2fa968ca2':\n 'com.apple.fps',\n },\n manifestPreprocessor:\n shaka.util.PlayerConfiguration.defaultManifestPreprocessor,\n manifestPreprocessorTXml:\n shaka.util.PlayerConfiguration.defaultManifestPreprocessorTXml,\n sequenceMode: false,\n multiTypeVariantsAllowed,\n useStreamOnceInPeriodFlattening: false,\n updatePeriod: -1,\n enableFastSwitching: true,\n },\n hls: {\n ignoreTextStreamFailures: false,\n ignoreImageStreamFailures: false,\n defaultAudioCodec: 'mp4a.40.2',\n defaultVideoCodec: 'avc1.42E01E',\n ignoreManifestProgramDateTime: false,\n ignoreManifestProgramDateTimeForTypes: [],\n mediaPlaylistFullMimeType:\n 'video/mp2t; codecs=\"avc1.42E01E, mp4a.40.2\"',\n liveSegmentsDelay: 3,\n sequenceMode: shaka.util.Platform.supportsSequenceMode(),\n ignoreManifestTimestampsInSegmentsMode: false,\n disableCodecGuessing: false,\n disableClosedCaptionsDetection: false,\n updatePeriod: -1,\n allowLowLatencyByteRangeOptimization: true,\n },\n mss: {\n manifestPreprocessor:\n shaka.util.PlayerConfiguration.defaultManifestPreprocessor,\n manifestPreprocessorTXml:\n shaka.util.PlayerConfiguration.defaultManifestPreprocessorTXml,\n sequenceMode: false,\n keySystemsBySystemId: {\n '9a04f079-9840-4286-ab92-e65be0885f95':\n 'com.microsoft.playready',\n '79f0049a-4098-8642-ab92-e65be0885f95':\n 'com.microsoft.playready',\n },\n },\n };\n\n const streaming = {\n retryParameters: shaka.net.NetworkingEngine.defaultRetryParameters(),\n // Need some operation in the callback or else closure may remove calls\n // to the function as it would be a no-op. The operation can't just be a\n // log message, because those are stripped in the compiled build.\n failureCallback: (error) => {\n shaka.log.error('Unhandled streaming error', error);\n return shaka.util.ConfigUtils.referenceParametersAndReturn(\n [error],\n undefined);\n },\n // When low latency streaming is enabled, rebufferingGoal will default to\n // 0.01 if not specified.\n rebufferingGoal: 2,\n bufferingGoal: 10,\n bufferBehind: 30,\n evictionGoal: 1,\n ignoreTextStreamFailures: false,\n alwaysStreamText: false,\n startAtSegmentBoundary: false,\n gapDetectionThreshold: 0.5,\n gapPadding: 0.01,\n gapJumpTimerTime: 0.25 /* seconds */,\n durationBackoff: 1,\n // Offset by 5 seconds since Chromecast takes a few seconds to start\n // playing after a seek, even when buffered.\n safeSeekOffset: 5,\n safeSeekEndOffset: 0,\n stallEnabled: true,\n stallThreshold: 1 /* seconds */,\n stallSkip: 0.1 /* seconds */,\n useNativeHlsForFairPlay: true,\n // If we are within 2 seconds of the start of a live segment, fetch the\n // previous one. This allows for segment drift, but won't download an\n // extra segment if we aren't close to the start.\n // When low latency streaming is enabled, inaccurateManifestTolerance\n // will default to 0 if not specified.\n inaccurateManifestTolerance: 2,\n lowLatencyMode: false,\n autoLowLatencyMode: false,\n forceHTTP: false,\n forceHTTPS: false,\n minBytesForProgressEvents: minBytes,\n preferNativeHls: false,\n updateIntervalSeconds: 1,\n observeQualityChanges: false,\n maxDisabledTime: 30,\n // When low latency streaming is enabled, segmentPrefetchLimit will\n // default to 2 if not specified.\n segmentPrefetchLimit: 0,\n prefetchAudioLanguages: [],\n disableAudioPrefetch: false,\n disableTextPrefetch: false,\n disableVideoPrefetch: false,\n liveSync: {\n enabled: false,\n targetLatency: 0.5,\n targetLatencyTolerance: 0.5,\n maxPlaybackRate: 1.1,\n minPlaybackRate: 0.95,\n panicMode: false,\n panicThreshold: 60,\n dynamicTargetLatency: {\n enabled: false,\n stabilityThreshold: 60,\n rebufferIncrement: 0.5,\n maxAttempts: 10,\n maxLatency: 4,\n minLatency: 1,\n },\n },\n allowMediaSourceRecoveries: true,\n minTimeBetweenRecoveries: 5,\n vodDynamicPlaybackRate: false,\n vodDynamicPlaybackRateLowBufferRate: 0.95,\n vodDynamicPlaybackRateBufferRatio: 0.5,\n infiniteLiveStreamDuration: false,\n preloadNextUrlWindow: 30,\n loadTimeout: 30,\n clearDecodingCache: shaka.util.Platform.isPS4() ||\n shaka.util.Platform.isPS5(),\n dontChooseCodecs: false,\n shouldFixTimestampOffset: shaka.util.Platform.isWebOS() ||\n shaka.util.Platform.isTizen(),\n };\n\n // WebOS, Tizen, Chromecast and Hisense have long hardware pipelines\n // that respond slowly to seeking.\n // Therefore we should not seek when we detect a stall\n // on one of these platforms. Instead, default stallSkip to 0 to force the\n // stall detector to pause and play instead.\n if (shaka.util.Platform.isWebOS() ||\n shaka.util.Platform.isTizen() ||\n shaka.util.Platform.isChromecast() ||\n shaka.util.Platform.isHisense()) {\n streaming.stallSkip = 0;\n }\n\n if (shaka.util.Platform.isTizen()) {\n streaming.gapPadding = 2;\n }\n\n const offline = {\n // We need to set this to a throw-away implementation for now as our\n // default implementation will need to reference other fields in the\n // config. We will set it to our intended implementation after we have\n // the top-level object created.\n // eslint-disable-next-line require-await\n trackSelectionCallback: async (tracks) => tracks,\n\n downloadSizeCallback: async (sizeEstimate) => {\n if (navigator.storage && navigator.storage.estimate) {\n const estimate = await navigator.storage.estimate();\n // Limit to 95% of quota.\n return estimate.usage + sizeEstimate < estimate.quota * 0.95;\n } else {\n return true;\n }\n },\n\n // Need some operation in the callback or else closure may remove calls\n // to the function as it would be a no-op. The operation can't just be a\n // log message, because those are stripped in the compiled build.\n progressCallback: (content, progress) => {\n return shaka.util.ConfigUtils.referenceParametersAndReturn(\n [content, progress],\n undefined);\n },\n\n // By default we use persistent licenses as forces errors to surface if\n // a platform does not support offline licenses rather than causing\n // unexpected behaviours when someone tries to plays downloaded content\n // without a persistent license.\n usePersistentLicense: true,\n\n numberOfParallelDownloads: 5,\n };\n\n const abr = {\n enabled: true,\n useNetworkInformation: true,\n defaultBandwidthEstimate: bandwidthEstimate,\n switchInterval: 8,\n bandwidthUpgradeTarget: 0.85,\n bandwidthDowngradeTarget: 0.95,\n restrictions: {\n minWidth: 0,\n maxWidth: Infinity,\n minHeight: 0,\n maxHeight: abrMaxHeight,\n minPixels: 0,\n maxPixels: Infinity,\n minFrameRate: 0,\n maxFrameRate: Infinity,\n minBandwidth: 0,\n maxBandwidth: Infinity,\n minChannelsCount: 0,\n maxChannelsCount: Infinity,\n },\n advanced: {\n minTotalBytes: 128e3,\n minBytes,\n fastHalfLife: 2,\n slowHalfLife: 5,\n },\n restrictToElementSize: false,\n restrictToScreenSize: false,\n ignoreDevicePixelRatio: false,\n clearBufferSwitch: false,\n safeMarginSwitch: 0,\n cacheLoadThreshold: 20,\n minTimeToSwitch: shaka.util.Platform.isApple() ? 0.5 : 0,\n preferNetworkInformationBandwidth: false,\n };\n\n const cmcd = {\n enabled: false,\n sessionId: '',\n contentId: '',\n rtpSafetyFactor: 5,\n useHeaders: false,\n includeKeys: [],\n };\n\n const cmsd = {\n enabled: true,\n applyMaximumSuggestedBitrate: true,\n estimatedThroughputWeightRatio: 0.5,\n };\n\n const lcevc = {\n enabled: false,\n dynamicPerformanceScaling: true,\n logLevel: 0,\n drawLogo: false,\n };\n\n const mediaSource = {\n codecSwitchingStrategy: codecSwitchingStrategy,\n addExtraFeaturesToSourceBuffer: (mimeType) => {\n return shaka.util.ConfigUtils.referenceParametersAndReturn(\n [mimeType],\n '');\n },\n forceTransmux: false,\n insertFakeEncryptionInInit: true,\n modifyCueCallback: (cue, uri) => {\n return shaka.util.ConfigUtils.referenceParametersAndReturn(\n [cue, uri],\n undefined);\n },\n dispatchAllEmsgBoxes: false,\n };\n\n let customPlayheadTracker = false;\n let skipPlayDetection = false;\n let supportsMultipleMediaElements = true;\n if (shaka.util.Platform.isSmartTV()) {\n customPlayheadTracker = true;\n skipPlayDetection = true;\n supportsMultipleMediaElements = false;\n }\n\n const ads = {\n customPlayheadTracker,\n skipPlayDetection,\n supportsMultipleMediaElements,\n disableHLSInterstitial: false,\n disableDASHInterstitial: false,\n };\n\n const textDisplayer = {\n captionsUpdatePeriod: 0.25,\n };\n\n const AutoShowText = shaka.config.AutoShowText;\n\n /** @type {shaka.extern.PlayerConfiguration} */\n const config = {\n drm: drm,\n manifest: manifest,\n streaming: streaming,\n mediaSource: mediaSource,\n offline: offline,\n abrFactory: () => new shaka.abr.SimpleAbrManager(),\n abr: abr,\n autoShowText: AutoShowText.IF_SUBTITLES_MAY_BE_NEEDED,\n preferredAudioLanguage: '',\n preferredAudioLabel: '',\n preferredTextLanguage: '',\n preferredVariantRole: '',\n preferredTextRole: '',\n preferredAudioChannelCount: 2,\n preferredVideoHdrLevel: 'AUTO',\n preferredVideoLayout: '',\n preferredVideoLabel: '',\n preferredVideoCodecs: [],\n preferredAudioCodecs: [],\n preferredTextFormats: [],\n preferForcedSubs: false,\n preferSpatialAudio: false,\n preferredDecodingAttributes: [],\n restrictions: {\n minWidth: 0,\n maxWidth: Infinity,\n minHeight: 0,\n maxHeight: Infinity,\n minPixels: 0,\n maxPixels: Infinity,\n minFrameRate: 0,\n maxFrameRate: Infinity,\n minBandwidth: 0,\n maxBandwidth: Infinity,\n minChannelsCount: 0,\n maxChannelsCount: Infinity,\n },\n playRangeStart: 0,\n playRangeEnd: Infinity,\n textDisplayer: textDisplayer,\n textDisplayFactory: () => null,\n cmcd: cmcd,\n cmsd: cmsd,\n lcevc: lcevc,\n ads: ads,\n ignoreHardwareResolution: false,\n };\n\n // Add this callback so that we can reference the preferred audio language\n // through the config object so that if it gets updated, we have the\n // updated value.\n // eslint-disable-next-line require-await\n offline.trackSelectionCallback = async (tracks) => {\n return shaka.util.PlayerConfiguration.defaultTrackSelect(\n tracks, config.preferredAudioLanguage,\n config.preferredVideoHdrLevel);\n };\n\n return config;\n }\n\n /**\n * Merges the given configuration changes into the given destination. This\n * uses the default Player configurations as the template.\n *\n * @param {shaka.extern.PlayerConfiguration} destination\n * @param {!Object} updates\n * @param {shaka.extern.PlayerConfiguration=} template\n * @return {boolean}\n * @export\n */\n static mergeConfigObjects(destination, updates, template) {\n const overrides = {\n '.drm.keySystemsMapping': '',\n '.drm.servers': '',\n '.drm.clearKeys': '',\n '.drm.advanced': {\n distinctiveIdentifierRequired: false,\n persistentStateRequired: false,\n videoRobustness: '',\n audioRobustness: '',\n sessionType: '',\n serverCertificate: new Uint8Array(0),\n serverCertificateUri: '',\n individualizationServer: '',\n headers: {},\n },\n };\n return shaka.util.ConfigUtils.mergeConfigObjects(\n destination, updates,\n template || shaka.util.PlayerConfiguration.createDefault(), overrides,\n '');\n }\n\n /**\n * @param {!Array.} tracks\n * @param {string} preferredAudioLanguage\n * @param {string} preferredVideoHdrLevel\n * @return {!Array.}\n */\n static defaultTrackSelect(\n tracks, preferredAudioLanguage, preferredVideoHdrLevel) {\n const ContentType = shaka.util.ManifestParserUtils.ContentType;\n const LanguageUtils = shaka.util.LanguageUtils;\n\n let hdrLevel = preferredVideoHdrLevel;\n if (hdrLevel == 'AUTO') {\n // Auto detect the ideal HDR level.\n if (window.matchMedia('(color-gamut: p3)').matches) {\n hdrLevel = 'PQ';\n } else {\n hdrLevel = 'SDR';\n }\n }\n\n /** @type {!Array.} */\n const allVariants = tracks.filter((track) => {\n if (track.type != 'variant') {\n return false;\n }\n if (track.hdr && track.hdr != hdrLevel) {\n return false;\n }\n return true;\n });\n\n /** @type {!Array.} */\n let selectedVariants = [];\n\n // Find the locale that best matches our preferred audio locale.\n const closestLocale = LanguageUtils.findClosestLocale(\n preferredAudioLanguage,\n allVariants.map((variant) => variant.language));\n // If we found a locale that was close to our preference, then only use\n // variants that use that locale.\n if (closestLocale) {\n selectedVariants = allVariants.filter((variant) => {\n const locale = LanguageUtils.normalize(variant.language);\n return locale == closestLocale;\n });\n }\n\n // If we failed to get a language match, go with primary.\n if (selectedVariants.length == 0) {\n selectedVariants = allVariants.filter((variant) => {\n return variant.primary;\n });\n }\n\n // Otherwise, there is no good way to choose the language, so we don't\n // choose a language at all.\n if (selectedVariants.length == 0) {\n // Issue a warning, but only if the content has multiple languages.\n // Otherwise, this warning would just be noise.\n const languages = new Set(allVariants.map((track) => {\n return track.language;\n }));\n\n if (languages.size > 1) {\n shaka.log.warning('Could not choose a good audio track based on ' +\n 'language preferences or primary tracks. An ' +\n 'arbitrary language will be stored!');\n }\n\n // Default back to all variants.\n selectedVariants = allVariants;\n }\n\n // From previously selected variants, choose the SD ones (height <= 480).\n const tracksByHeight = selectedVariants.filter((track) => {\n return track.height && track.height <= 480;\n });\n\n // If variants don't have video or no video with height <= 480 was\n // found, proceed with the previously selected tracks.\n if (tracksByHeight.length) {\n // Sort by resolution, then select all variants which match the height\n // of the highest SD res. There may be multiple audio bitrates for the\n // same video resolution.\n tracksByHeight.sort((a, b) => {\n // The items in this list have already been screened for height, but the\n // compiler doesn't know that.\n goog.asserts.assert(a.height != null, 'Null height');\n goog.asserts.assert(b.height != null, 'Null height');\n\n return b.height - a.height;\n });\n selectedVariants = tracksByHeight.filter((track) => {\n return track.height == tracksByHeight[0].height;\n });\n }\n\n /** @type {!Array.} */\n const selectedTracks = [];\n\n // If there are multiple matches at different audio bitrates, select the\n // middle bandwidth one.\n if (selectedVariants.length) {\n const middleIndex = Math.floor(selectedVariants.length / 2);\n selectedVariants.sort((a, b) => a.bandwidth - b.bandwidth);\n selectedTracks.push(selectedVariants[middleIndex]);\n }\n\n // Since this default callback is used primarily by our own demo app and by\n // app developers who haven't thought about which tracks they want, we\n // should select all image/text tracks, regardless of language. This makes\n // for a better demo for us, and does not rely on user preferences for the\n // unconfigured app.\n for (const track of tracks) {\n if (track.type == ContentType.TEXT || track.type == ContentType.IMAGE) {\n selectedTracks.push(track);\n }\n }\n\n return selectedTracks;\n }\n\n /**\n * @param {!Element} element\n * @return {!Element}\n */\n static defaultManifestPreprocessor(element) {\n return shaka.util.ConfigUtils.referenceParametersAndReturn(\n [element],\n element);\n }\n\n /**\n * @param {!shaka.extern.xml.Node} element\n * @return {!shaka.extern.xml.Node}\n */\n static defaultManifestPreprocessorTXml(element) {\n return shaka.util.ConfigUtils.referenceParametersAndReturn(\n [element],\n element);\n }\n};\n","/*! @license\n * Shaka Player\n * Copyright 2023 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.media.PreloadManager');\n\ngoog.require('goog.asserts');\ngoog.require('shaka.log');\ngoog.require('shaka.util.Error');\ngoog.require('shaka.media.ManifestFilterer');\ngoog.require('shaka.media.ManifestParser');\ngoog.require('shaka.util.PublicPromise');\ngoog.require('shaka.media.PreferenceBasedCriteria');\ngoog.require('shaka.util.Stats');\ngoog.require('shaka.media.SegmentPrefetch');\ngoog.require('shaka.util.IDestroyable');\ngoog.require('shaka.net.NetworkingEngine');\ngoog.require('shaka.media.AdaptationSetCriteria');\ngoog.require('shaka.media.DrmEngine');\ngoog.require('shaka.media.RegionTimeline');\ngoog.require('shaka.media.QualityObserver');\ngoog.require('shaka.util.StreamUtils');\ngoog.require('shaka.media.StreamingEngine');\ngoog.require('shaka.media.SegmentPrefetch');\ngoog.require('shaka.util.ConfigUtils');\ngoog.require('shaka.util.FakeEvent');\ngoog.require('shaka.util.FakeEventTarget');\ngoog.require('shaka.util.ObjectUtils');\ngoog.require('shaka.util.PlayerConfiguration');\n\n/**\n * @implements {shaka.util.IDestroyable}\n * @export\n */\nshaka.media.PreloadManager = class extends shaka.util.FakeEventTarget {\n /**\n * @param {string} assetUri\n * @param {?string} mimeType\n * @param {?number} startTime\n * @param {*} playerInterface\n */\n constructor(assetUri, mimeType, startTime, playerInterface) {\n super();\n\n // Making the playerInterface a * and casting it to the right type allows\n // for the PlayerInterface for this class to not be exported.\n // Unfortunately, the constructor is exported by default.\n const typedPlayerInterface =\n /** @type {!shaka.media.PreloadManager.PlayerInterface} */ (\n playerInterface);\n\n /** @private {string} */\n this.assetUri_ = assetUri;\n\n /** @private {?string} */\n this.mimeType_ = mimeType;\n\n /** @private {!shaka.net.NetworkingEngine} */\n this.networkingEngine_ = typedPlayerInterface.networkingEngine;\n\n /** @private {?number} */\n this.startTime_ = startTime;\n\n /** @private {?shaka.media.AdaptationSetCriteria} */\n this.currentAdaptationSetCriteria_ = null;\n\n /** @private {number} */\n this.startTimeOfDrm_ = 0;\n\n /** @private {function():!shaka.media.DrmEngine} */\n this.createDrmEngine_ = typedPlayerInterface.createDrmEngine;\n\n /** @private {!shaka.media.ManifestFilterer} */\n this.manifestFilterer_ = typedPlayerInterface.manifestFilterer;\n\n /** @private {!shaka.extern.ManifestParser.PlayerInterface} */\n this.manifestPlayerInterface_ =\n typedPlayerInterface.manifestPlayerInterface;\n\n /** @private {!shaka.extern.PlayerConfiguration} */\n this.config_ = typedPlayerInterface.config;\n\n /** @private {?shaka.extern.Manifest} */\n this.manifest_ = null;\n\n /** @private {?shaka.extern.ManifestParser.Factory} */\n this.parserFactory_ = null;\n\n /** @private {?shaka.extern.ManifestParser} */\n this.parser_ = null;\n\n /** @private {boolean} */\n this.parserEntrusted_ = false;\n\n /** @private {!shaka.media.RegionTimeline} */\n this.regionTimeline_ = typedPlayerInterface.regionTimeline;\n\n /** @private {boolean} */\n this.regionTimelineEntrusted_ = false;\n\n /** @private {?shaka.media.DrmEngine} */\n this.drmEngine_ = null;\n\n /** @private {boolean} */\n this.drmEngineEntrusted_ = false;\n\n /** @private {?shaka.extern.AbrManager.Factory} */\n this.abrManagerFactory_ = null;\n\n /** @private {shaka.extern.AbrManager} */\n this.abrManager_ = null;\n\n /** @private {boolean} */\n this.abrManagerEntrusted_ = false;\n\n /** @private {!Map.} */\n this.segmentPrefetchById_ = new Map();\n\n /** @private {boolean} */\n this.segmentPrefetchEntrusted_ = false;\n\n /** @private {?shaka.media.QualityObserver} */\n this.qualityObserver_ = typedPlayerInterface.qualityObserver;\n\n /** @private {!shaka.util.Stats} */\n this.stats_ = new shaka.util.Stats();\n\n /** @private {!shaka.util.PublicPromise} */\n this.manifestPromise_ = new shaka.util.PublicPromise();\n\n /** @private {!shaka.util.PublicPromise} */\n this.successPromise_ = new shaka.util.PublicPromise();\n\n /** @private {?shaka.util.FakeEventTarget} */\n this.eventHandoffTarget_ = null;\n\n /** @private {boolean} */\n this.destroyed_ = false;\n\n /** @private {boolean} */\n this.allowPrefetch_ = typedPlayerInterface.allowPrefetch;\n\n /** @private {?shaka.extern.Variant} */\n this.prefetchedVariant_ = null;\n\n /** @private {boolean} */\n this.allowMakeAbrManager_ = typedPlayerInterface.allowMakeAbrManager;\n\n /** @private {boolean} */\n this.hasBeenAttached_ = false;\n\n /** @private {?Array.} */\n this.queuedOperations_ = [];\n\n /** @private {?Array.} */\n this.latePhaseQueuedOperations_ = [];\n\n /** @private {boolean} */\n this.isPreload_ = true;\n }\n\n /**\n * Makes it so that net requests launched from this load will no longer be\n * marked as \"isPreload\"\n */\n markIsLoad() {\n this.isPreload_ = false;\n }\n\n /**\n * @param {boolean} latePhase\n * @param {function()} callback\n */\n addQueuedOperation(latePhase, callback) {\n const queue =\n latePhase ? this.latePhaseQueuedOperations_ : this.queuedOperations_;\n if (queue) {\n queue.push(callback);\n } else {\n callback();\n }\n }\n\n /** Calls all late phase queued operations, and stops queueing them. */\n stopQueuingLatePhaseQueuedOperations() {\n if (this.latePhaseQueuedOperations_) {\n for (const callback of this.latePhaseQueuedOperations_) {\n callback();\n }\n }\n this.latePhaseQueuedOperations_ = null;\n }\n\n /** @param {!shaka.util.FakeEventTarget} eventHandoffTarget */\n setEventHandoffTarget(eventHandoffTarget) {\n this.eventHandoffTarget_ = eventHandoffTarget;\n this.hasBeenAttached_ = true;\n // Also call all queued operations, and stop queuing them in the future.\n if (this.queuedOperations_) {\n for (const callback of this.queuedOperations_) {\n callback();\n }\n }\n this.queuedOperations_ = null;\n }\n\n /** @param {number} offset */\n setOffsetToStartTime(offset) {\n if (this.startTime_ && offset) {\n this.startTime_ += offset;\n }\n }\n\n /** @return {?number} */\n getStartTime() {\n return this.startTime_;\n }\n\n /** @return {number} */\n getStartTimeOfDRM() {\n return this.startTimeOfDrm_;\n }\n\n /** @return {?string} */\n getMimeType() {\n return this.mimeType_;\n }\n\n /** @return {string} */\n getAssetUri() {\n return this.assetUri_;\n }\n\n /** @return {?shaka.extern.Manifest} */\n getManifest() {\n return this.manifest_;\n }\n\n /** @return {?shaka.extern.ManifestParser.Factory} */\n getParserFactory() {\n return this.parserFactory_;\n }\n\n /** @return {?shaka.media.AdaptationSetCriteria} */\n getCurrentAdaptationSetCriteria() {\n return this.currentAdaptationSetCriteria_;\n }\n\n /** @return {?shaka.extern.AbrManager.Factory} */\n getAbrManagerFactory() {\n return this.abrManagerFactory_;\n }\n\n /**\n * Gets the abr manager, if it exists. Also marks that the abr manager should\n * not be stopped if this manager is destroyed.\n * @return {?shaka.extern.AbrManager}\n */\n receiveAbrManager() {\n this.abrManagerEntrusted_ = true;\n return this.abrManager_;\n }\n\n /**\n * @return {?shaka.extern.AbrManager}\n */\n getAbrManager() {\n return this.abrManager_;\n }\n\n /**\n * Gets the parser, if it exists. Also marks that the parser should not be\n * stopped if this manager is destroyed.\n * @return {?shaka.extern.ManifestParser}\n */\n receiveParser() {\n this.parserEntrusted_ = true;\n return this.parser_;\n }\n\n /**\n * @return {?shaka.extern.ManifestParser}\n */\n getParser() {\n return this.parser_;\n }\n\n /**\n * Gets the region timeline, if it exists. Also marks that the timeline should\n * not be released if this manager is destroyed.\n * @return {?shaka.media.RegionTimeline}\n */\n receiveRegionTimeline() {\n this.regionTimelineEntrusted_ = true;\n return this.regionTimeline_;\n }\n\n /**\n * @return {?shaka.media.RegionTimeline}\n */\n getRegionTimeline() {\n return this.regionTimeline_;\n }\n\n /** @return {?shaka.media.QualityObserver} */\n getQualityObserver() {\n return this.qualityObserver_;\n }\n\n /** @return {!shaka.util.Stats} */\n getStats() {\n return this.stats_;\n }\n\n /** @return {!shaka.media.ManifestFilterer} */\n getManifestFilterer() {\n return this.manifestFilterer_;\n }\n\n /**\n * Gets the drm engine, if it exists. Also marks that the drm engine should\n * not be destroyed if this manager is destroyed.\n * @return {?shaka.media.DrmEngine}\n */\n receiveDrmEngine() {\n this.drmEngineEntrusted_ = true;\n return this.drmEngine_;\n }\n\n /**\n * @return {?shaka.media.DrmEngine}\n */\n getDrmEngine() {\n return this.drmEngine_;\n }\n\n /**\n * @return {?shaka.extern.Variant}\n */\n getPrefetchedVariant() {\n return this.prefetchedVariant_;\n }\n\n /**\n * Gets the SegmentPrefetch objects for the initial stream ids. Also marks\n * that those objects should not be aborted if this manager is destroyed.\n * @return {!Map.}\n */\n receiveSegmentPrefetchesById() {\n this.segmentPrefetchEntrusted_ = true;\n return this.segmentPrefetchById_;\n }\n\n /**\n * @param {?shaka.extern.AbrManager} abrManager\n * @param {?shaka.extern.AbrManager.Factory} abrFactory\n */\n attachAbrManager(abrManager, abrFactory) {\n this.abrManager_ = abrManager;\n this.abrManagerFactory_ = abrFactory;\n }\n\n /**\n * @param {?shaka.media.AdaptationSetCriteria} adaptationSetCriteria\n */\n attachAdaptationSetCriteria(adaptationSetCriteria) {\n this.currentAdaptationSetCriteria_ = adaptationSetCriteria;\n }\n\n /**\n * @param {!shaka.extern.Manifest} manifest\n * @param {!shaka.extern.ManifestParser} parser\n * @param {!shaka.extern.ManifestParser.Factory} parserFactory\n */\n attachManifest(manifest, parser, parserFactory) {\n this.manifest_ = manifest;\n this.parser_ = parser;\n this.parserFactory_ = parserFactory;\n }\n\n /**\n * Starts the process of loading the asset.\n * Success or failure will be measured through waitForFinish()\n */\n start() {\n (async () => {\n // Force a context switch, to give the player a chance to hook up events\n // immediately if desired.\n await Promise.resolve();\n\n // Perform the preloading process.\n try {\n await this.parseManifestInner_();\n this.throwIfDestroyed_();\n\n await this.initializeDrmInner_();\n this.throwIfDestroyed_();\n\n await this.chooseInitialVariantInner_();\n this.throwIfDestroyed_();\n\n this.successPromise_.resolve();\n } catch (error) {\n // Ignore OPERATION_ABORTED and OBJECT_DESTROYED errors.\n if (!(error instanceof shaka.util.Error) ||\n (error.code != shaka.util.Error.Code.OPERATION_ABORTED &&\n error.code != shaka.util.Error.Code.OBJECT_DESTROYED)) {\n this.successPromise_.reject(error);\n }\n }\n })();\n }\n\n /**\n * @param {!Event} event\n * @return {boolean}\n * @override\n */\n dispatchEvent(event) {\n if (this.eventHandoffTarget_) {\n return this.eventHandoffTarget_.dispatchEvent(event);\n } else {\n return super.dispatchEvent(event);\n }\n }\n\n /**\n * @param {!shaka.util.Error} error\n */\n onError(error) {\n if (error.severity === shaka.util.Error.Severity.CRITICAL) {\n // Cancel the loading process.\n this.successPromise_.reject(error);\n this.destroy();\n }\n\n const eventName = shaka.util.FakeEvent.EventName.Error;\n const event = this.makeEvent_(eventName, (new Map()).set('detail', error));\n this.dispatchEvent(event);\n if (event.defaultPrevented) {\n error.handled = true;\n }\n }\n\n /**\n * Throw if destroyed, to interrupt processes with a recognizable error.\n *\n * @private\n */\n throwIfDestroyed_() {\n if (this.isDestroyed()) {\n throw new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.PLAYER,\n shaka.util.Error.Code.OBJECT_DESTROYED);\n }\n }\n\n /**\n * Makes a fires an event corresponding to entering a state of the loading\n * process.\n * @param {string} nodeName\n * @private\n */\n makeStateChangeEvent_(nodeName) {\n this.dispatchEvent(new shaka.util.FakeEvent(\n /* name= */ shaka.util.FakeEvent.EventName.OnStateChange,\n /* data= */ (new Map()).set('state', nodeName)));\n }\n\n /**\n * @param {!shaka.util.FakeEvent.EventName} name\n * @param {Map.=} data\n * @return {!shaka.util.FakeEvent}\n * @private\n */\n makeEvent_(name, data) {\n return new shaka.util.FakeEvent(name, data);\n }\n\n /**\n * Pick and initialize a manifest parser, then have it download and parse the\n * manifest.\n *\n * @return {!Promise}\n * @private\n */\n async parseManifestInner_() {\n this.makeStateChangeEvent_('manifest-parser');\n\n if (!this.parser_) {\n // Create the parser that we will use to parse the manifest.\n this.parserFactory_ = shaka.media.ManifestParser.getFactory(\n this.assetUri_, this.mimeType_);\n goog.asserts.assert(this.parserFactory_, 'Must have manifest parser');\n this.parser_ = this.parserFactory_();\n\n this.parser_.configure(this.config_.manifest, () => this.isPreload_);\n }\n\n const startTime = Date.now() / 1000;\n\n this.makeStateChangeEvent_('manifest');\n\n if (!this.manifest_) {\n this.manifest_ = await this.parser_.start(\n this.assetUri_, this.manifestPlayerInterface_);\n }\n\n this.manifestPromise_.resolve();\n\n // This event is fired after the manifest is parsed, but before any\n // filtering takes place.\n const event =\n this.makeEvent_(shaka.util.FakeEvent.EventName.ManifestParsed);\n // Delay event to ensure manifest has been properly propagated\n // to the player.\n await Promise.resolve();\n this.dispatchEvent(event);\n\n // We require all manifests to have at least one variant.\n if (this.manifest_.variants.length == 0) {\n throw new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.MANIFEST,\n shaka.util.Error.Code.NO_VARIANTS);\n }\n\n // Make sure that all variants are either: audio-only, video-only, or\n // audio-video.\n shaka.media.PreloadManager.filterForAVVariants_(this.manifest_);\n\n const now = Date.now() / 1000;\n const delta = now - startTime;\n this.stats_.setManifestTime(delta);\n }\n\n /**\n * Initializes the DRM engine.\n *\n * @return {!Promise}\n * @private\n */\n async initializeDrmInner_() {\n goog.asserts.assert(\n this.manifest_, 'The manifest should already be parsed.');\n\n this.makeStateChangeEvent_('drm-engine');\n\n this.startTimeOfDrm_ = Date.now() / 1000;\n\n this.drmEngine_ = this.createDrmEngine_();\n this.manifestFilterer_.setDrmEngine(this.drmEngine_);\n\n this.drmEngine_.configure(this.config_.drm, () => this.isPreload_);\n\n const tracksChangedInitial = this.manifestFilterer_.applyRestrictions(\n this.manifest_);\n if (tracksChangedInitial) {\n const event = this.makeEvent_(\n shaka.util.FakeEvent.EventName.TracksChanged);\n await Promise.resolve();\n this.throwIfDestroyed_();\n this.dispatchEvent(event);\n }\n\n const playableVariants = shaka.util.StreamUtils.getPlayableVariants(\n this.manifest_.variants);\n await this.drmEngine_.initForPlayback(\n playableVariants,\n this.manifest_.offlineSessionIds);\n this.throwIfDestroyed_();\n\n // Now that we have drm information, filter the manifest (again) so that\n // we can ensure we only use variants with the selected key system.\n const tracksChangedAfter = await this.manifestFilterer_.filterManifest(\n this.manifest_);\n if (tracksChangedAfter) {\n const event = this.makeEvent_(\n shaka.util.FakeEvent.EventName.TracksChanged);\n await Promise.resolve();\n this.dispatchEvent(event);\n }\n }\n\n /** @param {!shaka.extern.PlayerConfiguration} config */\n reconfigure(config) {\n this.config_ = config;\n }\n\n /**\n * @param {string} name\n * @param {*=} value\n */\n configure(name, value) {\n const config = shaka.util.ConfigUtils.convertToConfigObject(name, value);\n shaka.util.PlayerConfiguration.mergeConfigObjects(this.config_, config);\n }\n\n /**\n * Return a copy of the current configuration.\n *\n * @return {shaka.extern.PlayerConfiguration}\n */\n getConfiguration() {\n return shaka.util.ObjectUtils.cloneObject(this.config_);\n }\n\n /**\n * Performs a final filtering of the manifest, and chooses the initial\n * variant.\n *\n * @return {!Promise}\n * @private\n */\n async chooseInitialVariantInner_() {\n goog.asserts.assert(\n this.manifest_, 'The manifest should already be parsed.');\n\n // This step does not have any associated events, as it is only part of the\n // \"load\" state in the old state graph.\n\n if (!this.currentAdaptationSetCriteria_) {\n // Copy preferred languages from the config again, in case the config was\n // changed between construction and playback.\n this.currentAdaptationSetCriteria_ =\n new shaka.media.PreferenceBasedCriteria(\n this.config_.preferredAudioLanguage,\n this.config_.preferredVariantRole,\n this.config_.preferredAudioChannelCount,\n this.config_.preferredVideoHdrLevel,\n this.config_.preferSpatialAudio,\n this.config_.preferredVideoLayout,\n this.config_.preferredAudioLabel,\n this.config_.preferredVideoLabel,\n this.config_.mediaSource.codecSwitchingStrategy,\n /* audioCodec= */ '');\n }\n\n // Make the ABR manager.\n if (this.allowMakeAbrManager_) {\n const abrFactory = this.config_.abrFactory;\n this.abrManagerFactory_ = abrFactory;\n this.abrManager_ = abrFactory();\n this.abrManager_.configure(this.config_.abr);\n }\n\n if (this.allowPrefetch_) {\n const isLive = this.manifest_.presentationTimeline.isLive();\n // Prefetch segments for the predicted first variant.\n // We start these here, but don't wait for them; it's okay to start the\n // full load process while the segments are being prefetched.\n const playableVariants = shaka.util.StreamUtils.getPlayableVariants(\n this.manifest_.variants);\n const adaptationSet = this.currentAdaptationSetCriteria_.create(\n playableVariants);\n // Guess what the first variant will be, based on a SimpleAbrManager.\n this.abrManager_.configure(this.config_.abr);\n this.abrManager_.setVariants(Array.from(adaptationSet.values()));\n const variant = this.abrManager_.chooseVariant();\n if (variant) {\n const promises = [];\n this.prefetchedVariant_ = variant;\n if (variant.video) {\n promises.push(this.prefetchStream_(variant.video, isLive));\n }\n if (variant.audio) {\n promises.push(this.prefetchStream_(variant.audio, isLive));\n }\n await Promise.all(promises);\n }\n }\n }\n\n /**\n * @param {!shaka.extern.Stream} stream\n * @param {boolean} isLive\n * @return {!Promise}\n * @private\n */\n async prefetchStream_(stream, isLive) {\n // Use the prefetch limit from the config if this is set, otherwise use 2.\n const prefetchLimit = this.config_.streaming.segmentPrefetchLimit || 2;\n const prefetch = new shaka.media.SegmentPrefetch(\n prefetchLimit, stream, (reference, stream, streamDataCallback) => {\n return shaka.media.StreamingEngine.dispatchFetch(\n reference, stream, streamDataCallback || null,\n this.config_.streaming.retryParameters, this.networkingEngine_,\n this.isPreload_);\n }, /* reverse= */ false);\n this.segmentPrefetchById_.set(stream.id, prefetch);\n\n // Start prefetching a bit.\n await stream.createSegmentIndex();\n const startTime = this.startTime_ || 0;\n const prefetchSegmentIterator =\n stream.segmentIndex.getIteratorForTime(startTime);\n let prefetchSegment =\n prefetchSegmentIterator ? prefetchSegmentIterator.current() : null;\n if (!prefetchSegment) {\n // If we can't get a segment at the desired spot, at least get a segment,\n // so we can get the init segment.\n prefetchSegment = stream.segmentIndex.earliestReference();\n }\n if (prefetchSegment) {\n if (isLive) {\n // Preload only the init segment for Live\n if (prefetchSegment.initSegmentReference) {\n await prefetch.prefetchInitSegment(\n prefetchSegment.initSegmentReference);\n }\n } else {\n // Preload a segment, too... either the first segment, or the segment\n // that corresponds with this.startTime_, as appropriate.\n // Note: this method also preload the init segment\n await prefetch.prefetchSegmentsByTime(prefetchSegment.startTime);\n }\n }\n }\n\n /**\n * Waits for the loading to be finished (or to fail with an error).\n * @return {!Promise}\n * @export\n */\n waitForFinish() {\n return this.successPromise_;\n }\n\n /**\n * Waits for the manifest to be loaded (or to fail with an error).\n * @return {!Promise}\n */\n waitForManifest() {\n const promises = [\n this.manifestPromise_,\n this.successPromise_,\n ];\n return Promise.race(promises);\n }\n\n /**\n * Releases or stops all non-entrusted resources.\n *\n * @override\n * @export\n */\n async destroy() {\n this.destroyed_ = true;\n if (this.parser_ && !this.parserEntrusted_) {\n await this.parser_.stop();\n }\n if (this.abrManager_ && !this.abrManagerEntrusted_) {\n await this.abrManager_.stop();\n }\n if (this.regionTimeline_ && !this.regionTimelineEntrusted_) {\n this.regionTimeline_.release();\n }\n if (this.drmEngine_ && !this.drmEngineEntrusted_) {\n await this.drmEngine_.destroy();\n }\n if (this.segmentPrefetchById_.size > 0 && !this.segmentPrefetchEntrusted_) {\n for (const segmentPrefetch of this.segmentPrefetchById_.values()) {\n segmentPrefetch.clearAll();\n }\n }\n // this.eventHandoffTarget_ is not unset, so that events and errors fired\n // after the preload manager is destroyed will still be routed to the\n // player, if it was once linked up.\n }\n\n /** @return {boolean} */\n isDestroyed() {\n return this.destroyed_;\n }\n\n /** @return {boolean} */\n hasBeenAttached() {\n return this.hasBeenAttached_;\n }\n\n /**\n * Take a series of variants and ensure that they only contain one type of\n * variant. The different options are:\n * 1. Audio-Video\n * 2. Audio-Only\n * 3. Video-Only\n *\n * A manifest can only contain a single type because once we initialize media\n * source to expect specific streams, it must always have content for those\n * streams. If we were to start with audio+video and switch to an audio-only\n * variant, media source would block waiting for video content.\n *\n * @param {shaka.extern.Manifest} manifest\n * @private\n */\n static filterForAVVariants_(manifest) {\n const isAVVariant = (variant) => {\n // Audio-video variants may include both streams separately or may be\n // single multiplexed streams with multiple codecs.\n return (variant.video && variant.audio) ||\n (variant.video && variant.video.codecs.includes(','));\n };\n if (manifest.variants.some(isAVVariant)) {\n shaka.log.debug('Found variant with audio and video content, ' +\n 'so filtering out audio-only content.');\n manifest.variants = manifest.variants.filter(isAVVariant);\n }\n }\n};\n\n/**\n * @typedef {{\n * config: !shaka.extern.PlayerConfiguration,\n * manifestPlayerInterface: !shaka.extern.ManifestParser.PlayerInterface,\n * regionTimeline: !shaka.media.RegionTimeline,\n * qualityObserver: ?shaka.media.QualityObserver,\n * createDrmEngine: function():!shaka.media.DrmEngine,\n * networkingEngine: !shaka.net.NetworkingEngine,\n * manifestFilterer: !shaka.media.ManifestFilterer,\n * allowPrefetch: boolean,\n * allowMakeAbrManager: boolean\n * }}\n *\n * @property {!shaka.extern.PlayerConfiguration} config\n * @property {!shaka.extern.ManifestParser.PlayerInterface}\n * manifestPlayerInterface\n * @property {!shaka.media.RegionTimeline} regionTimeline\n * @property {?shaka.media.QualityObserver} qualityObserver\n * @property {function():!shaka.media.DrmEngine} createDrmEngine\n * @property {!shaka.net.NetworkingEngine} networkingEngine\n * @property {!shaka.media.ManifestFilterer} manifestFilterer\n * @property {boolean} allowPrefetch\n * @property {boolean} allowMakeAbrManager\n */\nshaka.media.PreloadManager.PlayerInterface;\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.media.RegionObserver');\n\ngoog.require('shaka.media.IPlayheadObserver');\ngoog.require('shaka.media.RegionTimeline');\ngoog.require('shaka.util.EventManager');\ngoog.require('shaka.util.FakeEvent');\ngoog.require('shaka.util.FakeEventTarget');\n\n\n/**\n * The region observer watches a region timeline and playhead, and fires events\n * ('enter', 'exit', 'skip') as the playhead moves.\n *\n * @implements {shaka.media.IPlayheadObserver}\n * @final\n */\nshaka.media.RegionObserver = class extends shaka.util.FakeEventTarget {\n /**\n * Create a region observer for the given timeline. The observer does not\n * own the timeline, only uses it. This means that the observer should NOT\n * destroy the timeline.\n *\n * @param {!shaka.media.RegionTimeline} timeline\n * @param {boolean} startsPastZero\n */\n constructor(timeline, startsPastZero) {\n super();\n\n /** @private {shaka.media.RegionTimeline} */\n this.timeline_ = timeline;\n\n /**\n * Whether the asset is expected to start at a time beyond 0 seconds.\n * For example, if the asset is a live stream.\n * If true, we will not start polling for regions until the playhead has\n * moved past 0 seconds, to avoid bad behaviors where the current time is\n * briefly 0 before we have enough data to play.\n * @private {boolean}\n */\n this.startsPastZero_ = startsPastZero;\n\n /**\n * A mapping between a region and where we previously were relative to it.\n * When the value here differs from what we calculate, it means we moved and\n * should fire an event.\n *\n * @private {!Map.}\n */\n this.oldPosition_ = new Map();\n\n // To make the rules easier to read, alias all the relative positions.\n const RelativePosition = shaka.media.RegionObserver.RelativePosition_;\n const BEFORE_THE_REGION = RelativePosition.BEFORE_THE_REGION;\n const IN_THE_REGION = RelativePosition.IN_THE_REGION;\n const AFTER_THE_REGION = RelativePosition.AFTER_THE_REGION;\n\n /**\n * A read-only collection of rules for what to do when we change position\n * relative to a region.\n *\n * @private {!Iterable.}\n */\n this.rules_ = [\n {\n weWere: null,\n weAre: IN_THE_REGION,\n invoke: (region, seeking) => this.onEvent_('enter', region, seeking),\n },\n {\n weWere: BEFORE_THE_REGION,\n weAre: IN_THE_REGION,\n invoke: (region, seeking) => this.onEvent_('enter', region, seeking),\n },\n {\n weWere: AFTER_THE_REGION,\n weAre: IN_THE_REGION,\n invoke: (region, seeking) => this.onEvent_('enter', region, seeking),\n },\n {\n weWere: IN_THE_REGION,\n weAre: BEFORE_THE_REGION,\n invoke: (region, seeking) => this.onEvent_('exit', region, seeking),\n },\n {\n weWere: IN_THE_REGION,\n weAre: AFTER_THE_REGION,\n invoke: (region, seeking) => this.onEvent_('exit', region, seeking),\n },\n {\n weWere: BEFORE_THE_REGION,\n weAre: AFTER_THE_REGION,\n invoke: (region, seeking) => this.onEvent_('skip', region, seeking),\n },\n {\n weWere: AFTER_THE_REGION,\n weAre: BEFORE_THE_REGION,\n invoke: (region, seeking) => this.onEvent_('skip', region, seeking),\n },\n ];\n\n /** @private {shaka.util.EventManager} */\n this.eventManager_ = new shaka.util.EventManager();\n\n this.eventManager_.listen(this.timeline_, 'regionremove', (event) => {\n /** @type {shaka.extern.TimelineRegionInfo} */\n const region = event['region'];\n this.oldPosition_.delete(region);\n });\n }\n\n /** @override */\n release() {\n this.timeline_ = null;\n\n // Clear our maps so that we are not holding onto any more information than\n // needed.\n this.oldPosition_.clear();\n\n this.eventManager_.release();\n this.eventManager_ = null;\n\n super.release();\n }\n\n /** @override */\n poll(positionInSeconds, wasSeeking) {\n const RegionObserver = shaka.media.RegionObserver;\n if (this.startsPastZero_ && positionInSeconds == 0) {\n // Don't start checking regions until the timeline has begun moving.\n return;\n }\n // Now that we have seen the playhead go past 0, it's okay if it goes\n // back there (e.g. seeking back to the start).\n this.startsPastZero_ = false;\n\n for (const region of this.timeline_.regions()) {\n const previousPosition = this.oldPosition_.get(region);\n const currentPosition = RegionObserver.determinePositionRelativeTo_(\n region, positionInSeconds);\n\n // We will only use |previousPosition| and |currentPosition|, so we can\n // update our state now.\n this.oldPosition_.set(region, currentPosition);\n\n for (const rule of this.rules_) {\n if (rule.weWere == previousPosition && rule.weAre == currentPosition) {\n rule.invoke(region, wasSeeking);\n }\n }\n }\n }\n\n /**\n * Dispatch events of the given type. All event types in this class have the\n * same parameters: region and seeking.\n *\n * @param {string} eventType\n * @param {shaka.extern.TimelineRegionInfo} region\n * @param {boolean} seeking\n * @private\n */\n onEvent_(eventType, region, seeking) {\n const event = new shaka.util.FakeEvent(eventType, new Map([\n ['region', region],\n ['seeking', seeking],\n ]));\n this.dispatchEvent(event);\n }\n\n /**\n * Get the relative position of the playhead to |region| when the playhead is\n * at |seconds|. We treat the region's start and end times as inclusive\n * bounds.\n *\n * @param {shaka.extern.TimelineRegionInfo} region\n * @param {number} seconds\n * @return {shaka.media.RegionObserver.RelativePosition_}\n * @private\n */\n static determinePositionRelativeTo_(region, seconds) {\n const RelativePosition = shaka.media.RegionObserver.RelativePosition_;\n\n if (seconds < region.startTime) {\n return RelativePosition.BEFORE_THE_REGION;\n }\n\n if (seconds > region.endTime) {\n return RelativePosition.AFTER_THE_REGION;\n }\n\n return RelativePosition.IN_THE_REGION;\n }\n};\n\n/**\n * An enum of relative positions between the playhead and a region. Each is\n * phrased so that it works in \"The playhead is X\" where \"X\" is any value in\n * the enum.\n *\n * @enum {number}\n * @private\n */\nshaka.media.RegionObserver.RelativePosition_ = {\n BEFORE_THE_REGION: 1,\n IN_THE_REGION: 2,\n AFTER_THE_REGION: 3,\n};\n\n/**\n * All region observer events (onEnter, onExit, and onSkip) will be passed the\n * region that the playhead is interacting with and whether or not the playhead\n * moving is part of a seek event.\n *\n * @typedef {function(shaka.extern.TimelineRegionInfo, boolean)}\n */\nshaka.media.RegionObserver.EventListener;\n\n/**\n * @typedef {{\n * weWere: ?shaka.media.RegionObserver.RelativePosition_,\n * weAre: ?shaka.media.RegionObserver.RelativePosition_,\n * invoke: shaka.media.RegionObserver.EventListener\n * }}\n *\n * @private\n */\nshaka.media.RegionObserver.Rule_;\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.net.NetworkingUtils');\n\ngoog.require('goog.Uri');\ngoog.require('shaka.net.NetworkingEngine');\ngoog.require('shaka.util.Error');\n\n\n/**\n * @summary Networking utility functions.\n */\nshaka.net.NetworkingUtils = class {\n /**\n * @param {string} uri\n * @param {!shaka.net.NetworkingEngine} netEngine\n * @param {shaka.extern.RetryParameters} retryParams\n * @return {!Promise.}\n */\n static async getMimeType(uri, netEngine, retryParams) {\n const extension = shaka.net.NetworkingUtils.getExtension_(uri);\n let mimeType =\n shaka.net.NetworkingUtils.EXTENSIONS_TO_MIME_TYPES_[extension];\n if (mimeType) {\n return mimeType;\n }\n const type = shaka.net.NetworkingEngine.RequestType.MANIFEST;\n\n const request = shaka.net.NetworkingEngine.makeRequest([uri], retryParams);\n\n try {\n request.method = 'HEAD';\n const response = await netEngine.request(type, request).promise;\n mimeType = response.headers['content-type'];\n } catch (error) {\n if (error &&\n (error.code == shaka.util.Error.Code.HTTP_ERROR ||\n error.code == shaka.util.Error.Code.BAD_HTTP_STATUS)) {\n request.method = 'GET';\n const response = await netEngine.request(type, request).promise;\n mimeType = response.headers['content-type'];\n }\n }\n\n // https://bit.ly/2K9s9kf says this header should always be available,\n // but just to be safe:\n return mimeType ? mimeType.toLowerCase().split(';').shift() : '';\n }\n\n\n /**\n * @param {string} uri\n * @return {string}\n * @private\n */\n static getExtension_(uri) {\n const uriObj = new goog.Uri(uri);\n const uriPieces = uriObj.getPath().split('/');\n const uriFilename = uriPieces.pop();\n const filenamePieces = uriFilename.split('.');\n\n // Only one piece means there is no extension.\n if (filenamePieces.length == 1) {\n return '';\n }\n\n return filenamePieces.pop().toLowerCase();\n }\n};\n\n/**\n * @const {!Object.}\n * @private\n */\nshaka.net.NetworkingUtils.EXTENSIONS_TO_MIME_TYPES_ = {\n 'mp4': 'video/mp4',\n 'm4v': 'video/mp4',\n 'm4a': 'audio/mp4',\n 'webm': 'video/webm',\n 'weba': 'audio/webm',\n 'mkv': 'video/webm', // Chromium browsers supports it.\n 'ts': 'video/mp2t',\n 'ogv': 'video/ogg',\n 'ogg': 'audio/ogg',\n 'mpg': 'video/mpeg',\n 'mpeg': 'video/mpeg',\n 'm3u8': 'application/x-mpegurl',\n 'mpd': 'application/dash+xml',\n 'ism': 'application/vnd.ms-sstr+xml',\n 'mp3': 'audio/mpeg',\n 'aac': 'audio/aac',\n 'flac': 'audio/flac',\n 'wav': 'audio/wav',\n 'sbv': 'text/x-subviewer',\n 'srt': 'text/srt',\n 'vtt': 'text/vtt',\n 'webvtt': 'text/vtt',\n 'ttml': 'application/ttml+xml',\n 'lrc': 'application/x-subtitle-lrc',\n 'ssa': 'text/x-ssa',\n 'ass': 'text/x-ssa',\n 'jpg': 'image/jpeg',\n 'png': 'image/png',\n 'svg': 'image/svg+xml',\n 'webp': 'image/webp',\n 'avif': 'image/avif',\n};\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.text.Utils');\n\ngoog.require('shaka.log');\ngoog.require('shaka.text.Cue');\ngoog.require('shaka.text.CueRegion');\n\n\nshaka.text.Utils = class {\n /**\n * Flatten nested cue payloads recursively. If a cue has nested cues,\n * their contents should be combined and replace the payload of the parent.\n *\n * @param {!shaka.text.Cue} cue\n * @param {?shaka.text.Cue=} parentCue\n * @return {string}\n * @private\n */\n static flattenPayload_(cue, parentCue) {\n if (cue.lineBreak) {\n // This is a vertical lineBreak, so insert a newline.\n return '\\n';\n }\n if (cue.nestedCues.length) {\n return cue.nestedCues.map((nested) => {\n return shaka.text.Utils.flattenPayload_(nested, cue);\n }).join('');\n }\n\n if (!cue.payload) {\n return cue.payload;\n }\n\n // Handle bold, italics and underline\n const openStyleTags = [];\n const bold = cue.fontWeight >= shaka.text.Cue.fontWeight.BOLD;\n const italics = cue.fontStyle == shaka.text.Cue.fontStyle.ITALIC;\n const underline = cue.textDecoration.includes(\n shaka.text.Cue.textDecoration.UNDERLINE);\n if (bold) {\n openStyleTags.push(['b']);\n }\n if (italics) {\n openStyleTags.push(['i']);\n }\n if (underline) {\n openStyleTags.push(['u']);\n }\n // Handle color classes, if the value consists of letters\n let color = cue.color;\n if (color == '' && parentCue) {\n color = parentCue.color;\n }\n let classes = '';\n const colorName = shaka.text.Utils.getColorName_(color);\n if (colorName) {\n classes += `.${colorName}`;\n }\n let bgColor = cue.backgroundColor;\n if (bgColor == '' && parentCue) {\n bgColor = parentCue.backgroundColor;\n }\n const bgColorName = shaka.text.Utils.getColorName_(bgColor);\n if (bgColorName) {\n classes += `.bg_${bgColorName}`;\n }\n if (classes) {\n openStyleTags.push(['c', classes]);\n }\n\n return openStyleTags.reduceRight((acc, [tag, classes = '']) => {\n return `<${tag}${classes}>${acc}`;\n }, cue.payload);\n }\n\n /**\n * Gets the color name from a color string.\n *\n * @param {string} string\n * @return {?string}\n * @private\n */\n static getColorName_(string) {\n let colorString = string.toLowerCase();\n const rgb = colorString.replace(/\\s/g, '')\n .match(/^rgba?\\((\\d+),(\\d+),(\\d+),?([^,\\s)]+)?/i);\n if (rgb) {\n colorString = '#' +\n (parseInt(rgb[1], 10) | (1 << 8)).toString(16).slice(1) +\n (parseInt(rgb[2], 10) | (1 << 8)).toString(16).slice(1) +\n (parseInt(rgb[3], 10) | (1 << 8)).toString(16).slice(1);\n } else if (colorString.startsWith('#') && colorString.length > 7) {\n // With this we lose the alpha of the color, but it is better than having\n // no color.\n colorString = colorString.slice(0, 7);\n }\n switch (colorString) {\n case 'white':\n case '#fff':\n case '#ffffff':\n return 'white';\n case 'lime':\n case '#0f0':\n case '#00ff00':\n return 'lime';\n case 'cyan':\n case '#0ff':\n case '#00ffff':\n return 'cyan';\n case 'red':\n case '#f00':\n case '#ff0000':\n return 'red';\n case 'yellow':\n case '#ff0':\n case '#ffff00':\n return 'yellow';\n case 'magenta':\n case '#f0f':\n case '#ff00ff':\n return 'magenta';\n case 'blue':\n case '#00f':\n case '#0000ff':\n return 'blue';\n case 'black':\n case '#000':\n case '#000000':\n return 'black';\n }\n // No color name\n return null;\n }\n\n /**\n * We don't want to modify the array or objects passed in, since we don't\n * technically own them. So we build a new array and replace certain items\n * in it if they need to be flattened.\n * We also don't want to flatten the text payloads starting at a container\n * element; otherwise, for containers encapsulating multiple caption lines,\n * the lines would merge into a single cue. This is undesirable when a\n * subset of the captions are outside of the append time window. To fix\n * this, we only call flattenPayload() starting at elements marked as\n * isContainer = false.\n *\n * @param {!Array.} cues\n * @param {?shaka.text.Cue=} parentCue\n * @return {!Array.}\n */\n static getCuesToFlatten(cues, parentCue) {\n const result = [];\n for (const cue of shaka.text.Utils.removeDuplicates(cues)) {\n if (cue.isContainer) {\n // Recurse to find the actual text payload cues.\n result.push(...shaka.text.Utils.getCuesToFlatten(cue.nestedCues, cue));\n } else {\n // Flatten the payload.\n const flatCue = cue.clone();\n flatCue.nestedCues = [];\n flatCue.payload = shaka.text.Utils.flattenPayload_(cue, parentCue);\n result.push(flatCue);\n }\n }\n return result;\n }\n\n /**\n * @param {!Array.} cues\n * @return {!Array.}\n */\n static removeDuplicates(cues) {\n const uniqueCues = [];\n for (const cue of cues) {\n const isValid = !uniqueCues.some(\n (existingCue) => shaka.text.Cue.equal(cue, existingCue));\n if (isValid) {\n uniqueCues.push(cue);\n }\n }\n return uniqueCues;\n }\n\n /**\n * @param {!shaka.text.Cue} shakaCue\n * @return {TextTrackCue}\n */\n static mapShakaCueToNativeCue(shakaCue) {\n if (shakaCue.startTime >= shakaCue.endTime) {\n // Edge will throw in this case.\n // See issue #501\n shaka.log.warning('Invalid cue times: ' + shakaCue.startTime +\n ' - ' + shakaCue.endTime);\n return null;\n }\n\n const Cue = shaka.text.Cue;\n /** @type {VTTCue} */\n const vttCue = new VTTCue(\n shakaCue.startTime,\n shakaCue.endTime,\n shakaCue.payload);\n\n const hash = (text) => {\n let hash = 5381;\n let i = text.length;\n while (i) {\n hash = (hash * 33) ^ text.charCodeAt(--i);\n }\n return (hash >>> 0).toString();\n };\n\n vttCue.id = hash(shakaCue.startTime.toString()) +\n hash(shakaCue.endTime.toString()) +\n hash(shakaCue.payload);\n\n // NOTE: positionAlign and lineAlign settings are not supported by Chrome\n // at the moment, so setting them will have no effect.\n // The bug on chromium to implement them:\n // https://bugs.chromium.org/p/chromium/issues/detail?id=633690\n\n vttCue.lineAlign = shakaCue.lineAlign;\n vttCue.positionAlign = shakaCue.positionAlign;\n if (shakaCue.size) {\n vttCue.size = shakaCue.size;\n }\n\n try {\n // Safari 10 seems to throw on align='center'.\n vttCue.align = shakaCue.textAlign;\n } catch (exception) {}\n\n if (shakaCue.textAlign == 'center' && vttCue.align != 'center') {\n // We want vttCue.position = 'auto'. By default, |position| is set to\n // \"auto\". If we set it to \"auto\" safari will throw an exception, so we\n // must rely on the default value.\n vttCue.align = 'middle';\n }\n\n if (shakaCue.writingMode ==\n Cue.writingMode.VERTICAL_LEFT_TO_RIGHT) {\n vttCue.vertical = 'lr';\n } else if (shakaCue.writingMode ==\n Cue.writingMode.VERTICAL_RIGHT_TO_LEFT) {\n vttCue.vertical = 'rl';\n }\n\n // snapToLines flag is true by default\n if (shakaCue.lineInterpretation == Cue.lineInterpretation.PERCENTAGE) {\n vttCue.snapToLines = false;\n }\n\n if (shakaCue.line != null) {\n vttCue.line = shakaCue.line;\n }\n\n if (shakaCue.position != null) {\n vttCue.position = shakaCue.position;\n }\n\n return vttCue;\n }\n\n /**\n * @param {!VTTCue} vttCue\n * @return {?shaka.text.Cue}\n */\n static mapNativeCueToShakaCue(vttCue) {\n if (vttCue.endTime === Infinity || vttCue.endTime < vttCue.startTime) {\n return null;\n }\n const cue = new shaka.text.Cue(vttCue.startTime, vttCue.endTime,\n vttCue.text);\n cue.line = typeof vttCue.line === 'number' ? vttCue.line : null;\n if (vttCue.lineAlign) {\n cue.lineAlign = /** @type {shaka.text.Cue.lineAlign} */\n (vttCue.lineAlign);\n }\n cue.lineInterpretation = vttCue.snapToLines ?\n shaka.text.Cue.lineInterpretation.LINE_NUMBER :\n shaka.text.Cue.lineInterpretation.PERCENTAGE;\n cue.position = typeof vttCue.position === 'number' ?\n vttCue.position : null;\n if (vttCue.positionAlign) {\n cue.positionAlign = /** @type {shaka.text.Cue.positionAlign} */\n (vttCue.positionAlign);\n }\n cue.size = vttCue.size;\n cue.textAlign = /** @type {shaka.text.Cue.textAlign} */ (vttCue.align);\n if (vttCue.vertical === 'lr') {\n cue.writingMode = shaka.text.Cue.writingMode.VERTICAL_LEFT_TO_RIGHT;\n } else if (vttCue.vertical === 'rl') {\n cue.writingMode = shaka.text.Cue.writingMode.VERTICAL_RIGHT_TO_LEFT;\n }\n if (vttCue.region) {\n cue.region.id = vttCue.region.id;\n cue.region.height = vttCue.region.lines;\n cue.region.heightUnits = shaka.text.CueRegion.units.LINES;\n cue.region.regionAnchorX = vttCue.region.regionAnchorX;\n cue.region.regionAnchorY = vttCue.region.regionAnchorY;\n cue.region.scroll = /** @type {shaka.text.CueRegion.scrollMode} */\n (vttCue.region.scroll);\n cue.region.viewportAnchorX = vttCue.region.viewportAnchorX;\n cue.region.viewportAnchorY = vttCue.region.viewportAnchorY;\n cue.region.viewportAnchorUnits = shaka.text.CueRegion.units.PERCENTAGE;\n cue.region.width = vttCue.region.width;\n cue.region.widthUnits = shaka.text.CueRegion.units.PERCENTAGE;\n }\n shaka.text.Cue.parseCuePayload(cue);\n\n return cue;\n }\n};\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/**\n * @fileoverview\n */\n\ngoog.provide('shaka.text.SimpleTextDisplayer');\n\ngoog.require('goog.asserts');\ngoog.require('shaka.text.Utils');\n\n\n/**\n * A text displayer plugin using the browser's native VTTCue interface.\n *\n * @implements {shaka.extern.TextDisplayer}\n * @export\n */\nshaka.text.SimpleTextDisplayer = class {\n /**\n * @param {HTMLMediaElement} video\n * @param {string} label\n */\n constructor(video, label) {\n /** @private {TextTrack} */\n this.textTrack_ = null;\n\n // TODO: Test that in all cases, the built-in CC controls in the video\n // element are toggling our TextTrack.\n\n // If the video element has TextTracks, disable them. If we see one that\n // was created by a previous instance of Shaka Player, reuse it.\n for (const track of Array.from(video.textTracks)) {\n if (track.kind === 'metadata' || track.kind === 'chapters') {\n continue;\n }\n // NOTE: There is no API available to remove a TextTrack from a video\n // element.\n track.mode = 'disabled';\n\n if (track.label == label) {\n this.textTrack_ = track;\n }\n }\n\n if (!this.textTrack_) {\n // As far as I can tell, there is no observable difference between setting\n // kind to 'subtitles' or 'captions' when creating the TextTrack object.\n // The individual text tracks from the manifest will still have their own\n // kinds which can be displayed in the app's UI.\n this.textTrack_ = video.addTextTrack('subtitles', label);\n }\n this.textTrack_.mode = 'hidden';\n }\n\n\n /**\n * @override\n * @export\n */\n configure(config) {\n // Unused.\n }\n\n /**\n * @override\n * @export\n */\n remove(start, end) {\n // Check that the displayer hasn't been destroyed.\n if (!this.textTrack_) {\n return false;\n }\n\n const removeInRange = (cue) => {\n const inside = cue.startTime < end && cue.endTime > start;\n return inside;\n };\n\n shaka.text.SimpleTextDisplayer.removeWhere_(this.textTrack_, removeInRange);\n\n return true;\n }\n\n /**\n * @override\n * @export\n */\n append(cues) {\n const flattenedCues = shaka.text.Utils.getCuesToFlatten(cues);\n\n // Convert cues.\n const textTrackCues = [];\n const cuesInTextTrack = this.textTrack_.cues ?\n Array.from(this.textTrack_.cues) : [];\n\n for (const inCue of flattenedCues) {\n // When a VTT cue spans a segment boundary, the cue will be duplicated\n // into two segments.\n // To avoid displaying duplicate cues, if the current textTrack cues\n // list already contains the cue, skip it.\n const containsCue = cuesInTextTrack.some((cueInTextTrack) => {\n if (cueInTextTrack.startTime == inCue.startTime &&\n cueInTextTrack.endTime == inCue.endTime &&\n cueInTextTrack.text == inCue.payload) {\n return true;\n }\n return false;\n });\n\n if (!containsCue && inCue.payload) {\n const cue =\n shaka.text.Utils.mapShakaCueToNativeCue(inCue);\n if (cue) {\n textTrackCues.push(cue);\n }\n }\n }\n\n // Sort the cues based on start/end times. Make a copy of the array so\n // we can get the index in the original ordering. Out of order cues are\n // rejected by Edge. See https://bit.ly/2K9VX3s\n const sortedCues = textTrackCues.slice().sort((a, b) => {\n if (a.startTime != b.startTime) {\n return a.startTime - b.startTime;\n } else if (a.endTime != b.endTime) {\n return a.endTime - b.startTime;\n } else {\n // The browser will display cues with identical time ranges from the\n // bottom up. Reversing the order of equal cues means the first one\n // parsed will be at the top, as you would expect.\n // See https://github.com/shaka-project/shaka-player/issues/848 for\n // more info.\n // However, this ordering behavior is part of VTTCue's \"line\" field.\n // Some platforms don't have a real VTTCue and use a polyfill instead.\n // When VTTCue is polyfilled or does not support \"line\", we should _not_\n // reverse the order. This occurs on legacy Edge.\n // eslint-disable-next-line no-restricted-syntax\n if ('line' in VTTCue.prototype) {\n // Native VTTCue\n return textTrackCues.indexOf(b) - textTrackCues.indexOf(a);\n } else {\n // Polyfilled VTTCue\n return textTrackCues.indexOf(a) - textTrackCues.indexOf(b);\n }\n }\n });\n\n for (const cue of sortedCues) {\n this.textTrack_.addCue(cue);\n }\n }\n\n /**\n * @override\n * @export\n */\n destroy() {\n if (this.textTrack_) {\n const removeIt = (cue) => true;\n shaka.text.SimpleTextDisplayer.removeWhere_(this.textTrack_, removeIt);\n\n // NOTE: There is no API available to remove a TextTrack from a video\n // element.\n this.textTrack_.mode = 'disabled';\n }\n\n this.textTrack_ = null;\n return Promise.resolve();\n }\n\n /**\n * @override\n * @export\n */\n isTextVisible() {\n return this.textTrack_.mode == 'showing';\n }\n\n /**\n * @override\n * @export\n */\n setTextVisibility(on) {\n this.textTrack_.mode = on ? 'showing' : 'hidden';\n }\n\n /**\n * @override\n * @export\n */\n setTextLanguage(language) {\n }\n\n /**\n * Iterate over all the cues in a text track and remove all those for which\n * |predicate(cue)| returns true.\n *\n * @param {!TextTrack} track\n * @param {function(!TextTrackCue):boolean} predicate\n * @private\n */\n static removeWhere_(track, predicate) {\n // Since |track.cues| can be null if |track.mode| is \"disabled\", force it to\n // something other than \"disabled\".\n //\n // If the track is already showing, then we should keep it as showing. But\n // if it something else, we will use hidden so that we don't \"flash\" cues on\n // the screen.\n const oldState = track.mode;\n const tempState = oldState == 'showing' ? 'showing' : 'hidden';\n\n track.mode = tempState;\n\n goog.asserts.assert(\n track.cues,\n 'Cues should be accessible when mode is set to \"' + tempState + '\".');\n\n // Create a copy of the list to avoid errors while iterating.\n for (const cue of Array.from(track.cues)) {\n if (cue && predicate(cue)) {\n track.removeCue(cue);\n }\n }\n\n track.mode = oldState;\n }\n};\n","/*! @license\n * Shaka Player\n * Copyright 2023 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.text.StubTextDisplayer');\n\n/**\n* A stub text displayer plugin that does nothing\n*\n* @implements {shaka.extern.TextDisplayer}\n* @export\n*/\nshaka.text.StubTextDisplayer = class {\n /**\n * @override\n * @export\n */\n configure(config) {\n }\n\n /**\n * @override\n * @export\n */\n remove(start, end) {\n }\n\n /**\n * @override\n * @export\n */\n append(cues) {\n }\n\n /**\n * @override\n * @export\n */\n destroy() {\n }\n\n /**\n * @override\n * @export\n */\n isTextVisible() {\n return false;\n }\n\n /**\n * @override\n * @export\n */\n setTextVisibility(on) {\n }\n\n /**\n * @override\n * @export\n */\n setTextLanguage(language) {\n }\n};\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\n\ngoog.provide('shaka.text.UITextDisplayer');\n\ngoog.require('goog.asserts');\ngoog.require('shaka.Deprecate');\ngoog.require('shaka.log');\ngoog.require('shaka.text.Cue');\ngoog.require('shaka.text.CueRegion');\ngoog.require('shaka.text.Utils');\ngoog.require('shaka.util.Dom');\ngoog.require('shaka.util.EventManager');\ngoog.require('shaka.util.Timer');\n\n\n/**\n * The text displayer plugin for the Shaka Player UI. Can also be used directly\n * by providing an appropriate container element.\n *\n * @implements {shaka.extern.TextDisplayer}\n * @final\n * @export\n */\nshaka.text.UITextDisplayer = class {\n /**\n * Constructor.\n * @param {HTMLMediaElement} video\n * @param {HTMLElement} videoContainer\n * @param {shaka.extern.TextDisplayerConfiguration} config\n */\n constructor(video, videoContainer, config) {\n goog.asserts.assert(videoContainer, 'videoContainer should be valid.');\n\n if (!document.fullscreenEnabled) {\n shaka.log.alwaysWarn('Using UITextDisplayer in a browser without ' +\n 'Fullscreen API support causes subtitles to not be rendered in ' +\n 'fullscreen');\n }\n\n /** @private {boolean} */\n this.isTextVisible_ = false;\n\n /** @private {!Array.} */\n this.cues_ = [];\n\n /** @private {HTMLMediaElement} */\n this.video_ = video;\n\n /** @private {HTMLElement} */\n this.videoContainer_ = videoContainer;\n\n /** @private {?number} */\n this.aspectRatio_ = null;\n\n /** @type {HTMLElement} */\n this.textContainer_ = shaka.util.Dom.createHTMLElement('div');\n this.textContainer_.classList.add('shaka-text-container');\n\n // Set the subtitles text-centered by default.\n this.textContainer_.style.textAlign = 'center';\n\n // Set the captions in the middle horizontally by default.\n this.textContainer_.style.display = 'flex';\n this.textContainer_.style.flexDirection = 'column';\n this.textContainer_.style.alignItems = 'center';\n\n // Set the captions at the bottom by default.\n this.textContainer_.style.justifyContent = 'flex-end';\n\n this.videoContainer_.appendChild(this.textContainer_);\n\n if (!config || !config.captionsUpdatePeriod) {\n shaka.Deprecate.deprecateFeature(5,\n 'UITextDisplayer w/ config',\n 'Please migrate to initializing UITextDisplayer with a config.');\n }\n\n /** @private {number} */\n const updatePeriod = (config && config.captionsUpdatePeriod) ?\n config.captionsUpdatePeriod : 0.25;\n\n /** @private {shaka.util.Timer} */\n this.captionsTimer_ = new shaka.util.Timer(() => {\n if (!this.video_.paused) {\n this.updateCaptions_();\n }\n }).tickEvery(updatePeriod);\n\n /**\n * Maps cues to cue elements. Specifically points out the wrapper element of\n * the cue (e.g. the HTML element to put nested cues inside).\n * @private {Map.}\n */\n this.currentCuesMap_ = new Map();\n\n /** @private {shaka.util.EventManager} */\n this.eventManager_ = new shaka.util.EventManager();\n\n this.eventManager_.listen(document, 'fullscreenchange', () => {\n this.updateCaptions_(/* forceUpdate= */ true);\n });\n\n this.eventManager_.listen(this.video_, 'seeking', () => {\n this.updateCaptions_(/* forceUpdate= */ true);\n });\n\n // From: https://html.spec.whatwg.org/multipage/media.html#dom-video-videowidth\n // Whenever the natural width or natural height of the video changes\n // (including, for example, because the selected video track was changed),\n // if the element's readyState attribute is not HAVE_NOTHING, the user\n // agent must queue a media element task given the media element to fire an\n // event named resize at the media element.\n this.eventManager_.listen(this.video_, 'resize', () => {\n const element = /** @type {!HTMLVideoElement} */ (this.video_);\n const width = element.videoWidth;\n const height = element.videoHeight;\n if (width && height) {\n this.aspectRatio_ = width / height;\n } else {\n this.aspectRatio_ = null;\n }\n });\n\n /** @private {ResizeObserver} */\n this.resizeObserver_ = null;\n if ('ResizeObserver' in window) {\n this.resizeObserver_ = new ResizeObserver(() => {\n this.updateCaptions_(/* forceUpdate= */ true);\n });\n this.resizeObserver_.observe(this.textContainer_);\n }\n\n /** @private {Map.} */\n this.regionElements_ = new Map();\n }\n\n\n /**\n * @override\n * @export\n */\n configure(config) {\n if (this.captionsTimer_) {\n this.captionsTimer_.tickEvery(config.captionsUpdatePeriod);\n }\n }\n\n\n /**\n * @override\n * @export\n */\n append(cues) {\n // Clone the cues list for performace optimization. We can avoid the cues\n // list growing during the comparisons for duplicate cues.\n // See: https://github.com/shaka-project/shaka-player/issues/3018\n const cuesList = [...this.cues_];\n for (const cue of shaka.text.Utils.removeDuplicates(cues)) {\n // When a VTT cue spans a segment boundary, the cue will be duplicated\n // into two segments.\n // To avoid displaying duplicate cues, if the current cue list already\n // contains the cue, skip it.\n const containsCue = cuesList.some(\n (cueInList) => shaka.text.Cue.equal(cueInList, cue));\n if (!containsCue) {\n this.cues_.push(cue);\n }\n }\n\n this.updateCaptions_();\n }\n\n\n /**\n * @override\n * @export\n */\n destroy() {\n // Return resolved promise if destroy() has been called.\n if (!this.textContainer_) {\n return Promise.resolve();\n }\n\n // Remove the text container element from the UI.\n this.videoContainer_.removeChild(this.textContainer_);\n this.textContainer_ = null;\n\n this.isTextVisible_ = false;\n this.cues_ = [];\n if (this.captionsTimer_) {\n this.captionsTimer_.stop();\n }\n\n this.currentCuesMap_.clear();\n\n // Tear-down the event manager to ensure messages stop moving around.\n if (this.eventManager_) {\n this.eventManager_.release();\n this.eventManager_ = null;\n }\n\n if (this.resizeObserver_) {\n this.resizeObserver_.disconnect();\n this.resizeObserver_ = null;\n }\n\n return Promise.resolve();\n }\n\n\n /**\n * @override\n * @export\n */\n remove(start, end) {\n // Return false if destroy() has been called.\n if (!this.textContainer_) {\n return false;\n }\n\n // Remove the cues out of the time range.\n const oldNumCues = this.cues_.length;\n this.cues_ = this.cues_.filter(\n (cue) => cue.startTime < start || cue.endTime >= end);\n // If anything was actually removed in this process, force the captions to\n // update. This makes sure that the currently-displayed cues will stop\n // displaying if removed (say, due to the user changing languages).\n const forceUpdate = oldNumCues > this.cues_.length;\n this.updateCaptions_(forceUpdate);\n\n return true;\n }\n\n\n /**\n * @override\n * @export\n */\n isTextVisible() {\n return this.isTextVisible_;\n }\n\n /**\n * @override\n * @export\n */\n setTextVisibility(on) {\n this.isTextVisible_ = on;\n this.updateCaptions_(/* forceUpdate= */ true);\n }\n\n /**\n * @override\n * @export\n */\n setTextLanguage(language) {\n if (language && language != 'und') {\n this.textContainer_.setAttribute('lang', language);\n } else {\n this.textContainer_.setAttribute('lang', '');\n }\n }\n\n /**\n * @private\n */\n isElementUnderTextContainer_(elemToCheck) {\n while (elemToCheck != null) {\n if (elemToCheck == this.textContainer_) {\n return true;\n }\n elemToCheck = elemToCheck.parentElement;\n }\n return false;\n }\n\n /**\n * @param {!Array.} cues\n * @param {!HTMLElement} container\n * @param {number} currentTime\n * @param {!Array.} parents\n * @private\n */\n updateCuesRecursive_(cues, container, currentTime, parents) {\n // Set to true if the cues have changed in some way, which will require\n // DOM changes. E.g. if a cue was added or removed.\n let updateDOM = false;\n /**\n * The elements to remove from the DOM.\n * Some of these elements may be added back again, if their corresponding\n * cue is in toPlant.\n * These elements are only removed if updateDOM is true.\n * @type {!Array.}\n */\n const toUproot = [];\n /**\n * The cues whose corresponding elements should be in the DOM.\n * Some of these might be new, some might have been displayed beforehand.\n * These will only be added if updateDOM is true.\n * @type {!Array.}\n */\n const toPlant = [];\n for (const cue of cues) {\n parents.push(cue);\n\n let cueRegistry = this.currentCuesMap_.get(cue);\n const shouldBeDisplayed =\n cue.startTime <= currentTime && cue.endTime > currentTime;\n let wrapper = cueRegistry ? cueRegistry.wrapper : null;\n\n if (cueRegistry) {\n // If the cues are replanted, all existing cues should be uprooted,\n // even ones which are going to be planted again.\n toUproot.push(cueRegistry.cueElement);\n\n // Also uproot all displayed region elements.\n if (cueRegistry.regionElement) {\n toUproot.push(cueRegistry.regionElement);\n }\n\n // If the cue should not be displayed, remove it entirely.\n if (!shouldBeDisplayed) {\n // Since something has to be removed, we will need to update the DOM.\n updateDOM = true;\n this.currentCuesMap_.delete(cue);\n cueRegistry = null;\n }\n }\n\n if (shouldBeDisplayed) {\n toPlant.push(cue);\n if (!cueRegistry) {\n // The cue has to be made!\n this.createCue_(cue, parents);\n cueRegistry = this.currentCuesMap_.get(cue);\n wrapper = cueRegistry.wrapper;\n updateDOM = true;\n } else if (!this.isElementUnderTextContainer_(wrapper)) {\n // We found that the wrapper needs to be in the DOM\n updateDOM = true;\n }\n }\n\n // Recursively check the nested cues, to see if they need to be added or\n // removed.\n // If wrapper is null, that means that the cue is not only not being\n // displayed currently, it also was not removed this tick. So it's\n // guaranteed that the children will neither need to be added nor removed.\n if (cue.nestedCues.length > 0 && wrapper) {\n this.updateCuesRecursive_(\n cue.nestedCues, wrapper, currentTime, parents);\n }\n\n const topCue = parents.pop();\n goog.asserts.assert(topCue == cue, 'Parent cues should be kept in order');\n }\n\n if (updateDOM) {\n for (const element of toUproot) {\n // NOTE: Because we uproot shared region elements, too, we might hit an\n // element here that has no parent because we've already processed it.\n if (element.parentElement) {\n element.parentElement.removeChild(element);\n }\n }\n toPlant.sort((a, b) => {\n if (a.startTime != b.startTime) {\n return a.startTime - b.startTime;\n } else {\n return a.endTime - b.endTime;\n }\n });\n for (const cue of toPlant) {\n const cueRegistry = this.currentCuesMap_.get(cue);\n goog.asserts.assert(cueRegistry, 'cueRegistry should exist.');\n if (cueRegistry.regionElement) {\n if (cueRegistry.regionElement.contains(container)) {\n cueRegistry.regionElement.removeChild(container);\n }\n container.appendChild(cueRegistry.regionElement);\n cueRegistry.regionElement.appendChild(cueRegistry.cueElement);\n } else {\n container.appendChild(cueRegistry.cueElement);\n }\n }\n }\n }\n\n /**\n * Display the current captions.\n * @param {boolean=} forceUpdate\n * @private\n */\n updateCaptions_(forceUpdate = false) {\n if (!this.textContainer_) {\n return;\n }\n\n const currentTime = this.video_.currentTime;\n if (!this.isTextVisible_ || forceUpdate) {\n // Remove child elements from all regions.\n for (const regionElement of this.regionElements_.values()) {\n shaka.util.Dom.removeAllChildren(regionElement);\n }\n // Remove all top-level elements in the text container.\n shaka.util.Dom.removeAllChildren(this.textContainer_);\n // Clear the element maps.\n this.currentCuesMap_.clear();\n this.regionElements_.clear();\n }\n if (this.isTextVisible_) {\n // Log currently attached cue elements for verification, later.\n const previousCuesMap = new Map();\n if (goog.DEBUG) {\n for (const cue of this.currentCuesMap_.keys()) {\n previousCuesMap.set(cue, this.currentCuesMap_.get(cue));\n }\n }\n\n // Update the cues.\n this.updateCuesRecursive_(\n this.cues_, this.textContainer_, currentTime, /* parents= */ []);\n\n if (goog.DEBUG) {\n // Previously, we had an issue (#2076) where cues sometimes were not\n // properly removed from the DOM. It is not clear if this issue still\n // happens, so the previous fix for it has been changed to an assert.\n for (const cue of previousCuesMap.keys()) {\n if (!this.currentCuesMap_.has(cue)) {\n // TODO: If the problem does not appear again, then we should remove\n // this assert (and the previousCuesMap code) in Shaka v4.\n const cueElement = previousCuesMap.get(cue).cueElement;\n goog.asserts.assert(\n !cueElement.parentNode, 'Cue was not properly removed!');\n }\n }\n }\n }\n }\n\n /**\n * Compute a unique internal id:\n * Regions can reuse the id but have different dimensions, we need to\n * consider those differences\n * @param {shaka.text.CueRegion} region\n * @private\n */\n generateRegionId_(region) {\n const percentageUnit = shaka.text.CueRegion.units.PERCENTAGE;\n const heightUnit = region.heightUnits == percentageUnit ? '%' : 'px';\n const viewportAnchorUnit =\n region.viewportAnchorUnits == percentageUnit ? '%' : 'px';\n const uniqueRegionId = `${region.id}_${\n region.width}x${region.height}${heightUnit}-${\n region.viewportAnchorX}x${region.viewportAnchorY}${viewportAnchorUnit}`;\n\n return uniqueRegionId;\n }\n\n /**\n * Get or create a region element corresponding to the cue region. These are\n * cached by ID.\n *\n * @param {!shaka.text.Cue} cue\n * @return {!HTMLElement}\n * @private\n */\n getRegionElement_(cue) {\n const region = cue.region;\n // from https://dvcs.w3.org/hg/text-tracks/raw-file/default/608toVTT/608toVTT.html#caption-window-size\n // if aspect ratio is 4/3, use that value, otherwise, use the 16:9 value\n const lineWidthMultiple = this.aspectRatio_ === 4/3 ? 2.5 : 1.9;\n const lineHeightMultiple = 5.33;\n\n const regionId = this.generateRegionId_(region);\n if (this.regionElements_.has(regionId)) {\n return this.regionElements_.get(regionId);\n }\n\n const regionElement = shaka.util.Dom.createHTMLElement('span');\n\n const linesUnit = shaka.text.CueRegion.units.LINES;\n const percentageUnit = shaka.text.CueRegion.units.PERCENTAGE;\n const pixelUnit = shaka.text.CueRegion.units.PX;\n let heightUnit = region.heightUnits == percentageUnit ? '%' : 'px';\n let widthUnit = region.widthUnits == percentageUnit ? '%' : 'px';\n const viewportAnchorUnit =\n region.viewportAnchorUnits == percentageUnit ? '%' : 'px';\n\n regionElement.id = 'shaka-text-region---' + regionId;\n regionElement.classList.add('shaka-text-region');\n\n regionElement.style.position = 'absolute';\n\n let regionHeight = region.height;\n let regionWidth = region.width;\n\n if (region.heightUnits === linesUnit) {\n regionHeight = region.height * lineHeightMultiple;\n heightUnit = '%';\n }\n if (region.widthUnits === linesUnit) {\n regionWidth = region.width * lineWidthMultiple;\n widthUnit = '%';\n }\n regionElement.style.height = regionHeight + heightUnit;\n regionElement.style.width = regionWidth + widthUnit;\n\n if (region.viewportAnchorUnits === linesUnit) {\n // from https://dvcs.w3.org/hg/text-tracks/raw-file/default/608toVTT/608toVTT.html#positioning-in-cea-708\n let top = region.viewportAnchorY / 75 * 100;\n const windowWidth = this.aspectRatio_ === 4/3 ? 160 : 210;\n let left = region.viewportAnchorX / windowWidth * 100;\n // adjust top and left values based on the region anchor and window size\n top -= region.regionAnchorY * regionHeight / 100;\n left -= region.regionAnchorX * regionWidth / 100;\n regionElement.style.top = top + '%';\n regionElement.style.left = left + '%';\n } else {\n regionElement.style.top = region.viewportAnchorY -\n region.regionAnchorY * regionHeight / 100 + viewportAnchorUnit;\n regionElement.style.left = region.viewportAnchorX -\n region.regionAnchorX * regionWidth / 100 + viewportAnchorUnit;\n }\n if (region.heightUnits !== pixelUnit &&\n region.widthUnits !== pixelUnit &&\n region.viewportAnchorUnits !== pixelUnit) {\n // Clip region\n const top = parseInt(regionElement.style.top.slice(0, -1), 10) || 0;\n const left = parseInt(regionElement.style.left.slice(0, -1), 10) || 0;\n const height = parseInt(regionElement.style.height.slice(0, -1), 10) || 0;\n const width = parseInt(regionElement.style.width.slice(0, -1), 10) || 0;\n const realTop = Math.max(0, Math.min(100 - height, top));\n const realLeft = Math.max(0, Math.min(100 - width, left));\n regionElement.style.top = realTop + '%';\n regionElement.style.left = realLeft + '%';\n }\n\n regionElement.style.display = 'flex';\n regionElement.style.flexDirection = 'column';\n regionElement.style.alignItems = 'center';\n\n if (cue.displayAlign == shaka.text.Cue.displayAlign.BEFORE) {\n regionElement.style.justifyContent = 'flex-start';\n } else if (cue.displayAlign == shaka.text.Cue.displayAlign.CENTER) {\n regionElement.style.justifyContent = 'center';\n } else {\n regionElement.style.justifyContent = 'flex-end';\n }\n\n this.regionElements_.set(regionId, regionElement);\n return regionElement;\n }\n\n /**\n * Creates the object for a cue.\n *\n * @param {!shaka.text.Cue} cue\n * @param {!Array.} parents\n * @private\n */\n createCue_(cue, parents) {\n const isNested = parents.length > 1;\n let type = isNested ? 'span' : 'div';\n if (cue.lineBreak) {\n type = 'br';\n }\n if (cue.rubyTag) {\n type = cue.rubyTag;\n }\n\n const needWrapper = !isNested && cue.nestedCues.length > 0;\n\n // Nested cues are inline elements. Top-level cues are block elements.\n const cueElement = shaka.util.Dom.createHTMLElement(type);\n if (type != 'br') {\n this.setCaptionStyles_(cueElement, cue, parents, needWrapper);\n }\n\n let regionElement = null;\n if (cue.region && cue.region.id) {\n regionElement = this.getRegionElement_(cue);\n }\n\n let wrapper = cueElement;\n if (needWrapper) {\n // Create a wrapper element which will serve to contain all children into\n // a single item. This ensures that nested span elements appear\n // horizontally and br elements occupy no vertical space.\n wrapper = shaka.util.Dom.createHTMLElement('span');\n wrapper.classList.add('shaka-text-wrapper');\n wrapper.style.backgroundColor = cue.backgroundColor;\n wrapper.style.lineHeight = 'normal';\n cueElement.appendChild(wrapper);\n }\n\n this.currentCuesMap_.set(cue, {cueElement, wrapper, regionElement});\n }\n\n /**\n * Compute cue position alignment\n * See https://www.w3.org/TR/webvtt1/#webvtt-cue-position-alignment\n *\n * @param {!shaka.text.Cue} cue\n * @private\n */\n computeCuePositionAlignment_(cue) {\n const Cue = shaka.text.Cue;\n const {direction, positionAlign, textAlign} = cue;\n\n if (positionAlign !== Cue.positionAlign.AUTO) {\n // Position align is not AUTO: use it\n return positionAlign;\n }\n\n // Position align is AUTO: use text align to compute its value\n\n if (textAlign === Cue.textAlign.LEFT ||\n (textAlign === Cue.textAlign.START &&\n direction === Cue.direction.HORIZONTAL_LEFT_TO_RIGHT) ||\n (textAlign === Cue.textAlign.END &&\n direction === Cue.direction.HORIZONTAL_RIGHT_TO_LEFT)) {\n return Cue.positionAlign.LEFT;\n }\n\n if (textAlign === Cue.textAlign.RIGHT ||\n (textAlign === Cue.textAlign.START &&\n direction === Cue.direction.HORIZONTAL_RIGHT_TO_LEFT) ||\n (textAlign === Cue.textAlign.END &&\n direction === Cue.direction.HORIZONTAL_LEFT_TO_RIGHT)) {\n return Cue.positionAlign.RIGHT;\n }\n\n return Cue.positionAlign.CENTER;\n }\n\n /**\n * @param {!HTMLElement} cueElement\n * @param {!shaka.text.Cue} cue\n * @param {!Array.} parents\n * @param {boolean} hasWrapper\n * @private\n */\n setCaptionStyles_(cueElement, cue, parents, hasWrapper) {\n const Cue = shaka.text.Cue;\n const inherit =\n (cb) => shaka.text.UITextDisplayer.inheritProperty_(parents, cb);\n const style = cueElement.style;\n const isLeaf = cue.nestedCues.length == 0;\n const isNested = parents.length > 1;\n\n // TODO: wrapLine is not yet supported. Lines always wrap.\n\n // White space should be preserved if emitted by the text parser. It's the\n // job of the parser to omit any whitespace that should not be displayed.\n // Using 'pre-wrap' means that whitespace is preserved even at the end of\n // the text, but that lines which overflow can still be broken.\n style.whiteSpace = 'pre-wrap';\n\n // Using 'break-spaces' would be better, as it would preserve even trailing\n // spaces, but that only shipped in Chrome 76. As of July 2020, Safari\n // still has not implemented break-spaces, and the original Chromecast will\n // never have this feature since it no longer gets firmware updates.\n // So we need to replace trailing spaces with non-breaking spaces.\n const text = cue.payload.replace(/\\s+$/g, (match) => {\n const nonBreakingSpace = '\\xa0';\n return nonBreakingSpace.repeat(match.length);\n });\n\n style.webkitTextStrokeColor = cue.textStrokeColor;\n style.webkitTextStrokeWidth = cue.textStrokeWidth;\n style.color = cue.color;\n style.direction = cue.direction;\n style.opacity = cue.opacity;\n style.paddingLeft = shaka.text.UITextDisplayer.convertLengthValue_(\n cue.linePadding, cue, this.videoContainer_);\n style.paddingRight =\n shaka.text.UITextDisplayer.convertLengthValue_(\n cue.linePadding, cue, this.videoContainer_);\n style.textCombineUpright = cue.textCombineUpright;\n style.textShadow = cue.textShadow;\n\n if (cue.backgroundImage) {\n style.backgroundImage = 'url(\\'' + cue.backgroundImage + '\\')';\n style.backgroundRepeat = 'no-repeat';\n style.backgroundSize = 'contain';\n style.backgroundPosition = 'center';\n\n if (cue.backgroundColor) {\n style.backgroundColor = cue.backgroundColor;\n }\n\n // Quoting https://www.w3.org/TR/ttml-imsc1.2/:\n // \"The width and height (in pixels) of the image resource referenced by\n // smpte:backgroundImage SHALL be equal to the width and height expressed\n // by the tts:extent attribute of the region in which the div element is\n // presented\".\n style.width = '100%';\n style.height = '100%';\n } else {\n // If we have both text and nested cues, then style everything; otherwise\n // place the text in its own so the background doesn't fill the\n // whole region.\n let elem;\n if (cue.nestedCues.length) {\n elem = cueElement;\n } else {\n elem = shaka.util.Dom.createHTMLElement('span');\n cueElement.appendChild(elem);\n }\n\n if (cue.border) {\n elem.style.border = cue.border;\n }\n if (!hasWrapper) {\n const bgColor = inherit((c) => c.backgroundColor);\n if (bgColor) {\n elem.style.backgroundColor = bgColor;\n } else if (text) {\n // If there is no background, default to a semi-transparent black.\n // Only do this for the text itself.\n elem.style.backgroundColor = 'rgba(0, 0, 0, 0.8)';\n }\n }\n if (text) {\n elem.textContent = text;\n }\n }\n\n // The displayAlign attribute specifies the vertical alignment of the\n // captions inside the text container. Before means at the top of the\n // text container, and after means at the bottom.\n if (isNested && !parents[parents.length - 1].isContainer) {\n style.display = 'inline';\n } else {\n style.display = 'flex';\n style.flexDirection = 'column';\n style.alignItems = 'center';\n if (cue.textAlign == Cue.textAlign.LEFT ||\n cue.textAlign == Cue.textAlign.START) {\n style.width = '100%';\n style.alignItems = 'start';\n } else if (cue.textAlign == Cue.textAlign.RIGHT ||\n cue.textAlign == Cue.textAlign.END) {\n style.width = '100%';\n style.alignItems = 'end';\n }\n\n if (cue.displayAlign == Cue.displayAlign.BEFORE) {\n style.justifyContent = 'flex-start';\n } else if (cue.displayAlign == Cue.displayAlign.CENTER) {\n style.justifyContent = 'center';\n } else {\n style.justifyContent = 'flex-end';\n }\n }\n\n if (!isLeaf) {\n style.margin = '0';\n }\n\n style.fontFamily = cue.fontFamily;\n style.fontWeight = cue.fontWeight.toString();\n style.fontStyle = cue.fontStyle;\n style.letterSpacing = cue.letterSpacing;\n style.fontSize = shaka.text.UITextDisplayer.convertLengthValue_(\n cue.fontSize, cue, this.videoContainer_);\n\n // The line attribute defines the positioning of the text container inside\n // the video container.\n // - The line offsets the text container from the top, the right or left of\n // the video viewport as defined by the writing direction.\n // - The value of the line is either as a number of lines, or a percentage\n // of the video viewport height or width.\n // The lineAlign is an alignment for the text container's line.\n // - The Start alignment means the text container’s top side (for horizontal\n // cues), left side (for vertical growing right), or right side (for\n // vertical growing left) is aligned at the line.\n // - The Center alignment means the text container is centered at the line\n // (to be implemented).\n // - The End Alignment means The text container’s bottom side (for\n // horizontal cues), right side (for vertical growing right), or left side\n // (for vertical growing left) is aligned at the line.\n // TODO: Implement line alignment with line number.\n // TODO: Implement lineAlignment of 'CENTER'.\n let line = cue.line;\n if (line != null) {\n let lineInterpretation = cue.lineInterpretation;\n // HACK: the current implementation of UITextDisplayer only handled\n // PERCENTAGE, so we need convert LINE_NUMBER to PERCENTAGE\n if (lineInterpretation == Cue.lineInterpretation.LINE_NUMBER) {\n lineInterpretation = Cue.lineInterpretation.PERCENTAGE;\n let maxLines = 16;\n // The maximum number of lines is different if it is a vertical video.\n if (this.aspectRatio_ && this.aspectRatio_ < 1) {\n maxLines = 32;\n }\n if (line < 0) {\n line = 100 + line / maxLines * 100;\n } else {\n line = line / maxLines * 100;\n }\n }\n if (lineInterpretation == Cue.lineInterpretation.PERCENTAGE) {\n style.position = 'absolute';\n if (cue.writingMode == Cue.writingMode.HORIZONTAL_TOP_TO_BOTTOM) {\n style.width = '100%';\n if (cue.lineAlign == Cue.lineAlign.START) {\n style.top = line + '%';\n } else if (cue.lineAlign == Cue.lineAlign.END) {\n style.bottom = (100 - line) + '%';\n }\n } else if (cue.writingMode == Cue.writingMode.VERTICAL_LEFT_TO_RIGHT) {\n style.height = '100%';\n if (cue.lineAlign == Cue.lineAlign.START) {\n style.left = line + '%';\n } else if (cue.lineAlign == Cue.lineAlign.END) {\n style.right = (100 - line) + '%';\n }\n } else {\n style.height = '100%';\n if (cue.lineAlign == Cue.lineAlign.START) {\n style.right = line + '%';\n } else if (cue.lineAlign == Cue.lineAlign.END) {\n style.left = (100 - line) + '%';\n }\n }\n }\n }\n\n style.lineHeight = cue.lineHeight;\n\n // The positionAlign attribute is an alignment for the text container in\n // the dimension of the writing direction.\n const computedPositionAlign = this.computeCuePositionAlignment_(cue);\n if (computedPositionAlign == Cue.positionAlign.LEFT) {\n style.cssFloat = 'left';\n if (cue.position !== null) {\n style.position = 'absolute';\n if (cue.writingMode == Cue.writingMode.HORIZONTAL_TOP_TO_BOTTOM) {\n style.left = cue.position + '%';\n style.width = 'auto';\n } else {\n style.top = cue.position + '%';\n }\n }\n } else if (computedPositionAlign == Cue.positionAlign.RIGHT) {\n style.cssFloat = 'right';\n if (cue.position !== null) {\n style.position = 'absolute';\n if (cue.writingMode == Cue.writingMode.HORIZONTAL_TOP_TO_BOTTOM) {\n style.right = (100 - cue.position) + '%';\n style.width = 'auto';\n } else {\n style.bottom = cue.position + '%';\n }\n }\n } else {\n if (cue.position !== null && cue.position != 50) {\n style.position = 'absolute';\n if (cue.writingMode == Cue.writingMode.HORIZONTAL_TOP_TO_BOTTOM) {\n style.left = cue.position + '%';\n style.width = 'auto';\n } else {\n style.top = cue.position + '%';\n }\n }\n }\n\n style.textAlign = cue.textAlign;\n style.textDecoration = cue.textDecoration.join(' ');\n style.writingMode = cue.writingMode;\n\n // Old versions of Chromium, which may be found in certain versions of Tizen\n // and WebOS, may require the prefixed version: webkitWritingMode.\n // https://caniuse.com/css-writing-mode\n // However, testing shows that Tizen 3, at least, has a 'writingMode'\n // property, but the setter for it does nothing. Therefore we need to\n // detect that and fall back to the prefixed version in this case, too.\n if (!('writingMode' in document.documentElement.style) ||\n style.writingMode != cue.writingMode) {\n // Note that here we do not bother to check for webkitWritingMode support\n // explicitly. We try the unprefixed version, then fall back to the\n // prefixed version unconditionally.\n style.webkitWritingMode = cue.writingMode;\n }\n\n // The size is a number giving the size of the text container, to be\n // interpreted as a percentage of the video, as defined by the writing\n // direction.\n if (cue.size) {\n if (cue.writingMode == Cue.writingMode.HORIZONTAL_TOP_TO_BOTTOM) {\n style.width = cue.size + '%';\n } else {\n style.height = cue.size + '%';\n }\n }\n }\n\n /**\n * Returns info about provided lengthValue\n * @example 100px => { value: 100, unit: 'px' }\n * @param {?string} lengthValue\n *\n * @return {?{ value: number, unit: string }}\n * @private\n */\n static getLengthValueInfo_(lengthValue) {\n const matches = new RegExp(/(\\d*\\.?\\d+)([a-z]+|%+)/).exec(lengthValue);\n\n if (!matches) {\n return null;\n }\n\n return {\n value: Number(matches[1]),\n unit: matches[2],\n };\n }\n\n /**\n * Converts length value to an absolute value in pixels.\n * If lengthValue is already an absolute value it will not\n * be modified. Relative lengthValue will be converted to an\n * absolute value in pixels based on Computed Cell Size\n *\n * @param {string} lengthValue\n * @param {!shaka.text.Cue} cue\n * @param {HTMLElement} videoContainer\n * @return {string}\n * @private\n */\n static convertLengthValue_(lengthValue, cue, videoContainer) {\n const lengthValueInfo =\n shaka.text.UITextDisplayer.getLengthValueInfo_(lengthValue);\n\n if (!lengthValueInfo) {\n return lengthValue;\n }\n\n const {unit, value} = lengthValueInfo;\n\n switch (unit) {\n case '%':\n return shaka.text.UITextDisplayer.getAbsoluteLengthInPixels_(\n value / 100, cue, videoContainer);\n case 'c':\n return shaka.text.UITextDisplayer.getAbsoluteLengthInPixels_(\n value, cue, videoContainer);\n default:\n return lengthValue;\n }\n }\n\n /**\n * Returns computed absolute length value in pixels based on cell\n * and a video container size\n * @param {number} value\n * @param {!shaka.text.Cue} cue\n * @param {HTMLElement} videoContainer\n * @return {string}\n *\n * @private\n * */\n static getAbsoluteLengthInPixels_(value, cue, videoContainer) {\n const containerHeight = videoContainer.clientHeight;\n\n return (containerHeight * value / cue.cellResolution.rows) + 'px';\n }\n\n /**\n * Inherits a property from the parent Cue elements. If the value is falsy,\n * it is assumed to be inherited from the parent. This returns null if the\n * value isn't found.\n *\n * @param {!Array.} parents\n * @param {function(!shaka.text.Cue):?T} cb\n * @return {?T}\n * @template T\n * @private\n */\n static inheritProperty_(parents, cb) {\n for (let i = parents.length - 1; i >= 0; i--) {\n const val = cb(parents[i]);\n if (val || val === 0) {\n return val;\n }\n }\n return null;\n }\n};\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.util.CmcdManager');\n\ngoog.require('goog.Uri');\ngoog.require('shaka.log');\ngoog.require('shaka.net.NetworkingEngine');\ngoog.require('shaka.util.ArrayUtils');\n\ngoog.requireType('shaka.media.SegmentReference');\n\n/**\n * @summary\n * A CmcdManager maintains CMCD state as well as a collection of utility\n * functions.\n */\nshaka.util.CmcdManager = class {\n /**\n * @param {shaka.util.CmcdManager.PlayerInterface} playerInterface\n * @param {shaka.extern.CmcdConfiguration} config\n */\n constructor(playerInterface, config) {\n /** @private {shaka.util.CmcdManager.PlayerInterface} */\n this.playerInterface_ = playerInterface;\n\n /** @private {?shaka.extern.CmcdConfiguration} */\n this.config_ = config;\n\n /**\n * Streaming format\n *\n * @private {(shaka.util.CmcdManager.StreamingFormat|undefined)}\n */\n this.sf_ = undefined;\n\n /**\n * @private {boolean}\n */\n this.playbackStarted_ = false;\n\n /**\n * @private {boolean}\n */\n this.buffering_ = true;\n\n /**\n * @private {boolean}\n */\n this.starved_ = false;\n\n /**\n * @private {boolean}\n */\n this.lowLatency_ = false;\n }\n\n /**\n * Called by the Player to provide an updated configuration any time it\n * changes.\n *\n * @param {shaka.extern.CmcdConfiguration} config\n */\n configure(config) {\n this.config_ = config;\n }\n\n\n /**\n * Resets the CmcdManager.\n */\n reset() {\n this.playbackStarted_ = false;\n this.buffering_ = true;\n this.starved_ = false;\n this.lowLatency_ = false;\n }\n\n /**\n * Set the buffering state\n *\n * @param {boolean} buffering\n */\n setBuffering(buffering) {\n if (!buffering && !this.playbackStarted_) {\n this.playbackStarted_ = true;\n }\n\n if (this.playbackStarted_ && buffering) {\n this.starved_ = true;\n }\n\n this.buffering_ = buffering;\n }\n\n /**\n * Set the low latency\n *\n * @param {boolean} lowLatency\n */\n setLowLatency(lowLatency) {\n this.lowLatency_ = lowLatency;\n\n const StreamingFormat = shaka.util.CmcdManager.StreamingFormat;\n if (this.lowLatency_) {\n if (this.sf_ == StreamingFormat.DASH) {\n this.sf_ = StreamingFormat.LOW_LATENCY_DASH;\n } else if (this.sf_ == StreamingFormat.HLS) {\n this.sf_ = StreamingFormat.LOW_LATENCY_HLS;\n }\n } else {\n if (this.sf_ == StreamingFormat.LOW_LATENCY_DASH) {\n this.sf_ = StreamingFormat.DASH;\n } else if (this.sf_ == StreamingFormat.LOW_LATENCY_HLS) {\n this.sf_ = StreamingFormat.HLS;\n }\n }\n }\n\n /**\n * Apply CMCD data to a request.\n *\n * @param {!shaka.net.NetworkingEngine.RequestType} type\n * The request type\n * @param {!shaka.extern.Request} request\n * The request to apply CMCD data to\n * @param {shaka.extern.RequestContext=} context\n * The request context\n */\n applyData(type, request, context = {}) {\n if (!this.config_.enabled) {\n return;\n }\n\n if (request.method === 'HEAD') {\n this.apply_(request);\n return;\n }\n\n const RequestType = shaka.net.NetworkingEngine.RequestType;\n const ObjectType = shaka.util.CmcdManager.ObjectType;\n\n switch (type) {\n case RequestType.MANIFEST:\n this.applyManifestData(request, context);\n break;\n\n case RequestType.SEGMENT:\n this.applySegmentData(request, context);\n break;\n\n case RequestType.LICENSE:\n case RequestType.SERVER_CERTIFICATE:\n case RequestType.KEY:\n this.apply_(request, {ot: ObjectType.KEY});\n break;\n\n case RequestType.TIMING:\n this.apply_(request, {ot: ObjectType.OTHER});\n break;\n }\n }\n\n /**\n * Apply CMCD data to a manifest request.\n *\n * @param {!shaka.extern.Request} request\n * The request to apply CMCD data to\n * @param {shaka.extern.RequestContext} context\n * The request context\n */\n applyManifestData(request, context) {\n try {\n if (!this.config_.enabled) {\n return;\n }\n\n if (context.type) {\n this.sf_ = this.getStreamFormat_(context.type);\n }\n\n this.apply_(request, {\n ot: shaka.util.CmcdManager.ObjectType.MANIFEST,\n su: !this.playbackStarted_,\n });\n } catch (error) {\n shaka.log.warnOnce('CMCD_MANIFEST_ERROR',\n 'Could not generate manifest CMCD data.', error);\n }\n }\n\n /**\n * Apply CMCD data to a segment request\n *\n * @param {!shaka.extern.Request} request\n * @param {shaka.extern.RequestContext} context\n * The request context\n */\n applySegmentData(request, context) {\n try {\n if (!this.config_.enabled) {\n return;\n }\n\n const segment = context.segment;\n\n let duration = 0;\n if (segment) {\n duration = segment.endTime - segment.startTime;\n }\n\n const data = {\n d: duration * 1000,\n st: this.getStreamType_(),\n };\n\n data.ot = this.getObjectType_(context);\n\n const ObjectType = shaka.util.CmcdManager.ObjectType;\n const isMedia = data.ot === ObjectType.VIDEO ||\n data.ot === ObjectType.AUDIO ||\n data.ot === ObjectType.MUXED ||\n data.ot === ObjectType.TIMED_TEXT;\n\n const stream = context.stream;\n if (stream) {\n const playbackRate = this.playerInterface_.getPlaybackRate();\n if (isMedia) {\n data.bl = this.getBufferLength_(stream.type);\n if (data.ot !== ObjectType.TIMED_TEXT) {\n const remainingBufferLength =\n this.getRemainingBufferLength_(stream.type);\n if (playbackRate) {\n data.dl = remainingBufferLength / Math.abs(playbackRate);\n } else {\n data.dl = remainingBufferLength;\n }\n }\n }\n\n if (stream.bandwidth) {\n data.br = stream.bandwidth / 1000;\n }\n\n if (stream.segmentIndex && segment) {\n const reverse = playbackRate < 0;\n const iterator = stream.segmentIndex.getIteratorForTime(\n segment.endTime, /* allowNonIndepedent= */ true, reverse);\n if (iterator) {\n const nextSegment = iterator.next().value;\n if (nextSegment && nextSegment != segment) {\n if (!shaka.util.ArrayUtils.equal(\n segment.getUris(), nextSegment.getUris())) {\n data.nor = this.urlToRelativePath_(\n nextSegment.getUris()[0], request.uris[0]);\n }\n if ((nextSegment.startByte || nextSegment.endByte) &&\n (segment.startByte != nextSegment.startByte ||\n segment.endByte != nextSegment.endByte)) {\n let range = nextSegment.startByte + '-';\n if (nextSegment.endByte) {\n range += nextSegment.endByte;\n }\n data.nrr = range;\n }\n }\n }\n const rtp = this.calculateRtp_(stream, segment);\n if (!isNaN(rtp)) {\n data.rtp = rtp;\n }\n }\n }\n\n if (isMedia && data.ot !== ObjectType.TIMED_TEXT) {\n data.tb = this.getTopBandwidth_(data.ot) / 1000;\n }\n\n this.apply_(request, data);\n } catch (error) {\n shaka.log.warnOnce('CMCD_SEGMENT_ERROR',\n 'Could not generate segment CMCD data.', error);\n }\n }\n\n /**\n * Apply CMCD data to a text request\n *\n * @param {!shaka.extern.Request} request\n */\n applyTextData(request) {\n try {\n if (!this.config_.enabled) {\n return;\n }\n\n this.apply_(request, {\n ot: shaka.util.CmcdManager.ObjectType.CAPTION,\n su: true,\n });\n } catch (error) {\n shaka.log.warnOnce('CMCD_TEXT_ERROR',\n 'Could not generate text CMCD data.', error);\n }\n }\n\n /**\n * Apply CMCD data to streams loaded via src=.\n *\n * @param {string} uri\n * @param {string} mimeType\n * @return {string}\n */\n appendSrcData(uri, mimeType) {\n try {\n if (!this.config_.enabled) {\n return uri;\n }\n\n const data = this.createData_();\n data.ot = this.getObjectTypeFromMimeType_(mimeType);\n data.su = true;\n\n const query = shaka.util.CmcdManager.toQuery(data);\n\n return shaka.util.CmcdManager.appendQueryToUri(uri, query);\n } catch (error) {\n shaka.log.warnOnce('CMCD_SRC_ERROR',\n 'Could not generate src CMCD data.', error);\n return uri;\n }\n }\n\n /**\n * Apply CMCD data to side car text track uri.\n *\n * @param {string} uri\n * @return {string}\n */\n appendTextTrackData(uri) {\n try {\n if (!this.config_.enabled) {\n return uri;\n }\n\n const data = this.createData_();\n data.ot = shaka.util.CmcdManager.ObjectType.CAPTION;\n data.su = true;\n\n const query = shaka.util.CmcdManager.toQuery(data);\n\n return shaka.util.CmcdManager.appendQueryToUri(uri, query);\n } catch (error) {\n shaka.log.warnOnce('CMCD_TEXT_TRACK_ERROR',\n 'Could not generate text track CMCD data.', error);\n return uri;\n }\n }\n\n /**\n * Create baseline CMCD data\n *\n * @return {CmcdData}\n * @private\n */\n createData_() {\n if (!this.config_.sessionId) {\n this.config_.sessionId = window.crypto.randomUUID();\n }\n return {\n v: shaka.util.CmcdManager.Version,\n sf: this.sf_,\n sid: this.config_.sessionId,\n cid: this.config_.contentId,\n mtp: this.playerInterface_.getBandwidthEstimate() / 1000,\n };\n }\n\n /**\n * Apply CMCD data to a request.\n *\n * @param {!shaka.extern.Request} request The request to apply CMCD data to\n * @param {!CmcdData} data The data object\n * @param {boolean} useHeaders Send data via request headers\n * @private\n */\n apply_(request, data = {}, useHeaders = this.config_.useHeaders) {\n if (!this.config_.enabled) {\n return;\n }\n\n // apply baseline data\n Object.assign(data, this.createData_());\n\n data.pr = this.playerInterface_.getPlaybackRate();\n\n const isVideo = data.ot === shaka.util.CmcdManager.ObjectType.VIDEO ||\n data.ot === shaka.util.CmcdManager.ObjectType.MUXED;\n\n if (this.starved_ && isVideo) {\n data.bs = true;\n data.su = true;\n this.starved_ = false;\n }\n\n if (data.su == null) {\n data.su = this.buffering_;\n }\n\n const output = this.filterKeys_(data);\n\n if (useHeaders) {\n const headers = shaka.util.CmcdManager.toHeaders(output);\n if (!Object.keys(headers).length) {\n return;\n }\n\n Object.assign(request.headers, headers);\n } else {\n const query = shaka.util.CmcdManager.toQuery(output);\n if (!query) {\n return;\n }\n\n request.uris = request.uris.map((uri) => {\n return shaka.util.CmcdManager.appendQueryToUri(uri, query);\n });\n }\n }\n\n /**\n * Filter the CMCD data object to include only the keys specified in the\n * configuration.\n *\n * @param {CmcdData} data\n * @return {CmcdData}\n * @private\n */\n filterKeys_(data) {\n const includeKeys = this.config_.includeKeys;\n\n if (!includeKeys.length) {\n return data;\n }\n\n return Object.keys(data).reduce((acc, key) => {\n if (includeKeys.includes(key)) {\n acc[key] = data[key];\n }\n return acc;\n }, {});\n }\n\n /**\n * The CMCD object type.\n *\n * @param {shaka.extern.RequestContext} context\n * The request context\n * @private\n */\n getObjectType_(context) {\n if (context.type ===\n shaka.net.NetworkingEngine.AdvancedRequestType.INIT_SEGMENT) {\n return shaka.util.CmcdManager.ObjectType.INIT;\n }\n\n const stream = context.stream;\n\n if (!stream) {\n return undefined;\n }\n\n const type = stream.type;\n\n if (type == 'video') {\n if (stream.codecs && stream.codecs.includes(',')) {\n return shaka.util.CmcdManager.ObjectType.MUXED;\n }\n return shaka.util.CmcdManager.ObjectType.VIDEO;\n }\n\n if (type == 'audio') {\n return shaka.util.CmcdManager.ObjectType.AUDIO;\n }\n\n if (type == 'text') {\n if (stream.mimeType === 'application/mp4') {\n return shaka.util.CmcdManager.ObjectType.TIMED_TEXT;\n }\n return shaka.util.CmcdManager.ObjectType.CAPTION;\n }\n\n return undefined;\n }\n\n /**\n * The CMCD object type from mimeType.\n *\n * @param {!string} mimeType\n * @return {(shaka.util.CmcdManager.ObjectType|undefined)}\n * @private\n */\n getObjectTypeFromMimeType_(mimeType) {\n switch (mimeType.toLowerCase()) {\n case 'audio/mp4':\n case 'audio/webm':\n case 'audio/ogg':\n case 'audio/mpeg':\n case 'audio/aac':\n case 'audio/flac':\n case 'audio/wav':\n return shaka.util.CmcdManager.ObjectType.AUDIO;\n\n case 'video/webm':\n case 'video/mp4':\n case 'video/mpeg':\n case 'video/mp2t':\n return shaka.util.CmcdManager.ObjectType.MUXED;\n\n case 'application/x-mpegurl':\n case 'application/vnd.apple.mpegurl':\n case 'application/dash+xml':\n case 'video/vnd.mpeg.dash.mpd':\n case 'application/vnd.ms-sstr+xml':\n return shaka.util.CmcdManager.ObjectType.MANIFEST;\n\n default:\n return undefined;\n }\n }\n\n /**\n * Get the buffer length for a media type in milliseconds\n *\n * @param {string} type\n * @return {number}\n * @private\n */\n getBufferLength_(type) {\n const ranges = this.playerInterface_.getBufferedInfo()[type];\n\n if (!ranges.length) {\n return NaN;\n }\n\n const start = this.playerInterface_.getCurrentTime();\n const range = ranges.find((r) => r.start <= start && r.end >= start);\n\n if (!range) {\n return NaN;\n }\n\n return (range.end - start) * 1000;\n }\n\n /**\n * Get the remaining buffer length for a media type in milliseconds\n *\n * @param {string} type\n * @return {number}\n * @private\n */\n getRemainingBufferLength_(type) {\n const ranges = this.playerInterface_.getBufferedInfo()[type];\n\n if (!ranges.length) {\n return 0;\n }\n\n const start = this.playerInterface_.getCurrentTime();\n const range = ranges.find((r) => r.start <= start && r.end >= start);\n\n if (!range) {\n return 0;\n }\n\n return (range.end - start) * 1000;\n }\n\n /**\n * Constructs a relative path from a URL\n *\n * @param {string} url\n * @param {string} base\n * @return {string}\n * @private\n */\n urlToRelativePath_(url, base) {\n const to = new URL(url);\n const from = new URL(base);\n\n if (to.origin !== from.origin) {\n return url;\n }\n\n const toPath = to.pathname.split('/').slice(1);\n const fromPath = from.pathname.split('/').slice(1, -1);\n\n // remove common parents\n while (toPath[0] === fromPath[0]) {\n toPath.shift();\n fromPath.shift();\n }\n\n // add back paths\n while (fromPath.length) {\n fromPath.shift();\n toPath.unshift('..');\n }\n\n return toPath.join('/');\n }\n\n /**\n * Calculate requested maximun throughput\n *\n * @param {shaka.extern.Stream} stream\n * @param {shaka.media.SegmentReference} segment\n * @return {number}\n * @private\n */\n calculateRtp_(stream, segment) {\n const playbackRate = this.playerInterface_.getPlaybackRate() || 1;\n const currentBufferLevel =\n this.getRemainingBufferLength_(stream.type) || 500;\n const bandwidth = stream.bandwidth;\n if (!bandwidth) {\n return NaN;\n }\n const segmentDuration = segment.endTime - segment.startTime;\n // Calculate file size in kilobits\n const segmentSize = bandwidth * segmentDuration / 1000;\n // Calculate time available to load file in seconds\n const timeToLoad = (currentBufferLevel / playbackRate) / 1000;\n // Calculate the exact bandwidth required\n const minBandwidth = segmentSize / timeToLoad;\n // Include a safety buffer\n return minBandwidth * this.config_.rtpSafetyFactor;\n }\n\n /**\n * Get the stream format\n *\n * @param {shaka.net.NetworkingEngine.AdvancedRequestType} type\n * The request's advanced type\n * @return {(shaka.util.CmcdManager.StreamingFormat|undefined)}\n * @private\n */\n getStreamFormat_(type) {\n const AdvancedRequestType = shaka.net.NetworkingEngine.AdvancedRequestType;\n\n switch (type) {\n case AdvancedRequestType.MPD:\n if (this.lowLatency_) {\n return shaka.util.CmcdManager.StreamingFormat.LOW_LATENCY_DASH;\n }\n return shaka.util.CmcdManager.StreamingFormat.DASH;\n\n case AdvancedRequestType.MASTER_PLAYLIST:\n case AdvancedRequestType.MEDIA_PLAYLIST:\n if (this.lowLatency_) {\n return shaka.util.CmcdManager.StreamingFormat.LOW_LATENCY_HLS;\n }\n return shaka.util.CmcdManager.StreamingFormat.HLS;\n\n case AdvancedRequestType.MSS:\n return shaka.util.CmcdManager.StreamingFormat.SMOOTH;\n }\n\n return undefined;\n }\n\n /**\n * Get the stream type\n *\n * @return {shaka.util.CmcdManager.StreamType}\n * @private\n */\n getStreamType_() {\n const isLive = this.playerInterface_.isLive();\n if (isLive) {\n return shaka.util.CmcdManager.StreamType.LIVE;\n } else {\n return shaka.util.CmcdManager.StreamType.VOD;\n }\n }\n\n /**\n * Get the highest bandwidth for a given type.\n *\n * @param {string} type\n * @return {number}\n * @private\n */\n getTopBandwidth_(type) {\n const variants = this.playerInterface_.getVariantTracks();\n if (!variants.length) {\n return NaN;\n }\n\n let top = variants[0];\n\n for (const variant of variants) {\n if (variant.type === 'variant' && variant.bandwidth > top.bandwidth) {\n top = variant;\n }\n }\n\n const ObjectType = shaka.util.CmcdManager.ObjectType;\n\n switch (type) {\n case ObjectType.VIDEO:\n return top.videoBandwidth || NaN;\n\n case ObjectType.AUDIO:\n return top.audioBandwidth || NaN;\n\n default:\n return top.bandwidth;\n }\n }\n\n /**\n * Serialize a CMCD data object according to the rules defined in the\n * section 3.2 of\n * [CTA-5004](https://cdn.cta.tech/cta/media/media/resources/standards/pdfs/cta-5004-final.pdf).\n *\n * @param {CmcdData} data The CMCD data object\n * @return {string}\n */\n static serialize(data) {\n const results = [];\n const isValid = (value) =>\n !Number.isNaN(value) && value != null && value !== '' && value !== false;\n const toRounded = (value) => Math.round(value);\n const toHundred = (value) => toRounded(value / 100) * 100;\n const toUrlSafe = (value) => encodeURIComponent(value);\n const formatters = {\n br: toRounded,\n d: toRounded,\n bl: toHundred,\n dl: toHundred,\n mtp: toHundred,\n nor: toUrlSafe,\n rtp: toHundred,\n tb: toRounded,\n };\n\n const keys = Object.keys(data || {}).sort();\n\n for (const key of keys) {\n let value = data[key];\n\n // ignore invalid values\n if (!isValid(value)) {\n continue;\n }\n\n // Version should only be reported if not equal to 1.\n if (key === 'v' && value === 1) {\n continue;\n }\n\n // Playback rate should only be sent if not equal to 1.\n if (key == 'pr' && value === 1) {\n continue;\n }\n\n // Certain values require special formatting\n const formatter = formatters[key];\n if (formatter) {\n value = formatter(value);\n }\n\n // Serialize the key/value pair\n const type = typeof value;\n let result;\n\n if (type === 'string' && key !== 'ot' && key !== 'sf' && key !== 'st') {\n result = `${key}=${JSON.stringify(value)}`;\n } else if (type === 'boolean') {\n result = key;\n } else if (type === 'symbol') {\n result = `${key}=${value.description}`;\n } else {\n result = `${key}=${value}`;\n }\n\n results.push(result);\n }\n\n return results.join(',');\n }\n\n /**\n * Convert a CMCD data object to request headers according to the rules\n * defined in the section 2.1 and 3.2 of\n * [CTA-5004](https://cdn.cta.tech/cta/media/media/resources/standards/pdfs/cta-5004-final.pdf).\n *\n * @param {CmcdData} data The CMCD data object\n * @return {!Object}\n */\n static toHeaders(data) {\n const keys = Object.keys(data);\n const headers = {};\n const headerNames = ['Object', 'Request', 'Session', 'Status'];\n const headerGroups = [{}, {}, {}, {}];\n const headerMap = {\n br: 0, d: 0, ot: 0, tb: 0,\n bl: 1, dl: 1, mtp: 1, nor: 1, nrr: 1, su: 1,\n cid: 2, pr: 2, sf: 2, sid: 2, st: 2, v: 2,\n bs: 3, rtp: 3,\n };\n\n for (const key of keys) {\n // Unmapped fields are mapped to the Request header\n const index = (headerMap[key] != null) ? headerMap[key] : 1;\n headerGroups[index][key] = data[key];\n }\n\n for (let i = 0; i < headerGroups.length; i++) {\n const value = shaka.util.CmcdManager.serialize(headerGroups[i]);\n if (value) {\n headers[`CMCD-${headerNames[i]}`] = value;\n }\n }\n\n return headers;\n }\n\n /**\n * Convert a CMCD data object to query args according to the rules\n * defined in the section 2.2 and 3.2 of\n * [CTA-5004](https://cdn.cta.tech/cta/media/media/resources/standards/pdfs/cta-5004-final.pdf).\n *\n * @param {CmcdData} data The CMCD data object\n * @return {string}\n */\n static toQuery(data) {\n return shaka.util.CmcdManager.serialize(data);\n }\n\n /**\n * Append query args to a uri.\n *\n * @param {string} uri\n * @param {string} query\n * @return {string}\n */\n static appendQueryToUri(uri, query) {\n if (!query) {\n return uri;\n }\n\n if (uri.includes('offline:')) {\n return uri;\n }\n\n const url = new goog.Uri(uri);\n url.getQueryData().set('CMCD', query);\n return url.toString();\n }\n};\n\n\n/**\n * @typedef {{\n * getBandwidthEstimate: function():number,\n * getBufferedInfo: function():shaka.extern.BufferedInfo,\n * getCurrentTime: function():number,\n * getPlaybackRate: function():number,\n * getVariantTracks: function():Array.,\n * isLive: function():boolean\n * }}\n *\n * @property {function():number} getBandwidthEstimate\n * Get the estimated bandwidth in bits per second.\n * @property {function():shaka.extern.BufferedInfo} getBufferedInfo\n * Get information about what the player has buffered.\n * @property {function():number} getCurrentTime\n * Get the current time\n * @property {function():number} getPlaybackRate\n * Get the playback rate\n * @property {function():Array.} getVariantTracks\n * Get the variant tracks\n * @property {function():boolean} isLive\n * Get if the player is playing live content.\n */\nshaka.util.CmcdManager.PlayerInterface;\n\n\n/**\n * @enum {string}\n */\nshaka.util.CmcdManager.ObjectType = {\n MANIFEST: 'm',\n AUDIO: 'a',\n VIDEO: 'v',\n MUXED: 'av',\n INIT: 'i',\n CAPTION: 'c',\n TIMED_TEXT: 'tt',\n KEY: 'k',\n OTHER: 'o',\n};\n\n\n/**\n * @enum {string}\n */\nshaka.util.CmcdManager.StreamType = {\n VOD: 'v',\n LIVE: 'l',\n};\n\n\n/**\n * @enum {string}\n * @export\n */\nshaka.util.CmcdManager.StreamingFormat = {\n DASH: 'd',\n LOW_LATENCY_DASH: 'ld',\n HLS: 'h',\n LOW_LATENCY_HLS: 'lh',\n SMOOTH: 's',\n OTHER: 'o',\n};\n\n\n/**\n * The CMCD spec version\n * @const {number}\n */\nshaka.util.CmcdManager.Version = 1;\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.text.WebVttGenerator');\n\ngoog.require('shaka.text.Cue');\ngoog.require('shaka.text.Utils');\n\n\n/**\n * @summary Manage the conversion to WebVTT.\n * @export\n */\nshaka.text.WebVttGenerator = class {\n /**\n * @param {!Array.} cues\n * @param {!Array.} adCuePoints\n * @return {string}\n */\n static convert(cues, adCuePoints) {\n const webvttTimeString = (time) => {\n let newTime = time;\n for (const adCuePoint of adCuePoints) {\n if (adCuePoint.end && adCuePoint.start < time) {\n const offset = adCuePoint.end - adCuePoint.start;\n newTime += offset;\n }\n }\n const hours = Math.floor(newTime / 3600);\n const minutes = Math.floor(newTime / 60 % 60);\n const seconds = Math.floor(newTime % 60);\n const milliseconds = Math.floor(newTime * 1000 % 1000);\n return (hours < 10 ? '0' : '') + hours + ':' +\n (minutes < 10 ? '0' : '') + minutes + ':' +\n (seconds < 10 ? '0' : '') + seconds + '.' +\n (milliseconds < 100 ? (milliseconds < 10 ? '00' : '0') : '') +\n milliseconds;\n };\n\n const flattenedCues = shaka.text.Utils.getCuesToFlatten(cues);\n\n let webvttString = 'WEBVTT\\n\\n';\n for (const cue of flattenedCues) {\n const webvttSettings = (cue) => {\n const settings = [];\n const Cue = shaka.text.Cue;\n switch (cue.textAlign) {\n case Cue.textAlign.LEFT:\n settings.push('align:left');\n break;\n case Cue.textAlign.RIGHT:\n settings.push('align:right');\n break;\n case Cue.textAlign.CENTER:\n settings.push('align:middle');\n break;\n case Cue.textAlign.START:\n settings.push('align:start');\n break;\n case Cue.textAlign.END:\n settings.push('align:end');\n break;\n }\n switch (cue.writingMode) {\n case Cue.writingMode.VERTICAL_LEFT_TO_RIGHT:\n settings.push('vertical:lr');\n break;\n case Cue.writingMode.VERTICAL_RIGHT_TO_LEFT:\n settings.push('vertical:rl');\n break;\n }\n\n if (settings.length) {\n return ' ' + settings.join(' ');\n }\n return '';\n };\n webvttString += webvttTimeString(cue.startTime) + ' --> ' +\n webvttTimeString(cue.endTime) + webvttSettings(cue) + '\\n';\n webvttString += cue.payload + '\\n\\n';\n }\n return webvttString;\n }\n};\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.util.CmsdManager');\n\ngoog.require('shaka.log');\n\n\n/**\n * @summary\n * A CmsdManager maintains CMSD state as well as a collection of utility\n * functions.\n * @export\n */\nshaka.util.CmsdManager = class {\n /**\n * @param {shaka.extern.CmsdConfiguration} config\n */\n constructor(config) {\n /** @private {shaka.extern.CmsdConfiguration} */\n this.config_ = config;\n\n /** @private {?Map.} */\n this.staticParams_ = null;\n\n /** @private {?Map.} */\n this.dynamicParams_ = null;\n }\n\n /**\n * Called by the Player to provide an updated configuration any time it\n * changes.\n *\n * @param {shaka.extern.CmsdConfiguration} config\n */\n configure(config) {\n this.config_ = config;\n }\n\n\n /**\n * Resets the CmsdManager.\n */\n reset() {\n this.staticParams_ = null;\n this.dynamicParams_ = null;\n }\n\n /**\n * Called by the Player to provide the headers of the latest request.\n *\n * @param {!Object.} headers\n */\n processHeaders(headers) {\n if (!this.config_.enabled) {\n return;\n }\n const CmsdManager = shaka.util.CmsdManager;\n const cmsdStatic = headers[CmsdManager.CMSD_STATIC_HEADER_NAME_];\n if (cmsdStatic) {\n const staticParams = this.parseCMSDStatic_(cmsdStatic);\n if (staticParams) {\n this.staticParams_ = staticParams;\n }\n }\n const cmsdDynamic = headers[CmsdManager.CMSD_DYNAMIC_HEADER_NAME_];\n if (cmsdDynamic) {\n const dynamicParams = this.parseCMSDDynamic_(cmsdDynamic);\n if (dynamicParams) {\n this.dynamicParams_ = dynamicParams;\n }\n }\n }\n\n /**\n * Returns the max bitrate in bits per second. If there is no max bitrate or\n * it's not enabled, it returns null.\n *\n * @return {?number}\n * @export\n */\n getMaxBitrate() {\n const key = shaka.util.CmsdManager.KEYS_.MAX_SUGGESTED_BITRATE;\n if (!this.config_.enabled || !this.config_.applyMaximumSuggestedBitrate ||\n !this.dynamicParams_ || !this.dynamicParams_.has(key)) {\n return null;\n }\n return /** @type {number} */(this.dynamicParams_.get(key)) * 1000;\n }\n\n /**\n * Returns the estimated throughput in bits per second. If there is no\n * estimated throughput or it's not enabled, it returns null.\n *\n * @return {?number}\n * @export\n */\n getEstimatedThroughput() {\n const key = shaka.util.CmsdManager.KEYS_.ESTIMATED_THROUGHPUT;\n if (!this.config_.enabled || !this.dynamicParams_ ||\n !this.dynamicParams_.has(key)) {\n return null;\n }\n return /** @type {number} */(this.dynamicParams_.get(key)) * 1000;\n }\n\n /**\n * Returns the response delay in milliseconds. If there is no response delay\n * or it's not enabled, it returns null.\n *\n * @return {?number}\n * @export\n */\n getResponseDelay() {\n const key = shaka.util.CmsdManager.KEYS_.RESPONSE_DELAY;\n if (!this.config_.enabled || !this.dynamicParams_ ||\n !this.dynamicParams_.has(key)) {\n return null;\n }\n return /** @type {number} */(this.dynamicParams_.get(key));\n }\n\n /**\n * Returns the RTT in milliseconds. If there is no RTT or it's not enabled,\n * it returns null.\n *\n * @return {?number}\n * @export\n */\n getRoundTripTime() {\n const key = shaka.util.CmsdManager.KEYS_.ROUND_TRIP_TIME;\n if (!this.config_.enabled || !this.dynamicParams_ ||\n !this.dynamicParams_.has(key)) {\n return null;\n }\n return /** @type {number} */(this.dynamicParams_.get(key));\n }\n\n /**\n * Gets the current bandwidth estimate.\n *\n * @param {number} defaultEstimate\n * @return {number} The bandwidth estimate in bits per second.\n * @export\n */\n getBandwidthEstimate(defaultEstimate) {\n const estimatedThroughput = this.getEstimatedThroughput();\n if (!estimatedThroughput) {\n return defaultEstimate;\n }\n const etpWeightRatio = this.config_.estimatedThroughputWeightRatio;\n if (etpWeightRatio > 0 && etpWeightRatio <= 1) {\n return (defaultEstimate * (1 - etpWeightRatio)) +\n (estimatedThroughput * etpWeightRatio);\n }\n return defaultEstimate;\n }\n\n /**\n * @param {string} headerValue\n * @return {?Map.}\n * @private\n */\n parseCMSDStatic_(headerValue) {\n try {\n const params = new Map();\n const items = headerValue.split(',');\n for (let i = 0; i < items.length; i++) {\n // =\n const substrs = items[i].split('=');\n const key = substrs[0];\n const value = this.parseParameterValue_(substrs[1]);\n params.set(key, value);\n }\n return params;\n } catch (e) {\n shaka.log.warning(\n 'Failed to parse CMSD-Static response header value:', e);\n return null;\n }\n }\n\n /**\n * @param {string} headerValue\n * @return {?Map.}\n * @private\n */\n parseCMSDDynamic_(headerValue) {\n try {\n const params = new Map();\n const items = headerValue.split(';');\n // Server identifier as 1st item\n for (let i = 1; i < items.length; i++) {\n // =\n const substrs = items[i].split('=');\n const key = substrs[0];\n const value = this.parseParameterValue_(substrs[1]);\n params.set(key, value);\n }\n return params;\n } catch (e) {\n shaka.log.warning(\n 'Failed to parse CMSD-Dynamic response header value:', e);\n return null;\n }\n }\n\n /**\n * @param {string} value\n * @return {(boolean|number|string)}\n * @private\n */\n parseParameterValue_(value) {\n // If the value type is BOOLEAN and the value is TRUE, then the equals\n // sign and the value are omitted\n if (!value) {\n return true;\n }\n // Check if boolean 'false'\n if (value.toLowerCase() === 'false') {\n return false;\n }\n // Check if a number\n if (/^[-0-9]/.test(value)) {\n return parseInt(value, 10);\n }\n // Value is a string, remove double quotes from string value\n return value.replace(/[\"]+/g, '');\n }\n};\n\n/**\n * @const {string}\n * @private\n */\nshaka.util.CmsdManager.CMSD_STATIC_HEADER_NAME_ = 'cmsd-static';\n\n/**\n * @const {string}\n * @private\n */\nshaka.util.CmsdManager.CMSD_DYNAMIC_HEADER_NAME_ = 'cmsd-dynamic';\n\n/**\n * @enum {string}\n * @private\n */\nshaka.util.CmsdManager.KEYS_ = {\n AVAILABILITY_TIME: 'at',\n DURESS: 'du',\n ENCODED_BITRATE: 'br',\n ESTIMATED_THROUGHPUT: 'etp',\n HELD_TIME: 'ht',\n INTERMEDIARY_IDENTIFIER: 'n',\n MAX_SUGGESTED_BITRATE: 'mb',\n NEXT_OBJECT_RESPONSE: 'nor',\n NEXT_RANGE_RESPONSE: 'nrr',\n OBJECT_DURATION: 'd',\n OBJECT_TYPE: 'ot',\n RESPONSE_DELAY: 'rd',\n ROUND_TRIP_TIME: 'rtt',\n STARTUP: 'su',\n STREAM_TYPE: 'st',\n STREAMING_FORMAT: 'sf',\n VERSION: 'v',\n};\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.util.Mutex');\n\ngoog.require('shaka.log');\n\n\n/**\n * @summary A simple mutex.\n */\nshaka.util.Mutex = class {\n /** Constructs the mutex. */\n constructor() {\n /** @private {?string} */\n this.acquiredIdentifier = null;\n\n /** @private {!Array.} */\n this.unlockQueue = [];\n }\n\n /**\n * Acquires the mutex, as soon as possible.\n * @param {string} identifier\n * @return {!Promise}\n */\n async acquire(identifier) {\n shaka.log.v2(identifier + ' has requested mutex');\n if (this.acquiredIdentifier) {\n await new Promise((resolve) => this.unlockQueue.push(resolve));\n }\n this.acquiredIdentifier = identifier;\n shaka.log.v2(identifier + ' has acquired mutex');\n }\n\n /**\n * Releases your hold on the mutex.\n */\n release() {\n shaka.log.v2(this.acquiredIdentifier + ' has released mutex');\n if (this.unlockQueue.length > 0) {\n this.unlockQueue.shift()();\n } else {\n this.acquiredIdentifier = null;\n }\n }\n\n /**\n * Completely releases the mutex. Meant for use by the tests.\n */\n releaseAll() {\n while (this.acquiredIdentifier) {\n this.release();\n }\n }\n};\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.ads.AdsStats');\n\n\n/**\n * This class tracks all the various components (some optional) that are used to\n * populate |shaka.extern.AdsStats| which is passed to the app.\n *\n * @final\n */\nshaka.ads.AdsStats = class {\n /** */\n constructor() {\n /** @private {!Array.} */\n this.loadTimes_ = [];\n /** @private {number} */\n this.started_ = 0;\n /** @private {number} */\n this.playedCompletely_ = 0;\n /** @private {number} */\n this.skipped_ = 0;\n /** @private {number} */\n this.errors_ = 0;\n }\n\n /**\n * Record the time it took to get the final manifest.\n *\n * @param {number} seconds\n */\n addLoadTime(seconds) {\n this.loadTimes_.push(seconds);\n }\n\n /**\n * Increase the number of ads started by one.\n */\n incrementStarted() {\n this.started_++;\n }\n\n /**\n * Increase the number of ads played completely by one.\n */\n incrementPlayedCompletely() {\n this.playedCompletely_++;\n }\n\n /**\n * Increase the number of ads skipped by one.\n */\n incrementSkipped() {\n this.skipped_++;\n }\n\n /**\n * Increase the number of ads with error by one.\n */\n incrementErrors() {\n this.errors_++;\n }\n\n /**\n * @return {number}\n * @private\n */\n getAverageLoadTime_() {\n if (!this.loadTimes_.length) {\n return 0;\n }\n const sum = this.loadTimes_.reduce(\n (accumulator, currentValue) => accumulator + currentValue, 0);\n return sum / this.loadTimes_.length;\n }\n\n /**\n * Create a stats blob that we can pass up to the app. This blob will not\n * reference any internal data.\n *\n * @return {shaka.extern.AdsStats}\n */\n getBlob() {\n return {\n loadTimes: this.loadTimes_,\n averageLoadTime: this.getAverageLoadTime_(),\n started: this.started_,\n playedCompletely: this.playedCompletely_,\n skipped: this.skipped_,\n errors: this.errors_,\n };\n }\n};\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\n\ngoog.provide('shaka.ads.ClientSideAd');\n\ngoog.require('shaka.util.EventManager');\n\n\n/**\n * @implements {shaka.extern.IAd}\n * @export\n */\nshaka.ads.ClientSideAd = class {\n /**\n * @param {!google.ima.Ad} imaAd\n * @param {!google.ima.AdsManager} imaAdManager\n * @param {HTMLMediaElement} video\n */\n constructor(imaAd, imaAdManager, video) {\n /** @private {google.ima.Ad} */\n this.ad_ = imaAd;\n\n /** @private {google.ima.AdsManager} */\n this.manager_ = imaAdManager;\n\n /** @private {HTMLMediaElement} */\n this.video_ = video;\n\n /** @private {boolean} */\n this.isPaused_ = false;\n\n /** @private {number} */\n this.volume_ = this.manager_.getVolume();\n\n /** @private {shaka.util.EventManager} */\n this.eventManager_ = new shaka.util.EventManager();\n\n this.eventManager_.listen(this.manager_,\n google.ima.AdEvent.Type.PAUSED, () => {\n this.isPaused_ = true;\n });\n\n this.eventManager_.listen(this.manager_,\n google.ima.AdEvent.Type.RESUMED, () => {\n this.isPaused_ = false;\n });\n }\n\n /**\n * @override\n * @export\n */\n needsSkipUI() {\n return false;\n }\n\n /**\n * @override\n * @export\n */\n isClientRendering() {\n return true;\n }\n\n /**\n * @override\n * @export\n */\n isUsingAnotherMediaElement() {\n return true;\n }\n\n /**\n * @override\n * @export\n */\n getDuration() {\n return this.ad_.getDuration();\n }\n\n /**\n * @override\n * @export\n */\n getMinSuggestedDuration() {\n return this.ad_.getMinSuggestedDuration();\n }\n\n /**\n * @override\n * @export\n */\n getRemainingTime() {\n return this.manager_.getRemainingTime();\n }\n\n /**\n * @override\n * @export\n */\n isPaused() {\n return this.isPaused_;\n }\n\n /**\n * @override\n * @export\n */\n isSkippable() {\n // IMA returns -1 for non-skippable ads. Any positive number is a genuine\n // skip offset, meaning the ad is skippable.\n return this.ad_.getSkipTimeOffset() >= 0;\n }\n\n /**\n * @override\n * @export\n */\n getTimeUntilSkippable() {\n const skipOffset = this.ad_.getSkipTimeOffset();\n const canSkipIn = this.getRemainingTime() - skipOffset;\n return Math.max(canSkipIn, 0);\n }\n\n /**\n * @override\n * @export\n */\n canSkipNow() {\n return this.manager_.getAdSkippableState();\n }\n\n /**\n * @override\n * @export\n */\n skip() {\n return this.manager_.skip();\n }\n\n /**\n * @param {boolean} paused\n */\n setPaused(paused) {\n this.isPaused_ = paused;\n }\n\n /**\n * @override\n * @export\n */\n pause() {\n return this.manager_.pause();\n }\n\n /**\n * @override\n * @export\n */\n play() {\n return this.manager_.resume();\n }\n\n\n /**\n * @override\n * @export\n */\n getVolume() {\n return this.manager_.getVolume();\n }\n\n /**\n * @override\n * @export\n */\n setVolume(volume) {\n this.video_.volume = volume;\n return this.manager_.setVolume(volume);\n }\n\n /**\n * @override\n * @export\n */\n isMuted() {\n return this.manager_.getVolume() == 0;\n }\n\n /**\n * @override\n * @export\n */\n isLinear() {\n return this.ad_.isLinear();\n }\n\n\n /**\n * @override\n * @export\n */\n resize(width, height) {\n let isInFullscreen = false;\n const video = /** @type {HTMLVideoElement} */(this.video_);\n if (document.fullscreenEnabled) {\n isInFullscreen = !!document.fullscreenElement;\n } else if (video.webkitSupportsFullscreen) {\n isInFullscreen = video.webkitDisplayingFullscreen;\n }\n const viewMode = isInFullscreen ?\n google.ima.ViewMode.FULLSCREEN : google.ima.ViewMode.NORMAL;\n this.manager_.resize(width, height, viewMode);\n }\n\n /**\n * @override\n * @export\n */\n setMuted(muted) {\n this.video_.muted = muted;\n // Emulate the \"mute\" functionality, where current, pre-mute\n // volume is saved and can be restored on unmute.\n if (muted) {\n this.volume_ = this.getVolume();\n this.manager_.setVolume(0);\n } else {\n this.manager_.setVolume(this.volume_);\n }\n }\n\n /**\n * It's required for a muted ad to start when autoplaying.\n *\n * @param {number} videoVolume\n */\n setInitialMuted(videoVolume) {\n this.volume_ = videoVolume;\n this.manager_.setVolume(0);\n }\n\n /**\n * @override\n * @export\n */\n getSequenceLength() {\n const podInfo = this.ad_.getAdPodInfo();\n if (podInfo == null) {\n // No pod, just one ad.\n return 1;\n }\n\n return podInfo.getTotalAds();\n }\n\n /**\n * @override\n * @export\n */\n getPositionInSequence() {\n const podInfo = this.ad_.getAdPodInfo();\n if (podInfo == null) {\n // No pod, just one ad.\n return 1;\n }\n\n return podInfo.getAdPosition();\n }\n\n /**\n * @override\n * @export\n */\n getTitle() {\n return this.ad_.getTitle();\n }\n\n /**\n * @override\n * @export\n */\n getDescription() {\n return this.ad_.getDescription();\n }\n\n /**\n * @override\n * @export\n */\n getVastMediaBitrate() {\n return this.ad_.getVastMediaBitrate();\n }\n\n /**\n * @override\n * @export\n */\n getVastMediaHeight() {\n return this.ad_.getVastMediaHeight();\n }\n\n /**\n * @override\n * @export\n */\n getVastMediaWidth() {\n return this.ad_.getVastMediaWidth();\n }\n\n /**\n * @override\n * @export\n */\n getAdId() {\n return this.ad_.getAdId();\n }\n\n /**\n * @override\n * @export\n */\n getCreativeAdId() {\n return this.ad_.getCreativeAdId();\n }\n\n /**\n * @override\n * @export\n */\n getAdvertiserName() {\n return this.ad_.getAdvertiserName();\n }\n\n /**\n * @override\n * @export\n */\n getMediaUrl() {\n return this.ad_.getMediaUrl();\n }\n\n /**\n * @override\n * @export\n */\n getTimeOffset() {\n const podInfo = this.ad_.getAdPodInfo();\n if (podInfo == null) {\n // Defaults to 0 if this ad is not part of a pod, or the pod is not part\n // of an ad playlist.\n return 0;\n }\n\n return podInfo.getTimeOffset();\n }\n\n /**\n * @override\n * @export\n */\n getPodIndex() {\n const podInfo = this.ad_.getAdPodInfo();\n if (podInfo == null) {\n // Defaults to 0 if this ad is not part of a pod, or the pod is not part\n // of an ad playlist.\n return 0;\n }\n\n return podInfo.getPodIndex();\n }\n\n /**\n * @override\n * @export\n */\n release() {\n this.ad_ = null;\n this.manager_ = null;\n }\n};\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\n\ngoog.provide('shaka.ads.Utils');\n\ngoog.require('shaka.util.TextParser');\ngoog.require('shaka.util.TXml');\n\n\n/**\n * A class responsible for ad utils.\n * @export\n */\nshaka.ads.Utils = class {\n /**\n * @param {!shaka.extern.xml.Node} vast\n * @param {?number} currentTime\n * @return {!Array.}\n */\n static parseVastToInterstitials(vast, currentTime) {\n const TXml = shaka.util.TXml;\n /** @type {!Array.} */\n const interstitials = [];\n\n let startTime = 0;\n if (currentTime != null) {\n startTime = currentTime;\n }\n\n for (const ad of TXml.findChildren(vast, 'Ad')) {\n const inline = TXml.findChild(ad, 'InLine');\n if (!inline) {\n continue;\n }\n const creatives = TXml.findChild(inline, 'Creatives');\n if (!creatives) {\n continue;\n }\n for (const creative of TXml.findChildren(creatives, 'Creative')) {\n const linear = TXml.findChild(creative, 'Linear');\n if (!linear) {\n continue;\n }\n let skipOffset = null;\n if (linear.attributes['skipoffset']) {\n skipOffset = shaka.util.TextParser.parseTime(\n linear.attributes['skipoffset']);\n if (isNaN(skipOffset)) {\n skipOffset = null;\n }\n }\n const mediaFiles = TXml.findChild(linear, 'MediaFiles');\n if (!mediaFiles) {\n continue;\n }\n const medias = TXml.findChildren(mediaFiles, 'MediaFile');\n let checkMedias = medias;\n const streamingMedias = medias.filter((media) => {\n return media.attributes['delivery'] == 'streaming';\n });\n if (streamingMedias.length) {\n checkMedias = streamingMedias;\n }\n const sortedMedias = checkMedias.sort((a, b) => {\n const aHeight = parseInt(a.attributes['height'], 10) || 0;\n const bHeight = parseInt(b.attributes['height'], 10) || 0;\n return bHeight - aHeight;\n });\n for (const media of sortedMedias) {\n const adUrl = TXml.getTextContents(media);\n if (!adUrl) {\n continue;\n }\n interstitials.push({\n id: null,\n startTime: startTime,\n endTime: null,\n uri: adUrl,\n isSkippable: skipOffset != null,\n skipOffset,\n skipFor: null,\n canJump: false,\n resumeOffset: 0,\n playoutLimit: null,\n once: true,\n pre: currentTime == null,\n post: currentTime == Infinity,\n timelineRange: false,\n });\n break;\n }\n }\n }\n return interstitials;\n }\n\n /**\n * @param {!shaka.extern.xml.Node} vmap\n * @return {!Array.<{time: ?number, uri: string}>}\n */\n static parseVMAP(vmap) {\n const TXml = shaka.util.TXml;\n /** @type {!Array.<{time: ?number, uri: string}>} */\n const ads = [];\n for (const adBreak of TXml.findChildren(vmap, 'vmap:AdBreak')) {\n const timeOffset = adBreak.attributes['timeOffset'];\n if (!timeOffset) {\n continue;\n }\n let time = null;\n if (timeOffset == 'start') {\n time = 0;\n } else if (timeOffset == 'end') {\n time = Infinity;\n } else {\n time = shaka.util.TextParser.parseTime(timeOffset);\n }\n const adSource = TXml.findChild(adBreak, 'vmap:AdSource');\n if (!adSource) {\n continue;\n }\n const adTagURI = TXml.findChild(adSource, 'vmap:AdTagURI');\n if (!adTagURI) {\n continue;\n }\n const uri = TXml.getTextContents(adTagURI);\n if (!uri) {\n continue;\n }\n ads.push({\n time,\n uri,\n });\n }\n return ads;\n }\n};\n\n/**\n * The event name for when a sequence of ads has been loaded.\n *\n * @const {string}\n * @export\n */\nshaka.ads.Utils.ADS_LOADED = 'ads-loaded';\n\n/**\n * The event name for when an ad has started playing.\n *\n * @const {string}\n * @export\n */\nshaka.ads.Utils.AD_STARTED = 'ad-started';\n\n\n/**\n * The event name for when an ad playhead crosses first quartile.\n *\n * @const {string}\n * @export\n */\nshaka.ads.Utils.AD_FIRST_QUARTILE = 'ad-first-quartile';\n\n\n/**\n * The event name for when an ad playhead crosses midpoint.\n *\n * @const {string}\n * @export\n */\nshaka.ads.Utils.AD_MIDPOINT = 'ad-midpoint';\n\n\n/**\n * The event name for when an ad playhead crosses third quartile.\n *\n * @const {string}\n * @export\n */\nshaka.ads.Utils.AD_THIRD_QUARTILE = 'ad-third-quartile';\n\n\n/**\n * The event name for when an ad has completed playing.\n *\n * @const {string}\n * @export\n */\nshaka.ads.Utils.AD_COMPLETE = 'ad-complete';\n\n\n/**\n * The event name for when an ad has finished playing\n * (played all the way through, was skipped, or was unable to proceed\n * due to an error).\n *\n * @const {string}\n * @export\n */\nshaka.ads.Utils.AD_STOPPED = 'ad-stopped';\n\n\n/**\n * The event name for when an ad is skipped by the user..\n *\n * @const {string}\n * @export\n */\nshaka.ads.Utils.AD_SKIPPED = 'ad-skipped';\n\n\n/**\n * The event name for when the ad volume has changed.\n *\n * @const {string}\n * @export\n */\nshaka.ads.Utils.AD_VOLUME_CHANGED = 'ad-volume-changed';\n\n\n/**\n * The event name for when the ad was muted.\n *\n * @const {string}\n * @export\n */\nshaka.ads.Utils.AD_MUTED = 'ad-muted';\n\n\n/**\n * The event name for when the ad was paused.\n *\n * @const {string}\n * @export\n */\nshaka.ads.Utils.AD_PAUSED = 'ad-paused';\n\n\n/**\n * The event name for when the ad was resumed after a pause.\n *\n * @const {string}\n * @export\n */\nshaka.ads.Utils.AD_RESUMED = 'ad-resumed';\n\n\n/**\n * The event name for when the ad's skip status changes\n * (usually it becomes skippable when it wasn't before).\n *\n * @const {string}\n * @export\n */\nshaka.ads.Utils.AD_SKIP_STATE_CHANGED = 'ad-skip-state-changed';\n\n\n/**\n * The event name for when the ad's cue points (start/end markers)\n * have changed.\n *\n * @const {string}\n * @export\n */\nshaka.ads.Utils.CUEPOINTS_CHANGED = 'ad-cue-points-changed';\n\n\n/**\n * The event name for when the native IMA ad manager object has\n * loaded and become available.\n *\n * @const {string}\n * @export\n */\nshaka.ads.Utils.IMA_AD_MANAGER_LOADED = 'ima-ad-manager-loaded';\n\n\n/**\n * The event name for when the native IMA stream manager object has\n * loaded and become available.\n *\n * @const {string}\n * @export\n */\nshaka.ads.Utils.IMA_STREAM_MANAGER_LOADED = 'ima-stream-manager-loaded';\n\n\n/**\n * The event name for when the ad was clicked.\n *\n * @const {string}\n * @export\n */\nshaka.ads.Utils.AD_CLICKED = 'ad-clicked';\n\n\n/**\n * The event name for when there is an update to the current ad's progress.\n *\n * @const {string}\n * @export\n */\nshaka.ads.Utils.AD_PROGRESS = 'ad-progress';\n\n\n/**\n * The event name for when the ad is buffering.\n *\n * @const {string}\n * @export\n */\nshaka.ads.Utils.AD_BUFFERING = 'ad-buffering';\n\n\n/**\n * The event name for when the ad's URL was hit.\n *\n * @const {string}\n * @export\n */\nshaka.ads.Utils.AD_IMPRESSION = 'ad-impression';\n\n\n/**\n * The event name for when the ad's duration changed.\n *\n * @const {string}\n * @export\n */\nshaka.ads.Utils.AD_DURATION_CHANGED = 'ad-duration-changed';\n\n\n/**\n * The event name for when the ad was closed by the user.\n *\n * @const {string}\n * @export\n */\nshaka.ads.Utils.AD_CLOSED = 'ad-closed';\n\n\n/**\n * The event name for when the ad data becomes available.\n *\n * @const {string}\n * @export\n */\nshaka.ads.Utils.AD_LOADED = 'ad-loaded';\n\n\n/**\n * The event name for when all the ads were completed.\n *\n * @const {string}\n * @export\n */\nshaka.ads.Utils.ALL_ADS_COMPLETED = 'all-ads-completed';\n\n\n/**\n * The event name for when the ad changes from or to linear.\n *\n * @const {string}\n * @export\n */\nshaka.ads.Utils.AD_LINEAR_CHANGED = 'ad-linear-changed';\n\n\n/**\n * The event name for when the ad's metadata becomes available.\n *\n * @const {string}\n * @export\n */\nshaka.ads.Utils.AD_METADATA = 'ad-metadata';\n\n\n/**\n * The event name for when the ad display encountered a recoverable\n * error.\n *\n * @const {string}\n * @export\n */\nshaka.ads.Utils.AD_RECOVERABLE_ERROR = 'ad-recoverable-error';\n\n/**\n * The event name for when the ad manager dispatch errors.\n *\n * @const {string}\n * @export\n */\nshaka.ads.Utils.AD_ERROR = 'ad-error';\n\n/**\n * The event name for when the client side SDK signalled its readiness\n * to play a VPAID ad or an ad rule.\n *\n * @const {string}\n * @export\n */\nshaka.ads.Utils.AD_BREAK_READY = 'ad-break-ready';\n\n\n/**\n * The event name for when the interaction callback for the ad was\n * triggered.\n *\n * @const {string}\n * @export\n */\nshaka.ads.Utils.AD_INTERACTION = 'ad-interaction';\n\n\n/**\n * The name of the event for when an ad requires the main content to be paused.\n * Fired when the platform does not support multiple media elements.\n *\n * @const {string}\n * @export\n */\nshaka.ads.Utils.AD_CONTENT_PAUSE_REQUESTED = 'ad-content-pause-requested';\n\n\n/**\n * The name of the event for when an ad requires the main content to be resumed.\n * Fired when the platform does not support multiple media elements.\n *\n * @const {string}\n * @export\n */\nshaka.ads.Utils.AD_CONTENT_RESUME_REQUESTED = 'ad-content-resume-requested';\n\n\n/**\n * The name of the event for when an ad requires the video of the main content\n * to be attached.\n *\n * @const {string}\n * @export\n */\nshaka.ads.Utils.AD_CONTENT_ATTACH_REQUESTED = 'ad-content-attach-requested';\n\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\n\ngoog.provide('shaka.ads.ClientSideAdManager');\n\ngoog.require('goog.asserts');\ngoog.require('shaka.Player');\ngoog.require('shaka.ads.ClientSideAd');\ngoog.require('shaka.ads.Utils');\ngoog.require('shaka.log');\ngoog.require('shaka.util.Dom');\ngoog.require('shaka.util.EventManager');\ngoog.require('shaka.util.FakeEvent');\ngoog.require('shaka.util.IReleasable');\n\n/**\n * A class responsible for client-side ad interactions.\n * @implements {shaka.util.IReleasable}\n */\nshaka.ads.ClientSideAdManager = class {\n /**\n * @param {HTMLElement} adContainer\n * @param {HTMLMediaElement} video\n * @param {string} locale\n * @param {?google.ima.AdsRenderingSettings} adsRenderingSettings\n * @param {function(!shaka.util.FakeEvent)} onEvent\n */\n constructor(adContainer, video, locale, adsRenderingSettings, onEvent) {\n /** @private {HTMLElement} */\n this.adContainer_ = adContainer;\n\n /** @private {HTMLMediaElement} */\n this.video_ = video;\n\n /** @private {boolean} */\n this.videoPlayed_ = false;\n\n /** @private {?shaka.extern.AdsConfiguration} */\n this.config_ = null;\n\n /** @private {ResizeObserver} */\n this.resizeObserver_ = null;\n\n /** @private {number} */\n this.requestAdsStartTime_ = NaN;\n\n /** @private {function(!shaka.util.FakeEvent)} */\n this.onEvent_ = onEvent;\n\n /** @private {shaka.ads.ClientSideAd} */\n this.ad_ = null;\n\n /** @private {shaka.util.EventManager} */\n this.eventManager_ = new shaka.util.EventManager();\n\n google.ima.settings.setLocale(locale);\n\n google.ima.settings.setDisableCustomPlaybackForIOS10Plus(true);\n\n /** @private {!google.ima.AdDisplayContainer} */\n this.adDisplayContainer_ = new google.ima.AdDisplayContainer(\n this.adContainer_,\n this.video_);\n\n // TODO: IMA: Must be done as the result of a user action on mobile\n this.adDisplayContainer_.initialize();\n\n // IMA: This instance should be re-used for the entire lifecycle of\n // the page.\n this.adsLoader_ = new google.ima.AdsLoader(this.adDisplayContainer_);\n\n this.adsLoader_.getSettings().setPlayerType('shaka-player');\n this.adsLoader_.getSettings().setPlayerVersion(shaka.Player.version);\n\n /** @private {google.ima.AdsManager} */\n this.imaAdsManager_ = null;\n\n /** @private {!google.ima.AdsRenderingSettings} */\n this.adsRenderingSettings_ =\n adsRenderingSettings || new google.ima.AdsRenderingSettings();\n\n this.eventManager_.listen(this.adsLoader_,\n google.ima.AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED, (e) => {\n this.onAdsManagerLoaded_(\n /** @type {!google.ima.AdsManagerLoadedEvent} */ (e));\n });\n\n this.eventManager_.listen(this.adsLoader_,\n google.ima.AdErrorEvent.Type.AD_ERROR, (e) => {\n this.onAdError_( /** @type {!google.ima.AdErrorEvent} */ (e));\n });\n\n // Notify the SDK when the video has ended, so it can play post-roll ads.\n this.eventManager_.listen(this.video_, 'ended', () => {\n this.adsLoader_.contentComplete();\n });\n\n this.eventManager_.listenOnce(this.video_, 'play', () => {\n this.videoPlayed_ = true;\n });\n }\n\n /**\n * Called by the AdManager to provide an updated configuration any time it\n * changes.\n *\n * @param {shaka.extern.AdsConfiguration} config\n */\n configure(config) {\n this.config_ = config;\n }\n\n /**\n * @param {!google.ima.AdsRequest} imaRequest\n */\n requestAds(imaRequest) {\n goog.asserts.assert(\n imaRequest.adTagUrl || imaRequest.adsResponse,\n 'The ad tag needs to be set up before requesting ads, ' +\n 'or adsResponse must be filled.');\n // Destroy the current AdsManager, in case the tag you requested previously\n // contains post-rolls (don't play those now).\n if (this.imaAdsManager_) {\n this.imaAdsManager_.destroy();\n }\n // Your AdsLoader will be set up on page-load. You should re-use the same\n // AdsLoader for every request.\n if (this.adsLoader_) {\n // Reset the IMA SDK.\n this.adsLoader_.contentComplete();\n }\n this.requestAdsStartTime_ = Date.now() / 1000;\n this.adsLoader_.requestAds(imaRequest);\n }\n\n /**\n * @param {!google.ima.AdsRenderingSettings} adsRenderingSettings\n */\n updateAdsRenderingSettings(adsRenderingSettings) {\n this.adsRenderingSettings_ = adsRenderingSettings;\n if (this.imaAdsManager_) {\n this.imaAdsManager_.updateAdsRenderingSettings(\n this.adsRenderingSettings_);\n }\n }\n\n /**\n * Stop all currently playing ads.\n */\n stop() {\n // this.imaAdsManager_ might not be set yet... if, for example, an ad\n // blocker prevented the ads from ever loading.\n if (this.imaAdsManager_) {\n this.imaAdsManager_.stop();\n }\n if (this.adContainer_) {\n shaka.util.Dom.removeAllChildren(this.adContainer_);\n }\n }\n\n /** @override */\n release() {\n this.stop();\n if (this.resizeObserver_) {\n this.resizeObserver_.disconnect();\n }\n if (this.eventManager_) {\n this.eventManager_.release();\n }\n if (this.imaAdsManager_) {\n this.imaAdsManager_.destroy();\n }\n this.adsLoader_.destroy();\n this.adDisplayContainer_.destroy();\n }\n\n /**\n * @param {!google.ima.AdErrorEvent} e\n * @private\n */\n onAdError_(e) {\n shaka.log.warning(\n 'There was an ad error from the IMA SDK: ' + e.getError());\n shaka.log.warning('Resuming playback.');\n\n const data = (new Map()).set('originalEvent', e);\n this.onEvent_(new shaka.util.FakeEvent(shaka.ads.Utils.AD_ERROR, data));\n\n this.onAdComplete_(/* adEvent= */ null);\n // Remove ad breaks from the timeline\n this.onEvent_(\n new shaka.util.FakeEvent(shaka.ads.Utils.CUEPOINTS_CHANGED,\n (new Map()).set('cuepoints', [])));\n }\n\n\n /**\n * @param {!google.ima.AdsManagerLoadedEvent} e\n * @private\n */\n onAdsManagerLoaded_(e) {\n goog.asserts.assert(this.video_ != null, 'Video should not be null!');\n\n const now = Date.now() / 1000;\n const loadTime = now - this.requestAdsStartTime_;\n this.onEvent_(new shaka.util.FakeEvent(shaka.ads.Utils.ADS_LOADED,\n (new Map()).set('loadTime', loadTime)));\n\n if (!this.config_.customPlayheadTracker) {\n this.imaAdsManager_ = e.getAdsManager(this.video_,\n this.adsRenderingSettings_);\n } else {\n const videoPlayHead = {\n currentTime: this.video_.currentTime,\n };\n\n this.imaAdsManager_ = e.getAdsManager(videoPlayHead,\n this.adsRenderingSettings_);\n\n if (this.video_.muted) {\n this.imaAdsManager_.setVolume(0);\n } else {\n this.imaAdsManager_.setVolume(this.video_.volume);\n }\n\n this.eventManager_.listen(this.video_, 'timeupdate', () => {\n if (!this.video_.duration) {\n return;\n }\n videoPlayHead.currentTime = this.video_.currentTime;\n });\n this.eventManager_.listen(this.video_, 'volumechange', () => {\n if (!this.ad_) {\n return;\n }\n this.ad_.setVolume(this.video_.volume);\n if (this.video_.muted) {\n this.ad_.setMuted(true);\n }\n });\n }\n\n this.onEvent_(new shaka.util.FakeEvent(\n shaka.ads.Utils.IMA_AD_MANAGER_LOADED,\n (new Map()).set('imaAdManager', this.imaAdsManager_)));\n\n const cuePointStarts = this.imaAdsManager_.getCuePoints();\n if (cuePointStarts.length) {\n /** @type {!Array.} */\n const cuePoints = [];\n for (const start of cuePointStarts) {\n /** @type {shaka.extern.AdCuePoint} */\n const shakaCuePoint = {\n start: start,\n end: null,\n };\n cuePoints.push(shakaCuePoint);\n }\n\n this.onEvent_(new shaka.util.FakeEvent(\n shaka.ads.Utils.CUEPOINTS_CHANGED,\n (new Map()).set('cuepoints', cuePoints)));\n }\n\n this.addImaEventListeners_();\n\n try {\n const viewMode = this.isFullScreenEnabled_() ?\n google.ima.ViewMode.FULLSCREEN : google.ima.ViewMode.NORMAL;\n\n this.imaAdsManager_.init(this.video_.offsetWidth,\n this.video_.offsetHeight, viewMode);\n\n // Wait on the 'loadeddata' event rather than the 'loadedmetadata' event\n // because 'loadedmetadata' is sometimes called before the video resizes\n // on some platforms (e.g. Safari).\n this.eventManager_.listen(this.video_, 'loadeddata', () => {\n const viewMode = this.isFullScreenEnabled_() ?\n google.ima.ViewMode.FULLSCREEN : google.ima.ViewMode.NORMAL;\n this.imaAdsManager_.resize(this.video_.offsetWidth,\n this.video_.offsetHeight, viewMode);\n });\n\n if ('ResizeObserver' in window) {\n this.resizeObserver_ = new ResizeObserver(() => {\n const viewMode = this.isFullScreenEnabled_() ?\n google.ima.ViewMode.FULLSCREEN : google.ima.ViewMode.NORMAL;\n this.imaAdsManager_.resize(this.video_.offsetWidth,\n this.video_.offsetHeight, viewMode);\n });\n this.resizeObserver_.observe(this.video_);\n } else {\n this.eventManager_.listen(document, 'fullscreenchange', () => {\n const viewMode = this.isFullScreenEnabled_() ?\n google.ima.ViewMode.FULLSCREEN : google.ima.ViewMode.NORMAL;\n this.imaAdsManager_.resize(this.video_.offsetWidth,\n this.video_.offsetHeight, viewMode);\n });\n }\n\n // Single video and overlay ads will start at this time\n // TODO (ismena): Need a better inderstanding of what this does.\n // The docs say it's called to 'start playing the ads,' but I haven't\n // seen the ads actually play until requestAds() is called.\n // Note: We listen for a play event to avoid autoplay issues that might\n // crash IMA.\n if (this.videoPlayed_ || this.config_.skipPlayDetection) {\n this.imaAdsManager_.start();\n } else {\n this.eventManager_.listenOnce(this.video_, 'play', () => {\n this.videoPlayed_ = true;\n this.imaAdsManager_.start();\n });\n }\n } catch (adError) {\n // If there was a problem with the VAST response,\n // we we won't be getting an ad. Hide ad UI if we showed it already\n // and get back to the presentation.\n this.onAdComplete_(/* adEvent= */ null);\n }\n }\n\n\n /**\n * @return {boolean}\n * @private\n */\n isFullScreenEnabled_() {\n if (document.fullscreenEnabled) {\n return !!document.fullscreenElement;\n } else {\n const video = /** @type {HTMLVideoElement} */(this.video_);\n if (video.webkitSupportsFullscreen) {\n return video.webkitDisplayingFullscreen;\n }\n }\n return false;\n }\n\n\n /**\n * @private\n */\n addImaEventListeners_() {\n /**\n * @param {!Event} e\n * @param {string} type\n */\n const convertEventAndSend = (e, type) => {\n const data = (new Map()).set('originalEvent', e);\n this.onEvent_(new shaka.util.FakeEvent(type, data));\n };\n\n this.eventManager_.listen(this.imaAdsManager_,\n google.ima.AdErrorEvent.Type.AD_ERROR, (error) => {\n this.onAdError_(/** @type {!google.ima.AdErrorEvent} */ (error));\n });\n\n this.eventManager_.listen(this.imaAdsManager_,\n google.ima.AdEvent.Type.CONTENT_PAUSE_REQUESTED, (e) => {\n this.onAdStart_(/** @type {!google.ima.AdEvent} */ (e));\n });\n\n this.eventManager_.listen(this.imaAdsManager_,\n google.ima.AdEvent.Type.STARTED, (e) => {\n this.onAdStart_(/** @type {!google.ima.AdEvent} */ (e));\n });\n\n this.eventManager_.listen(this.imaAdsManager_,\n google.ima.AdEvent.Type.FIRST_QUARTILE, (e) => {\n convertEventAndSend(e, shaka.ads.Utils.AD_FIRST_QUARTILE);\n });\n\n this.eventManager_.listen(this.imaAdsManager_,\n google.ima.AdEvent.Type.MIDPOINT, (e) => {\n convertEventAndSend(e, shaka.ads.Utils.AD_MIDPOINT);\n });\n\n this.eventManager_.listen(this.imaAdsManager_,\n google.ima.AdEvent.Type.THIRD_QUARTILE, (e) => {\n convertEventAndSend(e, shaka.ads.Utils.AD_THIRD_QUARTILE);\n });\n\n this.eventManager_.listen(this.imaAdsManager_,\n google.ima.AdEvent.Type.COMPLETE, (e) => {\n convertEventAndSend(e, shaka.ads.Utils.AD_COMPLETE);\n });\n\n this.eventManager_.listen(this.imaAdsManager_,\n google.ima.AdEvent.Type.CONTENT_RESUME_REQUESTED, (e) => {\n this.onAdComplete_(/** @type {!google.ima.AdEvent} */ (e));\n });\n\n this.eventManager_.listen(this.imaAdsManager_,\n google.ima.AdEvent.Type.ALL_ADS_COMPLETED, (e) => {\n this.onAdComplete_(/** @type {!google.ima.AdEvent} */ (e));\n });\n\n this.eventManager_.listen(this.imaAdsManager_,\n google.ima.AdEvent.Type.SKIPPED, (e) => {\n convertEventAndSend(e, shaka.ads.Utils.AD_SKIPPED);\n });\n\n this.eventManager_.listen(this.imaAdsManager_,\n google.ima.AdEvent.Type.VOLUME_CHANGED, (e) => {\n convertEventAndSend(e, shaka.ads.Utils.AD_VOLUME_CHANGED);\n });\n\n this.eventManager_.listen(this.imaAdsManager_,\n google.ima.AdEvent.Type.VOLUME_MUTED, (e) => {\n convertEventAndSend(e, shaka.ads.Utils.AD_MUTED);\n });\n\n this.eventManager_.listen(this.imaAdsManager_,\n google.ima.AdEvent.Type.PAUSED, (e) => {\n if (this.ad_) {\n this.ad_.setPaused(true);\n convertEventAndSend(e, shaka.ads.Utils.AD_PAUSED);\n }\n });\n\n this.eventManager_.listen(this.imaAdsManager_,\n google.ima.AdEvent.Type.RESUMED, (e) => {\n if (this.ad_) {\n this.ad_.setPaused(false);\n convertEventAndSend(e, shaka.ads.Utils.AD_RESUMED);\n }\n });\n\n this.eventManager_.listen(this.imaAdsManager_,\n google.ima.AdEvent.Type.SKIPPABLE_STATE_CHANGED, (e) => {\n if (this.ad_) {\n convertEventAndSend(e, shaka.ads.Utils.AD_SKIP_STATE_CHANGED);\n }\n });\n\n this.eventManager_.listen(this.imaAdsManager_,\n google.ima.AdEvent.Type.CLICK, (e) => {\n convertEventAndSend(e, shaka.ads.Utils.AD_CLICKED);\n });\n\n this.eventManager_.listen(this.imaAdsManager_,\n google.ima.AdEvent.Type.AD_PROGRESS, (e) => {\n convertEventAndSend(e, shaka.ads.Utils.AD_PROGRESS);\n });\n\n this.eventManager_.listen(this.imaAdsManager_,\n google.ima.AdEvent.Type.AD_BUFFERING, (e) => {\n convertEventAndSend(e, shaka.ads.Utils.AD_BUFFERING);\n });\n\n this.eventManager_.listen(this.imaAdsManager_,\n google.ima.AdEvent.Type.IMPRESSION, (e) => {\n convertEventAndSend(e, shaka.ads.Utils.AD_IMPRESSION);\n });\n\n this.eventManager_.listen(this.imaAdsManager_,\n google.ima.AdEvent.Type.DURATION_CHANGE, (e) => {\n convertEventAndSend(e, shaka.ads.Utils.AD_DURATION_CHANGED);\n });\n\n this.eventManager_.listen(this.imaAdsManager_,\n google.ima.AdEvent.Type.USER_CLOSE, (e) => {\n convertEventAndSend(e, shaka.ads.Utils.AD_CLOSED);\n });\n\n this.eventManager_.listen(this.imaAdsManager_,\n google.ima.AdEvent.Type.LOADED, (e) => {\n convertEventAndSend(e, shaka.ads.Utils.AD_LOADED);\n });\n\n this.eventManager_.listen(this.imaAdsManager_,\n google.ima.AdEvent.Type.ALL_ADS_COMPLETED, (e) => {\n convertEventAndSend(e, shaka.ads.Utils.ALL_ADS_COMPLETED);\n });\n\n this.eventManager_.listen(this.imaAdsManager_,\n google.ima.AdEvent.Type.LINEAR_CHANGED, (e) => {\n convertEventAndSend(e, shaka.ads.Utils.AD_LINEAR_CHANGED);\n });\n\n this.eventManager_.listen(this.imaAdsManager_,\n google.ima.AdEvent.Type.AD_METADATA, (e) => {\n convertEventAndSend(e, shaka.ads.Utils.AD_METADATA);\n });\n\n this.eventManager_.listen(this.imaAdsManager_,\n google.ima.AdEvent.Type.LOG, (e) => {\n convertEventAndSend(e, shaka.ads.Utils.AD_RECOVERABLE_ERROR);\n });\n\n this.eventManager_.listen(this.imaAdsManager_,\n google.ima.AdEvent.Type.AD_BREAK_READY, (e) => {\n convertEventAndSend(e, shaka.ads.Utils.AD_BREAK_READY);\n });\n\n this.eventManager_.listen(this.imaAdsManager_,\n google.ima.AdEvent.Type.INTERACTION, (e) => {\n convertEventAndSend(e, shaka.ads.Utils.AD_INTERACTION);\n });\n }\n\n /**\n * @param {!google.ima.AdEvent} e\n * @private\n */\n onAdStart_(e) {\n goog.asserts.assert(this.imaAdsManager_,\n 'Should have an ads manager at this point!');\n\n const imaAd = e.getAd();\n if (!imaAd) {\n // Sometimes the IMA SDK will fire a CONTENT_PAUSE_REQUESTED or STARTED\n // event with no associated ad object.\n // We can't really play an ad in that situation, so just ignore the event.\n shaka.log.alwaysWarn(\n 'The IMA SDK fired a ' + e.type + ' event with no associated ad. ' +\n 'Unable to play ad!');\n return;\n }\n\n this.ad_ = new shaka.ads.ClientSideAd(imaAd,\n this.imaAdsManager_, this.video_);\n if (e.type == google.ima.AdEvent.Type.CONTENT_PAUSE_REQUESTED &&\n !this.config_.supportsMultipleMediaElements ) {\n this.onEvent_(new shaka.util.FakeEvent(\n shaka.ads.Utils.AD_CONTENT_PAUSE_REQUESTED));\n }\n const data = new Map()\n .set('ad', this.ad_)\n .set('sdkAdObject', imaAd)\n .set('originalEvent', e);\n this.onEvent_(new shaka.util.FakeEvent(\n shaka.ads.Utils.AD_STARTED, data));\n if (this.ad_.isLinear()) {\n this.adContainer_.setAttribute('ad-active', 'true');\n if (!this.config_.customPlayheadTracker) {\n this.video_.pause();\n }\n if (this.video_.muted) {\n this.ad_.setInitialMuted(this.video_.volume);\n } else {\n this.ad_.setVolume(this.video_.volume);\n }\n }\n }\n\n /**\n * @param {?google.ima.AdEvent} e\n * @private\n */\n onAdComplete_(e) {\n if (e && e.type == google.ima.AdEvent.Type.CONTENT_RESUME_REQUESTED &&\n !this.config_.supportsMultipleMediaElements) {\n this.onEvent_(new shaka.util.FakeEvent(\n shaka.ads.Utils.AD_CONTENT_RESUME_REQUESTED));\n }\n this.onEvent_(new shaka.util.FakeEvent(shaka.ads.Utils.AD_STOPPED,\n (new Map()).set('originalEvent', e)));\n if (this.ad_ && this.ad_.isLinear()) {\n this.adContainer_.removeAttribute('ad-active');\n if (!this.config_.customPlayheadTracker && !this.video_.ended) {\n this.video_.play();\n }\n }\n }\n};\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\n\ngoog.provide('shaka.ads.InterstitialAd');\n\n/**\n * @implements {shaka.extern.IAd}\n * @export\n */\nshaka.ads.InterstitialAd = class {\n /**\n * @param {HTMLMediaElement} video\n * @param {boolean} isSkippable\n * @param {?number} skipOffset\n * @param {?number} skipFor\n * @param {function()} onSkip\n * @param {number} sequenceLength\n * @param {number} adPosition\n * @param {boolean} isUsingAnotherMediaElement\n */\n constructor(video, isSkippable, skipOffset, skipFor, onSkip,\n sequenceLength, adPosition, isUsingAnotherMediaElement) {\n /** @private {HTMLMediaElement} */\n this.video_ = video;\n\n /** @private {boolean} */\n this.isSkippable_ = isSkippable;\n\n /** @private {?number} */\n this.skipOffset_ = isSkippable ? skipOffset || 0 : skipOffset;\n\n /** @private {?number} */\n this.skipFor_ = skipFor;\n\n /** @private {function()} */\n this.onSkip_ = onSkip;\n\n /** @private {number} */\n this.sequenceLength_ = sequenceLength;\n\n /** @private {number} */\n this.adPosition_ = adPosition;\n\n /** @private {boolean} */\n this.isUsingAnotherMediaElement_ = isUsingAnotherMediaElement;\n }\n\n /**\n * @override\n * @export\n */\n needsSkipUI() {\n return true;\n }\n\n /**\n * @override\n * @export\n */\n isClientRendering() {\n return true;\n }\n\n /**\n * @override\n * @export\n */\n isUsingAnotherMediaElement() {\n return this.isUsingAnotherMediaElement_;\n }\n\n /**\n * @override\n * @export\n */\n getDuration() {\n const duration = this.video_.duration;\n if (isNaN(duration)) {\n return -1;\n }\n return duration;\n }\n\n /**\n * @override\n * @export\n */\n getMinSuggestedDuration() {\n return this.getDuration();\n }\n\n /**\n * @override\n * @export\n */\n getRemainingTime() {\n const duration = this.video_.duration;\n if (isNaN(duration)) {\n return -1;\n }\n return duration - this.video_.currentTime;\n }\n\n /**\n * @override\n * @export\n */\n isPaused() {\n return this.video_.paused;\n }\n\n /**\n * @override\n * @export\n */\n isSkippable() {\n if (this.isSkippable_ && this.skipFor_ != null) {\n const position = this.getDuration() - this.getRemainingTime();\n const maxTime = this.skipOffset_ + this.skipFor_;\n return position < maxTime;\n }\n return this.isSkippable_;\n }\n\n /**\n * @override\n * @export\n */\n getTimeUntilSkippable() {\n if (this.isSkippable()) {\n const canSkipIn =\n this.getRemainingTime() + this.skipOffset_ - this.getDuration();\n return Math.max(canSkipIn, 0);\n }\n return Math.max(this.getRemainingTime(), 0);\n }\n\n /**\n * @override\n * @export\n */\n canSkipNow() {\n return this.getTimeUntilSkippable() == 0;\n }\n\n /**\n * @override\n * @export\n */\n skip() {\n this.onSkip_();\n }\n\n /**\n * @override\n * @export\n */\n pause() {\n return this.video_.pause();\n }\n\n /**\n * @override\n * @export\n */\n play() {\n return this.video_.play();\n }\n\n\n /**\n * @override\n * @export\n */\n getVolume() {\n return this.video_.volume;\n }\n\n /**\n * @override\n * @export\n */\n setVolume(volume) {\n this.video_.volume = volume;\n }\n\n /**\n * @override\n * @export\n */\n isMuted() {\n return this.video_.muted;\n }\n\n /**\n * @override\n * @export\n */\n isLinear() {\n return true;\n }\n\n /**\n * @override\n * @export\n */\n resize(width, height) {\n // Nothing\n }\n\n /**\n * @override\n * @export\n */\n setMuted(muted) {\n this.video_.muted = muted;\n }\n\n\n /**\n * @override\n * @export\n */\n getSequenceLength() {\n return this.sequenceLength_;\n }\n\n /**\n * @override\n * @export\n */\n getPositionInSequence() {\n return this.adPosition_;\n }\n\n /**\n * @override\n * @export\n */\n getTitle() {\n return '';\n }\n\n /**\n * @override\n * @export\n */\n getDescription() {\n return '';\n }\n\n /**\n * @override\n * @export\n */\n getVastMediaBitrate() {\n return 0;\n }\n\n /**\n * @override\n * @export\n */\n getVastMediaHeight() {\n return 0;\n }\n\n /**\n * @override\n * @export\n */\n getVastMediaWidth() {\n return 0;\n }\n\n /**\n * @override\n * @export\n */\n getAdId() {\n return '';\n }\n\n /**\n * @override\n * @export\n */\n getCreativeAdId() {\n return '';\n }\n\n /**\n * @override\n * @export\n */\n getAdvertiserName() {\n return '';\n }\n\n /**\n * @override\n * @export\n */\n getMediaUrl() {\n return null;\n }\n\n /**\n * @override\n * @export\n */\n getTimeOffset() {\n return 0;\n }\n\n /**\n * @override\n * @export\n */\n getPodIndex() {\n return 0;\n }\n\n /**\n * @override\n * @export\n */\n release() {\n this.video_ = null;\n }\n};\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\n\ngoog.provide('shaka.ads.InterstitialAdManager');\n\ngoog.require('goog.asserts');\ngoog.require('shaka.Player');\ngoog.require('shaka.ads.InterstitialAd');\ngoog.require('shaka.ads.Utils');\ngoog.require('shaka.log');\ngoog.require('shaka.media.PreloadManager');\ngoog.require('shaka.net.NetworkingEngine');\ngoog.require('shaka.util.Dom');\ngoog.require('shaka.util.Error');\ngoog.require('shaka.util.EventManager');\ngoog.require('shaka.util.FakeEvent');\ngoog.require('shaka.util.IReleasable');\ngoog.require('shaka.util.Platform');\ngoog.require('shaka.util.PublicPromise');\ngoog.require('shaka.util.StringUtils');\ngoog.require('shaka.util.Timer');\ngoog.require('shaka.util.TXml');\n\n\n/**\n * A class responsible for Interstitial ad interactions.\n *\n * @implements {shaka.util.IReleasable}\n */\nshaka.ads.InterstitialAdManager = class {\n /**\n * @param {HTMLElement} adContainer\n * @param {shaka.Player} basePlayer\n * @param {HTMLMediaElement} baseVideo\n * @param {function(!shaka.util.FakeEvent)} onEvent\n */\n constructor(adContainer, basePlayer, baseVideo, onEvent) {\n /** @private {?shaka.extern.AdsConfiguration} */\n this.config_ = null;\n\n /** @private {HTMLElement} */\n this.adContainer_ = adContainer;\n\n /** @private {shaka.Player} */\n this.basePlayer_ = basePlayer;\n\n /** @private {HTMLMediaElement} */\n this.baseVideo_ = baseVideo;\n\n /** @private {?HTMLMediaElement} */\n this.adVideo_ = null;\n\n /** @private {boolean} */\n this.usingBaseVideo_ = true;\n\n /** @private {HTMLMediaElement} */\n this.video_ = this.baseVideo_;\n\n /** @private {function(!shaka.util.FakeEvent)} */\n this.onEvent_ = onEvent;\n\n /** @private {!Set.} */\n this.interstitialIds_ = new Set();\n\n /** @private {!Set.} */\n this.interstitials_ = new Set();\n\n /**\n * @private {!Map.>}\n */\n this.preloadManagerInterstitials_ = new Map();\n\n /** @private {shaka.Player} */\n this.player_ = new shaka.Player();\n\n this.updatePlayerConfig_();\n\n /** @private {shaka.util.EventManager} */\n this.eventManager_ = new shaka.util.EventManager();\n\n /** @private {shaka.util.EventManager} */\n this.adEventManager_ = new shaka.util.EventManager();\n\n /** @private {boolean} */\n this.playingAd_ = false;\n\n /** @private {?number} */\n this.lastTime_ = null;\n\n /** @private {?shaka.extern.AdInterstitial} */\n this.lastPlayedAd_ = null;\n\n this.eventManager_.listen(this.baseVideo_, 'timeupdate', () => {\n if (this.playingAd_ || this.lastTime_ ||\n this.basePlayer_.isRemotePlayback()) {\n return;\n }\n this.lastTime_ = this.baseVideo_.currentTime;\n const currentInterstitial = this.getCurrentInterstitial_(\n /* needPreRoll= */ true, /* numberToSkip= */ 0, this.lastPlayedAd_);\n if (currentInterstitial) {\n this.setupAd_(currentInterstitial, /* sequenceLength= */ 1,\n /* adPosition= */ 1, /* initialTime= */ Date.now());\n }\n });\n\n const checkForInterstitials = () => {\n if (this.playingAd_ || !this.lastTime_ ||\n this.basePlayer_.isRemotePlayback()) {\n return;\n }\n this.lastTime_ = this.baseVideo_.currentTime;\n // Remove last played add when the new time is before to the ad time.\n if (this.lastPlayedAd_ &&\n !this.lastPlayedAd_.pre && !this.lastPlayedAd_.post &&\n this.lastTime_ < this.lastPlayedAd_.startTime) {\n this.lastPlayedAd_ = null;\n }\n const currentInterstitial = this.getCurrentInterstitial_(\n /* needPreRoll= */ false, /* numberToSkip= */ 0, this.lastPlayedAd_);\n if (currentInterstitial) {\n this.setupAd_(currentInterstitial, /* sequenceLength= */ 1,\n /* adPosition= */ 1, /* initialTime= */ Date.now());\n }\n };\n\n /** @private {shaka.util.Timer} */\n this.timeUpdateTimer_ = new shaka.util.Timer(checkForInterstitials);\n\n if ('requestVideoFrameCallback' in this.baseVideo_ &&\n !shaka.util.Platform.isSmartTV()) {\n const baseVideo = /** @type {!HTMLVideoElement} */ (this.baseVideo_);\n const videoFrameCallback = () => {\n checkForInterstitials();\n baseVideo.requestVideoFrameCallback(videoFrameCallback);\n };\n baseVideo.requestVideoFrameCallback(videoFrameCallback);\n } else {\n this.timeUpdateTimer_.tickEvery(/* seconds= */ 0.025);\n }\n\n /** @private {shaka.util.Timer} */\n this.pollTimer_ = new shaka.util.Timer(async () => {\n if (this.interstitials_.size && this.lastTime_ != null) {\n const currentLoadMode = this.basePlayer_.getLoadMode();\n if (currentLoadMode == shaka.Player.LoadMode.DESTROYED ||\n currentLoadMode == shaka.Player.LoadMode.NOT_LOADED) {\n return;\n }\n let cuepointsChanged = false;\n const interstitials = Array.from(this.interstitials_);\n const seekRange = this.basePlayer_.seekRange();\n for (const interstitial of interstitials) {\n if (interstitial == this.lastPlayedAd_) {\n continue;\n }\n const comparisonTime = interstitial.endTime || interstitial.startTime;\n if ((seekRange.start - comparisonTime) >= 1) {\n if (this.preloadManagerInterstitials_.has(interstitial)) {\n const preloadManager =\n // eslint-disable-next-line no-await-in-loop\n await this.preloadManagerInterstitials_.get(interstitial);\n if (preloadManager) {\n preloadManager.destroy();\n }\n this.preloadManagerInterstitials_.delete(interstitial);\n }\n const interstitialId = JSON.stringify(interstitial);\n if (this.interstitialIds_.has(interstitialId)) {\n this.interstitialIds_.delete(interstitialId);\n }\n this.interstitials_.delete(interstitial);\n cuepointsChanged = true;\n } else {\n const difference = interstitial.startTime - this.lastTime_;\n if (difference > 0 && difference <= 10) {\n if (!this.preloadManagerInterstitials_.has(interstitial)) {\n this.preloadManagerInterstitials_.set(\n interstitial, this.player_.preload(interstitial.uri));\n }\n }\n }\n }\n if (cuepointsChanged) {\n this.cuepointsChanged_();\n }\n }\n }).tickEvery(/* seconds= */ 1);\n }\n\n /**\n * Called by the AdManager to provide an updated configuration any time it\n * changes.\n *\n * @param {shaka.extern.AdsConfiguration} config\n */\n configure(config) {\n this.config_ = config;\n this.determineIfUsingBaseVideo_();\n }\n\n /**\n * @private\n */\n determineIfUsingBaseVideo_() {\n if (!this.adContainer_ || !this.config_ || this.playingAd_) {\n return;\n }\n let supportsMultipleMediaElements =\n this.config_.supportsMultipleMediaElements;\n const video = /** @type {HTMLVideoElement} */(this.baseVideo_);\n if (video.webkitSupportsFullscreen && video.webkitDisplayingFullscreen) {\n supportsMultipleMediaElements = false;\n }\n if (this.usingBaseVideo_ != supportsMultipleMediaElements) {\n return;\n }\n this.usingBaseVideo_ = !supportsMultipleMediaElements;\n if (this.usingBaseVideo_) {\n this.video_ = this.baseVideo_;\n if (this.adVideo_) {\n if (this.adVideo_.parentElement) {\n this.adContainer_.removeChild(this.adVideo_);\n }\n this.adVideo_ = null;\n }\n } else {\n if (!this.adVideo_) {\n this.adVideo_ = this.createMediaElement_();\n }\n this.video_ = this.adVideo_;\n }\n }\n\n\n /**\n * Resets the Interstitial manager and removes any continuous polling.\n */\n stop() {\n if (this.adEventManager_) {\n this.adEventManager_.removeAll();\n }\n this.interstitialIds_.clear();\n this.interstitials_.clear();\n this.player_.destroyAllPreloads();\n this.preloadManagerInterstitials_.clear();\n this.player_.detach();\n this.playingAd_ = false;\n this.lastTime_ = null;\n this.lastPlayedAd_ = null;\n }\n\n /** @override */\n release() {\n this.stop();\n if (this.eventManager_) {\n this.eventManager_.release();\n }\n if (this.adEventManager_) {\n this.adEventManager_.release();\n }\n if (this.adContainer_) {\n shaka.util.Dom.removeAllChildren(this.adContainer_);\n }\n if (this.timeUpdateTimer_) {\n this.timeUpdateTimer_.stop();\n this.timeUpdateTimer_ = null;\n }\n if (this.pollTimer_) {\n this.pollTimer_.stop();\n this.pollTimer_ = null;\n }\n this.player_.destroy();\n }\n\n\n /**\n * @param {shaka.extern.HLSInterstitial} hlsInterstitial\n */\n async addMetadata(hlsInterstitial) {\n this.updatePlayerConfig_();\n const adInterstitials = await this.getInterstitialsInfo_(hlsInterstitial);\n if (adInterstitials.length) {\n this.addInterstitials(adInterstitials);\n } else {\n shaka.log.alwaysWarn('Unsupported HLS interstitial', hlsInterstitial);\n }\n }\n\n /**\n * @param {shaka.extern.TimelineRegionInfo} region\n */\n addRegion(region) {\n let alternativeMPDUri;\n let alternativeMPDmode;\n for (const node of region.eventNode.children) {\n if (node.tagName == 'AlternativeMPD') {\n const uri = node.attributes['uri'];\n const mode = node.attributes['mode'];\n if (uri) {\n alternativeMPDUri = uri;\n alternativeMPDmode = mode;\n break;\n }\n }\n }\n if (!alternativeMPDUri) {\n shaka.log.alwaysWarn('Unsupported MPD alternate', region);\n return;\n }\n const isReplace = alternativeMPDmode == 'replace';\n const isInsert = alternativeMPDmode == 'insert';\n if (!isReplace && !isInsert) {\n shaka.log.warning('Unsupported MPD alternate', region);\n return;\n }\n\n /** @type {!shaka.extern.AdInterstitial} */\n const interstitial = {\n id: null,\n startTime: region.startTime,\n endTime: region.endTime,\n uri: alternativeMPDUri,\n isSkippable: false,\n skipOffset: null,\n skipFor: null,\n canJump: true,\n resumeOffset: isInsert ? 0 : null,\n playoutLimit: null,\n once: false,\n pre: false,\n post: false,\n timelineRange: isReplace && !isInsert,\n };\n this.addInterstitials([interstitial]);\n }\n\n /**\n * @param {string} url\n * @return {!Promise}\n */\n async addAdUrlInterstitial(url) {\n const NetworkingEngine = shaka.net.NetworkingEngine;\n const context = {\n type: NetworkingEngine.AdvancedRequestType.INTERSTITIAL_AD_URL,\n };\n const responseData = await this.makeAdRequest_(url, context);\n const data = shaka.util.TXml.parseXml(responseData, 'VAST,vmap:VMAP');\n if (!data) {\n throw new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.ADS,\n shaka.util.Error.Code.VAST_INVALID_XML);\n }\n let interstitials = [];\n if (data.tagName == 'VAST') {\n interstitials = shaka.ads.Utils.parseVastToInterstitials(\n data, this.lastTime_);\n } else if (data.tagName == 'vmap:VMAP') {\n for (const ad of shaka.ads.Utils.parseVMAP(data)) {\n // eslint-disable-next-line no-await-in-loop\n const vastResponseData = await this.makeAdRequest_(ad.uri, context);\n const vast = shaka.util.TXml.parseXml(vastResponseData, 'VAST');\n if (!vast) {\n throw new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.ADS,\n shaka.util.Error.Code.VAST_INVALID_XML);\n }\n interstitials.push(...shaka.ads.Utils.parseVastToInterstitials(\n vast, ad.time));\n }\n }\n this.addInterstitials(interstitials);\n }\n\n\n /**\n * @param {!Array.} interstitials\n */\n addInterstitials(interstitials) {\n let cuepointsChanged = false;\n for (const interstitial of interstitials) {\n const interstitialId = interstitial.id || JSON.stringify(interstitial);\n if (this.interstitialIds_.has(interstitialId)) {\n continue;\n }\n cuepointsChanged = true;\n this.interstitialIds_.add(interstitialId);\n this.interstitials_.add(interstitial);\n let shouldPreload = false;\n if (interstitial.pre && this.lastTime_ == null) {\n shouldPreload = true;\n } else if (interstitial.startTime == 0 && !interstitial.canJump) {\n shouldPreload = true;\n } else if (this.lastTime_ != null) {\n const difference = interstitial.startTime - this.lastTime_;\n if (difference > 0 && difference <= 10) {\n shouldPreload = true;\n }\n }\n if (shouldPreload) {\n if (!this.preloadManagerInterstitials_.has(interstitial)) {\n this.preloadManagerInterstitials_.set(\n interstitial, this.player_.preload(interstitial.uri));\n }\n }\n }\n if (cuepointsChanged) {\n this.cuepointsChanged_();\n }\n }\n\n /**\n * @return {!HTMLMediaElement}\n * @private\n */\n createMediaElement_() {\n const video = /** @type {!HTMLMediaElement} */(\n document.createElement(this.baseVideo_.tagName));\n video.autoplay = true;\n video.style.position = 'absolute';\n video.style.top = '0';\n video.style.left = '0';\n video.style.width = '100%';\n video.style.height = '100%';\n video.style.backgroundColor = 'rgb(0, 0, 0)';\n video.setAttribute('playsinline', '');\n return video;\n }\n\n\n /**\n * @param {boolean} needPreRoll\n * @param {number} numberToSkip\n * @param {?shaka.extern.AdInterstitial=} lastPlayedAd\n * @return {?shaka.extern.AdInterstitial}\n * @private\n */\n getCurrentInterstitial_(needPreRoll, numberToSkip, lastPlayedAd) {\n let skipped = 0;\n let currentInterstitial = null;\n if (this.interstitials_.size && this.lastTime_ != null) {\n const isEnded = this.baseVideo_.ended;\n const interstitials = Array.from(this.interstitials_).sort((a, b) => {\n return b.startTime - a.startTime;\n });\n const roundDecimals = (number) => {\n return Math.round(number * 1000) / 1000;\n };\n for (const interstitial of interstitials) {\n let isValid = false;\n if (needPreRoll) {\n isValid = interstitial.pre;\n } else if (isEnded) {\n isValid = interstitial.post;\n } else if (!interstitial.pre && !interstitial.post) {\n const difference =\n this.lastTime_ - roundDecimals(interstitial.startTime);\n if (difference > 0 &&\n (difference <= 1 || !interstitial.canJump)) {\n if (lastPlayedAd && !lastPlayedAd.pre && !lastPlayedAd.post &&\n lastPlayedAd.startTime >= interstitial.startTime) {\n isValid = false;\n } else {\n isValid = true;\n }\n }\n }\n if (isValid) {\n if (skipped == numberToSkip) {\n currentInterstitial = interstitial;\n break;\n }\n skipped++;\n }\n }\n }\n return currentInterstitial;\n }\n\n\n /**\n * @param {shaka.extern.AdInterstitial} interstitial\n * @param {number} sequenceLength\n * @param {number} adPosition\n * @param {number} initialTime the clock time the ad started at\n * @param {number=} oncePlayed\n * @private\n */\n async setupAd_(interstitial, sequenceLength, adPosition, initialTime,\n oncePlayed = 0) {\n this.determineIfUsingBaseVideo_();\n goog.asserts.assert(this.video_, 'Must have video');\n\n this.lastPlayedAd_ = interstitial;\n\n shaka.log.info('Starting interstitial',\n interstitial.startTime, 'at', this.lastTime_);\n\n const startTime = Date.now();\n\n if (!this.video_.parentElement && this.adContainer_) {\n this.adContainer_.appendChild(this.video_);\n }\n\n if (adPosition == 1 && sequenceLength == 1) {\n sequenceLength = Array.from(this.interstitials_).filter((i) => {\n if (interstitial.pre) {\n return i.pre == interstitial.pre;\n } else if (interstitial.post) {\n return i.post == interstitial.post;\n }\n return Math.abs(i.startTime - interstitial.startTime) < 0.001;\n }).length;\n }\n\n if (interstitial.once || interstitial.pre) {\n oncePlayed++;\n this.interstitials_.delete(interstitial);\n this.cuepointsChanged_();\n }\n this.playingAd_ = true;\n\n if (this.usingBaseVideo_ && adPosition == 1) {\n this.onEvent_(new shaka.util.FakeEvent(\n shaka.ads.Utils.AD_CONTENT_PAUSE_REQUESTED,\n (new Map()).set('saveLivePosition', true)));\n const detachBasePlayerPromise = new shaka.util.PublicPromise();\n const checkState = async (e) => {\n if (e['state'] == 'detach') {\n if (shaka.util.Platform.isSmartTV()) {\n await new Promise(\n (resolve) => new shaka.util.Timer(resolve).tickAfter(0.1));\n }\n detachBasePlayerPromise.resolve();\n this.adEventManager_.unlisten(\n this.basePlayer_, 'onstatechange', checkState);\n }\n };\n this.adEventManager_.listen(\n this.basePlayer_, 'onstatechange', checkState);\n await detachBasePlayerPromise;\n }\n if (!this.usingBaseVideo_) {\n this.baseVideo_.pause();\n if (interstitial.resumeOffset != null &&\n interstitial.resumeOffset != 0) {\n this.baseVideo_.currentTime += interstitial.resumeOffset;\n }\n }\n\n let unloadingInterstitial = false;\n /** @type {?shaka.util.Timer} */\n let playoutLimitTimer = null;\n\n const updateBaseVideoTime = () => {\n if (!this.usingBaseVideo_) {\n if (interstitial.resumeOffset == null) {\n if (interstitial.timelineRange && interstitial.endTime &&\n interstitial.endTime != Infinity) {\n if (this.baseVideo_.currentTime != interstitial.endTime) {\n this.baseVideo_.currentTime = interstitial.endTime;\n }\n } else {\n const now = Date.now();\n this.baseVideo_.currentTime += (now - initialTime) / 1000;\n initialTime = now;\n }\n }\n }\n };\n\n const basicTask = async () => {\n updateBaseVideoTime();\n if (playoutLimitTimer) {\n playoutLimitTimer.stop();\n }\n goog.asserts.assert(typeof(oncePlayed) == 'number',\n 'Should be an number!');\n // Optimization to avoid returning to main content when there is another\n // interstitial below.\n const nextCurrentInterstitial = this.getCurrentInterstitial_(\n interstitial.pre, adPosition - oncePlayed);\n if (nextCurrentInterstitial) {\n this.onEvent_(\n new shaka.util.FakeEvent(shaka.ads.Utils.AD_STOPPED));\n this.adEventManager_.removeAll();\n this.setupAd_(nextCurrentInterstitial, sequenceLength,\n ++adPosition, initialTime, oncePlayed);\n } else {\n if (this.usingBaseVideo_) {\n await this.player_.detach();\n } else {\n await this.player_.unload();\n }\n if (this.usingBaseVideo_) {\n let offset = interstitial.resumeOffset;\n if (offset == null) {\n if (interstitial.timelineRange && interstitial.endTime &&\n interstitial.endTime != Infinity) {\n offset = interstitial.endTime - (this.lastTime_ || 0);\n } else {\n offset = (Date.now() - initialTime) / 1000;\n }\n }\n this.onEvent_(new shaka.util.FakeEvent(\n shaka.ads.Utils.AD_CONTENT_RESUME_REQUESTED,\n (new Map()).set('offset', offset)));\n }\n this.onEvent_(\n new shaka.util.FakeEvent(shaka.ads.Utils.AD_STOPPED));\n this.adEventManager_.removeAll();\n this.playingAd_ = false;\n if (!this.usingBaseVideo_) {\n updateBaseVideoTime();\n if (!this.baseVideo_.ended) {\n this.baseVideo_.play();\n }\n } else {\n this.cuepointsChanged_();\n }\n this.determineIfUsingBaseVideo_();\n }\n };\n const error = async (e) => {\n if (unloadingInterstitial) {\n return;\n }\n unloadingInterstitial = true;\n this.onEvent_(new shaka.util.FakeEvent(shaka.ads.Utils.AD_ERROR,\n (new Map()).set('originalEvent', e)));\n await basicTask();\n };\n const complete = async () => {\n if (unloadingInterstitial) {\n return;\n }\n unloadingInterstitial = true;\n await basicTask();\n this.onEvent_(\n new shaka.util.FakeEvent(shaka.ads.Utils.AD_COMPLETE));\n };\n const onSkip = async () => {\n if (unloadingInterstitial) {\n return;\n }\n unloadingInterstitial = true;\n this.onEvent_(new shaka.util.FakeEvent(shaka.ads.Utils.AD_SKIPPED));\n await basicTask();\n };\n\n const ad = new shaka.ads.InterstitialAd(this.video_,\n interstitial.isSkippable, interstitial.skipOffset,\n interstitial.skipFor, onSkip, sequenceLength, adPosition,\n !this.usingBaseVideo_);\n if (!this.usingBaseVideo_) {\n ad.setMuted(this.baseVideo_.muted);\n ad.setVolume(this.baseVideo_.volume);\n }\n\n this.onEvent_(\n new shaka.util.FakeEvent(shaka.ads.Utils.AD_STARTED,\n (new Map()).set('ad', ad)));\n\n let prevCanSkipNow = ad.canSkipNow();\n if (prevCanSkipNow) {\n this.onEvent_(new shaka.util.FakeEvent(\n shaka.ads.Utils.AD_SKIP_STATE_CHANGED));\n }\n const eventsSent = new Set();\n this.adEventManager_.listenOnce(this.player_, 'error', error);\n this.adEventManager_.listen(this.video_, 'timeupdate', () => {\n const duration = this.video_.duration;\n if (!duration) {\n return;\n }\n const currentCanSkipNow = ad.canSkipNow();\n if (prevCanSkipNow != currentCanSkipNow &&\n ad.getRemainingTime() > 0 && ad.getDuration() > 0) {\n this.onEvent_(\n new shaka.util.FakeEvent(shaka.ads.Utils.AD_SKIP_STATE_CHANGED));\n }\n prevCanSkipNow = currentCanSkipNow;\n const currentPercent = 100 * this.video_.currentTime / duration;\n if (currentPercent >= 25 && !eventsSent.has('firstquartile')) {\n updateBaseVideoTime();\n this.onEvent_(\n new shaka.util.FakeEvent(shaka.ads.Utils.AD_FIRST_QUARTILE));\n eventsSent.add('firstquartile');\n } else if (currentPercent >= 50 && !eventsSent.has('midpoint')) {\n updateBaseVideoTime();\n this.onEvent_(\n new shaka.util.FakeEvent(shaka.ads.Utils.AD_MIDPOINT));\n eventsSent.add('midpoint');\n } else if (currentPercent >= 75 && !eventsSent.has('thirdquartile')) {\n updateBaseVideoTime();\n this.onEvent_(\n new shaka.util.FakeEvent(shaka.ads.Utils.AD_THIRD_QUARTILE));\n eventsSent.add('thirdquartile');\n }\n });\n this.adEventManager_.listenOnce(this.player_, 'complete', complete);\n this.adEventManager_.listen(this.video_, 'play', () => {\n this.onEvent_(\n new shaka.util.FakeEvent(shaka.ads.Utils.AD_RESUMED));\n });\n this.adEventManager_.listen(this.video_, 'pause', () => {\n // playRangeEnd in src= causes the ended event not to be fired when that\n // position is reached, instead pause event is fired.\n const currentConfig = this.player_.getConfiguration();\n if (this.video_.currentTime >= currentConfig.playRangeEnd) {\n complete();\n return;\n }\n this.onEvent_(\n new shaka.util.FakeEvent(shaka.ads.Utils.AD_PAUSED));\n });\n this.adEventManager_.listen(this.video_, 'volumechange', () => {\n if (this.video_.muted) {\n this.onEvent_(\n new shaka.util.FakeEvent(shaka.ads.Utils.AD_MUTED));\n } else {\n this.onEvent_(\n new shaka.util.FakeEvent(shaka.ads.Utils.AD_VOLUME_CHANGED));\n }\n });\n try {\n this.updatePlayerConfig_();\n if (interstitial.startTime && interstitial.endTime &&\n interstitial.endTime != Infinity &&\n interstitial.startTime != interstitial.endTime) {\n const duration = interstitial.endTime - interstitial.startTime;\n if (duration > 0) {\n this.player_.configure('playRangeEnd', duration);\n }\n }\n if (interstitial.playoutLimit) {\n playoutLimitTimer = new shaka.util.Timer(() => {\n ad.skip();\n }).tickAfter(interstitial.playoutLimit);\n this.player_.configure('playRangeEnd', interstitial.playoutLimit);\n }\n await this.player_.attach(this.video_);\n if (this.preloadManagerInterstitials_.has(interstitial)) {\n const preloadManager =\n await this.preloadManagerInterstitials_.get(interstitial);\n this.preloadManagerInterstitials_.delete(interstitial);\n if (preloadManager) {\n await this.player_.load(preloadManager);\n } else {\n await this.player_.load(interstitial.uri);\n }\n } else {\n await this.player_.load(interstitial.uri);\n }\n if (interstitial.playoutLimit) {\n if (playoutLimitTimer) {\n playoutLimitTimer.stop();\n }\n playoutLimitTimer = new shaka.util.Timer(() => {\n ad.skip();\n }).tickAfter(interstitial.playoutLimit);\n }\n const loadTime = (Date.now() - startTime) / 1000;\n this.onEvent_(new shaka.util.FakeEvent(shaka.ads.Utils.ADS_LOADED,\n (new Map()).set('loadTime', loadTime)));\n if (this.usingBaseVideo_) {\n this.baseVideo_.play();\n }\n } catch (e) {\n error(e);\n }\n }\n\n\n /**\n * @param {shaka.extern.HLSInterstitial} hlsInterstitial\n * @return {!Promise.>}\n * @private\n */\n async getInterstitialsInfo_(hlsInterstitial) {\n const interstitialsAd = [];\n if (!hlsInterstitial) {\n return interstitialsAd;\n }\n const assetUri = hlsInterstitial.values.find((v) => v.key == 'X-ASSET-URI');\n const assetList =\n hlsInterstitial.values.find((v) => v.key == 'X-ASSET-LIST');\n if (!assetUri && !assetList) {\n return interstitialsAd;\n }\n let id = null;\n const hlsInterstitialId = hlsInterstitial.values.find((v) => v.key == 'ID');\n if (hlsInterstitialId) {\n id = /** @type {string} */(hlsInterstitialId.data);\n }\n const startTime = id == null ?\n Math.floor(hlsInterstitial.startTime * 10) / 10:\n hlsInterstitial.startTime;\n let endTime = hlsInterstitial.endTime;\n if (hlsInterstitial.endTime && hlsInterstitial.endTime != Infinity &&\n typeof(hlsInterstitial.endTime) == 'number') {\n endTime = id == null ?\n Math.floor(hlsInterstitial.endTime * 10) / 10:\n hlsInterstitial.endTime;\n }\n const restrict = hlsInterstitial.values.find((v) => v.key == 'X-RESTRICT');\n let isSkippable = true;\n let canJump = true;\n if (restrict && restrict.data) {\n const data = /** @type {string} */(restrict.data);\n isSkippable = !data.includes('SKIP');\n canJump = !data.includes('JUMP');\n }\n let skipOffset = isSkippable ? 0 : null;\n const enableSkipAfter =\n hlsInterstitial.values.find((v) => v.key == 'X-ENABLE-SKIP-AFTER');\n if (enableSkipAfter) {\n const enableSkipAfterString = /** @type {string} */(enableSkipAfter.data);\n skipOffset = parseFloat(enableSkipAfterString);\n if (isNaN(skipOffset)) {\n skipOffset = isSkippable ? 0 : null;\n }\n }\n let skipFor = null;\n const enableSkipFor =\n hlsInterstitial.values.find((v) => v.key == 'X-ENABLE-SKIP-FOR');\n if (enableSkipFor) {\n const enableSkipForString = /** @type {string} */(enableSkipFor.data);\n skipFor = parseFloat(enableSkipForString);\n if (isNaN(skipOffset)) {\n skipFor = null;\n }\n }\n let resumeOffset = null;\n const resume =\n hlsInterstitial.values.find((v) => v.key == 'X-RESUME-OFFSET');\n if (resume) {\n const resumeOffsetString = /** @type {string} */(resume.data);\n resumeOffset = parseFloat(resumeOffsetString);\n if (isNaN(resumeOffset)) {\n resumeOffset = null;\n }\n }\n let playoutLimit = null;\n const playout =\n hlsInterstitial.values.find((v) => v.key == 'X-PLAYOUT-LIMIT');\n if (playout) {\n const playoutLimitString = /** @type {string} */(playout.data);\n playoutLimit = parseFloat(playoutLimitString);\n if (isNaN(playoutLimit)) {\n playoutLimit = null;\n }\n }\n let once = false;\n let pre = false;\n let post = false;\n const cue = hlsInterstitial.values.find((v) => v.key == 'CUE');\n if (cue) {\n const data = /** @type {string} */(cue.data);\n once = data.includes('ONCE');\n pre = data.includes('PRE');\n post = data.includes('POST');\n }\n let timelineRange = false;\n const timelineOccupies =\n hlsInterstitial.values.find((v) => v.key == 'X-TIMELINE-OCCUPIES');\n if (timelineOccupies) {\n const data = /** @type {string} */(timelineOccupies.data);\n timelineRange = data.includes('RANGE');\n } else if (!resume && this.basePlayer_.isLive()) {\n timelineRange = !pre && !post;\n }\n if (assetUri) {\n const uri = /** @type {string} */(assetUri.data);\n if (!uri) {\n return interstitialsAd;\n }\n interstitialsAd.push({\n id,\n startTime,\n endTime,\n uri,\n isSkippable,\n skipOffset,\n skipFor,\n canJump,\n resumeOffset,\n playoutLimit,\n once,\n pre,\n post,\n timelineRange,\n });\n } else if (assetList) {\n const uri = /** @type {string} */(assetList.data);\n if (!uri) {\n return interstitialsAd;\n }\n try {\n const NetworkingEngine = shaka.net.NetworkingEngine;\n const context = {\n type: NetworkingEngine.AdvancedRequestType.INTERSTITIAL_ASSET_LIST,\n };\n const responseData = await this.makeAdRequest_(uri, context);\n const data = shaka.util.StringUtils.fromUTF8(responseData);\n const dataAsJson =\n /** @type {!shaka.ads.InterstitialAdManager.AssetsList} */ (\n JSON.parse(data));\n const skipControl = dataAsJson['SKIP-CONTROL'];\n if (skipControl) {\n const enableSkipAfterValue = skipControl['ENABLE-SKIP-AFTER'];\n if (enableSkipAfterValue instanceof Number) {\n skipOffset = parseFloat(enableSkipAfterValue);\n if (isNaN(enableSkipAfterValue)) {\n skipOffset = isSkippable ? 0 : null;\n }\n }\n const enableSkipForValue = skipControl['X-ENABLE-SKIP-FOR'];\n if (enableSkipForValue instanceof Number) {\n skipFor = parseFloat(enableSkipForValue);\n if (isNaN(enableSkipForValue)) {\n skipFor = null;\n }\n }\n }\n for (const asset of dataAsJson['ASSETS']) {\n if (asset['URI']) {\n interstitialsAd.push({\n id,\n startTime,\n endTime,\n uri: asset['URI'],\n isSkippable,\n skipOffset,\n skipFor,\n canJump,\n resumeOffset,\n playoutLimit,\n once,\n pre,\n post,\n timelineRange,\n });\n }\n }\n } catch (e) {\n // Ignore errors\n }\n }\n return interstitialsAd;\n }\n\n\n /**\n * @private\n */\n cuepointsChanged_() {\n /** @type {!Array.} */\n const cuePoints = [];\n for (const interstitial of this.interstitials_) {\n /** @type {shaka.extern.AdCuePoint} */\n const shakaCuePoint = {\n start: interstitial.startTime,\n end: null,\n };\n if (interstitial.pre) {\n shakaCuePoint.start = 0;\n shakaCuePoint.end = null;\n } else if (interstitial.post) {\n shakaCuePoint.start = -1;\n shakaCuePoint.end = null;\n } else if (interstitial.timelineRange) {\n shakaCuePoint.end = interstitial.endTime;\n }\n const isValid = !cuePoints.find((c) => {\n return shakaCuePoint.start == c.start && shakaCuePoint.end == c.end;\n });\n if (isValid) {\n cuePoints.push(shakaCuePoint);\n }\n }\n\n this.onEvent_(new shaka.util.FakeEvent(\n shaka.ads.Utils.CUEPOINTS_CHANGED,\n (new Map()).set('cuepoints', cuePoints)));\n }\n\n\n /**\n * @private\n */\n updatePlayerConfig_() {\n goog.asserts.assert(this.player_, 'Must have player');\n goog.asserts.assert(this.basePlayer_, 'Must have base player');\n this.player_.configure(this.basePlayer_.getNonDefaultConfiguration());\n this.player_.configure('ads.disableHLSInterstitial', true);\n this.player_.configure('ads.disableDASHInterstitial', true);\n const netEngine = this.player_.getNetworkingEngine();\n goog.asserts.assert(netEngine, 'Need networking engine');\n netEngine.clearAllRequestFilters();\n netEngine.clearAllResponseFilters();\n this.basePlayer_.getNetworkingEngine().copyFiltersInto(netEngine);\n }\n\n /**\n * @param {string} url\n * @param {shaka.extern.RequestContext=} context\n * @return {!Promise.}\n * @private\n */\n async makeAdRequest_(url, context) {\n const type = shaka.net.NetworkingEngine.RequestType.ADS;\n const request = shaka.net.NetworkingEngine.makeRequest(\n [url],\n shaka.net.NetworkingEngine.defaultRetryParameters());\n const op = this.basePlayer_.getNetworkingEngine()\n .request(type, request, context);\n const response = await op.promise;\n return response.data;\n }\n};\n\n\n/**\n * @typedef {{\n * ASSETS: !Array.,\n * SKIP-CONTROL: ?shaka.ads.InterstitialAdManager.SkipControl\n * }}\n *\n * @property {!Array.} ASSETS\n * @property {shaka.ads.InterstitialAdManager.SkipControl} SKIP-CONTROL\n */\nshaka.ads.InterstitialAdManager.AssetsList;\n\n\n/**\n * @typedef {{\n * URI: string\n * }}\n *\n * @property {string} URI\n */\nshaka.ads.InterstitialAdManager.Asset;\n\n\n/**\n * @typedef {{\n * ENABLE-SKIP-AFTER: number,\n * ENABLE-SKIP-FOR: number\n * }}\n *\n * @property {number} ENABLE-SKIP-AFTER\n * @property {number} ENABLE-SKIP-FOR\n */\nshaka.ads.InterstitialAdManager.SkipControl;\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\n\ngoog.provide('shaka.ads.MediaTailorAd');\n\ngoog.require('shaka.util.TextParser');\n\n/**\n * @implements {shaka.extern.IAd}\n * @export\n */\nshaka.ads.MediaTailorAd = class {\n /**\n * @param {mediaTailor.Ad} mediaTailorAd\n * @param {number} adPosition\n * @param {number} totalAds\n * @param {HTMLMediaElement} video\n */\n constructor(mediaTailorAd, adPosition, totalAds, isLinear, video) {\n /** @private {?mediaTailor.Ad} */\n this.ad_ = mediaTailorAd;\n\n /** @private {?number} */\n this.skipOffset_ = shaka.util.TextParser.parseTime(this.ad_.skipOffset);\n\n /** @private {HTMLMediaElement} */\n this.video_ = video;\n\n /** @private {?number} */\n this.adPosition_ = adPosition;\n\n /** @private {?number} */\n this.totalAds_ = totalAds;\n\n /** @private {boolean} */\n this.isLinear_ = isLinear;\n\n /** @private {boolean} */\n this.isSkipped_ = false;\n }\n\n /**\n * @override\n * @export\n */\n needsSkipUI() {\n return true;\n }\n\n /**\n * @override\n * @export\n */\n isClientRendering() {\n return false;\n }\n\n /**\n * @override\n * @export\n */\n isUsingAnotherMediaElement() {\n return false;\n }\n\n /**\n * @override\n * @export\n */\n getDuration() {\n return this.ad_.durationInSeconds;\n }\n\n /**\n * @override\n * @export\n */\n getMinSuggestedDuration() {\n return this.getDuration();\n }\n\n /**\n * @override\n * @export\n */\n getRemainingTime() {\n const endTime = this.ad_.startTimeInSeconds + this.ad_.durationInSeconds;\n return endTime - this.video_.currentTime;\n }\n\n /**\n * @override\n * @export\n */\n isPaused() {\n return this.video_.paused;\n }\n\n /**\n * @override\n * @export\n */\n isSkippable() {\n if (typeof this.skipOffset_ == 'number') {\n return true;\n }\n return false;\n }\n\n /**\n * @override\n * @export\n */\n getTimeUntilSkippable() {\n if (typeof this.skipOffset_ != 'number') {\n return this.getRemainingTime();\n }\n const canSkipIn =\n this.getRemainingTime() + this.skipOffset_ - this.getDuration();\n return Math.max(canSkipIn, 0);\n }\n\n /**\n * @override\n * @export\n */\n canSkipNow() {\n return this.getTimeUntilSkippable() == 0;\n }\n\n /**\n * @override\n * @export\n */\n skip() {\n this.isSkipped_ = true;\n this.video_.currentTime += this.getRemainingTime();\n }\n\n /**\n * @override\n * @export\n */\n pause() {\n return this.video_.pause();\n }\n\n /**\n * @override\n * @export\n */\n play() {\n return this.video_.play();\n }\n\n\n /**\n * @override\n * @export\n */\n getVolume() {\n return this.video_.volume;\n }\n\n /**\n * @override\n * @export\n */\n setVolume(volume) {\n this.video_.volume = volume;\n }\n\n /**\n * @override\n * @export\n */\n isMuted() {\n return this.video_.muted;\n }\n\n /**\n * @override\n * @export\n */\n isLinear() {\n return this.isLinear_;\n }\n\n /**\n * @override\n * @export\n */\n resize(width, height) {\n // Nothing\n }\n\n /**\n * @override\n * @export\n */\n setMuted(muted) {\n this.video_.muted = muted;\n }\n\n\n /**\n * @override\n * @export\n */\n getSequenceLength() {\n if (!this.totalAds_) {\n return 1;\n }\n return this.totalAds_;\n }\n\n /**\n * @override\n * @export\n */\n getPositionInSequence() {\n if (!this.adPosition_) {\n return 1;\n }\n return this.adPosition_;\n }\n\n /**\n * @override\n * @export\n */\n getTitle() {\n return this.ad_.adTitle;\n }\n\n /**\n * @override\n * @export\n */\n getDescription() {\n return '';\n }\n\n /**\n * @override\n * @export\n */\n getVastMediaBitrate() {\n return 0;\n }\n\n /**\n * @override\n * @export\n */\n getVastMediaHeight() {\n return 0;\n }\n\n /**\n * @override\n * @export\n */\n getVastMediaWidth() {\n return 0;\n }\n\n /**\n * @override\n * @export\n */\n getAdId() {\n return this.ad_.adId;\n }\n\n /**\n * @override\n * @export\n */\n getCreativeAdId() {\n return this.ad_.creativeId;\n }\n\n /**\n * @override\n * @export\n */\n getAdvertiserName() {\n return '';\n }\n\n /**\n * @override\n * @export\n */\n getMediaUrl() {\n return null;\n }\n\n /**\n * @override\n * @export\n */\n getTimeOffset() {\n return 0;\n }\n\n /**\n * @override\n * @export\n */\n getPodIndex() {\n return 0;\n }\n\n /**\n * @override\n * @export\n */\n release() {\n this.ad_ = null;\n this.video_ = null;\n this.adPosition_ = null;\n this.totalAds_ = null;\n }\n\n /**\n * @return {boolean}\n */\n isSkipped() {\n return this.isSkipped_;\n }\n};\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\n\ngoog.provide('shaka.ads.MediaTailorAdManager');\n\ngoog.require('goog.asserts');\ngoog.require('shaka.ads.MediaTailorAd');\ngoog.require('shaka.ads.Utils');\ngoog.require('shaka.log');\ngoog.require('shaka.net.NetworkingEngine');\ngoog.require('goog.Uri');\ngoog.require('shaka.util.EventManager');\ngoog.require('shaka.util.Error');\ngoog.require('shaka.util.FakeEvent');\ngoog.require('shaka.util.IReleasable');\ngoog.require('shaka.util.PublicPromise');\ngoog.require('shaka.util.StringUtils');\n\n\n/**\n * A class responsible for MediaTailor ad interactions.\n *\n * @implements {shaka.util.IReleasable}\n */\nshaka.ads.MediaTailorAdManager = class {\n /**\n * @param {HTMLElement} adContainer\n * @param {shaka.net.NetworkingEngine} networkingEngine\n * @param {HTMLMediaElement} video\n * @param {function(!shaka.util.FakeEvent)} onEvent\n */\n constructor(adContainer, networkingEngine, video, onEvent) {\n /** @private {HTMLElement} */\n this.adContainer_ = adContainer;\n\n /** @private {shaka.net.NetworkingEngine} */\n this.networkingEngine_ = networkingEngine;\n\n /** @private {HTMLMediaElement} */\n this.video_ = video;\n\n /** @private {?shaka.util.PublicPromise.} */\n this.streamPromise_ = null;\n\n /** @private {number} */\n this.streamRequestStartTime_ = NaN;\n\n /** @private {function(!shaka.util.FakeEvent)} */\n this.onEvent_ = onEvent;\n\n /** @private {boolean} */\n this.isLive_ = false;\n\n /**\n * Time to seek to after an ad if that ad was played as the result of\n * snapback.\n * @private {?number}\n */\n this.snapForwardTime_ = null;\n\n /** @private {!Array.} */\n this.adBreaks_ = [];\n\n /** @private {!Array.} */\n this.playedAds_ = [];\n\n /** @private {?shaka.ads.MediaTailorAd} */\n this.ad_ = null;\n\n /** @private {?mediaTailor.Ad} */\n this.mediaTailorAd_ = null;\n\n /** @private {?mediaTailor.AdBreak} */\n this.mediaTailorAdBreak_ = null;\n\n /** @private {!Map.>} */\n this.staticResources_ = new Map();\n\n /** @private {!Array.<{target: EventTarget, type: string,\n * listener: shaka.util.EventManager.ListenerType}>}\n */\n this.adListeners_ = [];\n\n /** @private {!Array.} */\n this.eventsSent = [];\n\n /** @private {string} */\n this.trackingUrl_ = '';\n\n /** @private {boolean} */\n this.firstTrackingRequest_ = true;\n\n /** @private {string} */\n this.backupUrl_ = '';\n\n /** @private {!Array.} */\n this.currentCuePoints_ = [];\n\n /** @private {shaka.util.EventManager} */\n this.eventManager_ = new shaka.util.EventManager();\n }\n\n /**\n * @param {string} url\n * @param {Object} adsParams\n * @param {string} backupUrl\n * @return {!Promise.}\n */\n streamRequest(url, adsParams, backupUrl) {\n if (this.streamPromise_) {\n return Promise.reject(new shaka.util.Error(\n shaka.util.Error.Severity.RECOVERABLE,\n shaka.util.Error.Category.ADS,\n shaka.util.Error.Code.CURRENT_DAI_REQUEST_NOT_FINISHED));\n }\n\n this.streamPromise_ = new shaka.util.PublicPromise();\n this.requestSessionInfo_(url, adsParams);\n this.backupUrl_ = backupUrl || '';\n\n this.streamRequestStartTime_ = Date.now() / 1000;\n\n return this.streamPromise_;\n }\n\n /**\n * @param {string} url\n */\n addTrackingUrl(url) {\n this.trackingUrl_ = url;\n this.onEvent_(new shaka.util.FakeEvent(shaka.ads.Utils.ADS_LOADED,\n (new Map()).set('loadTime', 0)));\n }\n\n /**\n * Resets the MediaTailor manager and removes any continuous polling.\n */\n stop() {\n for (const listener of this.adListeners_) {\n this.eventManager_.unlisten(\n listener.target, listener.type, listener.listener);\n }\n this.onEnded_();\n this.adListeners_ = [];\n this.eventsSent = [];\n this.trackingUrl_ = '';\n this.firstTrackingRequest_ = true;\n this.backupUrl_ = '';\n this.snapForwardTime_ = null;\n this.adBreaks_ = [];\n this.playedAds_ = [];\n this.staticResources_.clear();\n }\n\n /** @override */\n release() {\n this.stop();\n if (this.eventManager_) {\n this.eventManager_.release();\n }\n }\n\n /**\n * Fired when the manifest is updated\n *\n * @param {boolean} isLive\n */\n onManifestUpdated(isLive) {\n this.isLive_ = isLive;\n if (this.trackingUrl_ != '') {\n this.requestTrackingInfo_(\n this.trackingUrl_, this.firstTrackingRequest_);\n this.firstTrackingRequest_ = false;\n }\n }\n\n /**\n * @return {!Array.}\n */\n getCuePoints() {\n const cuePoints = [];\n for (const adbreak of this.adBreaks_) {\n for (const ad of adbreak.ads) {\n /** @type {!shaka.extern.AdCuePoint} */\n const cuePoint = {\n start: ad.startTimeInSeconds,\n end: ad.startTimeInSeconds + ad.durationInSeconds,\n };\n cuePoints.push(cuePoint);\n }\n }\n return cuePoints;\n }\n\n /**\n * @param {string} url\n * @param {Object} adsParams\n * @private\n */\n async requestSessionInfo_(url, adsParams) {\n const NetworkingEngine = shaka.net.NetworkingEngine;\n const type = NetworkingEngine.RequestType.ADS;\n const context = {\n type: NetworkingEngine.AdvancedRequestType.MEDIATAILOR_SESSION_INFO,\n };\n const request = NetworkingEngine.makeRequest(\n [url],\n NetworkingEngine.defaultRetryParameters());\n request.method = 'POST';\n if (adsParams) {\n const body = JSON.stringify(adsParams);\n request.body = shaka.util.StringUtils.toUTF8(body);\n }\n\n const op = this.networkingEngine_.request(type, request, context);\n try {\n const response = await op.promise;\n const data = shaka.util.StringUtils.fromUTF8(response.data);\n const dataAsJson =\n /** @type {!mediaTailor.SessionResponse} */ (JSON.parse(data));\n if (dataAsJson.manifestUrl && dataAsJson.trackingUrl) {\n const baseUri = new goog.Uri(url);\n const relativeTrackingUri = new goog.Uri(dataAsJson.trackingUrl);\n this.trackingUrl_ = baseUri.resolve(relativeTrackingUri).toString();\n const now = Date.now() / 1000;\n const loadTime = now - this.streamRequestStartTime_;\n this.onEvent_(new shaka.util.FakeEvent(shaka.ads.Utils.ADS_LOADED,\n (new Map()).set('loadTime', loadTime)));\n const relativeManifestUri = new goog.Uri(dataAsJson.manifestUrl);\n this.streamPromise_.resolve(\n baseUri.resolve(relativeManifestUri).toString());\n this.streamPromise_ = null;\n } else {\n throw new Error('Insufficient data from MediaTailor.');\n }\n } catch (e) {\n if (!this.backupUrl_.length) {\n this.streamPromise_.reject('MediaTailor request returned an error ' +\n 'and there was no backup asset uri provided.');\n this.streamPromise_ = null;\n return;\n }\n\n shaka.log.warning('MediaTailor request returned an error. ' +\n 'Falling back to the backup asset uri.');\n this.streamPromise_.resolve(this.backupUrl_);\n this.streamPromise_ = null;\n }\n }\n\n /**\n * @param {string} trackingUrl\n * @param {boolean} firstRequest\n * @private\n */\n async requestTrackingInfo_(trackingUrl, firstRequest) {\n const NetworkingEngine = shaka.net.NetworkingEngine;\n const type = NetworkingEngine.RequestType.ADS;\n const context = {\n type: NetworkingEngine.AdvancedRequestType.MEDIATAILOR_TRACKING_INFO,\n };\n const request = NetworkingEngine.makeRequest(\n [trackingUrl],\n NetworkingEngine.defaultRetryParameters());\n\n const op = this.networkingEngine_.request(type, request, context);\n try {\n const response = await op.promise;\n let cuepoints = [];\n const data = shaka.util.StringUtils.fromUTF8(response.data);\n const dataAsJson =\n /** @type {!mediaTailor.TrackingResponse} */ (JSON.parse(data));\n if (dataAsJson.avails.length > 0) {\n if (JSON.stringify(this.adBreaks_) !=\n JSON.stringify(dataAsJson.avails)) {\n this.adBreaks_ = dataAsJson.avails;\n for (const adbreak of this.adBreaks_) {\n for (const nonLinearAd of adbreak.nonLinearAdsList) {\n for (const nonLinearAdResource of nonLinearAd.nonLinearAdList) {\n this.requestStaticResource_(nonLinearAdResource);\n }\n }\n }\n cuepoints = this.getCuePoints();\n this.onEvent_(new shaka.util.FakeEvent(\n shaka.ads.Utils.CUEPOINTS_CHANGED,\n (new Map()).set('cuepoints', cuepoints)));\n }\n } else {\n if (this.adBreaks_.length) {\n this.onEvent_(new shaka.util.FakeEvent(\n shaka.ads.Utils.CUEPOINTS_CHANGED,\n (new Map()).set('cuepoints', cuepoints)));\n }\n this.onEnded_();\n this.adBreaks_ = [];\n }\n if (firstRequest && (this.isLive_ || cuepoints.length > 0)) {\n this.setupAdBreakListeners_();\n }\n } catch (e) {}\n }\n\n /**\n * @param {mediaTailor.NonLinearAd} nonLinearAd\n * @private\n */\n async requestStaticResource_(nonLinearAd) {\n if (!nonLinearAd.staticResource) {\n return;\n }\n const cacheKey = this.getCacheKeyForNonLinear_(nonLinearAd);\n const staticResource = this.staticResources_.get(cacheKey);\n if (staticResource) {\n return;\n }\n\n const NetworkingEngine = shaka.net.NetworkingEngine;\n const type = NetworkingEngine.RequestType.ADS;\n const context = {\n type: NetworkingEngine.AdvancedRequestType.MEDIATAILOR_STATIC_RESOURCE,\n };\n const request = NetworkingEngine.makeRequest(\n [nonLinearAd.staticResource],\n NetworkingEngine.defaultRetryParameters());\n\n const op = this.networkingEngine_.request(type, request, context);\n try {\n this.staticResources_.set(cacheKey, []);\n const response = await op.promise;\n const data = shaka.util.StringUtils.fromUTF8(response.data);\n const dataAsJson =\n /** @type {!mediaTailorExternalResource.Response} */ (JSON.parse(data));\n const apps = dataAsJson.apps;\n this.staticResources_.set(cacheKey, apps);\n } catch (e) {\n this.staticResources_.delete(cacheKey);\n }\n }\n\n /**\n * @param {mediaTailor.NonLinearAd} nonLinearAd\n * @return {string}\n * @private\n */\n getCacheKeyForNonLinear_(nonLinearAd) {\n return [\n nonLinearAd.adId,\n nonLinearAd.adParameters,\n nonLinearAd.adSystem,\n nonLinearAd.adTitle,\n nonLinearAd.creativeAdId,\n nonLinearAd.creativeId,\n nonLinearAd.creativeSequence,\n nonLinearAd.height,\n nonLinearAd.width,\n nonLinearAd.staticResource,\n ].join('');\n }\n\n /**\n * Setup Ad Break listeners\n *\n * @private\n */\n setupAdBreakListeners_() {\n this.onTimeupdate_();\n if (!this.isLive_) {\n this.checkForSnapback_();\n this.eventManager_.listen(this.video_, 'seeked', () => {\n this.checkForSnapback_();\n });\n this.eventManager_.listen(this.video_, 'ended', () => {\n this.onEnded_();\n });\n }\n this.eventManager_.listen(this.video_, 'timeupdate', () => {\n this.onTimeupdate_();\n });\n }\n\n /**\n * If a seek jumped over the ad break, return to the start of the\n * ad break, then complete the seek after the ad played through.\n *\n * @private\n */\n checkForSnapback_() {\n const currentTime = this.video_.currentTime;\n if (currentTime == 0 || this.snapForwardTime_ != null) {\n return;\n }\n\n let previousAdBreak;\n let previousAd;\n for (const adbreak of this.adBreaks_) {\n for (const ad of adbreak.ads) {\n if (!previousAd) {\n if (ad.startTimeInSeconds < currentTime) {\n previousAd = ad;\n previousAdBreak = adbreak;\n }\n } else if (ad.startTimeInSeconds < currentTime &&\n ad.startTimeInSeconds >\n (previousAd.startTimeInSeconds + previousAd.durationInSeconds)) {\n previousAd = ad;\n previousAdBreak = adbreak;\n break;\n }\n }\n }\n\n // The cue point gets marked as 'played' as soon as the playhead hits it\n // (at the start of an ad), so when we come back to this method as a result\n // of seeking back to the user-selected time, the 'played' flag will be set.\n if (previousAdBreak && previousAd &&\n !this.playedAds_.includes(previousAd.adId)) {\n shaka.log.info('Seeking back to the start of the ad break at ' +\n previousAdBreak.startTimeInSeconds +\n ' and will return to ' + currentTime);\n this.snapForwardTime_ = currentTime;\n this.video_.currentTime = previousAdBreak.startTimeInSeconds;\n }\n }\n\n /**\n * @private\n */\n onAdBreakEnded_() {\n const currentTime = this.video_.currentTime;\n // If the ad break was a result of snapping back (a user seeked over\n // an ad break and was returned to it), seek forward to the point,\n // originally chosen by the user.\n if (this.snapForwardTime_ && this.snapForwardTime_ > currentTime) {\n this.video_.currentTime = this.snapForwardTime_;\n }\n this.snapForwardTime_ = null;\n }\n\n /**\n * @private\n */\n onTimeupdate_() {\n if (!this.video_.duration) {\n // Can't play yet. Ignore.\n return;\n }\n if (!this.ad_ && !this.adBreaks_.length) {\n // No ads\n return;\n }\n const currentTime = this.video_.currentTime;\n let previousAd = false;\n if (this.ad_) {\n previousAd = true;\n goog.asserts.assert(this.mediaTailorAd_, 'Ad should be defined');\n this.sendInProgressEvents_(currentTime, this.mediaTailorAd_);\n const remainingTime = this.ad_.getRemainingTime();\n const duration = this.ad_.getDuration();\n if (this.ad_.canSkipNow() && remainingTime > 0 && duration > 0) {\n this.sendTrackingEvent_(\n shaka.ads.MediaTailorAdManager.SKIP_STATE_CHANGED_);\n }\n if (duration > 0 && (remainingTime <= 0 || remainingTime > duration)) {\n this.onEnded_();\n }\n }\n if (!this.ad_ || !this.ad_.isLinear()) {\n this.checkLinearAds_(currentTime);\n if (!this.ad_) {\n this.checkNonLinearAds_(currentTime);\n }\n if (previousAd && !this.ad_) {\n this.onAdBreakEnded_();\n }\n }\n }\n\n /**\n * @param {number} currentTime\n * @param {mediaTailor.Ad} ad\n * @private\n */\n sendInProgressEvents_(currentTime, ad) {\n const MediaTailorAdManager = shaka.ads.MediaTailorAdManager;\n const firstQuartileTime = ad.startTimeInSeconds +\n 0.25 * ad.durationInSeconds;\n const midpointTime = ad.startTimeInSeconds +\n 0.5 * ad.durationInSeconds;\n const thirdQuartileTime = ad.startTimeInSeconds +\n 0.75 * ad.durationInSeconds;\n if (currentTime >= firstQuartileTime &&\n !this.eventsSent.includes(MediaTailorAdManager.FIRSTQUARTILE_)) {\n this.eventsSent.push(MediaTailorAdManager.FIRSTQUARTILE_);\n this.sendTrackingEvent_(MediaTailorAdManager.FIRSTQUARTILE_);\n } else if (currentTime >= midpointTime &&\n !this.eventsSent.includes(MediaTailorAdManager.MIDPOINT_)) {\n this.eventsSent.push(MediaTailorAdManager.MIDPOINT_);\n this.sendTrackingEvent_(MediaTailorAdManager.MIDPOINT_);\n } else if (currentTime >= thirdQuartileTime &&\n !this.eventsSent.includes(MediaTailorAdManager.THIRDQUARTILE_)) {\n this.eventsSent.push(MediaTailorAdManager.THIRDQUARTILE_);\n this.sendTrackingEvent_(MediaTailorAdManager.THIRDQUARTILE_);\n }\n }\n\n /**\n * @param {number} currentTime\n * @private\n */\n checkLinearAds_(currentTime) {\n const MediaTailorAdManager = shaka.ads.MediaTailorAdManager;\n for (const adbreak of this.adBreaks_) {\n if (this.ad_ && this.ad_.isLinear()) {\n break;\n }\n for (let i = 0; i < adbreak.ads.length; i++) {\n const ad = adbreak.ads[i];\n const startTime = ad.startTimeInSeconds;\n const endTime = ad.startTimeInSeconds + ad.durationInSeconds;\n if (startTime <= currentTime && endTime > currentTime) {\n if (this.playedAds_.includes(ad.adId)) {\n if (this.video_.ended) {\n continue;\n }\n this.video_.currentTime = endTime;\n return;\n }\n this.onEnded_();\n this.mediaTailorAdBreak_ = adbreak;\n this.ad_ = new shaka.ads.MediaTailorAd(\n ad,\n /* adPosition= */ i + 1,\n /* totalAds= */ adbreak.ads.length,\n /* isLinear= */ true,\n this.video_);\n this.mediaTailorAd_ = ad;\n if (i === 0) {\n this.sendTrackingEvent_(MediaTailorAdManager.BREAKSTART_);\n }\n this.setupCurrentAdListeners_();\n break;\n }\n }\n }\n }\n\n /**\n * @param {number} currentTime\n * @private\n */\n checkNonLinearAds_(currentTime) {\n const MediaTailorAdManager = shaka.ads.MediaTailorAdManager;\n for (const adbreak of this.adBreaks_) {\n if (this.ad_) {\n break;\n }\n for (let i = 0; i < adbreak.nonLinearAdsList.length; i++) {\n const ad = adbreak.nonLinearAdsList[i];\n if (!ad.nonLinearAdList.length) {\n continue;\n }\n const startTime = adbreak.startTimeInSeconds;\n const cacheKey = this.getCacheKeyForNonLinear_(ad.nonLinearAdList[0]);\n const staticResource = this.staticResources_.get(cacheKey);\n if (startTime <= currentTime &&\n staticResource && staticResource.length) {\n this.onEnded_();\n this.displayNonLinearAd_(staticResource);\n this.mediaTailorAdBreak_ = adbreak;\n this.ad_ = new shaka.ads.MediaTailorAd(\n ad,\n /* adPosition= */ i + 1,\n /* totalAds= */ adbreak.ads.length,\n /* isLinear= */ false,\n this.video_);\n this.mediaTailorAd_ = ad;\n if (i === 0) {\n this.sendTrackingEvent_(MediaTailorAdManager.BREAKSTART_);\n }\n this.setupCurrentAdListeners_();\n break;\n }\n }\n }\n }\n\n /**\n * @param {!Array.} apps\n * @private\n */\n displayNonLinearAd_(apps) {\n for (const app of apps) {\n if (!app.data.source.length) {\n continue;\n }\n const imageElement = /** @type {!HTMLImageElement} */ (\n document.createElement('img'));\n imageElement.src = app.data.source[0].url;\n imageElement.style.top = (app.placeholder.top || 0) + '%';\n imageElement.style.height = (100 - (app.placeholder.top || 0)) + '%';\n imageElement.style.left = (app.placeholder.left || 0) + '%';\n imageElement.style.maxWidth = (100 - (app.placeholder.left || 0)) + '%';\n imageElement.style.objectFit = 'contain';\n imageElement.style.position = 'absolute';\n this.adContainer_.appendChild(imageElement);\n }\n }\n\n /**\n * @private\n */\n onEnded_() {\n if (this.ad_) {\n // Remove all child nodes\n while (this.adContainer_.lastChild) {\n this.adContainer_.removeChild(this.adContainer_.firstChild);\n }\n if (!this.isLive_) {\n this.playedAds_.push(this.mediaTailorAd_.adId);\n }\n this.removeCurrentAdListeners_(this.ad_.isSkipped());\n const position = this.ad_.getPositionInSequence();\n const totalAdsInBreak = this.ad_.getSequenceLength();\n if (position === totalAdsInBreak) {\n this.sendTrackingEvent_(shaka.ads.MediaTailorAdManager.BREAKEND_);\n }\n this.ad_ = null;\n this.mediaTailorAd_ = null;\n this.mediaTailorAdBreak_ = null;\n }\n }\n\n /**\n * @private\n */\n setupCurrentAdListeners_() {\n const MediaTailorAdManager = shaka.ads.MediaTailorAdManager;\n let needFirstEvents = false;\n if (!this.video_.paused) {\n this.sendTrackingEvent_(MediaTailorAdManager.IMPRESSION_);\n this.sendTrackingEvent_(MediaTailorAdManager.START_);\n } else {\n needFirstEvents = true;\n }\n this.adListeners_.push({\n target: this.video_,\n type: 'volumechange',\n listener: () => {\n if (this.video_.muted) {\n this.sendTrackingEvent_(MediaTailorAdManager.MUTE_);\n }\n },\n });\n this.adListeners_.push({\n target: this.video_,\n type: 'volumechange',\n listener: () => {\n if (!this.video_.muted) {\n this.sendTrackingEvent_(MediaTailorAdManager.UNMUTE_);\n }\n },\n });\n this.adListeners_.push({\n target: this.video_,\n type: 'play',\n listener: () => {\n if (needFirstEvents) {\n this.sendTrackingEvent_(MediaTailorAdManager.IMPRESSION_);\n this.sendTrackingEvent_(MediaTailorAdManager.START_);\n needFirstEvents = false;\n } else {\n this.sendTrackingEvent_(MediaTailorAdManager.RESUME_);\n }\n },\n });\n this.adListeners_.push({\n target: this.video_,\n type: 'pause',\n listener: () => {\n this.sendTrackingEvent_(MediaTailorAdManager.PAUSE_);\n },\n });\n for (const listener of this.adListeners_) {\n this.eventManager_.listen(\n listener.target, listener.type, listener.listener);\n }\n }\n\n /**\n * @param {boolean=} skipped\n * @private\n */\n removeCurrentAdListeners_(skipped = false) {\n if (skipped) {\n this.sendTrackingEvent_(shaka.ads.MediaTailorAdManager.SKIPPED_);\n } else {\n this.sendTrackingEvent_(shaka.ads.MediaTailorAdManager.COMPLETE_);\n }\n for (const listener of this.adListeners_) {\n this.eventManager_.unlisten(\n listener.target, listener.type, listener.listener);\n }\n this.adListeners_ = [];\n this.eventsSent = [];\n }\n\n /**\n * @param {string} eventType\n * @private\n */\n sendTrackingEvent_(eventType) {\n let trackingEvent = this.mediaTailorAd_.trackingEvents.find(\n (event) => event.eventType == eventType);\n if (!trackingEvent) {\n trackingEvent = this.mediaTailorAdBreak_.adBreakTrackingEvents.find(\n (event) => event.eventType == eventType);\n }\n if (trackingEvent) {\n const NetworkingEngine = shaka.net.NetworkingEngine;\n const type = NetworkingEngine.RequestType.ADS;\n const context = {\n type: NetworkingEngine.AdvancedRequestType.MEDIATAILOR_TRACKING_EVENT,\n };\n for (const beaconUrl of trackingEvent.beaconUrls) {\n if (!beaconUrl || beaconUrl == '') {\n continue;\n }\n const request = NetworkingEngine.makeRequest(\n [beaconUrl],\n NetworkingEngine.defaultRetryParameters());\n request.method = 'POST';\n this.networkingEngine_.request(type, request, context);\n }\n }\n switch (eventType) {\n case shaka.ads.MediaTailorAdManager.IMPRESSION_:\n this.onEvent_(\n new shaka.util.FakeEvent(shaka.ads.Utils.AD_IMPRESSION));\n break;\n case shaka.ads.MediaTailorAdManager.START_:\n this.onEvent_(\n new shaka.util.FakeEvent(shaka.ads.Utils.AD_STARTED,\n (new Map()).set('ad', this.ad_)));\n break;\n case shaka.ads.MediaTailorAdManager.MUTE_:\n this.onEvent_(\n new shaka.util.FakeEvent(shaka.ads.Utils.AD_MUTED));\n break;\n case shaka.ads.MediaTailorAdManager.UNMUTE_:\n this.onEvent_(\n new shaka.util.FakeEvent(shaka.ads.Utils.AD_VOLUME_CHANGED));\n break;\n case shaka.ads.MediaTailorAdManager.RESUME_:\n this.onEvent_(\n new shaka.util.FakeEvent(shaka.ads.Utils.AD_RESUMED));\n break;\n case shaka.ads.MediaTailorAdManager.PAUSE_:\n this.onEvent_(\n new shaka.util.FakeEvent(shaka.ads.Utils.AD_PAUSED));\n break;\n case shaka.ads.MediaTailorAdManager.FIRSTQUARTILE_:\n this.onEvent_(\n new shaka.util.FakeEvent(shaka.ads.Utils.AD_FIRST_QUARTILE));\n break;\n case shaka.ads.MediaTailorAdManager.MIDPOINT_:\n this.onEvent_(\n new shaka.util.FakeEvent(shaka.ads.Utils.AD_MIDPOINT));\n break;\n case shaka.ads.MediaTailorAdManager.THIRDQUARTILE_:\n this.onEvent_(\n new shaka.util.FakeEvent(shaka.ads.Utils.AD_THIRD_QUARTILE));\n break;\n case shaka.ads.MediaTailorAdManager.COMPLETE_:\n this.onEvent_(\n new shaka.util.FakeEvent(shaka.ads.Utils.AD_COMPLETE));\n this.onEvent_(\n new shaka.util.FakeEvent(shaka.ads.Utils.AD_STOPPED));\n break;\n case shaka.ads.MediaTailorAdManager.SKIPPED_:\n this.onEvent_(\n new shaka.util.FakeEvent(shaka.ads.Utils.AD_SKIPPED));\n this.onEvent_(\n new shaka.util.FakeEvent(shaka.ads.Utils.AD_STOPPED));\n break;\n case shaka.ads.MediaTailorAdManager.BREAKSTART_:\n this.adContainer_.setAttribute('ad-active', 'true');\n break;\n case shaka.ads.MediaTailorAdManager.BREAKEND_:\n this.adContainer_.removeAttribute('ad-active');\n break;\n case shaka.ads.MediaTailorAdManager.SKIP_STATE_CHANGED_:\n this.onEvent_(\n new shaka.util.FakeEvent(\n shaka.ads.Utils.AD_SKIP_STATE_CHANGED));\n break;\n }\n }\n};\n\n\n/**\n * @const {string}\n * @private\n */\nshaka.ads.MediaTailorAdManager.IMPRESSION_ = 'impression';\n\n\n/**\n * @const {string}\n * @private\n */\nshaka.ads.MediaTailorAdManager.START_ = 'start';\n\n\n/**\n * @const {string}\n * @private\n */\nshaka.ads.MediaTailorAdManager.MUTE_ = 'mute';\n\n\n/**\n * @const {string}\n * @private\n */\nshaka.ads.MediaTailorAdManager.UNMUTE_ = 'unmute';\n\n\n/**\n * @const {string}\n * @private\n */\nshaka.ads.MediaTailorAdManager.RESUME_ = 'resume';\n\n\n/**\n * @const {string}\n * @private\n */\nshaka.ads.MediaTailorAdManager.PAUSE_ = 'pause';\n\n\n/**\n * @const {string}\n * @private\n */\nshaka.ads.MediaTailorAdManager.FIRSTQUARTILE_ = 'firstQuartile';\n\n\n/**\n * @const {string}\n * @private\n */\nshaka.ads.MediaTailorAdManager.MIDPOINT_ = 'midpoint';\n\n\n/**\n * @const {string}\n * @private\n */\nshaka.ads.MediaTailorAdManager.THIRDQUARTILE_ = 'thirdQuartile';\n\n\n/**\n * @const {string}\n * @private\n */\nshaka.ads.MediaTailorAdManager.COMPLETE_ = 'complete';\n\n\n/**\n * @const {string}\n * @private\n */\nshaka.ads.MediaTailorAdManager.SKIPPED_ = 'skip';\n\n\n/**\n * @const {string}\n * @private\n */\nshaka.ads.MediaTailorAdManager.BREAKSTART_ = 'breakStart';\n\n\n/**\n * @const {string}\n * @private\n */\nshaka.ads.MediaTailorAdManager.BREAKEND_ = 'breakEnd';\n\n\n/**\n * @const {string}\n * @private\n */\nshaka.ads.MediaTailorAdManager.SKIP_STATE_CHANGED_ = 'skipStateChanged';\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\n\ngoog.provide('shaka.ads.ServerSideAd');\n\n/**\n * @implements {shaka.extern.IAd}\n * @export\n */\nshaka.ads.ServerSideAd = class {\n /**\n * @param {google.ima.dai.api.Ad} imaAd\n * @param {HTMLMediaElement} video\n */\n constructor(imaAd, video) {\n /** @private {google.ima.dai.api.Ad} */\n this.ad_ = imaAd;\n\n /** @private {?google.ima.dai.api.AdProgressData} */\n this.adProgressData_ = null;\n\n /** @private {HTMLMediaElement} */\n this.video_ = video;\n }\n\n\n /**\n * @param {google.ima.dai.api.AdProgressData} data\n */\n setProgressData(data) {\n this.adProgressData_ = data;\n }\n\n /**\n * @override\n * @export\n */\n needsSkipUI() {\n return true;\n }\n\n /**\n * @override\n * @export\n */\n isClientRendering() {\n return false;\n }\n\n /**\n * @override\n * @export\n */\n isUsingAnotherMediaElement() {\n return false;\n }\n\n /**\n * @override\n * @export\n */\n getDuration() {\n if (!this.adProgressData_) {\n // Unknown yet\n return -1;\n }\n return this.adProgressData_.duration;\n }\n\n /**\n * @override\n * @export\n */\n getMinSuggestedDuration() {\n return this.getDuration();\n }\n\n /**\n * @override\n * @export\n */\n getRemainingTime() {\n if (!this.adProgressData_) {\n // Unknown yet\n return -1;\n }\n\n return this.adProgressData_.duration - this.adProgressData_.currentTime;\n }\n\n /**\n * @override\n * @export\n */\n isPaused() {\n return this.video_.paused;\n }\n\n /**\n * @override\n * @export\n */\n isSkippable() {\n return this.ad_.isSkippable();\n }\n\n /**\n * @override\n * @export\n */\n getTimeUntilSkippable() {\n const skipOffset = this.ad_.getSkipTimeOffset();\n const canSkipIn = this.getRemainingTime() - skipOffset;\n return Math.max(canSkipIn, 0);\n }\n\n /**\n * @override\n * @export\n */\n canSkipNow() {\n return this.getTimeUntilSkippable() == 0;\n }\n\n /**\n * @override\n * @export\n */\n skip() {\n this.video_.currentTime += this.getRemainingTime();\n }\n\n /**\n * @override\n * @export\n */\n pause() {\n return this.video_.pause();\n }\n\n /**\n * @override\n * @export\n */\n play() {\n return this.video_.play();\n }\n\n\n /**\n * @override\n * @export\n */\n getVolume() {\n return this.video_.volume;\n }\n\n /**\n * @override\n * @export\n */\n setVolume(volume) {\n this.video_.volume = volume;\n }\n\n /**\n * @override\n * @export\n */\n isMuted() {\n return this.video_.muted;\n }\n\n /**\n * @override\n * @export\n */\n isLinear() {\n return true;\n }\n\n /**\n * @override\n * @export\n */\n resize(width, height) {\n // Nothing\n }\n\n /**\n * @override\n * @export\n */\n setMuted(muted) {\n this.video_.muted = muted;\n }\n\n\n /**\n * @override\n * @export\n */\n getSequenceLength() {\n const podInfo = this.ad_.getAdPodInfo();\n if (podInfo == null) {\n // No pod, just one ad.\n return 1;\n }\n\n return podInfo.getTotalAds();\n }\n\n /**\n * @override\n * @export\n */\n getPositionInSequence() {\n const podInfo = this.ad_.getAdPodInfo();\n if (podInfo == null) {\n // No pod, just one ad.\n return 1;\n }\n\n return podInfo.getAdPosition();\n }\n\n /**\n * @override\n * @export\n */\n getTitle() {\n return this.ad_.getTitle();\n }\n\n /**\n * @override\n * @export\n */\n getDescription() {\n return this.ad_.getDescription();\n }\n\n /**\n * @override\n * @export\n */\n getVastMediaBitrate() {\n return 0;\n }\n\n /**\n * @override\n * @export\n */\n getVastMediaHeight() {\n return this.ad_.getVastMediaHeight();\n }\n\n /**\n * @override\n * @export\n */\n getVastMediaWidth() {\n return this.ad_.getVastMediaWidth();\n }\n\n /**\n * @override\n * @export\n */\n getAdId() {\n return this.ad_.getAdId();\n }\n\n /**\n * @override\n * @export\n */\n getCreativeAdId() {\n return this.ad_.getCreativeAdId();\n }\n\n /**\n * @override\n * @export\n */\n getAdvertiserName() {\n return this.ad_.getAdvertiserName();\n }\n\n /**\n * @override\n * @export\n */\n getMediaUrl() {\n return null;\n }\n\n /**\n * @override\n * @export\n */\n getTimeOffset() {\n const podInfo = this.ad_.getAdPodInfo();\n if (podInfo == null) {\n // Defaults to 0 if this ad is not part of a pod, or the pod is not part\n // of an ad playlist.\n return 0;\n }\n\n return podInfo.getTimeOffset();\n }\n\n /**\n * @override\n * @export\n */\n getPodIndex() {\n const podInfo = this.ad_.getAdPodInfo();\n if (podInfo == null) {\n // Defaults to 0 if this ad is not part of a pod, or the pod is not part\n // of an ad playlist.\n return 0;\n }\n\n return podInfo.getPodIndex();\n }\n\n /**\n * @override\n * @export\n */\n release() {\n this.ad_ = null;\n this.adProgressData_ = null;\n this.video_ = null;\n }\n};\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\n\ngoog.provide('shaka.ads.ServerSideAdManager');\n\ngoog.require('goog.asserts');\ngoog.require('shaka.ads.Utils');\ngoog.require('shaka.ads.ServerSideAd');\ngoog.require('shaka.log');\ngoog.require('shaka.util.EventManager');\ngoog.require('shaka.util.Error');\ngoog.require('shaka.util.FakeEvent');\ngoog.require('shaka.util.IReleasable');\ngoog.require('shaka.util.PublicPromise');\n\n\n/**\n * A class responsible for server-side ad interactions.\n * @implements {shaka.util.IReleasable}\n */\nshaka.ads.ServerSideAdManager = class {\n /**\n * @param {HTMLElement} adContainer\n * @param {HTMLMediaElement} video\n * @param {string} locale\n * @param {function(!shaka.util.FakeEvent)} onEvent\n */\n constructor(adContainer, video, locale, onEvent) {\n /** @private {HTMLElement} */\n this.adContainer_ = adContainer;\n\n /** @private {HTMLMediaElement} */\n this.video_ = video;\n\n /** @private {?shaka.extern.AdsConfiguration} */\n this.config_ = null;\n\n /** @private\n {?shaka.util.PublicPromise.} */\n this.streamPromise_ = null;\n\n /** @private {number} */\n this.streamRequestStartTime_ = NaN;\n\n /** @private {function(!shaka.util.FakeEvent)} */\n this.onEvent_ = onEvent;\n\n /** @private {boolean} */\n this.isLiveContent_ = false;\n\n /**\n * Time to seek to after an ad if that ad was played as the result of\n * snapback.\n * @private {?number}\n */\n this.snapForwardTime_ = null;\n\n /** @private {shaka.ads.ServerSideAd} */\n this.ad_ = null;\n\n /** @private {?google.ima.dai.api.AdProgressData} */\n this.adProgressData_ = null;\n\n /** @private {string} */\n this.backupUrl_ = '';\n\n /** @private {!Array.} */\n this.currentCuePoints_ = [];\n\n /** @private {shaka.util.EventManager} */\n this.eventManager_ = new shaka.util.EventManager();\n\n /** @private {google.ima.dai.api.UiSettings} */\n const uiSettings = new google.ima.dai.api.UiSettings();\n uiSettings.setLocale(locale);\n\n /** @private {google.ima.dai.api.StreamManager} */\n this.streamManager_ = new google.ima.dai.api.StreamManager(\n this.video_, this.adContainer_, uiSettings);\n\n this.onEvent_(new shaka.util.FakeEvent(\n shaka.ads.Utils.IMA_STREAM_MANAGER_LOADED,\n (new Map()).set('imaStreamManager', this.streamManager_)));\n\n // Events\n this.eventManager_.listen(this.streamManager_,\n google.ima.dai.api.StreamEvent.Type.LOADED, (e) => {\n shaka.log.info('Ad SS Loaded');\n this.onLoaded_(\n /** @type {!google.ima.dai.api.StreamEvent} */ (e));\n });\n\n this.eventManager_.listen(this.streamManager_,\n google.ima.dai.api.StreamEvent.Type.ERROR, () => {\n shaka.log.info('Ad SS Error');\n this.onError_();\n });\n\n this.eventManager_.listen(this.streamManager_,\n google.ima.dai.api.StreamEvent.Type.AD_BREAK_STARTED, () => {\n shaka.log.info('Ad Break Started');\n });\n\n this.eventManager_.listen(this.streamManager_,\n google.ima.dai.api.StreamEvent.Type.STARTED, (e) => {\n shaka.log.info('Ad Started');\n this.onAdStart_(/** @type {!google.ima.dai.api.StreamEvent} */ (e));\n });\n\n this.eventManager_.listen(this.streamManager_,\n google.ima.dai.api.StreamEvent.Type.AD_BREAK_ENDED, () => {\n shaka.log.info('Ad Break Ended');\n this.onAdBreakEnded_();\n });\n\n this.eventManager_.listen(this.streamManager_,\n google.ima.dai.api.StreamEvent.Type.AD_PROGRESS, (e) => {\n this.onAdProgress_(\n /** @type {!google.ima.dai.api.StreamEvent} */ (e));\n });\n\n this.eventManager_.listen(this.streamManager_,\n google.ima.dai.api.StreamEvent.Type.FIRST_QUARTILE, () => {\n shaka.log.info('Ad event: First Quartile');\n this.onEvent_(\n new shaka.util.FakeEvent(shaka.ads.Utils.AD_FIRST_QUARTILE));\n });\n\n this.eventManager_.listen(this.streamManager_,\n google.ima.dai.api.StreamEvent.Type.MIDPOINT, () => {\n shaka.log.info('Ad event: Midpoint');\n this.onEvent_(\n new shaka.util.FakeEvent(shaka.ads.Utils.AD_MIDPOINT));\n });\n\n this.eventManager_.listen(this.streamManager_,\n google.ima.dai.api.StreamEvent.Type.THIRD_QUARTILE, () => {\n shaka.log.info('Ad event: Third Quartile');\n this.onEvent_(\n new shaka.util.FakeEvent(shaka.ads.Utils.AD_THIRD_QUARTILE));\n });\n\n this.eventManager_.listen(this.streamManager_,\n google.ima.dai.api.StreamEvent.Type.COMPLETE, () => {\n shaka.log.info('Ad event: Complete');\n this.onEvent_(\n new shaka.util.FakeEvent(shaka.ads.Utils.AD_COMPLETE));\n this.onEvent_(\n new shaka.util.FakeEvent(shaka.ads.Utils.AD_STOPPED));\n this.adContainer_.removeAttribute('ad-active');\n this.ad_ = null;\n });\n\n this.eventManager_.listen(this.streamManager_,\n google.ima.dai.api.StreamEvent.Type.SKIPPED, () => {\n shaka.log.info('Ad event: Skipped');\n this.onEvent_(\n new shaka.util.FakeEvent(shaka.ads.Utils.AD_SKIPPED));\n this.onEvent_(\n new shaka.util.FakeEvent(shaka.ads.Utils.AD_STOPPED));\n });\n\n this.eventManager_.listen(this.streamManager_,\n google.ima.dai.api.StreamEvent.Type.CUEPOINTS_CHANGED, (e) => {\n shaka.log.info('Ad event: Cue points changed');\n this.onCuePointsChanged_(\n /** @type {!google.ima.dai.api.StreamEvent} */ (e));\n });\n }\n\n /**\n * Called by the AdManager to provide an updated configuration any time it\n * changes.\n *\n * @param {shaka.extern.AdsConfiguration} config\n */\n configure(config) {\n this.config_ = config;\n }\n\n /**\n * @param {!google.ima.dai.api.StreamRequest} streamRequest\n * @param {string=} backupUrl\n * @return {!Promise.}\n */\n streamRequest(streamRequest, backupUrl) {\n if (this.streamPromise_) {\n return Promise.reject(new shaka.util.Error(\n shaka.util.Error.Severity.RECOVERABLE,\n shaka.util.Error.Category.ADS,\n shaka.util.Error.Code.CURRENT_DAI_REQUEST_NOT_FINISHED));\n }\n if (streamRequest instanceof google.ima.dai.api.LiveStreamRequest) {\n this.isLiveContent_ = true;\n }\n\n this.streamPromise_ = new shaka.util.PublicPromise();\n this.streamManager_.requestStream(streamRequest);\n this.backupUrl_ = backupUrl || '';\n\n this.streamRequestStartTime_ = Date.now() / 1000;\n\n return this.streamPromise_;\n }\n\n /**\n * @param {Object} adTagParameters\n */\n replaceAdTagParameters(adTagParameters) {\n this.streamManager_.replaceAdTagParameters(adTagParameters);\n }\n\n /**\n * Resets the stream manager and removes any continuous polling.\n */\n stop() {\n // TODO:\n // For SS DAI streams, if a different asset gets unloaded as\n // part of the process\n // of loading a DAI asset, stream manager state gets reset and we\n // don't get any ad events.\n // We need to figure out if it makes sense to stop the SS\n // manager on unload, and, if it does, find\n // a way to do it safely.\n // this.streamManager_.reset();\n this.backupUrl_ = '';\n this.snapForwardTime_ = null;\n this.currentCuePoints_ = [];\n }\n\n /** @override */\n release() {\n this.stop();\n if (this.eventManager_) {\n this.eventManager_.release();\n }\n }\n\n /**\n * @param {string} type\n * @param {Uint8Array|string} data\n * Comes as string in DASH and as Uint8Array in HLS.\n * @param {number} timestamp (in seconds)\n */\n onTimedMetadata(type, data, timestamp) {\n this.streamManager_.processMetadata(type, data, timestamp);\n }\n\n /**\n * @param {shaka.extern.MetadataFrame} value\n */\n onCueMetadataChange(value) {\n // Native HLS over Safari/iOS/iPadOS\n // For live event streams, the stream needs some way of informing the SDK\n // that an ad break is coming up or ending. In the IMA DAI SDK, this is\n // done through timed metadata. Timed metadata is carried as part of the\n // DAI stream content and carries ad break timing information used by the\n // SDK to track ad breaks.\n if (value.key && value.data) {\n const metadata = {};\n metadata[value.key] = value.data;\n this.streamManager_.onTimedMetadata(metadata);\n }\n }\n\n /**\n * @return {!Array.}\n */\n getCuePoints() {\n return this.currentCuePoints_;\n }\n\n /**\n * If a seek jumped over the ad break, return to the start of the\n * ad break, then complete the seek after the ad played through.\n * @private\n */\n checkForSnapback_() {\n const currentTime = this.video_.currentTime;\n if (currentTime == 0) {\n return;\n }\n\n this.streamManager_.streamTimeForContentTime(currentTime);\n const previousCuePoint =\n this.streamManager_.previousCuePointForStreamTime(currentTime);\n // The cue point gets marked as 'played' as soon as the playhead hits it\n // (at the start of an ad), so when we come back to this method as a result\n // of seeking back to the user-selected time, the 'played' flag will be set.\n if (previousCuePoint && !previousCuePoint.played) {\n shaka.log.info('Seeking back to the start of the ad break at ' +\n previousCuePoint.start + ' and will return to ' + currentTime);\n this.snapForwardTime_ = currentTime;\n this.video_.currentTime = previousCuePoint.start;\n }\n }\n\n /**\n * @param {!google.ima.dai.api.StreamEvent} e\n * @private\n */\n onAdStart_(e) {\n goog.asserts.assert(this.streamManager_,\n 'Should have a stream manager at this point!');\n\n const imaAd = e.getAd();\n this.ad_ = new shaka.ads.ServerSideAd(imaAd, this.video_);\n\n // Ad object and ad progress data come from two different IMA events.\n // It's a race, and we don't know, which one will fire first - the\n // event that contains an ad object (AD_STARTED) or the one that\n // contains ad progress info (AD_PROGRESS).\n // If the progress event fired first, we must've saved the progress\n // info and can now add it to the ad object.\n if (this.adProgressData_) {\n this.ad_.setProgressData(this.adProgressData_);\n }\n\n this.onEvent_(new shaka.util.FakeEvent(shaka.ads.Utils.AD_STARTED,\n (new Map()).set('ad', this.ad_)));\n this.adContainer_.setAttribute('ad-active', 'true');\n }\n\n /**\n * @private\n */\n onAdBreakEnded_() {\n this.adContainer_.removeAttribute('ad-active');\n const currentTime = this.video_.currentTime;\n // If the ad break was a result of snapping back (a user seeked over\n // an ad break and was returned to it), seek forward to the point,\n // originally chosen by the user.\n if (this.snapForwardTime_ && this.snapForwardTime_ > currentTime) {\n this.video_.currentTime = this.snapForwardTime_;\n this.snapForwardTime_ = null;\n }\n }\n\n /**\n * @param {!google.ima.dai.api.StreamEvent} e\n * @private\n */\n onLoaded_(e) {\n const now = Date.now() / 1000;\n const loadTime = now - this.streamRequestStartTime_;\n this.onEvent_(new shaka.util.FakeEvent(shaka.ads.Utils.ADS_LOADED,\n (new Map()).set('loadTime', loadTime)));\n\n const streamData = e.getStreamData();\n const url = streamData.url;\n this.streamPromise_.resolve(url);\n this.streamPromise_ = null;\n\n if (!this.isLiveContent_) {\n this.eventManager_.listen(this.video_, 'seeked', () => {\n this.checkForSnapback_();\n });\n }\n }\n\n /**\n * @private\n */\n onError_() {\n if (!this.backupUrl_.length) {\n this.streamPromise_.reject('IMA Stream request returned an error ' +\n 'and there was no backup asset uri provided.');\n this.streamPromise_ = null;\n return;\n }\n\n shaka.log.warning('IMA stream request returned an error. ' +\n 'Falling back to the backup asset uri.');\n this.streamPromise_.resolve(this.backupUrl_);\n this.streamPromise_ = null;\n }\n\n\n /**\n * @param {!google.ima.dai.api.StreamEvent} e\n * @private\n */\n onAdProgress_(e) {\n const streamData = e.getStreamData();\n const adProgressData = streamData.adProgressData;\n this.adProgressData_ = adProgressData;\n if (this.ad_) {\n this.ad_.setProgressData(this.adProgressData_);\n }\n }\n\n\n /**\n * @param {!google.ima.dai.api.StreamEvent} e\n * @private\n */\n onCuePointsChanged_(e) {\n const streamData = e.getStreamData();\n\n /** @type {!Array.} */\n const cuePoints = [];\n for (const point of streamData.cuepoints) {\n /** @type {shaka.extern.AdCuePoint} */\n const shakaCuePoint = {\n start: point.start,\n end: point.end,\n };\n cuePoints.push(shakaCuePoint);\n }\n\n this.currentCuePoints_ = cuePoints;\n\n this.onEvent_(new shaka.util.FakeEvent(\n shaka.ads.Utils.CUEPOINTS_CHANGED,\n (new Map()).set('cuepoints', cuePoints)));\n }\n};\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\n\ngoog.provide('shaka.ads.AdManager');\n\ngoog.require('goog.asserts');\ngoog.require('shaka.Deprecate');\ngoog.require('shaka.Player');\ngoog.require('shaka.ads.AdsStats');\ngoog.require('shaka.ads.ClientSideAdManager');\ngoog.require('shaka.ads.InterstitialAdManager');\ngoog.require('shaka.ads.MediaTailorAdManager');\ngoog.require('shaka.ads.Utils');\ngoog.require('shaka.ads.ServerSideAdManager');\ngoog.require('shaka.log');\ngoog.require('shaka.util.Error');\ngoog.require('shaka.util.FakeEvent');\ngoog.require('shaka.util.FakeEventTarget');\ngoog.require('shaka.util.IReleasable');\n\n\n/**\n * @event shaka.ads.AdManager.AdsLoadedEvent\n * @description Fired when a sequence of ads has been loaded.\n * @property {string} type\n * 'ads-loaded'\n * @property {number} loadTime\n * The time it takes to load ads.\n * @exportDoc\n */\n\n/**\n * @event shaka.ads.AdManager.AdStartedEvent\n * @description Fired when an ad has started playing.\n * @property {string} type\n * 'ad-started'\n * @property {!shaka.extern.IAd} ad\n * The ad that has started playing.\n * @property {Object} sdkAdObject\n * The ad object in the SDK format, if there is one.\n * @property {Object} originalEvent\n * The native SDK event, if available.\n * @exportDoc\n */\n\n\n/**\n * @event shaka.ads.AdManager.AdCompleteEvent\n * @description Fired when an ad has played through.\n * @property {string} type\n * 'ad-complete'\n * @property {Object} originalEvent\n * The native SDK event, if available.\n * @exportDoc\n */\n\n\n/**\n * @event shaka.ads.AdManager.AdSkippedEvent\n * @description Fired when an ad has been skipped.\n * @property {string} type\n * 'ad-skipped'\n * @property {Object} originalEvent\n * The native SDK event, if available.\n * @exportDoc\n */\n\n\n/**\n * @event shaka.ads.AdManager.AdFirstQuartileEvent\n * @description Fired when an ad has played through the first 1/4.\n * @property {string} type\n * 'ad-first-quartile'\n * @property {Object} originalEvent\n * The native SDK event, if available.\n * @exportDoc\n */\n\n\n/**\n * @event shaka.ads.AdManager.AdMidpointEvent\n * @description Fired when an ad has played through its midpoint.\n * @property {string} type\n * 'ad-midpoint'\n * @property {Object} originalEvent\n * The native SDK event, if available.\n * @exportDoc\n */\n\n\n/**\n * @event shaka.ads.AdManager.AdThirdQuartileEvent\n * @description Fired when an ad has played through the third quartile.\n * @property {string} type\n * 'ad-third-quartile'\n * @property {Object} originalEvent\n * The native SDK event, if available.\n * @exportDoc\n */\n\n\n/**\n * @event shaka.ads.AdManager.AdStoppedEvent\n * @description Fired when an ad has stopped playing, was skipped,\n * or was unable to proceed due to an error.\n * @property {string} type\n * 'ad-stopped'\n * @property {Object} originalEvent\n * The native SDK event, if available.\n * @exportDoc\n */\n\n\n/**\n * @event shaka.ads.AdManager.AdVolumeChangedEvent\n * @description Fired when an ad's volume changed.\n * @property {string} type\n * 'ad-volume-changed'\n * @property {Object} originalEvent\n * The native SDK event, if available.\n * @exportDoc\n */\n\n\n/**\n * @event shaka.ads.AdManager.AdMutedEvent\n * @description Fired when an ad was muted.\n * @property {string} type\n * 'ad-muted'\n * @property {Object} originalEvent\n * The native SDK event, if available.\n * @exportDoc\n */\n\n\n/**\n * @event shaka.ads.AdManager.AdPausedEvent\n * @description Fired when an ad was paused.\n * @property {string} type\n * 'ad-paused'\n * @property {Object} originalEvent\n * The native SDK event, if available.\n * @exportDoc\n */\n\n\n/**\n * @event shaka.ads.AdManager.AdResumedEvent\n * @description Fired when an ad was resumed after a pause.\n * @property {string} type\n * 'ad-resumed'\n * @property {Object} originalEvent\n * The native SDK event, if available.\n * @exportDoc\n */\n\n\n/**\n * @event shaka.ads.AdManager.AdSkipStateChangedEvent\n * @description Fired when an ad's skip state changes (for example, when\n * it becomes possible to skip the ad).\n * @property {string} type\n * 'ad-skip-state-changed'\n * @property {Object} originalEvent\n * The native SDK event, if available.\n * @exportDoc\n */\n\n\n/**\n * @event shaka.ads.AdManager.AdCuePointsChangedEvent\n * @description Fired when the ad cue points change, signalling ad breaks\n * change.\n * @property {string} type\n * 'ad-cue-points-changed'\n * @property {!Array.} cuepoints\n * The ad cue points, if available.\n * @exportDoc\n */\n\n\n/**\n * @event shaka.ads.AdManager.AdProgressEvent\n * @description Fired when there is an update to the current ad's progress.\n * @property {string} type\n * 'ad-progress'\n * @property {Object} originalEvent\n * The native SDK event, if available.\n * @exportDoc\n */\n\n\n/**\n * @event shaka.ads.AdManager.AdBufferingEvent\n * @description Fired when the ad has stalled playback to buffer.\n * @property {string} type\n * 'ad-buffering'\n * @property {Object} originalEvent\n * The native SDK event, if available.\n * @exportDoc\n */\n\n\n/**\n * @event shaka.ads.AdManager.AdImpressionEvent\n * @description Fired when the impression URL has been pinged.\n * @property {string} type\n * 'ad-impression'\n * @property {Object} originalEvent\n * The native SDK event, if available.\n * @exportDoc\n */\n\n\n/**\n * @event shaka.ads.AdManager.AdClickEvent\n * @description Fired when the ad was clicked.\n * @property {string} type\n * 'ad-clicked'\n * @property {Object} originalEvent\n * The native SDK event, if available.\n * @exportDoc\n */\n\n\n/**\n * @event shaka.ads.AdManager.AdDurationChangedEvent\n * @description Fired when the ad's duration changes.\n * @property {string} type\n * 'ad-duration-changed'\n * @property {Object} originalEvent\n * The native SDK event, if available.\n * @exportDoc\n */\n\n\n/**\n * @event shaka.ads.AdManager.AdClosedEvent\n * @description Fired when the ad was closed by the user.\n * @property {string} type\n * 'ad-closed'\n * @property {Object} originalEvent\n * The native SDK event, if available.\n * @exportDoc\n */\n\n\n/**\n * @event shaka.ads.AdManager.AdLoadedEvent\n * @description Fired when the ad data becomes available.\n * @property {string} type\n * 'ad-loaded'\n * @property {Object} originalEvent\n * The native SDK event, if available.\n * @exportDoc\n */\n\n\n/**\n * @event shaka.ads.AdManager.AllAdsCompletedEvent\n * @description Fired when the ads manager is done playing all the ads.\n * @property {string} type\n * 'all-ads-completed'\n * @property {Object} originalEvent\n * The native SDK event, if available.\n * @exportDoc\n */\n\n\n/**\n * @event shaka.ads.AdManager.AdLinearChangedEvent\n * @description Fired when the displayed ad changes from\n * linear to nonlinear, or vice versa.\n * @property {string} type\n * 'ad-linear-changed'\n * @property {Object} originalEvent\n * The native SDK event, if available.\n * @exportDoc\n */\n\n\n/**\n * @event shaka.ads.AdManager.AdMetadataEvent\n * @description Fired when the ad's metadata becomes available.\n * @property {string} type\n * 'ad-metadata'\n * @property {Object} originalEvent\n * The native SDK event, if available.\n * @exportDoc\n */\n\n\n/**\n * @event shaka.ads.AdManager#AdBreakReadyEvent\n * @description Fired when the client-side SDK is ready to play a\n * VPAID ad or an ad rule.\n * @property {string} type\n * 'ad-break-ready'\n * @property {Object} originalEvent\n * The native SDK event, if available.\n * @exportDoc\n */\n\n\n/**\n * @event shaka.ads.AdManager.AdRecoverableErrorEvent\n * @description Fired when the a non-fatal error was encountered.\n * The presentation will continue with the same or next ad playback\n * depending on the error situation.\n * @property {string} type\n * 'ad-recoverable-error'\n * @property {Object} originalEvent\n * The native SDK event, if available.\n * @exportDoc\n */\n\n\n/**\n * @event shaka.ads.Utils.AD_ERROR\n * @description Fired when a fatal error is encountered.\n * @property {string} type\n * 'ad-error'\n * @property {Object} originalEvent\n * The native SDK event, if available.\n * @exportDoc\n */\n\n\n/**\n * @event shaka.ads.AdManager.AdInteractionEvent\n * @description Fired when an ad triggers the interaction callback.\n * @property {string} type\n * 'ad-interaction'\n * @property {Object} originalEvent\n * The native SDK event, if available.\n * @exportDoc\n */\n\n\n/**\n * @event shaka.ads.AdManager#ImaAdManagerLoadedEvent\n * @description Fired when the native IMA ad manager becomes available.\n * @property {string} type\n * 'ima-ad-manager-loaded'\n * @property {!Object} imaAdManager\n * The native IMA ad manager.\n * @exportDoc\n */\n\n\n/**\n * @event shaka.ads.AdManager#ImaStreamManagerLoadedEvent\n * @description Fired when the native IMA stream manager becomes available.\n * @property {string} type\n * 'ima-stream-manager-loaded'\n * @property {!Object} imaStreamManager\n * The native IMA stream manager.\n * @exportDoc\n */\n\n\n/**\n * @event shaka.ads.AdManager.AdClickedEvent\n * @description Fired when the ad was clicked.\n * @property {string} type\n * 'ad-clicked'\n * @exportDoc\n */\n\n\n/**\n * @event shaka.ads.AdManager.AdContentPauseRequestedEvent\n * @description Fired when the ad requires the main content to be paused.\n * Fired when the platform does not support multiple media elements.\n * @property {string} type\n * 'ad-content-pause-requested'\n * @property {?boolean} saveLivePosition\n * Indicates whether the live position has to be saved or not.\n * @exportDoc\n */\n\n\n/**\n * @event shaka.ads.AdManager.AdContentResumeRequestedEvent\n * @description Fired when the ad requires the main content to be resumed.\n * Fired when the platform does not support multiple media elements.\n * @property {string} type\n * 'ad-content-resume-requested'\n * @property {?number} offset\n * Indicates the offset that should be applied to the previously saved time.\n * @exportDoc\n */\n\n\n/**\n * @event shaka.ads.AdManager.AdContentResumeRequestedEvent\n * @description Fired when the ad requires the video of the main content to be\n * attached.\n * @property {string} type\n * 'ad-content-attach-requested'\n * @exportDoc\n */\n\n\n/**\n * A class responsible for ad-related interactions.\n * @implements {shaka.extern.IAdManager}\n * @implements {shaka.util.IReleasable}\n * @export\n */\nshaka.ads.AdManager = class extends shaka.util.FakeEventTarget {\n /** */\n constructor() {\n super();\n /** @private {shaka.ads.InterstitialAdManager} */\n this.interstitialAdManager_ = null;\n /** @private {shaka.ads.ClientSideAdManager} */\n this.csAdManager_ = null;\n /** @private {shaka.ads.MediaTailorAdManager} */\n this.mtAdManager_ = null;\n /** @private {shaka.ads.ServerSideAdManager} */\n this.ssAdManager_ = null;\n /** @private {shaka.ads.AdsStats} */\n this.stats_ = new shaka.ads.AdsStats();\n /** @private {string} locale */\n this.locale_ = navigator.language;\n /** @private {?shaka.extern.AdsConfiguration} */\n this.config_ = null;\n }\n\n\n /**\n * @override\n * @export\n */\n setLocale(locale) {\n this.locale_ = locale;\n }\n\n\n /**\n * @override\n * @export\n */\n configure(config) {\n this.config_ = config;\n if (this.interstitialAdManager_) {\n this.interstitialAdManager_.configure(this.config_);\n }\n if (this.csAdManager_) {\n this.csAdManager_.configure(this.config_);\n }\n if (this.ssAdManager_) {\n this.ssAdManager_.configure(this.config_);\n }\n }\n\n\n /**\n * @override\n * @export\n */\n initInterstitial(adContainer, basePlayer, baseVideo) {\n if (!adContainer) {\n shaka.log.info('Initializing interstitials without ad container');\n }\n if (this.interstitialAdManager_) {\n this.interstitialAdManager_.release();\n }\n this.interstitialAdManager_ = new shaka.ads.InterstitialAdManager(\n adContainer, basePlayer, baseVideo,\n (e) => this.processAndDispatchEvent_(e));\n\n goog.asserts.assert(this.config_, 'Config must not be null!');\n this.interstitialAdManager_.configure(this.config_);\n }\n\n\n /**\n * @override\n * @export\n */\n initClientSide(adContainer, video, adsRenderingSettings) {\n // Check that Client Side IMA SDK has been included\n // NOTE: (window['google'] && google.ima) check for any\n // IMA SDK, including SDK for Server Side ads.\n // The 3rd check insures we have the right SDK:\n // {google.ima.AdsLoader} is an object that's part of CS IMA SDK\n // but not SS SDK.\n if (!window['google'] || !google.ima || !google.ima.AdsLoader) {\n throw new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.ADS,\n shaka.util.Error.Code.CS_IMA_SDK_MISSING);\n }\n\n if (this.csAdManager_) {\n this.csAdManager_.release();\n }\n\n this.csAdManager_ = new shaka.ads.ClientSideAdManager(\n adContainer, video, this.locale_, adsRenderingSettings,\n (e) => this.processAndDispatchEvent_(e));\n\n goog.asserts.assert(this.config_, 'Config must not be null!');\n this.csAdManager_.configure(this.config_);\n }\n\n\n /**\n * @override\n * @export\n */\n release() {\n if (this.interstitialAdManager_) {\n this.interstitialAdManager_.release();\n this.interstitialAdManager_ = null;\n }\n if (this.csAdManager_) {\n this.csAdManager_.release();\n this.csAdManager_ = null;\n }\n if (this.mtAdManager_) {\n this.mtAdManager_.release();\n this.mtAdManager_ = null;\n }\n if (this.ssAdManager_) {\n this.ssAdManager_.release();\n this.ssAdManager_ = null;\n }\n super.release();\n }\n\n\n /**\n * @override\n * @export\n */\n onAssetUnload() {\n if (this.interstitialAdManager_) {\n this.interstitialAdManager_.stop();\n }\n if (this.csAdManager_) {\n this.csAdManager_.stop();\n }\n if (this.mtAdManager_) {\n this.mtAdManager_.stop();\n }\n if (this.ssAdManager_) {\n this.ssAdManager_.stop();\n }\n\n this.dispatchEvent(\n new shaka.util.FakeEvent(shaka.ads.Utils.AD_STOPPED));\n this.dispatchEvent(new shaka.util.FakeEvent(\n shaka.ads.Utils.AD_CONTENT_ATTACH_REQUESTED));\n\n this.stats_ = new shaka.ads.AdsStats();\n }\n\n\n /**\n * @override\n * @export\n */\n requestClientSideAds(imaRequest) {\n if (!this.csAdManager_) {\n throw new shaka.util.Error(\n shaka.util.Error.Severity.RECOVERABLE,\n shaka.util.Error.Category.ADS,\n shaka.util.Error.Code.CS_AD_MANAGER_NOT_INITIALIZED);\n }\n\n this.csAdManager_.requestAds(imaRequest);\n }\n\n\n /**\n * @override\n * @export\n */\n updateClientSideAdsRenderingSettings(adsRenderingSettings) {\n if (!this.csAdManager_) {\n throw new shaka.util.Error(\n shaka.util.Error.Severity.RECOVERABLE,\n shaka.util.Error.Category.ADS,\n shaka.util.Error.Code.CS_AD_MANAGER_NOT_INITIALIZED);\n }\n\n this.csAdManager_.updateAdsRenderingSettings(adsRenderingSettings);\n }\n\n\n /**\n * @override\n * @export\n */\n initMediaTailor(adContainer, networkingEngine, video) {\n if (this.mtAdManager_) {\n this.mtAdManager_.release();\n }\n\n this.mtAdManager_ = new shaka.ads.MediaTailorAdManager(\n adContainer, networkingEngine, video,\n (e) => this.processAndDispatchEvent_(e));\n }\n\n\n /**\n * @param {string} url\n * @param {Object} adsParams\n * @param {string=} backupUrl\n * @return {!Promise.}\n * @override\n * @export\n */\n requestMediaTailorStream(url, adsParams, backupUrl = '') {\n if (!this.mtAdManager_) {\n throw new shaka.util.Error(\n shaka.util.Error.Severity.RECOVERABLE,\n shaka.util.Error.Category.ADS,\n shaka.util.Error.Code.MT_AD_MANAGER_NOT_INITIALIZED);\n }\n\n return this.mtAdManager_.streamRequest(url, adsParams, backupUrl);\n }\n\n\n /**\n * @param {string} url\n * @override\n * @export\n */\n addMediaTailorTrackingUrl(url) {\n if (!this.mtAdManager_) {\n throw new shaka.util.Error(\n shaka.util.Error.Severity.RECOVERABLE,\n shaka.util.Error.Category.ADS,\n shaka.util.Error.Code.MT_AD_MANAGER_NOT_INITIALIZED);\n }\n\n this.mtAdManager_.addTrackingUrl(url);\n }\n\n\n /**\n * @override\n * @export\n */\n initServerSide(adContainer, video) {\n // Check that Client Side IMA SDK has been included\n // NOTE: (window['google'] && google.ima) check for any\n // IMA SDK, including SDK for Server Side ads.\n // The 3rd check insures we have the right SDK:\n // {google.ima.dai} is an object that's part of DAI IMA SDK\n // but not SS SDK.\n if (!window['google'] || !google.ima || !google.ima.dai) {\n throw new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.ADS,\n shaka.util.Error.Code.SS_IMA_SDK_MISSING);\n }\n\n if (this.ssAdManager_) {\n this.ssAdManager_.release();\n }\n\n this.ssAdManager_ = new shaka.ads.ServerSideAdManager(\n adContainer, video, this.locale_,\n (e) => this.processAndDispatchEvent_(e));\n\n goog.asserts.assert(this.config_, 'Config must not be null!');\n this.ssAdManager_.configure(this.config_);\n }\n\n\n /**\n * @param {!google.ima.dai.api.StreamRequest} imaRequest\n * @param {string=} backupUrl\n * @return {!Promise.}\n * @override\n * @export\n */\n requestServerSideStream(imaRequest, backupUrl = '') {\n if (!this.ssAdManager_) {\n throw new shaka.util.Error(\n shaka.util.Error.Severity.RECOVERABLE,\n shaka.util.Error.Category.ADS,\n shaka.util.Error.Code.SS_AD_MANAGER_NOT_INITIALIZED);\n }\n\n if (!imaRequest.adTagParameters) {\n imaRequest.adTagParameters = {};\n }\n const adTagParams = imaRequest.adTagParameters;\n\n if (adTagParams['mpt'] || adTagParams['mpv']) {\n shaka.log.alwaysWarn('You have attempted to set \"mpt\" and/or \"mpv\" ' +\n 'parameters of the ad tag. Please note that those parameters are ' +\n 'used for Shaka adoption tracking and will be overriden.');\n }\n\n // Set player and version parameters for tracking\n imaRequest.adTagParameters['mpt'] = 'shaka-player';\n imaRequest.adTagParameters['mpv'] = shaka.Player.version;\n return this.ssAdManager_.streamRequest(imaRequest, backupUrl);\n }\n\n\n /**\n * @override\n * @export\n */\n replaceServerSideAdTagParameters(adTagParameters) {\n if (!this.ssAdManager_) {\n throw new shaka.util.Error(\n shaka.util.Error.Severity.RECOVERABLE,\n shaka.util.Error.Category.ADS,\n shaka.util.Error.Code.SS_AD_MANAGER_NOT_INITIALIZED);\n }\n\n if (adTagParameters['mpt'] || adTagParameters['mpv']) {\n shaka.log.alwaysWarn('You have attempted to set \"mpt\" and/or \"mpv\" ' +\n 'parameters of the ad tag. Please note that those parameters are ' +\n 'used for Shaka adoption tracking and will be overriden.');\n }\n\n adTagParameters['mpt'] = 'Shaka Player';\n adTagParameters['mpv'] = shaka.Player.version;\n\n this.ssAdManager_.replaceAdTagParameters(adTagParameters);\n }\n\n\n /**\n * @return {!Array.}\n * @override\n * @export\n */\n getServerSideCuePoints() {\n shaka.Deprecate.deprecateFeature(5,\n 'AdManager.getServerSideCuePoints',\n 'Please use getCuePoints function.');\n return this.getCuePoints();\n }\n\n\n /**\n * @return {!Array.}\n * @override\n * @export\n */\n getCuePoints() {\n let cuepoints = [];\n if (this.ssAdManager_) {\n cuepoints = cuepoints.concat(this.ssAdManager_.getCuePoints());\n }\n if (this.mtAdManager_) {\n cuepoints = cuepoints.concat(this.mtAdManager_.getCuePoints());\n }\n return cuepoints;\n }\n\n\n /**\n * @return {shaka.extern.AdsStats}\n * @override\n * @export\n */\n getStats() {\n return this.stats_.getBlob();\n }\n\n /**\n * @override\n * @export\n */\n onManifestUpdated(isLive) {\n if (this.mtAdManager_) {\n this.mtAdManager_.onManifestUpdated(isLive);\n }\n }\n\n /**\n * @override\n * @export\n */\n onDashTimedMetadata(region) {\n if (this.ssAdManager_ && region.schemeIdUri == 'urn:google:dai:2018') {\n const type = region.schemeIdUri;\n const data = region.eventNode ?\n region.eventNode.attributes['messageData'] : null;\n const timestamp = region.startTime;\n this.ssAdManager_.onTimedMetadata(type, data, timestamp);\n }\n }\n\n /**\n * @override\n * @export\n */\n onHlsTimedMetadata(metadata, timestamp) {\n if (this.ssAdManager_) {\n this.ssAdManager_.onTimedMetadata('ID3', metadata['data'], timestamp);\n }\n }\n\n /**\n * @override\n * @export\n */\n onCueMetadataChange(value) {\n if (this.ssAdManager_) {\n this.ssAdManager_.onCueMetadataChange(value);\n }\n }\n\n /**\n * @override\n * @export\n */\n onHLSInterstitialMetadata(basePlayer, baseVideo, interstitial) {\n if (this.config_ && this.config_.disableHLSInterstitial) {\n return;\n }\n if (!this.interstitialAdManager_) {\n this.initInterstitial(/* adContainer= */ null, basePlayer, baseVideo);\n }\n if (this.interstitialAdManager_) {\n this.interstitialAdManager_.addMetadata(interstitial);\n }\n }\n\n /**\n * @override\n * @export\n */\n onDASHInterstitialMetadata(basePlayer, baseVideo, region) {\n if (this.config_ && this.config_.disableDASHInterstitial) {\n return;\n }\n if (region.schemeIdUri != 'urn:mpeg:dash:event:alternativeMPD:2022') {\n return;\n }\n if (!this.interstitialAdManager_) {\n this.initInterstitial(/* adContainer= */ null, basePlayer, baseVideo);\n }\n if (this.interstitialAdManager_) {\n this.interstitialAdManager_.addRegion(region);\n }\n }\n\n /**\n * @override\n * @export\n */\n addCustomInterstitial(interstitial) {\n if (!this.interstitialAdManager_) {\n throw new shaka.util.Error(\n shaka.util.Error.Severity.RECOVERABLE,\n shaka.util.Error.Category.ADS,\n shaka.util.Error.Code.INTERSTITIAL_AD_MANAGER_NOT_INITIALIZED);\n }\n this.interstitialAdManager_.addInterstitials([interstitial]);\n }\n\n /**\n * @override\n * @export\n */\n addAdUrlInterstitial(url) {\n if (!this.interstitialAdManager_) {\n throw new shaka.util.Error(\n shaka.util.Error.Severity.RECOVERABLE,\n shaka.util.Error.Category.ADS,\n shaka.util.Error.Code.INTERSTITIAL_AD_MANAGER_NOT_INITIALIZED);\n }\n return this.interstitialAdManager_.addAdUrlInterstitial(url);\n }\n\n /**\n * @param {!shaka.util.FakeEvent} event\n * @private\n */\n processAndDispatchEvent_(event) {\n if (event && event.type) {\n switch (event.type) {\n case shaka.ads.Utils.ADS_LOADED: {\n const loadTime = (/** @type {!Object} */ (event))['loadTime'];\n this.stats_.addLoadTime(loadTime);\n break;\n }\n case shaka.ads.Utils.AD_STARTED:\n this.stats_.incrementStarted();\n break;\n case shaka.ads.Utils.AD_COMPLETE:\n this.stats_.incrementPlayedCompletely();\n break;\n case shaka.ads.Utils.AD_SKIPPED:\n this.stats_.incrementSkipped();\n break;\n case shaka.ads.Utils.AD_ERROR:\n this.stats_.incrementErrors();\n break;\n }\n }\n this.dispatchEvent(event);\n }\n};\n\n/**\n * The event name for when a sequence of ads has been loaded.\n *\n * Deprecated, please use {@link shaka.ads.Utils}\n *\n * @const {string}\n * @export\n * @deprecated\n */\nshaka.ads.AdManager.ADS_LOADED = 'ads-loaded';\n\n/**\n * The event name for when an ad has started playing.\n *\n * Deprecated, please use {@link shaka.ads.Utils}\n *\n * @const {string}\n * @export\n * @deprecated\n */\nshaka.ads.AdManager.AD_STARTED = 'ad-started';\n\n\n/**\n * The event name for when an ad playhead crosses first quartile.\n *\n * Deprecated, please use {@link shaka.ads.Utils}\n *\n * @const {string}\n * @export\n * @deprecated\n */\nshaka.ads.AdManager.AD_FIRST_QUARTILE = 'ad-first-quartile';\n\n\n/**\n * The event name for when an ad playhead crosses midpoint.\n *\n * Deprecated, please use {@link shaka.ads.Utils}\n *\n * @const {string}\n * @export\n * @deprecated\n */\nshaka.ads.AdManager.AD_MIDPOINT = 'ad-midpoint';\n\n\n/**\n * The event name for when an ad playhead crosses third quartile.\n *\n * Deprecated, please use {@link shaka.ads.Utils}\n *\n * @const {string}\n * @export\n * @deprecated\n */\nshaka.ads.AdManager.AD_THIRD_QUARTILE = 'ad-third-quartile';\n\n\n/**\n * The event name for when an ad has completed playing.\n *\n * Deprecated, please use {@link shaka.ads.Utils}\n *\n * @const {string}\n * @export\n * @deprecated\n */\nshaka.ads.AdManager.AD_COMPLETE = 'ad-complete';\n\n\n/**\n * The event name for when an ad has finished playing\n * (played all the way through, was skipped, or was unable to proceed\n * due to an error).\n *\n * Deprecated, please use {@link shaka.ads.Utils}\n *\n * @const {string}\n * @export\n * @deprecated\n */\nshaka.ads.AdManager.AD_STOPPED = 'ad-stopped';\n\n\n/**\n * The event name for when an ad is skipped by the user.\n *\n * Deprecated, please use {@link shaka.ads.Utils}\n *\n * @const {string}\n * @export\n * @deprecated\n */\nshaka.ads.AdManager.AD_SKIPPED = 'ad-skipped';\n\n\n/**\n * The event name for when the ad volume has changed.\n *\n * Deprecated, please use {@link shaka.ads.Utils}\n *\n * @const {string}\n * @export\n * @deprecated\n */\nshaka.ads.AdManager.AD_VOLUME_CHANGED = 'ad-volume-changed';\n\n\n/**\n * The event name for when the ad was muted.\n *\n * Deprecated, please use {@link shaka.ads.Utils}\n *\n * @const {string}\n * @export\n * @deprecated\n */\nshaka.ads.AdManager.AD_MUTED = 'ad-muted';\n\n\n/**\n * The event name for when the ad was paused.\n *\n * Deprecated, please use {@link shaka.ads.Utils}\n *\n * @const {string}\n * @export\n * @deprecated\n */\nshaka.ads.AdManager.AD_PAUSED = 'ad-paused';\n\n\n/**\n * The event name for when the ad was resumed after a pause.\n *\n * Deprecated, please use {@link shaka.ads.Utils}\n *\n * @const {string}\n * @export\n * @deprecated\n */\nshaka.ads.AdManager.AD_RESUMED = 'ad-resumed';\n\n\n/**\n * The event name for when the ad's skip status changes\n * (usually it becomes skippable when it wasn't before).\n *\n * Deprecated, please use {@link shaka.ads.Utils}\n *\n * @const {string}\n * @export\n * @deprecated\n */\nshaka.ads.AdManager.AD_SKIP_STATE_CHANGED = 'ad-skip-state-changed';\n\n\n/**\n * The event name for when the ad's cue points (start/end markers)\n * have changed.\n *\n * Deprecated, please use {@link shaka.ads.Utils}\n *\n * @const {string}\n * @export\n * @deprecated\n */\nshaka.ads.AdManager.CUEPOINTS_CHANGED = 'ad-cue-points-changed';\n\n\n/**\n * The event name for when the native IMA ad manager object has\n * loaded and become available.\n *\n * Deprecated, please use {@link shaka.ads.Utils}\n *\n * @const {string}\n * @export\n * @deprecated\n */\nshaka.ads.AdManager.IMA_AD_MANAGER_LOADED = 'ima-ad-manager-loaded';\n\n\n/**\n * The event name for when the native IMA stream manager object has\n * loaded and become available.\n *\n * Deprecated, please use {@link shaka.ads.Utils}\n *\n * @const {string}\n * @export\n * @deprecated\n */\nshaka.ads.AdManager.IMA_STREAM_MANAGER_LOADED = 'ima-stream-manager-loaded';\n\n\n/**\n * The event name for when the ad was clicked.\n *\n * Deprecated, please use {@link shaka.ads.Utils}\n *\n * @const {string}\n * @export\n * @deprecated\n */\nshaka.ads.AdManager.AD_CLICKED = 'ad-clicked';\n\n\n/**\n * The event name for when there is an update to the current ad's progress.\n *\n * Deprecated, please use {@link shaka.ads.Utils}\n *\n * @const {string}\n * @export\n * @deprecated\n */\nshaka.ads.AdManager.AD_PROGRESS = 'ad-progress';\n\n\n/**\n * The event name for when the ad is buffering.\n *\n * Deprecated, please use {@link shaka.ads.Utils}\n *\n * @const {string}\n * @export\n * @deprecated\n */\nshaka.ads.AdManager.AD_BUFFERING = 'ad-buffering';\n\n\n/**\n * The event name for when the ad's URL was hit.\n *\n * Deprecated, please use {@link shaka.ads.Utils}\n *\n * @const {string}\n * @export\n * @deprecated\n */\nshaka.ads.AdManager.AD_IMPRESSION = 'ad-impression';\n\n\n/**\n * The event name for when the ad's duration changed.\n *\n * Deprecated, please use {@link shaka.ads.Utils}\n *\n * @const {string}\n * @export\n * @deprecated\n */\nshaka.ads.AdManager.AD_DURATION_CHANGED = 'ad-duration-changed';\n\n\n/**\n * The event name for when the ad was closed by the user.\n *\n * Deprecated, please use {@link shaka.ads.Utils}\n *\n * @const {string}\n * @export\n * @deprecated\n */\nshaka.ads.AdManager.AD_CLOSED = 'ad-closed';\n\n\n/**\n * The event name for when the ad data becomes available.\n *\n * Deprecated, please use {@link shaka.ads.Utils}\n *\n * @const {string}\n * @export\n * @deprecated\n */\nshaka.ads.AdManager.AD_LOADED = 'ad-loaded';\n\n\n/**\n * The event name for when all the ads were completed.\n *\n * Deprecated, please use {@link shaka.ads.Utils}\n *\n * @const {string}\n * @export\n * @deprecated\n */\nshaka.ads.AdManager.ALL_ADS_COMPLETED = 'all-ads-completed';\n\n\n/**\n * The event name for when the ad changes from or to linear.\n *\n * Deprecated, please use {@link shaka.ads.Utils}\n *\n * @const {string}\n * @export\n * @deprecated\n */\nshaka.ads.AdManager.AD_LINEAR_CHANGED = 'ad-linear-changed';\n\n\n/**\n * The event name for when the ad's metadata becomes available.\n *\n * Deprecated, please use {@link shaka.ads.Utils}\n *\n * @const {string}\n * @export\n * @deprecated\n */\nshaka.ads.AdManager.AD_METADATA = 'ad-metadata';\n\n\n/**\n * The event name for when the ad display encountered a recoverable\n * error.\n *\n * Deprecated, please use {@link shaka.ads.Utils}\n *\n * @const {string}\n * @export\n * @deprecated\n */\nshaka.ads.AdManager.AD_RECOVERABLE_ERROR = 'ad-recoverable-error';\n\n/**\n * The event name for when the ad manager dispatch errors.\n *\n * Deprecated, please use {@link shaka.ads.Utils}\n *\n * @const {string}\n * @export\n * @deprecated\n */\nshaka.ads.AdManager.AD_ERROR = 'ad-error';\n\n/**\n * The event name for when the client side SDK signalled its readiness\n * to play a VPAID ad or an ad rule.\n *\n * Deprecated, please use {@link shaka.ads.Utils}\n *\n * @const {string}\n * @export\n * @deprecated\n */\nshaka.ads.AdManager.AD_BREAK_READY = 'ad-break-ready';\n\n\n/**\n * The event name for when the interaction callback for the ad was\n * triggered.\n *\n * Deprecated, please use {@link shaka.ads.Utils}\n *\n * @const {string}\n * @export\n * @deprecated\n */\nshaka.ads.AdManager.AD_INTERACTION = 'ad-interaction';\n\n\n/**\n * The name of the event for when an ad requires the main content to be paused.\n * Fired when the platform does not support multiple media elements.\n *\n * Deprecated, please use {@link shaka.ads.Utils}\n *\n * @const {string}\n * @export\n * @deprecated\n */\nshaka.ads.AdManager.AD_CONTENT_PAUSE_REQUESTED = 'ad-content-pause-requested';\n\n\n/**\n * The name of the event for when an ad requires the main content to be resumed.\n * Fired when the platform does not support multiple media elements.\n *\n * Deprecated, please use {@link shaka.ads.Utils}\n *\n * @const {string}\n * @export\n * @deprecated\n */\nshaka.ads.AdManager.AD_CONTENT_RESUME_REQUESTED = 'ad-content-resume-requested';\n\n\n/**\n * The name of the event for when an ad requires the video of the main content\n * to be attached.\n *\n * Deprecated, please use {@link shaka.ads.Utils}\n *\n * @const {string}\n * @export\n * @deprecated\n */\nshaka.ads.AdManager.AD_CONTENT_ATTACH_REQUESTED = 'ad-content-attach-requested';\n\n\n/**\n * Set this is a default ad manager for the player.\n * Apps can also set their own ad manager, if they'd like.\n */\nshaka.Player.setAdManagerFactory(() => new shaka.ads.AdManager());\n\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.cast.CastUtils');\n\ngoog.require('shaka.media.TimeRangesUtils');\ngoog.require('shaka.util.FakeEvent');\n\n\n/**\n * @summary A set of cast utility functions and variables shared between sender\n * and receiver.\n */\nshaka.cast.CastUtils = class {\n /**\n * Serialize as JSON, but specially encode things JSON will not otherwise\n * represent.\n * @param {?} thing\n * @return {string}\n */\n static serialize(thing) {\n return JSON.stringify(thing, (key, value) => {\n if (typeof value == 'function') {\n // Functions can't be (safely) serialized.\n return undefined;\n }\n\n if (value instanceof Event || value instanceof shaka.util.FakeEvent) {\n // Events don't serialize to JSON well because of the DOM objects\n // and other complex objects they contain, so we strip these out.\n // Note that using Object.keys or JSON.stringify directly on the event\n // will not capture its properties. We must use a for loop.\n const simpleEvent = {};\n for (const eventKey in value) {\n const eventValue = value[eventKey];\n if (eventValue && typeof eventValue == 'object') {\n if (eventKey == 'detail') {\n // Keep the detail value, because it contains important\n // information for diagnosing errors.\n simpleEvent[eventKey] = eventValue;\n }\n // Strip out non-null object types because they are complex and we\n // don't need them.\n } else if (eventKey in Event) {\n // Strip out keys that are found on Event itself because they are\n // class-level constants we don't need, like Event.MOUSEMOVE == 16.\n } else {\n simpleEvent[eventKey] = eventValue;\n }\n }\n return simpleEvent;\n }\n\n if (value instanceof Error) {\n // Errors don't serialize to JSON well, either. TypeError, for example,\n // turns in \"{}\", leading to messages like \"Error UNKNOWN.UNKNOWN\" when\n // deserialized on the sender and displayed in the demo app.\n return shaka.cast.CastUtils.unpackError_(value);\n }\n\n if (value instanceof TimeRanges) {\n // TimeRanges must be unpacked into plain data for serialization.\n return shaka.cast.CastUtils.unpackTimeRanges_(value);\n }\n\n if (value instanceof Uint8Array) {\n // Some of our code cares about Uint8Arrays actually being Uint8Arrays,\n // so this gives them special treatment.\n return shaka.cast.CastUtils.unpackUint8Array_(value);\n }\n\n if (typeof value == 'number') {\n // NaN and infinity cannot be represented directly in JSON.\n if (isNaN(value)) {\n return 'NaN';\n }\n if (isFinite(value)) {\n return value;\n }\n if (value < 0) {\n return '-Infinity';\n }\n return 'Infinity';\n }\n\n return value;\n });\n }\n\n\n /**\n * Deserialize JSON using our special encodings.\n * @param {string} str\n * @return {?}\n */\n static deserialize(str) {\n return JSON.parse(str, (key, value) => {\n if (value == 'NaN') {\n return NaN;\n } else if (value == '-Infinity') {\n return -Infinity;\n } else if (value == 'Infinity') {\n return Infinity;\n } else if (value && typeof value == 'object' &&\n value['__type__'] == 'TimeRanges') {\n // TimeRanges objects have been unpacked and sent as plain data.\n // Simulate the original TimeRanges object.\n return shaka.cast.CastUtils.simulateTimeRanges_(value);\n } else if (value && typeof value == 'object' &&\n value['__type__'] == 'Uint8Array') {\n return shaka.cast.CastUtils.makeUint8Array_(value);\n } else if (value && typeof value == 'object' &&\n value['__type__'] == 'Error') {\n return shaka.cast.CastUtils.makeError_(value);\n }\n return value;\n });\n }\n\n\n /**\n * @param {!TimeRanges} ranges\n * @return {!Object}\n * @private\n */\n static unpackTimeRanges_(ranges) {\n const obj = {\n '__type__': 'TimeRanges', // a signal to deserialize\n 'length': ranges.length,\n 'start': [],\n 'end': [],\n };\n\n const TimeRangesUtils = shaka.media.TimeRangesUtils;\n for (const {start, end} of TimeRangesUtils.getBufferedInfo(ranges)) {\n obj['start'].push(start);\n obj['end'].push(end);\n }\n\n return obj;\n }\n\n\n /**\n * Creates a simulated TimeRanges object from data sent by the cast receiver.\n * @param {?} obj\n * @return {{\n * length: number,\n * start: function(number): number,\n * end: function(number): number\n * }}\n * @private\n */\n static simulateTimeRanges_(obj) {\n return {\n length: obj.length,\n // NOTE: a more complete simulation would throw when |i| was out of range,\n // but for simplicity we will assume a well-behaved application that uses\n // length instead of catch to stop iterating.\n start: (i) => { return obj.start[i]; },\n end: (i) => { return obj.end[i]; },\n };\n }\n\n\n /**\n * @param {!Uint8Array} array\n * @return {!Object}\n * @private\n */\n static unpackUint8Array_(array) {\n return {\n '__type__': 'Uint8Array', // a signal to deserialize\n 'entries': Array.from(array),\n };\n }\n\n\n /**\n * Creates a Uint8Array object from data sent by the cast receiver.\n * @param {?} obj\n * @return {!Uint8Array}\n * @private\n */\n static makeUint8Array_(obj) {\n return new Uint8Array(/** @type {!Array.} */ (obj['entries']));\n }\n\n\n /**\n * @param {!Error} error\n * @return {!Object}\n * @private\n */\n static unpackError_(error) {\n // None of the properties in TypeError are enumerable, but there are some\n // common Error properties we expect. We also enumerate any enumerable\n // properties and \"own\" properties of the type, in case there is an Error\n // subtype with additional properties we don't know about in advance.\n const properties = new Set(['name', 'message', 'stack']);\n for (const key in error) {\n properties.add(key);\n }\n for (const key of Object.getOwnPropertyNames(error)) {\n properties.add(key);\n }\n\n const contents = {};\n for (const key of properties) {\n contents[key] = error[key];\n }\n\n return {\n '__type__': 'Error', // a signal to deserialize\n 'contents': contents,\n };\n }\n\n\n /**\n * Creates an Error object from data sent by the cast receiver.\n * @param {?} obj\n * @return {!Error}\n * @private\n */\n static makeError_(obj) {\n const contents = obj['contents'];\n const error = new Error(contents['message']);\n for (const key in contents) {\n error[key] = contents[key];\n }\n return error;\n }\n};\n\n/**\n * HTMLMediaElement events that are proxied while casting.\n * @const {!Array.}\n */\nshaka.cast.CastUtils.VideoEvents = [\n 'ended',\n 'play',\n 'playing',\n 'pause',\n 'pausing',\n 'ratechange',\n 'seeked',\n 'seeking',\n 'timeupdate',\n 'volumechange',\n];\n\n\n/**\n * HTMLMediaElement attributes that are proxied while casting.\n * @const {!Array.}\n */\nshaka.cast.CastUtils.VideoAttributes = [\n 'buffered',\n 'currentTime',\n 'duration',\n 'ended',\n 'loop',\n 'muted',\n 'paused',\n 'playbackRate',\n 'seeking',\n 'videoHeight',\n 'videoWidth',\n 'volume',\n];\n\n\n/**\n * HTMLMediaElement attributes that are transferred when casting begins.\n * @const {!Array.}\n */\nshaka.cast.CastUtils.VideoInitStateAttributes = [\n 'loop',\n 'playbackRate',\n];\n\n\n/**\n * HTMLMediaElement methods with no return value that are proxied while casting.\n * @const {!Array.}\n */\nshaka.cast.CastUtils.VideoVoidMethods = [\n 'pause',\n 'play',\n];\n\n\n/**\n * Player getter methods that are proxied while casting.\n * The key is the method, the value is the frequency of updates.\n * Frequency 1 translates to every update; frequency 2 to every 2 updates, etc.\n * @const {!Object.}\n */\nshaka.cast.CastUtils.PlayerGetterMethods = {\n // NOTE: The 'drmInfo' property is not proxied, as it is very large.\n 'getAssetUri': 2,\n 'getAudioLanguages': 4,\n 'getAudioLanguagesAndRoles': 4,\n 'getBufferFullness': 1,\n 'getBufferedInfo': 2,\n 'getExpiration': 2,\n 'getKeyStatuses': 2,\n // NOTE: The 'getManifest' property is not proxied, as it is very large.\n // NOTE: The 'getManifestParserFactory' property is not proxied, as it would\n // not serialize.\n 'getPlaybackRate': 2,\n 'getTextLanguages': 4,\n 'getTextLanguagesAndRoles': 4,\n 'getImageTracks': 2,\n 'getThumbnails': 2,\n 'isAudioOnly': 10,\n 'isBuffering': 1,\n 'isInProgress': 1,\n 'isLive': 10,\n 'isTextTrackVisible': 1,\n 'keySystem': 10,\n 'seekRange': 1,\n 'getLoadMode': 10,\n 'getManifestType': 10,\n 'isFullyLoaded': 1,\n};\n\n\n/**\n * Player getter methods with data large enough to be sent in their own update\n * messages, to reduce the size of each message. The format of this is\n * identical to PlayerGetterMethods.\n * @const {!Object.}\n */\nshaka.cast.CastUtils.LargePlayerGetterMethods = {\n // NOTE: The 'getSharedConfiguration' property is not proxied as it would\n // not be possible to share a reference.\n 'getConfiguration': 4,\n 'getStats': 5,\n 'getTextTracks': 2,\n 'getVariantTracks': 2,\n};\n\n\n/**\n * Player getter methods that are proxied while casting, but only when casting\n * a livestream.\n * The key is the method, the value is the frequency of updates.\n * Frequency 1 translates to every update; frequency 2 to every 2 updates, etc.\n * @const {!Object.}\n */\nshaka.cast.CastUtils.PlayerGetterMethodsThatRequireLive = {\n 'getPlayheadTimeAsDate': 1,\n 'getPresentationStartTimeAsDate': 20,\n 'getSegmentAvailabilityDuration': 20,\n};\n\n\n/**\n * Player getter and setter methods that are used to transfer state when casting\n * begins.\n * @const {!Array.>}\n */\nshaka.cast.CastUtils.PlayerInitState = [\n ['getConfiguration', 'configure'],\n];\n\n\n/**\n * Player getter and setter methods that are used to transfer state after\n * load() is resolved.\n * @const {!Array.>}\n */\nshaka.cast.CastUtils.PlayerInitAfterLoadState = [\n ['isTextTrackVisible', 'setTextTrackVisibility'],\n];\n\n\n/**\n * Player methods with no return value that are proxied while casting.\n * @const {!Array.}\n */\nshaka.cast.CastUtils.PlayerVoidMethods = [\n 'addChaptersTrack',\n 'addTextTrackAsync',\n 'addThumbnailsTrack',\n 'cancelTrickPlay',\n 'configure',\n 'getChapters',\n 'getChaptersTracks',\n 'resetConfiguration',\n 'retryStreaming',\n 'selectAudioLanguage',\n 'selectTextLanguage',\n 'selectTextTrack',\n 'selectVariantTrack',\n 'selectVariantsByLabel',\n 'setTextTrackVisibility',\n 'trickPlay',\n 'updateStartTime',\n 'goToLive',\n];\n\n\n/**\n * Player methods returning a Promise that are proxied while casting.\n * @const {!Array.}\n */\nshaka.cast.CastUtils.PlayerPromiseMethods = [\n 'attach',\n 'attachCanvas',\n 'detach',\n // The manifestFactory parameter of load is not supported.\n 'load',\n 'unload',\n];\n\n\n/**\n * @typedef {{\n * video: Object,\n * player: Object,\n * manifest: ?string,\n * startTime: ?number\n * }}\n * @property {Object} video\n * Dictionary of video properties to be set.\n * @property {Object} player\n * Dictionary of player setters to be called.\n * @property {?string} manifest\n * The currently-selected manifest, if present.\n * @property {?number} startTime\n * The playback start time, if currently playing.\n */\nshaka.cast.CastUtils.InitStateType;\n\n\n/**\n * The namespace for Shaka messages on the cast bus.\n * @const {string}\n */\nshaka.cast.CastUtils.SHAKA_MESSAGE_NAMESPACE = 'urn:x-cast:com.google.shaka.v2';\n\n\n/**\n * The namespace for generic messages on the cast bus.\n * @const {string}\n */\nshaka.cast.CastUtils.GENERIC_MESSAGE_NAMESPACE =\n 'urn:x-cast:com.google.cast.media';\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.cast.CastSender');\n\ngoog.require('goog.asserts');\ngoog.require('shaka.cast.CastUtils');\ngoog.require('shaka.log');\ngoog.require('shaka.util.Error');\ngoog.require('shaka.util.FakeEvent');\ngoog.require('shaka.util.IDestroyable');\ngoog.require('shaka.util.PublicPromise');\ngoog.require('shaka.util.Timer');\n\n\n/**\n * @implements {shaka.util.IDestroyable}\n */\nshaka.cast.CastSender = class {\n /**\n * @param {string} receiverAppId The ID of the cast receiver application.\n * @param {function()} onStatusChanged A callback invoked when the cast status\n * changes.\n * @param {function()} onFirstCastStateUpdate A callback invoked when an\n * \"update\" event has been received for the first time.\n * @param {function(string, !shaka.util.FakeEvent)} onRemoteEvent A callback\n * invoked with target name and event when a remote event is received.\n * @param {function()} onResumeLocal A callback invoked when the local player\n * should resume playback. Called before the cached remote state is wiped.\n * @param {function()} onInitStateRequired A callback to get local player's.\n * state. Invoked when casting is initiated from Chrome's cast button.\n * @param {boolean} androidReceiverCompatible Indicates if the app is\n * compatible with an Android Receiver.\n */\n constructor(receiverAppId, onStatusChanged, onFirstCastStateUpdate,\n onRemoteEvent, onResumeLocal, onInitStateRequired,\n androidReceiverCompatible) {\n /** @private {string} */\n this.receiverAppId_ = receiverAppId;\n\n /** @private {boolean} */\n this.androidReceiverCompatible_ = androidReceiverCompatible;\n\n /** @private {shaka.util.Timer} */\n this.statusChangeTimer_ = new shaka.util.Timer(onStatusChanged);\n\n /** @private {?function()} */\n this.onFirstCastStateUpdate_ = onFirstCastStateUpdate;\n\n /** @private {boolean} */\n this.hasJoinedExistingSession_ = false;\n\n /** @private {?function(string, !shaka.util.FakeEvent)} */\n this.onRemoteEvent_ = onRemoteEvent;\n\n /** @private {?function()} */\n this.onResumeLocal_ = onResumeLocal;\n\n /** @private {?function()} */\n this.onInitStateRequired_ = onInitStateRequired;\n\n /** @private {boolean} */\n this.apiReady_ = false;\n\n /** @private {boolean} */\n this.isCasting_ = false;\n\n /** @private {string} */\n this.receiverName_ = '';\n\n /** @private {Object} */\n this.appData_ = null;\n\n /** @private {?function()} */\n this.onConnectionStatusChangedBound_ =\n () => this.onConnectionStatusChanged_();\n\n /** @private {?function(string, string)} */\n this.onMessageReceivedBound_ = (namespace, serialized) =>\n this.onMessageReceived_(namespace, serialized);\n\n /** @private {Object} */\n this.cachedProperties_ = {\n 'video': {},\n 'player': {},\n };\n\n /** @private {number} */\n this.nextAsyncCallId_ = 0;\n\n /** @private {Object.} */\n this.asyncCallPromises_ = {};\n\n /** @private {shaka.util.PublicPromise} */\n this.castPromise_ = null;\n\n shaka.cast.CastSender.instances_.add(this);\n }\n\n\n /** @override */\n destroy() {\n shaka.cast.CastSender.instances_.delete(this);\n\n this.rejectAllPromises_();\n if (shaka.cast.CastSender.session_) {\n this.removeListeners_();\n // Don't leave the session, so that this session can be re-used later if\n // necessary.\n }\n\n if (this.statusChangeTimer_) {\n this.statusChangeTimer_.stop();\n this.statusChangeTimer_ = null;\n }\n\n this.onRemoteEvent_ = null;\n this.onResumeLocal_ = null;\n this.apiReady_ = false;\n this.isCasting_ = false;\n this.appData_ = null;\n this.cachedProperties_ = null;\n this.asyncCallPromises_ = null;\n this.castPromise_ = null;\n this.onConnectionStatusChangedBound_ = null;\n this.onMessageReceivedBound_ = null;\n\n return Promise.resolve();\n }\n\n\n /**\n * @return {boolean} True if the cast API is available.\n */\n apiReady() {\n return this.apiReady_;\n }\n\n\n /**\n * @return {boolean} True if there are receivers.\n */\n hasReceivers() {\n return shaka.cast.CastSender.hasReceivers_;\n }\n\n\n /**\n * @return {boolean} True if we are currently casting.\n */\n isCasting() {\n return this.isCasting_;\n }\n\n\n /**\n * @return {string} The name of the Cast receiver device, if isCasting().\n */\n receiverName() {\n return this.receiverName_;\n }\n\n\n /**\n * @return {boolean} True if we have a cache of remote properties from the\n * receiver.\n */\n hasRemoteProperties() {\n return Object.keys(this.cachedProperties_['video']).length != 0;\n }\n\n\n /** Initialize the Cast API. */\n init() {\n const CastSender = shaka.cast.CastSender;\n\n if (!this.receiverAppId_.length) {\n // Return if no cast receiver id has been provided.\n // Nothing will be initialized, no global hooks will be installed.\n // If the receiver ID changes before this instance dies, init will be\n // called again.\n return;\n }\n\n // Check for the cast API.\n if (!window.chrome || !chrome.cast || !chrome.cast.isAvailable) {\n // If the API is not available on this platform or is not ready yet,\n // install a hook to be notified when it becomes available.\n // If the API becomes available before this instance dies, init will be\n // called again.\n\n // Check if our callback is already installed.\n if (window.__onGCastApiAvailable !== CastSender.onGCastApiAvailable_) {\n // Save pre-existing __onGCastApiAvailable in order to restore later.\n CastSender.__onGCastApiAvailable_ =\n window.__onGCastApiAvailable || null;\n window.__onGCastApiAvailable = CastSender.onGCastApiAvailable_;\n }\n\n return;\n }\n\n // The API is now available.\n this.apiReady_ = true;\n this.statusChangeTimer_.tickNow();\n\n // Use static versions of the API callbacks, since the ChromeCast API is\n // static. If we used local versions, we might end up retaining references\n // to destroyed players here.\n const sessionRequest = new chrome.cast.SessionRequest(this.receiverAppId_,\n /* capabilities= */ [],\n /* timeout= */ null,\n this.androidReceiverCompatible_,\n /* credentialsData= */null);\n const apiConfig = new chrome.cast.ApiConfig(sessionRequest,\n (session) => CastSender.onExistingSessionJoined_(session),\n (availability) => CastSender.onReceiverStatusChanged_(availability),\n 'origin_scoped');\n\n // TODO: Have never seen this fail. When would it and how should we react?\n chrome.cast.initialize(apiConfig,\n () => { shaka.log.debug('CastSender: init'); },\n (error) => { shaka.log.error('CastSender: init error', error); });\n if (shaka.cast.CastSender.hasReceivers_) {\n // Fire a fake cast status change, to simulate the update that\n // would be fired normally.\n // This is after a brief delay, to give users a chance to add event\n // listeners.\n this.statusChangeTimer_.tickAfter(shaka.cast.CastSender.STATUS_DELAY);\n }\n\n const oldSession = shaka.cast.CastSender.session_;\n if (oldSession && oldSession.status != chrome.cast.SessionStatus.STOPPED) {\n // The old session still exists, so re-use it.\n shaka.log.debug('CastSender: re-using existing connection');\n this.onExistingSessionJoined_(oldSession);\n } else {\n // The session has been canceled in the meantime, so ignore it.\n shaka.cast.CastSender.session_ = null;\n }\n }\n\n\n /**\n * Set application-specific data.\n *\n * @param {Object} appData Application-specific data to relay to the receiver.\n */\n setAppData(appData) {\n this.appData_ = appData;\n if (this.isCasting_) {\n this.sendMessage_({\n 'type': 'appData',\n 'appData': this.appData_,\n });\n }\n }\n\n\n /**\n * @return {!Promise} Resolved when connected to a receiver. Rejected if the\n * connection fails or is canceled by the user.\n */\n async cast() {\n if (!this.apiReady_) {\n throw new shaka.util.Error(\n shaka.util.Error.Severity.RECOVERABLE,\n shaka.util.Error.Category.CAST,\n shaka.util.Error.Code.CAST_API_UNAVAILABLE);\n }\n if (!shaka.cast.CastSender.hasReceivers_) {\n throw new shaka.util.Error(\n shaka.util.Error.Severity.RECOVERABLE,\n shaka.util.Error.Category.CAST,\n shaka.util.Error.Code.NO_CAST_RECEIVERS);\n }\n if (this.isCasting_) {\n throw new shaka.util.Error(\n shaka.util.Error.Severity.RECOVERABLE,\n shaka.util.Error.Category.CAST,\n shaka.util.Error.Code.ALREADY_CASTING);\n }\n\n this.castPromise_ = new shaka.util.PublicPromise();\n chrome.cast.requestSession(\n (session) => this.onSessionInitiated_(session),\n (error) => this.onConnectionError_(error));\n await this.castPromise_;\n }\n\n\n /**\n * Shows user a cast dialog where they can choose to stop\n * casting. Relies on Chrome to perform disconnect if they do.\n * Doesn't do anything if not connected.\n */\n showDisconnectDialog() {\n if (!this.isCasting_) {\n return;\n }\n\n chrome.cast.requestSession(\n (session) => this.onSessionInitiated_(session),\n (error) => this.onConnectionError_(error));\n }\n\n\n /**\n * Forces the receiver app to shut down by disconnecting. Does nothing if not\n * connected.\n */\n forceDisconnect() {\n if (!this.isCasting_) {\n return;\n }\n\n this.rejectAllPromises_();\n\n if (shaka.cast.CastSender.session_) {\n this.removeListeners_();\n\n // This can throw if we've already been disconnected somehow.\n try {\n shaka.cast.CastSender.session_.stop(() => {}, () => {});\n } catch (error) {}\n\n shaka.cast.CastSender.session_ = null;\n }\n\n // Update casting status.\n this.onConnectionStatusChanged_();\n }\n\n\n /**\n * Getter for properties of remote objects.\n * @param {string} targetName\n * @param {string} property\n * @return {?}\n */\n get(targetName, property) {\n goog.asserts.assert(targetName == 'video' || targetName == 'player',\n 'Unexpected target name');\n const CastUtils = shaka.cast.CastUtils;\n if (targetName == 'video') {\n if (CastUtils.VideoVoidMethods.includes(property)) {\n return (...args) => this.remoteCall_(targetName, property, ...args);\n }\n } else if (targetName == 'player') {\n if (CastUtils.PlayerGetterMethodsThatRequireLive[property]) {\n const isLive = this.get('player', 'isLive')();\n goog.asserts.assert(isLive,\n property + ' should be called on a live stream!');\n // If the property shouldn't exist, return a fake function so that the\n // user doesn't call an undefined function and get a second error.\n if (!isLive) {\n return () => undefined;\n }\n }\n if (CastUtils.PlayerVoidMethods.includes(property)) {\n return (...args) => this.remoteCall_(targetName, property, ...args);\n }\n if (CastUtils.PlayerPromiseMethods.includes(property)) {\n return (...args) =>\n this.remoteAsyncCall_(targetName, property, ...args);\n }\n if (CastUtils.PlayerGetterMethods[property] ||\n CastUtils.LargePlayerGetterMethods[property]) {\n return () => this.propertyGetter_(targetName, property);\n }\n }\n\n return this.propertyGetter_(targetName, property);\n }\n\n\n /**\n * Setter for properties of remote objects.\n * @param {string} targetName\n * @param {string} property\n * @param {?} value\n */\n set(targetName, property, value) {\n goog.asserts.assert(targetName == 'video' || targetName == 'player',\n 'Unexpected target name');\n\n this.cachedProperties_[targetName][property] = value;\n this.sendMessage_({\n 'type': 'set',\n 'targetName': targetName,\n 'property': property,\n 'value': value,\n });\n }\n\n\n /**\n * @param {chrome.cast.Session} session\n * @private\n */\n onSessionInitiated_(session) {\n shaka.log.debug('CastSender: onSessionInitiated');\n\n const initState = this.onInitStateRequired_();\n\n this.onSessionCreated_(session);\n\n this.sendMessage_({\n 'type': 'init',\n 'initState': initState,\n 'appData': this.appData_,\n });\n\n this.castPromise_.resolve();\n }\n\n\n /**\n * @param {chrome.cast.Error} error\n * @private\n */\n onConnectionError_(error) {\n // Default error code:\n let code = shaka.util.Error.Code.UNEXPECTED_CAST_ERROR;\n\n switch (error.code) {\n case 'cancel':\n code = shaka.util.Error.Code.CAST_CANCELED_BY_USER;\n break;\n case 'timeout':\n code = shaka.util.Error.Code.CAST_CONNECTION_TIMED_OUT;\n break;\n case 'receiver_unavailable':\n code = shaka.util.Error.Code.CAST_RECEIVER_APP_UNAVAILABLE;\n break;\n }\n\n this.castPromise_.reject(new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.CAST,\n code,\n error));\n }\n\n\n /**\n * @param {string} targetName\n * @param {string} property\n * @return {?}\n * @private\n */\n propertyGetter_(targetName, property) {\n goog.asserts.assert(targetName == 'video' || targetName == 'player',\n 'Unexpected target name');\n return this.cachedProperties_[targetName][property];\n }\n\n\n /**\n * @param {string} targetName\n * @param {string} methodName\n * @param {...*} varArgs\n * @private\n */\n remoteCall_(targetName, methodName, ...varArgs) {\n goog.asserts.assert(targetName == 'video' || targetName == 'player',\n 'Unexpected target name');\n this.sendMessage_({\n 'type': 'call',\n 'targetName': targetName,\n 'methodName': methodName,\n 'args': varArgs,\n });\n }\n\n\n /**\n * @param {string} targetName\n * @param {string} methodName\n * @param {...*} varArgs\n * @return {!Promise}\n * @private\n */\n remoteAsyncCall_(targetName, methodName, ...varArgs) {\n goog.asserts.assert(targetName == 'video' || targetName == 'player',\n 'Unexpected target name');\n\n const p = new shaka.util.PublicPromise();\n const id = this.nextAsyncCallId_.toString();\n this.nextAsyncCallId_++;\n this.asyncCallPromises_[id] = p;\n\n try {\n this.sendMessage_({\n 'type': 'asyncCall',\n 'targetName': targetName,\n 'methodName': methodName,\n 'args': varArgs,\n 'id': id,\n });\n } catch (error) {\n p.reject(error);\n }\n return p;\n }\n\n\n /**\n * A static version of onExistingSessionJoined_, that calls that method for\n * each known instance.\n * @param {chrome.cast.Session} session\n * @private\n */\n static onExistingSessionJoined_(session) {\n for (const instance of shaka.cast.CastSender.instances_) {\n instance.onExistingSessionJoined_(session);\n }\n }\n\n\n /**\n * @param {chrome.cast.Session} session\n * @private\n */\n onExistingSessionJoined_(session) {\n shaka.log.debug('CastSender: onExistingSessionJoined');\n\n this.castPromise_ = new shaka.util.PublicPromise();\n this.hasJoinedExistingSession_ = true;\n\n this.onSessionInitiated_(session);\n }\n\n\n /**\n * A static version of onReceiverStatusChanged_, that calls that method for\n * each known instance.\n * @param {string} availability\n * @private\n */\n static onReceiverStatusChanged_(availability) {\n for (const instance of shaka.cast.CastSender.instances_) {\n instance.onReceiverStatusChanged_(availability);\n }\n }\n\n\n /**\n * @param {string} availability\n * @private\n */\n onReceiverStatusChanged_(availability) {\n // The cast API is telling us whether there are any cast receiver devices\n // available.\n shaka.log.debug('CastSender: receiver status', availability);\n shaka.cast.CastSender.hasReceivers_ = availability == 'available';\n this.statusChangeTimer_.tickNow();\n }\n\n\n /**\n * @param {chrome.cast.Session} session\n * @private\n */\n onSessionCreated_(session) {\n shaka.cast.CastSender.session_ = session;\n session.addUpdateListener(this.onConnectionStatusChangedBound_);\n session.addMessageListener(shaka.cast.CastUtils.SHAKA_MESSAGE_NAMESPACE,\n this.onMessageReceivedBound_);\n this.onConnectionStatusChanged_();\n }\n\n\n /**\n * @private\n */\n removeListeners_() {\n const session = shaka.cast.CastSender.session_;\n session.removeUpdateListener(this.onConnectionStatusChangedBound_);\n session.removeMessageListener(shaka.cast.CastUtils.SHAKA_MESSAGE_NAMESPACE,\n this.onMessageReceivedBound_);\n }\n\n\n /**\n * @private\n */\n onConnectionStatusChanged_() {\n const connected = shaka.cast.CastSender.session_ ?\n shaka.cast.CastSender.session_.status == 'connected' :\n false;\n shaka.log.debug('CastSender: connection status', connected);\n if (this.isCasting_ && !connected) {\n // Tell CastProxy to transfer state back to local player.\n this.onResumeLocal_();\n\n // Clear whatever we have cached.\n for (const targetName in this.cachedProperties_) {\n this.cachedProperties_[targetName] = {};\n }\n\n this.rejectAllPromises_();\n }\n\n this.isCasting_ = connected;\n this.receiverName_ = connected ?\n shaka.cast.CastSender.session_.receiver.friendlyName :\n '';\n this.statusChangeTimer_.tickNow();\n }\n\n\n /**\n * Reject any async call promises that are still pending.\n * @private\n */\n rejectAllPromises_() {\n for (const id in this.asyncCallPromises_) {\n const p = this.asyncCallPromises_[id];\n delete this.asyncCallPromises_[id];\n\n // Reject pending async operations as if they were interrupted.\n // At the moment, load() is the only async operation we are worried about.\n p.reject(new shaka.util.Error(\n shaka.util.Error.Severity.RECOVERABLE,\n shaka.util.Error.Category.PLAYER,\n shaka.util.Error.Code.LOAD_INTERRUPTED));\n }\n }\n\n\n /**\n * @param {string} namespace\n * @param {string} serialized\n * @private\n */\n onMessageReceived_(namespace, serialized) {\n // Since this method is in the compiled library, make sure all messages\n // passed in here were created with quoted property names.\n\n const message = shaka.cast.CastUtils.deserialize(serialized);\n shaka.log.v2('CastSender: message', message);\n\n switch (message['type']) {\n case 'event': {\n const targetName = message['targetName'];\n const event = message['event'];\n const fakeEvent = shaka.util.FakeEvent.fromRealEvent(event);\n this.onRemoteEvent_(targetName, fakeEvent);\n break;\n }\n case 'update': {\n const update = message['update'];\n for (const targetName in update) {\n const target = this.cachedProperties_[targetName] || {};\n for (const property in update[targetName]) {\n target[property] = update[targetName][property];\n }\n }\n if (this.hasJoinedExistingSession_) {\n this.onFirstCastStateUpdate_();\n this.hasJoinedExistingSession_ = false;\n }\n break;\n }\n case 'asyncComplete': {\n const id = message['id'];\n const error = message['error'];\n const p = this.asyncCallPromises_[id];\n delete this.asyncCallPromises_[id];\n\n goog.asserts.assert(p, 'Unexpected async id');\n if (!p) {\n break;\n }\n\n if (error) {\n // This is a hacky way to reconstruct the serialized error.\n const reconstructedError = new shaka.util.Error(\n error.severity, error.category, error.code);\n for (const k in error) {\n (/** @type {Object} */(reconstructedError))[k] = error[k];\n }\n p.reject(reconstructedError);\n } else {\n p.resolve();\n }\n break;\n }\n }\n }\n\n\n /**\n * @param {!Object} message\n * @private\n */\n sendMessage_(message) {\n // Since this method is in the compiled library, make sure all messages\n // passed in here were created with quoted property names.\n\n const serialized = shaka.cast.CastUtils.serialize(message);\n const session = shaka.cast.CastSender.session_;\n\n // NOTE: This takes an error callback that we have not seen fire. We don't\n // know if it would fire synchronously or asynchronously. Until we know how\n // it works, we just log from that callback. But we _have_ seen\n // sendMessage() throw synchronously, so we handle that.\n try {\n session.sendMessage(shaka.cast.CastUtils.SHAKA_MESSAGE_NAMESPACE,\n serialized,\n () => {}, // success callback\n shaka.log.error); // error callback\n } catch (error) {\n shaka.log.error('Cast session sendMessage threw', error);\n\n // Translate the error\n const shakaError = new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.CAST,\n shaka.util.Error.Code.CAST_CONNECTION_TIMED_OUT,\n error);\n\n // Dispatch it through the Player proxy\n const fakeEvent = new shaka.util.FakeEvent(\n 'error', (new Map()).set('detail', shakaError));\n this.onRemoteEvent_('player', fakeEvent);\n\n // Force this session to disconnect and transfer playback to the local\n // device\n this.forceDisconnect();\n\n // Throw the translated error from this getter/setter/method to the UI/app\n throw shakaError;\n }\n }\n};\n\n/** @type {number} */\nshaka.cast.CastSender.STATUS_DELAY = 0.02;\n\n/** @private {boolean} */\nshaka.cast.CastSender.hasReceivers_ = false;\n\n/** @private {chrome.cast.Session} */\nshaka.cast.CastSender.session_ = null;\n\n/** @private {?function(boolean)} */\nshaka.cast.CastSender.__onGCastApiAvailable_ = null;\n\n/**\n * A set of all living CastSender instances. The constructor and destroy\n * methods will add and remove instances from this set.\n *\n * This is used to deal with delayed initialization of the Cast SDK. When the\n * SDK becomes available, instances will be reinitialized.\n *\n * @private {!Set.}\n */\nshaka.cast.CastSender.instances_ = new Set();\n\n/**\n * If the cast SDK is not available yet, it will invoke this callback once it\n * becomes available.\n *\n * @param {boolean} loaded\n * @private\n */\nshaka.cast.CastSender.onSdkLoaded_ = (loaded) => {\n if (loaded) {\n // Any living instances of CastSender should have their init methods called\n // again now that the API is available.\n for (const sender of shaka.cast.CastSender.instances_) {\n sender.init();\n }\n }\n};\n\n/**\n * @param {boolean} available\n * @private\n */\nshaka.cast.CastSender.onGCastApiAvailable_ = (available) => {\n // Restore callback from saved.\n if (shaka.cast.CastSender.__onGCastApiAvailable_) {\n window.__onGCastApiAvailable =\n shaka.cast.CastSender.__onGCastApiAvailable_;\n } else {\n delete window.__onGCastApiAvailable;\n }\n shaka.cast.CastSender.__onGCastApiAvailable_ = null;\n\n // A note about this value: In our testing environment, we load both\n // uncompiled and compiled code. This global callback in uncompiled mode\n // can be overwritten by the same in compiled mode. The two versions will\n // each have their own instances_ map. Therefore the callback must have a\n // name, as opposed to being anonymous. This way, the CastSender tests\n // can invoke the named static method instead of using a global that could\n // be overwritten.\n shaka.cast.CastSender.onSdkLoaded_(available);\n\n // call restored callback (if any)\n if (typeof window.__onGCastApiAvailable === 'function') {\n window.__onGCastApiAvailable(available);\n }\n};\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.cast.CastProxy');\n\ngoog.require('goog.asserts');\ngoog.require('shaka.Player');\ngoog.require('shaka.cast.CastSender');\ngoog.require('shaka.cast.CastUtils');\ngoog.require('shaka.log');\ngoog.require('shaka.util.Error');\ngoog.require('shaka.util.EventManager');\ngoog.require('shaka.util.FakeEvent');\ngoog.require('shaka.util.FakeEventTarget');\ngoog.require('shaka.util.IDestroyable');\n\n\n/**\n * @event shaka.cast.CastProxy.CastStatusChangedEvent\n * @description Fired when cast status changes. The status change will be\n * reflected in canCast() and isCasting().\n * @property {string} type\n * 'caststatuschanged'\n * @exportDoc\n */\n\n\n/**\n * @summary A proxy to switch between local and remote playback for Chromecast\n * in a way that is transparent to the app's controls.\n *\n * @implements {shaka.util.IDestroyable}\n * @export\n */\nshaka.cast.CastProxy = class extends shaka.util.FakeEventTarget {\n /**\n * @param {!HTMLMediaElement} video The local video element associated with\n * the local Player instance.\n * @param {!shaka.Player} player A local Player instance.\n * @param {string} receiverAppId The ID of the cast receiver application.\n * If blank, casting will not be available, but the proxy will still\n * function otherwise.\n * @param {boolean} androidReceiverCompatible Indicates if the app is\n * compatible with an Android Receiver.\n */\n constructor(video, player, receiverAppId,\n androidReceiverCompatible = false) {\n super();\n\n /** @private {HTMLMediaElement} */\n this.localVideo_ = video;\n\n /** @private {shaka.Player} */\n this.localPlayer_ = player;\n\n /** @private {Object} */\n this.videoProxy_ = null;\n\n /** @private {Object} */\n this.playerProxy_ = null;\n\n /** @private {shaka.util.FakeEventTarget} */\n this.videoEventTarget_ = null;\n\n /** @private {shaka.util.FakeEventTarget} */\n this.playerEventTarget_ = null;\n\n /** @private {shaka.util.EventManager} */\n this.eventManager_ = null;\n\n /** @private {string} */\n this.receiverAppId_ = receiverAppId;\n\n /** @private {boolean} */\n this.androidReceiverCompatible_ = androidReceiverCompatible;\n\n /** @private {!Map} */\n this.compiledToExternNames_ = new Map();\n\n /** @private {shaka.cast.CastSender} */\n this.sender_ = new shaka.cast.CastSender(\n receiverAppId,\n () => this.onCastStatusChanged_(),\n () => this.onFirstCastStateUpdate_(),\n (targetName, event) => this.onRemoteEvent_(targetName, event),\n () => this.onResumeLocal_(),\n () => this.getInitState_(),\n androidReceiverCompatible);\n\n\n this.init_();\n }\n\n /**\n * Destroys the proxy and the underlying local Player.\n *\n * @param {boolean=} forceDisconnect If true, force the receiver app to shut\n * down by disconnecting. Does nothing if not connected.\n * @override\n * @export\n */\n destroy(forceDisconnect) {\n if (forceDisconnect) {\n this.sender_.forceDisconnect();\n }\n\n if (this.eventManager_) {\n this.eventManager_.release();\n this.eventManager_ = null;\n }\n\n const waitFor = [];\n if (this.localPlayer_) {\n waitFor.push(this.localPlayer_.destroy());\n this.localPlayer_ = null;\n }\n\n if (this.sender_) {\n waitFor.push(this.sender_.destroy());\n this.sender_ = null;\n }\n\n this.localVideo_ = null;\n this.videoProxy_ = null;\n this.playerProxy_ = null;\n\n // FakeEventTarget implements IReleasable\n super.release();\n\n return Promise.all(waitFor);\n }\n\n /**\n * Get a proxy for the video element that delegates to local and remote video\n * elements as appropriate.\n *\n * @suppress {invalidCasts} to cast proxy Objects to unrelated types\n * @return {!HTMLMediaElement}\n * @export\n */\n getVideo() {\n return /** @type {!HTMLMediaElement} */(this.videoProxy_);\n }\n\n /**\n * Get a proxy for the Player that delegates to local and remote Player\n * objects as appropriate.\n *\n * @suppress {invalidCasts} to cast proxy Objects to unrelated types\n * @return {!shaka.Player}\n * @export\n */\n getPlayer() {\n return /** @type {!shaka.Player} */(this.playerProxy_);\n }\n\n /**\n * @return {boolean} True if the cast API is available and there are\n * receivers.\n * @export\n */\n canCast() {\n return this.sender_.apiReady() && this.sender_.hasReceivers();\n }\n\n /**\n * @return {boolean} True if we are currently casting.\n * @export\n */\n isCasting() {\n return this.sender_.isCasting();\n }\n\n /**\n * @return {string} The name of the Cast receiver device, if isCasting().\n * @export\n */\n receiverName() {\n return this.sender_.receiverName();\n }\n\n /**\n * @return {!Promise} Resolved when connected to a receiver. Rejected if the\n * connection fails or is canceled by the user.\n * @export\n */\n async cast() {\n // TODO: transfer manually-selected tracks?\n // TODO: transfer side-loaded text tracks?\n\n await this.sender_.cast();\n if (!this.localPlayer_) {\n // We've already been destroyed.\n return;\n }\n\n // Unload the local manifest when casting succeeds.\n await this.localPlayer_.unload();\n }\n\n /**\n * Set application-specific data.\n *\n * @param {Object} appData Application-specific data to relay to the receiver.\n * @export\n */\n setAppData(appData) {\n this.sender_.setAppData(appData);\n }\n\n /**\n * Show a dialog where user can choose to disconnect from the cast connection.\n * @export\n */\n suggestDisconnect() {\n this.sender_.showDisconnectDialog();\n }\n\n /**\n * Force the receiver app to shut down by disconnecting.\n * @export\n */\n forceDisconnect() {\n this.sender_.forceDisconnect();\n }\n\n\n /**\n * @param {string} newAppId\n * @param {boolean=} newCastAndroidReceiver\n * @export\n */\n async changeReceiverId(newAppId, newCastAndroidReceiver = false) {\n if (newAppId == this.receiverAppId_ &&\n newCastAndroidReceiver == this.androidReceiverCompatible_) {\n // Nothing to change\n return;\n }\n\n this.receiverAppId_ = newAppId;\n this.androidReceiverCompatible_ = newCastAndroidReceiver;\n\n // Destroy the old sender\n this.sender_.forceDisconnect();\n await this.sender_.destroy();\n this.sender_ = null;\n\n\n // Create the new one\n this.sender_ = new shaka.cast.CastSender(\n newAppId,\n () => this.onCastStatusChanged_(),\n () => this.onFirstCastStateUpdate_(),\n (targetName, event) => this.onRemoteEvent_(targetName, event),\n () => this.onResumeLocal_(),\n () => this.getInitState_(),\n newCastAndroidReceiver);\n\n this.sender_.init();\n }\n\n /**\n * Initialize the Proxies and the Cast sender.\n * @private\n */\n init_() {\n this.sender_.init();\n\n this.eventManager_ = new shaka.util.EventManager();\n\n for (const name of shaka.cast.CastUtils.VideoEvents) {\n this.eventManager_.listen(this.localVideo_, name,\n (event) => this.videoProxyLocalEvent_(event));\n }\n\n for (const key in shaka.util.FakeEvent.EventName) {\n const name = shaka.util.FakeEvent.EventName[key];\n this.eventManager_.listen(this.localPlayer_, name,\n (event) => this.playerProxyLocalEvent_(event));\n }\n\n // We would like to use Proxy here, but it is not supported on Safari.\n this.videoProxy_ = {};\n for (const k in this.localVideo_) {\n Object.defineProperty(this.videoProxy_, k, {\n configurable: false,\n enumerable: true,\n get: () => this.videoProxyGet_(k),\n set: (value) => { this.videoProxySet_(k, value); },\n });\n }\n\n this.playerProxy_ = {};\n this.iterateOverPlayerMethods_((name, method) => {\n goog.asserts.assert(this.playerProxy_, 'Must have player proxy!');\n Object.defineProperty(this.playerProxy_, name, {\n configurable: false,\n enumerable: true,\n get: () => this.playerProxyGet_(name),\n });\n });\n\n if (COMPILED) {\n this.mapCompiledToUncompiledPlayerMethodNames_();\n }\n\n this.videoEventTarget_ = new shaka.util.FakeEventTarget();\n this.videoEventTarget_.dispatchTarget =\n /** @type {EventTarget} */(this.videoProxy_);\n\n this.playerEventTarget_ = new shaka.util.FakeEventTarget();\n this.playerEventTarget_.dispatchTarget =\n /** @type {EventTarget} */(this.playerProxy_);\n }\n\n\n /**\n * Maps compiled to uncompiled player names so we can figure out\n * which method to call in compiled build, while casting.\n * @private\n */\n mapCompiledToUncompiledPlayerMethodNames_() {\n // In compiled mode, UI tries to access player methods by their internal\n // renamed names, but the proxy object doesn't know about those. See\n // https://github.com/shaka-project/shaka-player/issues/2130 for details.\n const methodsToNames = new Map();\n this.iterateOverPlayerMethods_((name, method) => {\n if (methodsToNames.has(method)) {\n // If two method names, point to the same method, add them to the\n // map as aliases of each other.\n const name2 = methodsToNames.get(method);\n // Assumes that the compiled name is shorter\n if (name.length < name2.length) {\n this.compiledToExternNames_.set(name, name2);\n } else {\n this.compiledToExternNames_.set(name2, name);\n }\n } else {\n methodsToNames.set(method, name);\n }\n });\n }\n\n /**\n * Iterates over all of the methods of the player, including inherited methods\n * from FakeEventTarget.\n * @param {function(string, function())} operation\n * @private\n */\n iterateOverPlayerMethods_(operation) {\n goog.asserts.assert(this.localPlayer_, 'Must have player!');\n const player = /** @type {!Object} */ (this.localPlayer_);\n // Avoid accessing any over-written methods in the prototype chain.\n const seenNames = new Set();\n\n /**\n * @param {string} name\n * @return {boolean}\n */\n function shouldAddToTheMap(name) {\n if (name == 'constructor') {\n // Don't proxy the constructor.\n return false;\n }\n\n const method = /** @type {Object} */(player)[name];\n if (typeof method != 'function') {\n // Don't proxy non-methods.\n return false;\n }\n\n // Add if the map does not already have it\n return !seenNames.has(name);\n }\n\n // First, look at the methods on the object itself, so this can properly\n // proxy any methods not on the prototype (for example, in the mock player).\n for (const key in player) {\n if (shouldAddToTheMap(key)) {\n seenNames.add(key);\n operation(key, player[key]);\n }\n }\n\n // The exact length of the prototype chain might vary; for resiliency, this\n // will just look at the entire chain, rather than assuming a set length.\n let proto = /** @type {!Object} */ (Object.getPrototypeOf(player));\n const objProto = /** @type {!Object} */ (Object.getPrototypeOf({}));\n while (proto && proto != objProto) { // Don't proxy Object methods.\n for (const name of Object.getOwnPropertyNames(proto)) {\n if (shouldAddToTheMap(name)) {\n seenNames.add(name);\n operation(name, (player)[name]);\n }\n }\n proto = /** @type {!Object} */ (Object.getPrototypeOf(proto));\n }\n }\n\n /**\n * @return {shaka.cast.CastUtils.InitStateType} initState Video and player\n * state to be sent to the receiver.\n * @private\n */\n getInitState_() {\n const initState = {\n 'video': {},\n 'player': {},\n 'playerAfterLoad': {},\n 'manifest': this.localPlayer_.getAssetUri(),\n 'startTime': null,\n };\n\n // Pause local playback before capturing state.\n this.localVideo_.pause();\n\n for (const name of shaka.cast.CastUtils.VideoInitStateAttributes) {\n initState['video'][name] = this.localVideo_[name];\n }\n\n // If the video is still playing, set the startTime.\n // Has no effect if nothing is loaded.\n if (!this.localVideo_.ended) {\n initState['startTime'] = this.localVideo_.currentTime;\n }\n\n for (const pair of shaka.cast.CastUtils.PlayerInitState) {\n const getter = pair[0];\n const setter = pair[1];\n const value = /** @type {Object} */(this.localPlayer_)[getter]();\n\n initState['player'][setter] = value;\n }\n\n for (const pair of shaka.cast.CastUtils.PlayerInitAfterLoadState) {\n const getter = pair[0];\n const setter = pair[1];\n const value = /** @type {Object} */(this.localPlayer_)[getter]();\n\n initState['playerAfterLoad'][setter] = value;\n }\n\n return initState;\n }\n\n /**\n * Dispatch an event to notify the app that the status has changed.\n * @private\n */\n onCastStatusChanged_() {\n const event = new shaka.util.FakeEvent('caststatuschanged');\n this.dispatchEvent(event);\n }\n\n /**\n * Dispatch a synthetic play or pause event to ensure that the app correctly\n * knows that the player is playing, if joining an existing receiver.\n * @private\n */\n onFirstCastStateUpdate_() {\n const type = this.videoProxy_['paused'] ? 'pause' : 'play';\n const fakeEvent = new shaka.util.FakeEvent(type);\n this.videoEventTarget_.dispatchEvent(fakeEvent);\n }\n\n /**\n * Transfer remote state back and resume local playback.\n * @private\n */\n onResumeLocal_() {\n // Transfer back the player state.\n for (const pair of shaka.cast.CastUtils.PlayerInitState) {\n const getter = pair[0];\n const setter = pair[1];\n const value = this.sender_.get('player', getter)();\n /** @type {Object} */(this.localPlayer_)[setter](value);\n }\n\n // Get the most recent manifest URI and ended state.\n const assetUri = this.sender_.get('player', 'getAssetUri')();\n const ended = this.sender_.get('video', 'ended');\n\n let manifestReady = Promise.resolve();\n const autoplay = this.localVideo_.autoplay;\n\n let startTime = null;\n\n // If the video is still playing, set the startTime.\n // Has no effect if nothing is loaded.\n if (!ended) {\n startTime = this.sender_.get('video', 'currentTime');\n }\n\n let activeTextTrack;\n const textTracks = this.sender_.get('player', 'getTextTracks')();\n\n if (textTracks && textTracks.length) {\n activeTextTrack = textTracks.find((t) => t.active);\n }\n\n const isTextTrackVisible =\n this.sender_.get('player', 'isTextTrackVisible')();\n\n // Now load the manifest, if present.\n if (assetUri) {\n // Don't autoplay the content until we finish setting up initial state.\n this.localVideo_.autoplay = false;\n manifestReady = this.localPlayer_.load(assetUri, startTime);\n }\n\n // Get the video state into a temp variable since we will apply it async.\n const videoState = {};\n for (const name of shaka.cast.CastUtils.VideoInitStateAttributes) {\n videoState[name] = this.sender_.get('video', name);\n }\n\n // Finally, take on video state and player's \"after load\" state.\n manifestReady.then(() => {\n if (!this.localVideo_) {\n // We've already been destroyed.\n return;\n }\n\n for (const name of shaka.cast.CastUtils.VideoInitStateAttributes) {\n this.localVideo_[name] = videoState[name];\n }\n\n for (const pair of shaka.cast.CastUtils.PlayerInitAfterLoadState) {\n const getter = pair[0];\n const setter = pair[1];\n const value = this.sender_.get('player', getter)();\n /** @type {Object} */(this.localPlayer_)[setter](value);\n }\n\n this.localPlayer_.setTextTrackVisibility(isTextTrackVisible);\n if (activeTextTrack) {\n this.localPlayer_.selectTextLanguage(\n activeTextTrack.language,\n activeTextTrack.roles,\n activeTextTrack.forced);\n }\n\n // Restore the original autoplay setting.\n this.localVideo_.autoplay = autoplay;\n if (assetUri) {\n // Resume playback with transferred state.\n this.localVideo_.play();\n }\n }, (error) => {\n // Pass any errors through to the app.\n goog.asserts.assert(error instanceof shaka.util.Error,\n 'Wrong error type!');\n const eventType = shaka.util.FakeEvent.EventName.Error;\n const data = (new Map()).set('detail', error);\n const event = new shaka.util.FakeEvent(eventType, data);\n this.localPlayer_.dispatchEvent(event);\n });\n }\n\n /**\n * @param {string} name\n * @return {?}\n * @private\n */\n videoProxyGet_(name) {\n if (name == 'addEventListener') {\n return (type, listener, options) => {\n return this.videoEventTarget_.addEventListener(type, listener, options);\n };\n }\n if (name == 'removeEventListener') {\n return (type, listener, options) => {\n return this.videoEventTarget_.removeEventListener(\n type, listener, options);\n };\n }\n\n // If we are casting, but the first update has not come in yet, use local\n // values, but not local methods.\n if (this.sender_.isCasting() && !this.sender_.hasRemoteProperties()) {\n const value = this.localVideo_[name];\n if (typeof value != 'function') {\n return value;\n }\n }\n\n // Use local values and methods if we are not casting.\n if (!this.sender_.isCasting()) {\n let value = this.localVideo_[name];\n if (typeof value == 'function') {\n // eslint-disable-next-line no-restricted-syntax\n value = value.bind(this.localVideo_);\n }\n return value;\n }\n\n return this.sender_.get('video', name);\n }\n\n /**\n * @param {string} name\n * @param {?} value\n * @private\n */\n videoProxySet_(name, value) {\n if (!this.sender_.isCasting()) {\n this.localVideo_[name] = value;\n return;\n }\n\n this.sender_.set('video', name, value);\n }\n\n /**\n * @param {!Event} event\n * @private\n */\n videoProxyLocalEvent_(event) {\n if (this.sender_.isCasting()) {\n // Ignore any unexpected local events while casting. Events can still be\n // fired by the local video and Player when we unload() after the Cast\n // connection is complete.\n return;\n }\n\n // Convert this real Event into a FakeEvent for dispatch from our\n // FakeEventListener.\n const fakeEvent = shaka.util.FakeEvent.fromRealEvent(event);\n this.videoEventTarget_.dispatchEvent(fakeEvent);\n }\n\n /**\n * @param {string} name\n * @return {?}\n * @private\n */\n playerProxyGet_(name) {\n // If name is a shortened compiled name, get the original version\n // from our map.\n if (this.compiledToExternNames_.has(name)) {\n name = this.compiledToExternNames_.get(name);\n }\n\n if (name == 'addEventListener') {\n return (type, listener, options) => {\n return this.playerEventTarget_.addEventListener(\n type, listener, options);\n };\n }\n if (name == 'removeEventListener') {\n return (type, listener, options) => {\n return this.playerEventTarget_.removeEventListener(\n type, listener, options);\n };\n }\n\n if (name == 'getMediaElement') {\n return () => this.videoProxy_;\n }\n\n if (name == 'getSharedConfiguration') {\n shaka.log.warning(\n 'Can\\'t share configuration across a network. Returning copy.');\n return this.sender_.get('player', 'getConfiguration');\n }\n\n if (name == 'getNetworkingEngine') {\n // Always returns a local instance, in case you need to make a request.\n // Issues a warning, in case you think you are making a remote request\n // or affecting remote filters.\n if (this.sender_.isCasting()) {\n shaka.log.warning('NOTE: getNetworkingEngine() is always local!');\n }\n return () => this.localPlayer_.getNetworkingEngine();\n }\n\n if (name == 'getDrmEngine') {\n // Always returns a local instance.\n if (this.sender_.isCasting()) {\n shaka.log.warning('NOTE: getDrmEngine() is always local!');\n }\n return () => this.localPlayer_.getDrmEngine();\n }\n\n if (name == 'getAdManager') {\n // Always returns a local instance.\n if (this.sender_.isCasting()) {\n shaka.log.warning('NOTE: getAdManager() is always local!');\n }\n return () => this.localPlayer_.getAdManager();\n }\n\n if (name == 'setVideoContainer') {\n // Always returns a local instance.\n if (this.sender_.isCasting()) {\n shaka.log.warning('NOTE: setVideoContainer() is always local!');\n }\n return (container) => this.localPlayer_.setVideoContainer(container);\n }\n\n if (this.sender_.isCasting()) {\n // These methods are unavailable or otherwise stubbed during casting.\n if (name == 'getManifest' || name == 'drmInfo') {\n return () => {\n shaka.log.alwaysWarn(name + '() does not work while casting!');\n return null;\n };\n }\n\n if (name == 'attach' || name == 'detach') {\n return () => {\n shaka.log.alwaysWarn(name + '() does not work while casting!');\n return Promise.resolve();\n };\n }\n } // if (this.sender_.isCasting())\n\n // If we are casting, but the first update has not come in yet, use local\n // getters, but not local methods.\n if (this.sender_.isCasting() && !this.sender_.hasRemoteProperties()) {\n if (shaka.cast.CastUtils.PlayerGetterMethods[name] ||\n shaka.cast.CastUtils.LargePlayerGetterMethods[name]) {\n const value = /** @type {Object} */(this.localPlayer_)[name];\n goog.asserts.assert(typeof value == 'function',\n 'only methods on Player');\n // eslint-disable-next-line no-restricted-syntax\n return value.bind(this.localPlayer_);\n }\n }\n\n // Use local getters and methods if we are not casting.\n if (!this.sender_.isCasting()) {\n const value = /** @type {Object} */(this.localPlayer_)[name];\n goog.asserts.assert(typeof value == 'function',\n 'only methods on Player');\n // eslint-disable-next-line no-restricted-syntax\n return value.bind(this.localPlayer_);\n }\n\n return this.sender_.get('player', name);\n }\n\n /**\n * @param {!Event} event\n * @private\n */\n playerProxyLocalEvent_(event) {\n if (this.sender_.isCasting()) {\n // Ignore any unexpected local events while casting.\n return;\n }\n\n this.playerEventTarget_.dispatchEvent(event);\n }\n\n /**\n * @param {string} targetName\n * @param {!shaka.util.FakeEvent} event\n * @private\n */\n onRemoteEvent_(targetName, event) {\n goog.asserts.assert(this.sender_.isCasting(),\n 'Should only receive remote events while casting');\n if (!this.sender_.isCasting()) {\n // Ignore any unexpected remote events.\n return;\n }\n\n if (targetName == 'video') {\n this.videoEventTarget_.dispatchEvent(event);\n } else if (targetName == 'player') {\n this.playerEventTarget_.dispatchEvent(event);\n }\n }\n};\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.cast.CastReceiver');\n\ngoog.require('goog.asserts');\ngoog.require('shaka.Player');\ngoog.require('shaka.cast.CastUtils');\ngoog.require('shaka.log');\ngoog.require('shaka.util.Error');\ngoog.require('shaka.util.EventManager');\ngoog.require('shaka.util.FakeEvent');\ngoog.require('shaka.util.FakeEventTarget');\ngoog.require('shaka.util.IDestroyable');\ngoog.require('shaka.util.Platform');\ngoog.require('shaka.util.Timer');\n\n\n/**\n * A receiver to communicate between the Chromecast-hosted player and the\n * sender application.\n *\n * @implements {shaka.util.IDestroyable}\n * @export\n */\nshaka.cast.CastReceiver = class extends shaka.util.FakeEventTarget {\n /**\n * @param {!HTMLMediaElement} video The local video element associated with\n * the local Player instance.\n * @param {!shaka.Player} player A local Player instance.\n * @param {function(Object)=} appDataCallback A callback to handle\n * application-specific data passed from the sender. This can come either\n * from a Shaka-based sender through CastProxy.setAppData, or from a\n * sender using the customData field of the LOAD message of the standard\n * Cast message namespace. It can also be null if no such data is sent.\n * @param {function(string):string=} contentIdCallback A callback to\n * retrieve manifest URI from the provided content id.\n */\n constructor(video, player, appDataCallback, contentIdCallback) {\n super();\n\n /** @private {HTMLMediaElement} */\n this.video_ = video;\n\n /** @private {shaka.Player} */\n this.player_ = player;\n\n /** @private {shaka.util.EventManager} */\n this.eventManager_ = new shaka.util.EventManager();\n\n /** @private {Object} */\n this.targets_ = {\n 'video': video,\n 'player': player,\n };\n\n /** @private {?function(Object)} */\n this.appDataCallback_ = appDataCallback || (() => {});\n\n /** @private {?function(string):string} */\n this.contentIdCallback_ = contentIdCallback ||\n /** @param {string} contentId\n @return {string} */\n ((contentId) => contentId);\n\n /**\n * A Cast metadata object, one of:\n * - https://developers.google.com/cast/docs/reference/messages#GenericMediaMetadata\n * - https://developers.google.com/cast/docs/reference/messages#MovieMediaMetadata\n * - https://developers.google.com/cast/docs/reference/messages#TvShowMediaMetadata\n * - https://developers.google.com/cast/docs/reference/messages#MusicTrackMediaMetadata\n * @private {Object}\n */\n this.metadata_ = null;\n\n /** @private {boolean} */\n this.isConnected_ = false;\n\n /** @private {boolean} */\n this.isIdle_ = true;\n\n /** @private {number} */\n this.updateNumber_ = 0;\n\n /** @private {boolean} */\n this.startUpdatingUpdateNumber_ = false;\n\n /** @private {boolean} */\n this.initialStatusUpdatePending_ = true;\n\n /** @private {cast.receiver.CastMessageBus} */\n this.shakaBus_ = null;\n\n /** @private {cast.receiver.CastMessageBus} */\n this.genericBus_ = null;\n\n /** @private {shaka.util.Timer} */\n this.pollTimer_ = new shaka.util.Timer(() => {\n this.pollAttributes_();\n });\n\n this.init_();\n }\n\n /**\n * @return {boolean} True if the cast API is available and there are\n * receivers.\n * @export\n */\n isConnected() {\n return this.isConnected_;\n }\n\n /**\n * @return {boolean} True if the receiver is not currently doing loading or\n * playing anything.\n * @export\n */\n isIdle() {\n return this.isIdle_;\n }\n\n /**\n * Set all Cast content metadata, as defined by the Cast SDK.\n * Should be called from an appDataCallback.\n *\n * For a simpler way to set basic metadata, see:\n * - setContentTitle()\n * - setContentImage()\n * - setContentArtist()\n *\n * @param {Object} metadata\n * A Cast metadata object, one of:\n * - https://developers.google.com/cast/docs/reference/messages#GenericMediaMetadata\n * - https://developers.google.com/cast/docs/reference/messages#MovieMediaMetadata\n * - https://developers.google.com/cast/docs/reference/messages#TvShowMediaMetadata\n * - https://developers.google.com/cast/docs/reference/messages#MusicTrackMediaMetadata\n * @export\n */\n setContentMetadata(metadata) {\n this.metadata_ = metadata;\n }\n\n /**\n * Clear all Cast content metadata.\n * Should be called from an appDataCallback.\n *\n * @export\n */\n clearContentMetadata() {\n this.metadata_ = null;\n }\n\n /**\n * Set the Cast content's title.\n * Should be called from an appDataCallback.\n *\n * @param {string} title\n * @export\n */\n setContentTitle(title) {\n if (!this.metadata_) {\n this.metadata_ = {\n 'metadataType': cast.receiver.media.MetadataType.GENERIC,\n };\n }\n this.metadata_['title'] = title;\n }\n\n /**\n * Set the Cast content's thumbnail image.\n * Should be called from an appDataCallback.\n *\n * @param {string} imageUrl\n * @export\n */\n setContentImage(imageUrl) {\n if (!this.metadata_) {\n this.metadata_ = {\n 'metadataType': cast.receiver.media.MetadataType.GENERIC,\n };\n }\n this.metadata_['images'] = [\n {\n 'url': imageUrl,\n },\n ];\n }\n\n /**\n * Set the Cast content's artist.\n * Also sets the metadata type to music.\n * Should be called from an appDataCallback.\n *\n * @param {string} artist\n * @export\n */\n setContentArtist(artist) {\n if (!this.metadata_) {\n this.metadata_ = {};\n }\n this.metadata_['artist'] = artist;\n this.metadata_['metadataType'] =\n cast.receiver.media.MetadataType.MUSIC_TRACK;\n }\n\n /**\n * Destroys the underlying Player, then terminates the cast receiver app.\n *\n * @override\n * @export\n */\n async destroy() {\n if (this.eventManager_) {\n this.eventManager_.release();\n this.eventManager_ = null;\n }\n\n const waitFor = [];\n if (this.player_) {\n waitFor.push(this.player_.destroy());\n this.player_ = null;\n }\n\n if (this.pollTimer_) {\n this.pollTimer_.stop();\n this.pollTimer_ = null;\n }\n\n this.video_ = null;\n this.targets_ = null;\n this.appDataCallback_ = null;\n this.isConnected_ = false;\n this.isIdle_ = true;\n this.shakaBus_ = null;\n this.genericBus_ = null;\n\n // FakeEventTarget implements IReleasable\n super.release();\n\n await Promise.all(waitFor);\n\n const manager = cast.receiver.CastReceiverManager.getInstance();\n manager.stop();\n }\n\n /** @private */\n init_() {\n const manager = cast.receiver.CastReceiverManager.getInstance();\n manager.onSenderConnected = () => this.onSendersChanged_();\n manager.onSenderDisconnected = () => this.onSendersChanged_();\n manager.onSystemVolumeChanged = () => this.fakeVolumeChangeEvent_();\n\n this.genericBus_ = manager.getCastMessageBus(\n shaka.cast.CastUtils.GENERIC_MESSAGE_NAMESPACE);\n this.genericBus_.onMessage = (event) => this.onGenericMessage_(event);\n\n this.shakaBus_ = manager.getCastMessageBus(\n shaka.cast.CastUtils.SHAKA_MESSAGE_NAMESPACE);\n this.shakaBus_.onMessage = (event) => this.onShakaMessage_(event);\n\n if (goog.DEBUG) {\n // Sometimes it is useful to load the receiver app in Chrome to work on\n // the UI. To avoid log spam caused by the SDK trying to connect to web\n // sockets that don't exist, in uncompiled mode we check if the hosting\n // browser is a Chromecast before starting the receiver manager. We\n // wouldn't do browser detection except for debugging, so only do this in\n // uncompiled mode.\n if (shaka.util.Platform.isChromecast()) {\n manager.start();\n }\n } else {\n manager.start();\n }\n\n for (const name of shaka.cast.CastUtils.VideoEvents) {\n this.eventManager_.listen(\n this.video_, name, (event) => this.proxyEvent_('video', event));\n }\n\n for (const key in shaka.util.FakeEvent.EventName) {\n const name = shaka.util.FakeEvent.EventName[key];\n this.eventManager_.listen(\n this.player_, name, (event) => this.proxyEvent_('player', event));\n }\n\n // Do not start excluding values from update messages until the video is\n // fully loaded.\n this.eventManager_.listen(this.video_, 'loadeddata', () => {\n this.startUpdatingUpdateNumber_ = true;\n });\n\n // Maintain idle state.\n this.eventManager_.listen(this.player_, 'loading', () => {\n // No longer idle once loading. This allows us to show the spinner during\n // the initial buffering phase.\n this.isIdle_ = false;\n this.onCastStatusChanged_();\n });\n this.eventManager_.listen(this.video_, 'playing', () => {\n // No longer idle once playing. This allows us to replay a video without\n // reloading.\n this.isIdle_ = false;\n this.onCastStatusChanged_();\n });\n this.eventManager_.listen(this.video_, 'pause', () => {\n this.onCastStatusChanged_();\n });\n this.eventManager_.listen(this.player_, 'unloading', () => {\n // Go idle when unloading content.\n this.isIdle_ = true;\n this.onCastStatusChanged_();\n });\n this.eventManager_.listen(this.video_, 'ended', () => {\n // Go idle 5 seconds after 'ended', assuming we haven't started again or\n // been destroyed.\n const timer = new shaka.util.Timer(() => {\n if (this.video_ && this.video_.ended) {\n this.isIdle_ = true;\n this.onCastStatusChanged_();\n }\n });\n\n timer.tickAfter(shaka.cast.CastReceiver.IDLE_INTERVAL);\n });\n\n // Do not start polling until after the sender's 'init' message is handled.\n }\n\n /** @private */\n onSendersChanged_() {\n // Reset update message frequency values, to make sure whomever joined\n // will get a full update message.\n this.updateNumber_ = 0;\n // Don't reset startUpdatingUpdateNumber_, because this operation does not\n // result in new data being loaded.\n this.initialStatusUpdatePending_ = true;\n\n const manager = cast.receiver.CastReceiverManager.getInstance();\n this.isConnected_ = manager.getSenders().length != 0;\n this.onCastStatusChanged_();\n }\n\n /**\n * Dispatch an event to notify the receiver app that the status has changed.\n * @private\n */\n async onCastStatusChanged_() {\n // Do this asynchronously so that synchronous changes to idle state (such as\n // Player calling unload() as part of load()) are coalesced before the event\n // goes out.\n await Promise.resolve();\n if (!this.player_) {\n // We've already been destroyed.\n return;\n }\n\n const event = new shaka.util.FakeEvent('caststatuschanged');\n this.dispatchEvent(event);\n // Send a media status message, with a media info message if appropriate.\n if (!this.maybeSendMediaInfoMessage_()) {\n this.sendMediaStatus_();\n }\n }\n\n /**\n * Take on initial state from the sender.\n * @param {shaka.cast.CastUtils.InitStateType} initState\n * @param {Object} appData\n * @private\n */\n async initState_(initState, appData) {\n // Take on player state first.\n for (const k in initState['player']) {\n const v = initState['player'][k];\n // All player state vars are setters to be called.\n /** @type {Object} */(this.player_)[k](v);\n }\n\n // Now process custom app data, which may add additional player configs:\n this.appDataCallback_(appData);\n\n const autoplay = this.video_.autoplay;\n\n // Now load the manifest, if present.\n if (initState['manifest']) {\n // Don't autoplay the content until we finish setting up initial state.\n this.video_.autoplay = false;\n try {\n await this.player_.load(initState['manifest'], initState['startTime']);\n } catch (error) {\n // Pass any errors through to the app.\n goog.asserts.assert(error instanceof shaka.util.Error,\n 'Wrong error type! Error: ' + error);\n const eventType = shaka.util.FakeEvent.EventName.Error;\n const data = (new Map()).set('detail', error);\n const event = new shaka.util.FakeEvent(eventType, data);\n // Only dispatch the event if the player still exists.\n if (this.player_) {\n this.player_.dispatchEvent(event);\n }\n return;\n }\n } else {\n // Ensure the below happens async.\n await Promise.resolve();\n }\n\n if (!this.player_) {\n // We've already been destroyed.\n return;\n }\n\n // Finally, take on video state and player's \"after load\" state.\n for (const k in initState['video']) {\n const v = initState['video'][k];\n this.video_[k] = v;\n }\n\n for (const k in initState['playerAfterLoad']) {\n const v = initState['playerAfterLoad'][k];\n // All player state vars are setters to be called.\n /** @type {Object} */(this.player_)[k](v);\n }\n\n // Restore original autoplay setting.\n this.video_.autoplay = autoplay;\n if (initState['manifest']) {\n // Resume playback with transferred state.\n this.video_.play();\n // Notify generic controllers of the state change.\n this.sendMediaStatus_();\n }\n }\n\n /**\n * @param {string} targetName\n * @param {!Event} event\n * @private\n */\n proxyEvent_(targetName, event) {\n if (!this.player_) {\n // The receiver is destroyed, so it should ignore further events.\n return;\n }\n\n // Poll and send an update right before we send the event. Some events\n // indicate an attribute change, so that change should be visible when the\n // event is handled.\n this.pollAttributes_();\n\n this.sendMessage_({\n 'type': 'event',\n 'targetName': targetName,\n 'event': event,\n }, this.shakaBus_);\n }\n\n /** @private */\n pollAttributes_() {\n // The poll timer may have been pre-empted by an event (e.g. timeupdate).\n // Calling |start| will cancel any pending calls and therefore will avoid us\n // polling too often.\n this.pollTimer_.tickAfter(shaka.cast.CastReceiver.POLL_INTERVAL);\n\n const update = {\n 'video': {},\n 'player': {},\n };\n\n for (const name of shaka.cast.CastUtils.VideoAttributes) {\n update['video'][name] = this.video_[name];\n }\n\n // TODO: Instead of this variable frequency update system, instead cache the\n // previous player state and only send over changed values, with complete\n // updates every ~20 updates to account for dropped messages.\n\n if (this.player_.isLive()) {\n const PlayerGetterMethodsThatRequireLive =\n shaka.cast.CastUtils.PlayerGetterMethodsThatRequireLive;\n for (const name in PlayerGetterMethodsThatRequireLive) {\n const frequency = PlayerGetterMethodsThatRequireLive[name];\n if (this.updateNumber_ % frequency == 0) {\n update['player'][name] = /** @type {Object} */ (this.player_)[name]();\n }\n }\n }\n for (const name in shaka.cast.CastUtils.PlayerGetterMethods) {\n const frequency = shaka.cast.CastUtils.PlayerGetterMethods[name];\n if (this.updateNumber_ % frequency == 0) {\n update['player'][name] = /** @type {Object} */ (this.player_)[name]();\n }\n }\n\n // Volume attributes are tied to the system volume.\n const manager = cast.receiver.CastReceiverManager.getInstance();\n const systemVolume = manager.getSystemVolume();\n if (systemVolume) {\n update['video']['volume'] = systemVolume.level;\n update['video']['muted'] = systemVolume.muted;\n }\n\n this.sendMessage_({\n 'type': 'update',\n 'update': update,\n }, this.shakaBus_);\n\n // Getters with large outputs each get sent in their own update message.\n for (const name in shaka.cast.CastUtils.LargePlayerGetterMethods) {\n const frequency = shaka.cast.CastUtils.LargePlayerGetterMethods[name];\n if (this.updateNumber_ % frequency == 0) {\n const update = {'player': {}};\n update['player'][name] = /** @type {Object} */ (this.player_)[name]();\n\n this.sendMessage_({\n 'type': 'update',\n 'update': update,\n }, this.shakaBus_);\n }\n }\n\n // Only start progressing the update number once data is loaded,\n // just in case any of the \"rarely changing\" properties with less frequent\n // update messages changes significantly during the loading process.\n if (this.startUpdatingUpdateNumber_) {\n this.updateNumber_ += 1;\n }\n\n this.maybeSendMediaInfoMessage_();\n }\n\n /**\n * Composes and sends a mediaStatus message if appropriate.\n * @return {boolean}\n * @private\n */\n maybeSendMediaInfoMessage_() {\n if (this.initialStatusUpdatePending_ &&\n (this.video_.duration || this.player_.isLive())) {\n // Send over a media status message to set the duration of the cast\n // dialogue.\n this.sendMediaInfoMessage_();\n this.initialStatusUpdatePending_ = false;\n return true;\n }\n return false;\n }\n\n /**\n * Composes and sends a mediaStatus message with a mediaInfo component.\n *\n * @param {number=} requestId\n * @private\n */\n sendMediaInfoMessage_(requestId = 0) {\n const media = {\n 'contentId': this.player_.getAssetUri(),\n 'streamType': this.player_.isLive() ? 'LIVE' : 'BUFFERED',\n // Sending an empty string for now since it's a mandatory field.\n // We don't have this info, and it doesn't seem to be useful, anyway.\n 'contentType': '',\n };\n if (!this.player_.isLive()) {\n // Optional, and only sent when the duration is known.\n media['duration'] = this.video_.duration;\n }\n if (this.metadata_) {\n media['metadata'] = this.metadata_;\n }\n this.sendMediaStatus_(requestId, media);\n }\n\n /**\n * Dispatch a fake 'volumechange' event to mimic the video element, since\n * volume changes are routed to the system volume on the receiver.\n * @private\n */\n fakeVolumeChangeEvent_() {\n // Volume attributes are tied to the system volume.\n const manager = cast.receiver.CastReceiverManager.getInstance();\n const systemVolume = manager.getSystemVolume();\n goog.asserts.assert(systemVolume, 'System volume should not be null!');\n\n if (systemVolume) {\n // Send an update message with just the latest volume level and muted\n // state.\n this.sendMessage_({\n 'type': 'update',\n 'update': {\n 'video': {\n 'volume': systemVolume.level,\n 'muted': systemVolume.muted,\n },\n },\n }, this.shakaBus_);\n }\n\n // Send another message with a 'volumechange' event to update the sender's\n // UI.\n this.sendMessage_({\n 'type': 'event',\n 'targetName': 'video',\n 'event': {'type': 'volumechange'},\n }, this.shakaBus_);\n }\n\n /**\n * Since this method is in the compiled library, make sure all messages are\n * read with quoted properties.\n * @param {!cast.receiver.CastMessageBus.Event} event\n * @private\n */\n onShakaMessage_(event) {\n const message = shaka.cast.CastUtils.deserialize(event.data);\n shaka.log.debug('CastReceiver: message', message);\n\n switch (message['type']) {\n case 'init':\n // Reset update message frequency values after initialization.\n this.updateNumber_ = 0;\n this.startUpdatingUpdateNumber_ = false;\n this.initialStatusUpdatePending_ = true;\n\n this.initState_(message['initState'], message['appData']);\n // The sender is supposed to reflect the cast system volume after\n // connecting. Using fakeVolumeChangeEvent_() would create a race on\n // the sender side, since it would have volume properties, but no\n // others.\n // This would lead to hasRemoteProperties() being true, even though a\n // complete set had never been sent.\n // Now that we have init state, this is a good time for the first update\n // message anyway.\n this.pollAttributes_();\n break;\n case 'appData':\n this.appDataCallback_(message['appData']);\n break;\n case 'set': {\n const targetName = message['targetName'];\n const property = message['property'];\n const value = message['value'];\n\n if (targetName == 'video') {\n // Volume attributes must be rerouted to the system.\n const manager = cast.receiver.CastReceiverManager.getInstance();\n if (property == 'volume') {\n manager.setSystemVolumeLevel(value);\n break;\n } else if (property == 'muted') {\n manager.setSystemVolumeMuted(value);\n break;\n }\n }\n\n this.targets_[targetName][property] = value;\n break;\n }\n case 'call': {\n const targetName = message['targetName'];\n const methodName = message['methodName'];\n const args = message['args'];\n const target = this.targets_[targetName];\n // eslint-disable-next-line prefer-spread\n target[methodName].apply(target, args);\n break;\n }\n case 'asyncCall': {\n const targetName = message['targetName'];\n const methodName = message['methodName'];\n if (targetName == 'player' && methodName == 'load') {\n // Reset update message frequency values after a load.\n this.updateNumber_ = 0;\n this.startUpdatingUpdateNumber_ = false;\n }\n const args = message['args'];\n const id = message['id'];\n const senderId = event.senderId;\n const target = this.targets_[targetName];\n // eslint-disable-next-line prefer-spread\n let p = target[methodName].apply(target, args);\n if (targetName == 'player' && methodName == 'load') {\n // Wait until the manifest has actually loaded to send another media\n // info message, so on a new load it doesn't send the old info over.\n p = p.then(() => {\n this.initialStatusUpdatePending_ = true;\n });\n }\n // Replies must go back to the specific sender who initiated, so that we\n // don't have to deal with conflicting IDs between senders.\n p.then(\n () => this.sendAsyncComplete_(senderId, id, /* error= */ null),\n (error) => this.sendAsyncComplete_(senderId, id, error));\n break;\n }\n }\n }\n\n /**\n * @param {!cast.receiver.CastMessageBus.Event} event\n * @private\n */\n onGenericMessage_(event) {\n const message = shaka.cast.CastUtils.deserialize(event.data);\n shaka.log.debug('CastReceiver: message', message);\n // TODO(ismena): error message on duplicate request id from the same sender\n switch (message['type']) {\n case 'PLAY':\n this.video_.play();\n // Notify generic controllers that the player state changed.\n // requestId=0 (the parameter) means that the message was not\n // triggered by a GET_STATUS request.\n this.sendMediaStatus_();\n break;\n case 'PAUSE':\n this.video_.pause();\n this.sendMediaStatus_();\n break;\n case 'SEEK': {\n const currentTime = message['currentTime'];\n const resumeState = message['resumeState'];\n if (currentTime != null) {\n this.video_.currentTime = Number(currentTime);\n }\n if (resumeState && resumeState == 'PLAYBACK_START') {\n this.video_.play();\n this.sendMediaStatus_();\n } else if (resumeState && resumeState == 'PLAYBACK_PAUSE') {\n this.video_.pause();\n this.sendMediaStatus_();\n }\n break;\n }\n case 'STOP':\n this.player_.unload().then(() => {\n if (!this.player_) {\n // We've already been destroyed.\n return;\n }\n\n this.sendMediaStatus_();\n });\n break;\n case 'GET_STATUS':\n // TODO(ismena): According to the SDK this is supposed to be a\n // unicast message to the sender that requested the status,\n // but it doesn't appear to be working.\n // Look into what's going on there and change this to be a\n // unicast.\n this.sendMediaInfoMessage_(Number(message['requestId']));\n break;\n case 'VOLUME': {\n const volumeObject = message['volume'];\n const level = volumeObject['level'];\n const muted = volumeObject['muted'];\n const oldVolumeLevel = this.video_.volume;\n const oldVolumeMuted = this.video_.muted;\n if (level != null) {\n this.video_.volume = Number(level);\n }\n if (muted != null) {\n this.video_.muted = muted;\n }\n // Notify generic controllers if the volume changed.\n if (oldVolumeLevel != this.video_.volume ||\n oldVolumeMuted != this.video_.muted) {\n this.sendMediaStatus_();\n }\n break;\n }\n case 'LOAD': {\n // Reset update message frequency values after a load.\n this.updateNumber_ = 0;\n this.startUpdatingUpdateNumber_ = false;\n // This already sends an update.\n this.initialStatusUpdatePending_ = false;\n\n const mediaInfo = message['media'];\n const contentId = mediaInfo['contentId'];\n const currentTime = message['currentTime'];\n const assetUri = this.contentIdCallback_(contentId);\n const autoplay = message['autoplay'] || true;\n const customData = mediaInfo['customData'];\n\n this.appDataCallback_(customData);\n\n if (autoplay) {\n this.video_.autoplay = true;\n }\n this.player_.load(assetUri, currentTime).then(() => {\n if (!this.player_) {\n // We've already been destroyed.\n return;\n }\n\n // Notify generic controllers that the media has changed.\n this.sendMediaInfoMessage_();\n }).catch((error) => {\n goog.asserts.assert(error instanceof shaka.util.Error,\n 'Wrong error type!');\n\n // Load failed. Dispatch the error message to the sender.\n let type = 'LOAD_FAILED';\n if (error.category == shaka.util.Error.Category.PLAYER &&\n error.code == shaka.util.Error.Code.LOAD_INTERRUPTED) {\n type = 'LOAD_CANCELLED';\n }\n\n this.sendMessage_({\n 'requestId': Number(message['requestId']),\n 'type': type,\n }, this.genericBus_);\n });\n break;\n }\n default:\n shaka.log.warning(\n 'Unrecognized message type from the generic Chromecast controller!',\n message['type']);\n // Dispatch an error to the sender.\n this.sendMessage_({\n 'requestId': Number(message['requestId']),\n 'type': 'INVALID_REQUEST',\n 'reason': 'INVALID_COMMAND',\n }, this.genericBus_);\n break;\n }\n }\n\n /**\n * Tell the sender that the async operation is complete.\n * @param {string} senderId\n * @param {string} id\n * @param {shaka.util.Error} error\n * @private\n */\n sendAsyncComplete_(senderId, id, error) {\n if (!this.player_) {\n // We've already been destroyed.\n return;\n }\n\n this.sendMessage_({\n 'type': 'asyncComplete',\n 'id': id,\n 'error': error,\n }, this.shakaBus_, senderId);\n }\n\n /**\n * Since this method is in the compiled library, make sure all messages passed\n * in here were created with quoted property names.\n * @param {!Object} message\n * @param {cast.receiver.CastMessageBus} bus\n * @param {string=} senderId\n * @private\n */\n sendMessage_(message, bus, senderId) {\n // Cuts log spam when debugging the receiver UI in Chrome.\n if (!this.isConnected_) {\n return;\n }\n\n const serialized = shaka.cast.CastUtils.serialize(message);\n if (senderId) {\n bus.getCastChannel(senderId).send(serialized);\n } else {\n bus.broadcast(serialized);\n }\n }\n\n /**\n * @return {string}\n * @private\n */\n getPlayState_() {\n const playState = shaka.cast.CastReceiver.PLAY_STATE;\n if (this.isIdle_) {\n return playState.IDLE;\n } else if (this.player_.isBuffering()) {\n return playState.BUFFERING;\n } else if (this.video_.paused) {\n return playState.PAUSED;\n } else {\n return playState.PLAYING;\n }\n }\n\n /**\n * @param {number=} requestId\n * @param {Object=} media\n * @private\n */\n sendMediaStatus_(requestId = 0, media = null) {\n const mediaStatus = {\n // mediaSessionId is a unique ID for the playback of this specific\n // session.\n // It's used to identify a specific instance of a playback.\n // We don't support multiple playbacks, so just return 0.\n 'mediaSessionId': 0,\n 'playbackRate': this.video_.playbackRate,\n 'playerState': this.getPlayState_(),\n 'currentTime': this.video_.currentTime,\n // supportedMediaCommands is a sum of all the flags of commands that the\n // player supports.\n // The list of comands with respective flags is:\n // 1 - Pause\n // 2 - Seek\n // 4 - Stream volume\n // 8 - Stream mute\n // 16 - Skip forward\n // 32 - Skip backward\n // We support all of them, and their sum is 63.\n 'supportedMediaCommands': 63,\n 'volume': {\n 'level': this.video_.volume,\n 'muted': this.video_.muted,\n },\n };\n\n if (media) {\n mediaStatus['media'] = media;\n }\n\n const ret = {\n 'requestId': requestId,\n 'type': 'MEDIA_STATUS',\n 'status': [mediaStatus],\n };\n\n this.sendMessage_(ret, this.genericBus_);\n }\n};\n\n/** @type {number} The interval, in seconds, to poll for changes. */\nshaka.cast.CastReceiver.POLL_INTERVAL = 0.5;\n\n/** @type {number} The interval, in seconds, to go \"idle\". */\nshaka.cast.CastReceiver.IDLE_INTERVAL = 5;\n\n/**\n * @enum {string}\n */\nshaka.cast.CastReceiver.PLAY_STATE = {\n IDLE: 'IDLE',\n PLAYING: 'PLAYING',\n BUFFERING: 'BUFFERING',\n PAUSED: 'PAUSED',\n};\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.cea.CeaUtils');\ngoog.provide('shaka.cea.CeaUtils.StyledChar');\n\ngoog.require('shaka.text.Cue');\n\n\nshaka.cea.CeaUtils = class {\n /**\n * Emits a closed caption based on the state of the buffer.\n * @param {!shaka.text.Cue} topLevelCue\n * @param {string} stream\n * @param {!Array>} memory\n * @param {number} startTime Start time of the cue.\n * @param {number} endTime End time of the cue.\n * @return {?shaka.extern.ICaptionDecoder.ClosedCaption}\n */\n static getParsedCaption(topLevelCue, stream, memory, startTime, endTime) {\n if (startTime >= endTime) {\n return null;\n }\n\n // Find the first and last row that contains characters.\n let firstNonEmptyRow = -1;\n let lastNonEmptyRow = -1;\n\n for (let i = 0; i < memory.length; i++) {\n if (memory[i].some((e) => e != null && e.getChar().trim() != '')) {\n firstNonEmptyRow = i;\n break;\n }\n }\n\n for (let i = memory.length - 1; i >= 0; i--) {\n if (memory[i].some((e) => e != null && e.getChar().trim() != '')) {\n lastNonEmptyRow = i;\n break;\n }\n }\n\n // Exit early if no non-empty row was found.\n if (firstNonEmptyRow === -1 || lastNonEmptyRow === -1) {\n return null;\n }\n\n // Keeps track of the current styles for a cue being emitted.\n let currentUnderline = false;\n let currentItalics = false;\n let currentTextColor = shaka.cea.CeaUtils.DEFAULT_TXT_COLOR;\n let currentBackgroundColor = shaka.cea.CeaUtils.DEFAULT_BG_COLOR;\n\n // Create first cue that will be nested in top level cue. Default styles.\n let currentCue = shaka.cea.CeaUtils.createStyledCue(\n startTime, endTime, currentUnderline, currentItalics,\n currentTextColor, currentBackgroundColor);\n\n // Logic: Reduce rows into a single top level cue containing nested cues.\n // Each nested cue corresponds either a style change or a line break.\n\n for (let i = firstNonEmptyRow; i <= lastNonEmptyRow; i++) {\n // Find the first and last non-empty characters in this row. We do this so\n // no styles creep in before/after the first and last non-empty chars.\n const row = memory[i];\n let firstNonEmptyCol = -1;\n let lastNonEmptyCol = -1;\n\n for (let j = 0; j < row.length; j++) {\n if (row[j] != null && row[j].getChar().trim() !== '') {\n firstNonEmptyCol = j;\n break;\n }\n }\n\n for (let j = row.length - 1; j >= 0; j--) {\n if (row[j] != null && row[j].getChar().trim() !== '') {\n lastNonEmptyCol = j;\n break;\n }\n }\n\n // If no non-empty char. was found in this row, it must be a linebreak.\n if (firstNonEmptyCol === -1 || lastNonEmptyCol === -1) {\n const linebreakCue = shaka.cea.CeaUtils\n .createLineBreakCue(startTime, endTime);\n topLevelCue.nestedCues.push(linebreakCue);\n continue;\n }\n\n for (let j = firstNonEmptyCol; j <= lastNonEmptyCol; j++) {\n const styledChar = row[j];\n\n // A null between non-empty cells in a row is handled as a space.\n if (!styledChar) {\n currentCue.payload += ' ';\n continue;\n }\n const underline = styledChar.isUnderlined();\n const italics = styledChar.isItalicized();\n const textColor = styledChar.getTextColor();\n const backgroundColor = styledChar.getBackgroundColor();\n\n // If any style properties have changed, we need to open a new cue.\n if (underline != currentUnderline || italics != currentItalics ||\n textColor != currentTextColor ||\n backgroundColor != currentBackgroundColor) {\n // Push the currently built cue and start a new cue, with new styles.\n if (currentCue.payload) {\n topLevelCue.nestedCues.push(currentCue);\n }\n currentCue = shaka.cea.CeaUtils.createStyledCue(\n startTime, endTime, underline,\n italics, textColor, backgroundColor);\n\n currentUnderline = underline;\n currentItalics = italics;\n currentTextColor = textColor;\n currentBackgroundColor = backgroundColor;\n }\n\n currentCue.payload += styledChar.getChar();\n }\n if (currentCue.payload) {\n topLevelCue.nestedCues.push(currentCue);\n }\n\n // Add a linebreak since the row just ended.\n if (i !== lastNonEmptyRow) {\n const linebreakCue = shaka.cea.CeaUtils\n .createLineBreakCue(startTime, endTime);\n topLevelCue.nestedCues.push(linebreakCue);\n }\n\n // Create a new cue.\n currentCue = shaka.cea.CeaUtils.createStyledCue(\n startTime, endTime, currentUnderline, currentItalics,\n currentTextColor, currentBackgroundColor);\n }\n\n if (topLevelCue.nestedCues.length) {\n return {\n cue: topLevelCue,\n stream,\n };\n }\n\n return null;\n }\n\n /**\n * @param {number} startTime\n * @param {number} endTime\n * @param {boolean} underline\n * @param {boolean} italics\n * @param {string} txtColor\n * @param {string} bgColor\n * @return {!shaka.text.Cue}\n */\n static createStyledCue(startTime, endTime, underline,\n italics, txtColor, bgColor) {\n const cue = new shaka.text.Cue(startTime, endTime, /* payload= */ '');\n if (underline) {\n cue.textDecoration.push(shaka.text.Cue.textDecoration.UNDERLINE);\n }\n if (italics) {\n cue.fontStyle = shaka.text.Cue.fontStyle.ITALIC;\n }\n cue.color = txtColor;\n cue.backgroundColor = bgColor;\n return cue;\n }\n\n /**\n * @param {number} startTime\n * @param {number} endTime\n * @return {!shaka.text.Cue}\n */\n static createLineBreakCue(startTime, endTime) {\n const linebreakCue = new shaka.text.Cue(\n startTime, endTime, /* payload= */ '');\n linebreakCue.lineBreak = true;\n return linebreakCue;\n }\n};\n\nshaka.cea.CeaUtils.StyledChar = class {\n /**\n * @param {string} character\n * @param {boolean} underline\n * @param {boolean} italics\n * @param {string} backgroundColor\n * @param {string} textColor\n */\n constructor(character, underline, italics, backgroundColor, textColor) {\n /**\n * @private {string}\n */\n this.character_ = character;\n\n /**\n * @private {boolean}\n */\n this.underline_ = underline;\n\n /**\n * @private {boolean}\n */\n this.italics_ = italics;\n\n /**\n * @private {string}\n */\n this.backgroundColor_ = backgroundColor;\n\n /**\n * @private {string}\n */\n this.textColor_ = textColor;\n }\n\n /**\n * @return {string}\n */\n getChar() {\n return this.character_;\n }\n\n /**\n * @return {boolean}\n */\n isUnderlined() {\n return this.underline_;\n }\n\n /**\n * @return {boolean}\n */\n isItalicized() {\n return this.italics_;\n }\n\n /**\n * @return {string}\n */\n getBackgroundColor() {\n return this.backgroundColor_;\n }\n\n /**\n * @return {string}\n */\n getTextColor() {\n return this.textColor_;\n }\n};\n\n/**\n * Default background color for text.\n * @const {string}\n */\nshaka.cea.CeaUtils.DEFAULT_BG_COLOR = 'black';\n\n/**\n * Default text color.\n * @const {string}\n */\nshaka.cea.CeaUtils.DEFAULT_TXT_COLOR = 'white';\n\n/**\n * NALU type for Supplemental Enhancement Information (SEI) for H.264.\n * @const {number}\n */\nshaka.cea.CeaUtils.H264_NALU_TYPE_SEI = 0x06;\n\n/**\n * NALU type for Supplemental Enhancement Information (SEI) for H.265.\n * @const {number}\n */\nshaka.cea.CeaUtils.H265_PREFIX_NALU_TYPE_SEI = 0x27;\n\n/**\n * NALU type for Supplemental Enhancement Information (SEI) for H.265.\n * @const {number}\n */\nshaka.cea.CeaUtils.H265_SUFFIX_NALU_TYPE_SEI = 0x28;\n\n/**\n * NALU type for Supplemental Enhancement Information (SEI) for H.266.\n * @const {number}\n */\nshaka.cea.CeaUtils.H266_PREFIX_NALU_TYPE_SEI = 0x17;\n\n/**\n * NALU type for Supplemental Enhancement Information (SEI) for H.266.\n * @const {number}\n */\nshaka.cea.CeaUtils.H266_SUFFIX_NALU_TYPE_SEI = 0x18;\n\n/**\n * Default timescale value for a track.\n * @const {number}\n */\nshaka.cea.CeaUtils.DEFAULT_TIMESCALE_VALUE = 90000;\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.cea.Cea608Memory');\n\ngoog.require('shaka.cea.CeaUtils');\ngoog.require('shaka.text.Cue');\n\n\n/**\n * CEA-608 captions memory/buffer.\n */\nshaka.cea.Cea608Memory = class {\n /**\n * @param {number} fieldNum Field number.\n * @param {number} channelNum Channel number.\n */\n constructor(fieldNum, channelNum) {\n /**\n * Buffer for storing decoded characters.\n * @private @const {!Array>}\n */\n this.rows_ = [];\n\n /**\n * Current row.\n * @private {number}\n */\n this.row_ = 1;\n\n /**\n * Number of rows in the scroll window. Used for rollup mode.\n * @private {number}\n */\n this.scrollRows_ = 0;\n\n /**\n * Field number.\n * @private {number}\n */\n this.fieldNum_ = fieldNum;\n\n /**\n * Channel number.\n * @private {number}\n */\n this.channelNum_ = channelNum;\n\n /**\n * @private {boolean}\n */\n this.underline_ = false;\n\n /**\n * @private {boolean}\n */\n this.italics_ = false;\n\n /**\n * @private {string}\n */\n this.textColor_ = shaka.cea.CeaUtils.DEFAULT_TXT_COLOR;\n\n /**\n * @private {string}\n */\n this.backgroundColor_ = shaka.cea.CeaUtils.DEFAULT_BG_COLOR;\n\n /**\n * @private {?number}\n */\n this.offset_ = null;\n\n /**\n * @private {?number}\n */\n this.indent_ = null;\n\n this.reset();\n }\n\n /**\n * Emits a closed caption based on the state of the buffer.\n * @param {number} startTime Start time of the cue.\n * @param {number} endTime End time of the cue.\n * @return {?shaka.extern.ICaptionDecoder.ClosedCaption}\n */\n forceEmit(startTime, endTime) {\n const Cea608Memory = shaka.cea.Cea608Memory;\n const stream = `CC${((this.fieldNum_<< 1) | this.channelNum_) + 1}`;\n const topLevelCue = new shaka.text.Cue(\n startTime, endTime, /* payload= */ '');\n topLevelCue.lineInterpretation =\n shaka.text.Cue.lineInterpretation.PERCENTAGE;\n let line = Cea608Memory.ROW_TO_LINE_CONVERSION_.get(this.row_);\n if (line) {\n topLevelCue.line = line;\n }\n if (this.indent_ != null && this.offset_ != null) {\n topLevelCue.position = 10 + Math.min(70, this.indent_ * 10) +\n this.offset_ * 2.5;\n }\n const ret = shaka.cea.CeaUtils.getParsedCaption(\n topLevelCue, stream, this.rows_, startTime, endTime);\n // If the text and its lines are larger than what we can show on the\n // screen, we move the lines up so that the text does not come out of the\n // video.\n if (ret && (this.row_ + ret.cue.nestedCues.length - 3) > 15) {\n const newLinePosition = this.row_ + 3 - ret.cue.nestedCues.length;\n line = Cea608Memory.ROW_TO_LINE_CONVERSION_.get(newLinePosition);\n if (line) {\n topLevelCue.line = line;\n }\n }\n return ret;\n }\n\n /**\n * Resets the memory buffer.\n */\n reset() {\n this.resetAllRows();\n this.row_ = 1;\n }\n\n /**\n * @return {number}\n */\n getRow() {\n return this.row_;\n }\n\n /**\n * @param {number} row\n */\n setRow(row) {\n this.row_ = row;\n }\n\n /**\n * @return {number}\n */\n getScrollSize() {\n return this.scrollRows_;\n }\n\n /**\n * @param {number} scrollRows\n */\n setScrollSize(scrollRows) {\n this.scrollRows_ = scrollRows;\n }\n\n /**\n * Adds a character to the buffer.\n * @param {!shaka.cea.Cea608Memory.CharSet} set Character set.\n * @param {number} b CC byte to add.\n */\n addChar(set, b) {\n // Valid chars are in the range [0x20, 0x7f]\n if (b < 0x20 || b > 0x7f) {\n return;\n }\n\n let char = '';\n switch (set) {\n case shaka.cea.Cea608Memory.CharSet.BASIC_NORTH_AMERICAN:\n if (shaka.cea.Cea608Memory.CharSet.BasicNorthAmericanChars.has(b)) {\n char =\n shaka.cea.Cea608Memory.CharSet.BasicNorthAmericanChars.get(b);\n } else {\n // Regular ASCII\n char = String.fromCharCode(b);\n }\n break;\n case shaka.cea.Cea608Memory.CharSet.SPECIAL_NORTH_AMERICAN:\n char =\n shaka.cea.Cea608Memory.CharSet.SpecialNorthAmericanChars.get(b);\n break;\n case shaka.cea.Cea608Memory.CharSet.SPANISH_FRENCH:\n // Extended charset does a BS over preceding char, 6.4.2 EIA-608-B.\n this.eraseChar();\n char =\n shaka.cea.Cea608Memory.CharSet.ExtendedSpanishFrench.get(b);\n break;\n case shaka.cea.Cea608Memory.CharSet.PORTUGUESE_GERMAN:\n this.eraseChar();\n char =\n shaka.cea.Cea608Memory.CharSet.ExtendedPortugueseGerman.get(b);\n break;\n }\n\n if (char) {\n const styledChar = new shaka.cea.CeaUtils.StyledChar(\n char, this.underline_, this.italics_,\n this.backgroundColor_, this.textColor_);\n this.rows_[this.row_].push(styledChar);\n }\n }\n\n /**\n * Erases a character from the buffer.\n */\n eraseChar() {\n this.rows_[this.row_].pop();\n }\n\n /**\n * Moves rows of characters.\n * @param {number} dst Destination row index.\n * @param {number} src Source row index.\n * @param {number} count Count of rows to move.\n */\n moveRows(dst, src, count) {\n if (src < 0 || dst < 0) {\n return;\n }\n\n if (dst >= src) {\n for (let i = count-1; i >= 0; i--) {\n this.rows_[dst + i] = this.rows_[src + i].map((e) => e);\n }\n } else {\n for (let i = 0; i < count; i++) {\n this.rows_[dst + i] = this.rows_[src + i].map((e) => e);\n }\n }\n }\n\n /**\n * Resets rows of characters.\n * @param {number} idx Starting index.\n * @param {number} count Count of rows to reset.\n */\n resetRows(idx, count) {\n for (let i = 0; i <= count; i++) {\n this.rows_[idx + i] = [];\n }\n }\n\n /**\n * Resets the entire memory buffer.\n */\n resetAllRows() {\n this.resetRows(0, shaka.cea.Cea608Memory.CC_ROWS);\n }\n\n /**\n * Erases entire memory buffer.\n * Doesn't change scroll state or number of rows.\n */\n eraseBuffer() {\n this.row_ = (this.scrollRows_ > 0) ? this.scrollRows_ : 0;\n this.resetAllRows();\n }\n\n /**\n * @param {boolean} underline\n */\n setUnderline(underline) {\n this.underline_ = underline;\n }\n\n /**\n * @param {boolean} italics\n */\n setItalics(italics) {\n this.italics_ = italics;\n }\n\n /**\n * @param {string} color\n */\n setTextColor(color) {\n this.textColor_ = color;\n }\n\n /**\n * @param {string} color\n */\n setBackgroundColor(color) {\n this.backgroundColor_ = color;\n }\n\n /**\n * @param {number} offset\n */\n setOffset(offset) {\n this.offset_ = offset;\n }\n\n /**\n * @param {?number} indent\n */\n setIndent(indent) {\n this.indent_ = indent;\n }\n};\n\n/**\n * Maximum number of rows in the buffer.\n * @const {number}\n */\nshaka.cea.Cea608Memory.CC_ROWS = 15;\n\n/**\n * Characters sets.\n * @const @enum {number}\n */\nshaka.cea.Cea608Memory.CharSet = {\n BASIC_NORTH_AMERICAN: 0,\n SPECIAL_NORTH_AMERICAN: 1,\n SPANISH_FRENCH: 2,\n PORTUGUESE_GERMAN: 3,\n};\n\n/**\n * Basic North American char set deviates from ASCII with these exceptions.\n * @private @const {!Map}\n */\nshaka.cea.Cea608Memory.CharSet.BasicNorthAmericanChars = new Map([\n [0x27, '’'], [0x2a, 'á'], [0x5c, 'é'], [0x5c, 'é'], [0x5e, 'í'], [0x5f, 'ó'],\n [0x60, 'ú'], [0x7b, 'ç'], [0x7c, '÷'], [0x7d, 'Ñ'], [0x7e, 'ñ'], [0x7f, '█'],\n]);\n\n/**\n * Special North American char set.\n * Note: Transparent Space is currently implemented as a regular space.\n * @private @const {!Map}\n */\nshaka.cea.Cea608Memory.CharSet.SpecialNorthAmericanChars = new Map([\n [0x30, '®'], [0x31, '°'], [0x32, '½'], [0x33, '¿'], [0x34, '™'], [0x35, '¢'],\n [0x36, '£'], [0x37, '♪'], [0x38, 'à'], [0x39, ' '], [0x3a, 'è'], [0x3b, 'â'],\n [0x3c, 'ê'], [0x3d, 'î'], [0x3e, 'ô'], [0x3f, 'û'],\n]);\n\n/**\n * Extended Spanish/Misc/French char set.\n * @private @const {!Map}\n */\nshaka.cea.Cea608Memory.CharSet.ExtendedSpanishFrench = new Map([\n [0x20, 'Á'], [0x21, 'É'], [0x22, 'Ó'], [0x23, 'Ú'], [0x24, 'Ü'], [0x25, 'ü'],\n [0x26, '‘'], [0x27, '¡'], [0x28, '*'], [0x29, '\\''], [0x2a, '─'], [0x2b, '©'],\n [0x2c, '℠'], [0x2d, '·'], [0x2e, '“'], [0x2f, '”'], [0x30, 'À'], [0x31, 'Â'],\n [0x32, 'Ç'], [0x33, 'È'], [0x34, 'Ê'], [0x35, 'Ë'], [0x36, 'ë'], [0x37, 'Î'],\n [0x38, 'Ï'], [0x39, 'ï'], [0x3a, 'Ô'], [0x3b, 'Ù'], [0x3c, 'ù'], [0x3d, 'Û'],\n [0x3e, '«'], [0x3f, '»'],\n]);\n\n/**\n * Extended Portuguese/German/Danish char set.\n * @private @const {!Map}\n */\nshaka.cea.Cea608Memory.CharSet.ExtendedPortugueseGerman = new Map([\n [0x20, 'Ã'], [0x21, 'ã'], [0x22, 'Í'], [0x23, 'Ì'], [0x24, 'ì'], [0x25, 'Ò'],\n [0x26, 'ò'], [0x27, 'Õ'], [0x28, 'õ'], [0x29, '{'], [0x2a, '}'], [0x2b, '\\\\'],\n [0x2c, '^'], [0x2d, '_'], [0x2e, '|'], [0x2f, '~'], [0x30, 'Ä'], [0x31, 'ä'],\n [0x32, 'Ö'], [0x33, 'ö'], [0x34, 'ß'], [0x35, '¥'], [0x36, '¤'], [0x37, '│'],\n [0x38, 'Å'], [0x39, 'å'], [0x3a, 'Ø'], [0x3b, 'ø'], [0x3c, '┌'], [0x3d, '┐'],\n [0x3e, '└'], [0x3f, '┘'],\n]);\n\n/**\n * @private @const {!Map}\n */\nshaka.cea.Cea608Memory.ROW_TO_LINE_CONVERSION_ = new Map([\n [1, 10], [2, 15.33], [3, 20.66], [4, 26], [5, 31.33], [6, 36.66], [7, 42],\n [8, 47.33], [9, 52.66], [10, 58], [11, 63.33], [12, 68.66], [13, 74],\n [14, 79.33], [15, 84.66],\n]);\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.cea.Cea608DataChannel');\n\ngoog.require('shaka.cea.Cea608Memory');\ngoog.require('shaka.cea.CeaUtils');\ngoog.require('shaka.log');\n\n\n/**\n * 608 closed captions channel.\n */\nshaka.cea.Cea608DataChannel = class {\n /**\n * @param {number} fieldNum Field number.\n * @param {number} channelNum Channel number.\n */\n constructor(fieldNum, channelNum) {\n /**\n * Current Caption Type.\n * @public {!shaka.cea.Cea608DataChannel.CaptionType}\n */\n this.type_ = shaka.cea.Cea608DataChannel.CaptionType.NONE;\n\n /**\n * Text buffer for CEA-608 \"text mode\". Although, we don't emit text mode.\n * So, this buffer serves as a no-op placeholder, just in case we receive\n * captions that toggle text mode.\n * @private @const {!shaka.cea.Cea608Memory}\n */\n this.text_ =\n new shaka.cea.Cea608Memory(fieldNum, channelNum);\n\n /**\n * Displayed memory.\n * @private {!shaka.cea.Cea608Memory}\n */\n this.displayedMemory_ =\n new shaka.cea.Cea608Memory(fieldNum, channelNum);\n\n /**\n * Non-displayed memory.\n * @private {!shaka.cea.Cea608Memory}\n */\n this.nonDisplayedMemory_ =\n new shaka.cea.Cea608Memory(fieldNum, channelNum);\n\n /**\n * Points to current buffer.\n * @private {!shaka.cea.Cea608Memory}\n */\n this.curbuf_ = this.nonDisplayedMemory_;\n\n /**\n * End time of the previous caption, serves as start time of next caption.\n * @private {number}\n */\n this.prevEndTime_ = 0;\n\n /**\n * Last control pair, 16 bits representing byte 1 and byte 2\n * @private {?number}\n */\n this.lastcp_ = null;\n }\n\n /**\n * Resets channel state.\n */\n reset() {\n this.type_ = shaka.cea.Cea608DataChannel.CaptionType.NONE;\n this.curbuf_ = this.nonDisplayedMemory_;\n this.lastcp_ = null;\n this.displayedMemory_.reset();\n this.nonDisplayedMemory_.reset();\n this.text_.reset();\n }\n\n /**\n * Set the initial PTS, which may not be 0 if we start decoding at a later\n * point in the stream. Without this, the first cue's startTime can be way\n * off.\n *\n * @param {number} pts\n */\n firstPts(pts) {\n this.prevEndTime_ = pts;\n }\n\n /**\n * Gets the row index from a Preamble Address Code byte pair.\n * @param {number} b1 Byte 1.\n * @param {number} b2 Byte 2.\n * @return {number} Row index.\n * @private\n */\n pacToRow_(b1, b2) {\n const ccrowtab = [\n 11, 11, // 0x00 or 0x01\n 1, 2, // 0x02 -> 0x03\n 3, 4, // 0x04 -> 0x05\n 12, 13, // 0x06 -> 0x07\n 14, 15, // 0x08 -> 0x09\n 5, 6, // 0x0A -> 0x0B\n 7, 8, // 0x0C -> 0x0D\n 9, 10, // 0x0E -> 0x0F\n ];\n return ccrowtab[((b1 & 0x07) << 1) | ((b2 >> 5) & 0x01)];\n }\n\n /**\n * PAC - Preamble Address Code.\n * b1 is of the form |P|0|0|1|C|0|ROW|\n * b2 is of the form |P|1|N|ATTRIBUTE|U|\n * @param {number} b1 Byte 1.\n * @param {number} b2 Byte 2.\n * @private\n */\n controlPac_(b1, b2) {\n const row = this.pacToRow_(b1, b2);\n\n // Set up the defaults.\n let textColor = shaka.cea.CeaUtils.DEFAULT_TXT_COLOR;\n let italics = false;\n let indent = null;\n\n // Get PAC index;\n let pacIndex;\n if (b2 > 0x5f) {\n pacIndex = b2 - 0x60;\n } else {\n pacIndex = b2 - 0x40;\n }\n\n if (pacIndex <= 0xd) {\n const colorIndex = Math.floor(pacIndex / 2);\n textColor = shaka.cea.Cea608DataChannel.TEXT_COLORS[colorIndex];\n } else if (pacIndex <= 0xf) {\n italics = true; // color stays white\n } else {\n indent = Math.floor((pacIndex - 0x10) / 2);\n }\n\n // PACs toggle underline on the last bit of b2.\n const underline = (b2 & 0x01) === 0x01;\n\n if (this.type_ === shaka.cea.Cea608DataChannel.CaptionType.TEXT) {\n // Don't execute the PAC if in text mode.\n return;\n }\n\n // Execute the PAC.\n const buf = this.curbuf_;\n\n // Move entire scroll window to a new base in rollup mode.\n if (this.type_ === shaka.cea.Cea608DataChannel.CaptionType.ROLLUP &&\n row !== buf.getRow()) {\n const oldTopRow = 1 + buf.getRow() - buf.getScrollSize();\n const newTopRow = 1 + row - buf.getScrollSize();\n\n // Shift up the scroll window.\n buf.moveRows(newTopRow, oldTopRow, buf.getScrollSize());\n\n // Clear everything outside of the new scroll window.\n buf.resetRows(0, newTopRow - 1);\n buf.resetRows(row + 1,\n shaka.cea.Cea608Memory.CC_ROWS - row);\n }\n buf.setRow(row);\n\n buf.setUnderline(underline);\n buf.setItalics(italics);\n buf.setTextColor(textColor);\n buf.setIndent(indent);\n\n // Clear the background color, since new row (PAC) should reset ALL styles.\n buf.setBackgroundColor(shaka.cea.CeaUtils.DEFAULT_BG_COLOR);\n }\n\n /**\n * Mid-Row control code handler.\n * @param {number} b2 Byte #2.\n * @private\n */\n controlMidrow_(b2) {\n // Clear all pre-existing midrow style attributes.\n this.curbuf_.setUnderline(false);\n this.curbuf_.setItalics(false);\n this.curbuf_.setTextColor(shaka.cea.CeaUtils.DEFAULT_TXT_COLOR);\n\n // Mid-row attrs use a space.\n this.curbuf_.addChar(\n shaka.cea.Cea608Memory.CharSet.BASIC_NORTH_AMERICAN, ' '.charCodeAt(0));\n\n let textColor = shaka.cea.CeaUtils.DEFAULT_TXT_COLOR;\n let italics = false;\n\n // Midrow codes set underline on last (LSB) bit.\n const underline = (b2 & 0x01) === 0x01;\n\n // b2 has the form |P|0|1|0|STYLE|U|\n textColor = shaka.cea.Cea608DataChannel.TEXT_COLORS[(b2 & 0xe) >> 1];\n if (textColor === 'white_italics') {\n textColor = 'white';\n italics = true;\n }\n\n this.curbuf_.setUnderline(underline);\n this.curbuf_.setItalics(italics);\n this.curbuf_.setTextColor(textColor);\n }\n\n /**\n * Background attribute control code handler.\n * @param {number} b1 Byte #1\n * @param {number} b2 Byte #2.\n * @private\n */\n controlBackgroundAttribute_(b1, b2) {\n let backgroundColor = shaka.cea.CeaUtils.DEFAULT_BG_COLOR;\n if ((b1 & 0x07) === 0x0) {\n // If background provided, last 3 bits of b1 are |0|0|0|. Color is in b2.\n backgroundColor = shaka.cea.Cea608DataChannel.BG_COLORS[(b2 & 0xe) >> 1];\n }\n this.curbuf_.setBackgroundColor(backgroundColor);\n }\n\n /**\n * The Cea608DataChannel control methods implement all CC control operations.\n * @param {!shaka.cea.Cea608DataChannel.Cea608Packet} ccPacket\n * @return {?shaka.extern.ICaptionDecoder.ClosedCaption}\n * @private\n */\n controlMiscellaneous_(ccPacket) {\n const MiscCmd = shaka.cea.Cea608DataChannel.MiscCmd_;\n const b2 = ccPacket.ccData2;\n const pts = ccPacket.pts;\n let parsedClosedCaption = null;\n\n switch (b2) {\n case MiscCmd.RCL:\n this.controlRcl_();\n break;\n case MiscCmd.BS:\n this.controlBs_();\n break;\n // unused (alarm off and alarm on)\n case MiscCmd.AOD:\n case MiscCmd.AON:\n break;\n case MiscCmd.DER:\n // Delete to End of Row. Not implemented since position not supported.\n break;\n case MiscCmd.RU2:\n parsedClosedCaption = this.controlRu_(2, pts);\n break;\n case MiscCmd.RU3:\n parsedClosedCaption = this.controlRu_(3, pts);\n break;\n case MiscCmd.RU4:\n parsedClosedCaption = this.controlRu_(4, pts);\n break;\n case MiscCmd.FON:\n this.controlFon_();\n break;\n case MiscCmd.RDC:\n this.controlRdc_(pts);\n break;\n case MiscCmd.TR:\n this.controlTr_();\n break;\n case MiscCmd.RTD:\n this.controlRtd_();\n break;\n case MiscCmd.EDM:\n parsedClosedCaption = this.controlEdm_(pts);\n break;\n case MiscCmd.CR:\n parsedClosedCaption = this.controlCr_(pts);\n break;\n case MiscCmd.ENM:\n this.controlEnm_();\n break;\n case MiscCmd.EOC:\n parsedClosedCaption = this.controlEoc_(pts);\n break;\n }\n return parsedClosedCaption;\n }\n\n /**\n * Handles CR - Carriage Return (Start new row).\n * CR only affects scroll windows (Rollup and Text modes).\n * Any currently buffered line needs to be emitted, along\n * with a window scroll action.\n * @param {number} pts in seconds.\n * @return {?shaka.extern.ICaptionDecoder.ClosedCaption}\n * @private\n */\n controlCr_(pts) {\n const buf = this.curbuf_;\n // Only rollup and text mode is affected, but we don't emit text mode.\n if (this.type_ !== shaka.cea.Cea608DataChannel.CaptionType.ROLLUP) {\n return null;\n }\n // Force out the scroll window since the top row will cleared.\n const parsedClosedCaption = buf.forceEmit(this.prevEndTime_, pts);\n\n // Calculate the top of the scroll window.\n const toprow = (buf.getRow() - buf.getScrollSize()) + 1;\n\n // Shift up the window one row higher.\n buf.moveRows(toprow - 1, toprow, buf.getScrollSize());\n\n // Clear out anything that's outside of our current scroll window.\n buf.resetRows(0, toprow - 1);\n buf.resetRows(buf.getRow(), shaka.cea.Cea608Memory.CC_ROWS - buf.getRow());\n\n // Update the end time so the next caption emits starting at this time.\n this.prevEndTime_ = pts;\n return parsedClosedCaption;\n }\n\n /**\n * Handles RU2, RU3, RU4 - Roll-Up, N rows.\n * If in TEXT, POPON or PAINTON, any displayed captions are erased.\n * This means must force emit entire display buffer.\n * @param {number} scrollSize New scroll window size.\n * @param {number} pts\n * @return {?shaka.extern.ICaptionDecoder.ClosedCaption}\n * @private\n */\n controlRu_(scrollSize, pts) {\n this.curbuf_ = this.displayedMemory_; // Point to displayed memory\n const buf = this.curbuf_;\n let parsedClosedCaption = null;\n\n // For any type except rollup and text mode, it should be emitted,\n // and memories cleared.\n if (this.type_ !== shaka.cea.Cea608DataChannel.CaptionType.ROLLUP &&\n this.type_ !== shaka.cea.Cea608DataChannel.CaptionType.TEXT) {\n parsedClosedCaption = buf.forceEmit(this.prevEndTime_, pts);\n\n // Clear both memories.\n this.displayedMemory_.eraseBuffer();\n this.nonDisplayedMemory_.eraseBuffer();\n\n // Rollup base row defaults to the last row (15).\n buf.setRow(shaka.cea.Cea608Memory.CC_ROWS);\n }\n this.type_ = shaka.cea.Cea608DataChannel.CaptionType.ROLLUP;\n\n // Set the new rollup window size.\n buf.setScrollSize(scrollSize);\n return parsedClosedCaption;\n }\n\n /**\n * Handles flash on.\n * @private\n */\n controlFon_() {\n this.curbuf_.addChar(\n shaka.cea.Cea608Memory.CharSet.BASIC_NORTH_AMERICAN,\n ' '.charCodeAt(0));\n }\n\n\n /**\n * Handles EDM - Erase Displayed Mem\n * Mode check:\n * EDM affects all captioning modes (but not Text mode);\n * @param {number} pts\n * @return {?shaka.extern.ICaptionDecoder.ClosedCaption}\n * @private\n */\n controlEdm_(pts) {\n const buf = this.displayedMemory_;\n let parsedClosedCaption = null;\n if (this.type_ !== shaka.cea.Cea608DataChannel.CaptionType.TEXT) {\n // Clearing displayed memory means we now know how long\n // its contents were displayed, so force it out.\n parsedClosedCaption = buf.forceEmit(this.prevEndTime_, pts);\n }\n buf.resetAllRows();\n return parsedClosedCaption;\n }\n\n /**\n * Handles RDC - Resume Direct Captions. Initiates Paint-On captioning mode.\n * RDC does not affect current display, so nothing needs to be forced out yet.\n * @param {number} pts in seconds\n * @private\n */\n controlRdc_(pts) {\n this.type_ = shaka.cea.Cea608DataChannel.CaptionType.PAINTON;\n // Point to displayed memory.\n this.curbuf_ = this.displayedMemory_;\n\n // No scroll window now.\n this.curbuf_.setScrollSize(0);\n\n // The next paint-on caption needs this time as the start time.\n this.prevEndTime_ = pts;\n }\n\n\n /**\n * Handles ENM - Erase Nondisplayed Mem\n * @private\n */\n controlEnm_() {\n this.nonDisplayedMemory_.resetAllRows();\n }\n\n /**\n * Handles EOC - End Of Caption (flip mem)\n * This forces Pop-On mode, and swaps the displayed and nondisplayed memories.\n * @private\n * @param {number} pts\n * @return {?shaka.extern.ICaptionDecoder.ClosedCaption}\n */\n controlEoc_(pts) {\n let parsedClosedCaption = null;\n if (this.type_ !== shaka.cea.Cea608DataChannel.CaptionType.TEXT) {\n parsedClosedCaption =\n this.displayedMemory_.forceEmit(this.prevEndTime_, pts);\n }\n // Swap memories\n const buf = this.nonDisplayedMemory_;\n this.nonDisplayedMemory_ = this.displayedMemory_; // Swap buffers\n this.displayedMemory_ = buf;\n\n // Enter Pop-On mode.\n this.controlRcl_();\n\n // The caption ended, and so the previous end time should be updated.\n this.prevEndTime_ = pts;\n return parsedClosedCaption;\n }\n\n /**\n * Handles RCL - Resume Caption Loading\n * Initiates Pop-On style captioning. No need to force anything out upon\n * entering Pop-On mode because it does not affect the current display.\n * @private\n */\n controlRcl_() {\n this.type_ = shaka.cea.Cea608DataChannel.CaptionType.POPON;\n this.curbuf_ = this.nonDisplayedMemory_;\n // No scroll window now\n this.curbuf_.setScrollSize(0);\n }\n\n\n /**\n * Handles BS - BackSpace.\n * @private\n */\n controlBs_() {\n this.curbuf_.eraseChar();\n }\n\n /**\n * Handles TR - Text Restart.\n * Clears text buffer and resumes Text Mode.\n * @private\n */\n controlTr_() {\n this.text_.reset();\n this.controlRtd_(); // Put into text mode.\n }\n\n /**\n * Handles RTD - Resume Text Display.\n * Resumes text mode. No need to force anything out, because Text Mode doesn't\n * affect current display. Also, this decoder does not emit Text Mode anyway.\n * @private\n */\n controlRtd_() {\n shaka.log.warnOnce('Cea608DataChannel',\n 'CEA-608 text mode entered, but is unsupported');\n this.curbuf_ = this.text_;\n this.type_ = shaka.cea.Cea608DataChannel.CaptionType.TEXT;\n }\n\n /**\n * Handles a Basic North American byte pair.\n * @param {number} b1 Byte 1.\n * @param {number} b2 Byte 2.\n */\n handleBasicNorthAmericanChar(b1, b2) {\n this.curbuf_.addChar(\n shaka.cea.Cea608Memory.CharSet.BASIC_NORTH_AMERICAN, b1);\n this.curbuf_.addChar(\n shaka.cea.Cea608Memory.CharSet.BASIC_NORTH_AMERICAN, b2);\n }\n\n /**\n * Handles an Extended Western European byte pair.\n * @param {number} b1 Byte 1.\n * @param {number} b2 Byte 2.\n * @private\n */\n handleExtendedWesternEuropeanChar_(b1, b2) {\n // Get the char set from the LSB, which is the char set toggle bit.\n const charSet = b1 & 0x01 ?\n shaka.cea.Cea608Memory.CharSet.PORTUGUESE_GERMAN:\n shaka.cea.Cea608Memory.CharSet.SPANISH_FRENCH;\n\n this.curbuf_.addChar(charSet, b2);\n }\n\n /**\n * Handles a tab offset.\n *\n * @param {number} offset\n * @private\n */\n handleOffset_(offset) {\n this.curbuf_.setOffset(offset);\n }\n\n /**\n * Decodes control code.\n * Three types of control codes:\n * Preamble Address Codes, Mid-Row Codes, and Miscellaneous Control Codes.\n * @param {!shaka.cea.Cea608DataChannel.Cea608Packet} ccPacket\n * @return {?shaka.extern.ICaptionDecoder.ClosedCaption}\n */\n handleControlCode(ccPacket) {\n const b1 = ccPacket.ccData1;\n const b2 = ccPacket.ccData2;\n\n // FCC wants control codes transmitted twice, and that will often be\n // seen in broadcast captures. If the very next frame has a duplicate\n // control code, that duplicate is ignored. Note that this only applies\n // to the very next frame, and only for one match.\n if (this.lastcp_ === ((b1 << 8) | b2)) {\n this.lastcp_ = null;\n return null;\n }\n\n // Remember valid control code for checking in next frame!\n this.lastcp_ = (b1 << 8) | b2;\n\n if (this.isPAC_(b1, b2)) {\n this.controlPac_(b1, b2);\n } else if (this.isMidrowStyleChange_(b1, b2)) {\n this.controlMidrow_(b2);\n } else if (this.isBackgroundAttribute_(b1, b2)) {\n this.controlBackgroundAttribute_(b1, b2);\n } else if (this.isSpecialNorthAmericanChar_(b1, b2)) {\n this.curbuf_.addChar(\n shaka.cea.Cea608Memory.CharSet.SPECIAL_NORTH_AMERICAN, b2);\n } else if (this.isExtendedWesternEuropeanChar_(b1, b2)) {\n this.handleExtendedWesternEuropeanChar_(b1, b2);\n } else if (this.isMiscellaneous_(b1, b2)) {\n return this.controlMiscellaneous_(ccPacket);\n } else if (this.isOffset_(b1, b2)) {\n const offset = b2 - 0x20;\n this.handleOffset_(offset);\n }\n return null;\n }\n\n /**\n * Checks if this is a Miscellaneous control code.\n * @param {number} b1 Byte 1.\n * @param {number} b2 Byte 2.\n * @return {boolean}\n * @private\n */\n isMiscellaneous_(b1, b2) {\n // For Miscellaneous Control Codes, the bytes take the following form:\n // b1 -> |0|0|0|1|C|1|0|F|\n // b2 -> |0|0|1|0|X|X|X|X|\n return ((b1 & 0xf6) === 0x14) && ((b2 & 0xf0) === 0x20);\n }\n\n /**\n * Checks if this is a offset control code.\n * @param {number} b1 Byte 1.\n * @param {number} b2 Byte 2.\n * @return {boolean}\n * @private\n */\n isOffset_(b1, b2) {\n return (b1 == 0x17 || b1 == 0x1f) && b2 >= 0x21 && b2 <= 0x23;\n }\n\n /**\n * Checks if this is a PAC control code.\n * @param {number} b1 Byte 1.\n * @param {number} b2 Byte 2.\n * @return {boolean}\n * @private\n */\n isPAC_(b1, b2) {\n // For Preamble Address Codes, the bytes take the following form:\n // b1 -> |0|0|0|1|X|X|X|X|\n // b2 -> |0|1|X|X|X|X|X|X|\n return ((b1 & 0xf0) === 0x10) && ((b2 & 0xc0) === 0x40);\n }\n\n /**\n * Checks if this is a Midrow style change control code.\n * @param {number} b1 Byte 1.\n * @param {number} b2 Byte 2.\n * @return {boolean}\n * @private\n */\n isMidrowStyleChange_(b1, b2) {\n // For Midrow Control Codes, the bytes take the following form:\n // b1 -> |0|0|0|1|C|0|0|1|\n // b2 -> |0|0|1|0|X|X|X|X|\n return ((b1 & 0xf7) === 0x11) && ((b2 & 0xf0) === 0x20);\n }\n\n /**\n * Checks if this is a background attribute control code.\n * @param {number} b1 Byte 1.\n * @param {number} b2 Byte 2.\n * @return {boolean}\n * @private\n */\n isBackgroundAttribute_(b1, b2) {\n // For Background Attribute Codes, the bytes take the following form:\n // Bg provided: b1 -> |0|0|0|1|C|0|0|0| b2 -> |0|0|1|0|COLOR|T|\n // No Bg: b1 -> |0|0|0|1|C|1|1|1| b2 -> |0|0|1|0|1|1|0|1|\n return (((b1 & 0xf7) === 0x10) && ((b2 & 0xf0) === 0x20)) ||\n (((b1 & 0xf7) === 0x17) && ((b2 & 0xff) === 0x2D));\n }\n\n /**\n * Checks if the character is in the Special North American char. set.\n * @param {number} b1 Byte 1.\n * @param {number} b2 Byte 2.\n * @return {boolean}\n * @private\n */\n isSpecialNorthAmericanChar_(b1, b2) {\n // The bytes take the following form:\n // b1 -> |0|0|0|1|C|0|0|1|\n // b2 -> |0|0|1|1| CHAR |\n return ((b1 & 0xf7) === 0x11) && ((b2 & 0xf0) === 0x30);\n }\n\n /**\n * Checks if the character is in the Extended Western European char. set.\n * @param {number} b1 Byte 1.\n * @param {number} b2 Byte 2.\n * @return {boolean}\n * @private\n */\n isExtendedWesternEuropeanChar_(b1, b2) {\n // The bytes take the following form:\n // b1 -> |0|0|0|1|C|0|1|S|\n // b2 -> |0|0|1|CHARACTER|\n return ((b1 & 0xf6) === 0x12) && ((b2 & 0xe0) === 0x20);\n }\n\n /**\n * Checks if the data contains a control code.\n * @param {number} b1 Byte 1.\n * @return {boolean}\n */\n static isControlCode(b1) {\n // For control codes, the first byte takes the following form:\n // b1 -> |P|0|0|1|X|X|X|X|\n return (b1 & 0x70) === 0x10;\n }\n\n /**\n * Checks if the data contains a XDS control code.\n * @param {number} b1 Byte 1.\n * @return {boolean}\n */\n static isXdsControlCode(b1) {\n return b1 >= 0x01 && b1 <= 0x0F;\n }\n};\n\n/**\n * Command codes.\n * @enum {number}\n * @private\n */\nshaka.cea.Cea608DataChannel.MiscCmd_ = {\n // \"RCL - Resume Caption Loading\"\n RCL: 0x20,\n\n // \"BS - BackSpace\"\n BS: 0x21,\n\n // \"AOD - Unused (alarm off)\"\n AOD: 0x22,\n\n // \"AON - Unused (alarm on)\"\n AON: 0x23,\n\n // \"DER - Delete to End of Row\"\n DER: 0x24,\n\n // \"RU2 - Roll-Up, 2 rows\"\n RU2: 0x25,\n\n // \"RU3 - Roll-Up, 3 rows\"\n RU3: 0x26,\n\n // \"RU4 - Roll-Up, 4 rows\"\n RU4: 0x27,\n\n // \"FON - Flash On\"\n FON: 0x28,\n\n // \"RDC - Resume Direct Captions\"\n RDC: 0x29,\n\n // \"TR - Text Restart\"\n TR: 0x2a,\n\n // \"RTD - Resume Text Display\"\n RTD: 0x2b,\n\n // \"EDM - Erase Displayed Mem\"\n EDM: 0x2c,\n\n // \"CR - Carriage return\"\n CR: 0x2d,\n\n // \"ENM - Erase Nondisplayed Mem\"\n ENM: 0x2e,\n\n // \"EOC - End Of Caption (flip mem)\"\n EOC: 0x2f,\n};\n\n/**\n * Caption type.\n * @private @const @enum {number}\n */\nshaka.cea.Cea608DataChannel.CaptionType = {\n NONE: 0,\n POPON: 1,\n PAINTON: 2,\n ROLLUP: 3,\n TEXT: 4,\n};\n\n/**\n * @const {!Array}\n */\nshaka.cea.Cea608DataChannel.BG_COLORS = [\n 'black',\n 'green',\n 'blue',\n 'cyan',\n 'red',\n 'yellow',\n 'magenta',\n 'black',\n];\n\n/**\n * @const {!Array}\n */\nshaka.cea.Cea608DataChannel.TEXT_COLORS = [\n 'white',\n 'green',\n 'blue',\n 'cyan',\n 'red',\n 'yellow',\n 'magenta',\n 'white_italics',\n];\n\n/**\n * Style associated with a cue.\n * @typedef {{\n * textColor: ?string,\n * backgroundColor: ?string,\n * italics: ?boolean,\n * underline: ?boolean\n * }}\n */\nshaka.cea.Cea608DataChannel.Style;\n\n/**\n * CEA closed captions packet.\n * @typedef {{\n * pts: number,\n * type: number,\n * ccData1: number,\n * ccData2: number,\n * order: number\n * }}\n *\n * @property {number} pts\n * Presentation timestamp (in second) at which this packet was received.\n * @property {number} type\n * Type of the packet. Either 0 or 1, representing the CEA-608 field.\n * @property {number} ccData1 CEA-608 byte 1.\n * @property {number} ccData2 CEA-608 byte 2.\n * @property {number} order\n * A number indicating the order this packet was received in a sequence\n * of packets. Used to break ties in a stable sorting algorithm\n */\nshaka.cea.Cea608DataChannel.Cea608Packet;\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.cea.Cea708Window');\n\ngoog.require('shaka.cea.CeaUtils');\ngoog.require('shaka.cea.CeaUtils.StyledChar');\ngoog.require('shaka.text.Cue');\ngoog.require('shaka.text.CueRegion');\n\n\n/**\n * CEA-708 Window. Each CEA-708 service owns 8 of these.\n */\nshaka.cea.Cea708Window = class {\n /**\n * @param {number} windowNum\n */\n constructor(windowNum, parentService) {\n /**\n * Number for the parent service (1 - 63).\n * @private {number}\n */\n this.parentService_ = parentService;\n\n /**\n * A number from 0 - 7 indicating the window number in the\n * service that owns this window.\n * @private {number}\n */\n this.windowNum_ = windowNum;\n\n /**\n * Indicates whether this window is visible.\n * @private {boolean}\n */\n this.visible_ = false;\n\n /**\n * Indicates whether the horizontal and vertical anchors coordinates specify\n * a percentage of the screen, or physical coordinates on the screen.\n * @private {boolean}\n */\n this.relativeToggle_ = false;\n\n /**\n * Horizontal anchor. Loosely corresponds to a WebVTT viewport X anchor.\n * @private {number}\n */\n this.horizontalAnchor_ = 0;\n\n /**\n * Vertical anchor. Loosely corresponds to a WebVTT viewport Y anchor.\n * @private {number}\n */\n this.verticalAnchor_ = 0;\n\n /**\n * If valid, ranges from 0 to 8, specifying one of 9 locations on window:\n * 0________1________2\n * | | |\n * 3________4________5\n * | | |\n * 6________7________8\n * Diagram is valid as per CEA-708-E section 8.4.4.\n * Each of these locations corresponds to a WebVTT region's \"region anchor\".\n * @private {number}\n */\n this.anchorId_ = 0;\n\n /**\n * Indicates the number of rows in this window's buffer/memory.\n * @private {number}\n */\n this.rowCount_ = 0;\n\n /**\n * Indicates the number of columns in this window's buffer/memory.\n * @private {number}\n */\n this.colCount_ = 0;\n\n /**\n * Center by default.\n * @private {!shaka.cea.Cea708Window.TextJustification}\n */\n this.justification_ = shaka.cea.Cea708Window.TextJustification.CENTER;\n\n /**\n * An array of rows of styled characters, representing the\n * current text and styling of text in this window.\n * @private {!Array>}\n */\n this.memory_ = [];\n\n /**\n * @private {number}\n */\n this.startTime_ = 0;\n\n /**\n * Row that the current pen is pointing at.\n * @private {number}\n */\n this.row_ = 0;\n\n /**\n * Column that the current pen is pointing at.\n * @private {number}\n */\n this.col_ = 0;\n\n /**\n * Indicates whether the current pen position is italicized.\n * @private {boolean}\n */\n this.italics_ = false;\n\n /**\n * Indicates whether the current pen position is underlined.\n * @private {boolean}\n */\n this.underline_ = false;\n\n /**\n * Indicates the text color at the current pen position.\n * @private {string}\n */\n this.textColor_ = shaka.cea.CeaUtils.DEFAULT_TXT_COLOR;\n\n /**\n * Indicates the background color at the current pen position.\n * @private {string}\n */\n this.backgroundColor_ = shaka.cea.CeaUtils.DEFAULT_BG_COLOR;\n\n this.resetMemory();\n }\n\n /**\n * @param {boolean} visible\n * @param {number} verticalAnchor\n * @param {number} horizontalAnchor\n * @param {number} anchorId\n * @param {boolean} relativeToggle\n * @param {number} rowCount\n * @param {number} colCount\n */\n defineWindow(visible, verticalAnchor, horizontalAnchor, anchorId,\n relativeToggle, rowCount, colCount) {\n this.visible_ = visible;\n this.verticalAnchor_ = verticalAnchor;\n this.horizontalAnchor_ = horizontalAnchor;\n this.anchorId_ = anchorId;\n this.relativeToggle_ = relativeToggle;\n this.rowCount_ = rowCount;\n this.colCount_ = colCount;\n }\n\n /**\n * Resets the memory buffer.\n */\n resetMemory() {\n this.memory_ = [];\n for (let i = 0; i < shaka.cea.Cea708Window.MAX_ROWS; i++) {\n this.memory_.push(this.createNewRow_());\n }\n }\n\n /**\n * Allocates and returns a new row.\n * @return {!Array}\n * @private\n */\n createNewRow_() {\n const row = [];\n for (let j = 0; j < shaka.cea.Cea708Window.MAX_COLS; j++) {\n row.push(null);\n }\n return row;\n }\n\n /**\n * Sets the unicode value for a char at the current pen location.\n * @param {string} char\n */\n setCharacter(char) {\n // Check if the pen is out of bounds.\n if (!this.isPenInBounds_()) {\n return;\n }\n\n const cea708Char = new shaka.cea.CeaUtils.StyledChar(\n char, this.underline_, this.italics_,\n this.backgroundColor_, this.textColor_);\n this.memory_[this.row_][this.col_] = cea708Char;\n\n // Increment column\n this.col_ ++;\n }\n\n /**\n * Erases a character from the buffer and moves the pen back.\n */\n backspace() {\n if (!this.isPenInBounds_()) {\n return;\n }\n\n // Check if a backspace can be done.\n if (this.col_ <= 0 && this.row_ <= 0) {\n return;\n }\n\n if (this.col_ <= 0) {\n // Move pen back a row.\n this.col_ = this.colCount_ - 1;\n this.row_--;\n } else {\n // Move pen back a column.\n this.col_--;\n }\n\n // Erase the character occupied at that position.\n this.memory_[this.row_][this.col_] = null;\n }\n\n /**\n * @private\n */\n isPenInBounds_() {\n const inRowBounds = this.row_ < this.rowCount_ && this.row_ >= 0;\n const inColBounds = this.col_ < this.colCount_ && this.col_ >= 0;\n return inRowBounds && inColBounds;\n }\n\n /**\n * @return {boolean}\n */\n isVisible() {\n return this.visible_;\n }\n\n /**\n * Moves up rows in the buffer.\n * @param {number} count\n * @private\n */\n moveUpRows_(count) {\n let dst = 0; // Row each row should be moved to.\n\n // Move existing rows up by .\n for (let i = count; i < shaka.cea.Cea708Window.MAX_ROWS; i++, dst++) {\n this.memory_[dst] = this.memory_[i];\n }\n\n // Create new rows at the bottom.\n for (let i = 0; i < count; i++, dst++) {\n this.memory_[dst] = this.createNewRow_();\n }\n }\n\n /**\n * Handles CR. Increments row - if last row, \"roll up\" all rows by one.\n */\n carriageReturn() {\n if (this.row_ + 1 >= this.rowCount_) {\n this.moveUpRows_(1);\n this.col_ = 0;\n return;\n }\n\n this.row_++;\n this.col_ = 0;\n }\n\n /**\n * Handles HCR. Moves the pen to the beginning of the cur. row and clears it.\n */\n horizontalCarriageReturn() {\n this.memory_[this.row_] = this.createNewRow_();\n this.col_ = 0;\n }\n\n /**\n * @param {number} endTime\n * @param {number} serviceNumber Number of the service emitting this caption.\n * @return {?shaka.extern.ICaptionDecoder.ClosedCaption}\n */\n forceEmit(endTime, serviceNumber) {\n const stream = `svc${serviceNumber}`;\n const TextJustification = shaka.cea.Cea708Window.TextJustification;\n const topLevelCue = new shaka.text.Cue(\n this.startTime_, endTime, /* payload= */ '');\n\n if (this.justification_ === TextJustification.LEFT) {\n // LEFT justified.\n topLevelCue.textAlign = shaka.text.Cue.textAlign.LEFT;\n } else if (this.justification_ === TextJustification.RIGHT) {\n // RIGHT justified.\n topLevelCue.textAlign = shaka.text.Cue.textAlign.RIGHT;\n } else {\n // CENTER justified. Both FULL and CENTER are handled as CENTER justified.\n topLevelCue.textAlign = shaka.text.Cue.textAlign.CENTER;\n }\n\n this.adjustRegion_(topLevelCue.region);\n\n const caption = shaka.cea.CeaUtils.getParsedCaption(\n topLevelCue, stream, this.memory_, this.startTime_, endTime);\n if (caption) {\n // If a caption is being emitted, then the next caption's start time\n // should be no less than this caption's end time.\n this.setStartTime(endTime);\n }\n return caption;\n }\n\n /**\n * @param {number} row\n * @param {number} col\n */\n setPenLocation(row, col) {\n this.row_ = row;\n this.col_ = col;\n }\n\n /**\n * @param {string} backgroundColor\n */\n setPenBackgroundColor(backgroundColor) {\n this.backgroundColor_ = backgroundColor;\n }\n\n /**\n * @param {string} textColor\n */\n setPenTextColor(textColor) {\n this.textColor_ = textColor;\n }\n\n /**\n * @param {boolean} underline\n */\n setPenUnderline(underline) {\n this.underline_ = underline;\n }\n\n /**\n * @param {boolean} italics\n */\n setPenItalics(italics) {\n this.italics_ = italics;\n }\n\n /** Reset the pen to 0,0 with default styling. */\n resetPen() {\n this.row_ = 0;\n this.col_ = 0;\n this.underline_ = false;\n this.italics_ = false;\n this.textColor_ = shaka.cea.CeaUtils.DEFAULT_TXT_COLOR;\n this.backgroundColor_ = shaka.cea.CeaUtils.DEFAULT_BG_COLOR;\n }\n\n /**\n * @param {!shaka.cea.Cea708Window.TextJustification} justification\n */\n setJustification(justification) {\n this.justification_ = justification;\n }\n\n /**\n * Sets the window to visible.\n */\n display() {\n this.visible_ = true;\n }\n\n /**\n * Sets the window to invisible.\n */\n hide() {\n this.visible_ = false;\n }\n\n /**\n * Toggles the visibility of the window.\n */\n toggle() {\n this.visible_ = !this.visible_;\n }\n\n /**\n * Sets the start time for the cue to be emitted.\n * @param {number} pts\n */\n setStartTime(pts) {\n this.startTime_ = pts;\n }\n\n /**\n * Support window positioning by mapping anchor related values to CueRegion.\n * https://dvcs.w3.org/hg/text-tracks/raw-file/default/608toVTT/608toVTT.html#positioning-in-cea-708\n * @param {shaka.text.CueRegion} region\n * @private\n */\n adjustRegion_(region) {\n if (this.parentService_) {\n region.id += 'svc' + this.parentService_;\n }\n region.id += 'win' + this.windowNum_;\n\n region.height = this.rowCount_;\n region.width = this.colCount_;\n region.heightUnits = shaka.text.CueRegion.units.LINES;\n region.widthUnits = shaka.text.CueRegion.units.LINES;\n\n region.viewportAnchorX = this.horizontalAnchor_;\n region.viewportAnchorY = this.verticalAnchor_;\n // WebVTT's region viewport anchors are technically always in percentages.\n // However, we don't know the aspect ratio of the video at this point,\n // which determines how we interpret the horizontal anchor.\n // So, we expose the additonal flag to reflect whether these viewport anchor\n // values can be used be used as is or should be converted to percentages.\n region.viewportAnchorUnits = this.relativeToggle_ ?\n shaka.text.CueRegion.units.PERCENTAGE : shaka.text.CueRegion.units.LINES;\n\n const AnchorId = shaka.cea.Cea708Window.AnchorId;\n\n switch (this.anchorId_) {\n case AnchorId.UPPER_LEFT:\n region.regionAnchorX = 0;\n region.regionAnchorY = 0;\n break;\n case AnchorId.UPPER_CENTER:\n region.regionAnchorX = 50;\n region.regionAnchorY = 0;\n break;\n case AnchorId.UPPER_RIGHT:\n region.regionAnchorX = 100;\n region.regionAnchorY = 0;\n break;\n case AnchorId.MIDDLE_LEFT:\n region.regionAnchorX = 0;\n region.regionAnchorY = 50;\n break;\n case AnchorId.MIDDLE_CENTER:\n region.regionAnchorX = 50;\n region.regionAnchorY = 50;\n break;\n case AnchorId.MIDDLE_RIGHT:\n region.regionAnchorX = 100;\n region.regionAnchorY = 50;\n break;\n case AnchorId.LOWER_LEFT:\n region.regionAnchorX = 0;\n region.regionAnchorY = 100;\n break;\n case AnchorId.LOWER_CENTER:\n region.regionAnchorX = 50;\n region.regionAnchorY = 100;\n break;\n case AnchorId.LOWER_RIGHT:\n region.regionAnchorX = 100;\n region.regionAnchorY = 100;\n break;\n }\n }\n};\n\n/**\n * Caption type.\n * @const @enum {number}\n */\nshaka.cea.Cea708Window.TextJustification = {\n LEFT: 0,\n RIGHT: 1,\n CENTER: 2,\n FULL: 3,\n};\n\n/**\n * Possible AnchorId values.\n * @const @enum {number}\n */\nshaka.cea.Cea708Window.AnchorId = {\n UPPER_LEFT: 0,\n UPPER_CENTER: 1,\n UPPER_RIGHT: 2,\n MIDDLE_LEFT: 3,\n MIDDLE_CENTER: 4,\n MIDDLE_RIGHT: 5,\n LOWER_LEFT: 6,\n LOWER_CENTER: 7,\n LOWER_RIGHT: 8,\n};\n\n/**\n * Can be indexed 0-31 for 4:3 format, and 0-41 for 16:9 formats.\n * Thus the absolute maximum is 42 columns for the 16:9 format.\n * @private @const {number}\n */\nshaka.cea.Cea708Window.MAX_COLS = 42;\n\n/**\n * Maximum of 16 rows that can be indexed from 0 to 15.\n * @private @const {number}\n */\nshaka.cea.Cea708Window.MAX_ROWS = 16;\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.cea.DtvccPacketBuilder');\ngoog.provide('shaka.cea.DtvccPacket');\ngoog.require('shaka.util.Error');\ngoog.requireType('shaka.cea.Cea708Service');\n\n\n/**\n * CEA-708 DTVCC Packet Builder.\n * Builds packets based on Figure 5 CCP State Table in 5.2 of CEA-708-E.\n * Initially, there is no packet. When a DTVCC_PACKET_START payload is received,\n * a packet begins construction. The packet is considered \"built\" once all bytes\n * indicated in the header are read, and ignored if a new packet starts building\n * before the current packet is finished being built.\n */\nshaka.cea.DtvccPacketBuilder = class {\n /** */\n constructor() {\n /**\n * An array containing built DTVCC packets that are ready to be processed.\n * @private {!Array}\n */\n this.builtPackets_ = [];\n\n /**\n * Stores the packet data for the current packet being processed, if any.\n * @private {?Array}\n */\n this.currentPacketBeingBuilt_ = null;\n\n /**\n * Keeps track of the number of bytes left to add in the current packet.\n * @private {number}\n */\n this.bytesLeftToAddInCurrentPacket_ = 0;\n }\n\n /**\n * @param {!shaka.cea.Cea708Service.Cea708Byte} cea708Byte\n */\n addByte(cea708Byte) {\n if (cea708Byte.type === shaka.cea.DtvccPacketBuilder.DTVCC_PACKET_START) {\n // If there was a packet being built that finished, it would have\n // already been added to the built packets when it finished. So if\n // there's an open packet at this point, it must be unfinished. As\n // per the spec, we don't deal with unfinished packets. So we ignore them.\n\n // A new packet should be opened.\n const packetSize = cea708Byte.value & 0x3f;\n\n // As per spec, number of packet data bytes to follow is packetSize*2-1.\n this.bytesLeftToAddInCurrentPacket_ = packetSize * 2 - 1;\n this.currentPacketBeingBuilt_ = [];\n return;\n }\n\n if (!this.currentPacketBeingBuilt_) {\n // There is no packet open. Then an incoming byte should not\n // have come in at all. Ignore it.\n return;\n }\n\n if (this.bytesLeftToAddInCurrentPacket_ > 0) {\n this.currentPacketBeingBuilt_.push(cea708Byte);\n this.bytesLeftToAddInCurrentPacket_--;\n }\n\n if (this.bytesLeftToAddInCurrentPacket_ === 0) {\n // Current packet is complete and ready for processing.\n const packet = new shaka.cea.DtvccPacket(this.currentPacketBeingBuilt_);\n this.builtPackets_.push(packet);\n this.currentPacketBeingBuilt_ = null;\n this.bytesLeftToAddInCurrentPacket_ = 0;\n }\n }\n\n /**\n * @return {!Array}\n */\n getBuiltPackets() {\n return this.builtPackets_;\n }\n\n /** Clear built packets. */\n clearBuiltPackets() {\n this.builtPackets_ = [];\n }\n\n /** Clear built packets and packets in progress. */\n clear() {\n this.builtPackets_ = [];\n this.currentPacketBeingBuilt_ = [];\n this.bytesLeftToAddInCurrentPacket_ = 0;\n }\n};\n\n\nshaka.cea.DtvccPacket = class {\n /**\n * @param {!Array} packetData\n */\n constructor(packetData) {\n /**\n * Keeps track of the position to read the next byte from in the packet.\n * @private {number}\n */\n this.pos_ = 0;\n\n /**\n * Bytes that represent the data in the DTVCC packet.\n * @private {!Array}\n */\n this.packetData_ = packetData;\n }\n\n /**\n * @return {boolean}\n */\n hasMoreData() {\n return this.pos_ < this.packetData_.length;\n }\n\n /**\n * @return {number}\n */\n getPosition() {\n return this.pos_;\n }\n\n /**\n * Reads a byte from the packet. TODO CONSIDER RENAMING THIS TO BLOCK\n * @return {!shaka.cea.Cea708Service.Cea708Byte}\n * @throws {!shaka.util.Error}\n */\n readByte() {\n if (!this.hasMoreData()) {\n throw new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.TEXT,\n shaka.util.Error.Code.BUFFER_READ_OUT_OF_BOUNDS);\n }\n return this.packetData_[this.pos_++];\n }\n\n /**\n * Skips the provided number of blocks in the buffer.\n * @param {number} numBlocks\n * @throws {!shaka.util.Error}\n */\n skip(numBlocks) {\n if (this.pos_ + numBlocks > this.packetData_.length) {\n throw new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.TEXT,\n shaka.util.Error.Code.BUFFER_READ_OUT_OF_BOUNDS);\n }\n this.pos_ += numBlocks;\n }\n};\n\n/**\n * @const {number}\n */\nshaka.cea.DtvccPacketBuilder.DTVCC_PACKET_DATA = 2;\n\n/**\n * @const {number}\n */\nshaka.cea.DtvccPacketBuilder.DTVCC_PACKET_START = 3;\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.cea.Cea708Service');\n\ngoog.require('shaka.cea.Cea708Window');\ngoog.require('shaka.cea.DtvccPacket');\n\n\n/**\n * CEA-708 closed captions service as defined by CEA-708-E. A decoder can own up\n * to 63 services. Each service owns eight windows.\n */\nshaka.cea.Cea708Service = class {\n /**\n * @param {number} serviceNumber\n */\n constructor(serviceNumber) {\n /**\n * Number for this specific service (1 - 63).\n * @private {number}\n */\n this.serviceNumber_ = serviceNumber;\n\n /**\n * Eight Cea708 Windows, as defined by the spec.\n * @private {!Array}\n */\n this.windows_ = [\n null, null, null, null, null, null, null, null,\n ];\n\n /**\n * The current window for which window command operate on.\n * @private {?shaka.cea.Cea708Window}\n */\n this.currentWindow_ = null;\n }\n\n /**\n * Processes a CEA-708 control code.\n * @param {!shaka.cea.DtvccPacket} dtvccPacket\n * @return {?shaka.extern.ICaptionDecoder.ClosedCaption}\n * @throws {!shaka.util.Error}\n */\n handleCea708ControlCode(dtvccPacket) {\n const blockData = dtvccPacket.readByte();\n let controlCode = blockData.value;\n const pts = blockData.pts;\n\n // Read extended control code if needed.\n if (controlCode === shaka.cea.Cea708Service.EXT_CEA708_CTRL_CODE_BYTE1) {\n const extendedControlCodeBlock = dtvccPacket.readByte();\n controlCode = (controlCode << 16) | extendedControlCodeBlock.value;\n }\n\n // Control codes are in 1 of 4 logical groups:\n // CL (C0, C2), CR (C1, C3), GL (G0, G2), GR (G1, G2).\n if (controlCode >= 0x00 && controlCode <= 0x1f) {\n return this.handleC0_(controlCode, pts);\n } else if (controlCode >= 0x80 && controlCode <= 0x9f) {\n return this.handleC1_(dtvccPacket, controlCode, pts);\n } else if (controlCode >= 0x1000 && controlCode <= 0x101f) {\n this.handleC2_(dtvccPacket, controlCode & 0xff);\n } else if (controlCode >= 0x1080 && controlCode <= 0x109f) {\n this.handleC3_(dtvccPacket, controlCode & 0xff);\n } else if (controlCode >= 0x20 && controlCode <= 0x7f) {\n this.handleG0_(controlCode);\n } else if (controlCode >= 0xa0 && controlCode <= 0xff) {\n this.handleG1_(controlCode);\n } else if (controlCode >= 0x1020 && controlCode <= 0x107f) {\n this.handleG2_(controlCode & 0xff);\n } else if (controlCode >= 0x10a0 && controlCode <= 0x10ff) {\n this.handleG3_(controlCode & 0xff);\n }\n\n return null;\n }\n\n /**\n * Handles G0 group data.\n * @param {number} controlCode\n * @private\n */\n handleG0_(controlCode) {\n if (!this.currentWindow_) {\n return;\n }\n // G0 contains ASCII from 0x20 to 0x7f, with the exception that 0x7f\n // is replaced by a musical note.\n if (controlCode === 0x7f) {\n this.currentWindow_.setCharacter('♪');\n return;\n }\n this.currentWindow_.setCharacter(String.fromCharCode(controlCode));\n }\n\n /**\n * Handles G1 group data.\n * @param {number} controlCode\n * @private\n */\n handleG1_(controlCode) {\n if (!this.currentWindow_) {\n return;\n }\n // G1 is the Latin-1 Character Set from 0xa0 to 0xff.\n this.currentWindow_.setCharacter(String.fromCharCode(controlCode));\n }\n\n /**\n * Handles G2 group data.\n * @param {number} controlCode\n * @private\n */\n handleG2_(controlCode) {\n if (!this.currentWindow_) {\n return;\n }\n if (!shaka.cea.Cea708Service.G2Charset.has(controlCode)) {\n // If the character is unsupported, the spec says to put an underline.\n this.currentWindow_.setCharacter('_');\n return;\n }\n\n const char = shaka.cea.Cea708Service.G2Charset.get(controlCode);\n this.currentWindow_.setCharacter(char);\n }\n\n /**\n * Handles G3 group data.\n * @param {number} controlCode\n * @private\n */\n handleG3_(controlCode) {\n if (!this.currentWindow_) {\n return;\n }\n\n // As of CEA-708-E, the G3 group only contains 1 character. It's a\n // [CC] character which has no unicode value on 0xa0.\n if (controlCode != 0xa0) {\n // Similar to G2, the spec decrees an underline if char is unsupported.\n this.currentWindow_.setCharacter('_');\n return;\n }\n\n this.currentWindow_.setCharacter('[CC]');\n }\n\n /**\n * Handles C0 group data.\n * @param {number} controlCode\n * @param {number} pts\n * @return {?shaka.extern.ICaptionDecoder.ClosedCaption}\n * @private\n */\n handleC0_(controlCode, pts) {\n // All these commands pertain to the current window, so ensure it exists.\n if (!this.currentWindow_) {\n return null;\n }\n\n const window = this.currentWindow_;\n let parsedClosedCaption = null;\n\n // Note: This decoder ignores the \"ETX\" (end of text) control code. Since\n // this is JavaScript, a '\\0' is not needed to terminate a string.\n switch (controlCode) {\n case shaka.cea.Cea708Service.ASCII_BACKSPACE:\n window.backspace();\n break;\n case shaka.cea.Cea708Service.ASCII_CARRIAGE_RETURN:\n // Force out the buffer, since the top row could be lost.\n if (window.isVisible()) {\n parsedClosedCaption = window.forceEmit(pts, this.serviceNumber_);\n }\n window.carriageReturn();\n break;\n case shaka.cea.Cea708Service.ASCII_HOR_CARRIAGE_RETURN:\n // Force out the buffer, a row will be erased.\n if (window.isVisible()) {\n parsedClosedCaption = window.forceEmit(pts, this.serviceNumber_);\n }\n window.horizontalCarriageReturn();\n break;\n case shaka.cea.Cea708Service.ASCII_FORM_FEED:\n // Clear window and move pen to (0,0).\n // Force emit if the window is visible.\n if (window.isVisible()) {\n parsedClosedCaption = window.forceEmit(pts, this.serviceNumber_);\n }\n window.resetMemory();\n window.setPenLocation(0, 0);\n break;\n }\n return parsedClosedCaption;\n }\n\n /**\n * Processes C1 group data.\n * These are caption commands.\n * @param {!shaka.cea.DtvccPacket} dtvccPacket\n * @param {number} captionCommand\n * @param {number} pts in seconds\n * @return {?shaka.extern.ICaptionDecoder.ClosedCaption}\n * @throws {!shaka.util.Error} a possible out-of-range buffer read.\n * @private\n */\n handleC1_(dtvccPacket, captionCommand, pts) {\n // Note: This decoder ignores delay and delayCancel control codes in the C1.\n // group. These control codes delay processing of data for a set amount of\n // time, however this decoder processes that data immediately.\n\n if (captionCommand >= 0x80 && captionCommand <= 0x87) {\n const windowNum = captionCommand & 0x07;\n this.setCurrentWindow_(windowNum);\n } else if (captionCommand === 0x88) {\n const bitmap = dtvccPacket.readByte().value;\n return this.clearWindows_(bitmap, pts);\n } else if (captionCommand === 0x89) {\n const bitmap = dtvccPacket.readByte().value;\n this.displayWindows_(bitmap, pts);\n } else if (captionCommand === 0x8a) {\n const bitmap = dtvccPacket.readByte().value;\n return this.hideWindows_(bitmap, pts);\n } else if (captionCommand === 0x8b) {\n const bitmap = dtvccPacket.readByte().value;\n return this.toggleWindows_(bitmap, pts);\n } else if (captionCommand === 0x8c) {\n const bitmap = dtvccPacket.readByte().value;\n return this.deleteWindows_(bitmap, pts);\n } else if (captionCommand === 0x8f) {\n return this.reset_(pts);\n } else if (captionCommand === 0x90) {\n this.setPenAttributes_(dtvccPacket);\n } else if (captionCommand === 0x91) {\n this.setPenColor_(dtvccPacket);\n } else if (captionCommand === 0x92) {\n this.setPenLocation_(dtvccPacket);\n } else if (captionCommand === 0x97) {\n this.setWindowAttributes_(dtvccPacket);\n } else if (captionCommand >= 0x98 && captionCommand <= 0x9f) {\n const windowNum = (captionCommand & 0x0f) - 8;\n this.defineWindow_(dtvccPacket, windowNum, pts);\n }\n return null;\n }\n\n /**\n * Handles C2 group data.\n * @param {!shaka.cea.DtvccPacket} dtvccPacket\n * @param {number} controlCode\n * @private\n */\n handleC2_(dtvccPacket, controlCode) {\n // As of the CEA-708-E spec there are no commands on the C2 table, but if\n // seen, then the appropriate number of bytes must be skipped as per spec.\n if (controlCode >= 0x08 && controlCode <= 0x0f) {\n dtvccPacket.skip(1);\n } else if (controlCode >= 0x10 && controlCode <= 0x17) {\n dtvccPacket.skip(2);\n } else if (controlCode >= 0x18 && controlCode <= 0x1f) {\n dtvccPacket.skip(3);\n }\n }\n\n /**\n * Handles C3 group data.\n * @param {!shaka.cea.DtvccPacket} dtvccPacket\n * @param {number} controlCode\n * @private\n */\n handleC3_(dtvccPacket, controlCode) {\n // As of the CEA-708-E spec there are no commands on the C3 table, but if\n // seen, then the appropriate number of bytes must be skipped as per spec.\n if (controlCode >= 0x80 && controlCode <= 0x87) {\n dtvccPacket.skip(4);\n } else if (controlCode >= 0x88 && controlCode <= 0x8f) {\n dtvccPacket.skip(5);\n }\n }\n\n /**\n * @param {number} windowNum\n * @private\n */\n setCurrentWindow_(windowNum) {\n // If the window isn't created, ignore the command.\n if (!this.windows_[windowNum]) {\n return;\n }\n this.currentWindow_ = this.windows_[windowNum];\n }\n\n /**\n * Yields each non-null window specified in the 8-bit bitmap.\n * @param {number} bitmap 8 bits corresponding to each of the 8 windows.\n * @return {!Array.}\n * @private\n */\n getSpecifiedWindowIds_(bitmap) {\n const ids = [];\n for (let i = 0; i < 8; i++) {\n const windowSpecified = (bitmap & 0x01) === 0x01;\n if (windowSpecified && this.windows_[i]) {\n ids.push(i);\n }\n bitmap >>= 1;\n }\n return ids;\n }\n\n /**\n * @param {number} windowsBitmap\n * @param {number} pts\n * @return {?shaka.extern.ICaptionDecoder.ClosedCaption}\n * @private\n */\n clearWindows_(windowsBitmap, pts) {\n let parsedClosedCaption = null;\n\n // Clears windows from the 8 bit bitmap.\n for (const windowId of this.getSpecifiedWindowIds_(windowsBitmap)) {\n // If window visible and being cleared, emit buffer and reset start time!\n const window = this.windows_[windowId];\n if (window.isVisible()) {\n parsedClosedCaption = window.forceEmit(pts, this.serviceNumber_);\n }\n window.resetMemory();\n }\n return parsedClosedCaption;\n }\n\n /**\n * @param {number} windowsBitmap\n * @param {number} pts\n * @private\n */\n displayWindows_(windowsBitmap, pts) {\n // Displays windows from the 8 bit bitmap.\n for (const windowId of this.getSpecifiedWindowIds_(windowsBitmap)) {\n const window = this.windows_[windowId];\n if (!window.isVisible()) {\n // We are turning on the visibility, set the start time.\n window.setStartTime(pts);\n }\n window.display();\n }\n }\n\n /**\n * @param {number} windowsBitmap\n * @param {number} pts\n * @return {?shaka.extern.ICaptionDecoder.ClosedCaption}\n * @private\n */\n hideWindows_(windowsBitmap, pts) {\n let parsedClosedCaption = null;\n\n // Hides windows from the 8 bit bitmap.\n for (const windowId of this.getSpecifiedWindowIds_(windowsBitmap)) {\n const window = this.windows_[windowId];\n if (window.isVisible()) {\n // We are turning off the visibility, emit!\n parsedClosedCaption = window.forceEmit(pts, this.serviceNumber_);\n }\n window.hide();\n }\n return parsedClosedCaption;\n }\n\n /**\n * @param {number} windowsBitmap\n * @param {number} pts\n * @return {?shaka.extern.ICaptionDecoder.ClosedCaption}\n * @private\n */\n toggleWindows_(windowsBitmap, pts) {\n let parsedClosedCaption = null;\n\n // Toggles windows from the 8 bit bitmap.\n for (const windowId of this.getSpecifiedWindowIds_(windowsBitmap)) {\n const window = this.windows_[windowId];\n if (window.isVisible()) {\n // We are turning off the visibility, emit!\n parsedClosedCaption = window.forceEmit(pts, this.serviceNumber_);\n } else {\n // We are turning on visibility, set the start time.\n window.setStartTime(pts);\n }\n\n window.toggle();\n }\n return parsedClosedCaption;\n }\n\n /**\n * @param {number} windowsBitmap\n * @param {number} pts\n * @return {?shaka.extern.ICaptionDecoder.ClosedCaption}\n * @private\n */\n deleteWindows_(windowsBitmap, pts) {\n let parsedClosedCaption = null;\n // Deletes windows from the 8 bit bitmap.\n for (const windowId of this.getSpecifiedWindowIds_(windowsBitmap)) {\n const window = this.windows_[windowId];\n if (window.isVisible()) {\n // We are turning off the visibility, emit!\n parsedClosedCaption = window.forceEmit(pts, this.serviceNumber_);\n }\n // Delete the window from the list of windows\n this.windows_[windowId] = null;\n }\n return parsedClosedCaption;\n }\n\n /**\n * Emits anything currently present in any of the windows, and then\n * deletes all windows, cancels all delays, reinitializes the service.\n * @param {number} pts\n * @return {?shaka.extern.ICaptionDecoder.ClosedCaption}\n * @private\n */\n reset_(pts) {\n const allWindowsBitmap = 0xff; // All windows should be deleted.\n const caption = this.deleteWindows_(allWindowsBitmap, pts);\n this.clear();\n return caption;\n }\n\n /**\n * Clears the state of the service completely.\n */\n clear() {\n this.currentWindow_ = null;\n this.windows_ = [null, null, null, null, null, null, null, null];\n }\n\n /**\n * @param {!shaka.cea.DtvccPacket} dtvccPacket\n * @throws {!shaka.util.Error}\n * @private\n */\n setPenAttributes_(dtvccPacket) {\n // Two bytes follow. For the purpose of this decoder, we are only concerned\n // with byte 2, which is of the form |I|U|EDTYP|FNTAG|.\n\n // I (1 bit): Italics toggle.\n // U (1 bit): Underline toggle.\n // EDTYP (3 bits): Edge type (unused in this decoder).\n // FNTAG (3 bits): Font tag (unused in this decoder).\n // More info at https://en.wikipedia.org/wiki/CEA-708#SetPenAttributes_(0x90_+_2_bytes)\n\n dtvccPacket.skip(1); // Skip first byte\n const attrByte2 = dtvccPacket.readByte().value;\n\n if (!this.currentWindow_) {\n return;\n }\n\n const italics = (attrByte2 & 0x80) > 0;\n const underline = (attrByte2 & 0x40) > 0;\n\n this.currentWindow_.setPenItalics(italics);\n this.currentWindow_.setPenUnderline(underline);\n }\n\n /**\n * @param {!shaka.cea.DtvccPacket} dtvccPacket\n * @throws {!shaka.util.Error}\n * @private\n */\n setPenColor_(dtvccPacket) {\n // Read foreground and background properties.\n const foregroundByte = dtvccPacket.readByte().value;\n const backgroundByte = dtvccPacket.readByte().value;\n dtvccPacket.skip(1); // Edge color not supported, skip it.\n\n if (!this.currentWindow_) {\n return;\n }\n\n // Byte semantics are described at the following link:\n // https://en.wikipedia.org/wiki/CEA-708#SetPenColor_(0x91_+_3_bytes)\n\n // Foreground color properties: |FOP|F_R|F_G|F_B|.\n const foregroundBlue = foregroundByte & 0x03;\n const foregroundGreen = (foregroundByte & 0x0c) >> 2;\n const foregroundRed = (foregroundByte & 0x30) >> 4;\n\n // Background color properties: |BOP|B_R|B_G|B_B|.\n const backgroundBlue = backgroundByte & 0x03;\n const backgroundGreen = (backgroundByte & 0x0c) >> 2;\n const backgroundRed = (backgroundByte & 0x30) >> 4;\n\n const foregroundColor = this.rgbColorToHex_(\n foregroundRed, foregroundGreen, foregroundBlue);\n\n const backgroundColor = this.rgbColorToHex_(\n backgroundRed, backgroundGreen, backgroundBlue);\n\n this.currentWindow_.setPenTextColor(foregroundColor);\n this.currentWindow_.setPenBackgroundColor(backgroundColor);\n }\n\n /**\n * @param {!shaka.cea.DtvccPacket} dtvccPacket\n * @throws {!shaka.util.Error}\n * @private\n */\n setPenLocation_(dtvccPacket) {\n // Following 2 bytes take the following form:\n // b1 = |0|0|0|0|ROW| and b2 = |0|0|COLUMN|\n const locationByte1 = dtvccPacket.readByte().value;\n const locationByte2 = dtvccPacket.readByte().value;\n\n if (!this.currentWindow_) {\n return;\n }\n\n const row = locationByte1 & 0x0f;\n const col = locationByte2 & 0x3f;\n this.currentWindow_.setPenLocation(row, col);\n }\n\n /**\n * @param {!shaka.cea.DtvccPacket} dtvccPacket\n * @throws {!shaka.util.Error}\n * @private\n */\n setWindowAttributes_(dtvccPacket) {\n // 4 bytes follow, with the following form:\n // Byte 1 contains fill-color information. Unused in this decoder.\n // Byte 2 contains border color information. Unused in this decoder.\n // Byte 3 contains justification information. In this decoder, we only use\n // the last 2 bits, which specifies text justification on the screen.\n // Byte 4 is special effects. Unused in this decoder.\n // More info at https://en.wikipedia.org/wiki/CEA-708#SetWindowAttributes_(0x97_+_4_bytes)\n dtvccPacket.skip(1); // Fill color not supported, skip.\n dtvccPacket.skip(1); // Border colors not supported, skip.\n const b3 = dtvccPacket.readByte().value;\n dtvccPacket.skip(1); // Effects not supported, skip.\n\n if (!this.currentWindow_) {\n return;\n }\n\n // Word wrap is outdated as of CEA-708-E, so we ignore those bits.\n // Extract the text justification and set it on the window.\n const justification =\n /** @type {!shaka.cea.Cea708Window.TextJustification} */ (b3 & 0x03);\n this.currentWindow_.setJustification(justification);\n }\n\n /**\n * @param {!shaka.cea.DtvccPacket} dtvccPacket\n * @param {number} windowNum\n * @param {number} pts\n * @throws {!shaka.util.Error}\n * @private\n */\n defineWindow_(dtvccPacket, windowNum, pts) {\n // Create the window if it doesn't exist.\n const windowAlreadyExists = this.windows_[windowNum] !== null;\n if (!windowAlreadyExists) {\n const window = new shaka.cea.Cea708Window(windowNum, this.serviceNumber_);\n window.setStartTime(pts);\n this.windows_[windowNum] = window;\n }\n\n // 6 Bytes follow, with the following form:\n // b1 = |0|0|V|R|C|PRIOR| , b2 = |P|VERT_ANCHOR| , b3 = |HOR_ANCHOR|\n // b4 = |ANC_ID|ROW_CNT| , b5 = |0|0|COL_COUNT| , b6 = |0|0|WNSTY|PNSTY|\n // Semantics of these bytes at https://en.wikipedia.org/wiki/CEA-708#DefineWindow07_(0x98-0x9F,_+_6_bytes)\n const b1 = dtvccPacket.readByte().value;\n const b2 = dtvccPacket.readByte().value;\n const b3 = dtvccPacket.readByte().value;\n const b4 = dtvccPacket.readByte().value;\n const b5 = dtvccPacket.readByte().value;\n const b6 = dtvccPacket.readByte().value;\n\n // As per 8.4.7 of CEA-708-E, row locks and column locks are to be ignored.\n // So this decoder will ignore these values.\n\n const visible = (b1 & 0x20) > 0;\n const verticalAnchor = b2 & 0x7f;\n const relativeToggle = (b2 & 0x80) > 0;\n const horAnchor = b3;\n const rowCount = (b4 & 0x0f) + 1; // Spec says to add 1.\n const anchorId = (b4 & 0xf0) >> 4;\n const colCount = (b5 & 0x3f) + 1; // Spec says to add 1.\n\n // If pen style = 0 AND window previously existed, keep its pen style.\n // Otherwise, change the pen style (For now, just reset to the default pen).\n // TODO add support for predefined pen styles and fonts.\n const penStyle = b6 & 0x07;\n if (!windowAlreadyExists || penStyle !== 0) {\n this.windows_[windowNum].resetPen();\n }\n\n this.windows_[windowNum].defineWindow(visible, verticalAnchor,\n horAnchor, anchorId, relativeToggle, rowCount, colCount);\n\n // Set the current window to the newly defined window.\n this.currentWindow_ = this.windows_[windowNum];\n }\n\n /**\n * Maps 64 possible CEA-708 colors to 8 CSS colors.\n * @param {number} red value from 0-3\n * @param {number} green value from 0-3\n * @param {number} blue value from 0-3\n * @return {string}\n * @private\n */\n rgbColorToHex_(red, green, blue) {\n // Rather than supporting 64 colors, this decoder supports 8 colors and\n // gets the closest color, as per 9.19 of CEA-708-E. This is because some\n // colors on television such as white, are often sent with lower intensity\n // and often appear dull/greyish on the browser, making them hard to read.\n\n // As per CEA-708-E 9.19, these mappings will map 64 colors to 8 colors.\n const colorMapping = {0: 0, 1: 0, 2: 1, 3: 1};\n red = colorMapping[red];\n green = colorMapping[green];\n blue = colorMapping[blue];\n\n const colorCode = (red << 2) | (green << 1) | blue;\n return shaka.cea.Cea708Service.Colors[colorCode];\n }\n};\n\n/**\n * @private @const {number}\n */\nshaka.cea.Cea708Service.ASCII_BACKSPACE = 0x08;\n\n/**\n * @private @const {number}\n */\nshaka.cea.Cea708Service.ASCII_FORM_FEED = 0x0c;\n\n/**\n * @private @const {number}\n */\nshaka.cea.Cea708Service.ASCII_CARRIAGE_RETURN = 0x0d;\n\n/**\n * @private @const {number}\n */\nshaka.cea.Cea708Service.ASCII_HOR_CARRIAGE_RETURN = 0x0e;\n\n/**\n * For extended control codes in block_data on CEA-708, byte 1 is 0x10.\n * @private @const {number}\n */\nshaka.cea.Cea708Service.EXT_CEA708_CTRL_CODE_BYTE1 = 0x10;\n\n/**\n * Holds characters mapping for bytes that are G2 control codes.\n * @private @const {!Map}\n */\nshaka.cea.Cea708Service.G2Charset = new Map([\n [0x20, ' '], [0x21, '\\xa0'], [0x25, '…'], [0x2a, 'Š'], [0x2c, 'Œ'],\n [0x30, '█'], [0x31, '‘'], [0x32, '’'], [0x33, '“'], [0x34, '”'],\n [0x35, '•'], [0x39, '™'], [0x3a, 'š'], [0x3c, 'œ'], [0x3d, '℠'],\n [0x3f, 'Ÿ'], [0x76, '⅛'], [0x77, '⅜'], [0x78, '⅝'], [0x79, '⅞'],\n [0x7a, '│'], [0x7b, '┐'], [0x7c, '└'], [0x7d, '─'], [0x7e, '┘'], [0x7f, '┌'],\n]);\n\n/**\n * An array of 8 colors that 64 colors can be quantized to. Order here matters.\n * @private @const {!Array}\n */\nshaka.cea.Cea708Service.Colors = [\n 'black', 'blue', 'green', 'cyan',\n 'red', 'magenta', 'yellow', 'white',\n];\n\n/**\n * CEA-708 closed captions byte.\n * @typedef {{\n * pts: number,\n * type: number,\n * value: number,\n * order: number\n * }}\n *\n * @property {number} pts\n * Presentation timestamp (in second) at which this packet was received.\n * @property {number} type\n * Type of the byte. Either 2 or 3, DTVCC Packet Data or a DTVCC Packet Start.\n * @property {number} value The byte containing data relevant to the packet.\n * @property {number} order\n * A number indicating the order this packet was received in a sequence\n * of packets. Used to break ties in a stable sorting algorithm\n */\nshaka.cea.Cea708Service.Cea708Byte;\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.cea.CeaDecoder');\n\ngoog.require('shaka.cea.Cea608DataChannel');\ngoog.require('shaka.cea.Cea708Service');\ngoog.require('shaka.cea.DtvccPacketBuilder');\ngoog.require('shaka.log');\ngoog.require('shaka.media.ClosedCaptionParser');\ngoog.require('shaka.util.DataViewReader');\ngoog.require('shaka.util.Error');\ngoog.requireType('shaka.cea.DtvccPacket');\n\n\n/**\n * CEA-X08 captions decoder.\n * @implements {shaka.extern.ICaptionDecoder}\n * @export\n */\nshaka.cea.CeaDecoder = class {\n /** */\n constructor() {\n /**\n * An array of CEA-608 closed caption data extracted for decoding.\n * @private {!Array}\n */\n this.cea608DataArray_ = [];\n\n /**\n * An array of CEA-708 closed caption data extracted for decoding.\n * @private {!Array}\n */\n this.cea708DataArray_ = [];\n\n /**\n * A DTVCC Packet builder for CEA-708 data.\n * @private {!shaka.cea.DtvccPacketBuilder}\n */\n this.dtvccPacketBuilder_ = new shaka.cea.DtvccPacketBuilder();\n\n /**\n * Number of consecutive bad frames decoded on CEA-608.\n * @private {number}\n */\n this.badFrames_ = 0;\n\n /**\n * A map containing the stream for each mode.\n * @private {!Map}\n */\n this.cea608ModeToStream_ = new Map([\n ['CC1', new shaka.cea.Cea608DataChannel(0, 0)], // F1 + C1 -> CC1\n ['CC2', new shaka.cea.Cea608DataChannel(0, 1)], // F1 + C2 -> CC2\n ['CC3', new shaka.cea.Cea608DataChannel(1, 0)], // F2 + C1 -> CC3\n ['CC4', new shaka.cea.Cea608DataChannel(1, 1)], // F2 + C2 -> CC4\n ]);\n\n /**\n * The current channel that is active on CEA-608 field 1.\n * @private {number}\n */\n this.currentField1Channel_ = 0;\n\n /**\n * The current channel that is active on CEA-608 field 2.\n * @private {number}\n */\n this.currentField2Channel_ = 0;\n\n /**\n * Map of service number to CEA-708 services, initially empty. Since there\n * can be up to 63 services, they are created dynamically only when needed.\n * @private {!Map}\n */\n this.serviceNumberToService_ = new Map();\n\n /**\n * @private {boolean}\n */\n this.waitingForFirstPacket_ = true;\n\n /**\n * Set used to track available streams.\n * @private {!Set.}\n */\n this.streams_ = new Set();\n\n this.reset();\n }\n\n /**\n * Clears the decoder.\n * @override\n */\n clear() {\n shaka.log.debug('Clearing CEA decoder');\n this.badFrames_ = 0;\n this.cea608DataArray_ = [];\n this.cea708DataArray_ = [];\n this.dtvccPacketBuilder_.clear();\n this.reset();\n\n // Clear all the CEA-708 services.\n for (const service of this.serviceNumberToService_.values()) {\n service.clear();\n }\n }\n\n /**\n * Resets the decoder.\n */\n reset() {\n shaka.log.debug('Resetting CEA decoder');\n this.currentField1Channel_ = 0;\n this.currentField2Channel_ = 0;\n for (const stream of this.cea608ModeToStream_.values()) {\n stream.reset();\n }\n this.waitingForFirstPacket_ = true;\n }\n\n /**\n * Extracts closed caption bytes from CEA-X08 packets from the stream based on\n * ANSI/SCTE 128 and A/53, Part 4.\n * @override\n */\n extract(userDataSeiMessage, pts) {\n if (this.waitingForFirstPacket_) {\n shaka.log.debug('Setting first pts value to', pts);\n for (const stream of this.cea608ModeToStream_.values()) {\n stream.firstPts(pts);\n }\n this.waitingForFirstPacket_ = false;\n }\n\n const reader = new shaka.util.DataViewReader(\n userDataSeiMessage, shaka.util.DataViewReader.Endianness.BIG_ENDIAN);\n\n if (reader.getLength() < shaka.cea.CeaDecoder.MIN_LENGTH) {\n return;\n }\n if (reader.readUint8() !== shaka.cea.CeaDecoder.USA_COUNTRY_CODE) {\n return;\n }\n if (reader.readUint16() !== shaka.cea.CeaDecoder.ATSC_PROVIDER_CODE) {\n return;\n }\n if (reader.readUint32() !== shaka.cea.CeaDecoder.ATSC1_USER_IDENTIFIER) {\n return;\n }\n\n // user_data_type_code: 0x03 - cc_data()\n if (reader.readUint8() !== 0x03) {\n return;\n }\n\n // 1 bit reserved\n // 1 bit process_cc_data_flag\n // 1 bit zero_bit\n // 5 bits cc_count\n const captionData = reader.readUint8();\n // If process_cc_data_flag is not set, do not process this data.\n if ((captionData & 0x40) === 0) {\n return;\n }\n\n const count = captionData & 0x1f;\n\n // 8 bits reserved\n reader.skip(1);\n\n for (let i = 0; i < count; i++) {\n const cc = reader.readUint8();\n // When ccValid is 0, the next two bytes should be discarded.\n const ccValid = (cc & 0x04) >> 2;\n const ccData1 = reader.readUint8();\n const ccData2 = reader.readUint8();\n\n if (ccValid) {\n const ccType = cc & 0x03;\n // Send the packet to the appropriate data array (CEA-608 or CEA-708).\n if (ccType === shaka.cea.CeaDecoder.NTSC_CC_FIELD_1 ||\n ccType === shaka.cea.CeaDecoder.NTSC_CC_FIELD_2) {\n // CEA-608 NTSC (Line 21) Data.\n this.cea608DataArray_.push({\n pts,\n type: ccType,\n ccData1,\n ccData2,\n order: this.cea608DataArray_.length,\n });\n } else {\n // CEA-708 DTVCC Data.\n this.cea708DataArray_.push({\n pts,\n type: ccType,\n value: ccData1,\n order: this.cea708DataArray_.length,\n });\n\n // The second byte should always be labelled as DTVCC packet data.\n // Even if this pair was a DTVCC packet start, only the first byte\n // contains header info, and the second byte is just packet data.\n this.cea708DataArray_.push({\n pts,\n type: shaka.cea.DtvccPacketBuilder.DTVCC_PACKET_DATA,\n value: ccData2,\n order: this.cea708DataArray_.length,\n });\n }\n }\n }\n }\n\n /**\n * Decodes extracted closed caption data.\n * @override\n */\n decode() {\n /** @type {!Array.} */\n const parsedClosedCaptions = [];\n\n // In some versions of Chrome, and other browsers, the default sorting\n // algorithm isn't stable. This comparator sorts on presentation\n // timestamp, and breaks ties on receive order (position in array).\n const stableComparator =\n (p1, p2) => (p1.pts - p2.pts) || (p1.order - p2.order);\n\n this.cea608DataArray_.sort(stableComparator);\n this.cea708DataArray_.sort(stableComparator);\n\n // CEA-608 packets are just byte pairs. Decode all of them.\n for (const cea608Packet of this.cea608DataArray_) {\n const parsedClosedCaption = this.decodeCea608_(cea608Packet);\n if (parsedClosedCaption) {\n parsedClosedCaptions.push(parsedClosedCaption);\n }\n }\n\n // CEA-708 packets are DTVCC packets composed of many byte pairs. Add all\n // byte pairs to the packet builder, and process + clear any ready packets.\n for (const cea708Byte of this.cea708DataArray_) {\n this.dtvccPacketBuilder_.addByte(cea708Byte);\n }\n const dtvccPackets = this.dtvccPacketBuilder_.getBuiltPackets();\n for (const dtvccPacket of dtvccPackets) {\n const closedCaptions = this.decodeCea708_(dtvccPacket);\n parsedClosedCaptions.push(...closedCaptions);\n }\n\n // Clear all processed data.\n this.dtvccPacketBuilder_.clearBuiltPackets();\n this.cea608DataArray_ = [];\n this.cea708DataArray_ = [];\n\n return parsedClosedCaptions;\n }\n\n /**\n * Decodes a CEA-608 closed caption packet based on ANSI/CEA-608.\n * @param {shaka.cea.Cea608DataChannel.Cea608Packet} ccPacket\n * @return {?shaka.extern.ICaptionDecoder.ClosedCaption}\n * @private\n */\n decodeCea608_(ccPacket) {\n const fieldNum = ccPacket.type;\n\n // If this packet is a control code, then it also sets the channel.\n // For control codes, cc_data_1 has the form |P|0|0|1|C|X|X|X|.\n // \"C\" is the channel bit. It indicates whether to set C2 active.\n if (shaka.cea.Cea608DataChannel.isControlCode(ccPacket.ccData1)) {\n const channelNum = (ccPacket.ccData1 >> 3) & 0x01; // Get channel bit.\n\n // Change the stream based on the field, and the new channel\n if (fieldNum === 0) {\n this.currentField1Channel_ = channelNum;\n } else {\n this.currentField2Channel_ = channelNum;\n }\n }\n\n // Get the correct stream for this caption packet (CC1, ..., CC4)\n const selectedChannel = fieldNum ?\n this.currentField2Channel_ : this.currentField1Channel_;\n const selectedMode = `CC${((fieldNum << 1) | selectedChannel) + 1}`;\n const selectedStream = this.cea608ModeToStream_.get(selectedMode);\n\n // Check for bad frames (bad pairs). This can be two 0xff, two 0x00, or any\n // byte of even parity. ccData1 and ccData2 should be uint8 of odd parity.\n if ((ccPacket.ccData1 === 0xff && ccPacket.ccData2 === 0xff) ||\n (!ccPacket.ccData1 && !ccPacket.ccData2) ||\n !this.isOddParity_(ccPacket.ccData1) ||\n !this.isOddParity_(ccPacket.ccData2)) {\n // Per CEA-608-B C.21, reset the memory after 45 consecutive bad frames.\n if (++this.badFrames_ >= 45) {\n this.reset();\n }\n return null;\n }\n this.badFrames_ = 0;\n\n // Remove the MSB (parity bit).\n ccPacket.ccData1 &= 0x7f;\n ccPacket.ccData2 &= 0x7f;\n\n // Ignore XDS\n if (shaka.cea.Cea608DataChannel.isXdsControlCode(ccPacket.ccData1)) {\n return null;\n }\n\n // Check for empty captions and skip them.\n if (!ccPacket.ccData1 && !ccPacket.ccData2) {\n return null;\n }\n\n // Process the clean CC data pair.\n let parsedClosedCaption = null;\n if (shaka.cea.Cea608DataChannel.isControlCode(ccPacket.ccData1)) {\n this.streams_.add(selectedMode);\n parsedClosedCaption = selectedStream.handleControlCode(ccPacket);\n } else {\n // Handle as a Basic North American Character.\n selectedStream.handleBasicNorthAmericanChar(\n ccPacket.ccData1, ccPacket.ccData2);\n }\n\n return parsedClosedCaption;\n }\n\n /**\n * Decodes a CEA-708 DTVCC packet based on ANSI/CTA-708-E.\n * @param {shaka.cea.DtvccPacket} dtvccPacket\n * @return {!Array}\n * @private\n */\n decodeCea708_(dtvccPacket) {\n const parsedClosedCaptions = [];\n try {\n while (dtvccPacket.hasMoreData()) {\n // Process a service block.\n const serviceBlockHeader = dtvccPacket.readByte().value;\n\n // First 3 bits are service number, next 5 are block size,\n // representing the number of bytes coming in this block\n // (discluding a possible extended service block header byte)\n let serviceNumber = (serviceBlockHeader & 0xe0) >> 5;\n const blockSize = serviceBlockHeader & 0x1f;\n\n if (serviceNumber === /* 0b111 */ 0x07 && blockSize != 0) {\n // 2 bits null padding, 6 bits extended service number\n const extendedServiceBlockHeader = dtvccPacket.readByte().value;\n serviceNumber = extendedServiceBlockHeader & 0x3f;\n }\n\n // As per CEA-708-E, service number 0 is invalid, and should be ignored.\n if (serviceNumber != 0) {\n this.streams_.add('svc'+ serviceNumber);\n // If the service doesn't already exist, create it.\n if (!this.serviceNumberToService_.has(serviceNumber)) {\n const service = new shaka.cea.Cea708Service(serviceNumber);\n this.serviceNumberToService_.set(serviceNumber, service);\n }\n const service = this.serviceNumberToService_.get(serviceNumber);\n\n // Process all control codes.\n const startPos = dtvccPacket.getPosition();\n\n // Execute this loop `blockSize` times, to decode the control codes.\n while (dtvccPacket.getPosition() - startPos < blockSize) {\n const closedCaption = service.handleCea708ControlCode(dtvccPacket);\n if (closedCaption) {\n parsedClosedCaptions.push(closedCaption);\n }\n } // position < end of block\n } // serviceNumber != 0\n } // hasMoreData\n } catch (error) {\n if (error instanceof shaka.util.Error &&\n error.code === shaka.util.Error.Code.BUFFER_READ_OUT_OF_BOUNDS) {\n shaka.log.warnOnce('CEA708_INVALID_DATA',\n 'Buffer read out of bounds / invalid CEA-708 Data.');\n } else {\n // This is an unexpected error, and should be rethrown.\n throw error;\n }\n }\n return parsedClosedCaptions;\n }\n\n /**\n * Checks if a byte has odd parity (Odd number of 1s in binary).\n * @param {number} byte\n * @return {boolean} True if the byte has odd parity.\n * @private\n */\n isOddParity_(byte) {\n let parity = 0;\n while (byte) {\n parity ^= (byte & 1); // toggle parity if low bit is 1\n byte >>= 1; // shift away the low bit\n }\n return parity === 1;\n }\n\n /**\n * Returns the streams that the CEA decoder found.\n *\n * @override\n */\n getStreams() {\n return Array.from(this.streams_);\n }\n};\n\n/**\n * itu_t_35_provider_code for ATSC user_data\n * @private @const {number}\n */\nshaka.cea.CeaDecoder.ATSC_PROVIDER_CODE = 0x0031;\n\n/**\n * When provider is ATSC user data, the ATSC_user_identifier code\n * for ATSC1_data is \"GA94\" (0x47413934)\n * @private @const {number}\n */\nshaka.cea.CeaDecoder.ATSC1_USER_IDENTIFIER = 0x47413934;\n\n/**\n * @private @const {number}\n */\nshaka.cea.CeaDecoder.NTSC_CC_FIELD_1 = 0;\n\n/**\n * @private @const {number}\n */\nshaka.cea.CeaDecoder.NTSC_CC_FIELD_2 = 1;\n\n/**\n * 0xB5 is USA's code (Rec. ITU-T T.35)\n * @private @const {number}\n */\nshaka.cea.CeaDecoder.USA_COUNTRY_CODE = 0xb5;\n\n/**\n * Caption packet min length\n * Country Code + ATSC_PROVIDER_CODE + ATSC_1_USER_IDENTIFIER + USER_DATA_TYPE\n * @private @const {number}\n */\nshaka.cea.CeaDecoder.MIN_LENGTH = 8;\n\nshaka.media.ClosedCaptionParser.registerDecoder(\n () => new shaka.cea.CeaDecoder());\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.cea.SeiProcessor');\n\n\n/**\n * H.264 SEI NALU Parser used for extracting 708 closed caption packets.\n */\nshaka.cea.SeiProcessor = class {\n /**\n * Processes supplemental enhancement information data.\n * @param {!Uint8Array} naluData NALU from which SEI data is to be processed.\n * @return {!Array.}\n */\n process(naluData) {\n const seiPayloads = [];\n const naluClone = this.removeEmu(naluData);\n\n // The following is an implementation of section 7.3.2.3.1\n // in Rec. ITU-T H.264 (06/2019), the H.264 spec.\n let offset = 0;\n\n while (offset < naluClone.length) {\n let payloadType = 0; // SEI payload type as defined by H.264 spec\n while (naluClone[offset] == 0xFF) {\n payloadType += 255;\n offset++;\n }\n payloadType += naluClone[offset++];\n\n let payloadSize = 0; // SEI payload size as defined by H.264 spec\n while (naluClone[offset] == 0xFF) {\n payloadSize += 255;\n offset++;\n }\n payloadSize += naluClone[offset++];\n\n // Payload type 4 is user_data_registered_itu_t_t35, as per the H.264\n // spec. This payload type contains caption data.\n if (payloadType == 0x04) {\n seiPayloads.push(naluClone.subarray(offset, offset + payloadSize));\n }\n offset += payloadSize;\n }\n\n return seiPayloads;\n }\n\n\n /**\n * Removes H.264 emulation prevention bytes from the byte array.\n *\n * Note: Remove bytes by shifting will cause Chromium (VDA) to complain\n * about conformance. Recreating a new array solves it.\n *\n * @param {!Uint8Array} naluData NALU from which EMUs should be removed.\n * @return {!Uint8Array} The NALU with the emulation prevention byte removed.\n */\n removeEmu(naluData) {\n let naluClone = naluData;\n let zeroCount = 0;\n let src = 0;\n while (src < naluClone.length) {\n if (zeroCount == 2 && naluClone[src] == 0x03) {\n // 0x00, 0x00, 0x03 pattern detected\n zeroCount = 0;\n\n // Splice the array and recreate a new one, instead of shifting bytes\n const newArr = [...naluClone];\n newArr.splice(src, 1);\n naluClone = new Uint8Array(newArr);\n } else {\n if (naluClone[src] == 0x00) {\n zeroCount++;\n } else {\n zeroCount = 0;\n }\n }\n src++;\n }\n return naluClone;\n }\n};\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.cea.Mp4CeaParser');\n\ngoog.require('goog.asserts');\ngoog.require('shaka.cea.CeaUtils');\ngoog.require('shaka.cea.SeiProcessor');\ngoog.require('shaka.log');\ngoog.require('shaka.media.ClosedCaptionParser');\ngoog.require('shaka.util.DataViewReader');\ngoog.require('shaka.util.Error');\ngoog.require('shaka.util.Mp4Parser');\ngoog.require('shaka.util.Mp4BoxParsers');\n\n/**\n * MPEG4 stream parser used for extracting 708 closed captions data.\n * @implements {shaka.extern.ICeaParser}\n * @export\n */\nshaka.cea.Mp4CeaParser = class {\n /** */\n constructor() {\n /**\n * SEI data processor.\n * @private\n * @const {!shaka.cea.SeiProcessor}\n */\n this.seiProcessor_ = new shaka.cea.SeiProcessor();\n\n /**\n * Map of track id to corresponding timescale.\n * @private {!Map}\n */\n this.trackIdToTimescale_ = new Map();\n\n /**\n * Default sample duration, as specified by the TREX box.\n * @private {number}\n */\n this.defaultSampleDuration_ = 0;\n\n /**\n * Default sample size, as specified by the TREX box.\n * @private {number}\n */\n this.defaultSampleSize_ = 0;\n\n /**\n * @private {shaka.cea.Mp4CeaParser.BitstreamFormat}\n */\n this.bitstreamFormat_ = shaka.cea.Mp4CeaParser.BitstreamFormat.UNKNOWN;\n }\n\n /**\n * Parses the init segment. Gets Default Sample Duration and Size from the\n * TREX box, and constructs a map of Track IDs to timescales. Each TRAK box\n * contains a track header (TKHD) containing track ID, and a media header box\n * (MDHD) containing the timescale for the track\n * @override\n */\n init(initSegment) {\n const Mp4Parser = shaka.util.Mp4Parser;\n const BitstreamFormat = shaka.cea.Mp4CeaParser.BitstreamFormat;\n const trackIds = [];\n const timescales = [];\n\n const codecBoxParser = (box) => this.setBitstreamFormat_(box.name);\n\n new Mp4Parser()\n .box('moov', Mp4Parser.children)\n .box('mvex', Mp4Parser.children)\n .fullBox('trex', (box) => {\n const parsedTREXBox = shaka.util.Mp4BoxParsers.parseTREX(\n box.reader);\n\n this.defaultSampleDuration_ = parsedTREXBox.defaultSampleDuration;\n this.defaultSampleSize_ = parsedTREXBox.defaultSampleSize;\n })\n .box('trak', Mp4Parser.children)\n .fullBox('tkhd', (box) => {\n goog.asserts.assert(\n box.version != null,\n 'TKHD is a full box and should have a valid version.');\n const parsedTKHDBox = shaka.util.Mp4BoxParsers.parseTKHD(\n box.reader, box.version);\n trackIds.push(parsedTKHDBox.trackId);\n })\n .box('mdia', Mp4Parser.children)\n .fullBox('mdhd', (box) => {\n goog.asserts.assert(\n box.version != null,\n 'MDHD is a full box and should have a valid version.');\n const parsedMDHDBox = shaka.util.Mp4BoxParsers.parseMDHD(\n box.reader, box.version);\n timescales.push(parsedMDHDBox.timescale);\n })\n .box('minf', Mp4Parser.children)\n .box('stbl', Mp4Parser.children)\n .fullBox('stsd', Mp4Parser.sampleDescription)\n\n // These are the various boxes that signal a codec.\n .box('avc1', codecBoxParser)\n .box('avc3', codecBoxParser)\n .box('dvav', codecBoxParser)\n .box('dva1', codecBoxParser)\n .box('hev1', codecBoxParser)\n .box('hvc1', codecBoxParser)\n .box('dvh1', codecBoxParser)\n .box('dvhe', codecBoxParser)\n .box('vvc1', codecBoxParser)\n .box('vvi1', codecBoxParser)\n .box('dvc1', codecBoxParser)\n .box('dvi1', codecBoxParser)\n\n // This signals an encrypted sample, which we can go inside of to find\n // the codec used.\n .box('encv', Mp4Parser.visualSampleEntry)\n .box('sinf', Mp4Parser.children)\n .box('frma', (box) => {\n const {codec} = shaka.util.Mp4BoxParsers.parseFRMA(box.reader);\n this.setBitstreamFormat_(codec);\n })\n\n .parse(initSegment, /* partialOkay= */ true);\n\n // At least one track should exist, and each track should have a\n // corresponding Id in TKHD box, and timescale in its MDHD box\n if (!trackIds.length|| !timescales.length ||\n trackIds.length != timescales.length) {\n throw new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.TEXT,\n shaka.util.Error.Code.INVALID_MP4_CEA);\n }\n\n if (this.bitstreamFormat_ == BitstreamFormat.UNKNOWN) {\n shaka.log.alwaysWarn(\n 'Unable to determine bitstream format for CEA parsing!');\n }\n\n // Populate the map from track Id to timescale\n trackIds.forEach((trackId, idx) => {\n this.trackIdToTimescale_.set(trackId, timescales[idx]);\n });\n }\n\n /**\n * Parses each video segment. In fragmented MP4s, MOOF and MDAT come in\n * pairs. The following logic gets the necessary info from MOOFs to parse\n * MDATs (base media decode time, sample sizes/offsets/durations, etc),\n * and then parses the MDAT boxes for CEA-708 packets using this information.\n * CEA-708 packets are returned in the callback.\n * @override\n */\n parse(mediaSegment) {\n const Mp4Parser = shaka.util.Mp4Parser;\n const BitstreamFormat = shaka.cea.Mp4CeaParser.BitstreamFormat;\n\n if (this.bitstreamFormat_ == BitstreamFormat.UNKNOWN) {\n // We don't know how to extract SEI from this.\n return [];\n }\n\n /** @type {!Array} **/\n const captionPackets = [];\n\n let moofOffset = 0;\n\n /** @type {!Array} */\n let parsedTRAFs = [];\n\n new Mp4Parser()\n .box('moof', (box) => {\n moofOffset = box.start;\n // traf box parsing is reset on each moof.\n parsedTRAFs = [];\n Mp4Parser.children(box);\n })\n .box('traf', (box) => {\n parsedTRAFs.push({\n baseMediaDecodeTime: null,\n defaultSampleDuration: this.defaultSampleDuration_,\n defaultSampleSize: this.defaultSampleSize_,\n parsedTRUNs: [],\n timescale: shaka.cea.CeaUtils.DEFAULT_TIMESCALE_VALUE,\n });\n Mp4Parser.children(box);\n })\n .fullBox('trun', (box) => {\n goog.asserts.assert(\n box.version != null && box.flags != null,\n 'TRUN is a full box and should have a valid version & flags.');\n\n const lastTRAF = parsedTRAFs[parsedTRAFs.length - 1];\n\n const parsedTRUN = shaka.util.Mp4BoxParsers.parseTRUN(\n box.reader, box.version, box.flags);\n lastTRAF.parsedTRUNs.push(parsedTRUN);\n })\n .fullBox('tfhd', (box) => {\n goog.asserts.assert(\n box.flags != null,\n 'TFHD is a full box and should have valid flags.');\n\n const lastTRAF = parsedTRAFs[parsedTRAFs.length - 1];\n\n const parsedTFHD = shaka.util.Mp4BoxParsers.parseTFHD(\n box.reader, box.flags);\n\n // If specified, defaultSampleDuration and defaultSampleSize\n // override the ones specified in the TREX box\n lastTRAF.defaultSampleDuration = parsedTFHD.defaultSampleDuration ||\n this.defaultSampleDuration_;\n\n lastTRAF.defaultSampleSize = parsedTFHD.defaultSampleSize ||\n this.defaultSampleSize_;\n\n const trackId = parsedTFHD.trackId;\n\n // Get the timescale from the track Id\n if (this.trackIdToTimescale_.has(trackId)) {\n lastTRAF.timescale = this.trackIdToTimescale_.get(trackId);\n }\n })\n .fullBox('tfdt', (box) => {\n goog.asserts.assert(\n box.version != null,\n 'TFDT is a full box and should have a valid version.');\n\n const lastTRAF = parsedTRAFs[parsedTRAFs.length - 1];\n\n const parsedTFDT = shaka.util.Mp4BoxParsers.parseTFDTInaccurate(\n box.reader, box.version);\n\n lastTRAF.baseMediaDecodeTime = parsedTFDT.baseMediaDecodeTime;\n })\n .box('mdat', (box) => {\n const offset = moofOffset - box.start - 8;\n const initialPosition = box.reader.getPosition();\n for (const parsedTRAF of parsedTRAFs) {\n if (parsedTRAF.baseMediaDecodeTime === null) {\n // This field should have been populated by the Base Media Decode\n // Time in the tfdt box.\n shaka.log.alwaysWarn(\n 'Unable to find base media decode time for CEA captions!');\n throw new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.TEXT,\n shaka.util.Error.Code.INVALID_MP4_CEA);\n }\n box.reader.seek(initialPosition);\n this.parseMdat_(box.reader,\n parsedTRAF.baseMediaDecodeTime,\n parsedTRAF.timescale,\n parsedTRAF.defaultSampleDuration,\n parsedTRAF.defaultSampleSize,\n offset,\n parsedTRAF.parsedTRUNs,\n captionPackets);\n }\n })\n .parse(mediaSegment, /* partialOkay= */ false);\n\n return captionPackets;\n }\n\n /**\n * Parse MDAT box.\n * @param {!shaka.util.DataViewReader} reader\n * @param {number} time\n * @param {number} timescale\n * @param {number} defaultSampleDuration\n * @param {number} defaultSampleSize\n * @param {number} offset\n * @param {!Array} parsedTRUNs\n * @param {!Array} captionPackets\n * @private\n */\n parseMdat_(reader, time, timescale, defaultSampleDuration,\n defaultSampleSize, offset, parsedTRUNs, captionPackets) {\n const BitstreamFormat = shaka.cea.Mp4CeaParser.BitstreamFormat;\n const CeaUtils = shaka.cea.CeaUtils;\n let sampleIndex = 0;\n\n // The fields in each ParsedTRUNSample contained in the sampleData\n // array are nullable. In the case of sample data and sample duration,\n // we use the defaults provided by the TREX/TFHD boxes. For sample\n // composition time offset, we default to 0.\n let sampleSize = defaultSampleSize;\n\n // Combine all sample data. This assumes that the samples described across\n // multiple trun boxes are still continuous in the mdat box.\n const sampleDatas = parsedTRUNs.map((t) => t.sampleData);\n const sampleData = [].concat(...sampleDatas);\n\n if (sampleData.length) {\n sampleSize = sampleData[0].sampleSize || defaultSampleSize;\n }\n\n reader.skip(offset + parsedTRUNs[0].dataOffset);\n\n while (reader.hasMoreData()) {\n const naluSize = reader.readUint32();\n const naluHeader = reader.readUint8();\n let naluType = null;\n let isSeiMessage = false;\n let naluHeaderSize = 1;\n\n goog.asserts.assert(this.bitstreamFormat_ != BitstreamFormat.UNKNOWN,\n 'Bitstream format should have been checked before now!');\n switch (this.bitstreamFormat_) {\n case BitstreamFormat.H264:\n naluType = naluHeader & 0x1f;\n isSeiMessage = naluType == CeaUtils.H264_NALU_TYPE_SEI;\n break;\n\n case BitstreamFormat.H265:\n naluHeaderSize = 2;\n reader.skip(1);\n naluType = (naluHeader >> 1) & 0x3f;\n isSeiMessage =\n naluType == CeaUtils.H265_PREFIX_NALU_TYPE_SEI ||\n naluType == CeaUtils.H265_SUFFIX_NALU_TYPE_SEI;\n break;\n\n case BitstreamFormat.H266:\n naluHeaderSize = 2;\n reader.skip(1);\n naluType = (naluHeader >> 1) & 0x3f;\n isSeiMessage =\n naluType == CeaUtils.H266_PREFIX_NALU_TYPE_SEI ||\n naluType == CeaUtils.H266_SUFFIX_NALU_TYPE_SEI;\n break;\n\n default:\n return;\n }\n\n if (isSeiMessage) {\n let timeOffset = 0;\n\n if (sampleIndex < sampleData.length) {\n timeOffset = sampleData[sampleIndex].sampleCompositionTimeOffset || 0;\n }\n\n const pts = (time + timeOffset) / timescale;\n for (const packet of this.seiProcessor_\n .process(reader.readBytes(naluSize - naluHeaderSize))) {\n captionPackets.push({\n packet,\n pts,\n });\n }\n } else {\n try {\n reader.skip(naluSize - naluHeaderSize);\n } catch (e) {\n // It is necessary to ignore this error because it can break the start\n // of playback even if the user does not want to see the subtitles.\n break;\n }\n }\n sampleSize -= (naluSize + 4);\n if (sampleSize == 0) {\n if (sampleIndex < sampleData.length) {\n time += sampleData[sampleIndex].sampleDuration ||\n defaultSampleDuration;\n } else {\n time += defaultSampleDuration;\n }\n\n sampleIndex++;\n\n if (sampleIndex < sampleData.length) {\n sampleSize = sampleData[sampleIndex].sampleSize || defaultSampleSize;\n } else {\n sampleSize = defaultSampleSize;\n }\n }\n }\n }\n\n /**\n * @param {string} codec A fourcc for a codec.\n * @private\n */\n setBitstreamFormat_(codec) {\n if (codec in shaka.cea.Mp4CeaParser.CodecBitstreamMap_) {\n this.bitstreamFormat_ = shaka.cea.Mp4CeaParser.CodecBitstreamMap_[codec];\n }\n }\n};\n\n/** @enum {number} */\nshaka.cea.Mp4CeaParser.BitstreamFormat = {\n UNKNOWN: 0,\n H264: 1,\n H265: 2,\n H266: 3,\n};\n\n/** @private {Object.} */\nshaka.cea.Mp4CeaParser.CodecBitstreamMap_ = {\n // AVC\n 'avc1': shaka.cea.Mp4CeaParser.BitstreamFormat.H264,\n 'avc3': shaka.cea.Mp4CeaParser.BitstreamFormat.H264,\n // Dolby Vision based in AVC\n 'dvav': shaka.cea.Mp4CeaParser.BitstreamFormat.H264,\n 'dva1': shaka.cea.Mp4CeaParser.BitstreamFormat.H264,\n // HEVC\n 'hev1': shaka.cea.Mp4CeaParser.BitstreamFormat.H265,\n 'hvc1': shaka.cea.Mp4CeaParser.BitstreamFormat.H265,\n // Dolby Vision based in HEVC\n 'dvh1': shaka.cea.Mp4CeaParser.BitstreamFormat.H265,\n 'dvhe': shaka.cea.Mp4CeaParser.BitstreamFormat.H265,\n // VVC\n 'vvc1': shaka.cea.Mp4CeaParser.BitstreamFormat.H266,\n 'vvi1': shaka.cea.Mp4CeaParser.BitstreamFormat.H266,\n // Dolby Vision based in VVC\n 'dvc1': shaka.cea.Mp4CeaParser.BitstreamFormat.H266,\n 'dvi1': shaka.cea.Mp4CeaParser.BitstreamFormat.H266,\n};\n\n/**\n * @typedef {{\n * baseMediaDecodeTime: ?number,\n * defaultSampleDuration: number,\n * defaultSampleSize: number,\n * parsedTRUNs: !Array,\n * timescale: number\n * }}\n *\n * @property {?number} baseMediaDecodeTime\n * @property {number} defaultSampleDuration\n * @property {number} defaultSampleSize\n * @property {!Array} parsedTRUNs\n * @property {?number} timescale\n */\nshaka.cea.Mp4CeaParser.ParsedTRAF;\n\nshaka.media.ClosedCaptionParser.registerParser('video/mp4',\n () => new shaka.cea.Mp4CeaParser());\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.cea.TsCeaParser');\n\ngoog.require('shaka.cea.CeaUtils');\ngoog.require('shaka.cea.SeiProcessor');\ngoog.require('shaka.media.ClosedCaptionParser');\ngoog.require('shaka.util.BufferUtils');\ngoog.require('shaka.util.TsParser');\n\n/**\n * MPEG TS CEA parser.\n * @implements {shaka.extern.ICeaParser}\n * @export\n */\nshaka.cea.TsCeaParser = class {\n /** */\n constructor() {\n /**\n * SEI data processor.\n * @private\n * @const {!shaka.cea.SeiProcessor}\n */\n this.seiProcessor_ = new shaka.cea.SeiProcessor();\n\n /** @private {?shaka.util.TsParser} */\n this.tsParser_ = null;\n }\n\n /**\n * @override\n */\n init(initSegment) {\n // TS hasn't init segment\n }\n\n /**\n * @override\n */\n parse(mediaSegment) {\n const CeaUtils = shaka.cea.CeaUtils;\n\n if (!this.tsParser_) {\n this.tsParser_ = new shaka.util.TsParser();\n } else {\n this.tsParser_.clearData();\n }\n\n /** @type {!Array} **/\n const captionPackets = [];\n\n const uint8ArrayData = shaka.util.BufferUtils.toUint8(mediaSegment);\n if (!shaka.util.TsParser.probe(uint8ArrayData)) {\n return captionPackets;\n }\n const tsParser = this.tsParser_.parse(uint8ArrayData);\n const codecs = tsParser.getCodecs();\n const videoNalus = tsParser.getVideoNalus();\n const validNaluTypes = [];\n switch (codecs.video) {\n case 'avc':\n validNaluTypes.push(CeaUtils.H264_NALU_TYPE_SEI);\n break;\n case 'hvc':\n validNaluTypes.push(CeaUtils.H265_PREFIX_NALU_TYPE_SEI);\n validNaluTypes.push(CeaUtils.H265_SUFFIX_NALU_TYPE_SEI);\n break;\n }\n if (!validNaluTypes.length) {\n return captionPackets;\n }\n for (const nalu of videoNalus) {\n if (validNaluTypes.includes(nalu.type) && nalu.time != null) {\n for (const packet of this.seiProcessor_.process(nalu.data)) {\n captionPackets.push({\n packet: packet,\n pts: nalu.time,\n });\n }\n }\n }\n return captionPackets;\n }\n};\n\nshaka.media.ClosedCaptionParser.registerParser('video/mp2t',\n () => new shaka.cea.TsCeaParser());\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.dash.ContentProtection');\n\ngoog.require('goog.asserts');\ngoog.require('shaka.log');\ngoog.require('shaka.util.BufferUtils');\ngoog.require('shaka.util.Error');\ngoog.require('shaka.util.ManifestParserUtils');\ngoog.require('shaka.util.Platform');\ngoog.require('shaka.util.Pssh');\ngoog.require('shaka.util.StringUtils');\ngoog.require('shaka.util.TXml');\ngoog.require('shaka.util.Uint8ArrayUtils');\n\n\n/**\n * @summary A set of functions for parsing and interpreting ContentProtection\n * elements.\n */\nshaka.dash.ContentProtection = class {\n /**\n * Parses info from the ContentProtection elements at the AdaptationSet level.\n *\n * @param {!Array.} elems\n * @param {boolean} ignoreDrmInfo\n * @param {!Object.} keySystemsByURI\n * @return {shaka.dash.ContentProtection.Context}\n */\n static parseFromAdaptationSet(elems, ignoreDrmInfo, keySystemsByURI) {\n const ContentProtection = shaka.dash.ContentProtection;\n const ManifestParserUtils = shaka.util.ManifestParserUtils;\n const parsed = ContentProtection.parseElements_(elems);\n /** @type {Array.} */\n let defaultInit = null;\n /** @type {!Array.} */\n let drmInfos = [];\n let parsedNonCenc = [];\n /** @type {?shaka.dash.ContentProtection.Aes128Info} */\n let aes128Info = null;\n\n // Get the default key ID; if there are multiple, they must all match.\n const keyIds = new Set(parsed.map((element) => element.keyId));\n // Remove any possible null value (elements may have no key ids).\n keyIds.delete(null);\n\n let encryptionScheme = 'cenc';\n\n if (keyIds.size > 1) {\n throw new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.MANIFEST,\n shaka.util.Error.Code.DASH_CONFLICTING_KEY_IDS);\n }\n\n if (!ignoreDrmInfo) {\n const aes128Elements = parsed.filter((elem) => {\n return elem.schemeUri == ContentProtection.Aes128Protection_;\n });\n\n if (aes128Elements.length > 1) {\n throw new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.MANIFEST,\n shaka.util.Error.Code.DASH_CONFLICTING_AES_128);\n }\n\n if (aes128Elements.length) {\n aes128Info = ContentProtection.parseAes128_(aes128Elements[0]);\n }\n\n const mp4ProtectionParsed = parsed.find((elem) => {\n return elem.schemeUri == ContentProtection.MP4Protection_;\n });\n\n if (mp4ProtectionParsed && mp4ProtectionParsed.encryptionScheme) {\n encryptionScheme = mp4ProtectionParsed.encryptionScheme;\n }\n\n // Find the default key ID and init data. Create a new array of all the\n // non-CENC elements.\n parsedNonCenc = parsed.filter((elem) => {\n if (elem.schemeUri == ContentProtection.MP4Protection_) {\n goog.asserts.assert(!elem.init || elem.init.length,\n 'Init data must be null or non-empty.');\n defaultInit = elem.init || defaultInit;\n return false;\n } else {\n return elem.schemeUri != ContentProtection.Aes128Protection_;\n }\n });\n\n if (parsedNonCenc.length) {\n drmInfos = ContentProtection.convertElements_(defaultInit,\n encryptionScheme, parsedNonCenc, keySystemsByURI, keyIds);\n\n // If there are no drmInfos after parsing, then add a dummy entry.\n // This may be removed in parseKeyIds.\n if (drmInfos.length == 0) {\n drmInfos = [ManifestParserUtils.createDrmInfo(\n '', encryptionScheme, defaultInit)];\n }\n }\n }\n\n // If there are only CENC element(s) or ignoreDrmInfo flag is set, assume\n // all key-systems are supported.\n if (parsed.length && !aes128Info &&\n (ignoreDrmInfo || !parsedNonCenc.length)) {\n drmInfos = [];\n\n for (const keySystem of Object.values(keySystemsByURI)) {\n // If the manifest doesn't specify any key systems, we shouldn't\n // put clearkey in this list. Otherwise, it may be triggered when\n // a real key system should be used instead.\n if (keySystem != 'org.w3.clearkey') {\n const info = ManifestParserUtils.createDrmInfo(\n keySystem, encryptionScheme, defaultInit);\n drmInfos.push(info);\n }\n }\n }\n\n // If we have a default key id, apply it to every initData.\n const defaultKeyId = Array.from(keyIds)[0] || null;\n\n if (defaultKeyId) {\n for (const info of drmInfos) {\n for (const initData of info.initData) {\n initData.keyId = defaultKeyId;\n }\n }\n }\n\n return {\n defaultKeyId: defaultKeyId,\n defaultInit: defaultInit,\n drmInfos: drmInfos,\n aes128Info: aes128Info,\n firstRepresentation: true,\n };\n }\n\n /**\n * Parses the given ContentProtection elements found at the Representation\n * level. This may update the |context|.\n *\n * @param {!Array.} elems\n * @param {shaka.dash.ContentProtection.Context} context\n * @param {boolean} ignoreDrmInfo\n * @param {!Object.} keySystemsByURI\n * @return {?string} The parsed key ID\n */\n static parseFromRepresentation(\n elems, context, ignoreDrmInfo, keySystemsByURI) {\n const ContentProtection = shaka.dash.ContentProtection;\n const repContext = ContentProtection.parseFromAdaptationSet(\n elems, ignoreDrmInfo, keySystemsByURI);\n\n if (context.firstRepresentation) {\n const asUnknown = context.drmInfos.length == 1 &&\n !context.drmInfos[0].keySystem;\n const asUnencrypted = context.drmInfos.length == 0;\n const repUnencrypted = repContext.drmInfos.length == 0;\n\n // There are two cases where we need to replace the |drmInfos| in the\n // context with those in the Representation:\n // 1. The AdaptationSet does not list any ContentProtection.\n // 2. The AdaptationSet only lists unknown key-systems.\n if (asUnencrypted || (asUnknown && !repUnencrypted)) {\n context.drmInfos = repContext.drmInfos;\n }\n context.firstRepresentation = false;\n } else if (repContext.drmInfos.length > 0) {\n // If this is not the first Representation, then we need to remove entries\n // from the context that do not appear in this Representation.\n context.drmInfos = context.drmInfos.filter((asInfo) => {\n return repContext.drmInfos.some((repInfo) => {\n return repInfo.keySystem == asInfo.keySystem;\n });\n });\n // If we have filtered out all key-systems, throw an error.\n if (context.drmInfos.length == 0) {\n throw new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.MANIFEST,\n shaka.util.Error.Code.DASH_NO_COMMON_KEY_SYSTEM);\n }\n }\n\n return repContext.defaultKeyId || context.defaultKeyId;\n }\n\n /**\n * Gets a FairPlay license URL from a content protection element\n * containing a 'dashif:Laurl' element\n *\n * @param {shaka.dash.ContentProtection.Element} element\n * @return {string}\n */\n static getFairPlayLicenseUrl(element) {\n if (shaka.util.Platform.isMediaKeysPolyfilled()) {\n throw new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.MANIFEST,\n shaka.util.Error.Code\n .DASH_MSE_ENCRYPTED_LEGACY_APPLE_MEDIA_KEYS_NOT_SUPPORTED);\n }\n const dashIfLaurlNode = shaka.util.TXml.findChildNS(\n element.node, shaka.dash.ContentProtection.DashIfNamespaceUri_,\n 'Laurl',\n );\n if (dashIfLaurlNode) {\n const textContents = shaka.util.TXml.getTextContents(dashIfLaurlNode);\n if (textContents) {\n return textContents;\n }\n }\n return '';\n }\n\n /**\n * Gets a Widevine license URL from a content protection element\n * containing a custom `ms:laurl` or 'dashif:Laurl' elements\n *\n * @param {shaka.dash.ContentProtection.Element} element\n * @return {string}\n */\n static getWidevineLicenseUrl(element) {\n const StringUtils = shaka.util.StringUtils;\n const dashIfLaurlNode = shaka.util.TXml.findChildNS(\n element.node, shaka.dash.ContentProtection.DashIfNamespaceUri_,\n 'Laurl',\n );\n if (dashIfLaurlNode) {\n const textContents = shaka.util.TXml.getTextContents(dashIfLaurlNode);\n if (textContents) {\n return textContents;\n }\n }\n const mslaurlNode = shaka.util.TXml.findChildNS(\n element.node, 'urn:microsoft', 'laurl');\n if (mslaurlNode) {\n return StringUtils.htmlUnescape(\n mslaurlNode.attributes['licenseUrl']) || '';\n }\n return '';\n }\n\n /**\n * Gets a ClearKey license URL from a content protection element\n * containing a custom `clearkey::Laurl` or 'dashif:Laurl' elements\n *\n * @param {shaka.dash.ContentProtection.Element} element\n * @return {string}\n */\n static getClearKeyLicenseUrl(element) {\n const dashIfLaurlNode = shaka.util.TXml.findChildNS(\n element.node, shaka.dash.ContentProtection.DashIfNamespaceUri_,\n 'Laurl',\n );\n if (dashIfLaurlNode) {\n const textContents = shaka.util.TXml.getTextContents(dashIfLaurlNode);\n if (textContents) {\n return textContents;\n }\n }\n const clearKeyLaurlNode = shaka.util.TXml.findChildNS(\n element.node, shaka.dash.ContentProtection.ClearKeyNamespaceUri_,\n 'Laurl',\n );\n if (clearKeyLaurlNode &&\n clearKeyLaurlNode.attributes['Lic_type'] === 'EME-1.0') {\n if (clearKeyLaurlNode) {\n const textContents = shaka.util.TXml.getTextContents(clearKeyLaurlNode);\n if (textContents) {\n return textContents;\n }\n }\n }\n return '';\n }\n\n /**\n * Parses an Array buffer starting at byteOffset for PlayReady Object Records.\n * Each PRO Record is preceded by its PlayReady Record type and length in\n * bytes.\n *\n * PlayReady Object Record format: https://goo.gl/FTcu46\n *\n * @param {!DataView} view\n * @param {number} byteOffset\n * @return {!Array.}\n * @private\n */\n static parseMsProRecords_(view, byteOffset) {\n const records = [];\n\n while (byteOffset < view.byteLength - 1) {\n const type = view.getUint16(byteOffset, true);\n byteOffset += 2;\n\n const byteLength = view.getUint16(byteOffset, true);\n byteOffset += 2;\n\n if ((byteLength & 1) != 0 || byteLength + byteOffset > view.byteLength) {\n shaka.log.warning('Malformed MS PRO object');\n return [];\n }\n\n const recordValue = shaka.util.BufferUtils.toUint8(\n view, byteOffset, byteLength);\n records.push({\n type: type,\n value: recordValue,\n });\n\n byteOffset += byteLength;\n }\n\n return records;\n }\n\n /**\n * Parses a buffer for PlayReady Objects. The data\n * should contain a 32-bit integer indicating the length of\n * the PRO in bytes. Following that, a 16-bit integer for\n * the number of PlayReady Object Records in the PRO. Lastly,\n * a byte array of the PRO Records themselves.\n *\n * PlayReady Object format: https://goo.gl/W8yAN4\n *\n * @param {BufferSource} data\n * @return {!Array.}\n * @private\n */\n static parseMsPro_(data) {\n let byteOffset = 0;\n const view = shaka.util.BufferUtils.toDataView(data);\n\n // First 4 bytes is the PRO length (DWORD)\n const byteLength = view.getUint32(byteOffset, /* littleEndian= */ true);\n byteOffset += 4;\n\n if (byteLength != data.byteLength) {\n // Malformed PRO\n shaka.log.warning('PlayReady Object with invalid length encountered.');\n return [];\n }\n\n // Skip PRO Record count (WORD)\n byteOffset += 2;\n\n // Rest of the data contains the PRO Records\n const ContentProtection = shaka.dash.ContentProtection;\n return ContentProtection.parseMsProRecords_(view, byteOffset);\n }\n\n /**\n * PlayReady Header format: https://goo.gl/dBzxNA\n *\n * @param {!shaka.extern.xml.Node} xml\n * @return {string}\n * @private\n */\n static getLaurl_(xml) {\n const TXml = shaka.util.TXml;\n // LA_URL element is optional and no more than one is\n // allowed inside the DATA element. Only absolute URLs are allowed.\n // If the LA_URL element exists, it must not be empty.\n for (const elem of TXml.getElementsByTagName(xml, 'DATA')) {\n if (elem.children) {\n for (const child of elem.children) {\n if (child.tagName == 'LA_URL') {\n return /** @type{string} */(shaka.util.TXml.getTextContents(child));\n }\n }\n }\n }\n\n // Not found\n return '';\n }\n\n /**\n * Gets a PlayReady license URL from a content protection element\n * containing a PlayReady Header Object\n *\n * @param {shaka.dash.ContentProtection.Element} element\n * @return {string}\n */\n static getPlayReadyLicenseUrl(element) {\n const dashIfLaurlNode = shaka.util.TXml.findChildNS(\n element.node, shaka.dash.ContentProtection.DashIfNamespaceUri_,\n 'Laurl',\n );\n if (dashIfLaurlNode) {\n const textContents = shaka.util.TXml.getTextContents(dashIfLaurlNode);\n if (textContents) {\n return textContents;\n }\n }\n\n const proNode = shaka.util.TXml.findChildNS(\n element.node, 'urn:microsoft:playready', 'pro');\n\n if (!proNode || !shaka.util.TXml.getTextContents(proNode)) {\n return '';\n }\n\n const ContentProtection = shaka.dash.ContentProtection;\n const PLAYREADY_RECORD_TYPES = ContentProtection.PLAYREADY_RECORD_TYPES;\n\n const textContent =\n /** @type {string} */ (shaka.util.TXml.getTextContents(proNode));\n const bytes = shaka.util.Uint8ArrayUtils.fromBase64(textContent);\n const records = ContentProtection.parseMsPro_(bytes);\n const record = records.filter((record) => {\n return record.type === PLAYREADY_RECORD_TYPES.RIGHTS_MANAGEMENT;\n })[0];\n\n if (!record) {\n return '';\n }\n\n const xml = shaka.util.StringUtils.fromUTF16(record.value, true);\n const rootElement = shaka.util.TXml.parseXmlString(xml, 'WRMHEADER');\n if (!rootElement) {\n return '';\n }\n\n return ContentProtection.getLaurl_(rootElement);\n }\n\n /**\n * Gets a PlayReady initData from a content protection element\n * containing a PlayReady Pro Object\n *\n * @param {shaka.dash.ContentProtection.Element} element\n * @return {?Array.}\n * @private\n */\n static getInitDataFromPro_(element) {\n const proNode = shaka.util.TXml.findChildNS(\n element.node, 'urn:microsoft:playready', 'pro');\n if (!proNode || !shaka.util.TXml.getTextContents(proNode)) {\n return null;\n }\n\n const Uint8ArrayUtils = shaka.util.Uint8ArrayUtils;\n const textContent =\n /** @type{string} */ (shaka.util.TXml.getTextContents(proNode));\n const data = Uint8ArrayUtils.fromBase64(textContent);\n const systemId = new Uint8Array([\n 0x9a, 0x04, 0xf0, 0x79, 0x98, 0x40, 0x42, 0x86,\n 0xab, 0x92, 0xe6, 0x5b, 0xe0, 0x88, 0x5f, 0x95,\n ]);\n const keyIds = new Set();\n const psshVersion = 0;\n const pssh =\n shaka.util.Pssh.createPssh(data, systemId, keyIds, psshVersion);\n return [\n {\n initData: pssh,\n initDataType: 'cenc',\n keyId: element.keyId,\n },\n ];\n }\n\n /**\n * Creates ClearKey initData from Default_KID value retrieved from previously\n * parsed ContentProtection tag.\n * @param {shaka.dash.ContentProtection.Element} element\n * @param {!Set.} keyIds\n * @return {?Array.}\n * @private\n */\n static getInitDataClearKey_(element, keyIds) {\n if (keyIds.size == 0) {\n return null;\n }\n\n const systemId = new Uint8Array([\n 0x10, 0x77, 0xef, 0xec, 0xc0, 0xb2, 0x4d, 0x02,\n 0xac, 0xe3, 0x3c, 0x1e, 0x52, 0xe2, 0xfb, 0x4b,\n ]);\n const data = new Uint8Array([]);\n const psshVersion = 1;\n const pssh =\n shaka.util.Pssh.createPssh(data, systemId, keyIds, psshVersion);\n\n return [\n {\n initData: pssh,\n initDataType: 'cenc',\n keyId: element.keyId,\n },\n ];\n }\n\n /**\n * Creates DrmInfo objects from the given element.\n *\n * @param {Array.} defaultInit\n * @param {string} encryptionScheme\n * @param {!Array.} elements\n * @param {!Object.} keySystemsByURI\n * @param {!Set.} keyIds\n * @return {!Array.}\n * @private\n */\n static convertElements_(defaultInit, encryptionScheme, elements,\n keySystemsByURI, keyIds) {\n const ContentProtection = shaka.dash.ContentProtection;\n const ManifestParserUtils = shaka.util.ManifestParserUtils;\n const licenseUrlParsers = ContentProtection.licenseUrlParsers_;\n\n /** @type {!Array.} */\n const out = [];\n\n for (const element of elements) {\n const keySystem = keySystemsByURI[element.schemeUri];\n if (keySystem) {\n goog.asserts.assert(\n !element.init || element.init.length,\n 'Init data must be null or non-empty.');\n\n const proInitData = ContentProtection.getInitDataFromPro_(element);\n let clearKeyInitData = null;\n if (element.schemeUri ===\n shaka.dash.ContentProtection.ClearKeySchemeUri_) {\n clearKeyInitData =\n ContentProtection.getInitDataClearKey_(element, keyIds);\n }\n const initData = element.init || defaultInit || proInitData ||\n clearKeyInitData;\n const info = ManifestParserUtils.createDrmInfo(\n keySystem, encryptionScheme, initData);\n const licenseParser = licenseUrlParsers.get(keySystem);\n if (licenseParser) {\n info.licenseServerUri = licenseParser(element);\n }\n\n out.push(info);\n }\n }\n\n return out;\n }\n\n /**\n * Parses the given ContentProtection elements. If there is an error, it\n * removes those elements.\n *\n * @param {!Array.} elems\n * @return {!Array.}\n * @private\n */\n static parseElements_(elems) {\n /** @type {!Array.} */\n const out = [];\n\n for (const elem of elems) {\n const parsed = shaka.dash.ContentProtection.parseElement_(elem);\n if (parsed) {\n out.push(parsed);\n }\n }\n\n return out;\n }\n\n /**\n * Parses the given ContentProtection element.\n *\n * @param {!shaka.extern.xml.Node} elem\n * @return {?shaka.dash.ContentProtection.Element}\n * @private\n */\n static parseElement_(elem) {\n const NS = shaka.dash.ContentProtection.CencNamespaceUri_;\n const TXml = shaka.util.TXml;\n\n /** @type {?string} */\n let schemeUri = elem.attributes['schemeIdUri'];\n /** @type {?string} */\n let keyId = TXml.getAttributeNS(elem, NS, 'default_KID');\n /** @type {!Array.} */\n const psshs = TXml.findChildrenNS(elem, NS, 'pssh')\n .map(TXml.getContents);\n\n const encryptionScheme = elem.attributes['value'];\n\n if (!schemeUri) {\n shaka.log.error('Missing required schemeIdUri attribute on',\n 'ContentProtection element', elem);\n return null;\n }\n\n schemeUri = schemeUri.toLowerCase();\n if (keyId) {\n keyId = keyId.replace(/-/g, '').toLowerCase();\n if (keyId.includes(' ')) {\n throw new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.MANIFEST,\n shaka.util.Error.Code.DASH_MULTIPLE_KEY_IDS_NOT_SUPPORTED);\n }\n }\n\n /** @type {!Array.} */\n let init = [];\n try {\n // Try parsing PSSH data.\n init = psshs.map((pssh) => {\n return {\n initDataType: 'cenc',\n initData: shaka.util.Uint8ArrayUtils.fromBase64(pssh),\n keyId: null,\n };\n });\n } catch (e) {\n throw new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.MANIFEST,\n shaka.util.Error.Code.DASH_PSSH_BAD_ENCODING);\n }\n\n return {\n node: elem,\n schemeUri,\n keyId,\n init: (init.length > 0 ? init : null),\n encryptionScheme,\n };\n }\n\n /**\n * Parses the given AES-128 ContentProtection element.\n *\n * @param {shaka.dash.ContentProtection.Element} element\n * @return {?shaka.dash.ContentProtection.Aes128Info}\n * @private\n */\n static parseAes128_(element) {\n // Check if the Web Crypto API is available.\n if (!window.crypto || !window.crypto.subtle) {\n shaka.log.alwaysWarn('Web Crypto API is not available to decrypt ' +\n 'AES-128. (Web Crypto only exists in secure origins like https)');\n throw new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.MANIFEST,\n shaka.util.Error.Code.NO_WEB_CRYPTO_API);\n }\n\n const namespace = 'urn:mpeg:dash:schema:sea:2012';\n const segmentEncryption = shaka.util.TXml.findChildNS(\n element.node, namespace, 'SegmentEncryption');\n\n if (!segmentEncryption) {\n throw new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.MANIFEST,\n shaka.util.Error.Code.DASH_UNSUPPORTED_AES_128);\n }\n\n const aesSchemeIdUri = 'urn:mpeg:dash:sea:aes128-cbc:2013';\n const segmentEncryptionSchemeIdUri =\n segmentEncryption.attributes['schemeIdUri'];\n if (segmentEncryptionSchemeIdUri != aesSchemeIdUri) {\n throw new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.MANIFEST,\n shaka.util.Error.Code.DASH_UNSUPPORTED_AES_128);\n }\n\n const cryptoPeriod = shaka.util.TXml.findChildNS(\n element.node, namespace, 'CryptoPeriod');\n\n if (!cryptoPeriod) {\n throw new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.MANIFEST,\n shaka.util.Error.Code.DASH_UNSUPPORTED_AES_128);\n }\n\n const ivHex = cryptoPeriod.attributes['IV'];\n const keyUri = shaka.util.StringUtils.htmlUnescape(\n cryptoPeriod.attributes['keyUriTemplate']);\n if (!ivHex || !keyUri) {\n throw new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.MANIFEST,\n shaka.util.Error.Code.DASH_UNSUPPORTED_AES_128);\n }\n\n // Exclude 0x at the start of string.\n const iv = shaka.util.Uint8ArrayUtils.fromHex(ivHex.substr(2));\n if (iv.byteLength != 16) {\n throw new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.MANIFEST,\n shaka.util.Error.Code.AES_128_INVALID_IV_LENGTH);\n }\n\n return {\n keyUri,\n iv,\n };\n }\n};\n\n/**\n * @typedef {{\n * type: number,\n * value: !Uint8Array\n * }}\n *\n * @description\n * The parsed result of a PlayReady object record.\n *\n * @property {number} type\n * Type of data stored in the record.\n * @property {!Uint8Array} value\n * Record content.\n */\nshaka.dash.ContentProtection.PlayReadyRecord;\n\n/**\n * Enum for PlayReady record types.\n * @enum {number}\n */\nshaka.dash.ContentProtection.PLAYREADY_RECORD_TYPES = {\n RIGHTS_MANAGEMENT: 0x001,\n RESERVED: 0x002,\n EMBEDDED_LICENSE: 0x003,\n};\n\n/**\n * @typedef {{\n * defaultKeyId: ?string,\n * defaultInit: Array.,\n * drmInfos: !Array.,\n * aes128Info: ?shaka.dash.ContentProtection.Aes128Info,\n * firstRepresentation: boolean\n * }}\n *\n * @description\n * Contains information about the ContentProtection elements found at the\n * AdaptationSet level.\n *\n * @property {?string} defaultKeyId\n * The default key ID to use. This is used by parseKeyIds as a default. This\n * can be null to indicate that there is no default.\n * @property {Array.} defaultInit\n * The default init data override. This can be null to indicate that there\n * is no default.\n * @property {!Array.} drmInfos\n * The DrmInfo objects.\n * @property {?shaka.dash.ContentProtection.Aes128Info} aes128Info\n * The AES-128 key info.\n * @property {boolean} firstRepresentation\n * True when first parsed; changed to false after the first call to\n * parseKeyIds. This is used to determine if a dummy key-system should be\n * overwritten; namely that the first representation can replace the dummy\n * from the AdaptationSet.\n */\nshaka.dash.ContentProtection.Context;\n\n/**\n * @typedef {{\n * keyUri: string,\n * iv: !Uint8Array\n * }}\n *\n * @description\n * Contains information about the AES-128 keyUri and IV found at the\n * AdaptationSet level.\n *\n * @property {string} method\n * The keyUri in the manifest.\n * @property {!Uint8Array} iv\n * The IV in the manifest.\n */\nshaka.dash.ContentProtection.Aes128Info;\n\n/**\n * @typedef {{\n * node: !shaka.extern.xml.Node,\n * schemeUri: string,\n * keyId: ?string,\n * init: Array.,\n * encryptionScheme: ?string\n * }}\n *\n * @description\n * The parsed result of a single ContentProtection element.\n *\n * @property {!shaka.extern.xml.Node} node\n * The ContentProtection XML element.\n * @property {string} schemeUri\n * The scheme URI.\n * @property {?string} keyId\n * The default key ID, if present.\n * @property {Array.} init\n * The init data, if present. If there is no init data, it will be null. If\n * this is non-null, there is at least one element.\n * @property {?string} encryptionScheme\n * The encryption scheme, if present.\n */\nshaka.dash.ContentProtection.Element;\n\n/**\n * A map of key system name to license server url parser.\n *\n * @const {!Map.}\n * @private\n */\nshaka.dash.ContentProtection.licenseUrlParsers_ = new Map()\n .set('com.apple.fps',\n shaka.dash.ContentProtection.getFairPlayLicenseUrl)\n .set('com.widevine.alpha',\n shaka.dash.ContentProtection.getWidevineLicenseUrl)\n .set('com.microsoft.playready',\n shaka.dash.ContentProtection.getPlayReadyLicenseUrl)\n .set('com.microsoft.playready.recommendation',\n shaka.dash.ContentProtection.getPlayReadyLicenseUrl)\n .set('com.microsoft.playready.software',\n shaka.dash.ContentProtection.getPlayReadyLicenseUrl)\n .set('com.microsoft.playready.hardware',\n shaka.dash.ContentProtection.getPlayReadyLicenseUrl)\n .set('org.w3.clearkey',\n shaka.dash.ContentProtection.getClearKeyLicenseUrl);\n\n/**\n * @const {string}\n * @private\n */\nshaka.dash.ContentProtection.MP4Protection_ =\n 'urn:mpeg:dash:mp4protection:2011';\n\n/**\n * @const {string}\n * @private\n */\nshaka.dash.ContentProtection.Aes128Protection_ =\n 'urn:mpeg:dash:sea:2012';\n\n\n/**\n * @const {string}\n * @private\n */\nshaka.dash.ContentProtection.CencNamespaceUri_ = 'urn:mpeg:cenc:2013';\n\n/**\n * @const {string}\n * @private\n */\nshaka.dash.ContentProtection.ClearKeyNamespaceUri_ =\n 'http://dashif.org/guidelines/clearKey';\n\n\n/**\n * @const {string}\n * @private\n */\nshaka.dash.ContentProtection.ClearKeySchemeUri_ =\n 'urn:uuid:e2719d58-a985-b3c9-781a-b030af78d30e';\n\n\n/**\n * @const {string}\n * @private\n */\nshaka.dash.ContentProtection.DashIfNamespaceUri_ =\n 'https://dashif.org/CPS';\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.dash.MpdUtils');\n\ngoog.require('goog.asserts');\ngoog.require('shaka.log');\ngoog.require('shaka.net.NetworkingEngine');\ngoog.require('shaka.util.AbortableOperation');\ngoog.require('shaka.util.Error');\ngoog.require('shaka.util.Functional');\ngoog.require('shaka.util.ManifestParserUtils');\ngoog.require('shaka.util.TXml');\ngoog.requireType('shaka.dash.DashParser');\ngoog.requireType('shaka.media.PresentationTimeline');\n\n\n/**\n * @summary MPD processing utility functions.\n */\nshaka.dash.MpdUtils = class {\n /**\n * Fills a SegmentTemplate URI template. This function does not validate the\n * resulting URI.\n *\n * @param {string} uriTemplate\n * @param {?string} representationId\n * @param {?number} number\n * @param {?number} subNumber\n * @param {?number} bandwidth\n * @param {?(number|bigint)} time\n * @return {string} A URI string.\n * @see ISO/IEC 23009-1:2014 section 5.3.9.4.4\n */\n static fillUriTemplate(\n uriTemplate, representationId, number, subNumber, bandwidth, time) {\n /** @type {!Object.} */\n const valueTable = {\n 'RepresentationID': representationId,\n 'Number': number,\n 'SubNumber': subNumber,\n 'Bandwidth': bandwidth,\n 'Time': time,\n };\n\n const re = /\\$(RepresentationID|Number|SubNumber|Bandwidth|Time)?(?:%0([0-9]+)([diouxX]))?\\$/g; // eslint-disable-line max-len\n const uri = uriTemplate.replace(re, (match, name, widthStr, format) => {\n if (match == '$$') {\n return '$';\n }\n\n let value = valueTable[name];\n goog.asserts.assert(value !== undefined, 'Unrecognized identifier');\n\n // Note that |value| may be 0 or ''.\n if (value == null) {\n shaka.log.warning(\n 'URL template does not have an available substitution for ',\n 'identifier \"' + name + '\":',\n uriTemplate);\n return match;\n }\n\n if (name == 'RepresentationID' && widthStr) {\n shaka.log.warning(\n 'URL template should not contain a width specifier for identifier',\n '\"RepresentationID\":',\n uriTemplate);\n widthStr = undefined;\n }\n\n if (name == 'Time') {\n if (typeof value != 'bigint') {\n goog.asserts.assert(typeof value == 'number',\n 'Time value should be a number or bigint!');\n if (Math.abs(value - Math.round(value)) >= 0.2) {\n shaka.log.alwaysWarn(\n 'Calculated $Time$ values must be close to integers');\n }\n value = Math.round(value);\n }\n }\n\n /** @type {string} */\n let valueString;\n switch (format) {\n case undefined: // Happens if there is no format specifier.\n case 'd':\n case 'i':\n case 'u':\n valueString = value.toString();\n break;\n case 'o':\n valueString = value.toString(8);\n break;\n case 'x':\n valueString = value.toString(16);\n break;\n case 'X':\n valueString = value.toString(16).toUpperCase();\n break;\n default:\n goog.asserts.assert(false, 'Unhandled format specifier');\n valueString = value.toString();\n break;\n }\n\n // Create a padding string.\n const width = window.parseInt(widthStr, 10) || 1;\n const paddingSize = Math.max(0, width - valueString.length);\n const padding = (new Array(paddingSize + 1)).join('0');\n\n return padding + valueString;\n });\n\n return uri;\n }\n\n /**\n * Expands a SegmentTimeline into an array-based timeline. The results are in\n * seconds.\n *\n * @param {Array} timePoints\n * @param {number} timescale\n * @param {number} unscaledPresentationTimeOffset\n * @param {number} periodDuration The Period's duration in seconds.\n * Infinity indicates that the Period continues indefinitely.\n * @param {number} startNumber\n * @return {!Array.}\n */\n static createTimeline(\n timePoints, timescale, unscaledPresentationTimeOffset,\n periodDuration, startNumber) {\n goog.asserts.assert(\n timescale > 0 && timescale < Infinity,\n 'timescale must be a positive, finite integer');\n goog.asserts.assert(\n periodDuration > 0, 'period duration must be a positive integer');\n\n // Alias.\n const TXml = shaka.util.TXml;\n\n /** @type {!Array.} */\n const timeline = [];\n let lastEndTime = -unscaledPresentationTimeOffset;\n\n for (let i = 0; i < timePoints.length; ++i) {\n const timePoint = timePoints[i];\n const next = timePoints[i + 1];\n let t = TXml.parseAttr(timePoint, 't', TXml.parseNonNegativeInt);\n const d =\n TXml.parseAttr(timePoint, 'd', TXml.parseNonNegativeInt);\n const r = TXml.parseAttr(timePoint, 'r', TXml.parseInt);\n\n const k = TXml.parseAttr(timePoint, 'k', TXml.parseInt);\n\n const partialSegments = k || 0;\n\n // Adjust the start time to account for the presentation time offset.\n if (t != null) {\n t -= unscaledPresentationTimeOffset;\n }\n\n if (!d) {\n shaka.log.warning(\n '\"S\" element must have a duration: ignoring this element.',\n timePoint);\n continue;\n }\n\n let startTime = t != null ? t : lastEndTime;\n\n let repeat = r || 0;\n if (repeat < 0) {\n if (next) {\n const nextStartTime =\n TXml.parseAttr(next, 't', TXml.parseNonNegativeInt);\n if (nextStartTime == null) {\n shaka.log.warning(\n 'An \"S\" element cannot have a negative repeat',\n 'if the next \"S\" element does not have a valid start time:',\n 'ignoring the remaining \"S\" elements.', timePoint);\n return timeline;\n } else if (startTime >= nextStartTime) {\n shaka.log.warning(\n 'An \"S\" element cannot have a negative repeatif its start ',\n 'time exceeds the next \"S\" element\\'s start time:',\n 'ignoring the remaining \"S\" elements.', timePoint);\n return timeline;\n }\n repeat = Math.ceil((nextStartTime - startTime) / d) - 1;\n } else {\n if (periodDuration == Infinity) {\n // The DASH spec. actually allows the last \"S\" element to have a\n // negative repeat value even when the Period has an infinite\n // duration. No one uses this feature and no one ever should,\n // ever.\n shaka.log.warning(\n 'The last \"S\" element cannot have a negative repeat',\n 'if the Period has an infinite duration:',\n 'ignoring the last \"S\" element.', timePoint);\n return timeline;\n } else if (startTime / timescale >= periodDuration) {\n shaka.log.warning(\n 'The last \"S\" element cannot have a negative repeat',\n 'if its start time exceeds the Period\\'s duration:',\n 'igoring the last \"S\" element.', timePoint);\n return timeline;\n }\n repeat = Math.ceil((periodDuration * timescale - startTime) / d) - 1;\n }\n }\n\n // The end of the last segment may be before the start of the current\n // segment (a gap) or after the start of the current segment (an\n // overlap). If there is a gap/overlap then stretch/compress the end of\n // the last segment to the start of the current segment.\n //\n // Note: it is possible to move the start of the current segment to the\n // end of the last segment, but this would complicate the computation of\n // the $Time$ placeholder later on.\n if ((timeline.length > 0) && (startTime != lastEndTime)) {\n const delta = startTime - lastEndTime;\n\n if (Math.abs(delta / timescale) >=\n shaka.util.ManifestParserUtils.GAP_OVERLAP_TOLERANCE_SECONDS) {\n shaka.log.warning(\n 'SegmentTimeline contains a large gap/overlap:',\n 'the content may have errors in it.', timePoint);\n }\n\n timeline[timeline.length - 1].end = startTime / timescale;\n }\n\n for (let j = 0; j <= repeat; ++j) {\n const endTime = startTime + d;\n const item = {\n start: startTime / timescale,\n end: endTime / timescale,\n unscaledStart: startTime,\n partialSegments: partialSegments,\n segmentPosition: timeline.length + startNumber,\n };\n timeline.push(item);\n\n startTime = endTime;\n lastEndTime = endTime;\n }\n }\n\n return timeline;\n }\n\n /**\n * Parses common segment info for SegmentList and SegmentTemplate.\n *\n * @param {shaka.dash.DashParser.Context} context\n * @param {function(?shaka.dash.DashParser.InheritanceFrame):\n * ?shaka.extern.xml.Node} callback\n * Gets the element that contains the segment info.\n * @return {shaka.dash.MpdUtils.SegmentInfo}\n */\n static parseSegmentInfo(context, callback) {\n goog.asserts.assert(\n callback(context.representation),\n 'There must be at least one element of the given type.');\n const MpdUtils = shaka.dash.MpdUtils;\n const TXml = shaka.util.TXml;\n\n const timescaleStr =\n MpdUtils.inheritAttribute(context, callback, 'timescale');\n let timescale = 1;\n if (timescaleStr) {\n timescale = TXml.parsePositiveInt(timescaleStr) || 1;\n }\n\n const durationStr =\n MpdUtils.inheritAttribute(context, callback, 'duration');\n let segmentDuration = TXml.parsePositiveInt(durationStr || '');\n if (segmentDuration) {\n segmentDuration /= timescale;\n }\n\n const startNumberStr =\n MpdUtils.inheritAttribute(context, callback, 'startNumber');\n const unscaledPresentationTimeOffset =\n Number(MpdUtils.inheritAttribute(context, callback,\n 'presentationTimeOffset')) || 0;\n let startNumber = TXml.parseNonNegativeInt(startNumberStr || '');\n if (startNumberStr == null || startNumber == null) {\n startNumber = 1;\n }\n\n /** @type {Array.} */\n let timeline = null;\n const timelineNode =\n MpdUtils.inheritChild(context, callback, 'SegmentTimeline');\n if (timelineNode) {\n const timePoints = TXml.findChildren(timelineNode, 'S');\n timeline = MpdUtils.createTimeline(\n timePoints, timescale, unscaledPresentationTimeOffset,\n context.periodInfo.duration || Infinity, startNumber);\n }\n\n const scaledPresentationTimeOffset =\n (unscaledPresentationTimeOffset / timescale) || 0;\n return {\n timescale: timescale,\n segmentDuration: segmentDuration,\n startNumber: startNumber,\n scaledPresentationTimeOffset: scaledPresentationTimeOffset,\n unscaledPresentationTimeOffset: unscaledPresentationTimeOffset,\n timeline: timeline,\n };\n }\n\n /**\n * Parses common attributes for Representation, AdaptationSet, and Period.\n * @param {shaka.dash.DashParser.Context} context\n * @param {function(?shaka.dash.DashParser.InheritanceFrame):\n * ?shaka.extern.xml.Node} callback\n * @return {!Array.}\n */\n static getNodes(context, callback) {\n const Functional = shaka.util.Functional;\n goog.asserts.assert(\n callback(context.representation),\n 'There must be at least one element of the given type.',\n );\n\n return [\n callback(context.representation),\n callback(context.adaptationSet),\n callback(context.period),\n ].filter(Functional.isNotNull);\n }\n\n /**\n * Searches the inheritance for a Segment* with the given attribute.\n *\n * @param {shaka.dash.DashParser.Context} context\n * @param {function(?shaka.dash.DashParser.InheritanceFrame):\n * ?shaka.extern.xml.Node} callback\n * Gets the Element that contains the attribute to inherit.\n * @param {string} attribute\n * @return {?string}\n */\n static inheritAttribute(context, callback, attribute) {\n const MpdUtils = shaka.dash.MpdUtils;\n const nodes = MpdUtils.getNodes(context, callback);\n\n let result = null;\n for (const node of nodes) {\n result = node.attributes[attribute];\n if (result) {\n break;\n }\n }\n return result;\n }\n\n /**\n * Searches the inheritance for a Segment* with the given child.\n *\n * @param {shaka.dash.DashParser.Context} context\n * @param {function(?shaka.dash.DashParser.InheritanceFrame):\n * ?shaka.extern.xml.Node} callback\n * Gets the Element that contains the child to inherit.\n * @param {string} child\n * @return {?shaka.extern.xml.Node}\n */\n static inheritChild(context, callback, child) {\n const MpdUtils = shaka.dash.MpdUtils;\n const nodes = MpdUtils.getNodes(context, callback);\n\n const TXml = shaka.util.TXml;\n let result = null;\n for (const node of nodes) {\n result = TXml.findChild(node, child);\n if (result) {\n break;\n }\n }\n return result;\n }\n\n /**\n * Follow the xlink link contained in the given element.\n * It also strips the xlink properties off of the element,\n * even if the process fails.\n *\n * @param {!shaka.extern.xml.Node} element\n * @param {!shaka.extern.RetryParameters} retryParameters\n * @param {boolean} failGracefully\n * @param {string} baseUri\n * @param {!shaka.net.NetworkingEngine} networkingEngine\n * @param {number} linkDepth\n * @return {!shaka.util.AbortableOperation.}\n * @private\n */\n static handleXlinkInElement_(\n element, retryParameters, failGracefully, baseUri, networkingEngine,\n linkDepth) {\n const MpdUtils = shaka.dash.MpdUtils;\n const TXml = shaka.util.TXml;\n const Error = shaka.util.Error;\n const ManifestParserUtils = shaka.util.ManifestParserUtils;\n const NS = MpdUtils.XlinkNamespaceUri_;\n\n const xlinkHref = TXml.getAttributeNS(element, NS, 'href');\n const xlinkActuate =\n TXml.getAttributeNS(element, NS, 'actuate') || 'onRequest';\n\n // Remove the xlink properties, so it won't download again\n // when re-processed.\n for (const key of Object.keys(element.attributes)) {\n const segs = key.split(':');\n const namespace = shaka.util.TXml.getKnownNameSpace(NS);\n if (segs[0] == namespace) {\n delete element.attributes[key];\n }\n }\n\n if (linkDepth >= 5) {\n return shaka.util.AbortableOperation.failed(new Error(\n Error.Severity.CRITICAL, Error.Category.MANIFEST,\n Error.Code.DASH_XLINK_DEPTH_LIMIT));\n }\n\n if (xlinkActuate != 'onLoad') {\n // Only xlink:actuate=\"onLoad\" is supported.\n // When no value is specified, the assumed value is \"onRequest\".\n return shaka.util.AbortableOperation.failed(new Error(\n Error.Severity.CRITICAL, Error.Category.MANIFEST,\n Error.Code.DASH_UNSUPPORTED_XLINK_ACTUATE));\n }\n\n // Resolve the xlink href, in case it's a relative URL.\n const uris = ManifestParserUtils.resolveUris([baseUri], [xlinkHref]);\n\n // Load in the linked elements.\n const requestType = shaka.net.NetworkingEngine.RequestType.MANIFEST;\n const request =\n shaka.net.NetworkingEngine.makeRequest(uris, retryParameters);\n\n const requestOperation = networkingEngine.request(requestType, request);\n // The interface is abstract, but we know it was implemented with the\n // more capable internal class.\n goog.asserts.assert(\n requestOperation instanceof shaka.util.AbortableOperation,\n 'Unexpected implementation of IAbortableOperation!');\n // Satisfy the compiler with a cast.\n const networkOperation =\n /** @type {!shaka.util.AbortableOperation.} */ (\n requestOperation);\n\n // Chain onto that operation.\n return networkOperation.chain(\n (response) => {\n // This only supports the case where the loaded xml has a single\n // top-level element. If there are multiple roots, it will be\n // rejected.\n const rootElem =\n TXml.parseXml(response.data, element.tagName);\n if (!rootElem) {\n // It was not valid XML.\n return shaka.util.AbortableOperation.failed(new Error(\n Error.Severity.CRITICAL, Error.Category.MANIFEST,\n Error.Code.DASH_INVALID_XML, xlinkHref));\n }\n\n // Now that there is no other possibility of the process erroring,\n // the element can be changed further.\n\n // Remove the current contents of the node.\n element.children = [];\n\n // Move the children of the loaded xml into the current element.\n while (rootElem.children.length) {\n const child = rootElem.children.shift();\n element.children.push(child);\n }\n\n // Move the attributes of the loaded xml into the current element.\n for (const key of Object.keys(rootElem.attributes)) {\n element.attributes[key] = rootElem.attributes[key];\n }\n\n return shaka.dash.MpdUtils.processXlinks(\n element, retryParameters, failGracefully, uris[0],\n networkingEngine, linkDepth + 1);\n });\n }\n\n /**\n * Filter the contents of a node recursively, replacing xlink links\n * with their associated online data.\n *\n * @param {!shaka.extern.xml.Node} element\n * @param {!shaka.extern.RetryParameters} retryParameters\n * @param {boolean} failGracefully\n * @param {string} baseUri\n * @param {!shaka.net.NetworkingEngine} networkingEngine\n * @param {number=} linkDepth, default set to 0\n * @return {!shaka.util.AbortableOperation.}\n */\n static processXlinks(\n element, retryParameters,\n failGracefully, baseUri, networkingEngine,\n linkDepth = 0) {\n const MpdUtils = shaka.dash.MpdUtils;\n const TXml = shaka.util.TXml;\n const NS = MpdUtils.XlinkNamespaceUri_;\n\n if (TXml.getAttributeNS(element, NS, 'href')) {\n let handled = MpdUtils.handleXlinkInElement_(\n element, retryParameters, failGracefully,\n baseUri, networkingEngine, linkDepth);\n if (failGracefully) {\n // Catch any error and go on.\n handled = handled.chain(undefined, (error) => {\n // handleXlinkInElement_ strips the xlink properties off of the\n // element even if it fails, so calling processXlinks again will\n // handle whatever contents the element natively has.\n return MpdUtils.processXlinks(\n element, retryParameters, failGracefully, baseUri,\n networkingEngine, linkDepth);\n });\n }\n return handled;\n }\n\n const childOperations = [];\n for (const child of shaka.util.TXml.getChildNodes(element)) {\n const resolveToZeroString = 'urn:mpeg:dash:resolve-to-zero:2013';\n if (TXml.getAttributeNS(child, NS, 'href') == resolveToZeroString) {\n // This is a 'resolve to zero' code; it means the element should\n // be removed, as specified by the mpeg-dash rules for xlink.\n element.children = element.children.filter(\n (elem) => elem !== child);\n } else if (child.tagName != 'SegmentTimeline') {\n // Don't recurse into a SegmentTimeline since xlink attributes\n // aren't valid in there and looking at each segment can take a long\n // time with larger manifests.\n\n // Replace the child with its processed form.\n childOperations.push(shaka.dash.MpdUtils.processXlinks(\n /** @type {!shaka.extern.xml.Node} */ (child),\n retryParameters, failGracefully,\n baseUri, networkingEngine, linkDepth));\n }\n }\n\n return shaka.util.AbortableOperation.all(childOperations).chain(() => {\n return element;\n });\n }\n};\n\n\n/**\n * @typedef {{\n * timescale: number,\n * segmentDuration: ?number,\n * startNumber: number,\n * scaledPresentationTimeOffset: number,\n * unscaledPresentationTimeOffset: number,\n * timeline: Array.\n * }}\n *\n * @description\n * Contains common information between SegmentList and SegmentTemplate items.\n *\n * @property {number} timescale\n * The time-scale of the representation.\n * @property {?number} segmentDuration\n * The duration of the segments in seconds, if given.\n * @property {number} startNumber\n * The start number of the segments; 1 or greater.\n * @property {number} scaledPresentationTimeOffset\n * The presentation time offset of the representation, in seconds.\n * @property {number} unscaledPresentationTimeOffset\n * The presentation time offset of the representation, in timescale units.\n * @property {Array.} timeline\n * The timeline of the representation, if given. Times in seconds.\n */\nshaka.dash.MpdUtils.SegmentInfo;\n\n\n/**\n * @const {string}\n * @private\n */\nshaka.dash.MpdUtils.XlinkNamespaceUri_ = 'http://www.w3.org/1999/xlink';\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.util.EbmlElement');\ngoog.provide('shaka.util.EbmlParser');\n\ngoog.require('goog.asserts');\ngoog.require('shaka.util.BufferUtils');\ngoog.require('shaka.util.DataViewReader');\ngoog.require('shaka.util.Error');\n\n\n/**\n * @summary\n * Extensible Binary Markup Language (EBML) parser.\n */\nshaka.util.EbmlParser = class {\n /**\n * @param {BufferSource} data\n */\n constructor(data) {\n /** @private {!DataView} */\n this.dataView_ = shaka.util.BufferUtils.toDataView(data);\n\n /** @private {!shaka.util.DataViewReader} */\n this.reader_ = new shaka.util.DataViewReader(\n this.dataView_, shaka.util.DataViewReader.Endianness.BIG_ENDIAN);\n }\n\n\n /**\n * @return {boolean} True if the parser has more data, false otherwise.\n */\n hasMoreData() {\n return this.reader_.hasMoreData();\n }\n\n\n /**\n * Parses an EBML element from the parser's current position, and advances\n * the parser.\n * @return {!shaka.util.EbmlElement} The EBML element.\n * @see http://matroska.org/technical/specs/rfc/index.html\n */\n parseElement() {\n const id = this.parseId_();\n\n // Parse the element's size.\n const vint = this.parseVint_();\n let size;\n if (shaka.util.EbmlParser.isDynamicSizeValue_(vint)) {\n // If this has an unknown size, assume that it takes up the rest of the\n // data.\n size = this.dataView_.byteLength - this.reader_.getPosition();\n } else {\n size = shaka.util.EbmlParser.getVintValue_(vint);\n }\n\n // Note that if the element's size is larger than the buffer then we are\n // parsing a \"partial element\". This may occur if for example we are\n // parsing the beginning of some WebM container data, but our buffer does\n // not contain the entire WebM container data.\n const elementSize =\n this.reader_.getPosition() + size <= this.dataView_.byteLength ?\n size :\n this.dataView_.byteLength - this.reader_.getPosition();\n\n const dataView = shaka.util.BufferUtils.toDataView(\n this.dataView_, this.reader_.getPosition(), elementSize);\n\n this.reader_.skip(elementSize);\n\n return new shaka.util.EbmlElement(id, dataView);\n }\n\n\n /**\n * Parses an EBML ID from the parser's current position, and advances the\n * parser.\n * @return {number} The EBML ID.\n * @private\n */\n parseId_() {\n const vint = this.parseVint_();\n\n if (vint.length > 7) {\n throw new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.MEDIA,\n shaka.util.Error.Code.EBML_OVERFLOW);\n }\n\n let id = 0;\n for (const /* byte */ b of vint) {\n // Note that we cannot use << since |value| may exceed 32 bits.\n id = (256 * id) + b;\n }\n\n return id;\n }\n\n\n /**\n * Parses a variable sized integer from the parser's current position, and\n * advances the parser.\n * For example:\n * 1 byte wide: 1xxx xxxx\n * 2 bytes wide: 01xx xxxx xxxx xxxx\n * 3 bytes wide: 001x xxxx xxxx xxxx xxxx xxxx\n * @return {!Uint8Array} The variable sized integer.\n * @private\n */\n parseVint_() {\n const position = this.reader_.getPosition();\n const firstByte = this.reader_.readUint8();\n if (firstByte == 0) {\n throw new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.MEDIA,\n shaka.util.Error.Code.EBML_OVERFLOW);\n }\n\n // Determine the index of the highest bit set.\n const index = Math.floor(Math.log2(firstByte));\n const numBytes = 8 - index;\n goog.asserts.assert(numBytes <= 8 && numBytes >= 1, 'Incorrect log2 value');\n this.reader_.skip(numBytes - 1);\n return shaka.util.BufferUtils.toUint8(this.dataView_, position, numBytes);\n }\n\n\n /**\n * Gets the value of a variable sized integer.\n * For example, the x's below are part of the vint's value.\n * 7-bit value: 1xxx xxxx\n * 14-bit value: 01xx xxxx xxxx xxxx\n * 21-bit value: 001x xxxx xxxx xxxx xxxx xxxx\n * @param {!Uint8Array} vint The variable sized integer.\n * @return {number} The value of the variable sized integer.\n * @private\n */\n static getVintValue_(vint) {\n // If |vint| is 8 bytes wide then we must ensure that it does not have more\n // than 53 meaningful bits. For example, assume |vint| is 8 bytes wide,\n // so it has the following structure,\n // 0000 0001 | xxxx xxxx ...\n // Thus, the first 3 bits following the first byte of |vint| must be 0.\n if ((vint.length == 8) && (vint[1] & 0xe0)) {\n throw new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.MEDIA,\n shaka.util.Error.Code.JS_INTEGER_OVERFLOW);\n }\n\n let value = 0;\n for (let i = 0; i < vint.length; i++) {\n const item = vint[i];\n if (i == 0) {\n // Mask out the first few bits of |vint|'s first byte to get the most\n // significant bits of |vint|'s value. If |vint| is 8 bytes wide then\n // |value| will be set to 0.\n const mask = 0x1 << (8 - vint.length);\n value = item & (mask - 1);\n } else {\n // Note that we cannot use << since |value| may exceed 32 bits.\n value = (256 * value) + item;\n }\n }\n\n return value;\n }\n\n\n /**\n * Checks if the given variable sized integer represents a dynamic size value.\n * @param {!Uint8Array} vint The variable sized integer.\n * @return {boolean} true if |vint| represents a dynamic size value,\n * false otherwise.\n * @private\n */\n static isDynamicSizeValue_(vint) {\n const EbmlParser = shaka.util.EbmlParser;\n const BufferUtils = shaka.util.BufferUtils;\n\n for (const dynamicSizeConst of EbmlParser.DYNAMIC_SIZES) {\n if (BufferUtils.equal(vint, new Uint8Array(dynamicSizeConst))) {\n return true;\n }\n }\n\n return false;\n }\n};\n\n\n/**\n * A list of EBML dynamic size constants.\n * @const {!Array.>}\n */\nshaka.util.EbmlParser.DYNAMIC_SIZES = [\n [0xff],\n [0x7f, 0xff],\n [0x3f, 0xff, 0xff],\n [0x1f, 0xff, 0xff, 0xff],\n [0x0f, 0xff, 0xff, 0xff, 0xff],\n [0x07, 0xff, 0xff, 0xff, 0xff, 0xff],\n [0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff],\n [0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff],\n];\n\n\nshaka.util.EbmlElement = class {\n /**\n * @param {number} id The ID.\n * @param {!DataView} dataView The DataView.\n */\n constructor(id, dataView) {\n /** @type {number} */\n this.id = id;\n\n /** @private {!DataView} */\n this.dataView_ = dataView;\n }\n\n\n /**\n * Gets the element's offset from the beginning of the buffer.\n * @return {number}\n */\n getOffset() {\n return this.dataView_.byteOffset;\n }\n\n\n /**\n * Interpret the element's data as a list of sub-elements.\n * @return {!shaka.util.EbmlParser} A parser over the sub-elements.\n */\n createParser() {\n return new shaka.util.EbmlParser(this.dataView_);\n }\n\n\n /**\n * Interpret the element's data as an unsigned integer.\n * @return {number}\n */\n getUint() {\n if (this.dataView_.byteLength > 8) {\n throw new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.MEDIA,\n shaka.util.Error.Code.EBML_OVERFLOW);\n }\n\n // Ensure we have at most 53 meaningful bits.\n if ((this.dataView_.byteLength == 8) &&\n (this.dataView_.getUint8(0) & 0xe0)) {\n throw new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.MEDIA,\n shaka.util.Error.Code.JS_INTEGER_OVERFLOW);\n }\n\n let value = 0;\n\n for (let i = 0; i < this.dataView_.byteLength; i++) {\n const chunk = this.dataView_.getUint8(i);\n value = (256 * value) + chunk;\n }\n\n return value;\n }\n\n\n /**\n * Interpret the element's data as a floating point number\n * (32 bits or 64 bits). 80-bit floating point numbers are not supported.\n * @return {number}\n */\n getFloat() {\n if (this.dataView_.byteLength == 4) {\n return this.dataView_.getFloat32(0);\n } else if (this.dataView_.byteLength == 8) {\n return this.dataView_.getFloat64(0);\n } else {\n throw new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.MEDIA,\n shaka.util.Error.Code.EBML_BAD_FLOATING_POINT_SIZE);\n }\n }\n};\n\n\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.media.WebmSegmentIndexParser');\n\ngoog.require('goog.asserts');\ngoog.require('shaka.log');\ngoog.require('shaka.media.InitSegmentReference');\ngoog.require('shaka.media.SegmentReference');\ngoog.require('shaka.util.EbmlElement');\ngoog.require('shaka.util.EbmlParser');\ngoog.require('shaka.util.Error');\n\n\nshaka.media.WebmSegmentIndexParser = class {\n /**\n * Parses SegmentReferences from a WebM container.\n * @param {BufferSource} cuesData The WebM container's \"Cueing Data\" section.\n * @param {BufferSource} initData The WebM container's headers.\n * @param {!Array.} uris The possible locations of the WebM file that\n * contains the segments.\n * @param {shaka.media.InitSegmentReference} initSegmentReference\n * @param {number} timestampOffset\n * @param {number} appendWindowStart\n * @param {number} appendWindowEnd\n * @return {!Array.}\n * @see http://www.matroska.org/technical/specs/index.html\n * @see http://www.webmproject.org/docs/container/\n */\n static parse(\n cuesData, initData, uris, initSegmentReference, timestampOffset,\n appendWindowStart, appendWindowEnd) {\n const tuple =\n shaka.media.WebmSegmentIndexParser.parseWebmContainer_(initData);\n const parser = new shaka.util.EbmlParser(cuesData);\n const cuesElement = parser.parseElement();\n if (cuesElement.id != shaka.media.WebmSegmentIndexParser.CUES_ID) {\n shaka.log.error('Not a Cues element.');\n throw new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.MEDIA,\n shaka.util.Error.Code.WEBM_CUES_ELEMENT_MISSING);\n }\n\n return shaka.media.WebmSegmentIndexParser.parseCues_(\n cuesElement, tuple.segmentOffset, tuple.timecodeScale, tuple.duration,\n uris, initSegmentReference, timestampOffset, appendWindowStart,\n appendWindowEnd);\n }\n\n\n /**\n * Parses a WebM container to get the segment's offset, timecode scale, and\n * duration.\n *\n * @param {BufferSource} initData\n * @return {{segmentOffset: number, timecodeScale: number, duration: number}}\n * The segment's offset in bytes, the segment's timecode scale in seconds,\n * and the duration in seconds.\n * @private\n */\n static parseWebmContainer_(initData) {\n const parser = new shaka.util.EbmlParser(initData);\n\n // Check that the WebM container data starts with the EBML header, but\n // skip its contents.\n const ebmlElement = parser.parseElement();\n if (ebmlElement.id != shaka.media.WebmSegmentIndexParser.EBML_ID) {\n shaka.log.error('Not an EBML element.');\n throw new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.MEDIA,\n shaka.util.Error.Code.WEBM_EBML_HEADER_ELEMENT_MISSING);\n }\n\n const segmentElement = parser.parseElement();\n if (segmentElement.id != shaka.media.WebmSegmentIndexParser.SEGMENT_ID) {\n shaka.log.error('Not a Segment element.');\n throw new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.MEDIA,\n shaka.util.Error.Code.WEBM_SEGMENT_ELEMENT_MISSING);\n }\n\n // This value is used as the initial offset to the first referenced segment.\n const segmentOffset = segmentElement.getOffset();\n\n // Parse the Segment element to get the segment info.\n const segmentInfo = shaka.media.WebmSegmentIndexParser.parseSegment_(\n segmentElement);\n return {\n segmentOffset: segmentOffset,\n timecodeScale: segmentInfo.timecodeScale,\n duration: segmentInfo.duration,\n };\n }\n\n\n /**\n * Parses a WebM Info element to get the segment's timecode scale and\n * duration.\n * @param {!shaka.util.EbmlElement} segmentElement\n * @return {{timecodeScale: number, duration: number}} The segment's timecode\n * scale in seconds and duration in seconds.\n * @private\n */\n static parseSegment_(segmentElement) {\n const parser = segmentElement.createParser();\n\n // Find the Info element.\n let infoElement = null;\n while (parser.hasMoreData()) {\n const elem = parser.parseElement();\n if (elem.id != shaka.media.WebmSegmentIndexParser.INFO_ID) {\n continue;\n }\n\n infoElement = elem;\n\n break;\n }\n\n if (!infoElement) {\n shaka.log.error('Not an Info element.');\n throw new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.MEDIA,\n shaka.util.Error.Code.WEBM_INFO_ELEMENT_MISSING);\n }\n\n return shaka.media.WebmSegmentIndexParser.parseInfo_(infoElement);\n }\n\n\n /**\n * Parses a WebM Info element to get the segment's timecode scale and\n * duration.\n * @param {!shaka.util.EbmlElement} infoElement\n * @return {{timecodeScale: number, duration: number}} The segment's timecode\n * scale in seconds and duration in seconds.\n * @private\n */\n static parseInfo_(infoElement) {\n const parser = infoElement.createParser();\n\n // The timecode scale factor in units of [nanoseconds / T], where [T] are\n // the units used to express all other time values in the WebM container.\n // By default it's assumed that [T] == [milliseconds].\n let timecodeScaleNanoseconds = 1000000;\n /** @type {?number} */\n let durationScale = null;\n\n while (parser.hasMoreData()) {\n const elem = parser.parseElement();\n if (elem.id == shaka.media.WebmSegmentIndexParser.TIMECODE_SCALE_ID) {\n timecodeScaleNanoseconds = elem.getUint();\n } else if (elem.id == shaka.media.WebmSegmentIndexParser.DURATION_ID) {\n durationScale = elem.getFloat();\n }\n }\n if (durationScale == null) {\n throw new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.MEDIA,\n shaka.util.Error.Code.WEBM_DURATION_ELEMENT_MISSING);\n }\n\n // The timecode scale factor in units of [seconds / T].\n const timecodeScale = timecodeScaleNanoseconds / 1000000000;\n // The duration is stored in units of [T]\n const durationSeconds = durationScale * timecodeScale;\n\n return {timecodeScale: timecodeScale, duration: durationSeconds};\n }\n\n\n /**\n * Parses a WebM CuesElement.\n * @param {!shaka.util.EbmlElement} cuesElement\n * @param {number} segmentOffset\n * @param {number} timecodeScale\n * @param {number} duration\n * @param {!Array.} uris\n * @param {shaka.media.InitSegmentReference} initSegmentReference\n * @param {number} timestampOffset\n * @param {number} appendWindowStart\n * @param {number} appendWindowEnd\n * @return {!Array.}\n * @private\n */\n static parseCues_(cuesElement, segmentOffset, timecodeScale, duration,\n uris, initSegmentReference, timestampOffset, appendWindowStart,\n appendWindowEnd) {\n const references = [];\n const getUris = () => uris;\n\n const parser = cuesElement.createParser();\n\n let lastTime = null;\n let lastOffset = null;\n\n while (parser.hasMoreData()) {\n const elem = parser.parseElement();\n if (elem.id != shaka.media.WebmSegmentIndexParser.CUE_POINT_ID) {\n continue;\n }\n\n const tuple = shaka.media.WebmSegmentIndexParser.parseCuePoint_(elem);\n if (!tuple) {\n continue;\n }\n\n // Subtract the presentation time offset from the unscaled time\n const currentTime = timecodeScale * tuple.unscaledTime;\n const currentOffset = segmentOffset + tuple.relativeOffset;\n\n if (lastTime != null) {\n goog.asserts.assert(lastOffset != null, 'last offset cannot be null');\n\n references.push(\n new shaka.media.SegmentReference(\n lastTime + timestampOffset,\n currentTime + timestampOffset,\n getUris,\n /* startByte= */ lastOffset, /* endByte= */ currentOffset - 1,\n initSegmentReference,\n timestampOffset,\n appendWindowStart,\n appendWindowEnd));\n }\n\n lastTime = currentTime;\n lastOffset = currentOffset;\n }\n\n if (lastTime != null) {\n goog.asserts.assert(lastOffset != null, 'last offset cannot be null');\n\n references.push(\n new shaka.media.SegmentReference(\n lastTime + timestampOffset,\n duration + timestampOffset,\n getUris,\n /* startByte= */ lastOffset, /* endByte= */ null,\n initSegmentReference,\n timestampOffset,\n appendWindowStart,\n appendWindowEnd));\n }\n\n return references;\n }\n\n\n /**\n * Parses a WebM CuePointElement to get an \"unadjusted\" segment reference.\n * @param {shaka.util.EbmlElement} cuePointElement\n * @return {{unscaledTime: number, relativeOffset: number}} The referenced\n * segment's start time in units of [T] (see parseInfo_()), and the\n * referenced segment's offset in bytes, relative to a WebM Segment\n * element.\n * @private\n */\n static parseCuePoint_(cuePointElement) {\n const parser = cuePointElement.createParser();\n\n // Parse CueTime element.\n const cueTimeElement = parser.parseElement();\n if (cueTimeElement.id != shaka.media.WebmSegmentIndexParser.CUE_TIME_ID) {\n shaka.log.warning('Not a CueTime element.');\n throw new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.MEDIA,\n shaka.util.Error.Code.WEBM_CUE_TIME_ELEMENT_MISSING);\n }\n const unscaledTime = cueTimeElement.getUint();\n\n // Parse CueTrackPositions element.\n const cueTrackPositionsElement = parser.parseElement();\n if (cueTrackPositionsElement.id !=\n shaka.media.WebmSegmentIndexParser.CUE_TRACK_POSITIONS_ID) {\n shaka.log.warning('Not a CueTrackPositions element.');\n throw new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.MEDIA,\n shaka.util.Error.Code.WEBM_CUE_TRACK_POSITIONS_ELEMENT_MISSING);\n }\n\n const cueTrackParser = cueTrackPositionsElement.createParser();\n let relativeOffset = 0;\n\n while (cueTrackParser.hasMoreData()) {\n const elem = cueTrackParser.parseElement();\n if (elem.id != shaka.media.WebmSegmentIndexParser.CUE_CLUSTER_POSITION) {\n continue;\n }\n\n relativeOffset = elem.getUint();\n break;\n }\n\n return {unscaledTime: unscaledTime, relativeOffset: relativeOffset};\n }\n};\n\n\n/** @const {number} */\nshaka.media.WebmSegmentIndexParser.EBML_ID = 0x1a45dfa3;\n\n\n/** @const {number} */\nshaka.media.WebmSegmentIndexParser.SEGMENT_ID = 0x18538067;\n\n\n/** @const {number} */\nshaka.media.WebmSegmentIndexParser.INFO_ID = 0x1549a966;\n\n\n/** @const {number} */\nshaka.media.WebmSegmentIndexParser.TIMECODE_SCALE_ID = 0x2ad7b1;\n\n\n/** @const {number} */\nshaka.media.WebmSegmentIndexParser.DURATION_ID = 0x4489;\n\n\n/** @const {number} */\nshaka.media.WebmSegmentIndexParser.CUES_ID = 0x1c53bb6b;\n\n\n/** @const {number} */\nshaka.media.WebmSegmentIndexParser.CUE_POINT_ID = 0xbb;\n\n\n/** @const {number} */\nshaka.media.WebmSegmentIndexParser.CUE_TIME_ID = 0xb3;\n\n\n/** @const {number} */\nshaka.media.WebmSegmentIndexParser.CUE_TRACK_POSITIONS_ID = 0xb7;\n\n\n/** @const {number} */\nshaka.media.WebmSegmentIndexParser.CUE_CLUSTER_POSITION = 0xf1;\n\n\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.dash.SegmentBase');\n\ngoog.require('goog.asserts');\ngoog.require('shaka.dash.MpdUtils');\ngoog.require('shaka.log');\ngoog.require('shaka.media.InitSegmentReference');\ngoog.require('shaka.media.Mp4SegmentIndexParser');\ngoog.require('shaka.media.SegmentIndex');\ngoog.require('shaka.media.WebmSegmentIndexParser');\ngoog.require('shaka.util.Error');\ngoog.require('shaka.util.ManifestParserUtils');\ngoog.require('shaka.util.ObjectUtils');\ngoog.require('shaka.util.StringUtils');\ngoog.require('shaka.util.TXml');\ngoog.requireType('shaka.dash.DashParser');\ngoog.requireType('shaka.media.PresentationTimeline');\ngoog.requireType('shaka.media.SegmentReference');\n\n\n/**\n * @summary A set of functions for parsing SegmentBase elements.\n */\nshaka.dash.SegmentBase = class {\n /**\n * Creates an init segment reference from a Context object.\n *\n * @param {shaka.dash.DashParser.Context} context\n * @param {function(?shaka.dash.DashParser.InheritanceFrame):\n * ?shaka.extern.xml.Node} callback\n * @param {shaka.extern.aesKey|undefined} aesKey\n * @return {shaka.media.InitSegmentReference}\n */\n static createInitSegment(context, callback, aesKey) {\n const MpdUtils = shaka.dash.MpdUtils;\n const TXml = shaka.util.TXml;\n const ManifestParserUtils = shaka.util.ManifestParserUtils;\n const StringUtils = shaka.util.StringUtils;\n\n const initialization =\n MpdUtils.inheritChild(context, callback, 'Initialization');\n if (!initialization) {\n return null;\n }\n\n let resolvedUris = context.representation.getBaseUris();\n const uri = initialization.attributes['sourceURL'];\n if (uri) {\n resolvedUris = ManifestParserUtils.resolveUris(resolvedUris, [\n StringUtils.htmlUnescape(uri),\n ], context.urlParams());\n }\n\n let startByte = 0;\n let endByte = null;\n const range = TXml.parseAttr(initialization, 'range', TXml.parseRange);\n if (range) {\n startByte = range.start;\n endByte = range.end;\n }\n\n const getUris = () => resolvedUris;\n const qualityInfo = shaka.dash.SegmentBase.createQualityInfo(context);\n const ref = new shaka.media.InitSegmentReference(\n getUris,\n startByte,\n endByte,\n qualityInfo,\n /* timescale= */ null,\n /* segmentData= */ null,\n aesKey);\n ref.codecs = context.representation.codecs;\n ref.mimeType = context.representation.mimeType;\n return ref;\n }\n\n /**\n * Creates a new StreamInfo object.\n *\n * @param {shaka.dash.DashParser.Context} context\n * @param {shaka.dash.DashParser.RequestSegmentCallback} requestSegment\n * @param {shaka.extern.aesKey|undefined} aesKey\n * @return {shaka.dash.DashParser.StreamInfo}\n */\n static createStreamInfo(context, requestSegment, aesKey) {\n goog.asserts.assert(context.representation.segmentBase,\n 'Should only be called with SegmentBase');\n // Since SegmentBase does not need updates, simply treat any call as\n // the initial parse.\n const MpdUtils = shaka.dash.MpdUtils;\n const SegmentBase = shaka.dash.SegmentBase;\n const TXml = shaka.util.TXml;\n\n const unscaledPresentationTimeOffset = Number(MpdUtils.inheritAttribute(\n context, SegmentBase.fromInheritance_, 'presentationTimeOffset')) || 0;\n\n const timescaleStr = MpdUtils.inheritAttribute(\n context, SegmentBase.fromInheritance_, 'timescale');\n let timescale = 1;\n if (timescaleStr) {\n timescale = TXml.parsePositiveInt(timescaleStr) || 1;\n }\n\n const scaledPresentationTimeOffset =\n (unscaledPresentationTimeOffset / timescale) || 0;\n\n const initSegmentReference = SegmentBase.createInitSegment(\n context, SegmentBase.fromInheritance_, aesKey);\n\n // Throws an immediate error if the format is unsupported.\n SegmentBase.checkSegmentIndexRangeSupport_(context, initSegmentReference);\n\n // Direct fields of context will be reassigned by the parser before\n // generateSegmentIndex is called. So we must make a shallow copy first,\n // and use that in the generateSegmentIndex callbacks.\n const shallowCopyOfContext =\n shaka.util.ObjectUtils.shallowCloneObject(context);\n\n return {\n generateSegmentIndex: () => {\n return SegmentBase.generateSegmentIndex_(\n shallowCopyOfContext, requestSegment, initSegmentReference,\n scaledPresentationTimeOffset);\n },\n };\n }\n\n /**\n * Creates a SegmentIndex for the given URIs and context.\n *\n * @param {shaka.dash.DashParser.Context} context\n * @param {shaka.dash.DashParser.RequestSegmentCallback} requestSegment\n * @param {shaka.media.InitSegmentReference} initSegmentReference\n * @param {!Array.} uris\n * @param {number} startByte\n * @param {?number} endByte\n * @param {number} scaledPresentationTimeOffset\n * @return {!Promise.}\n */\n static async generateSegmentIndexFromUris(\n context, requestSegment, initSegmentReference, uris, startByte,\n endByte, scaledPresentationTimeOffset) {\n // Unpack context right away, before we start an async process.\n // This immunizes us against changes to the context object later.\n /** @type {shaka.media.PresentationTimeline} */\n const presentationTimeline = context.presentationTimeline;\n const fitLast = !context.dynamic || !context.periodInfo.isLastPeriod;\n const periodStart = context.periodInfo.start;\n const periodDuration = context.periodInfo.duration;\n const containerType = context.representation.mimeType.split('/')[1];\n\n // Create a local variable to bind to so we can set to null to help the GC.\n let localRequest = requestSegment;\n let segmentIndex = null;\n\n const responses = [\n localRequest(uris, startByte, endByte, /* isInit= */ false),\n containerType == 'webm' ?\n localRequest(\n initSegmentReference.getUris(),\n initSegmentReference.startByte,\n initSegmentReference.endByte,\n /* isInit= */ true) :\n null,\n ];\n\n localRequest = null;\n const results = await Promise.all(responses);\n const indexData = results[0];\n const initData = results[1] || null;\n /** @type {Array.} */\n let references = null;\n\n const timestampOffset = periodStart - scaledPresentationTimeOffset;\n const appendWindowStart = periodStart;\n const appendWindowEnd = periodDuration ?\n periodStart + periodDuration : Infinity;\n\n if (containerType == 'mp4') {\n references = shaka.media.Mp4SegmentIndexParser.parse(\n indexData, startByte, uris, initSegmentReference, timestampOffset,\n appendWindowStart, appendWindowEnd);\n } else {\n goog.asserts.assert(initData, 'WebM requires init data');\n references = shaka.media.WebmSegmentIndexParser.parse(\n indexData, initData, uris, initSegmentReference, timestampOffset,\n appendWindowStart, appendWindowEnd);\n }\n for (const ref of references) {\n ref.codecs = context.representation.codecs;\n ref.mimeType = context.representation.mimeType;\n ref.bandwidth = context.bandwidth;\n }\n\n presentationTimeline.notifySegments(references);\n\n // Since containers are never updated, we don't need to store the\n // segmentIndex in the map.\n goog.asserts.assert(!segmentIndex,\n 'Should not call generateSegmentIndex twice');\n\n segmentIndex = new shaka.media.SegmentIndex(references);\n if (fitLast) {\n segmentIndex.fit(appendWindowStart, appendWindowEnd, /* isNew= */ true);\n }\n return segmentIndex;\n }\n\n /**\n * @param {?shaka.dash.DashParser.InheritanceFrame} frame\n * @return {?shaka.extern.xml.Node}\n * @private\n */\n static fromInheritance_(frame) {\n return frame.segmentBase;\n }\n\n /**\n * Compute the byte range of the segment index from the container.\n *\n * @param {shaka.dash.DashParser.Context} context\n * @return {?{start: number, end: number}}\n * @private\n */\n static computeIndexRange_(context) {\n const MpdUtils = shaka.dash.MpdUtils;\n const SegmentBase = shaka.dash.SegmentBase;\n const TXml = shaka.util.TXml;\n\n const representationIndex = MpdUtils.inheritChild(\n context, SegmentBase.fromInheritance_, 'RepresentationIndex');\n const indexRangeElem = MpdUtils.inheritAttribute(\n context, SegmentBase.fromInheritance_, 'indexRange');\n\n let indexRange = TXml.parseRange(indexRangeElem || '');\n if (representationIndex) {\n indexRange = TXml.parseAttr(\n representationIndex, 'range', TXml.parseRange, indexRange);\n }\n return indexRange;\n }\n\n /**\n * Compute the URIs of the segment index from the container.\n *\n * @param {shaka.dash.DashParser.Context} context\n * @return {!Array.}\n * @private\n */\n static computeIndexUris_(context) {\n const ManifestParserUtils = shaka.util.ManifestParserUtils;\n const MpdUtils = shaka.dash.MpdUtils;\n const SegmentBase = shaka.dash.SegmentBase;\n const StringUtils = shaka.util.StringUtils;\n\n const representationIndex = MpdUtils.inheritChild(\n context, SegmentBase.fromInheritance_, 'RepresentationIndex');\n\n let indexUris = context.representation.getBaseUris();\n if (representationIndex) {\n const representationUri =\n StringUtils.htmlUnescape(representationIndex.attributes['sourceURL']);\n if (representationUri) {\n indexUris = ManifestParserUtils.resolveUris(\n indexUris, [representationUri], context.urlParams());\n }\n }\n\n return indexUris;\n }\n\n /**\n * Check if this type of segment index is supported. This allows for\n * immediate errors during parsing, as opposed to an async error from\n * createSegmentIndex().\n *\n * Also checks for a valid byte range, which is not required for callers from\n * SegmentTemplate.\n *\n * @param {shaka.dash.DashParser.Context} context\n * @param {shaka.media.InitSegmentReference} initSegmentReference\n * @private\n */\n static checkSegmentIndexRangeSupport_(context, initSegmentReference) {\n const SegmentBase = shaka.dash.SegmentBase;\n\n SegmentBase.checkSegmentIndexSupport(context, initSegmentReference);\n\n const indexRange = SegmentBase.computeIndexRange_(context);\n if (!indexRange) {\n shaka.log.error(\n 'SegmentBase does not contain sufficient segment information:',\n 'the SegmentBase does not contain @indexRange',\n 'or a RepresentationIndex element.',\n context.representation);\n throw new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.MANIFEST,\n shaka.util.Error.Code.DASH_NO_SEGMENT_INFO);\n }\n }\n\n /**\n * Check if this type of segment index is supported. This allows for\n * immediate errors during parsing, as opposed to an async error from\n * createSegmentIndex().\n *\n * @param {shaka.dash.DashParser.Context} context\n * @param {shaka.media.InitSegmentReference} initSegmentReference\n */\n static checkSegmentIndexSupport(context, initSegmentReference) {\n const ContentType = shaka.util.ManifestParserUtils.ContentType;\n\n const contentType = context.representation.contentType;\n const containerType = context.representation.mimeType.split('/')[1];\n\n if (contentType != ContentType.TEXT && containerType != 'mp4' &&\n containerType != 'webm') {\n shaka.log.error(\n 'SegmentBase specifies an unsupported container type.',\n context.representation);\n throw new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.MANIFEST,\n shaka.util.Error.Code.DASH_UNSUPPORTED_CONTAINER);\n }\n\n if ((containerType == 'webm') && !initSegmentReference) {\n shaka.log.error(\n 'SegmentBase does not contain sufficient segment information:',\n 'the SegmentBase uses a WebM container,',\n 'but does not contain an Initialization element.',\n context.representation);\n throw new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.MANIFEST,\n shaka.util.Error.Code.DASH_WEBM_MISSING_INIT);\n }\n }\n\n /**\n * Generate a SegmentIndex from a Context object.\n *\n * @param {shaka.dash.DashParser.Context} context\n * @param {shaka.dash.DashParser.RequestSegmentCallback} requestSegment\n * @param {shaka.media.InitSegmentReference} initSegmentReference\n * @param {number} scaledPresentationTimeOffset\n * @return {!Promise.}\n * @private\n */\n static generateSegmentIndex_(\n context, requestSegment, initSegmentReference,\n scaledPresentationTimeOffset) {\n const SegmentBase = shaka.dash.SegmentBase;\n\n const indexUris = SegmentBase.computeIndexUris_(context);\n const indexRange = SegmentBase.computeIndexRange_(context);\n goog.asserts.assert(indexRange, 'Index range should not be null!');\n\n return shaka.dash.SegmentBase.generateSegmentIndexFromUris(\n context, requestSegment, initSegmentReference, indexUris,\n indexRange.start, indexRange.end,\n scaledPresentationTimeOffset);\n }\n\n /**\n * Create a MediaQualityInfo object from a Context object.\n *\n * @param {!shaka.dash.DashParser.Context} context\n * @return {!shaka.extern.MediaQualityInfo}\n */\n static createQualityInfo(context) {\n const representation = context.representation;\n return {\n bandwidth: context.bandwidth,\n audioSamplingRate: representation.audioSamplingRate,\n codecs: representation.codecs,\n contentType: representation.contentType,\n frameRate: representation.frameRate || null,\n height: representation.height || null,\n mimeType: representation.mimeType,\n channelsCount: representation.numChannels,\n pixelAspectRatio: representation.pixelAspectRatio || null,\n width: representation.width || null,\n label: context.adaptationSet.label || null,\n roles: context.roles || null,\n language: context.adaptationSet.language || null,\n };\n }\n};\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.media.Mp4SegmentIndexParser');\n\ngoog.require('goog.asserts');\ngoog.require('shaka.log');\ngoog.require('shaka.media.InitSegmentReference');\ngoog.require('shaka.media.SegmentReference');\ngoog.require('shaka.util.Error');\ngoog.require('shaka.util.Mp4Parser');\n\n\nshaka.media.Mp4SegmentIndexParser = class {\n /**\n * Parses SegmentReferences from an ISO BMFF SIDX structure.\n * @param {BufferSource} sidxData The MP4's container's SIDX.\n * @param {number} sidxOffset The SIDX's offset, in bytes, from the start of\n * the MP4 container.\n * @param {!Array.} uris The possible locations of the MP4 file that\n * contains the segments.\n * @param {shaka.media.InitSegmentReference} initSegmentReference\n * @param {number} timestampOffset\n * @param {number} appendWindowStart\n * @param {number} appendWindowEnd\n * @return {!Array.}\n */\n static parse(\n sidxData, sidxOffset, uris, initSegmentReference, timestampOffset,\n appendWindowStart, appendWindowEnd) {\n const Mp4SegmentIndexParser = shaka.media.Mp4SegmentIndexParser;\n\n let references;\n\n const parser = new shaka.util.Mp4Parser()\n .fullBox('sidx', (box) => {\n references = Mp4SegmentIndexParser.parseSIDX_(\n sidxOffset,\n initSegmentReference,\n timestampOffset,\n appendWindowStart,\n appendWindowEnd,\n uris,\n box);\n });\n\n if (sidxData) {\n parser.parse(sidxData);\n }\n\n if (references) {\n return references;\n } else {\n shaka.log.error('Invalid box type, expected \"sidx\".');\n throw new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.MEDIA,\n shaka.util.Error.Code.MP4_SIDX_WRONG_BOX_TYPE);\n }\n }\n\n\n /**\n * Parse a SIDX box from the given reader.\n *\n * @param {number} sidxOffset\n * @param {shaka.media.InitSegmentReference} initSegmentReference\n * @param {number} timestampOffset\n * @param {number} appendWindowStart\n * @param {number} appendWindowEnd\n * @param {!Array.} uris The possible locations of the MP4 file that\n * contains the segments.\n * @param {!shaka.extern.ParsedBox} box\n * @return {!Array.}\n * @private\n */\n static parseSIDX_(\n sidxOffset, initSegmentReference, timestampOffset, appendWindowStart,\n appendWindowEnd, uris, box) {\n goog.asserts.assert(\n box.version != null,\n 'SIDX is a full box and should have a valid version.');\n\n const references = [];\n\n // Parse the SIDX structure.\n // Skip reference_ID (32 bits).\n box.reader.skip(4);\n\n const timescale = box.reader.readUint32();\n\n if (timescale == 0) {\n shaka.log.error('Invalid timescale.');\n throw new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.MEDIA,\n shaka.util.Error.Code.MP4_SIDX_INVALID_TIMESCALE);\n }\n\n let earliestPresentationTime;\n let firstOffset;\n\n if (box.version == 0) {\n earliestPresentationTime = box.reader.readUint32();\n firstOffset = box.reader.readUint32();\n } else {\n earliestPresentationTime = box.reader.readUint64();\n firstOffset = box.reader.readUint64();\n }\n\n // Skip reserved (16 bits).\n box.reader.skip(2);\n\n // Add references.\n const referenceCount = box.reader.readUint16();\n\n // Subtract the presentation time offset\n let unscaledStartTime = earliestPresentationTime;\n let startByte = sidxOffset + box.size + firstOffset;\n\n for (let i = 0; i < referenceCount; i++) {\n // |chunk| is 1 bit for |referenceType|, and 31 bits for |referenceSize|.\n const chunk = box.reader.readUint32();\n const referenceType = (chunk & 0x80000000) >>> 31;\n const referenceSize = chunk & 0x7FFFFFFF;\n\n const subsegmentDuration = box.reader.readUint32();\n\n // Skipping 1 bit for |startsWithSap|, 3 bits for |sapType|, and 28 bits\n // for |sapDelta|.\n box.reader.skip(4);\n\n // If |referenceType| is 1 then the reference is to another SIDX.\n // We do not support this.\n if (referenceType == 1) {\n shaka.log.error('Heirarchical SIDXs are not supported.');\n throw new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.MEDIA,\n shaka.util.Error.Code.MP4_SIDX_TYPE_NOT_SUPPORTED);\n }\n\n // The media timestamps inside the container.\n const nativeStartTime = unscaledStartTime / timescale;\n const nativeEndTime =\n (unscaledStartTime + subsegmentDuration) / timescale;\n\n references.push(\n new shaka.media.SegmentReference(\n nativeStartTime + timestampOffset,\n nativeEndTime + timestampOffset,\n (() => { return uris; }),\n startByte,\n startByte + referenceSize - 1,\n initSegmentReference,\n timestampOffset,\n appendWindowStart,\n appendWindowEnd));\n\n unscaledStartTime += subsegmentDuration;\n startByte += referenceSize;\n }\n\n box.parser.stop();\n return references;\n }\n};\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.dash.SegmentList');\n\ngoog.require('goog.asserts');\ngoog.require('shaka.dash.MpdUtils');\ngoog.require('shaka.dash.SegmentBase');\ngoog.require('shaka.log');\ngoog.require('shaka.media.InitSegmentReference');\ngoog.require('shaka.media.SegmentIndex');\ngoog.require('shaka.media.SegmentReference');\ngoog.require('shaka.util.Error');\ngoog.require('shaka.util.Functional');\ngoog.require('shaka.util.ManifestParserUtils');\ngoog.require('shaka.util.StringUtils');\ngoog.require('shaka.util.TXml');\ngoog.requireType('shaka.dash.DashParser');\ngoog.requireType('shaka.media.PresentationTimeline');\n\n\n/**\n * @summary A set of functions for parsing SegmentList elements.\n */\nshaka.dash.SegmentList = class {\n /**\n * Creates a new StreamInfo object.\n * Updates the existing SegmentIndex, if any.\n *\n * @param {shaka.dash.DashParser.Context} context\n * @param {!Object.} streamMap\n * @param {shaka.extern.aesKey|undefined} aesKey\n * @return {shaka.dash.DashParser.StreamInfo}\n */\n static createStreamInfo(context, streamMap, aesKey) {\n goog.asserts.assert(context.representation.segmentList,\n 'Should only be called with SegmentList');\n const SegmentList = shaka.dash.SegmentList;\n\n const initSegmentReference = shaka.dash.SegmentBase.createInitSegment(\n context, SegmentList.fromInheritance_, aesKey);\n const info = SegmentList.parseSegmentListInfo_(context);\n\n SegmentList.checkSegmentListInfo_(context, info);\n\n /** @type {shaka.media.SegmentIndex} */\n let segmentIndex = null;\n let stream = null;\n if (context.period.id && context.representation.id) {\n // Only check/store the index if period and representation IDs are set.\n const id = context.period.id + ',' + context.representation.id;\n stream = streamMap[id];\n if (stream) {\n segmentIndex = stream.segmentIndex;\n }\n }\n\n const references = SegmentList.createSegmentReferences_(\n context.periodInfo.start, context.periodInfo.duration,\n info.startNumber, context.representation.getBaseUris, info,\n initSegmentReference, aesKey, context.representation.mimeType,\n context.representation.codecs, context.bandwidth, context.urlParams);\n\n const isNew = !segmentIndex;\n if (segmentIndex) {\n const start = context.presentationTimeline.getSegmentAvailabilityStart();\n segmentIndex.mergeAndEvict(references, start);\n } else {\n segmentIndex = new shaka.media.SegmentIndex(references);\n }\n context.presentationTimeline.notifySegments(references);\n\n if (!context.dynamic || !context.periodInfo.isLastPeriod) {\n const periodStart = context.periodInfo.start;\n const periodEnd = context.periodInfo.duration ?\n context.periodInfo.start + context.periodInfo.duration : Infinity;\n segmentIndex.fit(periodStart, periodEnd, isNew);\n }\n\n if (stream) {\n stream.segmentIndex = segmentIndex;\n }\n\n return {\n generateSegmentIndex: () => {\n if (!segmentIndex || segmentIndex.isEmpty()) {\n segmentIndex.merge(references);\n }\n return Promise.resolve(segmentIndex);\n },\n };\n }\n\n /**\n * @param {?shaka.dash.DashParser.InheritanceFrame} frame\n * @return {?shaka.extern.xml.Node}\n * @private\n */\n static fromInheritance_(frame) {\n return frame.segmentList;\n }\n\n /**\n * Parses the SegmentList items to create an info object.\n *\n * @param {shaka.dash.DashParser.Context} context\n * @return {shaka.dash.SegmentList.SegmentListInfo}\n * @private\n */\n static parseSegmentListInfo_(context) {\n const SegmentList = shaka.dash.SegmentList;\n const MpdUtils = shaka.dash.MpdUtils;\n\n const mediaSegments = SegmentList.parseMediaSegments_(context);\n const segmentInfo =\n MpdUtils.parseSegmentInfo(context, SegmentList.fromInheritance_);\n\n let startNumber = segmentInfo.startNumber;\n if (startNumber == 0) {\n shaka.log.warning('SegmentList@startNumber must be > 0');\n startNumber = 1;\n }\n\n let startTime = 0;\n if (segmentInfo.segmentDuration) {\n // See DASH sec. 5.3.9.5.3\n // Don't use presentationTimeOffset for @duration.\n startTime = segmentInfo.segmentDuration * (startNumber - 1);\n } else if (segmentInfo.timeline && segmentInfo.timeline.length > 0) {\n // The presentationTimeOffset was considered in timeline creation.\n startTime = segmentInfo.timeline[0].start;\n }\n\n return {\n segmentDuration: segmentInfo.segmentDuration,\n startTime: startTime,\n startNumber: startNumber,\n scaledPresentationTimeOffset: segmentInfo.scaledPresentationTimeOffset,\n timeline: segmentInfo.timeline,\n mediaSegments: mediaSegments,\n };\n }\n\n /**\n * Checks whether a SegmentListInfo object is valid.\n *\n * @param {shaka.dash.DashParser.Context} context\n * @param {shaka.dash.SegmentList.SegmentListInfo} info\n * @private\n */\n static checkSegmentListInfo_(context, info) {\n if (!info.segmentDuration && !info.timeline &&\n info.mediaSegments.length > 1) {\n shaka.log.warning(\n 'SegmentList does not contain sufficient segment information:',\n 'the SegmentList specifies multiple segments,',\n 'but does not specify a segment duration or timeline.',\n context.representation);\n throw new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.MANIFEST,\n shaka.util.Error.Code.DASH_NO_SEGMENT_INFO);\n }\n\n if (!info.segmentDuration && !context.periodInfo.duration &&\n !info.timeline && info.mediaSegments.length == 1) {\n shaka.log.warning(\n 'SegmentList does not contain sufficient segment information:',\n 'the SegmentList specifies one segment,',\n 'but does not specify a segment duration, period duration,',\n 'or timeline.',\n context.representation);\n throw new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.MANIFEST,\n shaka.util.Error.Code.DASH_NO_SEGMENT_INFO);\n }\n\n if (info.timeline && info.timeline.length == 0) {\n shaka.log.warning(\n 'SegmentList does not contain sufficient segment information:',\n 'the SegmentList has an empty timeline.',\n context.representation);\n throw new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.MANIFEST,\n shaka.util.Error.Code.DASH_NO_SEGMENT_INFO);\n }\n }\n\n /**\n * Creates an array of segment references for the given data.\n *\n * @param {number} periodStart in seconds.\n * @param {?number} periodDuration in seconds.\n * @param {number} startNumber\n * @param {function():!Array.} getBaseUris\n * @param {shaka.dash.SegmentList.SegmentListInfo} info\n * @param {shaka.media.InitSegmentReference} initSegmentReference\n * @param {shaka.extern.aesKey|undefined} aesKey\n * @param {string} mimeType\n * @param {string} codecs\n * @param {number} bandwidth\n * @param {function():string} urlParams\n * @return {!Array.}\n * @private\n */\n static createSegmentReferences_(\n periodStart, periodDuration, startNumber, getBaseUris, info,\n initSegmentReference, aesKey, mimeType, codecs, bandwidth, urlParams) {\n const ManifestParserUtils = shaka.util.ManifestParserUtils;\n\n let max = info.mediaSegments.length;\n if (info.timeline && info.timeline.length != info.mediaSegments.length) {\n max = Math.min(info.timeline.length, info.mediaSegments.length);\n shaka.log.warning(\n 'The number of items in the segment timeline and the number of ',\n 'segment URLs do not match, truncating', info.mediaSegments.length,\n 'to', max);\n }\n\n const timestampOffset = periodStart - info.scaledPresentationTimeOffset;\n const appendWindowStart = periodStart;\n const appendWindowEnd = periodDuration ?\n periodStart + periodDuration : Infinity;\n\n /** @type {!Array.} */\n const references = [];\n let prevEndTime = info.startTime;\n for (let i = 0; i < max; i++) {\n const segment = info.mediaSegments[i];\n const startTime = prevEndTime;\n let endTime;\n\n if (info.segmentDuration != null) {\n endTime = startTime + info.segmentDuration;\n } else if (info.timeline) {\n // Ignore the timepoint start since they are continuous.\n endTime = info.timeline[i].end;\n } else {\n // If segmentDuration and timeline are null then there must\n // be exactly one segment.\n goog.asserts.assert(\n info.mediaSegments.length == 1 && periodDuration,\n 'There should be exactly one segment with a Period duration.');\n endTime = startTime + periodDuration;\n }\n\n let uris = null;\n const getUris = () => {\n if (uris == null) {\n uris = ManifestParserUtils.resolveUris(\n getBaseUris(), [segment.mediaUri], urlParams());\n }\n return uris;\n };\n\n const ref = new shaka.media.SegmentReference(\n periodStart + startTime,\n periodStart + endTime,\n getUris,\n segment.start,\n segment.end,\n initSegmentReference,\n timestampOffset,\n appendWindowStart, appendWindowEnd,\n /* partialReferences= */ [],\n /* tilesLayout= */ '',\n /* tileDuration= */ null,\n /* syncTime= */ null,\n shaka.media.SegmentReference.Status.AVAILABLE,\n aesKey);\n ref.codecs = codecs;\n ref.mimeType = mimeType;\n ref.bandwidth = bandwidth;\n references.push(ref);\n prevEndTime = endTime;\n }\n\n return references;\n }\n\n /**\n * Parses the media URIs from the context.\n *\n * @param {shaka.dash.DashParser.Context} context\n * @return {!Array.}\n * @private\n */\n static parseMediaSegments_(context) {\n const Functional = shaka.util.Functional;\n /** @type {!Array.} */\n const segmentLists = [\n context.representation.segmentList,\n context.adaptationSet.segmentList,\n context.period.segmentList,\n ].filter(Functional.isNotNull);\n\n const TXml = shaka.util.TXml;\n const StringUtils = shaka.util.StringUtils;\n // Search each SegmentList for one with at least one SegmentURL element,\n // select the first one, and convert each SegmentURL element to a tuple.\n return segmentLists\n .map((node) => { return TXml.findChildren(node, 'SegmentURL'); })\n .reduce((all, part) => { return all.length > 0 ? all : part; })\n .map((urlNode) => {\n if (urlNode.attributes['indexRange'] &&\n !context.indexRangeWarningGiven) {\n context.indexRangeWarningGiven = true;\n shaka.log.warning(\n 'We do not support the SegmentURL@indexRange attribute on ' +\n 'SegmentList. We only use the SegmentList@duration ' +\n 'attribute or SegmentTimeline, which must be accurate.');\n }\n\n const uri = StringUtils.htmlUnescape(urlNode.attributes['media']);\n const range = TXml.parseAttr(\n urlNode, 'mediaRange', TXml.parseRange,\n {start: 0, end: null});\n return {mediaUri: uri, start: range.start, end: range.end};\n });\n }\n};\n\n/**\n * @typedef {{\n * mediaUri: string,\n * start: number,\n * end: ?number\n * }}\n *\n * @property {string} mediaUri\n * The URI of the segment.\n * @property {number} start\n * The start byte of the segment.\n * @property {?number} end\n * The end byte of the segment, or null.\n */\nshaka.dash.SegmentList.MediaSegment;\n\n/**\n * @typedef {{\n * segmentDuration: ?number,\n * startTime: number,\n * startNumber: number,\n * scaledPresentationTimeOffset: number,\n * timeline: Array.,\n * mediaSegments: !Array.\n * }}\n * @private\n *\n * @description\n * Contains information about a SegmentList.\n *\n * @property {?number} segmentDuration\n * The duration of the segments, if given.\n * @property {number} startTime\n * The start time of the first segment, in seconds.\n * @property {number} startNumber\n * The start number of the segments; 1 or greater.\n * @property {number} scaledPresentationTimeOffset\n * The scaledPresentationTimeOffset of the representation, in seconds.\n * @property {Array.} timeline\n * The timeline of the representation, if given. Times in seconds.\n * @property {!Array.} mediaSegments\n * The URI and byte-ranges of the media segments.\n */\nshaka.dash.SegmentList.SegmentListInfo;\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.dash.SegmentTemplate');\n\ngoog.require('goog.asserts');\ngoog.require('shaka.dash.MpdUtils');\ngoog.require('shaka.dash.SegmentBase');\ngoog.require('shaka.log');\ngoog.require('shaka.media.InitSegmentReference');\ngoog.require('shaka.media.SegmentIndex');\ngoog.require('shaka.media.SegmentReference');\ngoog.require('shaka.util.Error');\ngoog.require('shaka.util.IReleasable');\ngoog.require('shaka.util.ManifestParserUtils');\ngoog.require('shaka.util.ObjectUtils');\ngoog.require('shaka.util.StringUtils');\ngoog.require('shaka.util.TXml');\ngoog.requireType('shaka.dash.DashParser');\ngoog.requireType('shaka.media.PresentationTimeline');\n\n\n/**\n * @summary A set of functions for parsing SegmentTemplate elements.\n */\nshaka.dash.SegmentTemplate = class {\n /**\n * Creates a new StreamInfo object.\n * Updates the existing SegmentIndex, if any.\n *\n * @param {shaka.dash.DashParser.Context} context\n * @param {shaka.dash.DashParser.RequestSegmentCallback} requestSegment\n * @param {!Object.} streamMap\n * @param {boolean} isUpdate True if the manifest is being updated.\n * @param {number} segmentLimit The maximum number of segments to generate for\n * a SegmentTemplate with fixed duration.\n * @param {!Object.} periodDurationMap\n * @param {shaka.extern.aesKey|undefined} aesKey\n * @param {?number} lastSegmentNumber\n * @param {boolean} isPatchUpdate\n * @return {shaka.dash.DashParser.StreamInfo}\n */\n static createStreamInfo(\n context, requestSegment, streamMap, isUpdate, segmentLimit,\n periodDurationMap, aesKey, lastSegmentNumber, isPatchUpdate) {\n goog.asserts.assert(context.representation.segmentTemplate,\n 'Should only be called with SegmentTemplate ' +\n 'or segment info defined');\n const MpdUtils = shaka.dash.MpdUtils;\n const SegmentTemplate = shaka.dash.SegmentTemplate;\n const TimelineSegmentIndex = shaka.dash.TimelineSegmentIndex;\n\n if (!isPatchUpdate && !context.representation.initialization) {\n context.representation.initialization =\n MpdUtils.inheritAttribute(\n context, SegmentTemplate.fromInheritance_, 'initialization');\n }\n\n const initSegmentReference = context.representation.initialization ?\n SegmentTemplate.createInitSegment_(context, aesKey) : null;\n\n /** @type {shaka.dash.SegmentTemplate.SegmentTemplateInfo} */\n const info = SegmentTemplate.parseSegmentTemplateInfo_(context);\n\n SegmentTemplate.checkSegmentTemplateInfo_(context, info);\n\n // Direct fields of context will be reassigned by the parser before\n // generateSegmentIndex is called. So we must make a shallow copy first,\n // and use that in the generateSegmentIndex callbacks.\n const shallowCopyOfContext =\n shaka.util.ObjectUtils.shallowCloneObject(context);\n\n if (info.indexTemplate) {\n shaka.dash.SegmentBase.checkSegmentIndexSupport(\n context, initSegmentReference);\n\n return {\n generateSegmentIndex: () => {\n return SegmentTemplate.generateSegmentIndexFromIndexTemplate_(\n shallowCopyOfContext, requestSegment, initSegmentReference,\n info);\n },\n };\n } else if (info.segmentDuration) {\n if (!isUpdate &&\n context.adaptationSet.contentType !== 'image' &&\n context.adaptationSet.contentType !== 'text') {\n const periodStart = context.periodInfo.start;\n const periodId = context.period.id;\n const initialPeriodDuration = context.periodInfo.duration;\n const periodDuration =\n (periodId != null && periodDurationMap[periodId]) ||\n initialPeriodDuration;\n const periodEnd = periodDuration ?\n (periodStart + periodDuration) : Infinity;\n\n context.presentationTimeline.notifyMaxSegmentDuration(\n info.segmentDuration);\n context.presentationTimeline.notifyPeriodDuration(\n periodStart, periodEnd);\n }\n\n return {\n generateSegmentIndex: () => {\n return SegmentTemplate.generateSegmentIndexFromDuration_(\n shallowCopyOfContext, info, segmentLimit, initSegmentReference,\n periodDurationMap, aesKey, lastSegmentNumber,\n context.representation.segmentSequenceCadence);\n },\n };\n } else {\n /** @type {shaka.media.SegmentIndex} */\n let segmentIndex = null;\n let id = null;\n let stream = null;\n if (context.period.id && context.representation.id) {\n // Only check/store the index if period and representation IDs are set.\n id = context.period.id + ',' + context.representation.id;\n stream = streamMap[id];\n if (stream) {\n segmentIndex = stream.segmentIndex;\n }\n }\n\n const periodStart = context.periodInfo.start;\n const periodEnd = context.periodInfo.duration ? periodStart +\n context.periodInfo.duration : Infinity;\n\n shaka.log.debug(`New manifest ${periodStart} - ${periodEnd}`);\n\n /* When to fit segments. All refactors should honor/update this table:\n *\n * | dynamic | infinite | last | should | notes |\n * | | period | period | fit | |\n * | ------- | -------- | ------ | ------ | ------------------------- |\n * | F | F | X | T | typical VOD |\n * | F | T | X | X | impossible: infinite VOD |\n * | T | F | F | T | typical live, old period |\n * | T | F | T | F | typical IPR |\n * | T | T | F | X | impossible: old, infinite |\n * | T | T | T | F | typical live, new period |\n */\n\n // We never fit the final period of dynamic content, which could be\n // infinite live (with no limit to fit to) or IPR (which would expand the\n // most recent segment to the end of the presentation).\n const shouldFit = !(context.dynamic && context.periodInfo.isLastPeriod);\n\n if (!segmentIndex) {\n shaka.log.debug(`Creating TSI with end ${periodEnd}`);\n segmentIndex = new TimelineSegmentIndex(\n info,\n context.representation.id,\n context.bandwidth,\n context.representation.getBaseUris,\n context.urlParams,\n periodStart,\n periodEnd,\n initSegmentReference,\n shouldFit,\n aesKey,\n context.representation.segmentSequenceCadence,\n );\n } else {\n const tsi = /** @type {!TimelineSegmentIndex} */(segmentIndex);\n tsi.appendTemplateInfo(\n info, periodStart, periodEnd, shouldFit, initSegmentReference);\n\n const availabilityStart =\n context.presentationTimeline.getSegmentAvailabilityStart();\n tsi.evict(availabilityStart);\n }\n\n if (info.timeline &&\n context.adaptationSet.contentType !== 'image' &&\n context.adaptationSet.contentType !== 'text') {\n const timeline = info.timeline;\n context.presentationTimeline.notifyTimeRange(\n timeline,\n periodStart);\n }\n\n if (stream && context.dynamic) {\n stream.segmentIndex = segmentIndex;\n }\n\n return {\n generateSegmentIndex: () => {\n // If segmentIndex is deleted, or segmentIndex's references are\n // released by closeSegmentIndex(), we should set the value of\n // segmentIndex again.\n if (segmentIndex instanceof shaka.dash.TimelineSegmentIndex &&\n segmentIndex.isEmpty()) {\n segmentIndex.appendTemplateInfo(info, periodStart,\n periodEnd, shouldFit, initSegmentReference);\n }\n return Promise.resolve(segmentIndex);\n },\n };\n }\n }\n\n /**\n * Ingests Patch MPD segments into timeline.\n *\n * @param {!shaka.dash.DashParser.Context} context\n * @param {shaka.extern.xml.Node} patchNode\n */\n static modifyTimepoints(context, patchNode) {\n const MpdUtils = shaka.dash.MpdUtils;\n const SegmentTemplate = shaka.dash.SegmentTemplate;\n const TXml = shaka.util.TXml;\n\n const timelineNode = MpdUtils.inheritChild(context,\n SegmentTemplate.fromInheritance_, 'SegmentTimeline');\n goog.asserts.assert(timelineNode, 'timeline node not found');\n const timepoints = TXml.findChildren(timelineNode, 'S');\n\n goog.asserts.assert(timepoints, 'timepoints should exist');\n TXml.modifyNodes(timepoints, patchNode);\n timelineNode.children = timepoints;\n }\n\n /**\n * Removes all segments from timeline.\n *\n * @param {!shaka.dash.DashParser.Context} context\n */\n static removeTimepoints(context) {\n const MpdUtils = shaka.dash.MpdUtils;\n const SegmentTemplate = shaka.dash.SegmentTemplate;\n\n const timelineNode = MpdUtils.inheritChild(context,\n SegmentTemplate.fromInheritance_, 'SegmentTimeline');\n goog.asserts.assert(timelineNode, 'timeline node not found');\n timelineNode.children = [];\n }\n\n /**\n * @param {?shaka.dash.DashParser.InheritanceFrame} frame\n * @return {?shaka.extern.xml.Node}\n * @private\n */\n static fromInheritance_(frame) {\n return frame.segmentTemplate;\n }\n\n /**\n * Parses a SegmentTemplate element into an info object.\n *\n * @param {shaka.dash.DashParser.Context} context\n * @return {shaka.dash.SegmentTemplate.SegmentTemplateInfo}\n * @private\n */\n static parseSegmentTemplateInfo_(context) {\n const SegmentTemplate = shaka.dash.SegmentTemplate;\n const MpdUtils = shaka.dash.MpdUtils;\n const StringUtils = shaka.util.StringUtils;\n const segmentInfo =\n MpdUtils.parseSegmentInfo(context, SegmentTemplate.fromInheritance_);\n\n const media = MpdUtils.inheritAttribute(\n context, SegmentTemplate.fromInheritance_, 'media');\n\n const index = MpdUtils.inheritAttribute(\n context, SegmentTemplate.fromInheritance_, 'index');\n\n const k = MpdUtils.inheritAttribute(\n context, SegmentTemplate.fromInheritance_, 'k');\n\n let numChunks = 0;\n if (k) {\n numChunks = parseInt(k, 10);\n }\n\n return {\n segmentDuration: segmentInfo.segmentDuration,\n timescale: segmentInfo.timescale,\n startNumber: segmentInfo.startNumber,\n scaledPresentationTimeOffset: segmentInfo.scaledPresentationTimeOffset,\n unscaledPresentationTimeOffset:\n segmentInfo.unscaledPresentationTimeOffset,\n timeline: segmentInfo.timeline,\n mediaTemplate: media && StringUtils.htmlUnescape(media),\n indexTemplate: index,\n mimeType: context.representation.mimeType,\n codecs: context.representation.codecs,\n bandwidth: context.bandwidth,\n numChunks: numChunks,\n };\n }\n\n /**\n * Verifies a SegmentTemplate info object.\n *\n * @param {shaka.dash.DashParser.Context} context\n * @param {shaka.dash.SegmentTemplate.SegmentTemplateInfo} info\n * @private\n */\n static checkSegmentTemplateInfo_(context, info) {\n let n = 0;\n n += info.indexTemplate ? 1 : 0;\n n += info.timeline ? 1 : 0;\n n += info.segmentDuration ? 1 : 0;\n\n if (n == 0) {\n shaka.log.error(\n 'SegmentTemplate does not contain any segment information:',\n 'the SegmentTemplate must contain either an index URL template',\n 'a SegmentTimeline, or a segment duration.',\n context.representation);\n throw new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.MANIFEST,\n shaka.util.Error.Code.DASH_NO_SEGMENT_INFO);\n } else if (n != 1) {\n shaka.log.warning(\n 'SegmentTemplate containes multiple segment information sources:',\n 'the SegmentTemplate should only contain an index URL template,',\n 'a SegmentTimeline or a segment duration.',\n context.representation);\n if (info.indexTemplate) {\n shaka.log.info('Using the index URL template by default.');\n info.timeline = null;\n info.segmentDuration = null;\n } else {\n goog.asserts.assert(info.timeline, 'There should be a timeline');\n shaka.log.info('Using the SegmentTimeline by default.');\n info.segmentDuration = null;\n }\n }\n\n if (!info.indexTemplate && !info.mediaTemplate) {\n shaka.log.error(\n 'SegmentTemplate does not contain sufficient segment information:',\n 'the SegmentTemplate\\'s media URL template is missing.',\n context.representation);\n throw new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.MANIFEST,\n shaka.util.Error.Code.DASH_NO_SEGMENT_INFO);\n }\n }\n\n /**\n * Generates a SegmentIndex from an index URL template.\n *\n * @param {shaka.dash.DashParser.Context} context\n * @param {shaka.dash.DashParser.RequestSegmentCallback} requestSegment\n * @param {shaka.media.InitSegmentReference} init\n * @param {shaka.dash.SegmentTemplate.SegmentTemplateInfo} info\n * @return {!Promise.}\n * @private\n */\n static generateSegmentIndexFromIndexTemplate_(\n context, requestSegment, init, info) {\n const MpdUtils = shaka.dash.MpdUtils;\n const ManifestParserUtils = shaka.util.ManifestParserUtils;\n\n goog.asserts.assert(info.indexTemplate, 'must be using index template');\n const filledTemplate = MpdUtils.fillUriTemplate(\n info.indexTemplate, context.representation.id,\n null, null, context.bandwidth || null, null);\n\n const resolvedUris = ManifestParserUtils.resolveUris(\n context.representation.getBaseUris(), [filledTemplate]);\n\n return shaka.dash.SegmentBase.generateSegmentIndexFromUris(\n context, requestSegment, init, resolvedUris, 0, null,\n info.scaledPresentationTimeOffset);\n }\n\n /**\n * Generates a SegmentIndex from fixed-duration segments.\n *\n * @param {shaka.dash.DashParser.Context} context\n * @param {shaka.dash.SegmentTemplate.SegmentTemplateInfo} info\n * @param {number} segmentLimit The maximum number of segments to generate.\n * @param {shaka.media.InitSegmentReference} initSegmentReference\n * @param {!Object.} periodDurationMap\n * @param {shaka.extern.aesKey|undefined} aesKey\n * @param {?number} lastSegmentNumber\n * @param {number} segmentSequenceCadence\n * @return {!Promise.}\n * @private\n */\n static generateSegmentIndexFromDuration_(\n context, info, segmentLimit, initSegmentReference, periodDurationMap,\n aesKey, lastSegmentNumber, segmentSequenceCadence) {\n goog.asserts.assert(info.mediaTemplate,\n 'There should be a media template with duration');\n\n const MpdUtils = shaka.dash.MpdUtils;\n const ManifestParserUtils = shaka.util.ManifestParserUtils;\n\n const presentationTimeline = context.presentationTimeline;\n\n // Capture values that could change as the parsing context moves on to\n // other parts of the manifest.\n const periodStart = context.periodInfo.start;\n const periodId = context.period.id;\n const initialPeriodDuration = context.periodInfo.duration;\n\n // For multi-period live streams the period duration may not be known until\n // the following period appears in an updated manifest. periodDurationMap\n // provides the updated period duration.\n const getPeriodEnd = () => {\n const periodDuration =\n (periodId != null && periodDurationMap[periodId]) ||\n initialPeriodDuration;\n const periodEnd = periodDuration ?\n (periodStart + periodDuration) : Infinity;\n return periodEnd;\n };\n\n const segmentDuration = info.segmentDuration;\n goog.asserts.assert(\n segmentDuration != null, 'Segment duration must not be null!');\n\n const startNumber = info.startNumber;\n const timescale = info.timescale;\n\n const template = info.mediaTemplate;\n const bandwidth = context.bandwidth || null;\n const id = context.representation.id;\n const getBaseUris = context.representation.getBaseUris;\n const urlParams = context.urlParams;\n\n const timestampOffset = periodStart - info.scaledPresentationTimeOffset;\n\n // Computes the range of presentation timestamps both within the period and\n // available. This is an intersection of the period range and the\n // availability window.\n const computeAvailablePeriodRange = () => {\n return [\n Math.max(\n presentationTimeline.getSegmentAvailabilityStart(),\n periodStart),\n\n Math.min(\n presentationTimeline.getSegmentAvailabilityEnd(),\n getPeriodEnd()),\n ];\n };\n\n // Computes the range of absolute positions both within the period and\n // available. The range is inclusive. These are the positions for which we\n // will generate segment references.\n const computeAvailablePositionRange = () => {\n // In presentation timestamps.\n const availablePresentationTimes = computeAvailablePeriodRange();\n goog.asserts.assert(availablePresentationTimes.every(isFinite),\n 'Available presentation times must be finite!');\n goog.asserts.assert(availablePresentationTimes.every((x) => x >= 0),\n 'Available presentation times must be positive!');\n goog.asserts.assert(segmentDuration != null,\n 'Segment duration must not be null!');\n\n // In period-relative timestamps.\n const availablePeriodTimes =\n availablePresentationTimes.map((x) => x - periodStart);\n // These may sometimes be reversed ([1] <= [0]) if the period is\n // completely unavailable. The logic will still work if this happens,\n // because we will simply generate no references.\n\n // In period-relative positions (0-based).\n const availablePeriodPositions = [\n Math.ceil(availablePeriodTimes[0] / segmentDuration),\n Math.ceil(availablePeriodTimes[1] / segmentDuration) - 1,\n ];\n\n // For Low Latency we can request the partial current position.\n if (context.representation.availabilityTimeOffset) {\n availablePeriodPositions[1]++;\n }\n\n // In absolute positions.\n const availablePresentationPositions =\n availablePeriodPositions.map((x) => x + startNumber);\n return availablePresentationPositions;\n };\n\n // For Live, we must limit the initial SegmentIndex in size, to avoid\n // consuming too much CPU or memory for content with gigantic\n // timeShiftBufferDepth (which can have values up to and including\n // Infinity).\n const range = computeAvailablePositionRange();\n const minPosition = context.dynamic ?\n Math.max(range[0], range[1] - segmentLimit + 1) :\n range[0];\n const maxPosition = lastSegmentNumber || range[1];\n\n const references = [];\n const createReference = (position) => {\n // These inner variables are all scoped to the inner loop, and can be used\n // safely in the callback below.\n\n goog.asserts.assert(segmentDuration != null,\n 'Segment duration must not be null!');\n\n // Relative to the period start.\n const positionWithinPeriod = position - startNumber;\n const segmentPeriodTime = positionWithinPeriod * segmentDuration;\n\n // What will appear in the actual segment files. The media timestamp is\n // what is expected in the $Time$ template.\n const segmentMediaTime = segmentPeriodTime +\n info.scaledPresentationTimeOffset;\n\n // Relative to the presentation.\n const segmentStart = segmentPeriodTime + periodStart;\n const trueSegmentEnd = segmentStart + segmentDuration;\n // Cap the segment end at the period end so that references from the\n // next period will fit neatly after it.\n const segmentEnd = Math.min(trueSegmentEnd, getPeriodEnd());\n\n // This condition will be true unless the segmentStart was >= periodEnd.\n // If we've done the position calculations correctly, this won't happen.\n goog.asserts.assert(segmentStart < segmentEnd,\n 'Generated a segment outside of the period!');\n\n const partialSegmentRefs = [];\n\n const numChunks = info.numChunks;\n if (numChunks) {\n const partialDuration = (segmentEnd - segmentStart) / numChunks;\n\n for (let i = 0; i < numChunks; i++) {\n const start = segmentStart + partialDuration * i;\n const end = start + partialDuration;\n const subNumber = i + 1;\n const getPartialUris = () => {\n let time = segmentMediaTime * timescale;\n if ('BigInt' in window && time > Number.MAX_SAFE_INTEGER) {\n time = BigInt(segmentMediaTime) * BigInt(timescale);\n }\n const mediaUri = MpdUtils.fillUriTemplate(\n template, id, position, subNumber, bandwidth, time);\n return ManifestParserUtils.resolveUris(\n getBaseUris(), [mediaUri], urlParams());\n };\n const partial = new shaka.media.SegmentReference(\n start,\n end,\n getPartialUris,\n /* startByte= */ 0,\n /* endByte= */ null,\n initSegmentReference,\n timestampOffset,\n /* appendWindowStart= */ periodStart,\n /* appendWindowEnd= */ getPeriodEnd(),\n /* partialReferences= */ [],\n /* tilesLayout= */ '',\n /* tileDuration= */ null,\n /* syncTime= */ null,\n shaka.media.SegmentReference.Status.AVAILABLE,\n aesKey);\n partial.codecs = context.representation.codecs;\n partial.mimeType = context.representation.mimeType;\n if (segmentSequenceCadence == 0) {\n if (i > 0) {\n partial.markAsNonIndependent();\n }\n } else if ((i % segmentSequenceCadence) != 0) {\n partial.markAsNonIndependent();\n }\n partialSegmentRefs.push(partial);\n }\n }\n\n const getUris = () => {\n if (numChunks) {\n return [];\n }\n let time = segmentMediaTime * timescale;\n if ('BigInt' in window && time > Number.MAX_SAFE_INTEGER) {\n time = BigInt(segmentMediaTime) * BigInt(timescale);\n }\n const mediaUri = MpdUtils.fillUriTemplate(\n template, id, position, /* subNumber= */ null, bandwidth, time);\n return ManifestParserUtils.resolveUris(\n getBaseUris(), [mediaUri], urlParams());\n };\n\n const ref = new shaka.media.SegmentReference(\n segmentStart,\n segmentEnd,\n getUris,\n /* startByte= */ 0,\n /* endByte= */ null,\n initSegmentReference,\n timestampOffset,\n /* appendWindowStart= */ periodStart,\n /* appendWindowEnd= */ getPeriodEnd(),\n partialSegmentRefs,\n /* tilesLayout= */ '',\n /* tileDuration= */ null,\n /* syncTime= */ null,\n shaka.media.SegmentReference.Status.AVAILABLE,\n aesKey,\n partialSegmentRefs.length > 0);\n ref.codecs = context.representation.codecs;\n ref.mimeType = context.representation.mimeType;\n ref.bandwidth = context.bandwidth;\n // This is necessary information for thumbnail streams:\n ref.trueEndTime = trueSegmentEnd;\n return ref;\n };\n\n for (let position = minPosition; position <= maxPosition; ++position) {\n const reference = createReference(position);\n references.push(reference);\n }\n\n /** @type {shaka.media.SegmentIndex} */\n const segmentIndex = new shaka.media.SegmentIndex(references);\n\n // If the availability timeline currently ends before the period, we will\n // need to add references over time.\n const willNeedToAddReferences =\n presentationTimeline.getSegmentAvailabilityEnd() < getPeriodEnd();\n\n // When we start a live stream with a period that ends within the\n // availability window we will not need to add more references, but we will\n // need to evict old references.\n const willNeedToEvictReferences = presentationTimeline.isLive();\n\n if (willNeedToAddReferences || willNeedToEvictReferences) {\n // The period continues to get longer over time, so check for new\n // references once every |segmentDuration| seconds.\n // We clamp to |minPosition| in case the initial range was reversed and no\n // references were generated. Otherwise, the update would start creating\n // negative positions for segments in periods which begin in the future.\n let nextPosition = Math.max(minPosition, maxPosition + 1);\n let updateTime = segmentDuration;\n // For low latency we need to evict very frequently.\n if (context.representation.availabilityTimeOffset) {\n updateTime = 0.1;\n }\n segmentIndex.updateEvery(updateTime, () => {\n // Evict any references outside the window.\n const availabilityStartTime =\n presentationTimeline.getSegmentAvailabilityStart();\n segmentIndex.evict(availabilityStartTime);\n\n // Compute any new references that need to be added.\n const [_, maxPosition] = computeAvailablePositionRange();\n const references = [];\n while (nextPosition <= maxPosition) {\n const reference = createReference(nextPosition);\n references.push(reference);\n nextPosition++;\n }\n\n // The timer must continue firing until the entire period is\n // unavailable, so that all references will be evicted.\n if (availabilityStartTime > getPeriodEnd() && !references.length) {\n // Signal stop.\n return null;\n }\n return references;\n });\n }\n\n return Promise.resolve(segmentIndex);\n }\n\n /**\n * Creates an init segment reference from a context object.\n *\n * @param {shaka.dash.DashParser.Context} context\n * @param {shaka.extern.aesKey|undefined} aesKey\n * @return {shaka.media.InitSegmentReference}\n * @private\n */\n static createInitSegment_(context, aesKey) {\n const MpdUtils = shaka.dash.MpdUtils;\n const ManifestParserUtils = shaka.util.ManifestParserUtils;\n const SegmentTemplate = shaka.dash.SegmentTemplate;\n\n let initialization = context.representation.initialization;\n if (!initialization) {\n initialization = MpdUtils.inheritAttribute(\n context, SegmentTemplate.fromInheritance_, 'initialization');\n }\n if (!initialization) {\n return null;\n }\n initialization = shaka.util.StringUtils.htmlUnescape(initialization);\n\n const repId = context.representation.id;\n const bandwidth = context.bandwidth || null;\n const getBaseUris = context.representation.getBaseUris;\n const urlParams = context.urlParams;\n const getUris = () => {\n goog.asserts.assert(initialization, 'Should have returned earler');\n const filledTemplate = MpdUtils.fillUriTemplate(\n initialization, repId, null, null, bandwidth, null);\n const resolvedUris = ManifestParserUtils.resolveUris(\n getBaseUris(), [filledTemplate], urlParams());\n return resolvedUris;\n };\n const qualityInfo = shaka.dash.SegmentBase.createQualityInfo(context);\n const ref = new shaka.media.InitSegmentReference(\n getUris,\n /* startByte= */ 0,\n /* endByte= */ null,\n qualityInfo,\n /* timescale= */ null,\n /* segmentData= */ null,\n aesKey);\n ref.codecs = context.representation.codecs;\n ref.mimeType = context.representation.mimeType;\n return ref;\n }\n};\n\n\n/**\n * A SegmentIndex that returns segments references on demand from\n * a segment timeline.\n *\n * @extends shaka.media.SegmentIndex\n * @implements {shaka.util.IReleasable}\n * @implements {Iterable.}\n *\n * @private\n *\n */\nshaka.dash.TimelineSegmentIndex = class extends shaka.media.SegmentIndex {\n /**\n *\n * @param {!shaka.dash.SegmentTemplate.SegmentTemplateInfo} templateInfo\n * @param {?string} representationId\n * @param {number} bandwidth\n * @param {function():Array.} getBaseUris\n * @param {function():string} urlParams\n * @param {number} periodStart\n * @param {number} periodEnd\n * @param {shaka.media.InitSegmentReference} initSegmentReference\n * @param {boolean} shouldFit\n * @param {shaka.extern.aesKey|undefined} aesKey\n * @param {number} segmentSequenceCadence\n */\n constructor(templateInfo, representationId, bandwidth, getBaseUris,\n urlParams, periodStart, periodEnd, initSegmentReference, shouldFit,\n aesKey, segmentSequenceCadence) {\n super([]);\n\n /** @private {?shaka.dash.SegmentTemplate.SegmentTemplateInfo} */\n this.templateInfo_ = templateInfo;\n /** @private {?string} */\n this.representationId_ = representationId;\n /** @private {number} */\n this.bandwidth_ = bandwidth;\n /** @private {function():Array.} */\n this.getBaseUris_ = getBaseUris;\n /** @private {function():string} */\n this.urlParams_ = urlParams;\n /** @private {number} */\n this.periodStart_ = periodStart;\n /** @private {number} */\n this.periodEnd_ = periodEnd;\n /** @private {shaka.media.InitSegmentReference} */\n this.initSegmentReference_ = initSegmentReference;\n /** @private {shaka.extern.aesKey|undefined} */\n this.aesKey_ = aesKey;\n /** @private {number} */\n this.segmentSequenceCadence_ = segmentSequenceCadence;\n\n\n if (shouldFit) {\n this.fitTimeline();\n }\n }\n\n /**\n * @override\n */\n getNumReferences() {\n if (this.templateInfo_) {\n return this.templateInfo_.timeline.length;\n } else {\n return 0;\n }\n }\n\n /**\n * @override\n */\n release() {\n super.release();\n this.templateInfo_ = null;\n // We cannot release other fields, as segment index can\n // be recreated using only template info.\n }\n\n\n /**\n * @override\n */\n evict(time) {\n if (!this.templateInfo_) {\n return;\n }\n shaka.log.debug(`${this.representationId_} Evicting at ${time}`);\n let numToEvict = 0;\n const timeline = this.templateInfo_.timeline;\n\n for (let i = 0; i < timeline.length; i += 1) {\n const range = timeline[i];\n const end = range.end + this.periodStart_;\n const start = range.start + this.periodStart_;\n\n if (end <= time) {\n shaka.log.debug(`Evicting ${start} - ${end}`);\n numToEvict += 1;\n } else {\n break;\n }\n }\n\n if (numToEvict > 0) {\n this.templateInfo_.timeline = timeline.slice(numToEvict);\n if (this.references.length >= numToEvict) {\n this.references = this.references.slice(numToEvict);\n }\n\n this.numEvicted_ += numToEvict;\n\n if (this.getNumReferences() === 0) {\n this.release();\n }\n }\n }\n\n /**\n * Merge new template info\n * @param {shaka.dash.SegmentTemplate.SegmentTemplateInfo} info\n * @param {number} periodStart\n * @param {number} periodEnd\n * @param {boolean} shouldFit\n * @param {shaka.media.InitSegmentReference} initSegmentReference\n */\n appendTemplateInfo(info, periodStart, periodEnd, shouldFit,\n initSegmentReference) {\n this.updateInitSegmentReference(initSegmentReference);\n if (!this.templateInfo_) {\n this.templateInfo_ = info;\n this.periodStart_ = periodStart;\n this.periodEnd_ = periodEnd;\n } else {\n const currentTimeline = this.templateInfo_.timeline;\n\n if (this.templateInfo_.mediaTemplate !== info.mediaTemplate) {\n this.templateInfo_.mediaTemplate = info.mediaTemplate;\n }\n\n // Append timeline\n let newEntries;\n if (currentTimeline.length) {\n const lastCurrentEntry = currentTimeline[currentTimeline.length - 1];\n newEntries = info.timeline.filter((entry) => {\n return entry.end > lastCurrentEntry.end;\n });\n } else {\n newEntries = info.timeline.slice();\n }\n\n if (newEntries.length > 0) {\n shaka.log.debug(`Appending ${newEntries.length} entries`);\n this.templateInfo_.timeline.push(...newEntries);\n }\n\n if (this.periodEnd_ !== periodEnd) {\n this.periodEnd_ = periodEnd;\n }\n }\n\n if (shouldFit) {\n this.fitTimeline();\n }\n }\n\n /**\n * Updates the init segment reference and propagates the update to all\n * references.\n * @param {shaka.media.InitSegmentReference} initSegmentReference\n */\n updateInitSegmentReference(initSegmentReference) {\n if (this.initSegmentReference_ === initSegmentReference) {\n return;\n }\n\n this.initSegmentReference_ = initSegmentReference;\n for (const reference of this.references) {\n if (reference) {\n reference.updateInitSegmentReference(initSegmentReference);\n }\n }\n }\n\n /**\n *\n * @param {number} time\n */\n isBeforeFirstEntry(time) {\n const hasTimeline = this.templateInfo_ &&\n this.templateInfo_.timeline && this.templateInfo_.timeline.length;\n\n if (hasTimeline) {\n const timeline = this.templateInfo_.timeline;\n return time < timeline[0].start + this.periodStart_;\n } else {\n return false;\n }\n }\n\n /**\n * Fit timeline entries to period boundaries\n */\n fitTimeline() {\n if (this.getIsImmutable()) {\n return;\n }\n const timeline = this.templateInfo_.timeline;\n while (timeline.length) {\n const lastTimePeriod = timeline[timeline.length - 1];\n if (lastTimePeriod.start >= this.periodEnd_) {\n timeline.pop();\n } else {\n break;\n }\n }\n\n this.evict(this.periodStart_);\n\n // Do NOT adjust last range to match period end! With high precision\n // timestamps several recalculations may give wrong results on less precise\n // platforms. To mitigate that, we're using cached |periodEnd_| value in\n // find/get() methods whenever possible.\n }\n\n /**\n * @override\n */\n find(time) {\n shaka.log.debug(`Find ${time}`);\n\n if (this.isBeforeFirstEntry(time)) {\n return this.numEvicted_;\n }\n\n if (!this.templateInfo_) {\n return null;\n }\n\n const timeline = this.templateInfo_.timeline;\n\n // Early exit if the time isn't within this period\n if (time < this.periodStart_ || time >= this.periodEnd_) {\n return null;\n }\n\n const lastIndex = timeline.length - 1;\n\n for (let i = 0; i < timeline.length; i++) {\n const range = timeline[i];\n const start = range.start + this.periodStart_;\n // A rounding error can cause /time/ to equal e.endTime or fall in between\n // the references by a fraction of a second. To account for this, we use\n // the start of the next segment as /end/, unless this is the last\n // reference, in which case we use the period end as the /end/\n let end;\n\n if (i < lastIndex) {\n end = timeline[i + 1].start + this.periodStart_;\n } else if (this.periodEnd_ === Infinity) {\n end = range.end + this.periodStart_;\n } else {\n end = this.periodEnd_;\n }\n\n if ((time >= start) && (time < end)) {\n return i + this.numEvicted_;\n }\n }\n\n return null;\n }\n\n /**\n * @override\n */\n get(position) {\n const correctedPosition = position - this.numEvicted_;\n if (correctedPosition < 0 ||\n correctedPosition >= this.getNumReferences() || !this.templateInfo_) {\n return null;\n }\n\n let ref = this.references[correctedPosition];\n\n if (!ref) {\n const range = this.templateInfo_.timeline[correctedPosition];\n const segmentReplacement = range.segmentPosition;\n const timeReplacement = this.templateInfo_\n .unscaledPresentationTimeOffset + range.unscaledStart;\n const timestampOffset = this.periodStart_ -\n this.templateInfo_.scaledPresentationTimeOffset;\n const trueSegmentEnd = this.periodStart_ + range.end;\n let segmentEnd = trueSegmentEnd;\n if (correctedPosition === this.getNumReferences() - 1 &&\n this.periodEnd_ !== Infinity) {\n segmentEnd = this.periodEnd_;\n }\n const codecs = this.templateInfo_.codecs;\n const mimeType = this.templateInfo_.mimeType;\n const bandwidth = this.templateInfo_.bandwidth;\n\n const partialSegmentRefs = [];\n\n const partialDuration = (range.end - range.start) / range.partialSegments;\n\n for (let i = 0; i < range.partialSegments; i++) {\n const start = range.start + partialDuration * i;\n const end = start + partialDuration;\n const subNumber = i + 1;\n let uris = null;\n const getPartialUris = () => {\n if (!this.templateInfo_) {\n return [];\n }\n if (uris == null) {\n uris = shaka.dash.TimelineSegmentIndex.createUris_(\n this.templateInfo_.mediaTemplate,\n this.representationId_,\n segmentReplacement,\n this.bandwidth_,\n timeReplacement,\n subNumber,\n this.getBaseUris_,\n this.urlParams_);\n }\n return uris;\n };\n const partial = new shaka.media.SegmentReference(\n this.periodStart_ + start,\n this.periodStart_ + end,\n getPartialUris,\n /* startByte= */ 0,\n /* endByte= */ null,\n this.initSegmentReference_,\n timestampOffset,\n this.periodStart_,\n this.periodEnd_,\n /* partialReferences= */ [],\n /* tilesLayout= */ '',\n /* tileDuration= */ null,\n /* syncTime= */ null,\n shaka.media.SegmentReference.Status.AVAILABLE,\n this.aesKey_);\n partial.codecs = codecs;\n partial.mimeType = mimeType;\n partial.bandwidth = bandwidth;\n if (this.segmentSequenceCadence_ == 0) {\n if (i > 0) {\n partial.markAsNonIndependent();\n }\n } else if ((i % this.segmentSequenceCadence_) != 0) {\n partial.markAsNonIndependent();\n }\n partialSegmentRefs.push(partial);\n }\n\n const createUrisCb = () => {\n if (range.partialSegments > 0 || !this.templateInfo_) {\n return [];\n }\n return shaka.dash.TimelineSegmentIndex\n .createUris_(\n this.templateInfo_.mediaTemplate,\n this.representationId_,\n segmentReplacement,\n this.bandwidth_,\n timeReplacement,\n /* subNumber= */ null,\n this.getBaseUris_,\n this.urlParams_,\n );\n };\n\n ref = new shaka.media.SegmentReference(\n this.periodStart_ + range.start,\n segmentEnd,\n createUrisCb,\n /* startByte= */ 0,\n /* endByte= */ null,\n this.initSegmentReference_,\n timestampOffset,\n this.periodStart_,\n this.periodEnd_,\n partialSegmentRefs,\n /* tilesLayout= */ '',\n /* tileDuration= */ null,\n /* syncTime= */ null,\n shaka.media.SegmentReference.Status.AVAILABLE,\n this.aesKey_,\n /* allPartialSegments= */ range.partialSegments > 0);\n ref.codecs = codecs;\n ref.mimeType = mimeType;\n ref.trueEndTime = trueSegmentEnd;\n ref.bandwidth = bandwidth;\n this.references[correctedPosition] = ref;\n }\n\n return ref;\n }\n\n /**\n * @override\n */\n forEachTopLevelReference(fn) {\n this.fitTimeline();\n for (let i = 0; i < this.getNumReferences(); i++) {\n const reference = this.get(i + this.numEvicted_);\n if (reference) {\n fn(reference);\n }\n }\n }\n\n /**\n * Fill in a specific template with values to get the segment uris\n *\n * @return {!Array.}\n * @private\n */\n static createUris_(mediaTemplate, repId, segmentReplacement,\n bandwidth, timeReplacement, subNumber, getBaseUris, urlParams) {\n const mediaUri = shaka.dash.MpdUtils.fillUriTemplate(\n mediaTemplate, repId,\n segmentReplacement, subNumber, bandwidth || null, timeReplacement);\n return shaka.util.ManifestParserUtils\n .resolveUris(getBaseUris(), [mediaUri], urlParams())\n .map((g) => {\n return g.toString();\n });\n }\n};\n\n/**\n * @typedef {{\n * timescale: number,\n * segmentDuration: ?number,\n * startNumber: number,\n * scaledPresentationTimeOffset: number,\n * unscaledPresentationTimeOffset: number,\n * timeline: Array.,\n * mediaTemplate: ?string,\n * indexTemplate: ?string,\n * mimeType: string,\n * codecs: string,\n * bandwidth: number,\n * numChunks: number\n * }}\n *\n * @description\n * Contains information about a SegmentTemplate.\n *\n * @property {number} timescale\n * The time-scale of the representation.\n * @property {?number} segmentDuration\n * The duration of the segments in seconds, if given.\n * @property {number} startNumber\n * The start number of the segments; 1 or greater.\n * @property {number} scaledPresentationTimeOffset\n * The presentation time offset of the representation, in seconds.\n * @property {number} unscaledPresentationTimeOffset\n * The presentation time offset of the representation, in timescale units.\n * @property {Array.} timeline\n * The timeline of the representation, if given. Times in seconds.\n * @property {?string} mediaTemplate\n * The media URI template, if given.\n * @property {?string} indexTemplate\n * The index URI template, if given.\n * @property {string} mimeType\n * The mimeType.\n * @property {string} codecs\n * The codecs.\n * @property {number} bandwidth\n * The bandwidth.\n * @property {number} numChunks\n * The number of chunks in each segment.\n */\nshaka.dash.SegmentTemplate.SegmentTemplateInfo;\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.util.ContentSteeringManager');\n\ngoog.require('goog.Uri');\ngoog.require('shaka.media.ManifestParser');\ngoog.require('shaka.net.NetworkingEngine');\ngoog.require('shaka.util.Error');\ngoog.require('shaka.util.IDestroyable');\ngoog.require('shaka.util.ManifestParserUtils');\ngoog.require('shaka.util.OperationManager');\ngoog.require('shaka.util.StringUtils');\ngoog.require('shaka.util.Timer');\n\n\n/**\n * Create a Content Steering manager.\n *\n * @implements {shaka.util.IDestroyable}\n */\nshaka.util.ContentSteeringManager = class {\n /**\n * @param {shaka.extern.ManifestParser.PlayerInterface} playerInterface\n */\n constructor(playerInterface) {\n /** @private {?shaka.extern.ManifestConfiguration} */\n this.config_ = null;\n\n /** @private {?shaka.extern.ManifestParser.PlayerInterface} */\n this.playerInterface_ = playerInterface;\n\n /** @private {!shaka.util.OperationManager} */\n this.operationManager_ = new shaka.util.OperationManager();\n\n /** @private {!Array.} */\n this.baseUris_ = [];\n\n /** @private {?string} */\n this.defaultPathwayId_ = null;\n\n /** @private {!Array.} */\n this.pathwayPriority_ = [];\n\n /** @private {?string} */\n this.lastPathwayUsed_ = null;\n\n /** @private {!Array.} */\n this.pathwayClones_ = [];\n\n /**\n * Default to 5 minutes. Value in seconds.\n *\n * @private {number}\n */\n this.lastTTL_ = 300;\n\n /** @private {!Map.<(string|number), !Map.>} */\n this.locations_ = new Map();\n\n /** @private {!Map.} */\n this.bannedLocations_ = new Map();\n\n /** @private {?shaka.util.Timer} */\n this.updateTimer_ = null;\n\n /** @private {string} */\n this.manifestType_ = shaka.media.ManifestParser.UNKNOWN;\n }\n\n /**\n * @param {shaka.extern.ManifestConfiguration} config\n */\n configure(config) {\n this.config_ = config;\n }\n\n\n /** @override */\n destroy() {\n this.config_ = null;\n this.playerInterface_ = null;\n this.baseUris_ = [];\n this.defaultPathwayId_ = null;\n this.pathwayPriority_ = [];\n this.pathwayClones_ = [];\n this.locations_.clear();\n\n if (this.updateTimer_ != null) {\n this.updateTimer_.stop();\n this.updateTimer_ = null;\n }\n\n return this.operationManager_.destroy();\n }\n\n /**\n * @param {string} manifestType\n */\n setManifestType(manifestType) {\n this.manifestType_ = manifestType;\n }\n\n /**\n * @param {!Array.} baseUris\n */\n setBaseUris(baseUris) {\n this.baseUris_ = baseUris;\n }\n\n /**\n * @param {?string} defaultPathwayId\n */\n setDefaultPathwayId(defaultPathwayId) {\n this.defaultPathwayId_ = defaultPathwayId;\n }\n\n /**\n * Request the Content Steering info.\n *\n * @param {string} uri\n * @return {!Promise}\n */\n async requestInfo(uri) {\n const uris = shaka.util.ManifestParserUtils.resolveUris(\n this.baseUris_, [this.addQueryParams_(uri)]);\n const type = shaka.net.NetworkingEngine.RequestType.CONTENT_STEERING;\n const request = shaka.net.NetworkingEngine.makeRequest(\n uris, this.config_.retryParameters);\n\n const op = this.playerInterface_.networkingEngine.request(type, request);\n this.operationManager_.manage(op);\n try {\n const response = await op.promise;\n const str = shaka.util.StringUtils.fromUTF8(response.data);\n const steeringManifest =\n /** @type {shaka.util.ContentSteeringManager.SteeringManifest} */\n (JSON.parse(str));\n if (steeringManifest.VERSION == 1) {\n this.processManifest_(steeringManifest, response.uri);\n }\n } catch (e) {\n if (e && e.code == shaka.util.Error.Code.OPERATION_ABORTED) {\n return;\n }\n if (this.updateTimer_ != null) {\n this.updateTimer_.stop();\n this.updateTimer_ = null;\n }\n this.updateTimer_ = new shaka.util.Timer(() => {\n this.requestInfo(uri);\n });\n this.updateTimer_.tickAfter(this.lastTTL_);\n }\n }\n\n /** @private */\n addQueryParams_(uri) {\n if (!this.pathwayPriority_.length) {\n return uri;\n }\n const finalUri = new goog.Uri(uri);\n const currentPathwayID = this.lastPathwayUsed_ || this.pathwayPriority_[0];\n const currentBandwidth =\n Math.round(this.playerInterface_.getBandwidthEstimate());\n const queryData = finalUri.getQueryData();\n if (this.manifestType_ == shaka.media.ManifestParser.DASH) {\n queryData.add('_DASH_pathway', currentPathwayID);\n queryData.add('_DASH_throughput', String(currentBandwidth));\n } else if (this.manifestType_ == shaka.media.ManifestParser.HLS) {\n queryData.add('_HLS_pathway', currentPathwayID);\n queryData.add('_HLS_throughput', String(currentBandwidth));\n }\n if (queryData.getCount()) {\n finalUri.setQueryData(queryData);\n }\n return finalUri.toString();\n }\n\n /**\n * @param {shaka.util.ContentSteeringManager.SteeringManifest} manifest\n * @param {string} finalManifestUri\n * @private\n */\n processManifest_(manifest, finalManifestUri) {\n if (this.updateTimer_ != null) {\n this.updateTimer_.stop();\n this.updateTimer_ = null;\n }\n const uri = manifest['RELOAD-URI'] || finalManifestUri;\n this.updateTimer_ = new shaka.util.Timer(() => {\n this.requestInfo(uri);\n });\n const newTTL = manifest['TTL'];\n if (newTTL) {\n this.lastTTL_ = newTTL;\n }\n this.updateTimer_.tickAfter(this.lastTTL_);\n this.pathwayPriority_ = manifest['PATHWAY-PRIORITY'] || [];\n this.pathwayClones_ = manifest['PATHWAY-CLONES'] || [];\n }\n\n /**\n * Clear the previous locations added.\n */\n clearPreviousLocations() {\n this.locations_.clear();\n }\n\n /**\n * @param {string|number} streamId\n * @param {string} pathwayId\n * @param {string} uri\n */\n addLocation(streamId, pathwayId, uri) {\n let streamLocations = this.locations_.get(streamId);\n if (!streamLocations) {\n streamLocations = new Map();\n }\n streamLocations.set(pathwayId, uri);\n this.locations_.set(streamId, streamLocations);\n }\n\n /**\n * @param {string} uri\n */\n banLocation(uri) {\n const bannedUntil = Date.now() + 60000;\n this.bannedLocations_.set(uri, bannedUntil);\n }\n\n /**\n * Get the base locations ordered according the priority.\n *\n * @param {string|number} streamId\n * @param {boolean=} ignoreBaseUrls\n * @return {!Array.}\n */\n getLocations(streamId, ignoreBaseUrls = false) {\n const streamLocations = this.locations_.get(streamId) || new Map();\n /** @type {!Array.} */\n let locationsPathwayIdMap = [];\n for (const pathwayId of this.pathwayPriority_) {\n const location = streamLocations.get(pathwayId);\n if (location) {\n locationsPathwayIdMap.push({pathwayId, location});\n } else {\n const clone = this.pathwayClones_.find((c) => c.ID == pathwayId);\n if (clone) {\n const cloneLocation = streamLocations.get(clone['BASE-ID']);\n if (cloneLocation) {\n if (clone['URI-REPLACEMENT'].HOST) {\n const uri = new goog.Uri(cloneLocation);\n uri.setDomain(clone['URI-REPLACEMENT'].HOST);\n locationsPathwayIdMap.push({\n pathwayId: pathwayId,\n location: uri.toString(),\n });\n } else {\n locationsPathwayIdMap.push({\n pathwayId: pathwayId,\n location: cloneLocation,\n });\n }\n }\n }\n }\n }\n\n const now = Date.now();\n for (const uri of this.bannedLocations_.keys()) {\n const bannedUntil = this.bannedLocations_.get(uri);\n if (now > bannedUntil) {\n this.bannedLocations_.delete(uri);\n }\n }\n locationsPathwayIdMap = locationsPathwayIdMap.filter((l) => {\n for (const uri of this.bannedLocations_.keys()) {\n if (uri.includes(new goog.Uri(l.location).getDomain())) {\n return false;\n }\n }\n return true;\n });\n\n if (locationsPathwayIdMap.length) {\n this.lastPathwayUsed_ = locationsPathwayIdMap[0].pathwayId;\n }\n\n const locations = locationsPathwayIdMap.map((l) => l.location);\n\n if (!locations.length && this.defaultPathwayId_) {\n for (const pathwayId of this.defaultPathwayId_.split(',')) {\n const location = streamLocations.get(pathwayId);\n if (location) {\n this.lastPathwayUsed_ = this.defaultPathwayId_;\n locations.push(location);\n }\n }\n }\n if (!locations.length) {\n for (const location of streamLocations.values()) {\n locations.push(location);\n }\n }\n if (ignoreBaseUrls) {\n return locations;\n }\n return shaka.util.ManifestParserUtils.resolveUris(\n this.baseUris_, locations);\n }\n};\n\n\n/**\n * @typedef {{\n * VERSION: number,\n * TTL: number,\n * RELOAD-URI: string,\n * PATHWAY-PRIORITY: !Array.,\n * PATHWAY-CLONES: !Array.\n * }}\n *\n * @description\n * Contains information about the Steering Manifest\n *\n * @property {string} VERSION\n * @property {number} TTL\n * @property {string RELOAD-URI\n * @property {!Array.} PATHWAY-PRIORITY\n * @property {!Array.<\n * shaka.util.ContentSteeringManager.PathawayClone>} PATHWAY-CLONES\n */\nshaka.util.ContentSteeringManager.SteeringManifest;\n\n\n/**\n * @typedef {{\n * BASE-ID: string,\n * ID: string,\n * URI-REPLACEMENT: !Array.\n * }}\n *\n * @property {string} BASE-ID\n * @property {string} ID\n * @property {!Array.<\n * shaka.util.ContentSteeringManager.UriReplacement>} URI-REPLACEMENT\n */\nshaka.util.ContentSteeringManager.PathawayClone;\n\n\n/**\n * @typedef {{\n * HOST: string\n * }}\n *\n * @property {string} HOST\n */\nshaka.util.ContentSteeringManager.UriReplacement;\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.util.PeriodCombiner');\n\ngoog.require('goog.asserts');\ngoog.require('shaka.log');\ngoog.require('shaka.media.MetaSegmentIndex');\ngoog.require('shaka.media.SegmentIndex');\ngoog.require('shaka.util.DrmUtils');\ngoog.require('shaka.util.Error');\ngoog.require('shaka.util.IReleasable');\ngoog.require('shaka.util.LanguageUtils');\ngoog.require('shaka.util.ManifestParserUtils');\ngoog.require('shaka.util.MimeUtils');\n\n/**\n * A utility to combine streams across periods.\n *\n * @implements {shaka.util.IReleasable}\n * @final\n * @export\n */\nshaka.util.PeriodCombiner = class {\n /** */\n constructor() {\n /** @private {!Array.} */\n this.variants_ = [];\n\n /** @private {!Array.} */\n this.audioStreams_ = [];\n\n /** @private {!Array.} */\n this.videoStreams_ = [];\n\n /** @private {!Array.} */\n this.textStreams_ = [];\n\n /** @private {!Array.} */\n this.imageStreams_ = [];\n\n /** @private {boolean} */\n this.multiTypeVariantsAllowed_ = false;\n\n /** @private {boolean} */\n this.useStreamOnce_ = false;\n\n /**\n * The IDs of the periods we have already used to generate streams.\n * This helps us identify the periods which have been added when a live\n * stream is updated.\n *\n * @private {!Set.}\n */\n this.usedPeriodIds_ = new Set();\n }\n\n /** @override */\n release() {\n const allStreams =\n this.audioStreams_.concat(this.videoStreams_, this.textStreams_,\n this.imageStreams_);\n\n for (const stream of allStreams) {\n if (stream.segmentIndex) {\n stream.segmentIndex.release();\n }\n }\n\n this.audioStreams_ = [];\n this.videoStreams_ = [];\n this.textStreams_ = [];\n this.imageStreams_ = [];\n this.variants_ = [];\n this.multiTypeVariantsAllowed_ = false;\n this.useStreamOnce_ = false;\n this.usedPeriodIds_.clear();\n }\n\n /**\n * @return {!Array.}\n *\n * @export\n */\n getVariants() {\n return this.variants_;\n }\n\n /**\n * @return {!Array.}\n *\n * @export\n */\n getTextStreams() {\n // Return a copy of the array because makeTextStreamsForClosedCaptions\n // may make changes to the contents of the array. Those changes should not\n // propagate back to the PeriodCombiner.\n return this.textStreams_.slice();\n }\n\n /**\n * @return {!Array.}\n *\n * @export\n */\n getImageStreams() {\n return this.imageStreams_;\n }\n\n /**\n * Deletes a stream from matchedStreams because it is no longer needed\n *\n * @param {?shaka.extern.Stream} stream\n * @param {string} periodId\n *\n * @export\n */\n deleteStream(stream, periodId) {\n if (!stream) {\n return;\n }\n const ContentType = shaka.util.ManifestParserUtils.ContentType;\n if (stream.type == ContentType.AUDIO) {\n for (const audioStream of this.audioStreams_) {\n audioStream.matchedStreams = audioStream.matchedStreams.filter((s) => {\n return s !== stream;\n });\n }\n } else if (stream.type == ContentType.VIDEO) {\n for (const videoStream of this.videoStreams_) {\n videoStream.matchedStreams = videoStream.matchedStreams.filter((s) => {\n return s !== stream;\n });\n if (videoStream.trickModeVideo) {\n videoStream.trickModeVideo.matchedStreams =\n videoStream.trickModeVideo.matchedStreams.filter((s) => {\n return s !== stream;\n });\n }\n }\n } else if (stream.type == ContentType.TEXT) {\n for (const textStream of this.textStreams_) {\n textStream.matchedStreams = textStream.matchedStreams.filter((s) => {\n return s !== stream;\n });\n }\n } else if (stream.type == ContentType.IMAGE) {\n for (const imageStream of this.imageStreams_) {\n imageStream.matchedStreams = imageStream.matchedStreams.filter((s) => {\n return s !== stream;\n });\n }\n }\n if (stream.segmentIndex) {\n stream.closeSegmentIndex();\n }\n this.usedPeriodIds_.delete(periodId);\n }\n\n /**\n * Returns an object that contains arrays of streams by type\n * @param {!Array} periods\n * @param {boolean} addDummy\n * @return {{\n * audioStreamsPerPeriod: !Array>,\n * videoStreamsPerPeriod: !Array>,\n * textStreamsPerPeriod: !Array>,\n * imageStreamsPerPeriod: !Array>\n * }}\n * @private\n */\n getStreamsPerPeriod_(periods, addDummy) {\n const ContentType = shaka.util.ManifestParserUtils.ContentType;\n const PeriodCombiner = shaka.util.PeriodCombiner;\n\n const audioStreamsPerPeriod = [];\n const videoStreamsPerPeriod = [];\n const textStreamsPerPeriod = [];\n const imageStreamsPerPeriod = [];\n\n for (const period of periods) {\n const audioMap = new Map(period.audioStreams.map((s) =>\n [PeriodCombiner.generateAudioKey_(s), s]));\n const videoMap = new Map(period.videoStreams.map((s) =>\n [PeriodCombiner.generateVideoKey_(s), s]));\n const textMap = new Map(period.textStreams.map((s) =>\n [PeriodCombiner.generateTextKey_(s), s]));\n const imageMap = new Map(period.imageStreams.map((s) =>\n [PeriodCombiner.generateImageKey_(s), s]));\n\n // It's okay to have a period with no text or images, but our algorithm\n // fails on any period without matching streams. So we add dummy streams\n // to each period. Since we combine text streams by language and image\n // streams by resolution, we might need a dummy even in periods with these\n // streams already.\n if (addDummy) {\n const dummyText = PeriodCombiner.dummyStream_(ContentType.TEXT);\n textMap.set(PeriodCombiner.generateTextKey_(dummyText), dummyText);\n const dummyImage = PeriodCombiner.dummyStream_(ContentType.IMAGE);\n imageMap.set(PeriodCombiner.generateImageKey_(dummyImage), dummyImage);\n }\n\n audioStreamsPerPeriod.push(audioMap);\n videoStreamsPerPeriod.push(videoMap);\n textStreamsPerPeriod.push(textMap);\n imageStreamsPerPeriod.push(imageMap);\n }\n return {\n audioStreamsPerPeriod,\n videoStreamsPerPeriod,\n textStreamsPerPeriod,\n imageStreamsPerPeriod,\n };\n }\n\n /**\n * @param {!Array.} periods\n * @param {boolean} isDynamic\n * @param {boolean=} isPatchUpdate\n * @return {!Promise}\n *\n * @export\n */\n async combinePeriods(periods, isDynamic, isPatchUpdate = false) {\n const ContentType = shaka.util.ManifestParserUtils.ContentType;\n\n // Optimization: for single-period VOD, do nothing. This makes sure\n // single-period DASH content will be 100% accurately represented in the\n // output.\n if (!isDynamic && periods.length == 1) {\n // We need to filter out duplicates, so call getStreamsPerPeriod()\n // so it will do that by usage of Map.\n const {\n audioStreamsPerPeriod,\n videoStreamsPerPeriod,\n textStreamsPerPeriod,\n imageStreamsPerPeriod,\n } = this.getStreamsPerPeriod_(periods, /* addDummy= */ false);\n this.audioStreams_ = Array.from(audioStreamsPerPeriod[0].values());\n this.videoStreams_ = Array.from(videoStreamsPerPeriod[0].values());\n this.textStreams_ = Array.from(textStreamsPerPeriod[0].values());\n this.imageStreams_ = Array.from(imageStreamsPerPeriod[0].values());\n } else {\n // How many periods we've seen before which are not included in this call.\n const periodsMissing = isPatchUpdate ? this.usedPeriodIds_.size : 0;\n // Find the first period we haven't seen before. Tag all the periods we\n // see now as \"used\".\n let firstNewPeriodIndex = -1;\n for (let i = 0; i < periods.length; i++) {\n const period = periods[i];\n if (this.usedPeriodIds_.has(period.id)) {\n // This isn't new.\n } else {\n // This one _is_ new.\n this.usedPeriodIds_.add(period.id);\n\n if (firstNewPeriodIndex == -1) {\n // And it's the _first_ new one.\n firstNewPeriodIndex = i;\n }\n }\n }\n\n if (firstNewPeriodIndex == -1) {\n // Nothing new? Nothing to do.\n return;\n }\n\n const {\n audioStreamsPerPeriod,\n videoStreamsPerPeriod,\n textStreamsPerPeriod,\n imageStreamsPerPeriod,\n } = this.getStreamsPerPeriod_(periods, /* addDummy= */ true);\n\n await Promise.all([\n this.combine_(\n this.audioStreams_,\n audioStreamsPerPeriod,\n firstNewPeriodIndex,\n shaka.util.PeriodCombiner.cloneStream_,\n shaka.util.PeriodCombiner.concatenateStreams_,\n periodsMissing),\n this.combine_(\n this.videoStreams_,\n videoStreamsPerPeriod,\n firstNewPeriodIndex,\n shaka.util.PeriodCombiner.cloneStream_,\n shaka.util.PeriodCombiner.concatenateStreams_,\n periodsMissing),\n this.combine_(\n this.textStreams_,\n textStreamsPerPeriod,\n firstNewPeriodIndex,\n shaka.util.PeriodCombiner.cloneStream_,\n shaka.util.PeriodCombiner.concatenateStreams_,\n periodsMissing),\n this.combine_(\n this.imageStreams_,\n imageStreamsPerPeriod,\n firstNewPeriodIndex,\n shaka.util.PeriodCombiner.cloneStream_,\n shaka.util.PeriodCombiner.concatenateStreams_,\n periodsMissing),\n ]);\n }\n\n // Create variants for all audio/video combinations.\n let nextVariantId = 0;\n const variants = [];\n if (!this.videoStreams_.length || !this.audioStreams_.length) {\n // For audio-only or video-only content, just give each stream its own\n // variant.\n const streams = this.videoStreams_.length ? this.videoStreams_ :\n this.audioStreams_;\n for (const stream of streams) {\n const id = nextVariantId++;\n variants.push({\n id,\n language: stream.language,\n disabledUntilTime: 0,\n primary: stream.primary,\n audio: stream.type == ContentType.AUDIO ? stream : null,\n video: stream.type == ContentType.VIDEO ? stream : null,\n bandwidth: stream.bandwidth || 0,\n drmInfos: stream.drmInfos,\n allowedByApplication: true,\n allowedByKeySystem: true,\n decodingInfos: [],\n });\n }\n } else {\n for (const audio of this.audioStreams_) {\n for (const video of this.videoStreams_) {\n const commonDrmInfos = shaka.util.DrmUtils.getCommonDrmInfos(\n audio.drmInfos, video.drmInfos);\n\n if (audio.drmInfos.length && video.drmInfos.length &&\n !commonDrmInfos.length) {\n shaka.log.warning(\n 'Incompatible DRM in audio & video, skipping variant creation.',\n audio, video);\n continue;\n }\n\n const id = nextVariantId++;\n variants.push({\n id,\n language: audio.language,\n disabledUntilTime: 0,\n primary: audio.primary,\n audio,\n video,\n bandwidth: (audio.bandwidth || 0) + (video.bandwidth || 0),\n drmInfos: commonDrmInfos,\n allowedByApplication: true,\n allowedByKeySystem: true,\n decodingInfos: [],\n });\n }\n }\n }\n\n this.variants_ = variants;\n }\n\n\n /**\n * Stitch together DB streams across periods, taking a mix of stream types.\n * The offline database does not separate these by type.\n *\n * Unlike the DASH case, this does not need to maintain any state for manifest\n * updates.\n *\n * @param {!Array.>} streamDbsPerPeriod\n * @return {!Promise.>}\n */\n static async combineDbStreams(streamDbsPerPeriod) {\n const ContentType = shaka.util.ManifestParserUtils.ContentType;\n const PeriodCombiner = shaka.util.PeriodCombiner;\n\n // Optimization: for single-period content, do nothing. This makes sure\n // single-period DASH or any HLS content stored offline will be 100%\n // accurately represented in the output.\n if (streamDbsPerPeriod.length == 1) {\n return streamDbsPerPeriod[0];\n }\n\n const audioStreamDbsPerPeriod = streamDbsPerPeriod.map(\n (streams) => new Map(streams\n .filter((s) => s.type === ContentType.AUDIO)\n .map((s) => [PeriodCombiner.generateAudioKey_(s), s])));\n const videoStreamDbsPerPeriod = streamDbsPerPeriod.map(\n (streams) => new Map(streams\n .filter((s) => s.type === ContentType.VIDEO)\n .map((s) => [PeriodCombiner.generateVideoKey_(s), s])));\n const textStreamDbsPerPeriod = streamDbsPerPeriod.map(\n (streams) => new Map(streams\n .filter((s) => s.type === ContentType.TEXT)\n .map((s) => [PeriodCombiner.generateTextKey_(s), s])));\n const imageStreamDbsPerPeriod = streamDbsPerPeriod.map(\n (streams) => new Map(streams\n .filter((s) => s.type === ContentType.IMAGE)\n .map((s) => [PeriodCombiner.generateImageKey_(s), s])));\n\n // It's okay to have a period with no text or images, but our algorithm\n // fails on any period without matching streams. So we add dummy streams to\n // each period. Since we combine text streams by language and image streams\n // by resolution, we might need a dummy even in periods with these streams\n // already.\n for (const textStreams of textStreamDbsPerPeriod) {\n const dummy = PeriodCombiner.dummyStreamDB_(ContentType.TEXT);\n textStreams.set(PeriodCombiner.generateTextKey_(dummy), dummy);\n }\n for (const imageStreams of imageStreamDbsPerPeriod) {\n const dummy = PeriodCombiner.dummyStreamDB_(ContentType.IMAGE);\n imageStreams.set(PeriodCombiner.generateImageKey_(dummy), dummy);\n }\n\n const periodCombiner = new shaka.util.PeriodCombiner();\n\n const combinedAudioStreamDbs = await periodCombiner.combine_(\n /* outputStreams= */ [],\n audioStreamDbsPerPeriod,\n /* firstNewPeriodIndex= */ 0,\n shaka.util.PeriodCombiner.cloneStreamDB_,\n shaka.util.PeriodCombiner.concatenateStreamDBs_,\n /* periodsMissing= */ 0);\n\n const combinedVideoStreamDbs = await periodCombiner.combine_(\n /* outputStreams= */ [],\n videoStreamDbsPerPeriod,\n /* firstNewPeriodIndex= */ 0,\n shaka.util.PeriodCombiner.cloneStreamDB_,\n shaka.util.PeriodCombiner.concatenateStreamDBs_,\n /* periodsMissing= */ 0);\n\n const combinedTextStreamDbs = await periodCombiner.combine_(\n /* outputStreams= */ [],\n textStreamDbsPerPeriod,\n /* firstNewPeriodIndex= */ 0,\n shaka.util.PeriodCombiner.cloneStreamDB_,\n shaka.util.PeriodCombiner.concatenateStreamDBs_,\n /* periodsMissing= */ 0);\n\n const combinedImageStreamDbs = await periodCombiner.combine_(\n /* outputStreams= */ [],\n imageStreamDbsPerPeriod,\n /* firstNewPeriodIndex= */ 0,\n shaka.util.PeriodCombiner.cloneStreamDB_,\n shaka.util.PeriodCombiner.concatenateStreamDBs_,\n /* periodsMissing= */ 0);\n\n // Recreate variantIds from scratch in the output.\n // HLS content is always single-period, so the early return at the top of\n // this method would catch all HLS content. DASH content stored with v3.0\n // will already be flattened before storage. Therefore the only content\n // that reaches this point is multi-period DASH content stored before v3.0.\n // Such content always had variants generated from all combinations of audio\n // and video, so we can simply do that now without loss of correctness.\n let nextVariantId = 0;\n if (!combinedVideoStreamDbs.length || !combinedAudioStreamDbs.length) {\n // For audio-only or video-only content, just give each stream its own\n // variant ID.\n const combinedStreamDbs =\n combinedVideoStreamDbs.concat(combinedAudioStreamDbs);\n for (const stream of combinedStreamDbs) {\n stream.variantIds = [nextVariantId++];\n }\n } else {\n for (const audio of combinedAudioStreamDbs) {\n for (const video of combinedVideoStreamDbs) {\n const id = nextVariantId++;\n video.variantIds.push(id);\n audio.variantIds.push(id);\n }\n }\n }\n\n return combinedVideoStreamDbs\n .concat(combinedAudioStreamDbs)\n .concat(combinedTextStreamDbs)\n .concat(combinedImageStreamDbs);\n }\n\n /**\n * Combine input Streams per period into flat output Streams.\n * Templatized to handle both DASH Streams and offline StreamDBs.\n *\n * @param {!Array.} outputStreams A list of existing output streams, to\n * facilitate updates for live DASH content. Will be modified and returned.\n * @param {!Array>} streamsPerPeriod A list of maps of Streams\n * from each period.\n * @param {number} firstNewPeriodIndex An index into streamsPerPeriod which\n * represents the first new period that hasn't been processed yet.\n * @param {function(T):T} clone Make a clone of an input stream.\n * @param {function(T, T)} concat Concatenate the second stream onto the end\n * of the first.\n * @param {number} periodsMissing The number of periods missing\n *\n * @return {!Promise.>} The same array passed to outputStreams,\n * modified to include any newly-created streams.\n *\n * @template T\n * Accepts either a StreamDB or Stream type.\n *\n * @private\n */\n async combine_(\n outputStreams, streamsPerPeriod, firstNewPeriodIndex, clone, concat,\n periodsMissing) {\n const unusedStreamsPerPeriod = [];\n\n for (let i = 0; i < streamsPerPeriod.length; i++) {\n if (i >= firstNewPeriodIndex) {\n // This periods streams are all new.\n unusedStreamsPerPeriod.push(new Set(streamsPerPeriod[i].values()));\n } else {\n // This period's streams have all been used already.\n unusedStreamsPerPeriod.push(new Set());\n }\n }\n\n // First, extend all existing output Streams into the new periods.\n for (const outputStream of outputStreams) {\n // eslint-disable-next-line no-await-in-loop\n const ok = await this.extendExistingOutputStream_(\n outputStream, streamsPerPeriod, firstNewPeriodIndex, concat,\n unusedStreamsPerPeriod, periodsMissing);\n if (!ok) {\n // This output Stream was not properly extended to include streams from\n // the new period. This is likely a bug in our algorithm, so throw an\n // error.\n throw new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.MANIFEST,\n shaka.util.Error.Code.PERIOD_FLATTENING_FAILED);\n }\n\n // This output stream is now complete with content from all known\n // periods.\n } // for (const outputStream of outputStreams)\n\n for (const unusedStreams of unusedStreamsPerPeriod) {\n for (const stream of unusedStreams) {\n // Create a new output stream which includes this input stream.\n const outputStream = this.createNewOutputStream_(\n stream, streamsPerPeriod, clone, concat,\n unusedStreamsPerPeriod);\n if (outputStream) {\n outputStreams.push(outputStream);\n } else {\n // This is not a stream we can build output from, but it may become\n // part of another output based on another period's stream.\n }\n } // for (const stream of unusedStreams)\n } // for (const unusedStreams of unusedStreamsPerPeriod)\n\n for (const unusedStreams of unusedStreamsPerPeriod) {\n for (const stream of unusedStreams) {\n if (shaka.util.PeriodCombiner.isDummy_(stream)) {\n // This is one of our dummy streams, so ignore it. We may not use\n // them all, and that's fine.\n continue;\n }\n // If this stream has a different codec/MIME than any other stream,\n // then we can't play it.\n const hasCodec = outputStreams.some((s) => {\n return this.areAVStreamsCompatible_(stream, s);\n });\n if (!hasCodec) {\n continue;\n }\n\n // Any other unused stream is likely a bug in our algorithm, so throw\n // an error.\n shaka.log.error('Unused stream in period-flattening!',\n stream, outputStreams);\n throw new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.MANIFEST,\n shaka.util.Error.Code.PERIOD_FLATTENING_FAILED);\n }\n }\n\n return outputStreams;\n }\n\n /**\n * @param {T} outputStream An existing output stream which needs to be\n * extended into new periods.\n * @param {!Array>} streamsPerPeriod A list of maps of Streams\n * from each period.\n * @param {number} firstNewPeriodIndex An index into streamsPerPeriod which\n * represents the first new period that hasn't been processed yet.\n * @param {function(T, T)} concat Concatenate the second stream onto the end\n * of the first.\n * @param {!Array.>} unusedStreamsPerPeriod An array of sets of\n * unused streams from each period.\n * @param {number} periodsMissing How many periods are missing in this update.\n *\n * @return {!Promise.}\n *\n * @template T\n * Should only be called with a Stream type in practice, but has call sites\n * from other templated functions that also accept a StreamDB.\n *\n * @private\n */\n async extendExistingOutputStream_(\n outputStream, streamsPerPeriod, firstNewPeriodIndex, concat,\n unusedStreamsPerPeriod, periodsMissing) {\n this.findMatchesInAllPeriods_(streamsPerPeriod,\n outputStream, periodsMissing > 0);\n\n // This only exists where T == Stream, and this should only ever be called\n // on Stream types. StreamDB should not have pre-existing output streams.\n goog.asserts.assert(outputStream.createSegmentIndex,\n 'outputStream should be a Stream type!');\n\n if (!outputStream.matchedStreams) {\n // We were unable to extend this output stream.\n shaka.log.error('No matches extending output stream!',\n outputStream, streamsPerPeriod);\n return false;\n }\n // We need to create all the per-period segment indexes and append them to\n // the output's MetaSegmentIndex.\n if (outputStream.segmentIndex) {\n await shaka.util.PeriodCombiner.extendOutputSegmentIndex_(outputStream,\n firstNewPeriodIndex + periodsMissing);\n }\n\n shaka.util.PeriodCombiner.extendOutputStream_(outputStream,\n firstNewPeriodIndex, concat, unusedStreamsPerPeriod, periodsMissing);\n return true;\n }\n\n /**\n * Creates the segment indexes for an array of input streams, and append them\n * to the output stream's segment index.\n *\n * @param {shaka.extern.Stream} outputStream\n * @param {number} firstNewPeriodIndex An index into streamsPerPeriod which\n * represents the first new period that hasn't been processed yet.\n * @private\n */\n static async extendOutputSegmentIndex_(outputStream, firstNewPeriodIndex) {\n const operations = [];\n const streams = outputStream.matchedStreams;\n goog.asserts.assert(streams, 'matched streams should be valid');\n\n for (let i = firstNewPeriodIndex; i < streams.length; i++) {\n const stream = streams[i];\n operations.push(stream.createSegmentIndex());\n if (stream.trickModeVideo && !stream.trickModeVideo.segmentIndex) {\n operations.push(stream.trickModeVideo.createSegmentIndex());\n }\n }\n await Promise.all(operations);\n\n // Concatenate the new matches onto the stream, starting at the first new\n // period.\n // Satisfy the compiler about the type.\n // Also checks if the segmentIndex is still valid after the async\n // operations, to make sure we stop if the active stream has changed.\n if (outputStream.segmentIndex instanceof shaka.media.MetaSegmentIndex) {\n for (let i = firstNewPeriodIndex; i < streams.length; i++) {\n const match = streams[i];\n goog.asserts.assert(match.segmentIndex,\n 'stream should have a segmentIndex.');\n if (match.segmentIndex) {\n outputStream.segmentIndex.appendSegmentIndex(match.segmentIndex);\n }\n }\n }\n }\n\n /**\n * Create a new output Stream based on a particular input Stream. Locates\n * matching Streams in all other periods and combines them into an output\n * Stream.\n * Templatized to handle both DASH Streams and offline StreamDBs.\n *\n * @param {T} stream An input stream on which to base the output stream.\n * @param {!Array>} streamsPerPeriod A list of maps of Streams\n * from each period.\n * @param {function(T):T} clone Make a clone of an input stream.\n * @param {function(T, T)} concat Concatenate the second stream onto the end\n * of the first.\n * @param {!Array.>} unusedStreamsPerPeriod An array of sets of\n * unused streams from each period.\n *\n * @return {?T} A newly-created output Stream, or null if matches\n * could not be found.`\n *\n * @template T\n * Accepts either a StreamDB or Stream type.\n *\n * @private\n */\n createNewOutputStream_(\n stream, streamsPerPeriod, clone, concat, unusedStreamsPerPeriod) {\n // Check do we want to create output stream from dummy stream\n // and if so, return quickly.\n if (shaka.util.PeriodCombiner.isDummy_(stream)) {\n return null;\n }\n // Start by cloning the stream without segments, key IDs, etc.\n const outputStream = clone(stream);\n\n // Find best-matching streams in all periods.\n this.findMatchesInAllPeriods_(streamsPerPeriod, outputStream);\n\n // This only exists where T == Stream.\n if (outputStream.createSegmentIndex) {\n // Override the createSegmentIndex function of the outputStream.\n outputStream.createSegmentIndex = async () => {\n if (!outputStream.segmentIndex) {\n outputStream.segmentIndex = new shaka.media.MetaSegmentIndex();\n await shaka.util.PeriodCombiner.extendOutputSegmentIndex_(\n outputStream, /* firstNewPeriodIndex= */ 0);\n }\n };\n // For T == Stream, we need to create all the per-period segment indexes\n // in advance. concat() will add them to the output's MetaSegmentIndex.\n }\n\n if (!outputStream.matchedStreams || !outputStream.matchedStreams.length) {\n // This is not a stream we can build output from, but it may become part\n // of another output based on another period's stream.\n return null;\n }\n shaka.util.PeriodCombiner.extendOutputStream_(outputStream,\n /* firstNewPeriodIndex= */ 0, concat, unusedStreamsPerPeriod,\n /* periodsMissing= */ 0);\n\n return outputStream;\n }\n\n /**\n * @param {T} outputStream An existing output stream which needs to be\n * extended into new periods.\n * @param {number} firstNewPeriodIndex An index into streamsPerPeriod which\n * represents the first new period that hasn't been processed yet.\n * @param {function(T, T)} concat Concatenate the second stream onto the end\n * of the first.\n * @param {!Array.>} unusedStreamsPerPeriod An array of sets of\n * unused streams from each period.\n * @param {number} periodsMissing How many periods are missing in this update\n *\n * @template T\n * Accepts either a StreamDB or Stream type.\n *\n * @private\n */\n static extendOutputStream_(\n outputStream, firstNewPeriodIndex, concat, unusedStreamsPerPeriod,\n periodsMissing) {\n const ContentType = shaka.util.ManifestParserUtils.ContentType;\n const LanguageUtils = shaka.util.LanguageUtils;\n const matches = outputStream.matchedStreams;\n\n // Assure the compiler that matches didn't become null during the async\n // operation before.\n goog.asserts.assert(outputStream.matchedStreams,\n 'matchedStreams should be non-null');\n\n // Concatenate the new matches onto the stream, starting at the first new\n // period.\n const start = firstNewPeriodIndex + periodsMissing;\n for (let i = start; i < matches.length; i++) {\n const match = matches[i];\n concat(outputStream, match);\n\n // We only consider an audio stream \"used\" if its language is related to\n // the output language. There are scenarios where we want to generate\n // separate tracks for each language, even when we are forced to connect\n // unrelated languages across periods.\n let used = true;\n if (outputStream.type == ContentType.AUDIO) {\n const relatedness = LanguageUtils.relatedness(\n outputStream.language, match.language);\n if (relatedness == 0) {\n used = false;\n }\n }\n\n if (used) {\n unusedStreamsPerPeriod[i - periodsMissing].delete(match);\n // Add the full mimetypes to the stream.\n if (match.fullMimeTypes) {\n for (const fullMimeType of match.fullMimeTypes.values()) {\n outputStream.fullMimeTypes.add(fullMimeType);\n }\n }\n }\n }\n }\n\n /**\n * Clone a Stream to make an output Stream for combining others across\n * periods.\n *\n * @param {shaka.extern.Stream} stream\n * @return {shaka.extern.Stream}\n * @private\n */\n static cloneStream_(stream) {\n const clone = /** @type {shaka.extern.Stream} */(Object.assign({}, stream));\n\n // These are wiped out now and rebuilt later from the various per-period\n // streams that match this output.\n clone.originalId = null;\n clone.createSegmentIndex = () => Promise.resolve();\n clone.closeSegmentIndex = () => {\n if (clone.segmentIndex) {\n clone.segmentIndex.release();\n clone.segmentIndex = null;\n }\n // Close the segment index of the matched streams.\n if (clone.matchedStreams) {\n for (const match of clone.matchedStreams) {\n if (match.segmentIndex) {\n match.segmentIndex.release();\n match.segmentIndex = null;\n }\n }\n }\n };\n\n // Clone roles array so this output stream can own it.\n clone.roles = clone.roles.slice();\n clone.segmentIndex = null;\n clone.emsgSchemeIdUris = [];\n clone.keyIds = new Set();\n clone.closedCaptions = stream.closedCaptions ?\n new Map(stream.closedCaptions) : null;\n clone.trickModeVideo = null;\n\n return clone;\n }\n\n /**\n * Clone a StreamDB to make an output stream for combining others across\n * periods.\n *\n * @param {shaka.extern.StreamDB} streamDb\n * @return {shaka.extern.StreamDB}\n * @private\n */\n static cloneStreamDB_(streamDb) {\n const clone = /** @type {shaka.extern.StreamDB} */(Object.assign(\n {}, streamDb));\n\n // Clone roles array so this output stream can own it.\n clone.roles = clone.roles.slice();\n // These are wiped out now and rebuilt later from the various per-period\n // streams that match this output.\n clone.keyIds = new Set();\n clone.segments = [];\n clone.variantIds = [];\n clone.closedCaptions = streamDb.closedCaptions ?\n new Map(streamDb.closedCaptions) : null;\n\n return clone;\n }\n\n /**\n * Combine the various fields of the input Stream into the output.\n *\n * @param {shaka.extern.Stream} output\n * @param {shaka.extern.Stream} input\n * @private\n */\n static concatenateStreams_(output, input) {\n // We keep the original stream's resolution, frame rate,\n // sample rate, and channel count to ensure that it's properly\n // matched with similar content in other periods further down\n // the line.\n\n // Combine arrays, keeping only the unique elements\n const combineArrays = (output, input) => {\n if (!output) {\n output = [];\n }\n for (const item of input) {\n if (!output.includes(item)) {\n output.push(item);\n }\n }\n return output;\n };\n output.roles = combineArrays(output.roles, input.roles);\n\n if (input.emsgSchemeIdUris) {\n output.emsgSchemeIdUris = combineArrays(\n output.emsgSchemeIdUris, input.emsgSchemeIdUris);\n }\n\n for (const keyId of input.keyIds) {\n output.keyIds.add(keyId);\n }\n\n if (output.originalId == null) {\n output.originalId = input.originalId;\n } else {\n const newOriginalId = (input.originalId || '');\n if (newOriginalId && !output.originalId.endsWith(newOriginalId)) {\n output.originalId += ',' + newOriginalId;\n }\n }\n\n const commonDrmInfos = shaka.util.DrmUtils.getCommonDrmInfos(\n output.drmInfos, input.drmInfos);\n if (input.drmInfos.length && output.drmInfos.length &&\n !commonDrmInfos.length) {\n throw new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.MANIFEST,\n shaka.util.Error.Code.INCONSISTENT_DRM_ACROSS_PERIODS);\n }\n output.drmInfos = commonDrmInfos;\n\n // The output is encrypted if any input was encrypted.\n output.encrypted = output.encrypted || input.encrypted;\n\n // Combine the closed captions maps.\n if (input.closedCaptions) {\n if (!output.closedCaptions) {\n output.closedCaptions = new Map();\n }\n for (const [key, value] of input.closedCaptions) {\n output.closedCaptions.set(key, value);\n }\n }\n\n // Prioritize the highest bandwidth\n if (output.bandwidth && input.bandwidth) {\n output.bandwidth = Math.max(output.bandwidth, input.bandwidth);\n }\n\n // Combine trick-play video streams, if present.\n if (input.trickModeVideo) {\n if (!output.trickModeVideo) {\n // Create a fresh output stream for trick-mode playback.\n output.trickModeVideo = shaka.util.PeriodCombiner.cloneStream_(\n input.trickModeVideo);\n output.trickModeVideo.matchedStreams = [];\n output.trickModeVideo.createSegmentIndex = () => {\n if (output.trickModeVideo.segmentIndex) {\n return Promise.resolve();\n }\n const segmentIndex = new shaka.media.MetaSegmentIndex();\n goog.asserts.assert(output.trickModeVideo.matchedStreams,\n 'trickmode matched streams should exist');\n for (const stream of output.trickModeVideo.matchedStreams) {\n goog.asserts.assert(stream.segmentIndex,\n 'trickmode segment index should exist');\n segmentIndex.appendSegmentIndex(stream.segmentIndex);\n }\n output.trickModeVideo.segmentIndex = segmentIndex;\n\n return Promise.resolve();\n };\n }\n\n // Concatenate the trick mode input onto the trick mode output.\n output.trickModeVideo.matchedStreams.push(input.trickModeVideo);\n shaka.util.PeriodCombiner.concatenateStreams_(\n output.trickModeVideo, input.trickModeVideo);\n } else if (output.trickModeVideo) {\n // We have a trick mode output, but no input from this Period. Fill it in\n // from the standard input Stream.\n output.trickModeVideo.matchedStreams.push(input);\n shaka.util.PeriodCombiner.concatenateStreams_(\n output.trickModeVideo, input);\n }\n }\n\n /**\n * Combine the various fields of the input StreamDB into the output.\n *\n * @param {shaka.extern.StreamDB} output\n * @param {shaka.extern.StreamDB} input\n * @private\n */\n static concatenateStreamDBs_(output, input) {\n // Combine arrays, keeping only the unique elements\n const combineArrays = (output, input) => {\n if (!output) {\n output = [];\n }\n for (const item of input) {\n if (!output.includes(item)) {\n output.push(item);\n }\n }\n return output;\n };\n output.roles = combineArrays(output.roles, input.roles);\n\n for (const keyId of input.keyIds) {\n output.keyIds.add(keyId);\n }\n\n // The output is encrypted if any input was encrypted.\n output.encrypted = output.encrypted && input.encrypted;\n\n // Concatenate segments without de-duping.\n output.segments.push(...input.segments);\n\n // Combine the closed captions maps.\n if (input.closedCaptions) {\n if (!output.closedCaptions) {\n output.closedCaptions = new Map();\n }\n for (const [key, value] of input.closedCaptions) {\n output.closedCaptions.set(key, value);\n }\n }\n }\n\n /**\n * Finds streams in all periods which match the output stream.\n *\n * @param {!Array>} streamsPerPeriod\n * @param {T} outputStream\n * @param {boolean=} shouldAppend\n *\n * @template T\n * Accepts either a StreamDB or Stream type.\n *\n * @private\n */\n findMatchesInAllPeriods_(streamsPerPeriod, outputStream,\n shouldAppend = false) {\n const matches = shouldAppend ? outputStream.matchedStreams : [];\n for (const streams of streamsPerPeriod) {\n const match = this.findBestMatchInPeriod_(streams, outputStream);\n if (!match) {\n return;\n }\n matches.push(match);\n }\n outputStream.matchedStreams = matches;\n }\n\n /**\n * Find the best match for the output stream.\n *\n * @param {!Map} streams\n * @param {T} outputStream\n * @return {?T} Returns null if no match can be found.\n *\n * @template T\n * Accepts either a StreamDB or Stream type.\n *\n * @private\n */\n findBestMatchInPeriod_(streams, outputStream) {\n const getKey = {\n 'audio': shaka.util.PeriodCombiner.generateAudioKey_,\n 'video': shaka.util.PeriodCombiner.generateVideoKey_,\n 'text': shaka.util.PeriodCombiner.generateTextKey_,\n 'image': shaka.util.PeriodCombiner.generateImageKey_,\n }[outputStream.type];\n\n let best = null;\n const key = getKey(outputStream);\n if (streams.has(key)) {\n // We've found exact match by hashing.\n best = streams.get(key);\n } else {\n // We haven't found exact match, try to find the best one via\n // linear search.\n const areCompatible = {\n 'audio': (os, s) => this.areAVStreamsCompatible_(os, s),\n 'video': (os, s) => this.areAVStreamsCompatible_(os, s),\n 'text': shaka.util.PeriodCombiner.areTextStreamsCompatible_,\n 'image': shaka.util.PeriodCombiner.areImageStreamsCompatible_,\n }[outputStream.type];\n const isBetterMatch = {\n 'audio': shaka.util.PeriodCombiner.isAudioStreamBetterMatch_,\n 'video': shaka.util.PeriodCombiner.isVideoStreamBetterMatch_,\n 'text': shaka.util.PeriodCombiner.isTextStreamBetterMatch_,\n 'image': shaka.util.PeriodCombiner.isImageStreamBetterMatch_,\n }[outputStream.type];\n\n for (const stream of streams.values()) {\n if (!areCompatible(outputStream, stream)) {\n continue;\n }\n\n if (outputStream.fastSwitching != stream.fastSwitching) {\n continue;\n }\n\n if (!best || isBetterMatch(outputStream, best, stream)) {\n best = stream;\n }\n }\n }\n\n // Remove just found stream if configured to, so possible future linear\n // searches can be faster.\n if (this.useStreamOnce_ && !shaka.util.PeriodCombiner.isDummy_(best)) {\n streams.delete(getKey(best));\n }\n\n return best;\n }\n\n /**\n * @param {T} a\n * @param {T} b\n * @return {boolean}\n *\n * @template T\n * Accepts either a StreamDB or Stream type.\n *\n * @private\n */\n static areAVStreamsExactMatch_(a, b) {\n if (a.mimeType != b.mimeType) {\n return false;\n }\n return shaka.util.PeriodCombiner.getCodec_(a.codecs) ===\n shaka.util.PeriodCombiner.getCodec_(b.codecs);\n }\n\n /**\n * @param {boolean} allowed If set to true, multi-mimeType or multi-codec\n * variants will be allowed.\n * @export\n */\n setAllowMultiTypeVariants(allowed) {\n this.multiTypeVariantsAllowed_ = allowed;\n }\n\n /**\n * @param {boolean} useOnce if true, stream will be used only once in period\n * flattening algoritnm.\n * @export\n */\n setUseStreamOnce(useOnce) {\n this.useStreamOnce_ = useOnce;\n }\n\n /**\n * @param {T} outputStream An audio or video output stream\n * @param {T} candidate A candidate stream to be combined with the output\n * @return {boolean} True if the candidate could be combined with the\n * output stream\n *\n * @template T\n * Accepts either a StreamDB or Stream type.\n *\n * @private\n */\n areAVStreamsCompatible_(outputStream, candidate) {\n // Check for an exact match.\n if (!shaka.util.PeriodCombiner.areAVStreamsExactMatch_(\n outputStream, candidate)) {\n // It's not an exact match. See if we can do multi-codec or multi-mimeType\n // stream instead, using SourceBuffer.changeType.\n if (!this.multiTypeVariantsAllowed_) {\n return false;\n }\n }\n\n // This field is only available on Stream, not StreamDB.\n if (outputStream.drmInfos) {\n // Check for compatible DRM systems. Note that clear streams are\n // implicitly compatible with any DRM and with each other.\n if (!shaka.util.DrmUtils.areDrmCompatible(outputStream.drmInfos,\n candidate.drmInfos)) {\n return false;\n }\n }\n\n return true;\n }\n\n /**\n * @param {T} outputStream A text output stream\n * @param {T} candidate A candidate stream to be combined with the output\n * @return {boolean} True if the candidate could be combined with the\n * output\n *\n * @template T\n * Accepts either a StreamDB or Stream type.\n *\n * @private\n */\n static areTextStreamsCompatible_(outputStream, candidate) {\n const LanguageUtils = shaka.util.LanguageUtils;\n\n // For text, we don't care about MIME type or codec. We can always switch\n // between text types.\n\n // If the candidate is a dummy, then it is compatible, and we could use it\n // if nothing else matches.\n if (!candidate.language) {\n return true;\n }\n\n // Forced subtitles should be treated as unique streams\n if (outputStream.forced !== candidate.forced) {\n return false;\n }\n\n const languageRelatedness = LanguageUtils.relatedness(\n outputStream.language, candidate.language);\n\n // We will strictly avoid combining text across languages or \"kinds\"\n // (caption vs subtitle).\n if (languageRelatedness == 0 ||\n candidate.kind != outputStream.kind) {\n return false;\n }\n\n return true;\n }\n\n /**\n * @param {T} outputStream A image output stream\n * @param {T} candidate A candidate stream to be combined with the output\n * @return {boolean} True if the candidate could be combined with the\n * output\n *\n * @template T\n * Accepts either a StreamDB or Stream type.\n *\n * @private\n */\n static areImageStreamsCompatible_(outputStream, candidate) {\n // For image, we don't care about MIME type. We can always switch\n // between image types.\n\n return true;\n }\n\n /**\n * @param {T} outputStream An audio output stream\n * @param {T} best The best match so far for this period\n * @param {T} candidate A candidate stream which might be better\n * @return {boolean} True if the candidate is a better match\n *\n * @template T\n * Accepts either a StreamDB or Stream type.\n *\n * @private\n */\n static isAudioStreamBetterMatch_(outputStream, best, candidate) {\n const LanguageUtils = shaka.util.LanguageUtils;\n const {BETTER, EQUAL, WORSE} = shaka.util.PeriodCombiner.BetterOrWorse;\n\n // An exact match is better than a non-exact match.\n const bestIsExact = shaka.util.PeriodCombiner.areAVStreamsExactMatch_(\n outputStream, best);\n const candidateIsExact = shaka.util.PeriodCombiner.areAVStreamsExactMatch_(\n outputStream, candidate);\n if (bestIsExact && !candidateIsExact) {\n return false;\n }\n if (!bestIsExact && candidateIsExact) {\n return true;\n }\n\n // The most important thing is language. In some cases, we will accept a\n // different language across periods when we must.\n const bestRelatedness = LanguageUtils.relatedness(\n outputStream.language, best.language);\n const candidateRelatedness = LanguageUtils.relatedness(\n outputStream.language, candidate.language);\n\n if (candidateRelatedness > bestRelatedness) {\n return true;\n }\n if (candidateRelatedness < bestRelatedness) {\n return false;\n }\n\n // If language-based differences haven't decided this, look at labels.\n // If available options differ, look does any matches with output stream.\n if (best.label !== candidate.label) {\n if (outputStream.label === best.label) {\n return false;\n }\n if (outputStream.label === candidate.label) {\n return true;\n }\n }\n\n // If label-based differences haven't decided this, look at roles. If\n // the candidate has more roles in common with the output, upgrade to the\n // candidate.\n if (outputStream.roles.length) {\n const bestRoleMatches =\n best.roles.filter((role) => outputStream.roles.includes(role));\n const candidateRoleMatches =\n candidate.roles.filter((role) => outputStream.roles.includes(role));\n if (candidateRoleMatches.length > bestRoleMatches.length) {\n return true;\n } else if (candidateRoleMatches.length < bestRoleMatches.length) {\n return false;\n } else if (candidate.roles.length !== best.roles.length) {\n // Both streams have the same role overlap with the outputStream\n // If this is the case, choose the stream with the fewer roles overall.\n // Streams that match best together tend to be streams with the same\n // roles, e g stream1 with roles [r1, r2] is likely a better match\n // for stream2 with roles [r1, r2] vs stream3 with roles\n // [r1, r2, r3, r4].\n // If we match stream1 with stream3 due to the same role overlap,\n // stream2 is likely to be left unmatched and error out later.\n // See https://github.com/shaka-project/shaka-player/issues/2542 for\n // more details.\n return candidate.roles.length < best.roles.length;\n }\n } else if (!candidate.roles.length && best.roles.length) {\n // If outputStream has no roles, and only one of the streams has no roles,\n // choose the one with no roles.\n return true;\n } else if (candidate.roles.length && !best.roles.length) {\n return false;\n }\n\n // If the language doesn't match, but the candidate is the \"primary\"\n // language, then that should be preferred as a fallback.\n if (!best.primary && candidate.primary) {\n return true;\n }\n if (best.primary && !candidate.primary) {\n return false;\n }\n\n // If language-based and role-based features are equivalent, take the audio\n // with the closes channel count to the output.\n const channelsBetterOrWorse =\n shaka.util.PeriodCombiner.compareClosestPreferLower(\n outputStream.channelsCount,\n best.channelsCount,\n candidate.channelsCount);\n if (channelsBetterOrWorse == BETTER) {\n return true;\n } else if (channelsBetterOrWorse == WORSE) {\n return false;\n }\n\n // If channels are equal, take the closest sample rate to the output.\n const sampleRateBetterOrWorse =\n shaka.util.PeriodCombiner.compareClosestPreferLower(\n outputStream.audioSamplingRate,\n best.audioSamplingRate,\n candidate.audioSamplingRate);\n if (sampleRateBetterOrWorse == BETTER) {\n return true;\n } else if (sampleRateBetterOrWorse == WORSE) {\n return false;\n }\n\n if (outputStream.bandwidth) {\n // Take the audio with the closest bandwidth to the output.\n const bandwidthBetterOrWorse =\n shaka.util.PeriodCombiner.compareClosestPreferMinimalAbsDiff_(\n outputStream.bandwidth,\n best.bandwidth,\n candidate.bandwidth);\n if (bandwidthBetterOrWorse == BETTER) {\n return true;\n } else if (bandwidthBetterOrWorse == WORSE) {\n return false;\n }\n }\n\n // If the result of each comparison was inconclusive, default to false.\n return false;\n }\n\n /**\n * @param {T} outputStream A video output stream\n * @param {T} best The best match so far for this period\n * @param {T} candidate A candidate stream which might be better\n * @return {boolean} True if the candidate is a better match\n *\n * @template T\n * Accepts either a StreamDB or Stream type.\n *\n * @private\n */\n static isVideoStreamBetterMatch_(outputStream, best, candidate) {\n const {BETTER, EQUAL, WORSE} = shaka.util.PeriodCombiner.BetterOrWorse;\n\n // An exact match is better than a non-exact match.\n const bestIsExact = shaka.util.PeriodCombiner.areAVStreamsExactMatch_(\n outputStream, best);\n const candidateIsExact = shaka.util.PeriodCombiner.areAVStreamsExactMatch_(\n outputStream, candidate);\n if (bestIsExact && !candidateIsExact) {\n return false;\n }\n if (!bestIsExact && candidateIsExact) {\n return true;\n }\n\n // Take the video with the closest resolution to the output.\n const resolutionBetterOrWorse =\n shaka.util.PeriodCombiner.compareClosestPreferLower(\n outputStream.width * outputStream.height,\n best.width * best.height,\n candidate.width * candidate.height);\n if (resolutionBetterOrWorse == BETTER) {\n return true;\n } else if (resolutionBetterOrWorse == WORSE) {\n return false;\n }\n\n // We may not know the frame rate for the content, in which case this gets\n // skipped.\n if (outputStream.frameRate) {\n // Take the video with the closest frame rate to the output.\n const frameRateBetterOrWorse =\n shaka.util.PeriodCombiner.compareClosestPreferLower(\n outputStream.frameRate,\n best.frameRate,\n candidate.frameRate);\n if (frameRateBetterOrWorse == BETTER) {\n return true;\n } else if (frameRateBetterOrWorse == WORSE) {\n return false;\n }\n }\n\n\n if (outputStream.bandwidth) {\n // Take the video with the closest bandwidth to the output.\n const bandwidthBetterOrWorse =\n shaka.util.PeriodCombiner.compareClosestPreferMinimalAbsDiff_(\n outputStream.bandwidth,\n best.bandwidth,\n candidate.bandwidth);\n if (bandwidthBetterOrWorse == BETTER) {\n return true;\n } else if (bandwidthBetterOrWorse == WORSE) {\n return false;\n }\n }\n\n // If the result of each comparison was inconclusive, default to false.\n return false;\n }\n\n /**\n * @param {T} outputStream A text output stream\n * @param {T} best The best match so far for this period\n * @param {T} candidate A candidate stream which might be better\n * @return {boolean} True if the candidate is a better match\n *\n * @template T\n * Accepts either a StreamDB or Stream type.\n *\n * @private\n */\n static isTextStreamBetterMatch_(outputStream, best, candidate) {\n const LanguageUtils = shaka.util.LanguageUtils;\n\n // The most important thing is language. In some cases, we will accept a\n // different language across periods when we must.\n const bestRelatedness = LanguageUtils.relatedness(\n outputStream.language, best.language);\n const candidateRelatedness = LanguageUtils.relatedness(\n outputStream.language, candidate.language);\n\n if (candidateRelatedness > bestRelatedness) {\n return true;\n }\n if (candidateRelatedness < bestRelatedness) {\n return false;\n }\n\n // If the language doesn't match, but the candidate is the \"primary\"\n // language, then that should be preferred as a fallback.\n if (!best.primary && candidate.primary) {\n return true;\n }\n if (best.primary && !candidate.primary) {\n return false;\n }\n\n // If language-based differences haven't decided this, look at labels.\n // If available options differ, look does any matches with output stream.\n if (best.label !== candidate.label) {\n if (outputStream.label === best.label) {\n return false;\n }\n if (outputStream.label === candidate.label) {\n return true;\n }\n }\n\n // If the candidate has more roles in common with the output, upgrade to the\n // candidate.\n if (outputStream.roles.length) {\n const bestRoleMatches =\n best.roles.filter((role) => outputStream.roles.includes(role));\n const candidateRoleMatches =\n candidate.roles.filter((role) => outputStream.roles.includes(role));\n if (candidateRoleMatches.length > bestRoleMatches.length) {\n return true;\n }\n if (candidateRoleMatches.length < bestRoleMatches.length) {\n return false;\n }\n } else if (!candidate.roles.length && best.roles.length) {\n // If outputStream has no roles, and only one of the streams has no roles,\n // choose the one with no roles.\n return true;\n } else if (candidate.roles.length && !best.roles.length) {\n return false;\n }\n\n // If the candidate has the same MIME type and codec, upgrade to the\n // candidate. It's not required that text streams use the same format\n // across periods, but it's a helpful signal. Some content in our demo app\n // contains the same languages repeated with two different text formats in\n // each period. This condition ensures that all text streams are used.\n // Otherwise, we wind up with some one stream of each language left unused,\n // triggering a failure.\n if (candidate.mimeType == outputStream.mimeType &&\n candidate.codecs == outputStream.codecs &&\n (best.mimeType != outputStream.mimeType ||\n best.codecs != outputStream.codecs)) {\n return true;\n }\n\n // If the result of each comparison was inconclusive, default to false.\n return false;\n }\n\n /**\n * @param {T} outputStream A image output stream\n * @param {T} best The best match so far for this period\n * @param {T} candidate A candidate stream which might be better\n * @return {boolean} True if the candidate is a better match\n *\n * @template T\n * Accepts either a StreamDB or Stream type.\n *\n * @private\n */\n static isImageStreamBetterMatch_(outputStream, best, candidate) {\n const {BETTER, EQUAL, WORSE} = shaka.util.PeriodCombiner.BetterOrWorse;\n\n // Take the image with the closest resolution to the output.\n const resolutionBetterOrWorse =\n shaka.util.PeriodCombiner.compareClosestPreferLower(\n outputStream.width * outputStream.height,\n best.width * best.height,\n candidate.width * candidate.height);\n if (resolutionBetterOrWorse == BETTER) {\n return true;\n } else if (resolutionBetterOrWorse == WORSE) {\n return false;\n }\n\n // If the result of each comparison was inconclusive, default to false.\n return false;\n }\n\n /**\n * Create a dummy StreamDB to fill in periods that are missing a certain type,\n * to avoid failing the general flattening algorithm. This won't be used for\n * audio or video, since those are strictly required in all periods if they\n * exist in any period.\n *\n * @param {shaka.util.ManifestParserUtils.ContentType} type\n * @return {shaka.extern.StreamDB}\n * @private\n */\n static dummyStreamDB_(type) {\n return {\n id: 0,\n originalId: '',\n groupId: null,\n primary: false,\n type,\n mimeType: '',\n codecs: '',\n language: '',\n originalLanguage: null,\n label: null,\n width: null,\n height: null,\n encrypted: false,\n keyIds: new Set(),\n segments: [],\n variantIds: [],\n roles: [],\n forced: false,\n channelsCount: null,\n audioSamplingRate: null,\n spatialAudio: false,\n closedCaptions: null,\n external: false,\n fastSwitching: false,\n isAudioMuxedInVideo: false,\n };\n }\n\n /**\n * Create a dummy Stream to fill in periods that are missing a certain type,\n * to avoid failing the general flattening algorithm. This won't be used for\n * audio or video, since those are strictly required in all periods if they\n * exist in any period.\n *\n * @param {shaka.util.ManifestParserUtils.ContentType} type\n * @return {shaka.extern.Stream}\n * @private\n */\n static dummyStream_(type) {\n return {\n id: 0,\n originalId: '',\n groupId: null,\n createSegmentIndex: () => Promise.resolve(),\n segmentIndex: new shaka.media.SegmentIndex([]),\n mimeType: '',\n codecs: '',\n encrypted: false,\n drmInfos: [],\n keyIds: new Set(),\n language: '',\n originalLanguage: null,\n label: null,\n type,\n primary: false,\n trickModeVideo: null,\n emsgSchemeIdUris: null,\n roles: [],\n forced: false,\n channelsCount: null,\n audioSamplingRate: null,\n spatialAudio: false,\n closedCaptions: null,\n accessibilityPurpose: null,\n external: false,\n fastSwitching: false,\n fullMimeTypes: new Set(),\n isAudioMuxedInVideo: false,\n };\n }\n\n /**\n * Compare the best value so far with the candidate value and the output\n * value. Decide if the candidate is better, equal, or worse than the best\n * so far. Any value less than or equal to the output is preferred over a\n * larger value, and closer to the output is better than farther.\n *\n * This provides us a generic way to choose things that should match as\n * closely as possible, like resolution, frame rate, audio channels, or\n * sample rate. If we have to go higher to make a match, we will. But if\n * the user selects 480p, for example, we don't want to surprise them with\n * 720p and waste bandwidth if there's another choice available to us.\n *\n * @param {number} outputValue\n * @param {number} bestValue\n * @param {number} candidateValue\n * @return {shaka.util.PeriodCombiner.BetterOrWorse}\n */\n static compareClosestPreferLower(outputValue, bestValue, candidateValue) {\n const {BETTER, EQUAL, WORSE} = shaka.util.PeriodCombiner.BetterOrWorse;\n\n // If one is the exact match for the output value, and the other isn't,\n // prefer the one that is the exact match.\n if (bestValue == outputValue && outputValue != candidateValue) {\n return WORSE;\n } else if (candidateValue == outputValue && outputValue != bestValue) {\n return BETTER;\n }\n\n if (bestValue > outputValue) {\n if (candidateValue <= outputValue) {\n // Any smaller-or-equal-to-output value is preferable to a\n // bigger-than-output value.\n return BETTER;\n }\n\n // Both \"best\" and \"candidate\" are greater than the output. Take\n // whichever is closer.\n if (candidateValue - outputValue < bestValue - outputValue) {\n return BETTER;\n } else if (candidateValue - outputValue > bestValue - outputValue) {\n return WORSE;\n }\n } else {\n // The \"best\" so far is less than or equal to the output. If the\n // candidate is bigger than the output, we don't want it.\n if (candidateValue > outputValue) {\n return WORSE;\n }\n\n // Both \"best\" and \"candidate\" are less than or equal to the output.\n // Take whichever is closer.\n if (outputValue - candidateValue < outputValue - bestValue) {\n return BETTER;\n } else if (outputValue - candidateValue > outputValue - bestValue) {\n return WORSE;\n }\n }\n\n return EQUAL;\n }\n\n /**\n * @param {number} outputValue\n * @param {number} bestValue\n * @param {number} candidateValue\n * @return {shaka.util.PeriodCombiner.BetterOrWorse}\n * @private\n */\n static compareClosestPreferMinimalAbsDiff_(\n outputValue, bestValue, candidateValue) {\n const {BETTER, EQUAL, WORSE} = shaka.util.PeriodCombiner.BetterOrWorse;\n\n const absDiffBest = Math.abs(outputValue - bestValue);\n const absDiffCandidate = Math.abs(outputValue - candidateValue);\n if (absDiffCandidate < absDiffBest) {\n return BETTER;\n } else if (absDiffBest < absDiffCandidate) {\n return WORSE;\n }\n\n return EQUAL;\n }\n\n /**\n * @param {T} stream\n * @return {boolean}\n * @template T\n * Accepts either a StreamDB or Stream type.\n * @private\n */\n static isDummy_(stream) {\n const ContentType = shaka.util.ManifestParserUtils.ContentType;\n switch (stream.type) {\n case ContentType.TEXT:\n return !stream.language;\n case ContentType.IMAGE:\n return !stream.tilesLayout;\n default:\n return false;\n }\n }\n\n /**\n * @param {T} v\n * @return {string}\n * @template T\n * Accepts either a StreamDB or Stream type.\n * @private\n */\n static generateVideoKey_(v) {\n return shaka.util.PeriodCombiner.generateKey_([\n v.fastSwitching,\n v.width,\n v.frameRate,\n shaka.util.PeriodCombiner.getCodec_(v.codecs),\n v.mimeType,\n v.label,\n v.roles,\n v.closedCaptions ? Array.from(v.closedCaptions.entries()) : null,\n v.bandwidth,\n ]);\n }\n\n /**\n * @param {T} a\n * @return {string}\n * @template T\n * Accepts either a StreamDB or Stream type.\n * @private\n */\n static generateAudioKey_(a) {\n return shaka.util.PeriodCombiner.generateKey_([\n a.fastSwitching,\n a.channelsCount,\n a.language,\n a.bandwidth,\n a.label,\n shaka.util.PeriodCombiner.getCodec_(a.codecs),\n a.mimeType,\n a.roles,\n a.audioSamplingRate,\n a.primary,\n ]);\n }\n\n /**\n * @param {T} t\n * @return {string}\n * @template T\n * Accepts either a StreamDB or Stream type.\n * @private\n */\n static generateTextKey_(t) {\n return shaka.util.PeriodCombiner.generateKey_([\n t.language,\n t.label,\n t.codecs,\n t.mimeType,\n t.bandwidth,\n t.roles,\n ]);\n }\n\n /**\n * @param {T} i\n * @return {string}\n * @template T\n * Accepts either a StreamDB or Stream type.\n * @private\n */\n static generateImageKey_(i) {\n return shaka.util.PeriodCombiner.generateKey_([\n i.width,\n i.codecs,\n i.mimeType,\n ]);\n }\n\n /**\n * @param {!Array<*>} values\n * @return {string}\n * @private\n */\n static generateKey_(values) {\n return JSON.stringify(values);\n }\n\n /**\n * @param {string} codecs\n * @return {string}\n * @private\n */\n static getCodec_(codecs) {\n if (!shaka.util.PeriodCombiner.memoizedCodecs.has(codecs)) {\n const normalizedCodec = shaka.util.MimeUtils.getNormalizedCodec(codecs);\n shaka.util.PeriodCombiner.memoizedCodecs.set(codecs, normalizedCodec);\n }\n return shaka.util.PeriodCombiner.memoizedCodecs.get(codecs);\n }\n};\n\n/**\n * @enum {number}\n */\nshaka.util.PeriodCombiner.BetterOrWorse = {\n BETTER: 1,\n EQUAL: 0,\n WORSE: -1,\n};\n\n/**\n * @private {Map}\n */\nshaka.util.PeriodCombiner.memoizedCodecs = new Map();\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.util.XmlUtils');\n\ngoog.require('goog.asserts');\ngoog.require('shaka.log');\ngoog.require('shaka.util.Lazy');\ngoog.require('shaka.util.StringUtils');\n\n\n/**\n * @summary A set of XML utility functions.\n */\nshaka.util.XmlUtils = class {\n /**\n * Parse a string and return the resulting root element if it was valid XML.\n *\n * @param {string} xmlString\n * @param {string} expectedRootElemName\n * @return {Element}\n */\n static parseXmlString(xmlString, expectedRootElemName) {\n const parser = new DOMParser();\n const unsafeXmlString =\n shaka.util.XmlUtils.trustedHTMLFromString_.value()(xmlString);\n let unsafeXml = null;\n try {\n unsafeXml = parser.parseFromString(unsafeXmlString, 'text/xml');\n } catch (exception) {\n shaka.log.error('XML parsing exception:', exception);\n return null;\n }\n\n // According to MDN, parseFromString never returns null.\n goog.asserts.assert(unsafeXml, 'Parsed XML document cannot be null!');\n\n // Check for empty documents.\n const rootElem = unsafeXml.documentElement;\n if (!rootElem) {\n shaka.log.error('XML document was empty!');\n return null;\n }\n\n // Check for parser errors.\n const parserErrorElements = rootElem.getElementsByTagName('parsererror');\n if (parserErrorElements.length) {\n shaka.log.error('XML parser error found:', parserErrorElements[0]);\n return null;\n }\n\n // The top-level element in the loaded XML should have the name we expect.\n if (rootElem.tagName != expectedRootElemName) {\n shaka.log.error(\n `XML tag name does not match expected \"${expectedRootElemName}\":`,\n rootElem.tagName);\n return null;\n }\n\n // Cobalt browser doesn't support document.createNodeIterator.\n if (!('createNodeIterator' in document)) {\n return rootElem;\n }\n\n // SECURITY: Verify that the document does not contain elements from the\n // HTML or SVG namespaces, which could trigger script execution and XSS.\n const iterator = document.createNodeIterator(\n unsafeXml,\n NodeFilter.SHOW_ALL,\n );\n let currentNode;\n while (currentNode = iterator.nextNode()) {\n if (currentNode instanceof HTMLElement ||\n currentNode instanceof SVGElement) {\n shaka.log.error('XML document embeds unsafe content!');\n return null;\n }\n }\n\n return rootElem;\n }\n\n\n /**\n * Parse some data (auto-detecting the encoding) and return the resulting\n * root element if it was valid XML.\n * @param {BufferSource} data\n * @param {string} expectedRootElemName\n * @return {Element}\n */\n static parseXml(data, expectedRootElemName) {\n try {\n const string = shaka.util.StringUtils.fromBytesAutoDetect(data);\n return shaka.util.XmlUtils.parseXmlString(string, expectedRootElemName);\n } catch (exception) {\n shaka.log.error('parseXmlString threw!', exception);\n return null;\n }\n }\n\n\n /**\n * Converts a Element to BufferSource.\n * @param {!Element} elem\n * @return {!ArrayBuffer}\n */\n static toArrayBuffer(elem) {\n return shaka.util.StringUtils.toUTF8(elem.outerHTML);\n }\n};\n\n/**\n * Promote a string to TrustedHTML. This function is security-sensitive and\n * should only be used with security approval where the string is guaranteed not\n * to cause an XSS vulnerability.\n *\n * @private {!shaka.util.Lazy.}\n */\nshaka.util.XmlUtils.trustedHTMLFromString_ = new shaka.util.Lazy(() => {\n if (typeof trustedTypes !== 'undefined') {\n // Create a Trusted Types policy for promoting the string to TrustedHTML.\n // The Lazy wrapper ensures this policy is only created once.\n const policy = trustedTypes.createPolicy('shaka-player#xml', {\n createHTML: (s) => s,\n });\n return (s) => policy.createHTML(s);\n }\n // Fall back to strings in environments that don't support Trusted Types.\n return (s) => s;\n});\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.dash.DashParser');\n\ngoog.require('goog.asserts');\ngoog.require('goog.Uri');\ngoog.require('shaka.Deprecate');\ngoog.require('shaka.abr.Ewma');\ngoog.require('shaka.dash.ContentProtection');\ngoog.require('shaka.dash.MpdUtils');\ngoog.require('shaka.dash.SegmentBase');\ngoog.require('shaka.dash.SegmentList');\ngoog.require('shaka.dash.SegmentTemplate');\ngoog.require('shaka.log');\ngoog.require('shaka.media.Capabilities');\ngoog.require('shaka.media.ManifestParser');\ngoog.require('shaka.media.PresentationTimeline');\ngoog.require('shaka.media.SegmentIndex');\ngoog.require('shaka.media.SegmentUtils');\ngoog.require('shaka.net.NetworkingEngine');\ngoog.require('shaka.text.TextEngine');\ngoog.require('shaka.util.ContentSteeringManager');\ngoog.require('shaka.util.Error');\ngoog.require('shaka.util.EventManager');\ngoog.require('shaka.util.Functional');\ngoog.require('shaka.util.LanguageUtils');\ngoog.require('shaka.util.ManifestParserUtils');\ngoog.require('shaka.util.MimeUtils');\ngoog.require('shaka.util.Networking');\ngoog.require('shaka.util.ObjectUtils');\ngoog.require('shaka.util.OperationManager');\ngoog.require('shaka.util.PeriodCombiner');\ngoog.require('shaka.util.PlayerConfiguration');\ngoog.require('shaka.util.StreamUtils');\ngoog.require('shaka.util.StringUtils');\ngoog.require('shaka.util.Timer');\ngoog.require('shaka.util.TXml');\ngoog.require('shaka.util.XmlUtils');\n\n\n/**\n * Creates a new DASH parser.\n *\n * @implements {shaka.extern.ManifestParser}\n * @export\n */\nshaka.dash.DashParser = class {\n /** Creates a new DASH parser. */\n constructor() {\n /** @private {?shaka.extern.ManifestConfiguration} */\n this.config_ = null;\n\n /** @private {?shaka.extern.ManifestParser.PlayerInterface} */\n this.playerInterface_ = null;\n\n /** @private {!Array.} */\n this.manifestUris_ = [];\n\n /** @private {?shaka.extern.Manifest} */\n this.manifest_ = null;\n\n /** @private {number} */\n this.globalId_ = 1;\n\n /** @private {!Array} */\n this.patchLocationNodes_ = [];\n\n /**\n * A context of the living manifest used for processing\n * Patch MPD's\n * @private {!shaka.dash.DashParser.PatchContext}\n */\n this.manifestPatchContext_ = {\n mpdId: '',\n type: '',\n profiles: [],\n mediaPresentationDuration: null,\n availabilityTimeOffset: 0,\n getBaseUris: null,\n publishTime: 0,\n };\n\n /**\n * This is a cache is used the store a snapshot of the context\n * object which is built up throughout node traversal to maintain\n * a current state. This data needs to be preserved for parsing\n * patches.\n * The key is a combination period and representation id's.\n * @private {!Map}\n */\n this.contextCache_ = new Map();\n\n /**\n * A map of IDs to Stream objects.\n * ID: Period@id,Representation@id\n * e.g.: '1,23'\n * @private {!Object.}\n */\n this.streamMap_ = {};\n\n /**\n * A map of Period IDs to Stream Map IDs.\n * Use to have direct access to streamMap key.\n * @private {!Object.>}\n */\n this.indexStreamMap_ = {};\n\n /**\n * A map of period ids to their durations\n * @private {!Object.}\n */\n this.periodDurations_ = {};\n\n /** @private {shaka.util.PeriodCombiner} */\n this.periodCombiner_ = new shaka.util.PeriodCombiner();\n\n /**\n * The update period in seconds, or 0 for no updates.\n * @private {number}\n */\n this.updatePeriod_ = 0;\n\n /**\n * An ewma that tracks how long updates take.\n * This is to mitigate issues caused by slow parsing on embedded devices.\n * @private {!shaka.abr.Ewma}\n */\n this.averageUpdateDuration_ = new shaka.abr.Ewma(5);\n\n /** @private {shaka.util.Timer} */\n this.updateTimer_ = new shaka.util.Timer(() => {\n if (this.mediaElement_ && !this.config_.continueLoadingWhenPaused) {\n this.eventManager_.unlisten(this.mediaElement_, 'timeupdate');\n if (this.mediaElement_.paused) {\n this.eventManager_.listenOnce(\n this.mediaElement_, 'timeupdate', () => this.onUpdate_());\n return;\n }\n }\n this.onUpdate_();\n });\n\n /** @private {!shaka.util.OperationManager} */\n this.operationManager_ = new shaka.util.OperationManager();\n\n /**\n * Largest period start time seen.\n * @private {?number}\n */\n this.largestPeriodStartTime_ = null;\n\n /**\n * Period IDs seen in previous manifest.\n * @private {!Array.}\n */\n this.lastManifestUpdatePeriodIds_ = [];\n\n /**\n * The minimum of the availabilityTimeOffset values among the adaptation\n * sets.\n * @private {number}\n */\n this.minTotalAvailabilityTimeOffset_ = Infinity;\n\n /** @private {boolean} */\n this.lowLatencyMode_ = false;\n\n /** @private {?shaka.util.ContentSteeringManager} */\n this.contentSteeringManager_ = null;\n\n /** @private {number} */\n this.gapCount_ = 0;\n\n /** @private {boolean} */\n this.isLowLatency_ = false;\n\n /** @private {shaka.util.EventManager} */\n this.eventManager_ = new shaka.util.EventManager();\n\n /** @private {HTMLMediaElement} */\n this.mediaElement_ = null;\n\n /** @private {boolean} */\n this.isTransitionFromDynamicToStatic_ = false;\n\n /** @private {string} */\n this.lastManifestQueryParams_ = '';\n\n /** @private {function():boolean} */\n this.isPreloadFn_ = () => false;\n\n /** @private {?Array.} */\n this.lastCalculatedBaseUris_ = [];\n }\n\n /**\n * @param {shaka.extern.ManifestConfiguration} config\n * @param {(function():boolean)=} isPreloadFn\n * @override\n * @exportInterface\n */\n configure(config, isPreloadFn) {\n goog.asserts.assert(config.dash != null,\n 'DashManifestConfiguration should not be null!');\n const needFireUpdate = this.playerInterface_ &&\n config.dash.updatePeriod != this.config_.dash.updatePeriod &&\n config.dash.updatePeriod >= 0;\n this.config_ = config;\n if (isPreloadFn) {\n this.isPreloadFn_ = isPreloadFn;\n }\n if (needFireUpdate && this.manifest_ &&\n this.manifest_.presentationTimeline.isLive()) {\n this.updateNow_();\n }\n if (this.contentSteeringManager_) {\n this.contentSteeringManager_.configure(this.config_);\n }\n\n if (this.periodCombiner_) {\n this.periodCombiner_.setAllowMultiTypeVariants(\n this.config_.dash.multiTypeVariantsAllowed &&\n shaka.media.Capabilities.isChangeTypeSupported());\n this.periodCombiner_.setUseStreamOnce(\n this.config_.dash.useStreamOnceInPeriodFlattening);\n }\n }\n\n /**\n * @override\n * @exportInterface\n */\n async start(uri, playerInterface) {\n goog.asserts.assert(this.config_, 'Must call configure() before start()!');\n this.lowLatencyMode_ = playerInterface.isLowLatencyMode();\n this.manifestUris_ = [uri];\n this.playerInterface_ = playerInterface;\n\n const updateDelay = await this.requestManifest_();\n\n if (this.playerInterface_) {\n this.setUpdateTimer_(updateDelay);\n }\n\n // Make sure that the parser has not been destroyed.\n if (!this.playerInterface_) {\n throw new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.PLAYER,\n shaka.util.Error.Code.OPERATION_ABORTED);\n }\n\n goog.asserts.assert(this.manifest_, 'Manifest should be non-null!');\n return this.manifest_;\n }\n\n /**\n * @override\n * @exportInterface\n */\n stop() {\n // When the parser stops, release all segment indexes, which stops their\n // timers, as well.\n for (const stream of Object.values(this.streamMap_)) {\n if (stream.segmentIndex) {\n stream.segmentIndex.release();\n }\n }\n\n if (this.periodCombiner_) {\n this.periodCombiner_.release();\n }\n\n this.playerInterface_ = null;\n this.config_ = null;\n this.manifestUris_ = [];\n this.manifest_ = null;\n this.streamMap_ = {};\n this.indexStreamMap_ = {};\n this.contextCache_.clear();\n this.manifestPatchContext_ = {\n mpdId: '',\n type: '',\n profiles: [],\n mediaPresentationDuration: null,\n availabilityTimeOffset: 0,\n getBaseUris: null,\n publishTime: 0,\n };\n this.periodCombiner_ = null;\n\n if (this.updateTimer_ != null) {\n this.updateTimer_.stop();\n this.updateTimer_ = null;\n }\n\n if (this.contentSteeringManager_) {\n this.contentSteeringManager_.destroy();\n }\n\n if (this.eventManager_) {\n this.eventManager_.release();\n this.eventManager_ = null;\n }\n\n return this.operationManager_.destroy();\n }\n\n /**\n * @override\n * @exportInterface\n */\n async update() {\n try {\n await this.requestManifest_();\n } catch (error) {\n if (!this.playerInterface_ || !error) {\n return;\n }\n goog.asserts.assert(error instanceof shaka.util.Error, 'Bad error type');\n this.playerInterface_.onError(error);\n }\n }\n\n /**\n * @override\n * @exportInterface\n */\n onExpirationUpdated(sessionId, expiration) {\n // No-op\n }\n\n /**\n * @override\n * @exportInterface\n */\n onInitialVariantChosen(variant) {\n // For live it is necessary that the first time we update the manifest with\n // a shorter time than indicated to take into account that the last segment\n // added could be halfway, for example\n if (this.manifest_ && this.manifest_.presentationTimeline.isLive()) {\n const stream = variant.video || variant.audio;\n if (stream && stream.segmentIndex) {\n const availabilityEnd =\n this.manifest_.presentationTimeline.getSegmentAvailabilityEnd();\n const position = stream.segmentIndex.find(availabilityEnd);\n if (position == null) {\n return;\n }\n const reference = stream.segmentIndex.get(position);\n if (!reference) {\n return;\n }\n this.updatePeriod_ = reference.endTime - availabilityEnd;\n this.setUpdateTimer_(/* offset= */ 0);\n }\n }\n }\n\n /**\n * @override\n * @exportInterface\n */\n banLocation(uri) {\n if (this.contentSteeringManager_) {\n this.contentSteeringManager_.banLocation(uri);\n }\n }\n\n /**\n * @override\n * @exportInterface\n */\n setMediaElement(mediaElement) {\n this.mediaElement_ = mediaElement;\n }\n\n /**\n * Makes a network request for the manifest and parses the resulting data.\n *\n * @return {!Promise.} Resolves with the time it took, in seconds, to\n * fulfill the request and parse the data.\n * @private\n */\n async requestManifest_() {\n const requestType = shaka.net.NetworkingEngine.RequestType.MANIFEST;\n let type = shaka.net.NetworkingEngine.AdvancedRequestType.MPD;\n let rootElement = 'MPD';\n const patchLocationUris = this.getPatchLocationUris_();\n let manifestUris = this.manifestUris_;\n if (patchLocationUris.length) {\n manifestUris = patchLocationUris;\n rootElement = 'Patch';\n type = shaka.net.NetworkingEngine.AdvancedRequestType.MPD_PATCH;\n } else if (this.manifestUris_.length > 1 && this.contentSteeringManager_) {\n const locations = this.contentSteeringManager_.getLocations(\n 'Location', /* ignoreBaseUrls= */ true);\n if (locations.length) {\n manifestUris = locations;\n }\n }\n const request = shaka.net.NetworkingEngine.makeRequest(\n manifestUris, this.config_.retryParameters);\n const startTime = Date.now();\n\n const response = await this.makeNetworkRequest_(\n request, requestType, {type});\n\n // Detect calls to stop().\n if (!this.playerInterface_) {\n return 0;\n }\n\n // For redirections add the response uri to the first entry in the\n // Manifest Uris array.\n if (response.uri && response.uri != response.originalUri &&\n !this.manifestUris_.includes(response.uri)) {\n this.manifestUris_.unshift(response.uri);\n }\n\n const uriObj = new goog.Uri(response.uri);\n this.lastManifestQueryParams_ = uriObj.getQueryData().toString();\n\n // This may throw, but it will result in a failed promise.\n await this.parseManifest_(response.data, response.uri, rootElement);\n // Keep track of how long the longest manifest update took.\n const endTime = Date.now();\n const updateDuration = (endTime - startTime) / 1000.0;\n this.averageUpdateDuration_.sample(1, updateDuration);\n\n // Let the caller know how long this update took.\n return updateDuration;\n }\n\n /**\n * Parses the manifest XML. This also handles updates and will update the\n * stored manifest.\n *\n * @param {BufferSource} data\n * @param {string} finalManifestUri The final manifest URI, which may\n * differ from this.manifestUri_ if there has been a redirect.\n * @param {string} rootElement MPD or Patch, depending on context\n * @return {!Promise}\n * @private\n */\n async parseManifest_(data, finalManifestUri, rootElement) {\n let manifestData = data;\n const manifestPreprocessor = this.config_.dash.manifestPreprocessor;\n const defaultManifestPreprocessor =\n shaka.util.PlayerConfiguration.defaultManifestPreprocessor;\n if (manifestPreprocessor != defaultManifestPreprocessor) {\n shaka.Deprecate.deprecateFeature(5,\n 'manifest.dash.manifestPreprocessor configuration',\n 'Please Use manifest.dash.manifestPreprocessorTXml instead.');\n const mpdElement =\n shaka.util.XmlUtils.parseXml(manifestData, rootElement);\n if (!mpdElement) {\n throw new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.MANIFEST,\n shaka.util.Error.Code.DASH_INVALID_XML,\n finalManifestUri);\n }\n manifestPreprocessor(mpdElement);\n manifestData = shaka.util.XmlUtils.toArrayBuffer(mpdElement);\n }\n const mpd = shaka.util.TXml.parseXml(manifestData, rootElement);\n if (!mpd) {\n throw new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.MANIFEST,\n shaka.util.Error.Code.DASH_INVALID_XML,\n finalManifestUri);\n }\n const manifestPreprocessorTXml =\n this.config_.dash.manifestPreprocessorTXml;\n const defaultManifestPreprocessorTXml =\n shaka.util.PlayerConfiguration.defaultManifestPreprocessorTXml;\n if (manifestPreprocessorTXml != defaultManifestPreprocessorTXml) {\n manifestPreprocessorTXml(mpd);\n }\n\n if (rootElement === 'Patch') {\n return this.processPatchManifest_(mpd);\n }\n\n const disableXlinkProcessing = this.config_.dash.disableXlinkProcessing;\n if (disableXlinkProcessing) {\n return this.processManifest_(mpd, finalManifestUri);\n }\n\n // Process the mpd to account for xlink connections.\n const failGracefully = this.config_.dash.xlinkFailGracefully;\n const xlinkOperation = shaka.dash.MpdUtils.processXlinks(\n mpd, this.config_.retryParameters, failGracefully, finalManifestUri,\n this.playerInterface_.networkingEngine);\n this.operationManager_.manage(xlinkOperation);\n const finalMpd = await xlinkOperation.promise;\n return this.processManifest_(finalMpd, finalManifestUri);\n }\n\n\n /**\n * Takes a formatted MPD and converts it into a manifest.\n *\n * @param {!shaka.extern.xml.Node} mpd\n * @param {string} finalManifestUri The final manifest URI, which may\n * differ from this.manifestUri_ if there has been a redirect.\n * @return {!Promise}\n * @private\n */\n async processManifest_(mpd, finalManifestUri) {\n const TXml = shaka.util.TXml;\n\n goog.asserts.assert(this.config_,\n 'Must call configure() before processManifest_()!');\n\n if (this.contentSteeringManager_) {\n this.contentSteeringManager_.clearPreviousLocations();\n }\n\n // Get any Location elements. This will update the manifest location and\n // the base URI.\n /** @type {!Array.} */\n let manifestBaseUris = [finalManifestUri];\n /** @type {!Array.} */\n const locations = [];\n /** @type {!Map.} */\n const locationsMapping = new Map();\n const locationsObjs = TXml.findChildren(mpd, 'Location');\n for (const locationsObj of locationsObjs) {\n const serviceLocation = locationsObj.attributes['serviceLocation'];\n const uri = TXml.getContents(locationsObj);\n if (!uri) {\n continue;\n }\n const finalUri = shaka.util.ManifestParserUtils.resolveUris(\n manifestBaseUris, [uri])[0];\n if (serviceLocation) {\n if (this.contentSteeringManager_) {\n this.contentSteeringManager_.addLocation(\n 'Location', serviceLocation, finalUri);\n } else {\n locationsMapping.set(serviceLocation, finalUri);\n }\n }\n locations.push(finalUri);\n }\n if (this.contentSteeringManager_) {\n const steeringlocations = this.contentSteeringManager_.getLocations(\n 'Location', /* ignoreBaseUrls= */ true);\n if (steeringlocations.length > 0) {\n this.manifestUris_ = steeringlocations;\n manifestBaseUris = steeringlocations;\n }\n } else if (locations.length) {\n this.manifestUris_ = locations;\n manifestBaseUris = locations;\n }\n\n this.manifestPatchContext_.mpdId = mpd.attributes['id'] || '';\n this.manifestPatchContext_.publishTime =\n TXml.parseAttr(mpd, 'publishTime', TXml.parseDate) || 0;\n this.patchLocationNodes_ = TXml.findChildren(mpd, 'PatchLocation');\n\n let contentSteeringPromise = Promise.resolve();\n\n const contentSteering = TXml.findChild(mpd, 'ContentSteering');\n if (contentSteering && this.playerInterface_) {\n const defaultPathwayId =\n contentSteering.attributes['defaultServiceLocation'];\n if (!this.contentSteeringManager_) {\n this.contentSteeringManager_ =\n new shaka.util.ContentSteeringManager(this.playerInterface_);\n this.contentSteeringManager_.configure(this.config_);\n this.contentSteeringManager_.setManifestType(\n shaka.media.ManifestParser.DASH);\n this.contentSteeringManager_.setBaseUris(manifestBaseUris);\n this.contentSteeringManager_.setDefaultPathwayId(defaultPathwayId);\n const uri = TXml.getContents(contentSteering);\n if (uri) {\n const queryBeforeStart =\n TXml.parseAttr(contentSteering, 'queryBeforeStart',\n TXml.parseBoolean, /* defaultValue= */ false);\n if (queryBeforeStart) {\n contentSteeringPromise =\n this.contentSteeringManager_.requestInfo(uri);\n } else {\n this.contentSteeringManager_.requestInfo(uri);\n }\n }\n } else {\n this.contentSteeringManager_.setBaseUris(manifestBaseUris);\n this.contentSteeringManager_.setDefaultPathwayId(defaultPathwayId);\n }\n for (const serviceLocation of locationsMapping.keys()) {\n const uri = locationsMapping.get(serviceLocation);\n this.contentSteeringManager_.addLocation(\n 'Location', serviceLocation, uri);\n }\n }\n\n const uriObjs = TXml.findChildren(mpd, 'BaseURL');\n let someLocationValid = false;\n if (this.contentSteeringManager_) {\n for (const uriObj of uriObjs) {\n const serviceLocation = uriObj.attributes['serviceLocation'];\n const uri = TXml.getContents(uriObj);\n if (serviceLocation && uri) {\n this.contentSteeringManager_.addLocation(\n 'BaseURL', serviceLocation, uri);\n someLocationValid = true;\n }\n }\n }\n this.lastCalculatedBaseUris_ = null;\n if (!someLocationValid || !this.contentSteeringManager_) {\n const uris = uriObjs.map(TXml.getContents);\n this.lastCalculatedBaseUris_ = shaka.util.ManifestParserUtils.resolveUris(\n manifestBaseUris, uris);\n }\n\n const getBaseUris = () => {\n if (this.contentSteeringManager_ && someLocationValid) {\n return this.contentSteeringManager_.getLocations('BaseURL');\n }\n if (this.lastCalculatedBaseUris_) {\n return this.lastCalculatedBaseUris_;\n }\n return [];\n };\n\n this.manifestPatchContext_.getBaseUris = getBaseUris;\n\n let availabilityTimeOffset = 0;\n if (uriObjs && uriObjs.length) {\n availabilityTimeOffset = TXml.parseAttr(uriObjs[0],\n 'availabilityTimeOffset', TXml.parseFloat) || 0;\n }\n this.manifestPatchContext_.availabilityTimeOffset = availabilityTimeOffset;\n\n const ignoreMinBufferTime = this.config_.dash.ignoreMinBufferTime;\n let minBufferTime = 0;\n if (!ignoreMinBufferTime) {\n minBufferTime =\n TXml.parseAttr(mpd, 'minBufferTime', TXml.parseDuration) || 0;\n }\n\n this.updatePeriod_ = /** @type {number} */ (TXml.parseAttr(\n mpd, 'minimumUpdatePeriod', TXml.parseDuration, -1));\n\n const presentationStartTime = TXml.parseAttr(\n mpd, 'availabilityStartTime', TXml.parseDate);\n let segmentAvailabilityDuration = TXml.parseAttr(\n mpd, 'timeShiftBufferDepth', TXml.parseDuration);\n\n const ignoreSuggestedPresentationDelay =\n this.config_.dash.ignoreSuggestedPresentationDelay;\n let suggestedPresentationDelay = null;\n if (!ignoreSuggestedPresentationDelay) {\n suggestedPresentationDelay = TXml.parseAttr(\n mpd, 'suggestedPresentationDelay', TXml.parseDuration);\n }\n\n const ignoreMaxSegmentDuration =\n this.config_.dash.ignoreMaxSegmentDuration;\n let maxSegmentDuration = null;\n if (!ignoreMaxSegmentDuration) {\n maxSegmentDuration = TXml.parseAttr(\n mpd, 'maxSegmentDuration', TXml.parseDuration);\n }\n const mpdType = mpd.attributes['type'] || 'static';\n\n if (this.manifest_ && this.manifest_.presentationTimeline) {\n this.isTransitionFromDynamicToStatic_ =\n this.manifest_.presentationTimeline.isLive() && mpdType == 'static';\n }\n\n this.manifestPatchContext_.type = mpdType;\n /** @type {!shaka.media.PresentationTimeline} */\n let presentationTimeline;\n if (this.manifest_) {\n presentationTimeline = this.manifest_.presentationTimeline;\n\n // Before processing an update, evict from all segment indexes. Some of\n // them may not get updated otherwise if their corresponding Period\n // element has been dropped from the manifest since the last update.\n // Without this, playback will still work, but this is necessary to\n // maintain conditions that we assert on for multi-Period content.\n // This gives us confidence that our state is maintained correctly, and\n // that the complex logic of multi-Period eviction and period-flattening\n // is correct. See also:\n // https://github.com/shaka-project/shaka-player/issues/3169#issuecomment-823580634\n for (const stream of Object.values(this.streamMap_)) {\n if (stream.segmentIndex) {\n stream.segmentIndex.evict(\n presentationTimeline.getSegmentAvailabilityStart());\n }\n }\n } else {\n // DASH IOP v3.0 suggests using a default delay between minBufferTime\n // and timeShiftBufferDepth. This is literally the range of all\n // feasible choices for the value. Nothing older than\n // timeShiftBufferDepth is still available, and anything less than\n // minBufferTime will cause buffering issues.\n //\n // We have decided that our default will be the configured value, or\n // 1.5 * minBufferTime if not configured. This is fairly conservative.\n // Content providers should provide a suggestedPresentationDelay whenever\n // possible to optimize the live streaming experience.\n const defaultPresentationDelay =\n this.config_.defaultPresentationDelay || minBufferTime * 1.5;\n const presentationDelay = suggestedPresentationDelay != null ?\n suggestedPresentationDelay : defaultPresentationDelay;\n presentationTimeline = new shaka.media.PresentationTimeline(\n presentationStartTime, presentationDelay,\n this.config_.dash.autoCorrectDrift);\n }\n\n presentationTimeline.setStatic(mpdType == 'static');\n\n const isLive = presentationTimeline.isLive();\n\n // If it's live, we check for an override.\n if (isLive && !isNaN(this.config_.availabilityWindowOverride)) {\n segmentAvailabilityDuration = this.config_.availabilityWindowOverride;\n }\n\n // If it's null, that means segments are always available. This is always\n // the case for VOD, and sometimes the case for live.\n if (segmentAvailabilityDuration == null) {\n segmentAvailabilityDuration = Infinity;\n }\n\n presentationTimeline.setSegmentAvailabilityDuration(\n segmentAvailabilityDuration);\n\n const profiles = mpd.attributes['profiles'] || '';\n this.manifestPatchContext_.profiles = profiles.split(',');\n\n /** @type {shaka.dash.DashParser.Context} */\n const context = {\n // Don't base on updatePeriod_ since emsg boxes can cause manifest\n // updates.\n dynamic: mpdType != 'static',\n presentationTimeline: presentationTimeline,\n period: null,\n periodInfo: null,\n adaptationSet: null,\n representation: null,\n bandwidth: 0,\n indexRangeWarningGiven: false,\n availabilityTimeOffset: availabilityTimeOffset,\n mediaPresentationDuration: null,\n profiles: profiles.split(','),\n roles: null,\n urlParams: () => '',\n };\n\n this.gapCount_ = 0;\n const periodsAndDuration = this.parsePeriods_(\n context, getBaseUris, mpd, /* newPeriod= */ false);\n const duration = periodsAndDuration.duration;\n const periods = periodsAndDuration.periods;\n\n if ((mpdType == 'static' && !this.isTransitionFromDynamicToStatic_) ||\n !periodsAndDuration.durationDerivedFromPeriods) {\n // Ignore duration calculated from Period lengths if this is dynamic.\n presentationTimeline.setDuration(duration || Infinity);\n }\n\n // The segments are available earlier than the availability start time.\n // If the stream is low latency and the user has not configured the\n // lowLatencyMode, but if it has been configured to activate the\n // lowLatencyMode if a stream of this type is detected, we automatically\n // activate the lowLatencyMode.\n if (this.isLowLatency_ && !this.lowLatencyMode_) {\n const autoLowLatencyMode = this.playerInterface_.isAutoLowLatencyMode();\n if (autoLowLatencyMode) {\n this.playerInterface_.enableLowLatencyMode();\n this.lowLatencyMode_ = this.playerInterface_.isLowLatencyMode();\n }\n }\n\n if (this.lowLatencyMode_) {\n presentationTimeline.setAvailabilityTimeOffset(\n this.minTotalAvailabilityTimeOffset_);\n }\n\n // Use @maxSegmentDuration to override smaller, derived values.\n presentationTimeline.notifyMaxSegmentDuration(maxSegmentDuration || 1);\n if (goog.DEBUG && !this.isTransitionFromDynamicToStatic_) {\n presentationTimeline.assertIsValid();\n }\n\n await contentSteeringPromise;\n\n // Set minBufferTime to 0 for low-latency DASH live stream to achieve the\n // best latency\n if (this.lowLatencyMode_) {\n minBufferTime = 0;\n const presentationDelay = suggestedPresentationDelay != null ?\n suggestedPresentationDelay : this.config_.defaultPresentationDelay;\n presentationTimeline.setDelay(presentationDelay);\n }\n\n // These steps are not done on manifest update.\n if (!this.manifest_) {\n await this.periodCombiner_.combinePeriods(periods, context.dynamic);\n\n this.manifest_ = {\n presentationTimeline: presentationTimeline,\n variants: this.periodCombiner_.getVariants(),\n textStreams: this.periodCombiner_.getTextStreams(),\n imageStreams: this.periodCombiner_.getImageStreams(),\n offlineSessionIds: [],\n minBufferTime: minBufferTime || 0,\n sequenceMode: this.config_.dash.sequenceMode,\n ignoreManifestTimestampsInSegmentsMode: false,\n type: shaka.media.ManifestParser.DASH,\n serviceDescription: this.parseServiceDescription_(mpd),\n nextUrl: this.parseMpdChaining_(mpd),\n periodCount: periods.length,\n gapCount: this.gapCount_,\n isLowLatency: this.isLowLatency_,\n startTime: null,\n };\n\n // We only need to do clock sync when we're using presentation start\n // time. This condition also excludes VOD streams.\n if (presentationTimeline.usingPresentationStartTime()) {\n const TXml = shaka.util.TXml;\n const timingElements = TXml.findChildren(mpd, 'UTCTiming');\n const offset = await this.parseUtcTiming_(getBaseUris, timingElements);\n // Detect calls to stop().\n if (!this.playerInterface_) {\n return;\n }\n presentationTimeline.setClockOffset(offset);\n }\n\n // This is the first point where we have a meaningful presentation start\n // time, and we need to tell PresentationTimeline that so that it can\n // maintain consistency from here on.\n presentationTimeline.lockStartTime();\n } else {\n this.manifest_.periodCount = periods.length;\n this.manifest_.gapCount = this.gapCount_;\n await this.postPeriodProcessing_(periods, /* isPatchUpdate= */ false);\n }\n\n // Add text streams to correspond to closed captions. This happens right\n // after period combining, while we still have a direct reference, so that\n // any new streams will appear in the period combiner.\n this.playerInterface_.makeTextStreamsForClosedCaptions(this.manifest_);\n\n this.cleanStreamMap_();\n }\n\n /**\n * Handles common procedures after processing new periods.\n *\n * @param {!Array} periods to be appended\n * @param {boolean} isPatchUpdate does call comes from mpd patch update\n * @private\n */\n async postPeriodProcessing_(periods, isPatchUpdate) {\n await this.periodCombiner_.combinePeriods(periods, true, isPatchUpdate);\n\n // Just update the variants and text streams, which may change as periods\n // are added or removed.\n this.manifest_.variants = this.periodCombiner_.getVariants();\n const textStreams = this.periodCombiner_.getTextStreams();\n if (textStreams.length > 0) {\n this.manifest_.textStreams = textStreams;\n }\n this.manifest_.imageStreams = this.periodCombiner_.getImageStreams();\n\n // Re-filter the manifest. This will check any configured restrictions on\n // new variants, and will pass any new init data to DrmEngine to ensure\n // that key rotation works correctly.\n this.playerInterface_.filter(this.manifest_);\n }\n\n /**\n * Takes a formatted Patch MPD and converts it into a manifest.\n *\n * @param {!shaka.extern.xml.Node} mpd\n * @return {!Promise}\n * @private\n */\n async processPatchManifest_(mpd) {\n const TXml = shaka.util.TXml;\n\n const mpdId = mpd.attributes['mpdId'];\n const originalPublishTime = TXml.parseAttr(mpd, 'originalPublishTime',\n TXml.parseDate);\n if (!mpdId || mpdId !== this.manifestPatchContext_.mpdId ||\n originalPublishTime !== this.manifestPatchContext_.publishTime) {\n // Clean patch location nodes, so it will force full MPD update.\n this.patchLocationNodes_ = [];\n throw new shaka.util.Error(\n shaka.util.Error.Severity.RECOVERABLE,\n shaka.util.Error.Category.MANIFEST,\n shaka.util.Error.Code.DASH_INVALID_PATCH);\n }\n\n /** @type {!Array} */\n const newPeriods = [];\n /** @type {!Array} */\n const periodAdditions = [];\n /** @type {!Set} */\n const modifiedTimelines = new Set();\n\n for (const patchNode of TXml.getChildNodes(mpd)) {\n let handled = true;\n const paths = TXml.parseXpath(patchNode.attributes['sel'] || '');\n const node = paths[paths.length - 1];\n const content = TXml.getContents(patchNode) || '';\n\n if (node.name === 'MPD') {\n if (node.attribute === 'mediaPresentationDuration') {\n const content = TXml.getContents(patchNode) || '';\n this.parsePatchMediaPresentationDurationChange_(content);\n } else if (node.attribute === 'type') {\n this.parsePatchMpdTypeChange_(content);\n } else if (node.attribute === 'publishTime') {\n this.manifestPatchContext_.publishTime = TXml.parseDate(content) || 0;\n } else if (node.attribute === null && patchNode.tagName === 'add') {\n periodAdditions.push(patchNode);\n } else {\n handled = false;\n }\n } else if (node.name === 'PatchLocation') {\n this.updatePatchLocationNodes_(patchNode);\n } else if (node.name === 'Period') {\n if (patchNode.tagName === 'add') {\n periodAdditions.push(patchNode);\n } else if (patchNode.tagName === 'remove' && node.id) {\n this.removePatchPeriod_(node.id);\n }\n } else if (node.name === 'SegmentTemplate') {\n const timelines = this.modifySegmentTemplate_(patchNode);\n for (const timeline of timelines) {\n modifiedTimelines.add(timeline);\n }\n } else if (node.name === 'SegmentTimeline' || node.name === 'S') {\n const timelines = this.modifyTimepoints_(patchNode);\n for (const timeline of timelines) {\n modifiedTimelines.add(timeline);\n }\n } else {\n handled = false;\n }\n if (!handled) {\n shaka.log.warning('Unhandled ' + patchNode.tagName + ' operation',\n patchNode.attributes['sel']);\n }\n }\n\n for (const timeline of modifiedTimelines) {\n this.parsePatchSegment_(timeline);\n }\n\n // Add new periods after extending timelines, as new periods\n // remove context cache of previous periods.\n for (const periodAddition of periodAdditions) {\n newPeriods.push(...this.parsePatchPeriod_(periodAddition));\n }\n\n if (newPeriods.length) {\n this.manifest_.periodCount += newPeriods.length;\n this.manifest_.gapCount = this.gapCount_;\n await this.postPeriodProcessing_(newPeriods, /* isPatchUpdate= */ true);\n }\n if (this.manifestPatchContext_.type == 'static') {\n const duration = this.manifestPatchContext_.mediaPresentationDuration;\n this.manifest_.presentationTimeline.setDuration(duration || Infinity);\n }\n }\n\n /**\n * Handles manifest type changes, this transition is expected to be\n * \"dyanmic\" to \"static\".\n *\n * @param {!string} mpdType\n * @private\n */\n parsePatchMpdTypeChange_(mpdType) {\n this.manifest_.presentationTimeline.setStatic(mpdType == 'static');\n this.manifestPatchContext_.type = mpdType;\n for (const context of this.contextCache_.values()) {\n context.dynamic = mpdType == 'dynamic';\n }\n if (mpdType == 'static') {\n // Manifest is no longer dynamic, so stop live updates.\n this.updatePeriod_ = -1;\n }\n }\n\n /**\n * @param {string} durationString\n * @private\n */\n parsePatchMediaPresentationDurationChange_(durationString) {\n const duration = shaka.util.TXml.parseDuration(durationString);\n if (duration == null) {\n return;\n }\n this.manifestPatchContext_.mediaPresentationDuration = duration;\n for (const context of this.contextCache_.values()) {\n context.mediaPresentationDuration = duration;\n }\n }\n\n /**\n * Ingests a full MPD period element from a patch update\n *\n * @param {!shaka.extern.xml.Node} periods\n * @private\n */\n parsePatchPeriod_(periods) {\n goog.asserts.assert(this.manifestPatchContext_.getBaseUris,\n 'Must provide getBaseUris on manifestPatchContext_');\n\n /** @type {shaka.dash.DashParser.Context} */\n const context = {\n dynamic: this.manifestPatchContext_.type == 'dynamic',\n presentationTimeline: this.manifest_.presentationTimeline,\n period: null,\n periodInfo: null,\n adaptationSet: null,\n representation: null,\n bandwidth: 0,\n indexRangeWarningGiven: false,\n availabilityTimeOffset: this.manifestPatchContext_.availabilityTimeOffset,\n profiles: this.manifestPatchContext_.profiles,\n mediaPresentationDuration:\n this.manifestPatchContext_.mediaPresentationDuration,\n roles: null,\n urlParams: () => '',\n };\n\n const periodsAndDuration = this.parsePeriods_(context,\n this.manifestPatchContext_.getBaseUris, periods, /* newPeriod= */ true);\n\n return periodsAndDuration.periods;\n }\n\n /**\n * @param {string} periodId\n * @private\n */\n removePatchPeriod_(periodId) {\n const SegmentTemplate = shaka.dash.SegmentTemplate;\n this.manifest_.periodCount--;\n for (const contextId of this.contextCache_.keys()) {\n if (contextId.startsWith(periodId)) {\n const context = this.contextCache_.get(contextId);\n SegmentTemplate.removeTimepoints(context);\n this.parsePatchSegment_(contextId);\n this.contextCache_.delete(contextId);\n }\n }\n const newPeriods = this.lastManifestUpdatePeriodIds_.filter((pID) => {\n return pID !== periodId;\n });\n this.lastManifestUpdatePeriodIds_ = newPeriods;\n }\n\n /**\n * @param {!Array} paths\n * @return {!Array}\n * @private\n */\n getContextIdsFromPath_(paths) {\n let periodId = '';\n let adaptationSetId = '';\n let adaptationSetPosition = -1;\n let representationId = '';\n for (const node of paths) {\n if (node.name === 'Period') {\n periodId = node.id;\n } else if (node.name === 'AdaptationSet') {\n adaptationSetId = node.id;\n if (node.position !== null) {\n adaptationSetPosition = node.position;\n }\n } else if (node.name === 'Representation') {\n representationId = node.id;\n }\n }\n\n /** @type {!Array} */\n const contextIds = [];\n\n if (representationId) {\n contextIds.push(periodId + ',' + representationId);\n } else {\n if (adaptationSetId) {\n for (const context of this.contextCache_.values()) {\n if (context.period.id === periodId &&\n context.adaptationSet.id === adaptationSetId &&\n context.representation.id) {\n contextIds.push(periodId + ',' + context.representation.id);\n }\n }\n } else {\n if (adaptationSetPosition > -1) {\n for (const context of this.contextCache_.values()) {\n if (context.period.id === periodId &&\n context.adaptationSet.position === adaptationSetPosition &&\n context.representation.id) {\n contextIds.push(periodId + ',' + context.representation.id);\n }\n }\n }\n }\n }\n\n return contextIds;\n }\n\n /**\n * Modifies SegmentTemplate based on MPD patch.\n *\n * @param {!shaka.extern.xml.Node} patchNode\n * @return {!Array} context ids with updated timeline\n * @private\n */\n modifySegmentTemplate_(patchNode) {\n const TXml = shaka.util.TXml;\n const paths = TXml.parseXpath(patchNode.attributes['sel'] || '');\n const lastPath = paths[paths.length - 1];\n if (!lastPath.attribute) {\n return [];\n }\n const contextIds = this.getContextIdsFromPath_(paths);\n const content = TXml.getContents(patchNode) || '';\n\n for (const contextId of contextIds) {\n /** @type {shaka.dash.DashParser.Context} */\n const context = this.contextCache_.get(contextId);\n goog.asserts.assert(context && context.representation.segmentTemplate,\n 'cannot modify segment template');\n TXml.modifyNodeAttribute(context.representation.segmentTemplate,\n patchNode.tagName, lastPath.attribute, content);\n }\n return contextIds;\n }\n\n /**\n * Ingests Patch MPD segments into timeline.\n *\n * @param {!shaka.extern.xml.Node} patchNode\n * @return {!Array} context ids with updated timeline\n * @private\n */\n modifyTimepoints_(patchNode) {\n const TXml = shaka.util.TXml;\n const SegmentTemplate = shaka.dash.SegmentTemplate;\n\n const paths = TXml.parseXpath(patchNode.attributes['sel'] || '');\n const contextIds = this.getContextIdsFromPath_(paths);\n\n for (const contextId of contextIds) {\n /** @type {shaka.dash.DashParser.Context} */\n const context = this.contextCache_.get(contextId);\n SegmentTemplate.modifyTimepoints(context, patchNode);\n }\n return contextIds;\n }\n\n /**\n * Parses modified segments.\n *\n * @param {string} contextId\n * @private\n */\n parsePatchSegment_(contextId) {\n /** @type {shaka.dash.DashParser.Context} */\n const context = this.contextCache_.get(contextId);\n\n const currentStream = this.streamMap_[contextId];\n goog.asserts.assert(currentStream, 'stream should exist');\n\n if (currentStream.segmentIndex) {\n currentStream.segmentIndex.evict(\n this.manifest_.presentationTimeline.getSegmentAvailabilityStart());\n }\n\n try {\n const requestSegment = (uris, startByte, endByte, isInit) => {\n return this.requestSegment_(uris, startByte, endByte, isInit);\n };\n // TODO we should obtain lastSegmentNumber if possible\n const streamInfo = shaka.dash.SegmentTemplate.createStreamInfo(\n context, requestSegment, this.streamMap_, /* isUpdate= */ true,\n this.config_.dash.initialSegmentLimit, this.periodDurations_,\n context.representation.aesKey, /* lastSegmentNumber= */ null,\n /* isPatchUpdate= */ true);\n currentStream.createSegmentIndex = async () => {\n if (!currentStream.segmentIndex) {\n currentStream.segmentIndex =\n await streamInfo.generateSegmentIndex();\n }\n };\n } catch (error) {\n const ContentType = shaka.util.ManifestParserUtils.ContentType;\n const contentType = context.representation.contentType;\n const isText = contentType == ContentType.TEXT ||\n contentType == ContentType.APPLICATION;\n const isImage = contentType == ContentType.IMAGE;\n if (!(isText || isImage) ||\n error.code != shaka.util.Error.Code.DASH_NO_SEGMENT_INFO) {\n // We will ignore any DASH_NO_SEGMENT_INFO errors for text/image\n throw error;\n }\n }\n }\n\n /**\n * Reads maxLatency and maxPlaybackRate properties from service\n * description element.\n *\n * @param {!shaka.extern.xml.Node} mpd\n * @return {?shaka.extern.ServiceDescription}\n * @private\n */\n parseServiceDescription_(mpd) {\n const TXml = shaka.util.TXml;\n const elem = TXml.findChild(mpd, 'ServiceDescription');\n\n if (!elem ) {\n return null;\n }\n\n const latencyNode = TXml.findChild(elem, 'Latency');\n const playbackRateNode = TXml.findChild(elem, 'PlaybackRate');\n\n if (!latencyNode && !playbackRateNode) {\n return null;\n }\n\n const description = {};\n\n if (latencyNode) {\n if ('target' in latencyNode.attributes) {\n description.targetLatency =\n parseInt(latencyNode.attributes['target'], 10) / 1000;\n }\n if ('max' in latencyNode.attributes) {\n description.maxLatency =\n parseInt(latencyNode.attributes['max'], 10) / 1000;\n }\n if ('min' in latencyNode.attributes) {\n description.minLatency =\n parseInt(latencyNode.attributes['min'], 10) / 1000;\n }\n }\n\n if (playbackRateNode) {\n if ('max' in playbackRateNode.attributes) {\n description.maxPlaybackRate =\n parseFloat(playbackRateNode.attributes['max']);\n }\n if ('min' in playbackRateNode.attributes) {\n description.minPlaybackRate =\n parseFloat(playbackRateNode.attributes['min']);\n }\n }\n\n return description;\n }\n\n /**\n * Reads chaining url.\n *\n * @param {!shaka.extern.xml.Node} mpd\n * @return {?string}\n * @private\n */\n parseMpdChaining_(mpd) {\n const TXml = shaka.util.TXml;\n const supplementalProperties =\n TXml.findChildren(mpd, 'SupplementalProperty');\n\n if (!supplementalProperties.length) {\n return null;\n }\n\n for (const prop of supplementalProperties) {\n const schemeId = prop.attributes['schemeIdUri'];\n if (schemeId == 'urn:mpeg:dash:chaining:2016') {\n return prop.attributes['value'];\n }\n }\n\n return null;\n }\n\n /**\n * Reads and parses the periods from the manifest. This first does some\n * partial parsing so the start and duration is available when parsing\n * children.\n *\n * @param {shaka.dash.DashParser.Context} context\n * @param {function():!Array.} getBaseUris\n * @param {!shaka.extern.xml.Node} mpd\n * @param {!boolean} newPeriod\n * @return {{\n * periods: !Array.,\n * duration: ?number,\n * durationDerivedFromPeriods: boolean\n * }}\n * @private\n */\n parsePeriods_(context, getBaseUris, mpd, newPeriod) {\n const TXml = shaka.util.TXml;\n let presentationDuration = context.mediaPresentationDuration;\n\n if (!presentationDuration) {\n presentationDuration = TXml.parseAttr(\n mpd, 'mediaPresentationDuration', TXml.parseDuration);\n this.manifestPatchContext_.mediaPresentationDuration =\n presentationDuration;\n }\n\n let seekRangeStart = 0;\n if (this.manifest_ && this.manifest_.presentationTimeline &&\n this.isTransitionFromDynamicToStatic_) {\n seekRangeStart = this.manifest_.presentationTimeline.getSeekRangeStart();\n }\n\n const periods = [];\n let prevEnd = seekRangeStart;\n const periodNodes = TXml.findChildren(mpd, 'Period');\n for (let i = 0; i < periodNodes.length; i++) {\n const elem = periodNodes[i];\n const next = periodNodes[i + 1];\n let start = /** @type {number} */ (\n TXml.parseAttr(elem, 'start', TXml.parseDuration, prevEnd));\n const periodId = elem.attributes['id'];\n const givenDuration =\n TXml.parseAttr(elem, 'duration', TXml.parseDuration);\n start = (i == 0 && start == 0 && this.isTransitionFromDynamicToStatic_) ?\n seekRangeStart : start;\n\n let periodDuration = null;\n if (next) {\n // \"The difference between the start time of a Period and the start time\n // of the following Period is the duration of the media content\n // represented by this Period.\"\n const nextStart =\n TXml.parseAttr(next, 'start', TXml.parseDuration);\n if (nextStart != null) {\n periodDuration = nextStart - start + seekRangeStart;\n }\n } else if (presentationDuration != null) {\n // \"The Period extends until the Period.start of the next Period, or\n // until the end of the Media Presentation in the case of the last\n // Period.\"\n periodDuration = presentationDuration - start + seekRangeStart;\n }\n\n const threshold =\n shaka.util.ManifestParserUtils.GAP_OVERLAP_TOLERANCE_SECONDS;\n if (periodDuration && givenDuration &&\n Math.abs(periodDuration - givenDuration) > threshold) {\n shaka.log.warning('There is a gap/overlap between Periods', elem);\n\n // This means it's a gap, the distance between period starts is\n // larger than the period's duration\n if (periodDuration > givenDuration) {\n this.gapCount_++;\n }\n }\n // Only use the @duration in the MPD if we can't calculate it. We should\n // favor the @start of the following Period. This ensures that there\n // aren't gaps between Periods.\n if (periodDuration == null) {\n periodDuration = givenDuration;\n }\n\n /**\n * This is to improve robustness when the player observes manifest with\n * past periods that are inconsistent to previous ones.\n *\n * This may happen when a CDN or proxy server switches its upstream from\n * one encoder to another redundant encoder.\n *\n * Skip periods that match all of the following criteria:\n * - Start time is earlier than latest period start time ever seen\n * - Period ID is never seen in the previous manifest\n * - Not the last period in the manifest\n *\n * Periods that meet the aforementioned criteria are considered invalid\n * and should be safe to discard.\n */\n\n if (this.largestPeriodStartTime_ !== null &&\n periodId !== null && start !== null &&\n start < this.largestPeriodStartTime_ &&\n !this.lastManifestUpdatePeriodIds_.includes(periodId) &&\n i + 1 != periodNodes.length) {\n shaka.log.debug(\n `Skipping Period with ID ${periodId} as its start time is smaller` +\n ' than the largest period start time that has been seen, and ID ' +\n 'is unseen before');\n continue;\n }\n\n\n // Save maximum period start time if it is the last period\n if (start !== null &&\n (this.largestPeriodStartTime_ === null ||\n start > this.largestPeriodStartTime_)) {\n this.largestPeriodStartTime_ = start;\n }\n\n // Parse child nodes.\n const info = {\n start: start,\n duration: periodDuration,\n node: elem,\n isLastPeriod: periodDuration == null || !next,\n };\n const period = this.parsePeriod_(context, getBaseUris, info);\n periods.push(period);\n\n if (context.period.id && periodDuration) {\n this.periodDurations_[context.period.id] = periodDuration;\n }\n\n if (periodDuration == null) {\n if (next) {\n // If the duration is still null and we aren't at the end, then we\n // will skip any remaining periods.\n shaka.log.warning(\n 'Skipping Period', i + 1, 'and any subsequent Periods:', 'Period',\n i + 1, 'does not have a valid start time.', next);\n }\n\n // The duration is unknown, so the end is unknown.\n prevEnd = null;\n break;\n }\n\n prevEnd = start + periodDuration;\n } // end of period parsing loop\n\n if (newPeriod) {\n // append new period from the patch manifest\n for (const el of periods) {\n const periodID = el.id;\n if (!this.lastManifestUpdatePeriodIds_.includes(periodID)) {\n this.lastManifestUpdatePeriodIds_.push(periodID);\n }\n }\n } else {\n // Replace previous seen periods with the current one.\n this.lastManifestUpdatePeriodIds_ = periods.map((el) => el.id);\n }\n\n if (presentationDuration != null) {\n if (prevEnd != null) {\n const threshold =\n shaka.util.ManifestParserUtils.GAP_OVERLAP_TOLERANCE_SECONDS;\n const diference = prevEnd - seekRangeStart - presentationDuration;\n if (Math.abs(diference) > threshold) {\n shaka.log.warning(\n '@mediaPresentationDuration does not match the total duration ',\n 'of all Periods.');\n // Assume @mediaPresentationDuration is correct.\n }\n }\n return {\n periods: periods,\n duration: presentationDuration + seekRangeStart,\n durationDerivedFromPeriods: false,\n };\n } else {\n return {\n periods: periods,\n duration: prevEnd,\n durationDerivedFromPeriods: true,\n };\n }\n }\n\n /**\n * Clean StreamMap Object to remove reference of deleted Stream Object\n * @private\n */\n cleanStreamMap_() {\n const oldPeriodIds = Object.keys(this.indexStreamMap_);\n const diffPeriodsIDs = oldPeriodIds.filter((pId) => {\n return !this.lastManifestUpdatePeriodIds_.includes(pId);\n });\n for (const pId of diffPeriodsIDs) {\n let shouldDeleteIndex = true;\n for (const contextId of this.indexStreamMap_[pId]) {\n const stream = this.streamMap_[contextId];\n if (stream.segmentIndex && !stream.segmentIndex.isEmpty()) {\n shouldDeleteIndex = false;\n continue;\n }\n if (this.periodCombiner_) {\n this.periodCombiner_.deleteStream(this.streamMap_[contextId], pId);\n }\n delete this.streamMap_[contextId];\n }\n if (shouldDeleteIndex) {\n delete this.indexStreamMap_[pId];\n }\n }\n }\n\n /**\n * Parses a Period XML element. Unlike the other parse methods, this is not\n * given the Node; it is given a PeriodInfo structure. Also, partial parsing\n * was done before this was called so start and duration are valid.\n *\n * @param {shaka.dash.DashParser.Context} context\n * @param {function():!Array.} getBaseUris\n * @param {shaka.dash.DashParser.PeriodInfo} periodInfo\n * @return {shaka.extern.Period}\n * @private\n */\n parsePeriod_(context, getBaseUris, periodInfo) {\n const Functional = shaka.util.Functional;\n const TXml = shaka.util.TXml;\n const ContentType = shaka.util.ManifestParserUtils.ContentType;\n\n goog.asserts.assert(periodInfo.node, 'periodInfo.node should exist');\n context.period = this.createFrame_(periodInfo.node, null, getBaseUris);\n context.periodInfo = periodInfo;\n context.period.availabilityTimeOffset = context.availabilityTimeOffset;\n\n // If the period doesn't have an ID, give it one based on its start time.\n if (!context.period.id) {\n shaka.log.info(\n 'No Period ID given for Period with start time ' + periodInfo.start +\n ', Assigning a default');\n context.period.id = '__shaka_period_' + periodInfo.start;\n }\n\n const eventStreamNodes =\n TXml.findChildren(periodInfo.node, 'EventStream');\n const availabilityStart =\n context.presentationTimeline.getSegmentAvailabilityStart();\n\n for (const node of eventStreamNodes) {\n this.parseEventStream_(\n periodInfo.start, periodInfo.duration, node, availabilityStart);\n }\n\n\n const supplementalProperties =\n TXml.findChildren(periodInfo.node, 'SupplementalProperty');\n for (const prop of supplementalProperties) {\n const schemeId = prop.attributes['schemeIdUri'];\n if (schemeId == 'urn:mpeg:dash:urlparam:2014') {\n const urlParams = this.getURLParametersFunction_(prop);\n if (urlParams) {\n context.urlParams = urlParams;\n }\n }\n }\n\n const adaptationSetNodes =\n TXml.findChildren(periodInfo.node, 'AdaptationSet');\n const adaptationSets = adaptationSetNodes\n .map((node, position) =>\n this.parseAdaptationSet_(context, position, node))\n .filter(Functional.isNotNull);\n\n // For dynamic manifests, we use rep IDs internally, and they must be\n // unique.\n if (context.dynamic) {\n const ids = [];\n for (const set of adaptationSets) {\n for (const id of set.representationIds) {\n ids.push(id);\n }\n }\n\n const uniqueIds = new Set(ids);\n\n if (ids.length != uniqueIds.size) {\n throw new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.MANIFEST,\n shaka.util.Error.Code.DASH_DUPLICATE_REPRESENTATION_ID);\n }\n }\n\n const normalAdaptationSets = adaptationSets\n .filter((as) => { return !as.trickModeFor; });\n\n const trickModeAdaptationSets = adaptationSets\n .filter((as) => { return as.trickModeFor; });\n\n // Attach trick mode tracks to normal tracks.\n if (!this.config_.disableIFrames) {\n for (const trickModeSet of trickModeAdaptationSets) {\n const targetIds = trickModeSet.trickModeFor.split(' ');\n for (const normalSet of normalAdaptationSets) {\n if (targetIds.includes(normalSet.id)) {\n for (const stream of normalSet.streams) {\n shaka.util.StreamUtils.setBetterIFrameStream(\n stream, trickModeSet.streams);\n }\n }\n }\n }\n }\n\n const audioStreams = this.getStreamsFromSets_(\n this.config_.disableAudio,\n normalAdaptationSets,\n ContentType.AUDIO);\n const videoStreams = this.getStreamsFromSets_(\n this.config_.disableVideo,\n normalAdaptationSets,\n ContentType.VIDEO);\n const textStreams = this.getStreamsFromSets_(\n this.config_.disableText,\n normalAdaptationSets,\n ContentType.TEXT);\n const imageStreams = this.getStreamsFromSets_(\n this.config_.disableThumbnails,\n normalAdaptationSets,\n ContentType.IMAGE);\n\n if (videoStreams.length === 0 && audioStreams.length === 0) {\n throw new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.MANIFEST,\n shaka.util.Error.Code.DASH_EMPTY_PERIOD,\n );\n }\n\n return {\n id: context.period.id,\n audioStreams,\n videoStreams,\n textStreams,\n imageStreams,\n };\n }\n\n /**\n * Gets the streams from the given sets or returns an empty array if disabled\n * or no streams are found.\n * @param {boolean} disabled\n * @param {!Array.} adaptationSets\n * @param {string} contentType\n @private\n */\n getStreamsFromSets_(disabled, adaptationSets, contentType) {\n if (disabled || !adaptationSets.length) {\n return [];\n }\n\n return adaptationSets.reduce((all, part) => {\n if (part.contentType != contentType) {\n return all;\n }\n\n all.push(...part.streams);\n return all;\n }, []);\n }\n\n /**\n * Parses an AdaptationSet XML element.\n *\n * @param {shaka.dash.DashParser.Context} context\n * @param {number} position\n * @param {!shaka.extern.xml.Node} elem The AdaptationSet element.\n * @return {?shaka.dash.DashParser.AdaptationInfo}\n * @private\n */\n parseAdaptationSet_(context, position, elem) {\n const TXml = shaka.util.TXml;\n const Functional = shaka.util.Functional;\n const ManifestParserUtils = shaka.util.ManifestParserUtils;\n const ContentType = ManifestParserUtils.ContentType;\n const ContentProtection = shaka.dash.ContentProtection;\n\n context.adaptationSet = this.createFrame_(elem, context.period, null);\n context.adaptationSet.position = position;\n\n let main = false;\n const roleElements = TXml.findChildren(elem, 'Role');\n const roleValues = roleElements.map((role) => {\n return role.attributes['value'];\n }).filter(Functional.isNotNull);\n\n // Default kind for text streams is 'subtitle' if unspecified in the\n // manifest.\n let kind = undefined;\n const isText = context.adaptationSet.contentType == ContentType.TEXT;\n if (isText) {\n kind = ManifestParserUtils.TextStreamKind.SUBTITLE;\n }\n\n for (const roleElement of roleElements) {\n const scheme = roleElement.attributes['schemeIdUri'];\n if (scheme == null || scheme == 'urn:mpeg:dash:role:2011') {\n // These only apply for the given scheme, but allow them to be specified\n // if there is no scheme specified.\n // See: DASH section 5.8.5.5\n const value = roleElement.attributes['value'];\n switch (value) {\n case 'main':\n main = true;\n break;\n case 'caption':\n case 'subtitle':\n kind = value;\n break;\n }\n }\n }\n\n // Parallel for HLS VIDEO-RANGE as defined in DASH-IF IOP v4.3 6.2.5.1.\n let videoRange;\n\n let colorGamut;\n\n // Ref. https://dashif.org/docs/DASH-IF-IOP-v4.3.pdf\n // If signaled, a Supplemental or Essential Property descriptor\n // shall be used, with the schemeIdUri set to\n // urn:mpeg:mpegB:cicp: as defined in\n // ISO/IEC 23001-8 [49] and one of the\n // following: ColourPrimaries, TransferCharacteristics,\n // or MatrixCoefficients.\n const scheme = 'urn:mpeg:mpegB:cicp';\n const transferCharacteristicsScheme = `${scheme}:TransferCharacteristics`;\n const colourPrimariesScheme = `${scheme}:ColourPrimaries`;\n const matrixCoefficientsScheme = `${scheme}:MatrixCoefficients`;\n\n const getVideoRangeFromTransferCharacteristicCICP = (cicp) => {\n switch (cicp) {\n case 1:\n case 6:\n case 13:\n case 14:\n case 15:\n return 'SDR';\n case 16:\n return 'PQ';\n case 18:\n return 'HLG';\n }\n return undefined;\n };\n\n const getColorGamutFromColourPrimariesCICP = (cicp) => {\n switch (cicp) {\n case 1:\n case 5:\n case 6:\n case 7:\n return 'srgb';\n case 9:\n return 'rec2020';\n case 11:\n case 12:\n return 'p3';\n }\n return undefined;\n };\n\n const parseFont = (prop) => {\n const fontFamily = prop.attributes['dvb:fontFamily'];\n const fontUrl = prop.attributes['dvb:url'];\n if (fontFamily && fontUrl) {\n const uris = shaka.util.ManifestParserUtils.resolveUris(\n context.adaptationSet.getBaseUris(), [fontUrl],\n context.urlParams());\n this.playerInterface_.addFont(fontFamily, uris[0]);\n }\n };\n\n const essentialProperties =\n TXml.findChildren(elem, 'EssentialProperty');\n // ID of real AdaptationSet if this is a trick mode set:\n let trickModeFor = null;\n let isFastSwitching = false;\n let adaptationSetUrlParams = null;\n let unrecognizedEssentialProperty = false;\n for (const prop of essentialProperties) {\n const schemeId = prop.attributes['schemeIdUri'];\n if (schemeId == 'http://dashif.org/guidelines/trickmode') {\n trickModeFor = prop.attributes['value'];\n } else if (schemeId == transferCharacteristicsScheme) {\n videoRange = getVideoRangeFromTransferCharacteristicCICP(\n parseInt(prop.attributes['value'], 10),\n );\n } else if (schemeId == colourPrimariesScheme) {\n colorGamut = getColorGamutFromColourPrimariesCICP(\n parseInt(prop.attributes['value'], 10),\n );\n } else if (schemeId == matrixCoefficientsScheme) {\n continue;\n } else if (schemeId == 'urn:mpeg:dash:ssr:2023' &&\n this.config_.dash.enableFastSwitching) {\n isFastSwitching = true;\n } else if (schemeId == 'urn:dvb:dash:fontdownload:2014') {\n parseFont(prop);\n } else if (schemeId == 'urn:mpeg:dash:urlparam:2014') {\n adaptationSetUrlParams = this.getURLParametersFunction_(prop);\n if (!adaptationSetUrlParams) {\n unrecognizedEssentialProperty = true;\n }\n } else {\n unrecognizedEssentialProperty = true;\n }\n }\n\n // According to DASH spec (2014) section 5.8.4.8, \"the successful processing\n // of the descriptor is essential to properly use the information in the\n // parent element\". According to DASH IOP v3.3, section 3.3.4, \"if the\n // scheme or the value\" for EssentialProperty is not recognized, \"the DASH\n // client shall ignore the parent element.\"\n if (unrecognizedEssentialProperty) {\n // Stop parsing this AdaptationSet and let the caller filter out the\n // nulls.\n return null;\n }\n\n let lastSegmentNumber = null;\n\n const supplementalProperties =\n TXml.findChildren(elem, 'SupplementalProperty');\n for (const prop of supplementalProperties) {\n const schemeId = prop.attributes['schemeIdUri'];\n if (schemeId == 'http://dashif.org/guidelines/last-segment-number') {\n lastSegmentNumber = parseInt(prop.attributes['value'], 10) - 1;\n } else if (schemeId == transferCharacteristicsScheme) {\n videoRange = getVideoRangeFromTransferCharacteristicCICP(\n parseInt(prop.attributes['value'], 10),\n );\n } else if (schemeId == colourPrimariesScheme) {\n colorGamut = getColorGamutFromColourPrimariesCICP(\n parseInt(prop.attributes['value'], 10),\n );\n } else if (schemeId == 'urn:dvb:dash:fontdownload:2014') {\n parseFont(prop);\n } else if (schemeId == 'urn:mpeg:dash:urlparam:2014') {\n adaptationSetUrlParams = this.getURLParametersFunction_(prop);\n }\n }\n\n if (adaptationSetUrlParams) {\n context.urlParams = adaptationSetUrlParams;\n }\n\n const accessibilities = TXml.findChildren(elem, 'Accessibility');\n const LanguageUtils = shaka.util.LanguageUtils;\n const closedCaptions = new Map();\n /** @type {?shaka.media.ManifestParser.AccessibilityPurpose} */\n let accessibilityPurpose;\n for (const prop of accessibilities) {\n const schemeId = prop.attributes['schemeIdUri'];\n const value = prop.attributes['value'];\n if (schemeId == 'urn:scte:dash:cc:cea-608:2015' &&\n !this.config_.disableText) {\n let channelId = 1;\n if (value != null) {\n const channelAssignments = value.split(';');\n for (const captionStr of channelAssignments) {\n let channel;\n let language;\n // Some closed caption descriptions have channel number and\n // language (\"CC1=eng\") others may only have language (\"eng,spa\").\n if (!captionStr.includes('=')) {\n // When the channel assignemnts are not explicitly provided and\n // there are only 2 values provided, it is highly likely that the\n // assignments are CC1 and CC3 (most commonly used CC streams).\n // Otherwise, cycle through all channels arbitrarily (CC1 - CC4)\n // in order of provided langs.\n channel = `CC${channelId}`;\n if (channelAssignments.length == 2) {\n channelId += 2;\n } else {\n channelId ++;\n }\n language = captionStr;\n } else {\n const channelAndLanguage = captionStr.split('=');\n // The channel info can be '1' or 'CC1'.\n // If the channel info only has channel number(like '1'), add 'CC'\n // as prefix so that it can be a full channel id (like 'CC1').\n channel = channelAndLanguage[0].startsWith('CC') ?\n channelAndLanguage[0] : `CC${channelAndLanguage[0]}`;\n\n // 3 letters (ISO 639-2). In b/187442669, we saw a blank string\n // (CC2=;CC3=), so default to \"und\" (the code for \"undetermined\").\n language = channelAndLanguage[1] || 'und';\n }\n closedCaptions.set(channel, LanguageUtils.normalize(language));\n }\n } else {\n // If channel and language information has not been provided, assign\n // 'CC1' as channel id and 'und' as language info.\n closedCaptions.set('CC1', 'und');\n }\n } else if (schemeId == 'urn:scte:dash:cc:cea-708:2015' &&\n !this.config_.disableText) {\n let serviceNumber = 1;\n if (value != null) {\n for (const captionStr of value.split(';')) {\n let service;\n let language;\n // Similar to CEA-608, it is possible that service # assignments\n // are not explicitly provided e.g. \"eng;deu;swe\" In this case,\n // we just cycle through the services for each language one by one.\n if (!captionStr.includes('=')) {\n service = `svc${serviceNumber}`;\n serviceNumber ++;\n language = captionStr;\n } else {\n // Otherwise, CEA-708 caption values take the form \"\n // 1=lang:eng;2=lang:deu\" i.e. serviceNumber=lang:threelettercode.\n const serviceAndLanguage = captionStr.split('=');\n service = `svc${serviceAndLanguage[0]}`;\n\n // The language info can be different formats, lang:eng',\n // or 'lang:eng,war:1,er:1'. Extract the language info.\n language = serviceAndLanguage[1].split(',')[0].split(':').pop();\n }\n closedCaptions.set(service, LanguageUtils.normalize(language));\n }\n } else {\n // If service and language information has not been provided, assign\n // 'svc1' as service number and 'und' as language info.\n closedCaptions.set('svc1', 'und');\n }\n } else if (schemeId == 'urn:mpeg:dash:role:2011') {\n // See DASH IOP 3.9.2 Table 4.\n if (value != null) {\n roleValues.push(value);\n if (value == 'captions') {\n kind = ManifestParserUtils.TextStreamKind.CLOSED_CAPTION;\n }\n }\n } else if (schemeId == 'urn:tva:metadata:cs:AudioPurposeCS:2007') {\n // See DASH DVB Document A168 Rev.6 Table 5.\n if (value == '1') {\n accessibilityPurpose =\n shaka.media.ManifestParser.AccessibilityPurpose.VISUALLY_IMPAIRED;\n } else if (value == '2') {\n accessibilityPurpose =\n shaka.media.ManifestParser.AccessibilityPurpose.HARD_OF_HEARING;\n }\n }\n }\n\n const contentProtectionElems =\n TXml.findChildren(elem, 'ContentProtection');\n const contentProtection = ContentProtection.parseFromAdaptationSet(\n contentProtectionElems,\n this.config_.dash.ignoreDrmInfo,\n this.config_.dash.keySystemsByURI);\n\n const language = shaka.util.LanguageUtils.normalize(\n context.adaptationSet.language || 'und');\n\n const label = context.adaptationSet.label;\n\n // Parse Representations into Streams.\n const representations = TXml.findChildren(elem, 'Representation');\n const streams = representations.map((representation) => {\n const parsedRepresentation = this.parseRepresentation_(context,\n contentProtection, kind, language, label, main, roleValues,\n closedCaptions, representation, accessibilityPurpose,\n lastSegmentNumber);\n if (parsedRepresentation) {\n parsedRepresentation.hdr = parsedRepresentation.hdr || videoRange;\n parsedRepresentation.colorGamut =\n parsedRepresentation.colorGamut || colorGamut;\n parsedRepresentation.fastSwitching = isFastSwitching;\n }\n return parsedRepresentation;\n }).filter((s) => !!s);\n\n if (streams.length == 0) {\n const isImage = context.adaptationSet.contentType == ContentType.IMAGE;\n // Ignore empty AdaptationSets if ignoreEmptyAdaptationSet is true\n // or they are for text/image content.\n if (this.config_.dash.ignoreEmptyAdaptationSet || isText || isImage) {\n return null;\n }\n throw new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.MANIFEST,\n shaka.util.Error.Code.DASH_EMPTY_ADAPTATION_SET);\n }\n\n // If AdaptationSet's type is unknown or is ambiguously \"application\",\n // guess based on the information in the first stream. If the attributes\n // mimeType and codecs are split across levels, they will both be inherited\n // down to the stream level by this point, so the stream will have all the\n // necessary information.\n if (!context.adaptationSet.contentType ||\n context.adaptationSet.contentType == ContentType.APPLICATION) {\n const mimeType = streams[0].mimeType;\n const codecs = streams[0].codecs;\n context.adaptationSet.contentType =\n shaka.dash.DashParser.guessContentType_(mimeType, codecs);\n\n for (const stream of streams) {\n stream.type = context.adaptationSet.contentType;\n }\n }\n\n const adaptationId = context.adaptationSet.id ||\n ('__fake__' + this.globalId_++);\n\n for (const stream of streams) {\n // Some DRM license providers require that we have a default\n // key ID from the manifest in the wrapped license request.\n // Thus, it should be put in drmInfo to be accessible to request filters.\n for (const drmInfo of contentProtection.drmInfos) {\n drmInfo.keyIds = drmInfo.keyIds && stream.keyIds ?\n new Set([...drmInfo.keyIds, ...stream.keyIds]) :\n drmInfo.keyIds || stream.keyIds;\n }\n stream.groupId = adaptationId;\n }\n\n const repIds = representations\n .map((node) => { return node.attributes['id']; })\n .filter(shaka.util.Functional.isNotNull);\n\n return {\n id: adaptationId,\n contentType: context.adaptationSet.contentType,\n language: language,\n main: main,\n streams: streams,\n drmInfos: contentProtection.drmInfos,\n trickModeFor: trickModeFor,\n representationIds: repIds,\n };\n }\n\n /**\n * @param {!shaka.extern.xml.Node} elem\n * @return {?function():string}\n * @private\n */\n getURLParametersFunction_(elem) {\n const TXml = shaka.util.TXml;\n const urlQueryInfo = TXml.findChildNS(\n elem, shaka.dash.DashParser.UP_NAMESPACE_, 'UrlQueryInfo');\n if (urlQueryInfo && TXml.parseAttr(urlQueryInfo, 'useMPDUrlQuery',\n TXml.parseBoolean, /* defaultValue= */ false)) {\n const queryTemplate = urlQueryInfo.attributes['queryTemplate'];\n if (queryTemplate) {\n return () => {\n if (queryTemplate == '$querypart$') {\n return this.lastManifestQueryParams_;\n }\n const parameters = queryTemplate.split('&').map((param) => {\n if (param == '$querypart$') {\n return this.lastManifestQueryParams_;\n } else {\n const regex = /\\$query:(.*?)\\$/g;\n const parts = regex.exec(param);\n if (parts && parts.length == 2) {\n const paramName = parts[1];\n const queryData =\n new goog.Uri.QueryData(this.lastManifestQueryParams_);\n const value = queryData.get(paramName);\n if (value.length) {\n return paramName + '=' + value[0];\n }\n }\n return param;\n }\n });\n return parameters.join('&');\n };\n }\n }\n return null;\n }\n\n /**\n * Parses a Representation XML element.\n *\n * @param {shaka.dash.DashParser.Context} context\n * @param {shaka.dash.ContentProtection.Context} contentProtection\n * @param {(string|undefined)} kind\n * @param {string} language\n * @param {?string} label\n * @param {boolean} isPrimary\n * @param {!Array.} roles\n * @param {Map.} closedCaptions\n * @param {!shaka.extern.xml.Node} node\n * @param {?shaka.media.ManifestParser.AccessibilityPurpose}\n * accessibilityPurpose\n * @param {?number} lastSegmentNumber\n *\n * @return {?shaka.extern.Stream} The Stream, or null when there is a\n * non-critical parsing error.\n * @private\n */\n parseRepresentation_(context, contentProtection, kind, language, label,\n isPrimary, roles, closedCaptions, node, accessibilityPurpose,\n lastSegmentNumber) {\n const TXml = shaka.util.TXml;\n const ContentType = shaka.util.ManifestParserUtils.ContentType;\n\n context.representation =\n this.createFrame_(node, context.adaptationSet, null);\n\n const representationId = context.representation.id;\n\n this.minTotalAvailabilityTimeOffset_ =\n Math.min(this.minTotalAvailabilityTimeOffset_,\n context.representation.availabilityTimeOffset);\n\n this.isLowLatency_ = this.minTotalAvailabilityTimeOffset_ > 0;\n\n if (!this.verifyRepresentation_(context.representation)) {\n shaka.log.warning('Skipping Representation', context.representation);\n return null;\n }\n const periodStart = context.periodInfo.start;\n\n // NOTE: bandwidth is a mandatory attribute according to the spec, and zero\n // does not make sense in the DASH spec's bandwidth formulas.\n // In some content, however, the attribute is missing or zero.\n // To avoid NaN at the variant level on broken content, fall back to zero.\n // https://github.com/shaka-project/shaka-player/issues/938#issuecomment-317278180\n context.bandwidth =\n TXml.parseAttr(node, 'bandwidth', TXml.parsePositiveInt) || 0;\n\n context.roles = roles;\n\n const supplementalPropertyElems =\n TXml.findChildren(node, 'SupplementalProperty');\n const essentialPropertyElems =\n TXml.findChildren(node, 'EssentialProperty');\n\n let representationUrlParams = null;\n let urlParamsElement = essentialPropertyElems.find((element) => {\n const schemeId = element.attributes['schemeIdUri'];\n return schemeId == 'urn:mpeg:dash:urlparam:2014';\n });\n if (urlParamsElement) {\n representationUrlParams =\n this.getURLParametersFunction_(urlParamsElement);\n } else {\n urlParamsElement = supplementalPropertyElems.find((element) => {\n const schemeId = element.attributes['schemeIdUri'];\n return schemeId == 'urn:mpeg:dash:urlparam:2014';\n });\n if (urlParamsElement) {\n representationUrlParams =\n this.getURLParametersFunction_(urlParamsElement);\n }\n }\n\n if (representationUrlParams) {\n context.urlParams = representationUrlParams;\n }\n\n /** @type {?shaka.dash.DashParser.StreamInfo} */\n let streamInfo;\n\n const contentType = context.representation.contentType;\n const isText = contentType == ContentType.TEXT ||\n contentType == ContentType.APPLICATION;\n const isImage = contentType == ContentType.IMAGE;\n\n try {\n /** @type {shaka.extern.aesKey|undefined} */\n let aesKey = undefined;\n if (contentProtection.aes128Info) {\n const getBaseUris = context.representation.getBaseUris;\n const urlParams = context.urlParams;\n const uris = shaka.util.ManifestParserUtils.resolveUris(\n getBaseUris(), [contentProtection.aes128Info.keyUri], urlParams());\n const requestType = shaka.net.NetworkingEngine.RequestType.KEY;\n const request = shaka.net.NetworkingEngine.makeRequest(\n uris, this.config_.retryParameters);\n\n aesKey = {\n bitsKey: 128,\n blockCipherMode: 'CBC',\n iv: contentProtection.aes128Info.iv,\n firstMediaSequenceNumber: 0,\n };\n\n // Don't download the key object until the segment is parsed, to\n // avoid a startup delay for long manifests with lots of keys.\n aesKey.fetchKey = async () => {\n const keyResponse =\n await this.makeNetworkRequest_(request, requestType);\n\n // keyResponse.status is undefined when URI is\n // \"data:text/plain;base64,\"\n if (!keyResponse.data || keyResponse.data.byteLength != 16) {\n throw new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.MANIFEST,\n shaka.util.Error.Code.AES_128_INVALID_KEY_LENGTH);\n }\n\n const algorithm = {\n name: 'AES-CBC',\n };\n aesKey.cryptoKey = await window.crypto.subtle.importKey(\n 'raw', keyResponse.data, algorithm, true, ['decrypt']);\n aesKey.fetchKey = undefined; // No longer needed.\n };\n }\n context.representation.aesKey = aesKey;\n\n const requestSegment = (uris, startByte, endByte, isInit) => {\n return this.requestSegment_(uris, startByte, endByte, isInit);\n };\n if (context.representation.segmentBase) {\n streamInfo = shaka.dash.SegmentBase.createStreamInfo(\n context, requestSegment, aesKey);\n } else if (context.representation.segmentList) {\n streamInfo = shaka.dash.SegmentList.createStreamInfo(\n context, this.streamMap_, aesKey);\n } else if (context.representation.segmentTemplate) {\n const hasManifest = !!this.manifest_;\n\n streamInfo = shaka.dash.SegmentTemplate.createStreamInfo(\n context, requestSegment, this.streamMap_, hasManifest,\n this.config_.dash.initialSegmentLimit, this.periodDurations_,\n aesKey, lastSegmentNumber, /* isPatchUpdate= */ false);\n } else {\n goog.asserts.assert(isText,\n 'Must have Segment* with non-text streams.');\n\n const duration = context.periodInfo.duration || 0;\n const getBaseUris = context.representation.getBaseUris;\n const mimeType = context.representation.mimeType;\n const codecs = context.representation.codecs;\n streamInfo = {\n generateSegmentIndex: () => {\n const segmentIndex = shaka.media.SegmentIndex.forSingleSegment(\n periodStart, duration, getBaseUris());\n segmentIndex.forEachTopLevelReference((ref) => {\n ref.mimeType = mimeType;\n ref.codecs = codecs;\n });\n return Promise.resolve(segmentIndex);\n },\n };\n }\n } catch (error) {\n if ((isText || isImage) &&\n error.code == shaka.util.Error.Code.DASH_NO_SEGMENT_INFO) {\n // We will ignore any DASH_NO_SEGMENT_INFO errors for text/image\n // streams.\n return null;\n }\n\n // For anything else, re-throw.\n throw error;\n }\n\n const contentProtectionElems =\n TXml.findChildren(node, 'ContentProtection');\n const keyId = shaka.dash.ContentProtection.parseFromRepresentation(\n contentProtectionElems, contentProtection,\n this.config_.dash.ignoreDrmInfo,\n this.config_.dash.keySystemsByURI);\n const keyIds = new Set(keyId ? [keyId] : []);\n\n // Detect the presence of E-AC3 JOC audio content, using DD+JOC signaling.\n // See: ETSI TS 103 420 V1.2.1 (2018-10)\n const hasJoc = supplementalPropertyElems.some((element) => {\n const expectedUri = 'tag:dolby.com,2018:dash:EC3_ExtensionType:2018';\n const expectedValue = 'JOC';\n return element.attributes['schemeIdUri'] == expectedUri &&\n element.attributes['value'] == expectedValue;\n });\n let spatialAudio = false;\n if (hasJoc) {\n spatialAudio = true;\n }\n\n let forced = false;\n if (isText) {\n // See: https://github.com/shaka-project/shaka-player/issues/2122 and\n // https://github.com/Dash-Industry-Forum/DASH-IF-IOP/issues/165\n forced = roles.includes('forced_subtitle') ||\n roles.includes('forced-subtitle');\n }\n\n let tilesLayout;\n if (isImage) {\n const thumbnailTileElem = essentialPropertyElems.find((element) => {\n const expectedUris = [\n 'http://dashif.org/thumbnail_tile',\n 'http://dashif.org/guidelines/thumbnail_tile',\n ];\n return expectedUris.includes(element.attributes['schemeIdUri']);\n });\n if (thumbnailTileElem) {\n tilesLayout = thumbnailTileElem.attributes['value'];\n }\n // Filter image adaptation sets that has no tilesLayout.\n if (!tilesLayout) {\n return null;\n }\n }\n\n let hdr;\n const profiles = context.profiles;\n const codecs = context.representation.codecs;\n\n const hevcHDR = 'http://dashif.org/guidelines/dash-if-uhd#hevc-hdr-pq10';\n if (profiles.includes(hevcHDR) && (codecs.includes('hvc1.2.4.L153.B0') ||\n codecs.includes('hev1.2.4.L153.B0'))) {\n hdr = 'PQ';\n }\n\n const contextId = context.representation.id ?\n context.period.id + ',' + context.representation.id : '';\n\n if (this.patchLocationNodes_.length && representationId) {\n this.contextCache_.set(`${context.period.id},${representationId}`,\n this.cloneContext_(context));\n }\n\n /** @type {shaka.extern.Stream} */\n let stream;\n\n if (contextId && this.streamMap_[contextId]) {\n stream = this.streamMap_[contextId];\n } else {\n stream = {\n id: this.globalId_++,\n originalId: context.representation.id,\n groupId: null,\n createSegmentIndex: () => Promise.resolve(),\n closeSegmentIndex: () => {\n if (stream.segmentIndex) {\n stream.segmentIndex.release();\n stream.segmentIndex = null;\n }\n },\n segmentIndex: null,\n mimeType: context.representation.mimeType,\n codecs,\n frameRate: context.representation.frameRate,\n pixelAspectRatio: context.representation.pixelAspectRatio,\n bandwidth: context.bandwidth,\n width: context.representation.width,\n height: context.representation.height,\n kind,\n encrypted: contentProtection.drmInfos.length > 0,\n drmInfos: contentProtection.drmInfos,\n keyIds,\n language,\n originalLanguage: context.adaptationSet.language,\n label,\n type: context.adaptationSet.contentType,\n primary: isPrimary,\n trickModeVideo: null,\n emsgSchemeIdUris:\n context.representation.emsgSchemeIdUris,\n roles,\n forced,\n channelsCount: context.representation.numChannels,\n audioSamplingRate: context.representation.audioSamplingRate,\n spatialAudio,\n closedCaptions,\n hdr,\n colorGamut: undefined,\n videoLayout: undefined,\n tilesLayout,\n accessibilityPurpose,\n external: false,\n fastSwitching: false,\n fullMimeTypes: new Set([shaka.util.MimeUtils.getFullType(\n context.representation.mimeType, context.representation.codecs)]),\n isAudioMuxedInVideo: false,\n };\n }\n\n stream.createSegmentIndex = async () => {\n if (!stream.segmentIndex) {\n stream.segmentIndex = await streamInfo.generateSegmentIndex();\n }\n };\n\n if (contextId && context.dynamic && !this.streamMap_[contextId]) {\n const periodId = context.period.id || '';\n if (!this.indexStreamMap_[periodId]) {\n this.indexStreamMap_[periodId] = [];\n }\n this.streamMap_[contextId] = stream;\n this.indexStreamMap_[periodId].push(contextId);\n }\n\n return stream;\n }\n\n /**\n * Clone context and remove xml document references.\n *\n * @param {!shaka.dash.DashParser.Context} context\n * @return {!shaka.dash.DashParser.Context}\n * @private\n */\n cloneContext_(context) {\n /**\n * @param {?shaka.dash.DashParser.InheritanceFrame} frame\n * @return {?shaka.dash.DashParser.InheritanceFrame}\n */\n const cloneFrame = (frame) => {\n if (!frame) {\n return null;\n }\n const clone = shaka.util.ObjectUtils.shallowCloneObject(frame);\n clone.segmentBase = null;\n clone.segmentList = null;\n clone.segmentTemplate = shaka.util.TXml.cloneNode(clone.segmentTemplate);\n return clone;\n };\n const contextClone = shaka.util.ObjectUtils.shallowCloneObject(context);\n contextClone.period = cloneFrame(contextClone.period);\n contextClone.adaptationSet = cloneFrame(contextClone.adaptationSet);\n contextClone.representation = cloneFrame(contextClone.representation);\n\n if (contextClone.periodInfo) {\n contextClone.periodInfo =\n shaka.util.ObjectUtils.shallowCloneObject(contextClone.periodInfo);\n contextClone.periodInfo.node = null;\n }\n\n return contextClone;\n }\n\n /**\n * Called when the update timer ticks.\n *\n * @return {!Promise}\n * @private\n */\n async onUpdate_() {\n goog.asserts.assert(this.updatePeriod_ >= 0,\n 'There should be an update period');\n\n shaka.log.info('Updating manifest...');\n\n // Default the update delay to 0 seconds so that if there is an error we can\n // try again right away.\n let updateDelay = 0;\n\n try {\n updateDelay = await this.requestManifest_();\n } catch (error) {\n goog.asserts.assert(error instanceof shaka.util.Error,\n 'Should only receive a Shaka error');\n\n // Try updating again, but ensure we haven't been destroyed.\n if (this.playerInterface_) {\n if (this.config_.raiseFatalErrorOnManifestUpdateRequestFailure) {\n this.playerInterface_.onError(error);\n return;\n }\n // We will retry updating, so override the severity of the error.\n error.severity = shaka.util.Error.Severity.RECOVERABLE;\n this.playerInterface_.onError(error);\n }\n }\n\n // Detect a call to stop()\n if (!this.playerInterface_) {\n return;\n }\n\n this.playerInterface_.onManifestUpdated();\n\n this.setUpdateTimer_(updateDelay);\n }\n\n /**\n * Update now the manifest\n *\n * @private\n */\n updateNow_() {\n this.updateTimer_.tickNow();\n }\n\n /**\n * Sets the update timer. Does nothing if the manifest does not specify an\n * update period.\n *\n * @param {number} offset An offset, in seconds, to apply to the manifest's\n * update period.\n * @private\n */\n setUpdateTimer_(offset) {\n // NOTE: An updatePeriod_ of -1 means the attribute was missing.\n // An attribute which is present and set to 0 should still result in\n // periodic updates. For more, see:\n // https://github.com/Dash-Industry-Forum/Guidelines-TimingModel/issues/48\n if (this.updatePeriod_ < 0) {\n return;\n }\n let updateTime = this.updatePeriod_;\n if (this.config_.dash.updatePeriod >= 0) {\n updateTime = this.config_.dash.updatePeriod;\n }\n\n const finalDelay = Math.max(\n updateTime - offset,\n this.averageUpdateDuration_.getEstimate());\n\n // We do not run the timer as repeating because part of update is async and\n // we need schedule the update after it finished.\n this.updateTimer_.tickAfter(/* seconds= */ finalDelay);\n }\n\n /**\n * Creates a new inheritance frame for the given element.\n *\n * @param {!shaka.extern.xml.Node} elem\n * @param {?shaka.dash.DashParser.InheritanceFrame} parent\n * @param {?function():!Array.} getBaseUris\n * @return {shaka.dash.DashParser.InheritanceFrame}\n * @private\n */\n createFrame_(elem, parent, getBaseUris) {\n goog.asserts.assert(parent || getBaseUris,\n 'Must provide either parent or getBaseUris');\n const SCTE214 = shaka.dash.DashParser.SCTE214_;\n const SegmentUtils = shaka.media.SegmentUtils;\n const ManifestParserUtils = shaka.util.ManifestParserUtils;\n const TXml = shaka.util.TXml;\n parent = parent || /** @type {shaka.dash.DashParser.InheritanceFrame} */ ({\n contentType: '',\n mimeType: '',\n codecs: '',\n emsgSchemeIdUris: [],\n frameRate: undefined,\n pixelAspectRatio: undefined,\n numChannels: null,\n audioSamplingRate: null,\n availabilityTimeOffset: 0,\n segmentSequenceCadence: 0,\n });\n getBaseUris = getBaseUris || parent.getBaseUris;\n\n const parseNumber = TXml.parseNonNegativeInt;\n const evalDivision = TXml.evalDivision;\n\n const id = elem.attributes['id'];\n const uriObjs = TXml.findChildren(elem, 'BaseURL');\n let calculatedBaseUris;\n let someLocationValid = false;\n if (this.contentSteeringManager_) {\n for (const uriObj of uriObjs) {\n const serviceLocation = uriObj.attributes['serviceLocation'];\n const uri = TXml.getContents(uriObj);\n if (serviceLocation && uri) {\n this.contentSteeringManager_.addLocation(\n id, serviceLocation, uri);\n someLocationValid = true;\n }\n }\n }\n if (!someLocationValid || !this.contentSteeringManager_) {\n calculatedBaseUris = uriObjs.map(TXml.getContents);\n }\n\n const getFrameUris = () => {\n if (!uriObjs.length) {\n return [];\n }\n if (this.contentSteeringManager_ && someLocationValid) {\n return this.contentSteeringManager_.getLocations(id);\n }\n if (calculatedBaseUris) {\n return calculatedBaseUris;\n }\n return [];\n };\n\n let contentType = elem.attributes['contentType'] || parent.contentType;\n const mimeType = elem.attributes['mimeType'] || parent.mimeType;\n const allCodecs = [\n elem.attributes['codecs'] || parent.codecs,\n ];\n const supplementalCodecs =\n TXml.getAttributeNS(elem, SCTE214, 'supplementalCodecs');\n if (supplementalCodecs) {\n allCodecs.push(supplementalCodecs);\n }\n const codecs = SegmentUtils.codecsFiltering(allCodecs).join(',');\n const frameRate =\n TXml.parseAttr(elem, 'frameRate', evalDivision) || parent.frameRate;\n const pixelAspectRatio =\n elem.attributes['sar'] || parent.pixelAspectRatio;\n const emsgSchemeIdUris = this.emsgSchemeIdUris_(\n TXml.findChildren(elem, 'InbandEventStream'),\n parent.emsgSchemeIdUris);\n const audioChannelConfigs =\n TXml.findChildren(elem, 'AudioChannelConfiguration');\n const numChannels =\n this.parseAudioChannels_(audioChannelConfigs) || parent.numChannels;\n const audioSamplingRate =\n TXml.parseAttr(elem, 'audioSamplingRate', parseNumber) ||\n parent.audioSamplingRate;\n\n if (!contentType) {\n contentType = shaka.dash.DashParser.guessContentType_(mimeType, codecs);\n }\n\n const segmentBase = TXml.findChild(elem, 'SegmentBase');\n const segmentTemplate = TXml.findChild(elem, 'SegmentTemplate');\n\n // The availabilityTimeOffset is the sum of all @availabilityTimeOffset\n // values that apply to the adaptation set, via BaseURL, SegmentBase,\n // or SegmentTemplate elements.\n const segmentBaseAto = segmentBase ?\n (TXml.parseAttr(segmentBase, 'availabilityTimeOffset',\n TXml.parseFloat) || 0) : 0;\n const segmentTemplateAto = segmentTemplate ?\n (TXml.parseAttr(segmentTemplate, 'availabilityTimeOffset',\n TXml.parseFloat) || 0) : 0;\n const baseUriAto = uriObjs && uriObjs.length ?\n (TXml.parseAttr(uriObjs[0], 'availabilityTimeOffset',\n TXml.parseFloat) || 0) : 0;\n\n const availabilityTimeOffset = parent.availabilityTimeOffset + baseUriAto +\n segmentBaseAto + segmentTemplateAto;\n\n let segmentSequenceCadence = null;\n const segmentSequenceProperties =\n TXml.findChild(elem, 'SegmentSequenceProperties');\n if (segmentSequenceProperties) {\n const sap = TXml.findChild(segmentSequenceProperties, 'SAP');\n if (sap) {\n segmentSequenceCadence = TXml.parseAttr(sap, 'cadence',\n TXml.parseInt);\n }\n }\n\n // This attribute is currently non-standard, but it is supported by Kaltura.\n let label = elem.attributes['label'];\n\n // See DASH IOP 4.3 here https://dashif.org/docs/DASH-IF-IOP-v4.3.pdf (page 35)\n const labelElements = TXml.findChildren(elem, 'Label');\n if (labelElements && labelElements.length) {\n // NOTE: Right now only one label field is supported.\n const firstLabelElement = labelElements[0];\n if (TXml.getTextContents(firstLabelElement)) {\n label = TXml.getTextContents(firstLabelElement);\n }\n }\n\n return {\n getBaseUris:\n () => ManifestParserUtils.resolveUris(getBaseUris(), getFrameUris()),\n segmentBase: segmentBase || parent.segmentBase,\n segmentList:\n TXml.findChild(elem, 'SegmentList') || parent.segmentList,\n segmentTemplate: segmentTemplate || parent.segmentTemplate,\n width: TXml.parseAttr(elem, 'width', parseNumber) || parent.width,\n height: TXml.parseAttr(elem, 'height', parseNumber) || parent.height,\n contentType: contentType,\n mimeType: mimeType,\n codecs: codecs,\n frameRate: frameRate,\n pixelAspectRatio: pixelAspectRatio,\n emsgSchemeIdUris: emsgSchemeIdUris,\n id: id,\n language: elem.attributes['lang'],\n numChannels: numChannels,\n audioSamplingRate: audioSamplingRate,\n availabilityTimeOffset: availabilityTimeOffset,\n initialization: null,\n segmentSequenceCadence:\n segmentSequenceCadence || parent.segmentSequenceCadence,\n label: label || null,\n };\n }\n\n /**\n * Returns a new array of InbandEventStream schemeIdUri containing the union\n * of the ones parsed from inBandEventStreams and the ones provided in\n * emsgSchemeIdUris.\n *\n * @param {!Array.} inBandEventStreams\n * Array of InbandEventStream\n * elements to parse and add to the returned array.\n * @param {!Array.} emsgSchemeIdUris Array of parsed\n * InbandEventStream schemeIdUri attributes to add to the returned array.\n * @return {!Array.} schemeIdUris Array of parsed\n * InbandEventStream schemeIdUri attributes.\n * @private\n */\n emsgSchemeIdUris_(inBandEventStreams, emsgSchemeIdUris) {\n const schemeIdUris = emsgSchemeIdUris.slice();\n for (const event of inBandEventStreams) {\n const schemeIdUri = event.attributes['schemeIdUri'];\n if (!schemeIdUris.includes(schemeIdUri)) {\n schemeIdUris.push(schemeIdUri);\n }\n }\n return schemeIdUris;\n }\n\n /**\n * @param {!Array.} audioChannelConfigs An array of\n * AudioChannelConfiguration elements.\n * @return {?number} The number of audio channels, or null if unknown.\n * @private\n */\n parseAudioChannels_(audioChannelConfigs) {\n for (const elem of audioChannelConfigs) {\n const scheme = elem.attributes['schemeIdUri'];\n if (!scheme) {\n continue;\n }\n\n const value = elem.attributes['value'];\n if (!value) {\n continue;\n }\n\n switch (scheme) {\n case 'urn:mpeg:dash:outputChannelPositionList:2012':\n // A space-separated list of speaker positions, so the number of\n // channels is the length of this list.\n return value.trim().split(/ +/).length;\n\n case 'urn:mpeg:dash:23003:3:audio_channel_configuration:2011':\n case 'urn:dts:dash:audio_channel_configuration:2012': {\n // As far as we can tell, this is a number of channels.\n const intValue = parseInt(value, 10);\n if (!intValue) { // 0 or NaN\n shaka.log.warning('Channel parsing failure! ' +\n 'Ignoring scheme and value', scheme, value);\n continue;\n }\n return intValue;\n }\n\n case 'tag:dolby.com,2015:dash:audio_channel_configuration:2015': {\n // ETSI TS 103 190-2 v1.2.1, Annex G.3\n // LSB-to-MSB order\n const channelCountMapping =\n [2, 1, 2, 2, 2, 2, 1, 2, 2, 1, 1, 1, 1, 2, 1, 1, 2, 2];\n const hexValue = parseInt(value, 16);\n if (!hexValue) { // 0 or NaN\n shaka.log.warning('Channel parsing failure! ' +\n 'Ignoring scheme and value', scheme, value);\n continue;\n }\n let numBits = 0;\n for (let i = 0; i < channelCountMapping.length; i++) {\n if (hexValue & (1< noValue && intValue < channelCountMapping.length) {\n return channelCountMapping[intValue];\n }\n continue;\n }\n\n default:\n shaka.log.warning(\n 'Unrecognized audio channel scheme:', scheme, value);\n continue;\n }\n }\n\n return null;\n }\n\n /**\n * Verifies that a Representation has exactly one Segment* element. Prints\n * warnings if there is a problem.\n *\n * @param {shaka.dash.DashParser.InheritanceFrame} frame\n * @return {boolean} True if the Representation is usable; otherwise return\n * false.\n * @private\n */\n verifyRepresentation_(frame) {\n const ContentType = shaka.util.ManifestParserUtils.ContentType;\n\n let n = 0;\n n += frame.segmentBase ? 1 : 0;\n n += frame.segmentList ? 1 : 0;\n n += frame.segmentTemplate ? 1 : 0;\n\n if (n == 0) {\n // TODO: Extend with the list of MIME types registered to TextEngine.\n if (frame.contentType == ContentType.TEXT ||\n frame.contentType == ContentType.APPLICATION) {\n return true;\n } else {\n shaka.log.warning(\n 'Representation does not contain a segment information source:',\n 'the Representation must contain one of SegmentBase, SegmentList,',\n 'SegmentTemplate, or explicitly indicate that it is \"text\".',\n frame);\n return false;\n }\n }\n\n if (n != 1) {\n shaka.log.warning(\n 'Representation contains multiple segment information sources:',\n 'the Representation should only contain one of SegmentBase,',\n 'SegmentList, or SegmentTemplate.',\n frame);\n if (frame.segmentBase) {\n shaka.log.info('Using SegmentBase by default.');\n frame.segmentList = null;\n frame.segmentTemplate = null;\n } else {\n goog.asserts.assert(frame.segmentList, 'There should be a SegmentList');\n shaka.log.info('Using SegmentList by default.');\n frame.segmentTemplate = null;\n }\n }\n\n return true;\n }\n\n /**\n * Makes a request to the given URI and calculates the clock offset.\n *\n * @param {function():!Array.} getBaseUris\n * @param {string} uri\n * @param {string} method\n * @return {!Promise.}\n * @private\n */\n async requestForTiming_(getBaseUris, uri, method) {\n const uris = [shaka.util.StringUtils.htmlUnescape(uri)];\n const requestUris =\n shaka.util.ManifestParserUtils.resolveUris(getBaseUris(), uris);\n const request = shaka.net.NetworkingEngine.makeRequest(\n requestUris, this.config_.retryParameters);\n request.method = method;\n const type = shaka.net.NetworkingEngine.RequestType.TIMING;\n\n const operation =\n this.playerInterface_.networkingEngine.request(\n type, request, {isPreload: this.isPreloadFn_()});\n this.operationManager_.manage(operation);\n\n const response = await operation.promise;\n let text;\n if (method == 'HEAD') {\n if (!response.headers || !response.headers['date']) {\n shaka.log.warning('UTC timing response is missing',\n 'expected date header');\n return 0;\n }\n text = response.headers['date'];\n } else {\n text = shaka.util.StringUtils.fromUTF8(response.data);\n }\n const date = Date.parse(text);\n if (isNaN(date)) {\n shaka.log.warning('Unable to parse date from UTC timing response');\n return 0;\n }\n return (date - Date.now());\n }\n\n /**\n * Parses an array of UTCTiming elements.\n *\n * @param {function():!Array.} getBaseUris\n * @param {!Array.} elems\n * @return {!Promise.}\n * @private\n */\n async parseUtcTiming_(getBaseUris, elems) {\n const schemesAndValues = elems.map((elem) => {\n return {\n scheme: elem.attributes['schemeIdUri'],\n value: elem.attributes['value'],\n };\n });\n\n // If there's nothing specified in the manifest, but we have a default from\n // the config, use that.\n const clockSyncUri = this.config_.dash.clockSyncUri;\n if (!schemesAndValues.length && clockSyncUri) {\n schemesAndValues.push({\n scheme: 'urn:mpeg:dash:utc:http-head:2014',\n value: clockSyncUri,\n });\n }\n\n for (const sv of schemesAndValues) {\n try {\n const scheme = sv.scheme;\n const value = sv.value;\n switch (scheme) {\n // See DASH IOP Guidelines Section 4.7\n // https://bit.ly/DashIop3-2\n // Some old ISO23009-1 drafts used 2012.\n case 'urn:mpeg:dash:utc:http-head:2014':\n case 'urn:mpeg:dash:utc:http-head:2012':\n // eslint-disable-next-line no-await-in-loop\n return await this.requestForTiming_(getBaseUris, value, 'HEAD');\n case 'urn:mpeg:dash:utc:http-xsdate:2014':\n case 'urn:mpeg:dash:utc:http-iso:2014':\n case 'urn:mpeg:dash:utc:http-xsdate:2012':\n case 'urn:mpeg:dash:utc:http-iso:2012':\n // eslint-disable-next-line no-await-in-loop\n return await this.requestForTiming_(getBaseUris, value, 'GET');\n case 'urn:mpeg:dash:utc:direct:2014':\n case 'urn:mpeg:dash:utc:direct:2012': {\n const date = Date.parse(value);\n return isNaN(date) ? 0 : (date - Date.now());\n }\n\n case 'urn:mpeg:dash:utc:http-ntp:2014':\n case 'urn:mpeg:dash:utc:ntp:2014':\n case 'urn:mpeg:dash:utc:sntp:2014':\n shaka.log.alwaysWarn('NTP UTCTiming scheme is not supported');\n break;\n default:\n shaka.log.alwaysWarn(\n 'Unrecognized scheme in UTCTiming element', scheme);\n break;\n }\n } catch (e) {\n shaka.log.warning('Error fetching time from UTCTiming elem', e.message);\n }\n }\n\n shaka.log.alwaysWarn(\n 'A UTCTiming element should always be given in live manifests! ' +\n 'This content may not play on clients with bad clocks!');\n return 0;\n }\n\n /**\n * Parses an EventStream element.\n *\n * @param {number} periodStart\n * @param {?number} periodDuration\n * @param {!shaka.extern.xml.Node} elem\n * @param {number} availabilityStart\n * @private\n */\n parseEventStream_(periodStart, periodDuration, elem, availabilityStart) {\n const TXml = shaka.util.TXml;\n const parseNumber = shaka.util.TXml.parseNonNegativeInt;\n\n const schemeIdUri = elem.attributes['schemeIdUri'] || '';\n const value = elem.attributes['value'] || '';\n const timescale = TXml.parseAttr(elem, 'timescale', parseNumber) || 1;\n const presentationTimeOffset =\n TXml.parseAttr(elem, 'presentationTimeOffset', parseNumber) || 0;\n\n for (const eventNode of TXml.findChildren(elem, 'Event')) {\n const presentationTime =\n TXml.parseAttr(eventNode, 'presentationTime', parseNumber) || 0;\n const duration =\n TXml.parseAttr(eventNode, 'duration', parseNumber) || 0;\n\n // Ensure start time won't be lower than period start.\n let startTime = Math.max(\n (presentationTime - presentationTimeOffset) / timescale + periodStart,\n periodStart);\n let endTime = startTime + (duration / timescale);\n if (periodDuration != null) {\n // An event should not go past the Period, even if the manifest says so.\n // See: Dash sec. 5.10.2.1\n startTime = Math.min(startTime, periodStart + periodDuration);\n endTime = Math.min(endTime, periodStart + periodDuration);\n }\n\n // Don't add unavailable regions to the timeline.\n if (endTime < availabilityStart) {\n continue;\n }\n\n /** @type {shaka.extern.TimelineRegionInfo} */\n const region = {\n schemeIdUri: schemeIdUri,\n value: value,\n startTime: startTime,\n endTime: endTime,\n id: eventNode.attributes['id'] || '',\n eventElement: TXml.txmlNodeToDomElement(eventNode),\n eventNode: TXml.cloneNode(eventNode),\n };\n\n this.playerInterface_.onTimelineRegionAdded(region);\n }\n }\n\n /**\n * Makes a network request on behalf of SegmentBase.createStreamInfo.\n *\n * @param {!Array.} uris\n * @param {?number} startByte\n * @param {?number} endByte\n * @param {boolean} isInit\n * @return {!Promise.}\n * @private\n */\n async requestSegment_(uris, startByte, endByte, isInit) {\n const requestType = shaka.net.NetworkingEngine.RequestType.SEGMENT;\n const type = isInit ?\n shaka.net.NetworkingEngine.AdvancedRequestType.INIT_SEGMENT :\n shaka.net.NetworkingEngine.AdvancedRequestType.MEDIA_SEGMENT;\n\n const request = shaka.util.Networking.createSegmentRequest(\n uris,\n startByte,\n endByte,\n this.config_.retryParameters);\n\n const response = await this.makeNetworkRequest_(\n request, requestType, {type});\n return response.data;\n }\n\n /**\n * Guess the content type based on MIME type and codecs.\n *\n * @param {string} mimeType\n * @param {string} codecs\n * @return {string}\n * @private\n */\n static guessContentType_(mimeType, codecs) {\n const fullMimeType = shaka.util.MimeUtils.getFullType(mimeType, codecs);\n\n if (shaka.text.TextEngine.isTypeSupported(fullMimeType)) {\n // If it's supported by TextEngine, it's definitely text.\n // We don't check MediaSourceEngine, because that would report support\n // for platform-supported video and audio types as well.\n return shaka.util.ManifestParserUtils.ContentType.TEXT;\n }\n\n // Otherwise, just split the MIME type. This handles video and audio\n // types well.\n return mimeType.split('/')[0];\n }\n\n\n /**\n * Create a networking request. This will manage the request using the\n * parser's operation manager.\n *\n * @param {shaka.extern.Request} request\n * @param {shaka.net.NetworkingEngine.RequestType} type\n * @param {shaka.extern.RequestContext=} context\n * @return {!Promise.}\n * @private\n */\n makeNetworkRequest_(request, type, context) {\n if (!context) {\n context = {};\n }\n context.isPreload = this.isPreloadFn_();\n const op = this.playerInterface_.networkingEngine.request(\n type, request, context);\n this.operationManager_.manage(op);\n return op.promise;\n }\n\n /**\n * @param {!shaka.extern.xml.Node} patchNode\n * @private\n */\n updatePatchLocationNodes_(patchNode) {\n const TXml = shaka.util.TXml;\n TXml.modifyNodes(this.patchLocationNodes_, patchNode);\n }\n\n /**\n * @return {!Array}\n * @private\n */\n getPatchLocationUris_() {\n const TXml = shaka.util.TXml;\n const mpdId = this.manifestPatchContext_.mpdId;\n const publishTime = this.manifestPatchContext_.publishTime;\n if (!mpdId || !publishTime || !this.patchLocationNodes_.length) {\n return [];\n }\n const now = Date.now() / 1000;\n const patchLocations = this.patchLocationNodes_.filter((patchLocation) => {\n const ttl = TXml.parseNonNegativeInt(patchLocation.attributes['ttl']);\n return !ttl || publishTime + ttl > now;\n })\n .map(TXml.getContents)\n .filter(shaka.util.Functional.isNotNull);\n\n if (!patchLocations.length) {\n return [];\n }\n return shaka.util.ManifestParserUtils.resolveUris(\n this.manifestUris_, patchLocations);\n }\n};\n\n/**\n * @typedef {{\n * mpdId: string,\n * type: string,\n * mediaPresentationDuration: ?number,\n * profiles: !Array.,\n * availabilityTimeOffset: number,\n * getBaseUris: ?function():!Array.,\n * publishTime: number\n * }}\n *\n * @property {string} mpdId\n * ID of the original MPD file.\n * @property {string} type\n * Specifies the type of the dash manifest i.e. \"static\"\n * @property {?number} mediaPresentationDuration\n * Media presentation duration, or null if unknown.\n * @property {!Array.} profiles\n * Profiles of DASH are defined to enable interoperability and the\n * signaling of the use of features.\n * @property {number} availabilityTimeOffset\n * Specifies the total availabilityTimeOffset of the segment.\n * @property {?function():!Array.} getBaseUris\n * An array of absolute base URIs.\n * @property {number} publishTime\n * Time when manifest has been published, in seconds.\n */\nshaka.dash.DashParser.PatchContext;\n\n\n/**\n * @const {string}\n * @private\n */\nshaka.dash.DashParser.SCTE214_ = 'urn:scte:dash:scte214-extensions';\n\n\n/**\n * @const {string}\n * @private\n */\nshaka.dash.DashParser.UP_NAMESPACE_ = 'urn:mpeg:dash:schema:urlparam:2014';\n\n\n/**\n * @typedef {\n * function(!Array., ?number, ?number, boolean):\n * !Promise.\n * }\n */\nshaka.dash.DashParser.RequestSegmentCallback;\n\n\n/**\n * @typedef {{\n * segmentBase: ?shaka.extern.xml.Node,\n * segmentList: ?shaka.extern.xml.Node,\n * segmentTemplate: ?shaka.extern.xml.Node,\n * getBaseUris: function():!Array.,\n * width: (number|undefined),\n * height: (number|undefined),\n * contentType: string,\n * mimeType: string,\n * codecs: string,\n * frameRate: (number|undefined),\n * pixelAspectRatio: (string|undefined),\n * emsgSchemeIdUris: !Array.,\n * id: ?string,\n * position: (number|undefined),\n * language: ?string,\n * numChannels: ?number,\n * audioSamplingRate: ?number,\n * availabilityTimeOffset: number,\n * initialization: ?string,\n * aesKey: (shaka.extern.aesKey|undefined),\n * segmentSequenceCadence: number,\n * label: ?string\n * }}\n *\n * @description\n * A collection of elements and properties which are inherited across levels\n * of a DASH manifest.\n *\n * @property {?shaka.extern.xml.Node} segmentBase\n * The XML node for SegmentBase.\n * @property {?shaka.extern.xml.Node} segmentList\n * The XML node for SegmentList.\n * @property {?shaka.extern.xml.Node} segmentTemplate\n * The XML node for SegmentTemplate.\n * @property {function():!Array.} getBaseUris\n * Function than returns an array of absolute base URIs for the frame.\n * @property {(number|undefined)} width\n * The inherited width value.\n * @property {(number|undefined)} height\n * The inherited height value.\n * @property {string} contentType\n * The inherited media type.\n * @property {string} mimeType\n * The inherited MIME type value.\n * @property {string} codecs\n * The inherited codecs value.\n * @property {(number|undefined)} frameRate\n * The inherited framerate value.\n * @property {(string|undefined)} pixelAspectRatio\n * The inherited pixel aspect ratio value.\n * @property {!Array.} emsgSchemeIdUris\n * emsg registered schemeIdUris.\n * @property {?string} id\n * The ID of the element.\n * @property {number|undefined} position\n * Position of the element used for indexing in case of no id\n * @property {?string} language\n * The original language of the element.\n * @property {?number} numChannels\n * The number of audio channels, or null if unknown.\n * @property {?number} audioSamplingRate\n * Specifies the maximum sampling rate of the content, or null if unknown.\n * @property {number} availabilityTimeOffset\n * Specifies the total availabilityTimeOffset of the segment, or 0 if unknown.\n * @property {?string} initialization\n * Specifies the file where the init segment is located, or null.\n * @property {(shaka.extern.aesKey|undefined)} aesKey\n * AES-128 Content protection key\n * @property {number} segmentSequenceCadence\n * Specifies the cadence of independent segments in Segment Sequence\n * Representation.\n * @property {?string} label\n * Label or null if unknown.\n */\nshaka.dash.DashParser.InheritanceFrame;\n\n\n/**\n * @typedef {{\n * dynamic: boolean,\n * presentationTimeline: !shaka.media.PresentationTimeline,\n * period: ?shaka.dash.DashParser.InheritanceFrame,\n * periodInfo: ?shaka.dash.DashParser.PeriodInfo,\n * adaptationSet: ?shaka.dash.DashParser.InheritanceFrame,\n * representation: ?shaka.dash.DashParser.InheritanceFrame,\n * bandwidth: number,\n * indexRangeWarningGiven: boolean,\n * availabilityTimeOffset: number,\n * mediaPresentationDuration: ?number,\n * profiles: !Array.,\n * roles: ?Array.,\n * urlParams: function():string\n * }}\n *\n * @description\n * Contains context data for the streams. This is designed to be\n * shallow-copyable, so the parser must overwrite (not modify) each key as the\n * parser moves through the manifest and the parsing context changes.\n *\n * @property {boolean} dynamic\n * True if the MPD is dynamic (not all segments available at once)\n * @property {!shaka.media.PresentationTimeline} presentationTimeline\n * The PresentationTimeline.\n * @property {?shaka.dash.DashParser.InheritanceFrame} period\n * The inheritance from the Period element.\n * @property {?shaka.dash.DashParser.PeriodInfo} periodInfo\n * The Period info for the current Period.\n * @property {?shaka.dash.DashParser.InheritanceFrame} adaptationSet\n * The inheritance from the AdaptationSet element.\n * @property {?shaka.dash.DashParser.InheritanceFrame} representation\n * The inheritance from the Representation element.\n * @property {number} bandwidth\n * The bandwidth of the Representation, or zero if missing.\n * @property {boolean} indexRangeWarningGiven\n * True if the warning about SegmentURL@indexRange has been printed.\n * @property {number} availabilityTimeOffset\n * The sum of the availabilityTimeOffset values that apply to the element.\n * @property {!Array.} profiles\n * Profiles of DASH are defined to enable interoperability and the signaling\n * of the use of features.\n * @property {?number} mediaPresentationDuration\n * Media presentation duration, or null if unknown.\n * @property {function():string} urlParams\n * The query params for the segments.\n */\nshaka.dash.DashParser.Context;\n\n\n/**\n * @typedef {{\n * start: number,\n * duration: ?number,\n * node: ?shaka.extern.xml.Node,\n * isLastPeriod: boolean\n * }}\n *\n * @description\n * Contains information about a Period element.\n *\n * @property {number} start\n * The start time of the period.\n * @property {?number} duration\n * The duration of the period; or null if the duration is not given. This\n * will be non-null for all periods except the last.\n * @property {?shaka.extern.xml.Node} node\n * The XML Node for the Period.\n * @property {boolean} isLastPeriod\n * Whether this Period is the last one in the manifest.\n */\nshaka.dash.DashParser.PeriodInfo;\n\n\n/**\n * @typedef {{\n * id: string,\n * contentType: ?string,\n * language: string,\n * main: boolean,\n * streams: !Array.,\n * drmInfos: !Array.,\n * trickModeFor: ?string,\n * representationIds: !Array.\n * }}\n *\n * @description\n * Contains information about an AdaptationSet element.\n *\n * @property {string} id\n * The unique ID of the adaptation set.\n * @property {?string} contentType\n * The content type of the AdaptationSet.\n * @property {string} language\n * The language of the AdaptationSet.\n * @property {boolean} main\n * Whether the AdaptationSet has the 'main' type.\n * @property {!Array.} streams\n * The streams this AdaptationSet contains.\n * @property {!Array.} drmInfos\n * The DRM info for the AdaptationSet.\n * @property {?string} trickModeFor\n * If non-null, this AdaptationInfo represents trick mode tracks. This\n * property is the ID of the normal AdaptationSet these tracks should be\n * associated with.\n * @property {!Array.} representationIds\n * An array of the IDs of the Representations this AdaptationSet contains.\n */\nshaka.dash.DashParser.AdaptationInfo;\n\n\n/**\n * @typedef {function():!Promise.}\n * @description\n * An async function which generates and returns a SegmentIndex.\n */\nshaka.dash.DashParser.GenerateSegmentIndexFunction;\n\n\n/**\n * @typedef {{\n * generateSegmentIndex: shaka.dash.DashParser.GenerateSegmentIndexFunction\n * }}\n *\n * @description\n * Contains information about a Stream. This is passed from the createStreamInfo\n * methods.\n *\n * @property {shaka.dash.DashParser.GenerateSegmentIndexFunction}\n * generateSegmentIndex\n * An async function to create the SegmentIndex for the stream.\n */\nshaka.dash.DashParser.StreamInfo;\n\n\nshaka.media.ManifestParser.registerParserByMime(\n 'application/dash+xml', () => new shaka.dash.DashParser());\nshaka.media.ManifestParser.registerParserByMime(\n 'video/vnd.mpeg.dash.mpd', () => new shaka.dash.DashParser());\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.dependencies');\n\ngoog.require('shaka.Deprecate');\n\n/**\n * @export\n */\nshaka.dependencies = class {\n /**\n * Registers a new dependency.\n *\n * @param {shaka.dependencies.Allowed} key which is used for retrieving a\n * dependency\n * @param {?} dep a dependency\n * @export\n */\n static add(key, dep) {\n if (!shaka.dependencies.Allowed[key]) {\n throw new Error(`${key} is not supported`);\n }\n if (key == shaka.dependencies.Allowed.muxjs) {\n shaka.Deprecate.deprecateFeature(5,\n 'mux.js',\n 'mux.js is no longer used in Shaka Player.');\n return;\n }\n shaka.dependencies.dependencies_.set(key, () => dep);\n }\n\n /**\n * Check if we have a dependency for the key.\n *\n * @param {shaka.dependencies.Allowed} key key\n * @return {boolean}\n * @export\n */\n static has(key) {\n return shaka.dependencies.dependencies_.has(key);\n }\n\n /** @return {?ISOBoxer} */\n static isoBoxer() {\n return /** @type {?ISOBoxer} */ (shaka.dependencies.dependencies_.get(\n shaka.dependencies.Allowed.ISOBoxer)());\n }\n};\n\n/**\n * @export\n * @enum {string}\n */\nshaka.dependencies.Allowed = {\n muxjs: 'muxjs',\n ISOBoxer: 'ISOBoxer',\n};\n\n/**\n * Contains accessor functions to shared dependencies that could be used by\n * other components. The default accessors can be overridden.\n *\n * @private {!Map.}\n */\nshaka.dependencies.dependencies_ = new Map([\n [shaka.dependencies.Allowed.ISOBoxer, () => window.ISOBoxer],\n]);\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.hls.Attribute');\ngoog.provide('shaka.hls.Playlist');\ngoog.provide('shaka.hls.PlaylistType');\ngoog.provide('shaka.hls.Segment');\ngoog.provide('shaka.hls.Tag');\n\ngoog.require('goog.asserts');\ngoog.require('shaka.util.Error');\n\n\n/**\n * HLS playlist class.\n */\nshaka.hls.Playlist = class {\n /**\n * @param {!shaka.hls.PlaylistType} type\n * @param {!Array.} tags\n * @param {!Array.=} segments\n */\n constructor(type, tags, segments) {\n /** @const {shaka.hls.PlaylistType} */\n this.type = type;\n\n /** @const {!Array.} */\n this.tags = tags;\n\n /** @const {Array.} */\n this.segments = segments || null;\n }\n};\n\n\n/**\n * @enum {number}\n */\nshaka.hls.PlaylistType = {\n MASTER: 0,\n MEDIA: 1,\n};\n\n\n/**\n * HLS tag class.\n */\nshaka.hls.Tag = class {\n /**\n * @param {number} id\n * @param {string} name\n * @param {!Array.} attributes\n * @param {?string=} value\n */\n constructor(id, name, attributes, value = null) {\n /** @const {number} */\n this.id = id;\n\n /** @type {string} */\n this.name = name;\n\n /** @const {!Array.} */\n this.attributes = attributes;\n\n /** @const {?string} */\n this.value = value;\n }\n\n /**\n * Create the string representation of the tag.\n *\n * For the DRM system - the full tag needs to be passed down to the CDM.\n * There are two ways of doing this (1) save the original tag or (2) recreate\n * the tag.\n * As in some cases (like in tests) the tag never existed in string form, it\n * is far easier to recreate the tag from the parsed form.\n *\n * @param {?Set.=} attributesToSkip\n * @return {string}\n * @override\n */\n toString(attributesToSkip) {\n /**\n * @param {shaka.hls.Attribute} attr\n * @return {string}\n */\n const attrToStr = (attr) => {\n const isNumericAttr = !isNaN(Number(attr.value));\n const value = (isNumericAttr ? attr.value : '\"' + attr.value + '\"');\n return attr.name + '=' + value;\n };\n // A valid tag can only follow 1 of 4 patterns.\n // 1) :\n // 2) :\n // 3) \n // 4) :,\n\n let tagStr = '#' + this.name;\n const appendages = this.attributes ? this.attributes.filter((attr) => {\n if (!attributesToSkip) {\n return true;\n }\n return !attributesToSkip.has(attr.name);\n }).map(attrToStr) : [];\n\n if (this.value) {\n appendages.unshift(this.value);\n }\n\n if (appendages.length > 0) {\n tagStr += ':' + appendages.join(',');\n }\n\n return tagStr;\n }\n\n /**\n * Create the string key of the tag.\n *\n * @param {boolean} keepAllAtributtes\n * @return {string}\n */\n getTagKey(keepAllAtributtes) {\n if (keepAllAtributtes) {\n return this.toString();\n }\n const attributesToSkip = new Set()\n .add('AUDIO')\n .add('VIDEO')\n .add('SUBTITLES')\n .add('PATHWAY-ID')\n .add('GROUP-ID')\n .add('URI');\n return this.toString(attributesToSkip);\n }\n\n /**\n * Adds an attribute to an HLS Tag.\n *\n * @param {!shaka.hls.Attribute} attribute\n */\n addAttribute(attribute) {\n this.attributes.push(attribute);\n }\n\n\n /**\n * Gets the first attribute of the tag with a specified name.\n *\n * @param {string} name\n * @return {?shaka.hls.Attribute} attribute\n */\n getAttribute(name) {\n const attributes = this.attributes.filter((attr) => {\n return attr.name == name;\n });\n\n goog.asserts.assert(attributes.length < 2,\n 'A tag should not have multiple attributes ' +\n 'with the same name!');\n\n if (attributes.length) {\n return attributes[0];\n } else {\n return null;\n }\n }\n\n /**\n * Gets the value of the first attribute of the tag with a specified name.\n * If not found, returns an optional default value.\n *\n * @param {string} name\n * @param {string=} defaultValue\n * @return {?string}\n */\n getAttributeValue(name, defaultValue) {\n const attribute = this.getAttribute(name);\n return attribute ? attribute.value : (defaultValue || null);\n }\n\n\n /**\n * Finds the attribute and returns its value.\n * Throws an error if attribute was not found.\n *\n * @param {string} name\n * @return {string}\n */\n getRequiredAttrValue(name) {\n const attribute = this.getAttribute(name);\n if (!attribute) {\n throw new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.MANIFEST,\n shaka.util.Error.Code.HLS_REQUIRED_ATTRIBUTE_MISSING,\n name);\n }\n\n return attribute.value;\n }\n\n /**\n * Set the name of the tag. Used only for Preload hinted MAP tag.\n * @param {string} name\n */\n setName(name) {\n this.name = name;\n }\n};\n\n\n/**\n * HLS segment class.\n */\nshaka.hls.Segment = class {\n /**\n * Creates an HLS segment object.\n *\n * @param {string} verbatimSegmentUri verbatim segment URI.\n * @param {!Array.} tags\n * @param {!Array.=} partialSegments\n */\n constructor(verbatimSegmentUri, tags, partialSegments=[]) {\n /** @const {!Array.} */\n this.tags = tags;\n\n /** @const {?string} */\n this.verbatimSegmentUri = verbatimSegmentUri;\n\n /** @type {!Array.} */\n this.partialSegments = partialSegments;\n }\n};\n\n\n/**\n * HLS Attribute class.\n */\nshaka.hls.Attribute = class {\n /**\n * Creates an HLS attribute object.\n *\n * @param {string} name\n * @param {string} value\n */\n constructor(name, value) {\n /** @const {string} */\n this.name = name;\n\n /** @const {string} */\n this.value = value;\n }\n};\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.hls.Utils');\n\ngoog.require('shaka.log');\ngoog.require('shaka.util.Error');\ngoog.require('shaka.util.ManifestParserUtils');\ngoog.requireType('shaka.hls.Tag');\n\n\nshaka.hls.Utils = class {\n /**\n *\n * @param {!Array.} tags\n * @param {string} name\n * @return {!Array.}\n */\n static filterTagsByName(tags, name) {\n return tags.filter((tag) => {\n return tag.name == name;\n });\n }\n\n\n /**\n *\n * @param {!Array.} tags\n * @param {string} type\n * @return {!Array.}\n */\n static filterTagsByType(tags, type) {\n return tags.filter((tag) => {\n const tagType = tag.getRequiredAttrValue('TYPE');\n return tagType == type;\n });\n }\n\n\n /**\n *\n * @param {!Array.} tags\n * @param {string} name\n * @return {?shaka.hls.Tag}\n */\n static getFirstTagWithName(tags, name) {\n for (const tag of tags) {\n if (tag.name === name) {\n return tag;\n }\n }\n return null;\n }\n\n /**\n * Get the numerical value of the first tag with given name if available.\n * Return the default value if the tag is not present.\n *\n * @param {!Array.} tags\n * @param {string} name\n * @param {number=} defaultValue\n * @return {number}\n */\n static getFirstTagWithNameAsNumber(tags, name, defaultValue = 0) {\n const tag = shaka.hls.Utils.getFirstTagWithName(tags, name);\n const value = tag ? Number(tag.value) : defaultValue;\n return value;\n }\n\n /**\n * @param {!Array.} baseUris\n * @param {?string} relativeUri\n * @param {?Map.=} variables\n * @return {!Array.}\n */\n static constructSegmentUris(baseUris, relativeUri, variables) {\n if (!relativeUri) {\n return [];\n }\n return shaka.hls.Utils.constructUris(baseUris, [relativeUri], variables);\n }\n\n\n /**\n * @param {!Array.} baseUris\n * @param {!Array.} relativeUris\n * @param {?Map.=} variables\n * @return {!Array.}\n */\n static constructUris(baseUris, relativeUris, variables) {\n if (!relativeUris.length) {\n return [];\n }\n const resolvedUris = shaka.util.ManifestParserUtils.resolveUris(\n baseUris, relativeUris);\n\n const uris = [];\n for (const uri of resolvedUris) {\n uris.push(shaka.hls.Utils.variableSubstitution(uri, variables));\n }\n\n return uris;\n }\n\n /**\n * Replaces the variables of a given URI.\n *\n * @param {string} uri\n * @param {?Map.=} variables\n * @return {string}\n */\n static variableSubstitution(uri, variables) {\n if (!variables || !variables.size) {\n return uri;\n }\n let newUri = String(uri).replace(/%7B/g, '{').replace(/%7D/g, '}');\n\n const uriVariables = newUri.match(/{\\$\\w*}/g);\n if (uriVariables) {\n for (const variable of uriVariables) {\n // Note: All variables have the structure {$...}\n const variableName = variable.slice(2, variable.length - 1);\n const replaceValue = variables.get(variableName);\n if (replaceValue) {\n newUri = newUri.replace(variable, replaceValue);\n } else {\n shaka.log.error('A variable has been found that is not declared',\n variableName);\n throw new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.MANIFEST,\n shaka.util.Error.Code.HLS_VARIABLE_NOT_FOUND,\n variableName);\n }\n }\n }\n return newUri;\n }\n\n\n /**\n * Matches a string to an HLS comment format and returns the result.\n *\n * @param {string} line\n * @return {boolean}\n */\n static isComment(line) {\n return /^#(?!EXT)/m.test(line);\n }\n};\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.hls.ManifestTextParser');\n\ngoog.require('shaka.hls.Attribute');\ngoog.require('shaka.hls.Playlist');\ngoog.require('shaka.hls.PlaylistType');\ngoog.require('shaka.hls.Segment');\ngoog.require('shaka.hls.Tag');\ngoog.require('shaka.hls.Utils');\ngoog.require('shaka.util.Error');\ngoog.require('shaka.util.StringUtils');\ngoog.require('shaka.util.TextParser');\n\n\n/**\n * HlS manifest text parser.\n */\nshaka.hls.ManifestTextParser = class {\n /** */\n constructor() {\n /** @private {number} */\n this.globalId_ = 0;\n }\n\n /**\n * @param {BufferSource} data\n * @return {!shaka.hls.Playlist}\n */\n parsePlaylist(data) {\n const MEDIA_PLAYLIST_TAGS =\n shaka.hls.ManifestTextParser.MEDIA_PLAYLIST_TAGS;\n const SEGMENT_TAGS = shaka.hls.ManifestTextParser.SEGMENT_TAGS;\n\n // Get the input as a string. Normalize newlines to \\n.\n let str = shaka.util.StringUtils.fromUTF8(data);\n str = str.replace(/\\r\\n|\\r(?=[^\\n]|$)/gm, '\\n').trim();\n\n const lines = str.split(/\\n+/m);\n\n if (!/^#EXTM3U($|[ \\t\\n])/m.test(lines[0])) {\n throw new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.MANIFEST,\n shaka.util.Error.Code.HLS_PLAYLIST_HEADER_MISSING);\n }\n\n /** shaka.hls.PlaylistType */\n let playlistType = shaka.hls.PlaylistType.MASTER;\n\n // First, look for media playlist tags, so that we know what the playlist\n // type really is before we start parsing.\n // TODO: refactor the for loop for better readability.\n // Whether to skip the next element; initialize to true to skip first elem.\n let skip = true;\n for (const line of lines) {\n // Ignore comments.\n if (shaka.hls.Utils.isComment(line) || skip) {\n skip = false;\n continue;\n }\n const tag = this.parseTag_(line);\n // These tags won't actually be used, so don't increment the global\n // id.\n this.globalId_ -= 1;\n\n if (MEDIA_PLAYLIST_TAGS.includes(tag.name)) {\n playlistType = shaka.hls.PlaylistType.MEDIA;\n break;\n } else if (tag.name == 'EXT-X-STREAM-INF') {\n skip = true;\n }\n }\n\n /** {Array.} */\n const tags = [];\n // Initialize to \"true\" to skip the first element.\n skip = true;\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i];\n const next = lines[i + 1];\n // Skip comments\n if (shaka.hls.Utils.isComment(line) || skip) {\n skip = false;\n continue;\n }\n\n const tag = this.parseTag_(line);\n if (SEGMENT_TAGS.includes(tag.name)) {\n if (playlistType != shaka.hls.PlaylistType.MEDIA) {\n // Only media playlists should contain segment tags\n throw new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.MANIFEST,\n shaka.util.Error.Code.HLS_INVALID_PLAYLIST_HIERARCHY);\n }\n\n const segmentsData = lines.splice(i, lines.length - i);\n const segments = this.parseSegments_(segmentsData, tags);\n return new shaka.hls.Playlist(playlistType, tags, segments);\n }\n\n tags.push(tag);\n\n // An EXT-X-STREAM-INF tag is followed by a URI of a media playlist.\n // Add the URI to the tag object.\n if (tag.name == 'EXT-X-STREAM-INF') {\n const tagUri = new shaka.hls.Attribute('URI', next);\n tag.addAttribute(tagUri);\n skip = true;\n }\n }\n\n return new shaka.hls.Playlist(playlistType, tags);\n }\n\n /**\n * Parses an array of strings into an array of HLS Segment objects.\n *\n * @param {!Array.} lines\n * @param {!Array.} playlistTags\n * @return {!Array.}\n * @private\n */\n parseSegments_(lines, playlistTags) {\n /** @type {!Array.} */\n const segments = [];\n /** @type {!Array.} */\n let segmentTags = [];\n\n /** @type {!Array.} */\n let partialSegmentTags = [];\n\n // The last parsed EXT-X-MAP tag.\n /** @type {?shaka.hls.Tag} */\n let currentMapTag = null;\n\n for (const line of lines) {\n if (/^(#EXT)/.test(line)) {\n const tag = this.parseTag_(line);\n if (shaka.hls.ManifestTextParser.MEDIA_PLAYLIST_TAGS.includes(\n tag.name)) {\n playlistTags.push(tag);\n } else {\n // Mark the the EXT-X-MAP tag, and add it to the segment tags\n // following it later.\n if (tag.name == 'EXT-X-MAP') {\n currentMapTag = tag;\n } else if (tag.name == 'EXT-X-PART') {\n partialSegmentTags.push(tag);\n } else if (tag.name == 'EXT-X-PRELOAD-HINT') {\n if (tag.getAttributeValue('TYPE') == 'PART') {\n partialSegmentTags.push(tag);\n } else if (tag.getAttributeValue('TYPE') == 'MAP') {\n // Rename the Preload Hint tag to be a Map tag.\n tag.setName('EXT-X-MAP');\n currentMapTag = tag;\n }\n } else {\n segmentTags.push(tag);\n }\n }\n } else if (shaka.hls.Utils.isComment(line)) {\n // Skip comments.\n } else {\n const verbatimSegmentUri = line.trim();\n // Attach the last parsed EXT-X-MAP tag to the segment.\n if (currentMapTag) {\n segmentTags.push(currentMapTag);\n }\n // The URI appears after all of the tags describing the segment.\n const segment = new shaka.hls.Segment(\n verbatimSegmentUri, segmentTags, partialSegmentTags);\n segments.push(segment);\n segmentTags = [];\n partialSegmentTags = [];\n }\n }\n // After all the partial segments of a regular segment is published,\n // a EXTINF tag and Uri for a regular segment containing the same media\n // content will get published at last.\n // If no EXTINF tag follows the list of partial segment tags at the end,\n // create a segment to wrap the partial segment tags.\n if (partialSegmentTags.length) {\n if (currentMapTag) {\n segmentTags.push(currentMapTag);\n }\n const segment = new shaka.hls.Segment('', segmentTags,\n partialSegmentTags);\n segments.push(segment);\n }\n\n return segments;\n }\n\n /**\n * Parses a string into an HLS Tag object while tracking what id to use next.\n *\n * @param {string} word\n * @return {!shaka.hls.Tag}\n * @private\n */\n parseTag_(word) {\n return shaka.hls.ManifestTextParser.parseTag(this.globalId_++, word);\n }\n\n /**\n * Parses a string into an HLS Tag object.\n *\n * @param {number} id\n * @param {string} word\n * @return {!shaka.hls.Tag}\n */\n static parseTag(id, word) {\n /* HLS tags start with '#EXT'. A tag can have a set of attributes\n (#EXT-:) and/or a value (#EXT-:).\n An attribute's format is 'AttributeName=AttributeValue'.\n The parsing logic goes like this:\n 1. Everything before ':' is a name (we ignore '#').\n 2. Everything after ':' is a list of comma-seprated items,\n 2a. The first item might be a value, if it does not contain '='.\n 2b. Otherwise, items are attributes.\n 3. If there is no \":\", it's a simple tag with no attributes and no value.\n */\n const blocks = word.match(/^#(EXT[^:]*)(?::(.*))?$/);\n if (!blocks) {\n throw new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.MANIFEST,\n shaka.util.Error.Code.INVALID_HLS_TAG,\n word);\n }\n const name = blocks[1];\n const data = blocks[2];\n const attributes = [];\n let value;\n\n if (data) {\n const parser = new shaka.util.TextParser(data);\n let blockAttrs;\n\n // Regex: any number of non-equals-sign characters at the beginning\n // terminated by comma or end of line\n const valueRegex = /^([^,=]+)(?:,|$)/g;\n\n const blockValue = parser.readRegex(valueRegex);\n\n if (blockValue) {\n value = blockValue[1];\n }\n\n // Regex:\n // 1. Key name ([1])\n // 2. Equals sign\n // 3. Either:\n // a. A quoted string (everything up to the next quote, [2])\n // b. An unquoted string\n // (everything up to the next comma or end of line, [3])\n // 4. Either:\n // a. A comma\n // b. End of line\n const attributeRegex = /([^=]+)=(?:\"([^\"]*)\"|([^\",]*))(?:,|$)/g;\n\n while ((blockAttrs = parser.readRegex(attributeRegex))) {\n const attrName = blockAttrs[1];\n const attrValue = blockAttrs[2] || blockAttrs[3];\n const attribute = new shaka.hls.Attribute(attrName, attrValue);\n attributes.push(attribute);\n parser.skipWhitespace();\n }\n }\n\n return new shaka.hls.Tag(id, name, attributes, value);\n }\n};\n\n\n/**\n * HLS tags that only appear on Media Playlists.\n * Used to determine a playlist type.\n *\n * @const {!Array.}\n */\nshaka.hls.ManifestTextParser.MEDIA_PLAYLIST_TAGS = [\n 'EXT-X-TARGETDURATION',\n 'EXT-X-MEDIA-SEQUENCE',\n 'EXT-X-DISCONTINUITY-SEQUENCE',\n 'EXT-X-PLAYLIST-TYPE',\n 'EXT-X-I-FRAMES-ONLY',\n 'EXT-X-ENDLIST',\n 'EXT-X-SERVER-CONTROL',\n 'EXT-X-SKIP',\n 'EXT-X-PART-INF',\n 'EXT-X-DATERANGE',\n];\n\n\n/**\n * HLS tags that only appear on Segments in a Media Playlists.\n * Used to determine the start of the segments info.\n *\n * @const {!Array.}\n */\nshaka.hls.ManifestTextParser.SEGMENT_TAGS = [\n 'EXTINF',\n 'EXT-X-BYTERANGE',\n 'EXT-X-DISCONTINUITY',\n 'EXT-X-PROGRAM-DATE-TIME',\n 'EXT-X-KEY',\n 'EXT-X-DATERANGE',\n 'EXT-X-MAP',\n 'EXT-X-GAP',\n];\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.net.DataUriPlugin');\n\ngoog.require('shaka.log');\ngoog.require('shaka.net.NetworkingEngine');\ngoog.require('shaka.util.AbortableOperation');\ngoog.require('shaka.util.Error');\ngoog.require('shaka.util.StringUtils');\ngoog.require('shaka.util.Uint8ArrayUtils');\n\n\n/**\n * @summary A networking plugin to handle data URIs.\n * @see https://developer.mozilla.org/en-US/docs/Web/HTTP/data_URIs\n * @export\n */\nshaka.net.DataUriPlugin = class {\n /**\n * @param {string} uri\n * @param {shaka.extern.Request} request\n * @param {shaka.net.NetworkingEngine.RequestType} requestType\n * @param {shaka.extern.ProgressUpdated} progressUpdated Called when a\n * progress event happened.\n * @return {!shaka.extern.IAbortableOperation.}\n * @export\n */\n static parse(uri, request, requestType, progressUpdated) {\n try {\n const parsed = shaka.net.DataUriPlugin.parseRaw(uri);\n\n /** @type {shaka.extern.Response} */\n const response = {\n uri: uri,\n originalUri: uri,\n data: parsed.data,\n headers: {\n 'content-type': parsed.contentType,\n },\n };\n\n return shaka.util.AbortableOperation.completed(response);\n } catch (error) {\n return shaka.util.AbortableOperation.failed(error);\n }\n }\n\n /**\n * @param {string} uri\n * @return {{data: BufferSource, contentType: string}}\n */\n static parseRaw(uri) {\n // Extract the scheme.\n const parts = uri.split(':');\n if (parts.length < 2 || parts[0] != 'data') {\n shaka.log.error('Bad data URI, failed to parse scheme');\n throw new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.NETWORK,\n shaka.util.Error.Code.MALFORMED_DATA_URI,\n uri);\n }\n const path = parts.slice(1).join(':');\n\n // Extract the encoding and MIME type (required but can be empty).\n const infoAndData = path.split(',');\n if (infoAndData.length < 2) {\n shaka.log.error('Bad data URI, failed to extract encoding and MIME type');\n throw new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.NETWORK,\n shaka.util.Error.Code.MALFORMED_DATA_URI,\n uri);\n }\n const info = infoAndData[0];\n const dataStr = window.decodeURIComponent(infoAndData.slice(1).join(','));\n\n // The MIME type is always the first thing in the semicolon-separated list\n // of type parameters. It may be blank.\n const typeInfoList = info.split(';');\n const contentType = typeInfoList[0];\n\n // Check for base64 encoding, which is always the last in the\n // semicolon-separated list if present.\n let base64Encoded = false;\n if (typeInfoList.length > 1 &&\n typeInfoList[typeInfoList.length - 1] == 'base64') {\n base64Encoded = true;\n typeInfoList.pop();\n }\n\n // Convert the data.\n /** @type {BufferSource} */\n let data;\n if (base64Encoded) {\n data = shaka.util.Uint8ArrayUtils.fromBase64(dataStr);\n } else {\n data = shaka.util.StringUtils.toUTF8(dataStr);\n }\n\n return {data: data, contentType};\n }\n};\n\n\nshaka.net.NetworkingEngine.registerScheme(\n 'data', shaka.net.DataUriPlugin.parse);\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\n\ngoog.provide('shaka.hls.HlsParser');\n\ngoog.require('goog.Uri');\ngoog.require('goog.asserts');\ngoog.require('shaka.abr.Ewma');\ngoog.require('shaka.hls.ManifestTextParser');\ngoog.require('shaka.hls.Playlist');\ngoog.require('shaka.hls.PlaylistType');\ngoog.require('shaka.hls.Tag');\ngoog.require('shaka.hls.Utils');\ngoog.require('shaka.log');\ngoog.require('shaka.media.InitSegmentReference');\ngoog.require('shaka.media.ManifestParser');\ngoog.require('shaka.media.PresentationTimeline');\ngoog.require('shaka.media.QualityObserver');\ngoog.require('shaka.media.SegmentIndex');\ngoog.require('shaka.media.SegmentReference');\ngoog.require('shaka.net.DataUriPlugin');\ngoog.require('shaka.net.NetworkingEngine');\ngoog.require('shaka.net.NetworkingEngine.PendingRequest');\ngoog.require('shaka.util.ArrayUtils');\ngoog.require('shaka.util.BufferUtils');\ngoog.require('shaka.util.DrmUtils');\ngoog.require('shaka.util.ContentSteeringManager');\ngoog.require('shaka.util.Error');\ngoog.require('shaka.util.EventManager');\ngoog.require('shaka.util.FakeEvent');\ngoog.require('shaka.util.LanguageUtils');\ngoog.require('shaka.util.ManifestParserUtils');\ngoog.require('shaka.util.MimeUtils');\ngoog.require('shaka.util.Networking');\ngoog.require('shaka.util.OperationManager');\ngoog.require('shaka.util.Pssh');\ngoog.require('shaka.media.SegmentUtils');\ngoog.require('shaka.util.Timer');\ngoog.require('shaka.util.TsParser');\ngoog.require('shaka.util.TXml');\ngoog.require('shaka.util.Platform');\ngoog.require('shaka.util.StreamUtils');\ngoog.require('shaka.util.Uint8ArrayUtils');\ngoog.requireType('shaka.hls.Segment');\n\n\n/**\n * HLS parser.\n *\n * @implements {shaka.extern.ManifestParser}\n * @export\n */\nshaka.hls.HlsParser = class {\n /**\n * Creates an Hls Parser object.\n */\n constructor() {\n /** @private {?shaka.extern.ManifestParser.PlayerInterface} */\n this.playerInterface_ = null;\n\n /** @private {?shaka.extern.ManifestConfiguration} */\n this.config_ = null;\n\n /** @private {number} */\n this.globalId_ = 1;\n\n /** @private {!Map.} */\n this.globalVariables_ = new Map();\n\n /**\n * A map from group id to stream infos created from the media tags.\n * @private {!Map.>}\n */\n this.groupIdToStreamInfosMap_ = new Map();\n\n /**\n * For media playlist lazy-loading to work in livestreams, we have to assume\n * that each stream of a type (video, audio, etc) has the same mappings of\n * sequence number to start time.\n * This map stores those relationships.\n * Only used during livestreams; we do not assume that VOD content is\n * aligned in that way.\n * @private {!Map.>}\n */\n this.mediaSequenceToStartTimeByType_ = new Map();\n\n // Set initial maps.\n const ContentType = shaka.util.ManifestParserUtils.ContentType;\n this.mediaSequenceToStartTimeByType_.set(ContentType.VIDEO, new Map());\n this.mediaSequenceToStartTimeByType_.set(ContentType.AUDIO, new Map());\n this.mediaSequenceToStartTimeByType_.set(ContentType.TEXT, new Map());\n this.mediaSequenceToStartTimeByType_.set(ContentType.IMAGE, new Map());\n\n /**\n * The values are strings of the form \"